{"version":3,"sources":["webpack:///scripts/plugin--search-dropdown--419d68ac9dcb6dd9e3bf.js","webpack:///./project/client/src/site__ale001/components/search/search-dropdown/keystroke.js","webpack:///./project/client/src/site__ale001/components/search/search-dropdown/plugin.js"],"names":["webpackJsonp","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/search/search-dropdown/keystroke.js","module","exports","__webpack_require__","keyForKeyCode","keyCode","object","keyLabel","Object","keys","forEach","key","isAlphabet","capAlpha","A","Z","lowAlpha","isEnter","whitespace","ENTER","isEscape","other","ESCAPE","isNavigation","navigation","KEY_PAGE_UP","DOWN_ARROW","isNumber","numbers","isWhitespace","SPACE","TAB","codeToString","String","fromCharCode","defineProperty","value","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","KEY_PAGE_DOWN","KEY_END","KEY_HOME","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","0","1","2","3","4","5","6","7","8","9","DASH","SUBTRACT","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/search/search-dropdown/plugin.js","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","protoProps","staticProps","prototype","_jquery","_jquery2","_debug","_debug2","_lib","_lib2","_keystroke","_index","log","PLUGIN_NAME","SearchDropdownPlugin","element","options","this","$element","queryList","typingDebounceMs","parseInt","escapeKeyCodes","split","ignoreKeyCodes","hasFocus","focsusedElement","searchCancelled","searchField","selectors","selectTarget","searchInputSelector","submitButton","searchSubmitSelector","cancelButton","searchCancelSelector","resultsContainer","resultsContainerSelector","templateSource","dropdownTemplateSelector","template","text","data","empty","window","strings","toggleClearButton","watch","$target","_this","debounceImmediate","typingDebounceEdge","on","fn","debounce","send","bind","input","val","setTimeout","cancel","document","event","hasTarget","has","open","close","preventDefault","setIgnoreForAllQueries","hide","focus","q","qid","push","queryId","query","ignore","hasFinsihed","queryEl","foundIndex","indexOf","splice","find","baseQuery","indexOfCaseQuery","index","css","_this2","_options","minQueryLength","errorClass","sendingClass","openClass","url","trigger","includes","attr","addClass","removeClass","Date","now","Math","random","toString","addToQueryList","$","ajax","success","status","request","successQuery","getQueryFromList","render","setIgnoreForPreviousQueries","removeFromQueryList","error","complete","removeAttr","focusedElement","toElement","logger","context","reduce","result","Array","isArray","html","mustache","EmitOnDirty","hasErrorClass","reset","DEFAULTS","placement","placementTarget"],"mappings":"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","file":"scripts/plugin--search-dropdown--419d68ac9dcb6dd9e3bf.js","sourcesContent":["webpackJsonp([\"plugin--search-dropdown\"],{\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/search/search-dropdown/keystroke.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.keyForKeyCode = keyForKeyCode;\nexports.isAlphabet = isAlphabet;\nexports.isEnter = isEnter;\nexports.isEscape = isEscape;\nexports.isNavigation = isNavigation;\nexports.isNumber = isNumber;\nexports.isWhitespace = isWhitespace;\nexports.codeToString = codeToString;\nvar capAlpha = exports.capAlpha = {\n A: 65,\n B: 66,\n C: 67,\n D: 68,\n E: 69,\n F: 70,\n G: 71,\n H: 72,\n I: 73,\n J: 74,\n K: 75,\n L: 76,\n M: 77,\n N: 78,\n O: 79,\n P: 80,\n Q: 81,\n R: 82,\n S: 83,\n T: 84,\n U: 85,\n V: 86,\n W: 87,\n X: 88,\n Y: 89,\n Z: 90\n};\n\nvar lowAlpha = exports.lowAlpha = {\n A: 97,\n B: 98,\n C: 99,\n D: 100,\n E: 101,\n F: 102,\n G: 103,\n H: 104,\n I: 105,\n J: 106,\n K: 107,\n L: 108,\n M: 109,\n N: 110,\n O: 111,\n P: 112,\n Q: 113,\n R: 114,\n S: 115,\n T: 116,\n U: 117,\n V: 118,\n W: 119,\n X: 120,\n Y: 121,\n Z: 122\n};\n\nvar navigation = exports.navigation = {\n KEY_PAGE_UP: 33,\n KEY_PAGE_DOWN: 34,\n KEY_END: 35,\n KEY_HOME: 36,\n LEFT_ARROW: 37,\n UP_ARROW: 38,\n RIGHT_ARROW: 39,\n DOWN_ARROW: 40\n};\n\nvar numbers = exports.numbers = {\n 0: 48,\n 1: 49,\n 2: 50,\n 3: 51,\n 4: 52,\n 5: 53,\n 6: 54,\n 7: 55,\n 8: 56,\n 9: 57\n};\n\nvar other = exports.other = {\n DASH: 189,\n ESCAPE: 27,\n SUBTRACT: 109\n};\n\nvar whitespace = exports.whitespace = {\n TAB: 9,\n ENTER: 13,\n SPACE: 32\n};\n\nfunction keyForKeyCode(keyCode, object) {\n var keyLabel = null;\n\n Object.keys(object).forEach(function (key) {\n if (object[key] === keyCode) {\n keyLabel = key;\n }\n });\n\n return keyLabel;\n}\n\nfunction isAlphabet(keyCode) {\n return keyCode >= capAlpha.A && keyCode <= capAlpha.Z || keyCode >= lowAlpha.A && keyCode <= lowAlpha.Z;\n}\n\nfunction isEnter(keyCode) {\n return keyCode === whitespace.ENTER;\n}\n\nfunction isEscape(keyCode) {\n return keyCode === other.ESCAPE;\n}\n\nfunction isNavigation(keyCode) {\n return keyCode >= navigation.KEY_PAGE_UP && keyCode <= navigation.DOWN_ARROW;\n}\n\nfunction isNumber(keyCode) {\n return keyCode >= numbers[0] && keyCode <= numbers[9];\n}\n\nfunction isWhitespace(keyCode) {\n return keyCode === whitespace.SPACE || keyCode === whitespace.ENTER || keyCode === whitespace.TAB;\n}\n\nfunction codeToString(keyCode) {\n if (isAlphabet(keyCode) || isNumber(keyCode)) {\n return String.fromCharCode(keyCode);\n } else if (isNavigation(keyCode)) {\n return keyForKeyCode(keyCode, navigation);\n } else if (isWhitespace(keyCode)) {\n return keyForKeyCode(keyCode, whitespace);\n } else if (isEscape(keyCode)) {\n return 'ESCAPE';\n }\n\n return keyCode;\n}\n\n/***/ }),\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/search/search-dropdown/plugin.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _jquery = __webpack_require__(\"external \\\"jQuery\\\"\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _debug = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/debug/src/browser.js\");\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _lib = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/core/plugins/lib/index.js\");\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _keystroke = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/search/search-dropdown/keystroke.js\");\n\nvar _keystroke2 = _interopRequireDefault(_keystroke);\n\nvar _index = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/site__ale001/components/search/search-dropdown/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar log = (0, _debug2.default)('components/' + _index.PLUGIN_NAME);\n\nvar SearchDropdownPlugin = function () {\n\tfunction SearchDropdownPlugin(element, options) {\n\t\t_classCallCheck(this, SearchDropdownPlugin);\n\n\t\tlog('construct', element, options);\n\n\t\tthis.options = options;\n\t\tthis.element = element;\n\t\tthis.$element = (0, _jquery2.default)(element);\n\t\tthis.queryList = [];\n\n\t\tthis.options.typingDebounceMs = parseInt(this.options.typingDebounceMs);\n\n\t\tthis.options.escapeKeyCodes = this.options.escapeKeyCodes.split(' ');\n\t\tthis.options.ignoreKeyCodes = this.options.ignoreKeyCodes.split(' ');\n\n\t\tthis.hasFocus = false;\n\t\tthis.focsusedElement = null;\n\t\tthis.searchCancelled = false;\n\n\t\tthis.searchField = this.selectors.selectTarget(this.options.searchInputSelector, this.$element);\n\t\tthis.submitButton = this.selectors.selectTarget(this.options.searchSubmitSelector, this.$element);\n\t\tthis.cancelButton = this.selectors.selectTarget(this.options.searchCancelSelector, this.$element);\n\t\tthis.resultsContainer = this.selectors.selectTarget(this.options.resultsContainerSelector, this.$element);\n\n\t\tthis.templateSource = this.selectors.selectTarget(this.options.dropdownTemplateSelector, this.$element);\n\t\tthis.template = this.templateSource.text();\n\t\tthis.templateSource.data('original-content', this.template);\n\t\tthis.templateSource.empty();\n\n\t\twindow.strings = this.strings;\n\n\t\tthis.toggleClearButton();\n\t\tthis.watch();\n\t\tlog('ready', this.$target);\n\t}\n\n\t_createClass(SearchDropdownPlugin, [{\n\t\tkey: 'watch',\n\t\tvalue: function watch() {\n\t\t\tvar _this = this;\n\n\t\t\tvar debounceImmediate = this.options.typingDebounceEdge === 'leading';\n\t\t\tthis.searchField.on('keyup', this.fn.debounce(this.send.bind(this), this.options.typingDebounceMs, debounceImmediate));\n\n\t\t\tthis.searchField.on('input', function () {\n\t\t\t\tlog('searchField change');\n\t\t\t\t_this.toggleClearButton();\n\t\t\t});\n\n\t\t\t// Respond to clear search button click (IE/Edge)\n\t\t\tthis.searchField.on('mouseup', function () {\n\t\t\t\tvar input = _this.searchField;\n\t\t\t\tvar oldValue = input.val();\n\t\t\t\tif (oldValue === '') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tvar newValue = input.val();\n\t\t\t\t\tif (newValue === '') {\n\t\t\t\t\t\t_this.cancel();\n\t\t\t\t\t}\n\t\t\t\t}, 0);\n\t\t\t});\n\n\t\t\t(0, _jquery2.default)(document).on('click', function (event) {\n\t\t\t\tvar hasTarget = _this.$element.has(event.target);\n\t\t\t\tif (hasTarget && hasTarget.length) {\n\t\t\t\t\t_this.open();\n\t\t\t\t} else {\n\t\t\t\t\t_this.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cancelButton.on('click', function (event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tlog('cancelClick');\n\t\t\t\t_this.setIgnoreForAllQueries();\n\t\t\t\t_this.cancel();\n\t\t\t\t_this.cancelButton.hide();\n\t\t\t\t_this.searchField.focus();\n\t\t\t});\n\n\t\t\tlog('watching');\n\t\t}\n\t}, {\n\t\tkey: 'addToQueryList',\n\t\tvalue: function addToQueryList(q, qid) {\n\t\t\tthis.queryList.push({\n\t\t\t\tqueryId: qid,\n\t\t\t\tquery: q,\n\t\t\t\tignore: false,\n\t\t\t\thasFinsihed: false\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'removeFromQueryList',\n\t\tvalue: function removeFromQueryList(queryEl) {\n\t\t\t// just make sure it exists and has finished\n\t\t\tvar foundIndex = this.queryList.indexOf(queryEl);\n\t\t\tif (foundIndex > -1 && queryEl.hasFinsihed == true) {\n\t\t\t\tthis.queryList.splice(foundIndex, 1);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'getQueryFromList',\n\t\tvalue: function getQueryFromList(qid) {\n\t\t\treturn this.queryList.find(function (element) {\n\t\t\t\treturn element.queryId == qid;\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'setIgnoreForPreviousQueries',\n\t\tvalue: function setIgnoreForPreviousQueries(baseQuery) {\n\n\t\t\tvar indexOfCaseQuery = this.queryList.indexOf(baseQuery);\n\n\t\t\tfor (var index = 0; index < indexOfCaseQuery; index++) {\n\t\t\t\tvar element = this.queryList[index];\n\t\t\t\telement.ignore = true;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'setIgnoreForAllQueries',\n\t\tvalue: function setIgnoreForAllQueries(baseQuery) {\n\n\t\t\tfor (var index = 0; index < this.queryList.length; index++) {\n\t\t\t\tvar element = this.queryList[index];\n\t\t\t\telement.ignore = true;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'toggleClearButton',\n\t\tvalue: function toggleClearButton() {\n\t\t\tvar searchTerm = this.searchField.val();\n\t\t\tif (searchTerm.length > 0) {\n\t\t\t\tthis.cancelButton.css('display', 'flex');\n\t\t\t} else {\n\t\t\t\tthis.cancelButton.hide();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'send',\n\t\tvalue: function send(event) {\n\t\t\tvar _this2 = this;\n\n\t\t\tthis.close();\n\t\t\tvar query = this.searchField.val();\n\t\t\tvar keyCode = event.keyCode;\n\t\t\tvar _options = this.options,\n\t\t\t ignoreKeyCodes = _options.ignoreKeyCodes,\n\t\t\t escapeKeyCodes = _options.escapeKeyCodes,\n\t\t\t minQueryLength = _options.minQueryLength,\n\t\t\t errorClass = _options.errorClass,\n\t\t\t sendingClass = _options.sendingClass,\n\t\t\t openClass = _options.openClass,\n\t\t\t url = _options.url;\n\n\n\t\t\tlog('send', query);\n\n\t\t\tif (query && query.length < minQueryLength) {\n\t\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.notMinLength');\n\n\t\t\t\tlog('minQueryLength', query.length);\n\t\t\t\treturn;\n\t\t\t} else if (ignoreKeyCodes.includes('' + keyCode)) {\n\t\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.keyIgnored', { keyCode: keyCode });\n\n\t\t\t\tlog('key[' + event.keyCode + '] ignored since it\\'s in options.ignoreKeyCodes[' + ignoreKeyCodes + ']');\n\t\t\t\treturn;\n\t\t\t} else if (escapeKeyCodes.includes('' + event.keyCode)) {\n\t\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.escape');\n\t\t\t\tlog('key[' + event.keyCode + '] triggered close since it\\'s in options.escapeKeyCodes[' + escapeKeyCodes + ']');\n\n\t\t\t\tthis.close();\n\t\t\t\treturn;\n\t\t\t} else if (query && query.length) {\n\t\t\t\tthis.submitButton.attr('disabled', true);\n\t\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.beforeSend');\n\t\t\t\tthis.$element.addClass(sendingClass);\n\t\t\t\tthis.$element.removeClass(errorClass);\n\n\t\t\t\t// add it to query list\n\t\t\t\tvar queryId = (Date.now() + Math.random()).toString(36);\n\t\t\t\tthis.addToQueryList(query, queryId);\n\n\t\t\t\t_jquery2.default.ajax({\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tq: query\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function success(data, status, request) {\n\t\t\t\t\t\tlog('success', data, status);\n\n\t\t\t\t\t\tvar successQuery = _this2.getQueryFromList(queryId);\n\t\t\t\t\t\tsuccessQuery.hasFinsihed = true;\n\t\t\t\t\t\tif (successQuery.ignore == true) {\n\t\t\t\t\t\t\tlog('ignored success', data, status, successQuery);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this2.$element.removeClass(errorClass);\n\t\t\t\t\t\t\t_this2.render(data);\n\t\t\t\t\t\t\t_this2.$element.addClass(openClass);\n\t\t\t\t\t\t\t_this2.$element.trigger(_index.PLUGIN_NAME + '.rendered');\n\t\t\t\t\t\t\t_this2.setIgnoreForPreviousQueries(successQuery); // Set previous query results to be ignored if they show up later.\n\t\t\t\t\t\t\t_this2.removeFromQueryList(successQuery); // Finally remove query from list (don't want to overload the list)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\terror: function error(data, status, request) {\n\t\t\t\t\t\tlog('error', data, status);\n\n\t\t\t\t\t\t_this2.$element.removeClass(openClass);\n\t\t\t\t\t\t_this2.$element.addClass(errorClass);\n\t\t\t\t\t\t_this2.$element.trigger(_index.PLUGIN_NAME + '.error', {\n\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\tstatus: status,\n\t\t\t\t\t\t\trequest: request\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: function complete() {\n\t\t\t\t\t\t_this2.$element.removeClass(sendingClass);\n\t\t\t\t\t\t_this2.submitButton.removeAttr('disabled');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.cancel();\n\t\t\t}\n\n\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.afterSend');\n\t\t}\n\t}, {\n\t\tkey: 'onFocusChanged',\n\t\tvalue: function onFocusChanged(event) {\n\t\t\tlog('onFocusChanged', event);\n\t\t\tthis.focusedElement = event.toElement;\n\t\t\tvar hasFocus = this.$element.has(this.focusedElement);\n\t\t\tthis.hasFocus = hasFocus && hasFocus.length > 0;\n\n\t\t\tlogger.log('onFocusIn.hasFocus', this.hasFocus);\n\n\t\t\tif (!this.hasFocus) {\n\t\t\t\tthis.fn.debounce(this.close.bind(this), 50);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render(data) {\n\t\t\tlog('render', data, this.template);\n\t\t\tvar context = Object.keys(data).reduce(function (result, key) {\n\t\t\t\tvar value = data[key];\n\t\t\t\tresult[key] = value;\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tresult[key + 'IsEmpty'] = value.length === 0;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}, {});\n\t\t\tvar html = this.strings.mustache(this.template, context);\n\t\t\tlog('rendered', html);\n\t\t\tthis.resultsContainer.html(html);\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset(event) {\n\t\t\tlog('reset');\n\t\t\tthis.submitButton.removeAttr('disabled');\n\t\t\tthis.searchField.val('');\n\t\t\tthis.searchField.EmitOnDirty('clean');\n\t\t\tthis.resultsContainer.empty();\n\t\t}\n\n\t\t// Display suggestions\n\n\t}, {\n\t\tkey: 'open',\n\t\tvalue: function open() {\n\t\t\tlog('open');\n\t\t\tthis.$element.addClass(this.options.openClass);\n\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.open');\n\t\t}\n\t}, {\n\t\tkey: 'close',\n\t\tvalue: function close() {\n\t\t\tlog('close');\n\t\t\tthis.$element.removeClass(this.options.hasErrorClass);\n\t\t\tthis.$element.removeClass(this.options.sendingClass);\n\t\t\tthis.$element.removeClass(this.options.openClass);\n\t\t\tthis.$element.trigger(_index.PLUGIN_NAME + '.closed');\n\t\t}\n\t}, {\n\t\tkey: 'cancel',\n\t\tvalue: function cancel() {\n\t\t\tlog('cancel');\n\t\t\tthis.searchCancelled = true;\n\t\t\tthis.reset();\n\t\t\tthis.close();\n\t\t}\n\t}]);\n\n\treturn SearchDropdownPlugin;\n}();\n\nSearchDropdownPlugin.DEFAULTS = {\n\t/*\r\n http://keycode.info/\r\n 9 = tab\r\n 16 = shift\r\n 17 = ctrl\r\n 18 = alt\r\n 37 = left\r\n 38 = up\r\n 39 = right\r\n 40 = down\r\n 32 = space\r\n 91 = left super\r\n 92 = right super\r\n //https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value\r\n */\n\tminQueryLength: 3,\n\tignoreKeyCodes: '9 16 17 18 33 34 35 36 37 38 39 40 44 91 92 93 224',\n\tescapeKeyCodes: '27',\n\tsearchInputSelector: '(here) [data-search-dropdown__input-field]',\n\tsearchCancelSelector: '(here) [data-search-dropdown__cancel-button]',\n\tsearchSubmitSelector: '(here) [data-search-dropdown__submit-button]',\n\tdropdownTemplateSelector: '(here) [data-search-dropdown__result-container]',\n\tresultsContainerSelector: '(here) [data-search-dropdown__result-container]',\n\ttypingDebounceMs: 500,\n\ttypingDebounceEdge: 'trailing',\n\topenClass: 'search-dropdown--is-open',\n\tsendingClass: 'search-dropdown--is-sending',\n\terrorClass: 'search-dropdown--error',\n\tplacement: 'bottom',\n\tplacementTarget: '(self)'\n};\n\n(0, _lib2.default)(_index.PLUGIN_NAME, SearchDropdownPlugin);\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// scripts/plugin--search-dropdown--419d68ac9dcb6dd9e3bf.js","export const capAlpha = {\r\n A: 65,\r\n B: 66,\r\n C: 67,\r\n D: 68,\r\n E: 69,\r\n F: 70,\r\n G: 71,\r\n H: 72,\r\n I: 73,\r\n J: 74,\r\n K: 75,\r\n L: 76,\r\n M: 77,\r\n N: 78,\r\n O: 79,\r\n P: 80,\r\n Q: 81,\r\n R: 82,\r\n S: 83,\r\n T: 84,\r\n U: 85,\r\n V: 86,\r\n W: 87,\r\n X: 88,\r\n Y: 89,\r\n Z: 90\r\n};\r\n\r\nexport const lowAlpha = {\r\n A: 97,\r\n B: 98,\r\n C: 99,\r\n D: 100,\r\n E: 101,\r\n F: 102,\r\n G: 103,\r\n H: 104,\r\n I: 105,\r\n J: 106,\r\n K: 107,\r\n L: 108,\r\n M: 109,\r\n N: 110,\r\n O: 111,\r\n P: 112,\r\n Q: 113,\r\n R: 114,\r\n S: 115,\r\n T: 116,\r\n U: 117,\r\n V: 118,\r\n W: 119,\r\n X: 120,\r\n Y: 121,\r\n Z: 122\r\n};\r\n\r\nexport const navigation = {\r\n KEY_PAGE_UP: 33,\r\n KEY_PAGE_DOWN: 34,\r\n KEY_END: 35,\r\n KEY_HOME: 36,\r\n LEFT_ARROW: 37,\r\n UP_ARROW: 38,\r\n RIGHT_ARROW: 39,\r\n DOWN_ARROW: 40,\r\n};\r\n\r\nexport const numbers = {\r\n 0: 48,\r\n 1: 49,\r\n 2: 50,\r\n 3: 51,\r\n 4: 52,\r\n 5: 53,\r\n 6: 54,\r\n 7: 55,\r\n 8: 56,\r\n 9: 57\r\n};\r\n\r\nexport const other = {\r\n DASH: 189,\r\n ESCAPE: 27,\r\n SUBTRACT: 109\r\n};\r\n\r\nexport const whitespace = {\r\n TAB: 9,\r\n ENTER: 13,\r\n SPACE: 32\r\n};\r\n\r\nexport function keyForKeyCode(keyCode, object) {\r\n let keyLabel = null;\r\n\r\n Object.keys(object).forEach((key) => {\r\n if (object[key] === keyCode) {\r\n keyLabel = key;\r\n }\r\n });\r\n\r\n return keyLabel;\r\n}\r\n\r\nexport function isAlphabet(keyCode) {\r\n return (keyCode >= capAlpha.A && keyCode <= capAlpha.Z) ||\r\n (keyCode >= lowAlpha.A && keyCode <= lowAlpha.Z);\r\n}\r\n\r\nexport function isEnter(keyCode) {\r\n return keyCode === whitespace.ENTER;\r\n}\r\n\r\nexport function isEscape(keyCode) {\r\n return keyCode === other.ESCAPE;\r\n}\r\n\r\nexport function isNavigation(keyCode) {\r\n return keyCode >= navigation.KEY_PAGE_UP && keyCode <= navigation.DOWN_ARROW;\r\n}\r\n\r\nexport function isNumber(keyCode) {\r\n return keyCode >= numbers[0] && keyCode <= numbers[9];\r\n}\r\n\r\nexport function isWhitespace(keyCode) {\r\n return keyCode === whitespace.SPACE ||\r\n keyCode === whitespace.ENTER ||\r\n keyCode === whitespace.TAB;\r\n}\r\n\r\nexport function codeToString(keyCode) {\r\n if (isAlphabet(keyCode) || isNumber(keyCode)) {\r\n return String.fromCharCode(keyCode);\r\n } else if (isNavigation(keyCode)) {\r\n return keyForKeyCode(keyCode, navigation);\r\n } else if (isWhitespace(keyCode)) {\r\n return keyForKeyCode(keyCode, whitespace);\r\n } else if (isEscape(keyCode)) {\r\n return 'ESCAPE';\r\n }\r\n\r\n return keyCode;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./project/client/src/site__ale001/components/search/search-dropdown/keystroke.js","import $ from 'jquery';\r\nimport debug from 'debug';\r\nimport plugin from '@core/plugins/lib';\r\nimport keystroke from './keystroke';\r\nimport { ELEMENT_SELECTOR, PLUGIN_NAME } from './index';\r\n\r\nconst log = debug(`components/${PLUGIN_NAME}`);\r\n\r\nclass SearchDropdownPlugin {\r\n\tconstructor(element, options) {\r\n\t\tlog('construct', element, options);\r\n\r\n\t\tthis.options = options;\r\n\t\tthis.element = element;\r\n\t\tthis.$element = $(element);\r\n\t\tthis.queryList=[];\r\n\r\n\t\tthis.options.typingDebounceMs = parseInt(this.options.typingDebounceMs);\r\n\r\n\t\tthis.options.escapeKeyCodes = this.options.escapeKeyCodes.split(' ');\r\n\t\tthis.options.ignoreKeyCodes = this.options.ignoreKeyCodes.split(' ');\r\n\r\n\t\tthis.hasFocus = false;\r\n\t\tthis.focsusedElement = null;\r\n\t\tthis.searchCancelled = false;\r\n\r\n\t\tthis.searchField = this.selectors.selectTarget(\r\n\t\t\tthis.options.searchInputSelector,\r\n\t\t\tthis.$element\r\n\t\t);\r\n\t\tthis.submitButton = this.selectors.selectTarget(\r\n\t\t\tthis.options.searchSubmitSelector,\r\n\t\t\tthis.$element\r\n\t\t);\r\n\t\tthis.cancelButton = this.selectors.selectTarget(\r\n\t\t\tthis.options.searchCancelSelector,\r\n\t\t\tthis.$element\r\n\t\t);\r\n\t\tthis.resultsContainer = this.selectors.selectTarget(\r\n\t\t\tthis.options.resultsContainerSelector,\r\n\t\t\tthis.$element\r\n\t\t);\r\n\r\n\t\tthis.templateSource = this.selectors.selectTarget(\r\n\t\t\tthis.options.dropdownTemplateSelector,\r\n\t\t\tthis.$element\r\n\t\t);\r\n\t\tthis.template = this.templateSource.text();\r\n\t\tthis.templateSource.data('original-content', this.template);\r\n\t\tthis.templateSource.empty();\r\n\r\n\t\twindow.strings = this.strings;\r\n\r\n\r\n\t\tthis.toggleClearButton();\r\n\t\tthis.watch();\r\n\t\tlog('ready', this.$target);\r\n\t}\r\n\r\n\twatch() {\r\n\t\tconst debounceImmediate = this.options.typingDebounceEdge === 'leading';\r\n\t\tthis.searchField.on(\r\n\t\t\t'keyup',\r\n\t\t\t\tthis.fn.debounce(\r\n\t\t\t\t\tthis.send.bind(this),\r\n\t\t\t\t\tthis.options.typingDebounceMs,\r\n\t\t\t\t\tdebounceImmediate\r\n\t\t\t\t));\r\n\r\n\t\tthis.searchField.on('input',() =>{\r\n\t\t\tlog('searchField change');\r\n\t\t\tthis.toggleClearButton();\r\n\t\t});\r\n\r\n\t\t// Respond to clear search button click (IE/Edge)\r\n\t\tthis.searchField.on('mouseup', () => {\r\n\t\t\tconst input = this.searchField;\r\n\t\t\tconst oldValue = input.val();\r\n\t\t\tif (oldValue === '') {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst newValue = input.val();\r\n\t\t\t\tif (newValue === '') {\r\n\t\t\t\t\tthis.cancel();\r\n\t\t\t\t}\r\n\t\t\t}, 0);\r\n\r\n\t\t});\r\n\r\n\t\t$(document).on('click', event => {\r\n\t\t\tconst hasTarget = this.$element.has(event.target);\r\n\t\t\tif (hasTarget && hasTarget.length) {\r\n\t\t\t\tthis.open();\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.cancelButton.on('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tlog('cancelClick');\r\n\t\t\tthis.setIgnoreForAllQueries();\r\n\t\t\tthis.cancel();\r\n\t\t\tthis.cancelButton.hide();\r\n\t\t\tthis.searchField.focus();\r\n\t\t});\r\n\r\n\t\tlog('watching');\r\n\t}\r\n\r\n\taddToQueryList(q,qid){\r\n\t\tthis.queryList.push({\r\n\t\t\tqueryId : qid,\r\n\t\t\tquery : q,\r\n\t\t\tignore:false,\r\n\t\t\thasFinsihed:false\r\n\t\t});\r\n\t}\r\n\r\n\tremoveFromQueryList(queryEl){\r\n\t\t// just make sure it exists and has finished\r\n\t\tvar foundIndex = this.queryList.indexOf(queryEl);\r\n\t\tif(foundIndex>-1 && queryEl.hasFinsihed == true){\r\n\t\t\tthis.queryList.splice(foundIndex,1);\r\n\t\t}\r\n\t}\r\n\r\n\tgetQueryFromList(qid){\r\n\t\treturn this.queryList.find(element => element.queryId ==qid);\r\n\t}\r\n\r\n\tsetIgnoreForPreviousQueries(baseQuery){\r\n\r\n\t\tconst indexOfCaseQuery= this.queryList.indexOf(baseQuery);\r\n\r\n\t\tfor (let index = 0; index 0){\r\n\t\t\t\tthis.cancelButton.css('display','flex');\r\n\t\t\t}else{\r\n\t\t\t\tthis.cancelButton.hide();\r\n\t\t\t}\r\n\t}\r\n\r\n\tsend(event) {\r\n\t\tthis.close();\r\n\t\tconst query = this.searchField.val();\r\n\t\tconst { keyCode } = event;\r\n\t\tconst {\r\n\t\t\tignoreKeyCodes,\r\n\t\t\tescapeKeyCodes,\r\n\t\t\tminQueryLength,\r\n\t\t\terrorClass,\r\n\t\t\tsendingClass,\r\n\t\t\topenClass,\r\n\t\t\turl\r\n\t\t} = this.options;\r\n\r\n\t\tlog('send', query);\r\n\r\n\t\tif (query && query.length < minQueryLength) {\r\n\t\t\tthis.$element.trigger(`${PLUGIN_NAME}.notMinLength`);\r\n\r\n\t\t\tlog('minQueryLength', query.length);\r\n\t\t\treturn;\r\n\t\t} else if (ignoreKeyCodes.includes(''+keyCode)) {\r\n\t\t\tthis.$element.trigger(`${PLUGIN_NAME}.keyIgnored`, { keyCode });\r\n\r\n\t\t\tlog(\r\n\t\t\t\t`key[${\r\n\t\t\t\t\tevent.keyCode\r\n\t\t\t\t}] ignored since it's in options.ignoreKeyCodes[${ignoreKeyCodes}]`\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t} else if (escapeKeyCodes.includes(''+event.keyCode)) {\r\n\t\t\tthis.$element.trigger(`${PLUGIN_NAME}.escape`);\r\n\t\t\tlog(\r\n\t\t\t\t`key[${\r\n\t\t\t\t\tevent.keyCode\r\n\t\t\t\t}] triggered close since it's in options.escapeKeyCodes[${escapeKeyCodes}]`\r\n\t\t\t);\r\n\r\n\t\t\tthis.close();\r\n\t\t\treturn;\r\n\t\t} else if (query && query.length) {\r\n\t\t\tthis.submitButton.attr('disabled', true);\r\n\t\t\tthis.$element.trigger(`${PLUGIN_NAME}.beforeSend`);\r\n\t\t\tthis.$element.addClass(sendingClass);\r\n\t\t\tthis.$element.removeClass(errorClass);\r\n\r\n\t\t\t// add it to query list\r\n\t\t\tconst queryId=(Date.now() + Math.random()).toString(36);\r\n\t\t\tthis.addToQueryList(query,queryId);\r\n\r\n\t\t\t$.ajax({\r\n\t\t\t\turl,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tq: query\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: (data, status, request) => {\r\n\t\t\t\t\tlog('success', data, status);\r\n\r\n\t\t\t\t\tconst successQuery= this.getQueryFromList(queryId);\r\n\t\t\t\t\tsuccessQuery.hasFinsihed=true;\r\n\t\t\t\t\tif(successQuery.ignore == true){\r\n\t\t\t\t\t\tlog('ignored success', data, status,successQuery);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse{\r\n\t\t\t\t\t\tthis.$element.removeClass(errorClass);\r\n\t\t\t\t\t\tthis.render(data);\r\n\t\t\t\t\t\tthis.$element.addClass(openClass);\r\n\t\t\t\t\t\tthis.$element.trigger(`${PLUGIN_NAME}.rendered`);\r\n\t\t\t\t\t\tthis.setIgnoreForPreviousQueries(successQuery); // Set previous query results to be ignored if they show up later.\r\n\t\t\t\t\t\tthis.removeFromQueryList(successQuery);// Finally remove query from list (don't want to overload the list)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: (data, status, request) => {\r\n\t\t\t\t\tlog('error', data, status);\r\n\r\n\t\t\t\t\tthis.$element.removeClass(openClass);\r\n\t\t\t\t\tthis.$element.addClass(errorClass);\r\n\t\t\t\t\tthis.$element.trigger(`${PLUGIN_NAME}.error`, {\r\n\t\t\t\t\t\tdata,\r\n\t\t\t\t\t\tstatus,\r\n\t\t\t\t\t\trequest\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tthis.$element.removeClass(sendingClass);\r\n\t\t\t\t\tthis.submitButton.removeAttr('disabled');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.cancel();\r\n\t\t}\r\n\r\n\t\tthis.$element.trigger(`${PLUGIN_NAME}.afterSend`);\r\n\t}\r\n\r\n\tonFocusChanged(event) {\r\n\t\tlog('onFocusChanged', event);\r\n\t\tthis.focusedElement = event.toElement;\r\n\t\tconst hasFocus = this.$element.has(this.focusedElement);\r\n\t\tthis.hasFocus = hasFocus && hasFocus.length > 0;\r\n\r\n\t\tlogger.log('onFocusIn.hasFocus', this.hasFocus);\r\n\r\n\t\tif (!this.hasFocus) {\r\n\t\t\tthis.fn.debounce(this.close.bind(this), 50);\r\n\t\t}\r\n\t}\r\n\r\n\trender(data) {\r\n\t\tlog('render', data, this.template);\r\n\t\tconst context = Object.keys(data).reduce((result, key) => {\r\n\t\t\tconst value = data[key];\r\n\t\t\tresult[key] = value;\r\n\t\t\tif (Array.isArray(value)) {\r\n\t\t\t\tresult[`${key}IsEmpty`] = value.length === 0;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}, {});\r\n\t\tconst html = this.strings.mustache(this.template, context);\r\n\t\tlog('rendered', html);\r\n\t\tthis.resultsContainer.html(html);\r\n\t}\r\n\r\n\treset(event) {\r\n\t\tlog('reset');\r\n\t\tthis.submitButton.removeAttr('disabled');\r\n\t\tthis.searchField.val('');\r\n\t\tthis.searchField.EmitOnDirty('clean');\r\n\t\tthis.resultsContainer.empty();\r\n\t}\r\n\r\n\t// Display suggestions\r\n\topen() {\r\n\t\tlog('open');\r\n\t\tthis.$element.addClass(this.options.openClass);\r\n\t\tthis.$element.trigger(`${PLUGIN_NAME}.open`);\r\n\t}\r\n\r\n\tclose() {\r\n\t\tlog('close');\r\n\t\tthis.$element.removeClass(this.options.hasErrorClass);\r\n\t\tthis.$element.removeClass(this.options.sendingClass);\r\n\t\tthis.$element.removeClass(this.options.openClass);\r\n\t\tthis.$element.trigger(`${PLUGIN_NAME}.closed`);\r\n\t}\r\n\r\n\tcancel() {\r\n\t\tlog('cancel');\r\n\t\tthis.searchCancelled = true;\r\n\t\tthis.reset();\r\n\t\tthis.close();\r\n\t}\r\n}\r\n\r\nSearchDropdownPlugin.DEFAULTS = {\r\n\t/*\r\n http://keycode.info/\r\n 9 = tab\r\n 16 = shift\r\n 17 = ctrl\r\n 18 = alt\r\n 37 = left\r\n 38 = up\r\n 39 = right\r\n 40 = down\r\n 32 = space\r\n 91 = left super\r\n 92 = right super\r\n //https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value\r\n */\r\n\tminQueryLength: 3,\r\n\tignoreKeyCodes: '9 16 17 18 33 34 35 36 37 38 39 40 44 91 92 93 224',\r\n\tescapeKeyCodes: '27',\r\n\tsearchInputSelector: '(here) [data-search-dropdown__input-field]',\r\n\tsearchCancelSelector: '(here) [data-search-dropdown__cancel-button]',\r\n\tsearchSubmitSelector: '(here) [data-search-dropdown__submit-button]',\r\n\tdropdownTemplateSelector: '(here) [data-search-dropdown__result-container]',\r\n\tresultsContainerSelector: '(here) [data-search-dropdown__result-container]',\r\n\ttypingDebounceMs: 500,\r\n\ttypingDebounceEdge: 'trailing',\r\n\topenClass: 'search-dropdown--is-open',\r\n\tsendingClass: 'search-dropdown--is-sending',\r\n\terrorClass: 'search-dropdown--error',\r\n\tplacement: 'bottom',\r\n\tplacementTarget: '(self)'\r\n};\r\n\r\nplugin(PLUGIN_NAME, SearchDropdownPlugin);\r\n\n\n\n// WEBPACK FOOTER //\n// ./project/client/src/site__ale001/components/search/search-dropdown/plugin.js"],"sourceRoot":""}