{"version":3,"file":"kendo.autocomplete.min.js","sources":["kendo.autocomplete.js"],"sourcesContent":["(function(f, define){\n define('kendo.autocomplete',[ \"./kendo.list\", \"./kendo.mobile.scroller\", \"./kendo.virtuallist\" ], f);\n})(function(){\n\nvar __meta__ = { // jshint ignore:line\n id: \"autocomplete\",\n name: \"AutoComplete\",\n category: \"web\",\n description: \"The AutoComplete widget provides suggestions depending on the typed text.It also allows multiple value entries.\",\n depends: [ \"list\" ],\n features: [ {\n id: \"mobile-scroller\",\n name: \"Mobile scroller\",\n description: \"Support for kinetic scrolling in mobile device\",\n depends: [ \"mobile.scroller\" ]\n }, {\n id: \"virtualization\",\n name: \"VirtualList\",\n description: \"Support for virtualization\",\n depends: [ \"virtuallist\" ]\n } ]\n};\n\n(function ($, undefined) {\n var kendo = window.kendo,\n support = kendo.support,\n caret = kendo.caret,\n activeElement = kendo._activeElement,\n placeholderSupported = support.placeholder,\n ui = kendo.ui,\n List = ui.List,\n keys = kendo.keys,\n DataSource = kendo.data.DataSource,\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_READONLY = \"aria-readonly\",\n CHANGE = \"change\",\n DISABLED = \"disabled\",\n READONLY = \"readonly\",\n FOCUSED = \"k-focus\",\n SELECTED = \"k-selected\",\n HIDDENCLASS = \"k-hidden\",\n STATEDISABLED = \"k-disabled\",\n AUTOCOMPLETEVALUE = \"off\",\n HOVER = \"k-hover\",\n ns = \".kendoAutoComplete\",\n HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns;\n\n function indexOfWordAtCaret(caretIdx, text, separator) {\n return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n }\n\n function wordAtCaret(caretIdx, text, separator) {\n return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n }\n\n function replaceWordAtCaret(caretIdx, text, word, separator, defaultSeparator) {\n var words = text.split(separator);\n\n words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n\n if (separator && words[words.length - 1] !== \"\") {\n words.push(\"\");\n }\n\n return words.join(defaultSeparator);\n }\n\n var AutoComplete = List.extend({\n init: function (element, options) {\n var that = this, wrapper, disabled;\n\n that.ns = ns;\n options = Array.isArray(options) ? { dataSource: options} : options;\n\n List.fn.init.call(that, element, options);\n\n element = that.element;\n options = that.options;\n\n options.placeholder = options.placeholder || element.attr(\"placeholder\");\n if (placeholderSupported) {\n element.attr(\"placeholder\", options.placeholder);\n }\n\n that._wrapper();\n that._loader();\n that._clearButton();\n\n that._dataSource();\n that._ignoreCase();\n\n element[0].type = \"text\";\n wrapper = that.wrapper;\n\n that._popup();\n\n element\n .addClass(\"k-input-inner\")\n .on(\"keydown\" + ns, that._keydown.bind(that))\n .on(\"keypress\" + ns, that._keypress.bind(that))\n .on(\"input\" + ns, that._search.bind(that))\n .on(\"paste\" + ns, that._search.bind(that))\n .on(\"focus\" + ns, function () {\n that._prev = that._accessor();\n that._oldText = that._prev;\n that._placeholder(false);\n wrapper.addClass(FOCUSED);\n })\n .on(\"focusout\" + ns, function () {\n that._change();\n that._placeholder();\n that.close();\n wrapper.removeClass(FOCUSED);\n })\n .attr({\n autocomplete: AUTOCOMPLETEVALUE,\n role: \"combobox\",\n \"aria-expanded\": false\n });\n\n that._clear.on(\"click\" + ns + \" touchend\" + ns, that._clearValue.bind(that));\n that._enable();\n\n that._old = that._accessor();\n\n if (element[0].id) {\n element.attr(\"aria-owns\", that.ul[0].id);\n }\n\n that._aria();\n\n that._placeholder();\n\n that._initList();\n\n disabled = $(that.element).parents(\"fieldset\").is(':disabled');\n\n if (disabled) {\n that.enable(false);\n }\n\n that.listView.bind(\"click\", function(e) { e.preventDefault(); });\n\n that._resetFocusItemHandler = that._resetFocusItem.bind(that);\n\n kendo.notify(that);\n that._toggleCloseVisibility();\n that._applyCssClasses();\n },\n\n options: {\n name: \"AutoComplete\",\n enabled: true,\n suggest: false,\n template: \"\",\n groupTemplate: \"#:data#\",\n fixedGroupTemplate: \"#:data#\",\n dataTextField: \"\",\n minLength: 1,\n enforceMinLength: false,\n delay: 200,\n height: 200,\n filter: \"startswith\",\n ignoreCase: true,\n highlightFirst: false,\n separator: null,\n placeholder: \"\",\n animation: {},\n virtual: false,\n value: null,\n clearButton: true,\n autoWidth: false,\n popup: null,\n size: \"medium\",\n fillMode: \"solid\",\n rounded: \"medium\"\n },\n\n _dataSource: function() {\n var that = this;\n\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = that._showBusy.bind(that);\n that._errorHandler = that._hideBusy.bind(that);\n }\n\n that.dataSource = DataSource.create(that.options.dataSource)\n .bind(\"progress\", that._progressHandler)\n .bind(\"error\", that._errorHandler);\n },\n\n setDataSource: function(dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n\n this.listView.setDataSource(this.dataSource);\n },\n\n events: [\n \"open\",\n \"close\",\n CHANGE,\n \"select\",\n \"filtering\",\n \"dataBinding\",\n \"dataBound\"\n ],\n\n setOptions: function(options) {\n var listOptions = this._listOptions(options);\n\n List.fn.setOptions.call(this, options);\n\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n\n _listOptions: function(options) {\n var listOptions = List.fn._listOptions.call(this, $.extend(options, {\n skipUpdateOnBind: true\n }));\n\n listOptions.dataValueField = listOptions.dataTextField;\n listOptions.selectedItemChange = null;\n\n return listOptions;\n },\n\n _editable: function(options) {\n var that = this,\n element = that.element,\n wrapper = that.wrapper.off(ns),\n readonly = options.readonly,\n disable = options.disable;\n\n if (!readonly && !disable) {\n wrapper\n .removeClass(STATEDISABLED)\n .on(HOVEREVENTS, that._toggleHover);\n\n element.prop(DISABLED, false)\n .prop(READONLY, false)\n .attr(ARIA_DISABLED, false)\n .attr(ARIA_READONLY, false);\n } else {\n wrapper\n .addClass(disable ? STATEDISABLED : \"\")\n .removeClass(disable ? \"\" : STATEDISABLED);\n\n element.attr(DISABLED, disable)\n .attr(READONLY, readonly)\n .attr(ARIA_DISABLED, disable)\n .attr(ARIA_READONLY, readonly);\n }\n },\n\n close: function () {\n var that = this;\n var current = that.listView.focus();\n\n if (current) {\n current.removeClass(SELECTED);\n }\n\n that.popup.close();\n that._deactivateItem();\n },\n\n destroy: function() {\n var that = this;\n\n that.element.off(ns);\n that._clear.off(ns);\n that.wrapper.off(ns);\n\n List.fn.destroy.call(that);\n },\n\n refresh: function() {\n this.listView.refresh();\n },\n\n select: function (li) {\n this._select(li);\n },\n\n search: function (word) {\n var that = this,\n options = that.options,\n ignoreCase = options.ignoreCase,\n separator = that._separator(),\n length,\n accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n\n word = word || that._accessor();\n\n clearTimeout(that._typingTimeout);\n\n if (separator) {\n word = wordAtCaret(caret(that.element)[0], word, separator);\n }\n\n length = word.length;\n\n if ((!options.enforceMinLength && !length) || length >= options.minLength) {\n that._open = true;\n\n that._mute(function() {\n this.listView.value([]);\n });\n\n that._filterSource({\n value: ignoreCase ? (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) : word,\n operator: options.filter,\n field: options.dataTextField,\n ignoreCase: ignoreCase\n });\n\n that.one(\"close\", that._unifySeparators.bind(that));\n }\n that._toggleCloseVisibility();\n },\n\n suggest: function (word) {\n var that = this,\n key = that._last,\n value = that._accessor(),\n element = that.element[0],\n caretIdx = caret(element)[0],\n separator = that._separator(),\n words = value.split(separator),\n wordIndex = indexOfWordAtCaret(caretIdx, value, separator),\n selectionEnd = caretIdx,\n idx,\n accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n\n word = word || \"\";\n\n if (typeof word !== \"string\") {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n\n word = word ? that._text(word) : \"\";\n }\n\n if (caretIdx <= 0) {\n caretIdx = (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()).indexOf(accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) + 1;\n }\n\n idx = value.substring(0, caretIdx).lastIndexOf(separator);\n idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n value = words[wordIndex].substring(0, idx);\n\n if (word) {\n word = word.toString();\n idx = (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()).indexOf(accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase());\n if (idx > -1) {\n word = word.substring(idx + value.length);\n\n selectionEnd = caretIdx + word.length;\n\n value += word;\n }\n\n if (separator && words[words.length - 1] !== \"\") {\n words.push(\"\");\n }\n\n }\n\n words[wordIndex] = value;\n\n that._accessor(words.join(separator || \"\"));\n\n if (element === activeElement()) {\n caret(element, caretIdx, selectionEnd);\n }\n },\n\n value: function (value) {\n if (value !== undefined) {\n this.listView.value(value);\n\n this._accessor(value);\n this._old = this._accessor();\n this._oldText = this._accessor();\n } else {\n return this._accessor();\n }\n this._toggleCloseVisibility();\n },\n\n _click: function(e) {\n var item = e.item;\n var that = this;\n var element = that.element;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n\n e.preventDefault();\n\n that._active = true;\n\n if (that.trigger(\"select\", { dataItem: dataItem, item: item })) {\n that.close();\n return;\n }\n that._oldText = element.val();\n that._select(item).done(function() {\n that._blur();\n\n caret(element, element.val().length);\n });\n },\n\n _clearText: $.noop,\n\n _resetFocusItem: function() {\n var index = this.options.highlightFirst ? 0 : -1;\n\n if (this.options.virtual) {\n this.listView.scrollTo(0);\n }\n\n this.listView.focus(index);\n },\n\n _listBound: function() {\n var that = this;\n var popup = that.popup;\n var options = that.options;\n var data = that.dataSource.flatView();\n var length = data.length;\n var groupsLength = that.dataSource._group ? that.dataSource._group.length : 0;\n var isActive = that.element[0] === activeElement();\n var action;\n\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n\n that._resizePopup();\n\n popup.position();\n\n if (length) {\n if (options.suggest && isActive && that._inputValue()) {\n that.suggest(data[0]);\n }\n }\n\n if (that._open) {\n that._open = false;\n action = that._allowOpening() ? \"open\" : \"close\";\n\n if (that._typingTimeout && !isActive) {\n action = \"close\";\n }\n\n if (length) {\n that._resetFocusItem();\n\n if (options.virtual) {\n that.popup\n .unbind(\"activate\", that._resetFocusItemHandler)\n .one(\"activate\", that._resetFocusItemHandler);\n }\n }\n\n popup[action]();\n that._typingTimeout = undefined;\n }\n\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n\n that._hideBusy();\n\n that.trigger(\"dataBound\");\n },\n\n _mute: function(callback) {\n this._muted = true;\n callback.call(this);\n this._muted = false;\n },\n\n _listChange: function() {\n var isActive = this._active || this.element[0] === activeElement();\n\n if (isActive && !this._muted) {\n this._selectValue(this.listView.selectedDataItems()[0]);\n }\n },\n\n _selectValue: function(dataItem) {\n var separator = this._separator();\n var text = \"\";\n\n if (dataItem) {\n text = this._text(dataItem);\n }\n\n if (text === null) {\n text = \"\";\n }\n\n if (separator) {\n text = replaceWordAtCaret(caret(this.element)[0], this._accessor(), text, separator, this._defaultSeparator());\n }\n\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n\n _unifySeparators: function() {\n this._accessor(this.value().split(this._separator()).join(this._defaultSeparator()));\n return this;\n },\n\n _preselect: function(value, text) {\n this._inputValue(text);\n this._accessor(value);\n\n this._old = this.oldText = this._accessor();\n\n this.listView.setValue(value);\n this._placeholder();\n },\n\n _change: function() {\n var that = this;\n var value = that._unifySeparators().value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n\n that._old = value;\n that._oldText = value;\n\n if (valueUpdated || itemSelected) {\n // trigger the DOM change event so any subscriber gets notified\n that.element.trigger(CHANGE);\n }\n\n if (trigger) {\n that.trigger(CHANGE);\n }\n\n that.typing = false;\n that._toggleCloseVisibility();\n },\n\n _accessor: function (value) {\n var that = this,\n element = that.element[0];\n\n if (value !== undefined) {\n element.value = value === null ? \"\" : value;\n that._placeholder();\n } else {\n value = element.value;\n\n if (element.className.indexOf(\"k-readonly\") > -1) {\n if (value === that.options.placeholder) {\n return \"\";\n } else {\n return value;\n }\n }\n\n return value;\n }\n },\n\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var listView = that.listView;\n var visible = that.popup.visible();\n var current = listView.focus();\n\n that._last = key;\n\n if (key === keys.DOWN) {\n if (visible) {\n this._move(current ? \"focusNext\" : \"focusFirst\");\n } else if (that.value()) {\n that._filterSource({\n value: that.ignoreCase ? that.value().toLowerCase() : that.value(),\n operator: that.options.filter,\n field: that.options.dataTextField,\n ignoreCase: that.ignoreCase\n }).done(function () {\n if (that._allowOpening()) {\n that._resetFocusItem();\n that.popup.open();\n }\n });\n }\n e.preventDefault();\n } else if (key === keys.UP) {\n if (visible) {\n this._move(current ? \"focusPrev\" : \"focusLast\");\n }\n e.preventDefault();\n } else if (key === keys.HOME) {\n this._move(\"focusFirst\");\n } else if (key === keys.END) {\n this._move(\"focusLast\");\n } else if (key === keys.ENTER || key === keys.TAB) {\n\n if (key === keys.ENTER && visible) {\n e.preventDefault();\n }\n\n if (visible && current) {\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n if (that.trigger(\"select\", { dataItem: dataItem, item: current })) {\n return;\n }\n\n this._select(current);\n }\n\n this._blur();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that._clearValue();\n }\n that.close();\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n // In some cases when the popup is opened resize is triggered which will cause it to close\n // Setting the below flag will prevent this from happening\n that.popup._hovered = true;\n that._search();\n }\n },\n\n _keypress: function() {\n this._oldText = this.element.val();\n this._typing = true;\n },\n\n _move: function (action) {\n this.listView[action]();\n\n if (this.options.suggest) {\n this.suggest(this.listView.focus());\n }\n },\n\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._loading.addClass(HIDDENCLASS);\n that.element.attr(\"aria-busy\", false);\n that._busy = null;\n that._showClear();\n },\n\n _showBusy: function () {\n var that = this;\n\n if (that._busy) {\n return;\n }\n\n that._busy = setTimeout(function () {\n that.element.attr(\"aria-busy\", true);\n that._loading.removeClass(HIDDENCLASS);\n that._hideClear();\n }, 100);\n },\n\n _placeholder: function(show) {\n if (placeholderSupported) {\n return;\n }\n\n var that = this,\n element = that.element,\n placeholder = that.options.placeholder,\n value;\n\n if (placeholder) {\n value = element.val();\n\n if (show === undefined) {\n show = !value;\n }\n\n if (!show) {\n if (value !== placeholder) {\n placeholder = value;\n } else {\n placeholder = \"\";\n }\n }\n\n if (value === that._old && !show) {\n return;\n }\n\n element.toggleClass(\"k-readonly\", show)\n .val(placeholder);\n\n if (!placeholder && element[0] === document.activeElement) {\n caret(element[0], 0, 0);\n }\n }\n },\n\n _separator: function() {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return new RegExp(separator.join(\"|\"), 'gi');\n }\n return separator;\n },\n\n _defaultSeparator: function() {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return separator[0];\n }\n return separator;\n },\n\n _inputValue: function() {\n return this.element.val();\n },\n\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n\n that._typingTimeout = setTimeout(function () {\n if (that._prev !== that._accessor()) {\n that._prev = that._accessor();\n that.search();\n }\n }, that.options.delay);\n },\n\n _select: function(candidate) {\n var that = this;\n that._active = true;\n\n return that.listView.select(candidate).done(function() {\n that._active = false;\n });\n },\n\n _loader: function() {\n this._loading = $('').insertAfter(this.element);\n },\n\n _clearButton: function() {\n List.fn._clearButton.call(this);\n\n if (this.options.clearButton) {\n this._clear.insertAfter(this.element);\n this.wrapper.addClass(\"k-autocomplete-clearable\");\n }\n },\n\n _toggleHover: function(e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n },\n\n _toggleCloseVisibility: function() {\n if (this.value()) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n\n _wrapper: function () {\n var that = this,\n element = that.element,\n DOMelement = element[0],\n wrapper;\n\n wrapper = element.parent();\n\n if (!wrapper.is(\"span.k-autocomplete\")) {\n wrapper = element.wrap(\"\").parent();\n }\n\n wrapper.attr(\"tabindex\", -1);\n\n wrapper[0].style.cssText = DOMelement.style.cssText;\n element.css({\n width: \"\",\n height: DOMelement.style.height\n });\n\n that._focused = that.element;\n that.wrapper = wrapper\n .addClass(\"k-autocomplete k-input\")\n .addClass(DOMelement.className)\n .removeClass('input-validation-error');\n },\n\n _clearValue: function() {\n List.fn._clearValue.call(this);\n this.element.focus();\n }\n });\n\n ui.plugin(AutoComplete);\n\n kendo.cssProperties.registerPrefix(\"AutoComplete\", \"k-input-\");\n\n kendo.cssProperties.registerValues(\"AutoComplete\", [{\n prop: \"rounded\",\n values: kendo.cssProperties.roundedValues.concat([['full', 'full']])\n }]);\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(a1, a2, a3){ (a3 || a2)(); });\n\n"],"names":["define","__meta__","id","name","category","description","depends","features","$","window","kendo","jQuery","undefined","support","caret","activeElement","_activeElement","placeholderSupported","placeholder","ui","List","keys","DataSource","data","ARIA_DISABLED","ARIA_READONLY","CHANGE","DISABLED","READONLY","FOCUSED","SELECTED","HIDDENCLASS","STATEDISABLED","AUTOCOMPLETEVALUE","HOVER","ns","HOVEREVENTS","indexOfWordAtCaret","caretIdx","text","separator","substring","split","length","wordAtCaret","replaceWordAtCaret","word","defaultSeparator","words","splice","push","join","AutoComplete","extend","init","element","options","that","this","wrapper","disabled","Array","isArray","dataSource","fn","call","attr","_wrapper","_loader","_clearButton","_dataSource","_ignoreCase","type","_popup","addClass","on","_keydown","bind","_keypress","_search","_prev","_accessor","_oldText","_placeholder","_change","close","removeClass","autocomplete","role","aria-expanded","_clear","_clearValue","_enable","_old","ul","_aria","_initList","parents","is","enable","listView","e","preventDefault","_resetFocusItemHandler","_resetFocusItem","notify","_toggleCloseVisibility","_applyCssClasses","enabled","suggest","template","groupTemplate","fixedGroupTemplate","dataTextField","minLength","enforceMinLength","delay","height","filter","ignoreCase","highlightFirst","animation","virtual","value","clearButton","autoWidth","popup","size","fillMode","rounded","_refreshHandler","_unbindDataSource","_progressHandler","_showBusy","_errorHandler","_hideBusy","create","setDataSource","events","setOptions","listOptions","_listOptions","_accessors","skipUpdateOnBind","dataValueField","selectedItemChange","_editable","off","readonly","disable","_toggleHover","prop","current","focus","_deactivateItem","destroy","refresh","select","li","_select","search","_separator","accentFoldingFiltering","clearTimeout","_typingTimeout","_open","_mute","_filterSource","toLocaleLowerCase","toLowerCase","operator","field","one","_unifySeparators","key","_last","wordIndex","selectionEnd","idx","BACKSPACE","DELETE","view","inArray","_text","indexOf","lastIndexOf","toString","_click","item","dataItem","dataItemByIndex","getElementIndex","_active","trigger","val","done","_blur","_clearText","noop","index","scrollTo","_listBound","flatView","groupsLength","_group","isActive","action","_renderFooter","_renderNoData","_toggleNoData","_toggleHeader","_resizePopup","position","_inputValue","_allowOpening","unbind","_touchScroller","reset","callback","_muted","_listChange","_selectValue","selectedDataItems","_defaultSeparator","_preselect","oldText","setValue","unifyType","valueUpdated","_typing","itemSelected","typing","className","keyCode","visible","DOWN","_move","open","UP","HOME","END","ENTER","TAB","ESC","PAGEDOWN","PAGEUP","direction","scrollWith","screenHeight","_hovered","_busy","_loading","_showClear","setTimeout","_hideClear","show","toggleClass","document","RegExp","candidate","insertAfter","currentTarget","DOMelement","parent","wrap","style","cssText","css","width","_focused","plugin","cssProperties","registerPrefix","registerValues","values","roundedValues","concat","amd","a1","a2","a3"],"mappings":"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"}