{"version":3,"file":"kendo.dropdownlist.min.js","sources":["kendo.dropdownlist.js"],"sourcesContent":["(function(f, define){\n define('kendo.dropdownlist',[ \"./kendo.list\", \"./kendo.mobile.scroller\", \"./kendo.virtuallist\", \"./kendo.html.button\" ], f);\n})(function(){\n\nvar __meta__ = { // jshint ignore:line\n id: \"dropdownlist\",\n name: \"DropDownList\",\n category: \"web\",\n description: \"The DropDownList widget displays a list of values and allows the selection of a single value from the list.\",\n depends: [ \"list\", \"html.button\" ],\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 ui = kendo.ui,\n html = kendo.html,\n List = ui.List,\n Select = ui.Select,\n support = kendo.support,\n activeElement = kendo._activeElement,\n ObservableObject = kendo.data.ObservableObject,\n keys = kendo.keys,\n ns = \".kendoDropDownList\",\n nsFocusEvent = ns + \"FocusEvent\",\n DISABLED = \"disabled\",\n READONLY = \"readonly\",\n CHANGE = \"change\",\n FOCUSED = \"k-focus\",\n STATEDISABLED = \"k-disabled\",\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_READONLY = \"aria-readonly\",\n CLICKEVENTS = \"click\" + ns + \" touchend\" + ns,\n HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n TABINDEX = \"tabindex\",\n STATE_FILTER = \"filter\",\n STATE_ACCEPT = \"accept\",\n MSG_INVALID_OPTION_LABEL = \"The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel\",\n OPEN = \"open\",\n CLOSE = \"close\";\n\n var DropDownList = Select.extend( {\n init: function(element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n\n that.ns = ns;\n options = Array.isArray(options) ? { dataSource: options } : options;\n\n Select.fn.init.call(that, element, options);\n\n options = that.options;\n element = that.element.on(\"focus\" + ns, that._focusHandler.bind(that));\n\n that._focusInputHandler = that._focusInput.bind(that);\n\n that.optionLabel = $();\n that._optionLabel();\n\n that._inputTemplate();\n\n that._reset();\n\n that._prev = \"\";\n that._word = \"\";\n\n that._wrapper();\n\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n\n that._span();\n\n that._popup();\n\n that._mobile();\n\n that._dataSource();\n\n that._ignoreCase();\n\n that._filterHeader();\n\n that._aria();\n\n //should read changed value of closed dropdownlist\n if (kendo.support.browser.chrome) {\n that.wrapper.attr(\"aria-live\", \"polite\");\n }\n\n that._enable();\n\n that._attachFocusHandlers();\n\n that._oldIndex = that.selectedIndex = -1;\n\n if (index !== undefined) {\n options.index = index;\n }\n\n that._initialIndex = options.index;\n\n that.requireValueMapper(that.options);\n that._initList();\n that.listView.one(\"dataBound\", that._attachAriaActiveDescendant.bind(that));\n\n that._cascade();\n\n that.one(\"set\", function(e) {\n if (!e.sender.listView.bound() && that.hasOptionLabel()) {\n that._textAccessor(that._optionLabelText());\n }\n });\n\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) { //selectedIndex !== -1 when cascade functionality happens instantly\n text = options.text || \"\";\n if (!text) {\n optionLabel = options.optionLabel;\n\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(\":selected\").text();\n }\n }\n\n that._textAccessor(text);\n }\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 kendo.notify(that);\n that._applyCssClasses();\n },\n\n options: {\n name: \"DropDownList\",\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: \"\",\n dataValueField: \"\",\n optionLabel: \"\",\n cascadeFrom: \"\",\n cascadeFromField: \"\",\n cascadeFromParentField: \"\",\n ignoreCase: true,\n animation: {},\n filter: \"none\",\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: \"#:data#\",\n fixedGroupTemplate: \"#:data#\",\n autoWidth: false,\n popup: null,\n filterTitle: null,\n size: \"medium\",\n fillMode: \"solid\",\n rounded: \"medium\"\n },\n\n events: [\n \"open\",\n \"close\",\n CHANGE,\n \"select\",\n \"filtering\",\n \"dataBinding\",\n \"dataBound\",\n \"cascade\",\n \"set\",\n \"kendoKeydown\"\n ],\n\n setOptions: function(options) {\n Select.fn.setOptions.call(this, options);\n\n this.listView.setOptions(this._listOptions(options));\n\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n\n destroy: function() {\n var that = this;\n\n Select.fn.destroy.call(that);\n\n that.wrapper.off(ns);\n that.wrapper.off(nsFocusEvent);\n that.element.off(ns);\n\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n\n that.optionLabel.off();\n\n if(that.filterInput){\n that.filterInput.off(nsFocusEvent);\n }\n },\n\n open: function() {\n var that = this;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n var listView = this.listView;\n\n if (that.popup.visible()) {\n return;\n }\n\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = \"rebind\";\n\n if (that.filterInput) {\n that.filterInput.val(\"\");\n that._prev = \"\";\n }\n\n if (that.filterInput && that.options.minLength !== 1 && !isFiltered) {\n that.refresh();\n that.popup.one(\"activate\", that._focusInputHandler);\n that.wrapper.attr(\"aria-activedescendant\", listView._optionID);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._focusFilter = true;\n that.popup.one(\"activate\", that._focusInputHandler);\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.wrapper.attr(\"aria-activedescendant\", listView._optionID);\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n\n close: function() {\n this._attachAriaActiveDescendant();\n this.popup.close();\n },\n\n _attachAriaActiveDescendant: function() {\n var wrapper = this.wrapper,\n inputId = wrapper.find(\".k-input-inner\").attr('id');\n\n wrapper.attr(\"aria-activedescendant\", inputId);\n },\n\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n\n if (!filterInput) {\n return;\n }\n\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n\n this._prevent = true;\n\n filterInput.addClass(\"k-hidden\");\n filterInput.closest(\".k-list-filter\").css(\"width\", this.popup.element.css(\"width\"));\n filterInput.removeClass(\"k-hidden\");\n\n if (isInputActive) {\n filterInput.trigger(\"focus\");\n kendo.caret(filterInput[0], caret);\n }\n\n this._prevent = originalPrevent;\n },\n\n _allowOpening: function() {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n\n toggle: function(toggle) {\n this._toggle(toggle, true);\n },\n\n current: function(candidate) {\n var current;\n\n if (candidate === undefined) {\n current = this.listView.focus();\n\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n\n return current;\n }\n\n this._focus(candidate);\n },\n\n dataItem: function(index) {\n var that = this;\n var dataItem = null;\n\n if (index === null) { return index; }\n\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== \"number\") {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data(\"uid\"));\n }\n if (index.hasClass(\"k-list-optionlabel\")) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n\n dataItem = that.dataSource.flatView()[index];\n }\n\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n\n return dataItem;\n },\n\n refresh: function() {\n this.listView.refresh();\n },\n\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n\n text = text === null ? \"\" : text;\n\n if (text !== undefined) {\n if (typeof text !== \"string\") {\n that._textAccessor(text);\n return;\n }\n\n loweredText = ignoreCase ? text.toLowerCase() : text;\n\n that._select(function(data) {\n data = that._text(data);\n\n if (ignoreCase) {\n data = (data + \"\").toLowerCase();\n }\n\n return data === loweredText;\n }).done(function() {\n that._textAccessor(that.dataItem() || text);\n });\n\n } else {\n return that._textAccessor();\n }\n },\n\n _clearFilter: function() {\n $(this.filterInput).val(\"\");\n Select.fn._clearFilter.call(this);\n },\n\n value: function(value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n var valueFn = function() { that.value(value); };\n\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? \"\" : value;\n }\n\n that.requireValueMapper(that.options, value);\n\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n\n this.trigger(\"set\", { value: value });\n\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n\n that._valueSetter = valueFn.bind(that);\n\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n\n listView.value(value).done(function() {\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n\n hasOptionLabel: function() {\n return this.optionLabel && !!this.optionLabel[0];\n },\n\n _optionLabel: function() {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n\n if (!template) {\n template = \"#:\";\n\n if (typeof optionLabel === \"string\") {\n template += \"data\";\n } else {\n template += kendo.expr(options.dataTextField, \"data\");\n }\n\n template += \"#\";\n }\n\n if (typeof template !== \"function\") {\n template = kendo.template(template);\n }\n\n that.optionLabelTemplate = template;\n\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('
').prependTo(that.list);\n }\n\n that.optionLabel.html(template(optionLabel))\n .off()\n .on(CLICKEVENTS, that._click.bind(that))\n .on(HOVEREVENTS, that._toggleHover);\n\n that.angular(\"compile\", function() {\n return { elements: that.optionLabel, data: [{ dataItem: that._optionLabelDataItem() }] };\n });\n },\n\n _optionLabelText: function() {\n var optionLabel = this.options.optionLabel;\n return (typeof optionLabel === \"string\") ? optionLabel : this._text(optionLabel);\n },\n\n _optionLabelDataItem: function() {\n var that = this;\n var optionLabel = that.options.optionLabel;\n\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), \"\");\n }\n\n return undefined;\n },\n\n _buildOptions: function(data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n\n if (value === undefined || value === null) {\n value = \"\";\n }\n\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = \"\";\n }\n\n optionLabel = '\";\n }\n\n that._options(data, optionLabel, value);\n\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n\n _listBound: function() {\n\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n\n var data = that.dataSource.flatView();\n var dataItem;\n\n that._presetValue = false;\n\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n\n that._resizePopup(true);\n\n that.popup.position();\n\n that._buildOptions(data);\n\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n\n that._open = false;\n\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value(\"\");\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n\n that._hideBusy();\n that.trigger(\"dataBound\");\n },\n\n _listChange: function() {\n this._selectValue(this.listView.selectedDataItems()[0]);\n\n if (this._presetValue || (this._old && this._oldIndex === -1)) {\n this._oldIndex = this.selectedIndex;\n }\n },\n\n _filterPaste: function() {\n this._search();\n },\n\n _attachFocusHandlers: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n wrapper.on(\"focusin\" + nsFocusEvent, that._focusinHandler.bind(that))\n .on(\"focusout\" + nsFocusEvent, that._focusoutHandler.bind(that));\n if(that.filterInput) {\n that.filterInput.on(\"focusin\" + nsFocusEvent, that._focusinHandler.bind(that))\n .on(\"focusout\" + nsFocusEvent, that._focusoutHandler.bind(that));\n }\n },\n\n _focusHandler: function() {\n this.wrapper.trigger(\"focus\");\n },\n\n _focusinHandler: function() {\n this.wrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n\n _focusoutHandler: function() {\n var that = this;\n var isIFrame = window.self !== window.top;\n\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n\n that.wrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.trigger(\"blur\");\n }\n },\n\n _wrapperMousedown: function() {\n this._prevent = !!this.filterInput;\n },\n\n _wrapperClick: function(e) {\n e.preventDefault();\n this.popup.unbind(\"activate\", this._focusInputHandler);\n this._focused = this.wrapper;\n this._prevent = false;\n this._toggle();\n },\n\n _editable: function(options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that.wrapper.off(HOVEREVENTS);\n\n if (!readonly && !disable) {\n element.prop(DISABLED, false).prop(READONLY, false);\n\n dropDownWrapper\n .removeClass(STATEDISABLED)\n .on(HOVEREVENTS, that._toggleHover);\n\n wrapper\n .attr(TABINDEX, wrapper.data(TABINDEX))\n .attr(ARIA_DISABLED, false)\n .attr(ARIA_READONLY, false)\n .on(\"keydown\" + ns, that, that._keydown.bind(that))\n .on(kendo.support.mousedown + ns, that._wrapperMousedown.bind(that))\n .on(\"paste\" + ns, that._filterPaste.bind(that));\n\n that.wrapper.on(\"click\" + ns, that._wrapperClick.bind(that));\n\n if (!that.filterInput) {\n wrapper.on(\"keypress\" + ns, that._keypress.bind(that));\n } else {\n wrapper.on(\"input\" + ns, that._search.bind(that));\n }\n\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED);\n } else {\n dropDownWrapper.removeClass(STATEDISABLED);\n }\n\n element.attr(DISABLED, disable)\n .attr(READONLY, readonly);\n\n wrapper.attr(ARIA_DISABLED, disable)\n .attr(ARIA_READONLY, readonly);\n },\n\n _keydown: function(e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n\n var isPopupVisible = that.popup.visible();\n\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n\n if (handled && isInputActive) {\n return;\n }\n\n e.keyCode = key;\n\n if ((altKey && key === keys.UP) || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n\n handled = that._move(e);\n\n if (handled) {\n return;\n }\n\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n\n if (handled) {\n if (that.trigger(\"select\", { dataItem: that._getElementDataItem(that._focus()), item: that._focus() })) {\n that._focus(current);\n return;\n }\n\n that._select(that._focus(), true).done(function() {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n\n _matchText: function(text, word) {\n var ignoreCase = this.options.ignoreCase;\n\n if (text === undefined || text === null) {\n return false;\n }\n\n text = text + \"\";\n\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n\n return text.indexOf(word) === 0;\n },\n\n _shuffleData: function(data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n\n _selectNext: function() {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function() {\n var done = function() {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n\n if (that.trigger(\"select\", { dataItem: that._getElementDataItem(that._focus()), item: that._focus() })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n\n _keypress: function(e) {\n var that = this;\n\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n\n var character = String.fromCharCode(e.charCode || e.keyCode);\n\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n\n if (character === \" \") {\n e.preventDefault();\n }\n\n that._word += character;\n that._last = character;\n\n that._search();\n },\n\n _popupOpen: function() {\n var popup = this.popup;\n\n popup.wrapper = kendo.wrap(popup.element);\n\n if (popup.element.closest(\".km-root\")[0]) {\n popup.wrapper.addClass(\"km-popup km-widget\");\n this.wrapper.addClass(\"km-widget\");\n }\n },\n\n _popup: function() {\n Select.fn._popup.call(this);\n this.popup.one(\"open\", this._popupOpen.bind(this));\n },\n\n _getElementDataItem: function(element) {\n if (!element || !element[0]) {\n return null;\n }\n\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n\n e.preventDefault();\n\n if (that.trigger(\"select\", { dataItem: that._getElementDataItem(item), item: item })) {\n that.close();\n return;\n }\n\n that._userTriggered = true;\n\n that._select(item).done(function() {\n that._blur();\n that._focusElement(that.wrapper);\n });\n },\n\n _focusElement: function(element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.trigger(\"focus\");\n }\n },\n\n _searchByWord: function(word) {\n if (!word) {\n return;\n }\n\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n\n that._select(function(dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n\n _inputValue: function() {\n return this.text();\n },\n\n _search: function() {\n var that = this;\n var dataSource = that.dataSource;\n\n clearTimeout(that._typingTimeout);\n\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function() {\n var value = that.filterInput.val();\n\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function() {\n that._word = \"\";\n }, that.options.delay);\n\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n\n that._selectNext();\n }\n },\n\n _get: function(candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === \"function\";\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n\n if (this.hasOptionLabel()) {\n if (typeof candidate === \"number\") {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass(\"k-list-optionlabel\")) {\n candidate = -1;\n }\n }\n\n if (isFunction) {\n data = this.dataSource.flatView();\n\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n\n if (!found) {\n candidate = -1;\n }\n }\n\n return candidate;\n },\n\n _firstItem: function() {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n\n _lastItem: function() {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n\n _nextItem: function() {\n var focusIndex;\n\n if (this.optionLabel.hasClass(\"k-focus\")) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n focusIndex = 1;\n } else {\n focusIndex = this.listView.focusNext();\n }\n\n return focusIndex;\n },\n\n _prevItem: function() {\n var focusIndex;\n\n if (this.optionLabel.hasClass(\"k-focus\")) {\n return;\n }\n\n focusIndex = this.listView.focusPrev();\n\n if (!this.listView.focus() && !this.options.virtual) {\n this._focus(this.optionLabel);\n }\n\n return focusIndex;\n },\n\n _focusItem: function() {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n\n index = index[index.length - 1];\n\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== \"dataItem\")) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n\n _resetOptionLabel: function(additionalClass) {\n this.optionLabel.removeClass(\"k-focus\" + (additionalClass || \"\")).removeAttr(\"id\");\n },\n\n _focus: function(candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n\n if (candidate === undefined) {\n candidate = listView.focus();\n\n if (!candidate && optionLabel.hasClass(\"k-focus\")) {\n candidate = optionLabel;\n }\n\n return candidate;\n }\n\n this._resetOptionLabel();\n\n candidate = this._get(candidate);\n\n listView.focus(candidate);\n\n if (candidate === -1) {\n optionLabel.addClass(\"k-focus\")\n .attr(\"id\", listView._optionID);\n\n this._focused.add(this.filterInput)\n .removeAttr(\"aria-activedescendant\")\n .attr(\"aria-activedescendant\", listView._optionID);\n }\n },\n\n _select: function(candidate, keepState) {\n var that = this;\n\n candidate = that._get(candidate);\n\n return that.listView.select(candidate).done(function() {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n\n _selectValue: function(dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n\n var value = \"\";\n var text = \"\";\n\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n\n this._resetOptionLabel(\" k-selected\");\n\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass(\"k-selected\"));\n\n text = that._optionLabelText();\n\n if (typeof optionLabel === \"string\") {\n value = \"\";\n } else {\n value = that._value(optionLabel);\n }\n\n idx = 0;\n }\n\n that.selectedIndex = idx;\n\n if (value === null) {\n value = \"\";\n }\n\n that._textAccessor(text);\n that._accessor(value, idx);\n\n that._triggerCascade();\n },\n\n _mobile: function() {\n var that = this,\n popup = that.popup,\n mobileOS = support.mobileOS,\n root = popup.element.parents(\".km-root\").eq(0);\n\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = (mobileOS.android || mobileOS.meego) ? \"fadeIn\" : (mobileOS.ios || mobileOS.wp) ? \"slideIn:up\" : popup.options.animation.open.effects;\n }\n },\n\n _filterHeader: function() {\n var filterTemplate = '
' +\n '' +\n '' +\n '' +\n '
';\n\n if (this.filterInput) {\n this.filterInput\n .off(ns)\n .closest(\".k-list-filter\")\n .remove();\n\n this.filterInput = null;\n }\n\n if (this._isFilterEnabled()) {\n this.filterInput = $('')\n .attr({\n placeholder: this.element.attr(\"placeholder\"),\n title: this.options.filterTitle || this.element.attr(\"title\"),\n role: \"searchbox\",\n \"aria-label\": this.options.filterTitle,\n \"aria-haspopup\": \"listbox\",\n \"aria-autocomplete\": \"list\"\n });\n\n this.list\n .parent()\n .prepend($(filterTemplate))\n .find(\".k-searchbox\")\n .append(this.filterInput);\n }\n },\n\n _span: function() {\n var that = this,\n wrapper = that.wrapper,\n SELECTOR = \"span.k-input-value-text\",\n id = kendo.guid(),\n options = that.options,\n span, arrowBtn;\n\n span = wrapper.find(SELECTOR);\n\n if (!span[0]) {\n arrowBtn = html.renderButton('', {\n icon: \"arrow-s\",\n size: options.size,\n fillMode: options.fillMode,\n shape: null,\n rounded: null\n });\n\n wrapper.append('' +\n '' +\n '')\n .append(arrowBtn)\n .append(that.element);\n\n span = wrapper.find(SELECTOR);\n }\n\n that.span = span;\n that._arrow = wrapper.find(\".k-input-button\");\n that._arrowIcon = that._arrow.find(\".k-icon\");\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-picker\")) {\n wrapper = element.wrap(\"\").parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n\n that._focused = that.wrapper = wrapper\n .addClass(\"k-picker k-dropdownlist\")\n .addClass(DOMelement.className)\n .removeClass('input-validation-error')\n .css(\"display\", \"\")\n .attr({\n accesskey: element.attr(\"accesskey\"),\n unselectable: \"on\",\n role: \"listbox\",\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": false\n });\n\n element.hide().removeAttr(\"accesskey\");\n },\n\n _clearSelection: function(parent) {\n this.select(parent.value() ? 0 : -1);\n },\n\n _openHandler: function(e) {\n this._adjustListWidth();\n\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this.wrapper.attr(\"aria-expanded\", true);\n this.ul.attr(\"aria-hidden\", false);\n\n if (kendo.support.browser.chrome) {\n this.wrapper.removeAttr(\"aria-live\");\n }\n }\n },\n\n _closeHandler: function(e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this.wrapper.attr(\"aria-expanded\", false);\n this.ul.attr(\"aria-hidden\", true);\n\n if (kendo.support.browser.chrome) {\n this.wrapper.attr(\"aria-live\", \"polite\");\n }\n }\n },\n\n _inputTemplate: function() {\n var that = this,\n template = that.options.valueTemplate;\n\n\n if (!template) {\n template = kendo.template('#:this._text(data)#', { useWithBlock: false }).bind(that);\n } else {\n template = kendo.template(template);\n }\n\n that.valueTemplate = template;\n\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch(e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n\n _textAccessor: function(text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n\n if (text === undefined) {\n return span.text();\n }\n\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n\n if (typeof this.options.optionLabel === \"string\" && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n\n var getElements = function(){\n return {\n elements: span.get(),\n data: [ { dataItem: dataItem } ]\n };\n };\n\n this.angular(\"cleanup\", getElements);\n\n try {\n span.html(template(dataItem));\n } catch(e) {\n //dataItem has missing fields required in custom template\n span.html(\"\");\n }\n\n this.angular(\"compile\", getElements);\n },\n\n _preselect: function(value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n\n this._accessor(value);\n this._textAccessor(text);\n\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n\n this.listView.setValue(value);\n\n this._initialIndex = null;\n this._presetValue = true;\n },\n\n _assignInstance: function(text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n\n if (dataTextField) {\n assign(dataItem, dataTextField.split(\".\"), text);\n assign(dataItem, this.options.dataValueField.split(\".\"), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n\n return dataItem;\n }\n });\n\n function assign(instance, fields, value) {\n var idx = 0,\n lastIndex = fields.length - 1,\n field;\n\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n\n if (!(field in instance)) {\n instance[field] = {};\n }\n\n instance = instance[field];\n }\n\n instance[fields[lastIndex]] = value;\n }\n\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n\n ui.plugin(DropDownList);\n\n kendo.cssProperties.registerPrefix(\"DropDownList\", \"k-picker-\");\n\n kendo.cssProperties.registerValues(\"DropDownList\", [{\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","ui","html","List","Select","support","activeElement","_activeElement","ObservableObject","data","keys","ns","nsFocusEvent","DISABLED","READONLY","CHANGE","FOCUSED","STATEDISABLED","ARIA_DISABLED","ARIA_READONLY","CLICKEVENTS","HOVEREVENTS","TABINDEX","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","OPEN","CLOSE","DropDownList","extend","init","element","options","that","this","index","optionLabel","text","disabled","Array","isArray","dataSource","fn","call","on","_focusHandler","bind","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_reset","_prev","_word","_wrapper","_tabindex","wrapper","attr","_span","_popup","_mobile","_dataSource","_ignoreCase","_filterHeader","_aria","browser","chrome","_enable","_attachFocusHandlers","_oldIndex","selectedIndex","_initialIndex","requireValueMapper","_initList","listView","one","_attachAriaActiveDescendant","_cascade","e","sender","bound","hasOptionLabel","_textAccessor","_optionLabelText","autoBind","fetch","_isSelect","children","parents","is","enable","preventDefault","notify","_applyCssClasses","enabled","value","delay","height","dataTextField","dataValueField","cascadeFrom","cascadeFromField","cascadeFromParentField","ignoreCase","animation","filter","minLength","enforceMinLength","virtual","template","valueTemplate","optionLabelTemplate","groupTemplate","fixedGroupTemplate","autoWidth","popup","filterTitle","size","fillMode","rounded","events","setOptions","_listOptions","_accessors","select","destroy","off","_arrow","_arrowIcon","filterInput","open","isFiltered","filters","length","visible","_state","_open","val","refresh","_optionID","_resizeFilterInput","_filterSource","_allowOpening","_focusFilter","_hovered","_focusItem","close","inputId","find","_focusElement","originalPrevent","_prevent","isInputActive","caret","addClass","closest","css","removeClass","trigger","toggle","_toggle","current","candidate","focus","_focus","dataItem","selectedDataItems","getByUid","hasClass","items","flatView","_optionLabelDataItem","loweredText","toLowerCase","_select","_text","done","_clearFilter","valueFn","_accessor","_request","_valueSetter","unbind","_isFilterEnabled","_fetchData","_old","_valueBeforeCascade","remove","expr","prependTo","list","_click","_toggleHover","angular","elements","isPlainObject","_assignInstance","_buildOptions","optionLabelValue","_value","_options","unifyType","_customOption","_custom","_listBound","initialIndex","filtered","_presetValue","_renderFooter","_renderNoData","_toggleNoData","_resizePopup","position","_fetch","_selectValue","_hideBusy","_listChange","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","top","clearTimeout","_typingTimeout","mobileOS","ios","_change","_blur","_wrapperMousedown","_wrapperClick","_focused","_editable","disable","readonly","add","dropDownWrapper","prop","_keydown","mousedown","_keypress","removeAttr","key","keyCode","altKey","handled","isPopupVisible","LEFT","UP","RIGHT","DOWN","ESC","ENTER","SPACEBAR","_move","HOME","_firstItem","END","_lastItem","_getElementDataItem","item","_matchText","word","indexOf","_shuffleData","splitIndex","optionDataItem","concat","slice","_selectNext","dataLength","isInLoop","sameCharsOnly","_last","startIndex","oldFocusedItem","normalizeIndex","toJSON","idx","which","character","String","fromCharCode","charCode","_popupOpen","wrap","dataItemByIndex","getElementIndex","currentTarget","_userTriggered","active","compareElement","touchEnabled","touch","MSPointers","pointers","_searchByWord","_inputValue","setTimeout","search","_get","found","isFunction","jQueryCandidate","focusFirst","_resetOptionLabel","focusLast","_nextItem","focusIndex","focusNext","_prevItem","focusPrev","focusedItem","highlightFirst","mapValueTo","content","scrollTop","scrollToIndex","additionalClass","keepState","_dataValue","_triggerCascade","root","eq","effects","android","meego","wp","filterTemplate","placeholder","title","role","aria-label","aria-haspopup","aria-autocomplete","parent","prepend","append","SELECTOR","guid","span","arrowBtn","renderButton","icon","shape","DOMelement","style","cssText","className","accesskey","unselectable","aria-expanded","hide","_clearSelection","_openHandler","_adjustListWidth","ul","_closeHandler","useWithBlock","Error","optionLabelText","getElements","get","_preselect","setValue","assign","split","instance","fields","lastIndex","field","charAt","plugin","cssProperties","registerPrefix","registerValues","values","roundedValues","amd","a1","a2","a3"],"mappings":"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"}