{"version":3,"file":"selectric-accessible.min.js","sources":["Scripts/commun/lib/plugins/selectric-accessible.js"],"sourcesContent":["/*Plugin selectric am�lior� pour fournir au screen reader une exp�rience plus proche d'un select option natif.\r\n \r\n Rechercher \"accessibilite custom\" pour voir les am�lioration non -inclues dans le plugin de base\r\n */\n\n(function (factory) {\n  /* global module */\n  /* istanbul ignore next */\n\n  if (typeof __cw__define === 'function' && __cw__define.amd) {\n    __cw__define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        } else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n})(function ($) {\n  'use strict';\n\n  var $doc = $(document);\n  var $win = $(window);\n  var pluginName = 'selectric';\n  var classList = 'Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Below Scroll Group GroupLabel';\n  var eventNamespaceSuffix = '.sl';\n  var chars = ['a', 'e', 'i', 'o', 'u', 'n', 'c', 'y'];\n  var diacritics = [/[\\xE0-\\xE5]/g,\n  // a\n  /[\\xE8-\\xEB]/g,\n  // e\n  /[\\xEC-\\xEF]/g,\n  // i\n  /[\\xF2-\\xF6]/g,\n  // o\n  /[\\xF9-\\xFC]/g,\n  // u\n  /[\\xF1]/g,\n  // n\n  /[\\xE7]/g,\n  // c\n  /[\\xFD-\\xFF]/g // y\n  ];\n\n  //accessibilite custom\n\n  var lang = document.documentElement.lang;\n\n  //fin accessibilite custom\n\n  /**\r\n   * Create an instance of Selectric\r\n   *\r\n   * @constructor\r\n   * @param {Node} element - The &lt;select&gt; element\r\n   * @param {object}  opts - Options\r\n   */\n  var Selectric = function Selectric(element, opts) {\n    var _this = this;\n    _this.element = element;\n    _this.$element = $(element);\n    _this.state = {\n      multiple: !!_this.$element.attr('multiple'),\n      enabled: false,\n      opened: false,\n      currValue: -1,\n      selectedIdx: -1,\n      highlightedIdx: -1\n    };\n    _this.eventTriggers = {\n      open: _this.open,\n      close: _this.close,\n      destroy: _this.destroy,\n      refresh: _this.refresh,\n      init: _this.init\n    };\n    _this.init(opts);\n  };\n  Selectric.prototype = {\n    utils: {\n      /**\r\n       * Detect mobile browser\r\n       *\r\n       * @return {boolean}\r\n       */\n      isMobile: function isMobile() {\n        return /android|ip(hone|od|ad)/i.test(navigator.userAgent);\n      },\n      /**\r\n       * Escape especial characters in string (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\r\n       *\r\n       * @param  {string} str - The string to be escaped\r\n       * @return {string}       The string with the special characters escaped\r\n       */\n      escapeRegExp: function escapeRegExp(str) {\n        return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n      },\n      /**\r\n       * Replace diacritics\r\n       *\r\n       * @param  {string} str - The string to replace the diacritics\r\n       * @return {string}       The string with diacritics replaced with ascii characters\r\n       */\n      replaceDiacritics: function replaceDiacritics(str) {\n        var k = diacritics.length;\n        while (k--) {\n          str = str.toLowerCase().replace(diacritics[k], chars[k]);\n        }\n        return str;\n      },\n      /**\r\n       * Format string\r\n       * https://gist.github.com/atesgoral/984375\r\n       *\r\n       * @param  {string} f - String to be formated\r\n       * @return {string}     String formated\r\n       */\n      format: function format(f) {\n        var a = arguments; // store outer arguments\n        return ('' + f // force format specifier to String\n        ).replace(\n        // replace tokens in format specifier\n        /\\{(?:(\\d+)|(\\w+))\\}/g,\n        // match {token} references\n        function (s,\n        // the matched string (ignored)\n        i,\n        // an argument index\n        p // a property name\n        ) {\n          return p && a[1] // if property name and first argument exist\n          ? a[1][p] // return property from first argument\n          : a[i]; // assume argument index and return i-th argument\n        });\n      },\n      /**\r\n       * Get the next enabled item in the options list.\r\n       *\r\n       * @param  {object} selectItems - The options object.\r\n       * @param  {number}    selected - Index of the currently selected option.\r\n       * @return {object}               The next enabled item.\r\n       */\n      nextEnabledItem: function nextEnabledItem(selectItems, selected) {\n        while (selectItems[selected = (selected + 1) % selectItems.length].disabled) {\n          // empty\n        }\n        return selected;\n      },\n      /**\r\n       * Get the previous enabled item in the options list.\r\n       *\r\n       * @param  {object} selectItems - The options object.\r\n       * @param  {number}    selected - Index of the currently selected option.\r\n       * @return {object}               The previous enabled item.\r\n       */\n      previousEnabledItem: function previousEnabledItem(selectItems, selected) {\n        while (selectItems[selected = (selected > 0 ? selected : selectItems.length) - 1].disabled) {\n          // empty\n        }\n        return selected;\n      },\n      /**\r\n       * Transform camelCase string to dash-case.\r\n       *\r\n       * @param  {string} str - The camelCased string.\r\n       * @return {string}       The string transformed to dash-case.\r\n       */\n      toDash: function toDash(str) {\n        return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n      },\n      /**\r\n       * Calls the events registered with function name.\r\n       *\r\n       * @param {string}    fn - The name of the function.\r\n       * @param {number} scope - Scope that should be set on the function.\r\n       */\n      triggerCallback: function triggerCallback(fn, scope) {\n        var elm = scope.element;\n        var func = scope.options['on' + fn];\n        var args = [elm].concat([].slice.call(arguments).slice(1));\n        if ($.isFunction(func)) {\n          func.apply(elm, args);\n        }\n        $(elm).trigger(pluginName + '-' + this.toDash(fn), args);\n      },\n      /**\r\n       * Transform array list to concatenated string and remove empty values\r\n       * @param  {array} arr - Class list\r\n       * @return {string}      Concatenated string\r\n       */\n      arrayToClassname: function arrayToClassname(arr) {\n        var newArr = $.grep(arr, function (item) {\n          return !!item;\n        });\n        return $.trim(newArr.join(' '));\n      }\n    },\n    /** Initializes */\n    init: function init(opts) {\n      var _this = this;\n\n      // Set options\n      _this.options = $.extend(true, {}, $.fn[pluginName].defaults, _this.options, opts);\n      _this.utils.triggerCallback('BeforeInit', _this);\n\n      // Preserve data\n      _this.destroy(true);\n\n      // Disable on mobile browsers\n      if (_this.options.disableOnMobile && _this.utils.isMobile()) {\n        _this.disableOnMobile = true;\n        return;\n      }\n\n      // Get classes\n      _this.classes = _this.getClassNames();\n\n      // Create elements\n      var input = $('<input/>', {\n        'class': _this.classes.input,\n        'role': 'listbox',\n        'readonly': _this.utils.isMobile()\n      });\n      var items = $('<div/>', {\n        'class': _this.classes.items,\n        'tabindex': 0\n      });\n      var itemsScroll = $('<div/>', {\n        'class': _this.classes.scroll\n      });\n      var wrapper = $('<div/>', {\n        'class': _this.classes.prefix,\n        'html': _this.options.arrowButtonMarkup\n      });\n      var label = $('<span/>', {\n        'class': 'label'\n      });\n      var outerWrapper = _this.$element.wrap('<div/>').parent().append(wrapper.prepend(label), items, input);\n      var hideSelectWrapper = $('<div/>', {\n        'class': _this.classes.hideselect\n      });\n      _this.elements = {\n        input: input,\n        items: items,\n        itemsScroll: itemsScroll,\n        wrapper: wrapper,\n        label: label,\n        outerWrapper: outerWrapper\n      };\n      if (_this.options.nativeOnMobile && _this.utils.isMobile()) {\n        _this.elements.input = undefined;\n        hideSelectWrapper.addClass(_this.classes.prefix + '-is-native');\n        _this.$element.on('change', function () {\n          _this.refresh();\n        });\n      }\n      _this.$element.on(_this.eventTriggers).wrap(hideSelectWrapper);\n      _this.originalTabindex = _this.$element.prop('tabindex');\n      _this.$element.prop('tabindex', -1);\n      _this.populate();\n      _this.activate();\n      _this.utils.triggerCallback('Init', _this);\n    },\n    /** Activates the plugin */\n    activate: function activate() {\n      var _this = this;\n      var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n      var originalWidth = _this.$element.width();\n      hiddenChildren.removeClass(_this.classes.tempshow);\n      _this.utils.triggerCallback('BeforeActivate', _this);\n      _this.elements.outerWrapper.prop('class', _this.utils.arrayToClassname([_this.classes.wrapper, _this.$element.prop('class').replace(/\\S+/g, _this.classes.prefix + '-$&'), _this.options.responsive ? _this.classes.responsive : '']));\n      if (_this.options.inheritOriginalWidth && originalWidth > 0) {\n        _this.elements.outerWrapper.width(originalWidth);\n      }\n      _this.unbindEvents();\n      if (!_this.$element.prop('disabled')) {\n        _this.state.enabled = true;\n\n        // Not disabled, so... Removing disabled class\n        _this.elements.outerWrapper.removeClass(_this.classes.disabled);\n\n        // Remove styles from items box\n        // Fix incorrect height when refreshed is triggered with fewer options\n        _this.$li = _this.elements.items.removeAttr('style').find('li');\n        _this.bindEvents();\n      } else {\n        _this.elements.outerWrapper.addClass(_this.classes.disabled);\n        if (_this.elements.input) {\n          _this.elements.input.prop('disabled', true);\n        }\n      }\n      _this.utils.triggerCallback('Activate', _this);\n\n      //accessibilite custom\n\n      //Initialisation\n\n      var selectricRoot = $(_this.elements.wrapper).parent();\n      var labelAria = selectricRoot.find('.selectric .label').text().trim();\n      selectricRoot.find('.selectric-input').attr('aria-label', labelAria);\n      if (selectricRoot.find('select').attr('data-rule-required') == 'true') {\n        selectricRoot.find('.selectric-input').attr('data-rule-selectricRequired', true);\n      }\n\n      //fin accessibilite custom\n    },\n    /**\r\n     * Generate classNames for elements\r\n     *\r\n     * @return {object} Classes object\r\n     */\n    getClassNames: function getClassNames() {\n      var _this = this;\n      var customClass = _this.options.customClass;\n      var classesObj = {};\n      $.each(classList.split(' '), function (i, currClass) {\n        var c = customClass.prefix + currClass;\n        classesObj[currClass.toLowerCase()] = customClass.camelCase ? c : _this.utils.toDash(c);\n      });\n      classesObj.prefix = customClass.prefix;\n      return classesObj;\n    },\n    /** Set the label text */\n    setLabel: function setLabel() {\n      var _this = this;\n      var labelBuilder = _this.options.labelBuilder;\n      if (_this.state.multiple) {\n        // Make sure currentValues is an array\n        var currentValues = $.isArray(_this.state.currValue) ? _this.state.currValue : [_this.state.currValue];\n        // I'm not happy with this, but currentValues can be an empty\n        // array and we need to fallback to the default option.\n        currentValues = currentValues.length === 0 ? [0] : currentValues;\n        var labelMarkup = $.map(currentValues, function (value) {\n          return $.grep(_this.lookupItems, function (item) {\n            return item.index === value;\n          })[0]; // we don't want nested arrays here\n        });\n        labelMarkup = $.grep(labelMarkup, function (item) {\n          // Hide default (please choose) if more then one element were selected.\n          // If no option value were given value is set to option text by default\n          if (labelMarkup.length > 1 || labelMarkup.length === 0) {\n            return $.trim(item.value) !== '';\n          }\n          return item;\n        });\n        labelMarkup = $.map(labelMarkup, function (item) {\n          return $.isFunction(labelBuilder) ? labelBuilder(item) : _this.utils.format(labelBuilder, item);\n        });\n\n        // Limit the amount of selected values shown in label\n        if (_this.options.multiple.maxLabelEntries) {\n          if (labelMarkup.length >= _this.options.multiple.maxLabelEntries + 1) {\n            labelMarkup = labelMarkup.slice(0, _this.options.multiple.maxLabelEntries);\n            labelMarkup.push($.isFunction(labelBuilder) ? labelBuilder({\n              text: '...'\n            }) : _this.utils.format(labelBuilder, {\n              text: '...'\n            }));\n          } else {\n            labelMarkup.slice(labelMarkup.length - 1);\n          }\n        }\n        _this.elements.label.html(labelMarkup.join(_this.options.multiple.separator));\n      } else {\n        var currItem = _this.lookupItems[_this.state.currValue];\n        _this.elements.label.html($.isFunction(labelBuilder) ? labelBuilder(currItem) : _this.utils.format(labelBuilder, currItem));\n      }\n    },\n    /** Get and save the available options */\n    populate: function populate() {\n      var _this = this;\n      var $options = _this.$element.children();\n      var $justOptions = _this.$element.find('option');\n      var $selected = $justOptions.filter(':selected');\n      var selectedIndex = $justOptions.index($selected);\n      var currIndex = 0;\n      var emptyValue = _this.state.multiple ? [] : 0;\n      if ($selected.length > 1 && _this.state.multiple) {\n        selectedIndex = [];\n        $selected.each(function () {\n          selectedIndex.push($(this).index());\n        });\n      }\n      _this.state.currValue = ~selectedIndex ? selectedIndex : emptyValue;\n      _this.state.selectedIdx = _this.state.currValue;\n      _this.state.highlightedIdx = _this.state.currValue;\n      _this.items = [];\n      _this.lookupItems = [];\n      if ($options.length) {\n        // Build options markup\n        $options.each(function (i) {\n          var $elm = $(this);\n          if ($elm.is('optgroup')) {\n            var optionsGroup = {\n              element: $elm,\n              label: $elm.prop('label'),\n              groupDisabled: $elm.prop('disabled'),\n              items: []\n            };\n            $elm.children().each(function (i) {\n              var $elm = $(this);\n              optionsGroup.items[i] = _this.getItemData(currIndex, $elm, optionsGroup.groupDisabled || $elm.prop('disabled'));\n              _this.lookupItems[currIndex] = optionsGroup.items[i];\n              currIndex++;\n            });\n            _this.items[i] = optionsGroup;\n          } else {\n            _this.items[i] = _this.getItemData(currIndex, $elm, $elm.prop('disabled'));\n            _this.lookupItems[currIndex] = _this.items[i];\n            currIndex++;\n          }\n        });\n        _this.setLabel();\n        _this.elements.items.append(_this.elements.itemsScroll.html(_this.getItemsMarkup(_this.items)));\n      }\n    },\n    /**\r\n     * Generate items object data\r\n     * @param  {integer} index      - Current item index\r\n     * @param  {node}    $elm       - Current element node\r\n     * @param  {boolean} isDisabled - Current element disabled state\r\n     * @return {object}               Item object\r\n     */\n    getItemData: function getItemData(index, $elm, isDisabled) {\n      var _this = this;\n      return {\n        index: index,\n        element: $elm,\n        value: $elm.val(),\n        className: $elm.prop('class'),\n        text: $elm.html(),\n        slug: $.trim(_this.utils.replaceDiacritics($elm.html())),\n        alt: $elm.attr('data-alt'),\n        selected: $elm.prop('selected'),\n        disabled: isDisabled\n      };\n    },\n    /**\r\n     * Generate options markup\r\n     *\r\n     * @param  {object} items - Object containing all available options\r\n     * @return {string}         HTML for the options box\r\n     */\n    getItemsMarkup: function getItemsMarkup(items) {\n      var _this = this;\n      var markup = '<ul>';\n      if ($.isFunction(_this.options.listBuilder) && _this.options.listBuilder) {\n        items = _this.options.listBuilder(items);\n      }\n      $.each(items, function (i, elm) {\n        if (elm.label !== undefined) {\n          markup += _this.utils.format('<ul class=\"{1}\"><li class=\"{2}\">{3}</li>', _this.utils.arrayToClassname([_this.classes.group, elm.groupDisabled ? 'disabled' : '', elm.element.prop('class')]), _this.classes.grouplabel, elm.element.prop('label'));\n          $.each(elm.items, function (i, elm) {\n            markup += _this.getItemMarkup(elm.index, elm);\n          });\n          markup += '</ul>';\n        } else {\n          markup += _this.getItemMarkup(elm.index, elm);\n        }\n      });\n      return markup + '</ul>';\n    },\n    /**\r\n     * Generate every option markup\r\n     *\r\n     * @param  {number} index    - Index of current item\r\n     * @param  {object} itemData - Current item\r\n     * @return {string}            HTML for the option\r\n     */\n    getItemMarkup: function getItemMarkup(index, itemData) {\n      var _this = this;\n      var itemBuilder = _this.options.optionsItemBuilder;\n      // limit access to item data to provide a simple interface\n      // to most relevant options.\n      var filteredItemData = {\n        value: itemData.value,\n        text: itemData.text,\n        slug: itemData.slug,\n        index: itemData.index\n      };\n      return _this.utils.format('<li data-index=\"{1}\" class=\"{2}\">{3}</li>', index, _this.utils.arrayToClassname([itemData.className, index === _this.items.length - 1 ? 'last' : '', itemData.disabled ? 'disabled' : '', itemData.selected ? 'selected' : '']), $.isFunction(itemBuilder) ? _this.utils.format(itemBuilder(itemData, this.$element, index), itemData) : _this.utils.format(itemBuilder, filteredItemData));\n    },\n    /** Remove events on the elements */\n    unbindEvents: function unbindEvents() {\n      var _this = this;\n      _this.elements.wrapper.add(_this.$element).add(_this.elements.outerWrapper).add(_this.elements.input).off(eventNamespaceSuffix);\n    },\n    /** Bind events on the elements */\n    bindEvents: function bindEvents() {\n      var _this = this;\n      _this.elements.outerWrapper.on('mouseenter' + eventNamespaceSuffix + ' mouseleave' + eventNamespaceSuffix, function (e) {\n        $(this).toggleClass(_this.classes.hover, e.type === 'mouseenter');\n\n        // Delay close effect when openOnHover is true\n        if (_this.options.openOnHover) {\n          clearTimeout(_this.closeTimer);\n          if (e.type === 'mouseleave') {\n            _this.closeTimer = setTimeout($.proxy(_this.close, _this), _this.options.hoverIntentTimeout);\n          } else {\n            _this.open();\n          }\n        }\n      });\n\n      // Toggle open/close\n      _this.elements.wrapper.on('click' + eventNamespaceSuffix, function (e) {\n        _this.state.opened ? _this.close() : _this.open(e);\n      });\n\n      // Translate original element focus event to dummy input.\n      // Disabled on mobile devices because the default option list isn't\n      // shown due the fact that hidden input gets focused\n      if (!(_this.options.nativeOnMobile && _this.utils.isMobile())) {\n        _this.$element.on('focus' + eventNamespaceSuffix, function () {\n          _this.elements.input.focus();\n        });\n        _this.elements.input.prop({\n          tabindex: _this.originalTabindex,\n          disabled: false\n        }).on('keydown' + eventNamespaceSuffix, $.proxy(_this.handleKeys, _this)).on('focusin' + eventNamespaceSuffix, function (e) {\n          _this.elements.outerWrapper.addClass(_this.classes.focus);\n\n          // Prevent the flicker when focusing out and back again in the browser window\n          _this.elements.input.one('blur', function () {\n            _this.elements.input.blur();\n          });\n          if (_this.options.openOnFocus && !_this.state.opened) {\n            _this.open(e);\n          }\n        }).on('focusout' + eventNamespaceSuffix, function () {\n          _this.elements.outerWrapper.removeClass(_this.classes.focus);\n        }).on('input propertychange', function () {\n          var val = _this.elements.input.val();\n          var searchRegExp = new RegExp('^' + _this.utils.escapeRegExp(val), 'i');\n\n          // Clear search\n          clearTimeout(_this.resetStr);\n          _this.resetStr = setTimeout(function () {\n            _this.elements.input.val('');\n          }, _this.options.keySearchTimeout);\n          if (val.length) {\n            // Search in select options\n            $.each(_this.items, function (i, elm) {\n              if (elm.disabled) {\n                return;\n              }\n              if (searchRegExp.test(elm.text) || searchRegExp.test(elm.slug)) {\n                _this.highlight(i);\n                return false;\n              }\n              if (!elm.alt) {\n                return;\n              }\n              var altItems = elm.alt.split('|');\n              for (var ai = 0; ai < altItems.length; ai++) {\n                if (!altItems[ai]) {\n                  break;\n                }\n                if (searchRegExp.test(altItems[ai].trim())) {\n                  _this.highlight(i);\n                  return false;\n                }\n              }\n            });\n          }\n        });\n      }\n      _this.$li.on({\n        // Prevent <input> blur on Chrome\n        mousedown: function mousedown(e) {\n          e.preventDefault();\n          e.stopPropagation();\n        },\n        click: function click() {\n          _this.select($(this).data('index'));\n\n          // Chrome doesn't close options box if select is wrapped with a label\n          // We need to 'return false' to avoid that\n          return false;\n        }\n      });\n    },\n    /**\r\n     * Behavior when keyboard keys is pressed\r\n     *\r\n     * @param {object} e - Event object\r\n     */\n    handleKeys: function handleKeys(e) {\n      var _this = this;\n      var key = e.which;\n      var keys = _this.options.keys;\n      var isPrevKey = $.inArray(key, keys.previous) > -1;\n      var isNextKey = $.inArray(key, keys.next) > -1;\n      var isSelectKey = $.inArray(key, keys.select) > -1;\n      var isOpenKey = $.inArray(key, keys.open) > -1;\n      var idx = _this.state.highlightedIdx;\n      var isFirstOrLastItem = isPrevKey && idx === 0 || isNextKey && idx + 1 === _this.items.length;\n      var goToItem = 0;\n\n      // Enter / Space\n      if (key === 13 || key === 32) {\n        e.preventDefault();\n      }\n\n      // If it's a directional key\n      if (isPrevKey || isNextKey) {\n        if (!_this.options.allowWrap && isFirstOrLastItem) {\n          return;\n        }\n        if (isPrevKey) {\n          goToItem = _this.utils.previousEnabledItem(_this.lookupItems, idx);\n        }\n        if (isNextKey) {\n          goToItem = _this.utils.nextEnabledItem(_this.lookupItems, idx);\n        }\n        _this.highlight(goToItem);\n      }\n\n      // Tab / Enter / ESC\n      if (isSelectKey && _this.state.opened) {\n        _this.select(idx);\n        if (!_this.state.multiple || !_this.options.multiple.keepMenuOpen) {\n          _this.close();\n        }\n        return;\n      }\n\n      // Space / Enter / Left / Up / Right / Down\n      if (isOpenKey && !_this.state.opened) {\n        _this.open();\n      }\n    },\n    /** Update the items object */\n    refresh: function refresh() {\n      var _this = this;\n      _this.populate();\n      _this.activate();\n      _this.utils.triggerCallback('Refresh', _this);\n    },\n    /** Set options box width/height */\n    setOptionsDimensions: function setOptionsDimensions() {\n      var _this = this;\n\n      // Calculate options box height\n      // Set a temporary class on the hidden parent of the element\n      var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n      var maxHeight = _this.options.maxHeight;\n      var itemsWidth = _this.elements.items.outerWidth();\n      var wrapperWidth = _this.elements.wrapper.outerWidth() - (itemsWidth - _this.elements.items.width());\n\n      // Set the dimensions, minimum is wrapper width, expand for long items if option is true\n      if (!_this.options.expandToItemText || wrapperWidth > itemsWidth) {\n        _this.finalWidth = wrapperWidth;\n      } else {\n        // Make sure the scrollbar width is included\n        _this.elements.items.css('overflow', 'scroll');\n\n        // Set a really long width for _this.elements.outerWrapper\n        _this.elements.outerWrapper.width(9e4);\n        _this.finalWidth = _this.elements.items.width();\n        // Set scroll bar to auto\n        _this.elements.items.css('overflow', '');\n        _this.elements.outerWrapper.width('');\n      }\n      _this.elements.items.width(_this.finalWidth).height() > maxHeight && _this.elements.items.height(maxHeight);\n\n      // Remove the temporary class\n      hiddenChildren.removeClass(_this.classes.tempshow);\n    },\n    /** Detect if the options box is inside the window */\n    isInViewport: function isInViewport() {\n      var _this = this;\n      if (_this.options.forceRenderAbove === true) {\n        _this.elements.outerWrapper.addClass(_this.classes.above);\n      } else if (_this.options.forceRenderBelow === true) {\n        _this.elements.outerWrapper.addClass(_this.classes.below);\n      } else {\n        var scrollTop = $win.scrollTop();\n        var winHeight = $win.height();\n        var uiPosX = _this.elements.outerWrapper.offset().top;\n        var uiHeight = _this.elements.outerWrapper.outerHeight();\n        var fitsDown = uiPosX + uiHeight + _this.itemsHeight <= scrollTop + winHeight;\n        var fitsAbove = uiPosX - _this.itemsHeight > scrollTop;\n\n        // If it does not fit below, only render it\n        // above it fit's there.\n        // It's acceptable that the user needs to\n        // scroll the viewport to see the cut off UI\n        var renderAbove = !fitsDown && fitsAbove;\n        var renderBelow = !renderAbove;\n        _this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove);\n        _this.elements.outerWrapper.toggleClass(_this.classes.below, renderBelow);\n      }\n    },\n    /**\r\n     * Detect if currently selected option is visible and scroll the options box to show it\r\n     *\r\n     * @param {Number|Array} index - Index of the selected items\r\n     */\n    detectItemVisibility: function detectItemVisibility(index) {\n      var _this = this;\n      var $filteredLi = _this.$li.filter('[data-index]');\n      if (_this.state.multiple) {\n        // If index is an array, we can assume a multiple select and we\n        // want to scroll to the uppermost selected item!\n        // Math.min.apply(Math, index) returns the lowest entry in an Array.\n        index = $.isArray(index) && index.length === 0 ? 0 : index;\n        index = $.isArray(index) ? Math.min.apply(Math, index) : index;\n      }\n      var liHeight = $filteredLi.eq(index).outerHeight();\n      var liTop = $filteredLi[index].offsetTop;\n      var itemsScrollTop = _this.elements.itemsScroll.scrollTop();\n      var scrollT = liTop + liHeight * 2;\n      _this.elements.itemsScroll.scrollTop(scrollT > itemsScrollTop + _this.itemsHeight ? scrollT - _this.itemsHeight : liTop - liHeight < itemsScrollTop ? liTop - liHeight : itemsScrollTop);\n    },\n    /**\r\n     * Open the select options box\r\n     *\r\n     * @param {Event} e - Event\r\n     */\n    open: function open(e) {\n      var _this = this;\n      if (_this.options.nativeOnMobile && _this.utils.isMobile()) {\n        return false;\n      }\n      _this.utils.triggerCallback('BeforeOpen', _this);\n      if (e) {\n        e.preventDefault();\n        if (_this.options.stopPropagation) {\n          e.stopPropagation();\n        }\n      }\n      if (_this.state.enabled) {\n        _this.setOptionsDimensions();\n\n        // Find any other opened instances of select and close it\n        $('.' + _this.classes.hideselect, '.' + _this.classes.open).children()[pluginName]('close');\n        _this.state.opened = true;\n        _this.itemsHeight = _this.elements.items.outerHeight();\n        _this.itemsInnerHeight = _this.elements.items.height();\n\n        // Toggle options box visibility\n        _this.elements.outerWrapper.addClass(_this.classes.open);\n\n        // Give dummy input focus\n        _this.elements.input.val('');\n        if (e && e.type !== 'focusin') {\n          _this.elements.input.focus();\n        }\n\n        // Delayed binds events on Document to make label clicks work\n        setTimeout(function () {\n          $doc.on('click' + eventNamespaceSuffix, $.proxy(_this.close, _this)).on('scroll' + eventNamespaceSuffix, $.proxy(_this.isInViewport, _this));\n        }, 1);\n        _this.isInViewport();\n\n        // Prevent window scroll when using mouse wheel inside items box\n        if (_this.options.preventWindowScroll) {\n          /* istanbul ignore next */\n          $doc.on('mousewheel' + eventNamespaceSuffix + ' DOMMouseScroll' + eventNamespaceSuffix, '.' + _this.classes.scroll, function (e) {\n            var orgEvent = e.originalEvent;\n            var scrollTop = $(this).scrollTop();\n            var deltaY = 0;\n            if ('detail' in orgEvent) {\n              deltaY = orgEvent.detail * -1;\n            }\n            if ('wheelDelta' in orgEvent) {\n              deltaY = orgEvent.wheelDelta;\n            }\n            if ('wheelDeltaY' in orgEvent) {\n              deltaY = orgEvent.wheelDeltaY;\n            }\n            if ('deltaY' in orgEvent) {\n              deltaY = orgEvent.deltaY * -1;\n            }\n            if (scrollTop === this.scrollHeight - _this.itemsInnerHeight && deltaY < 0 || scrollTop === 0 && deltaY > 0) {\n              e.preventDefault();\n            }\n          });\n        }\n        _this.detectItemVisibility(_this.state.selectedIdx);\n        _this.highlight(_this.state.multiple ? -1 : _this.state.selectedIdx);\n        _this.utils.triggerCallback('Open', _this);\n      }\n    },\n    /** Close the select options box */\n    close: function close() {\n      var _this = this;\n      _this.utils.triggerCallback('BeforeClose', _this);\n\n      // Remove custom events on document\n      $doc.off(eventNamespaceSuffix);\n\n      // Remove visible class to hide options box\n      _this.elements.outerWrapper.removeClass(_this.classes.open);\n      _this.state.opened = false;\n      _this.utils.triggerCallback('Close', _this);\n    },\n    /** Select current option and change the label */\n    change: function change() {\n      var _this = this;\n      _this.utils.triggerCallback('BeforeChange', _this);\n      if (_this.state.multiple) {\n        // Reset old selected\n        $.each(_this.lookupItems, function (idx) {\n          _this.lookupItems[idx].selected = false;\n          _this.$element.find('option').prop('selected', false);\n        });\n\n        // Set new selected\n        $.each(_this.state.selectedIdx, function (idx, value) {\n          _this.lookupItems[value].selected = true;\n          _this.$element.find('option').eq(value).prop('selected', true);\n        });\n        _this.state.currValue = _this.state.selectedIdx;\n        _this.setLabel();\n        _this.utils.triggerCallback('Change', _this);\n      } else if (_this.state.currValue !== _this.state.selectedIdx) {\n        // Apply changed value to original select\n        _this.$element.prop('selectedIndex', _this.state.currValue = _this.state.selectedIdx).data('value', _this.lookupItems[_this.state.selectedIdx].text);\n\n        // Change label text\n        _this.setLabel();\n        if ($(this.element).parents('form').length > 0) {\n          $(this.element).valid();\n          $(this.element).parents('.selectric-wrapper').find('.selectric-input').valid();\n        }\n        _this.utils.triggerCallback('Change', _this);\n      }\n    },\n    /**\r\n     * Highlight option\r\n     * @param {number} index - Index of the options that will be highlighted\r\n     */\n    highlight: function highlight(index) {\n      var _this = this;\n      var $filteredLi = _this.$li.filter('[data-index]').removeClass('highlighted');\n      _this.utils.triggerCallback('BeforeHighlight', _this);\n\n      // Parameter index is required and should not be a disabled item\n      if (index === undefined || index === -1 || _this.lookupItems[index].disabled) {\n        return;\n      }\n      $filteredLi.eq(_this.state.highlightedIdx = index).addClass('highlighted');\n\n      //accessibilite custom\n      //Navigation clavier\n\n      var selectricRoot = $(_this.elements.wrapper).parent();\n      var surTrad = lang == 'fr' ? ' sur ' : ' of ';\n      var increment = $filteredLi.first().hasClass('disabled') == true ? 0 : 1;\n      var totalIndex = $filteredLi.length;\n      var currentIndex = index + increment;\n      var textIndex = currentIndex + surTrad + totalIndex;\n      var textAria = $filteredLi.eq(index).text().trim() + ' ' + textIndex;\n      selectricRoot.find('.selectric-input').removeAttr('aria-label').val(textAria);\n\n      //fin accessibilite custom\n\n      _this.detectItemVisibility(index);\n      _this.utils.triggerCallback('Highlight', _this);\n    },\n    /**\r\n     * Select option\r\n     *\r\n     * @param {number} index - Index of the option that will be selected\r\n     */\n    select: function select(index) {\n      var _this = this;\n      var $filteredLi = _this.$li.filter('[data-index]');\n      _this.utils.triggerCallback('BeforeSelect', _this, index);\n\n      // Parameter index is required and should not be a disabled item\n      if (index === undefined || index === -1 || _this.lookupItems[index].disabled) {\n        return;\n      }\n      if (_this.state.multiple) {\n        // Make sure selectedIdx is an array\n        _this.state.selectedIdx = $.isArray(_this.state.selectedIdx) ? _this.state.selectedIdx : [_this.state.selectedIdx];\n        var hasSelectedIndex = $.inArray(index, _this.state.selectedIdx);\n        if (hasSelectedIndex !== -1) {\n          _this.state.selectedIdx.splice(hasSelectedIndex, 1);\n        } else {\n          _this.state.selectedIdx.push(index);\n        }\n        $filteredLi.removeClass('selected').filter(function (index) {\n          return $.inArray(index, _this.state.selectedIdx) !== -1;\n        }).addClass('selected');\n      } else {\n        $filteredLi.removeClass('selected').eq(_this.state.selectedIdx = index).addClass('selected');\n      }\n      if (!_this.state.multiple || !_this.options.multiple.keepMenuOpen) {\n        _this.close();\n      }\n      _this.change();\n\n      //accessibilite custom\n\n      var textAria = $filteredLi.eq(index).text().trim();\n      var selectricRoot = $(_this.elements.wrapper).parent();\n      selectricRoot.find('.selectric-input').attr('aria-label', textAria);\n\n      //fin accessibilite custom\n\n      _this.utils.triggerCallback('Select', _this, index);\n    },\n    /**\r\n     * Unbind and remove\r\n     *\r\n     * @param {boolean} preserveData - Check if the data on the element should be removed too\r\n     */\n    destroy: function destroy(preserveData) {\n      var _this = this;\n      if (_this.state && _this.state.enabled) {\n        _this.elements.items.add(_this.elements.wrapper).add(_this.elements.input).remove();\n        if (!preserveData) {\n          _this.$element.removeData(pluginName).removeData('value');\n        }\n        _this.$element.prop('tabindex', _this.originalTabindex).off(eventNamespaceSuffix).off(_this.eventTriggers).unwrap().unwrap();\n        _this.state.enabled = false;\n      }\n    }\n  };\n\n  // A really lightweight plugin wrapper around the constructor,\n  // preventing against multiple instantiations\n  $.fn[pluginName] = function (args) {\n    return this.each(function () {\n      var data = $.data(this, pluginName);\n      if (data && !data.disableOnMobile) {\n        typeof args === 'string' && data[args] ? data[args]() : data.init(args);\n      } else {\n        $.data(this, pluginName, new Selectric(this, args));\n      }\n    });\n  };\n\n  /**\r\n   * Default plugin options\r\n   *\r\n   * @type {object}\r\n   */\n  $.fn[pluginName].defaults = {\n    onChange: function onChange(elm) {\n      $(elm).change();\n    },\n    maxHeight: 300,\n    keySearchTimeout: 500,\n    arrowButtonMarkup: '<b class=\"button\">&#x25be;</b>',\n    disableOnMobile: false,\n    nativeOnMobile: true,\n    openOnFocus: true,\n    openOnHover: false,\n    hoverIntentTimeout: 500,\n    expandToItemText: false,\n    responsive: false,\n    preventWindowScroll: true,\n    inheritOriginalWidth: false,\n    allowWrap: true,\n    forceRenderAbove: false,\n    forceRenderBelow: false,\n    stopPropagation: true,\n    optionsItemBuilder: '{text}',\n    // function(itemData, element, index)\n    labelBuilder: '{text}',\n    // function(currItem)\n    listBuilder: false,\n    // function(items)\n    keys: {\n      previous: [37, 38],\n      // Left / Up\n      next: [39, 40],\n      // Right / Down\n      select: [9, 13, 27],\n      // Tab / Enter / Escape\n      open: [13, 32, 37, 38, 39, 40],\n      // Enter / Space / Left / Up / Right / Down\n      close: [9, 27] // Tab / Escape\n    },\n    customClass: {\n      prefix: pluginName,\n      camelCase: false\n    },\n    multiple: {\n      separator: ', ',\n      keepMenuOpen: true,\n      maxLabelEntries: false\n    }\n  };\n});"],"names":["factory","__cw__define","amd","module","exports","root","jQuery","undefined","window","require","$","Selectric","element","opts","_this","this","$element","state","multiple","attr","enabled","opened","currValue","selectedIdx","highlightedIdx","eventTriggers","open","close","destroy","refresh","init","$doc","document","$win","pluginName","eventNamespaceSuffix","chars","diacritics","lang","documentElement","prototype","utils","isMobile","test","navigator","userAgent","escapeRegExp","str","replace","replaceDiacritics","k","length","toLowerCase","format","f","a","arguments","s","i","p","nextEnabledItem","selectItems","selected","disabled","previousEnabledItem","toDash","triggerCallback","fn","scope","elm","func","options","args","concat","slice","call","isFunction","apply","trigger","arrayToClassname","arr","newArr","grep","item","trim","join","items","itemsScroll","wrapper","label","outerWrapper","hideSelectWrapper","extend","defaults","disableOnMobile","classes","getClassNames","input","class","role","readonly","tabindex","scroll","prefix","html","arrowButtonMarkup","wrap","parent","append","prepend","hideselect","elements","nativeOnMobile","addClass","on","originalTabindex","prop","populate","activate","hiddenChildren","closest","children","tempshow","originalWidth","width","selectricRoot","removeClass","responsive","inheritOriginalWidth","unbindEvents","$li","removeAttr","find","bindEvents","labelAria","text","customClass","classesObj","each","split","currClass","c","camelCase","setLabel","labelMarkup","currItem","labelBuilder","currentValues","isArray","map","value","lookupItems","index","maxLabelEntries","push","separator","$options","$justOptions","$selected","filter","selectedIndex","currIndex","emptyValue","optionsGroup","$elm","is","groupDisabled","getItemData","getItemsMarkup","isDisabled","val","className","slug","alt","markup","listBuilder","group","grouplabel","getItemMarkup","itemData","itemBuilder","optionsItemBuilder","filteredItemData","add","off","e","toggleClass","hover","type","openOnHover","clearTimeout","closeTimer","setTimeout","proxy","hoverIntentTimeout","focus","handleKeys","one","blur","openOnFocus","searchRegExp","RegExp","resetStr","keySearchTimeout","highlight","altItems","ai","mousedown","preventDefault","stopPropagation","click","select","data","key","which","keys","isPrevKey","inArray","previous","isNextKey","next","isSelectKey","isOpenKey","idx","isFirstOrLastItem","goToItem","allowWrap","keepMenuOpen","setOptionsDimensions","maxHeight","itemsWidth","outerWidth","wrapperWidth","expandToItemText","finalWidth","css","height","isInViewport","fitsAbove","renderAbove","renderBelow","forceRenderAbove","above","forceRenderBelow","below","scrollTop","winHeight","fitsDown","uiPosX","offset","top","outerHeight","itemsHeight","detectItemVisibility","$filteredLi","liHeight","Math","min","eq","liTop","offsetTop","itemsScrollTop","scrollT","itemsInnerHeight","preventWindowScroll","orgEvent","originalEvent","deltaY","detail","wheelDelta","wheelDeltaY","scrollHeight","change","parents","valid","textIndex","surTrad","first","hasClass","textAria","hasSelectedIndex","splice","preserveData","remove","removeData","unwrap","onChange"],"mappings":"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"}