{"version":3,"file":"jquery.selectric.min.js","sources":["Scripts/commun/lib/plugins/jquery.selectric.js"],"sourcesContent":["/*\r\n * SELECTRIC\r\n * http://lcdsantos.github.io/jQuery-Selectric/\r\n * http://lcdsantos.github.io/jQuery-Selectric/\r\n * \r\n * Version: inconnue. date du 14 nov 2017\r\n */\n\n(function (factory) {\n /* global define */\n /* istanbul ignore next */\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 /**\r\n * Create an instance of Selectric\r\n *\r\n * @constructor\r\n * @param {Node} element - The <select> 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 'readonly': _this.utils.isMobile()\n });\n var items = $('<div/>', {\n 'class': _this.classes.items,\n 'tabindex': -1\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 /**\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 _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 _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 _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\">▾</b>',\n disableOnMobile: true,\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","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","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","removeClass","responsive","inheritOriginalWidth","unbindEvents","$li","removeAttr","find","bindEvents","customClass","classesObj","each","split","currClass","c","camelCase","setLabel","labelMarkup","currItem","labelBuilder","currentValues","isArray","map","value","lookupItems","index","maxLabelEntries","push","text","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","hasSelectedIndex","splice","preserveData","remove","removeData","unwrap","onChange"],"mappings":"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"}