UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

1,484 lines (1,169 loc) 46 kB
import './kendo.list.js'; import './kendo.mobile.scroller.js'; import './kendo.virtuallist.js'; import './kendo.html.button.js'; import './kendo.icons.js'; import './kendo.data.js'; import './kendo.core.js'; import './kendo.licensing.js'; import '@progress/kendo-licensing'; import './kendo.data.odata.js'; import './kendo.data.xml.js'; import './kendo.popup.js'; import './kendo.label.js'; import './kendo.floatinglabel.js'; import './kendo.actionsheet.js'; import './kendo.html.icon.js'; import './kendo.html.base.js'; import '@progress/kendo-svg-icons'; import './dropdowns-loader-00xUvouJ.js'; import './kendo.fx.js'; import './kendo.draganddrop.js'; import './kendo.userevents.js'; import './valueMapper-CXgI6HWc.js'; const __meta__ = { id: "dropdownlist", name: "DropDownList", category: "web", description: "The DropDownList widget displays a list of values and allows the selection of a single value from the list.", depends: [ "list", "html.button", "icons" ], features: [ { id: "mobile-scroller", name: "Mobile scroller", description: "Support for kinetic scrolling in mobile device", depends: [ "mobile.scroller" ] }, { id: "virtualization", name: "VirtualList", description: "Support for virtualization", depends: [ "virtuallist" ] } ] }; (function($, undefined$1) { var kendo = window.kendo, encode = kendo.htmlEncode, ui = kendo.ui, html = kendo.html, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = ".kendoDropDownList", nsFocusEvent = ns + "FocusEvent", DISABLED = "disabled", READONLY = "readonly", CHANGE = "change", FOCUSED = "k-focus", STATEDISABLED = "k-disabled", ARIA_DISABLED = "aria-disabled", ARIA_READONLY = "aria-readonly", CLICKEVENTS = "click" + ns + " touchend" + ns, HOVEREVENTS = "mouseenter" + ns + " mouseleave" + ns, TABINDEX = "tabindex", STATE_FILTER = "filter", STATE_ACCEPT = "accept", 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", OPEN = "open", CLOSE = "close"; var DropDownList = Select.extend( { init: function(element, options) { var that = this; var index = options && options.index; var optionLabel, text, disabled; that.ns = ns; options = Array.isArray(options) ? { dataSource: options } : options; Select.fn.init.call(that, element, options); options = that.options; element = that.element.on("focus" + ns, that._focusHandler.bind(that)); that._focusInputHandler = that._focusInput.bind(that); that.optionLabel = $(); that._optionLabel(); that._inputTemplate(); that._reset(); that._prev = ""; that._word = ""; that._wrapper(); that._tabindex(); that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX)); that._span(); that._popup(); that._mobile(); that._dataSource(); that._ignoreCase(); if (options.label) { this._label(); } that._aria(); that._enable(); that._oldIndex = that.selectedIndex = -1; if (index !== undefined$1) { options.index = index; } that._initialIndex = options.index; that.requireValueMapper(that.options); that._initList(); that.listView.one("dataBound", that._attachAriaActiveDescendant.bind(that)); that._cascade(); that.one("set", function(e) { if (!e.sender.listView.bound() && that.hasOptionLabel()) { that._textAccessor(that._optionLabelText()); } }); if (options.autoBind) { that.dataSource.fetch(); } else if (that.selectedIndex === -1) { //selectedIndex !== -1 when cascade functionality happens instantly text = options.text || ""; if (!text) { optionLabel = options.optionLabel; if (optionLabel && options.index === 0) { text = optionLabel; } else if (that._isSelect) { text = element.children(":selected").text(); } } that._textAccessor(text); } disabled = $(that.element).parents("fieldset").is(':disabled'); if (disabled) { that.enable(false); } that.listView.bind("click", function(e) { e.preventDefault(); }); kendo.notify(that); that._applyCssClasses(); }, options: { name: "DropDownList", enabled: true, autoBind: true, _allowFilterPaste: true, // Related to the paste functionality in the Grid. In certain cases the focus remains on the dropdownlist and the paste action is executed on it instead of the Grid. index: 0, text: null, value: null, delay: 500, height: 200, dataTextField: "", dataValueField: "", optionLabel: "", cascadeFrom: "", cascadeFromField: "", cascadeFromParentField: "", ignoreCase: true, animation: {}, filter: "none", minLength: 1, enforceMinLength: false, virtual: false, template: null, valueTemplate: null, optionLabelTemplate: null, groupTemplate: (data) => encode(data), fixedGroupTemplate: (data) => encode(data), autoWidth: false, popup: null, filterTitle: null, size: "medium", fillMode: "solid", rounded: "medium", label: null, popupFilter: true }, events: [ "open", "close", CHANGE, "select", "filtering", "dataBinding", "dataBound", "cascade", "set", "kendoKeydown" ], setOptions: function(options) { Select.fn.setOptions.call(this, options); this.listView.setOptions(this._listOptions(options)); this._optionLabel(); this._inputTemplate(); this._accessors(); this._removeFilterHeader(); this._addFilterHeader(); this._enable(); this._aria(); if (!this.value() && this.hasOptionLabel()) { this.select(0); } }, destroy: function() { var that = this; Select.fn.destroy.call(that); that.wrapper.off(ns); that.wrapper.off(nsFocusEvent); that.element.off(ns); that._arrow.off(); that._arrow = null; that._arrowIcon = null; that.optionLabel.off(); if (that.filterInput) { that.filterInput.off(nsFocusEvent); } }, open: function() { var that = this; var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false; var listView = this.listView; if (that.popup.visible()) { return; } if (!that.listView.bound() || that._state === STATE_ACCEPT) { that._open = true; that._state = "rebind"; if (that.filterInput) { that.filterInput.val(""); that._prev = ""; } if (that.filterInput && that.options.minLength !== 1 && !isFiltered) { that.refresh(); that.popup.one("activate", that._focusInputHandler); that.wrapper.attr("aria-activedescendant", listView._optionID); that.popup.open(); that._resizeFilterInput(); } else { that._filterSource(); } } else if (that._allowOpening()) { that._focusFilter = true; that.popup.one("activate", that._focusInputHandler); // In some cases when the popup is opened resize is triggered which will cause it to close // Setting the below flag will prevent this from happening that.popup._hovered = true; that.wrapper.attr("aria-activedescendant", listView._optionID); that.popup.open(); that._resizeFilterInput(); that._focusItem(); } }, close: function() { this._attachAriaActiveDescendant(); this.popup.close(); }, _attachAriaActiveDescendant: function() { var wrapper = this.wrapper, inputId = wrapper.find(".k-input-inner").attr('id'); wrapper.attr("aria-describedby", inputId); }, _focusInput: function() { if (!this._hasActionSheet()) { this._focusElement(this.filterInput); } }, _resizeFilterInput: function() { var filterInput = this.filterInput; var originalPrevent = this._prevent; if (!filterInput || this._hasActionSheet()) { return; } var isInputActive = this.filterInput[0] === activeElement(); var caret = kendo.caret(this.filterInput[0])[0]; this._prevent = true; filterInput.addClass("k-hidden"); filterInput.closest(".k-list-filter").css("width", this.popup.element.width()); filterInput.removeClass("k-hidden"); if (isInputActive) { filterInput.trigger("focus"); kendo.caret(filterInput[0], caret); } this._prevent = originalPrevent; }, _allowOpening: function() { return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this); }, toggle: function(toggle) { this._toggle(toggle, true); }, current: function(candidate) { var current; if (candidate === undefined$1) { current = this.listView.focus(); if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) { return this.optionLabel; } return current; } this._focus(candidate); }, dataItem: function(index) { var that = this; var dataItem = null; if (index === null) { return index; } if (index === undefined$1) { dataItem = that.listView.selectedDataItems()[0]; } else { if (typeof index !== "number") { if (that.options.virtual) { return that.dataSource.getByUid($(index).data("uid")); } if (index.hasClass("k-list-optionlabel")) { index = -1; } else { index = $(that.items()).index(index); } } else if (that.hasOptionLabel()) { index -= 1; } dataItem = that.dataSource.flatView()[index]; } if (!dataItem) { dataItem = that._optionLabelDataItem(); } return dataItem; }, refresh: function() { this.listView.refresh(); }, text: function(text) { var that = this; var loweredText; var ignoreCase = that.options.ignoreCase; text = text === null ? "" : text; if (text !== undefined$1) { if (typeof text !== "string") { that._textAccessor(text); return; } loweredText = ignoreCase ? text.toLowerCase() : text; that._select(function(data) { data = that._text(data); if (ignoreCase) { data = (data + "").toLowerCase(); } return data === loweredText; }).done(function() { that._textAccessor(that.dataItem() || text); that._refreshFloatingLabel(); }); } else { return that._textAccessor(); } }, _clearFilter: function() { $(this.filterInput).val(""); Select.fn._clearFilter.call(this); }, value: function(value) { var that = this; var listView = that.listView; var dataSource = that.dataSource; var valueFn = function() { that.value(value); }; if (value === undefined$1) { value = that._accessor() || that.listView.value()[0]; return value === undefined$1 || value === null ? "" : value; } that.requireValueMapper(that.options, value); if (value || !that.hasOptionLabel()) { that._initialIndex = null; } this.trigger("set", { value: value }); if (that._request && that.options.cascadeFrom && that.listView.bound()) { if (that._valueSetter) { dataSource.unbind(CHANGE, that._valueSetter); } that._valueSetter = valueFn.bind(that); dataSource.one(CHANGE, that._valueSetter); return; } if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) { that._clearFilter(); } else { that._fetchData(); } listView.value(value).done(function() { that._old = that._valueBeforeCascade = that._accessor(); that._oldIndex = that.selectedIndex; that._refreshFloatingLabel(); }); }, hasOptionLabel: function() { return this.optionLabel && !!this.optionLabel[0]; }, _optionLabel: function() { var that = this; var options = that.options; var optionLabel = options.optionLabel; var template = options.optionLabelTemplate; if (!optionLabel) { that.optionLabel.off().remove(); that.optionLabel = $(); return; } if (!template) { template = (data) => (typeof optionLabel === "string" ? encode(data) : encode(kendo.getter(options.dataTextField)(data))); } if (typeof template !== "function") { template = kendo.template(template); } that.optionLabelTemplate = template; if (!that.hasOptionLabel()) { that.optionLabel = $('<div role="option" class="k-list-optionlabel"></div>').prependTo(that.list); } that.optionLabel.html(template(optionLabel)) .off() .on(CLICKEVENTS, that._click.bind(that)) .on(HOVEREVENTS, that._toggleHover); }, _optionLabelText: function() { var optionLabel = this.options.optionLabel; return (typeof optionLabel === "string") ? optionLabel : this._text(optionLabel); }, _optionLabelDataItem: function() { var that = this; var optionLabel = that.options.optionLabel; if (that.hasOptionLabel()) { return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), ""); } return undefined$1; }, _buildOptions: function(data) { var that = this; if (!that._isSelect) { return; } var value = that.listView.value()[0]; var optionLabel = that._optionLabelDataItem(); var optionLabelValue = optionLabel && that._value(optionLabel); if (value === undefined$1 || value === null) { value = ""; } if (optionLabel) { if (optionLabelValue === undefined$1 || optionLabelValue === null) { optionLabelValue = ""; } optionLabel = '<option value="' + optionLabelValue + '">' + that._text(optionLabel) + "</option>"; } that._options(data, optionLabel, value); if (value !== List.unifyType(that._accessor(), typeof value)) { that._customOption = null; that._custom(value); } }, _listBound: function() { var that = this; var initialIndex = that._initialIndex; var filtered = that._state === STATE_FILTER; var data = that.dataSource.flatView(); var dataItem; that._presetValue = false; that._renderFooter(); that._renderNoData(); that._toggleNoData(!data.length); that._resizePopup(true); that.popup.position(); that._buildOptions(data); if (!filtered) { if (that._open) { that.toggle(that._allowOpening()); } that._open = false; if (!that._fetch) { if (data.length) { if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) { that.select(initialIndex); } that._initialIndex = null; dataItem = that.listView.selectedDataItems()[0]; if (dataItem && that.text() !== that._text(dataItem)) { that._selectValue(dataItem); } } else if (that._textAccessor() !== that._optionLabelText()) { that.listView.value(""); that._selectValue(null); that._oldIndex = that.selectedIndex; } } } that._hideBusy(); that.trigger("dataBound"); }, _listChange: function() { this._selectValue(this.listView.selectedDataItems()[0]); if (this._presetValue || (this._old && this._oldIndex === -1)) { this._oldIndex = this.selectedIndex; } }, _filterPaste: function() { if (this.options._allowFilterPaste) { this._search(); } }, _attachFocusHandlers: function() { var that = this; var wrapper = that.wrapper; wrapper.on("focusin" + nsFocusEvent, that._focusinHandler.bind(that)) .on("focusout" + nsFocusEvent, that._focusoutHandler.bind(that)); if (that.filterInput) { that.filterInput.on("focusin" + nsFocusEvent, that._focusinHandler.bind(that)) .on("focusout" + nsFocusEvent, that._focusoutHandler.bind(that)); } }, _focusHandler: function() { this.wrapper.trigger("focus"); }, _focusinHandler: function() { this.wrapper.addClass(FOCUSED); this._prevent = false; }, _focusoutHandler: function(e) { var that = this; var isIFrame = window.self !== window.top; if (that.wrapper.find(e.relatedTarget).length > 0) { return; } if (!that._prevent) { clearTimeout(that._typingTimeout); if (support.mobileOS.ios && isIFrame) { that._change(); } else { that._blur(); } that.wrapper.removeClass(FOCUSED); that._prevent = true; that._open = false; that.element.trigger("blur"); } }, _wrapperMousedown: function(e) { const condition = this._hasActionSheet() ? (this.filterInput && e.currentTarget === this.filterInput[0]) : (this.filterInput && e.currentTarget !== this.filterInput[0]); this._prevent = condition; }, _wrapperClick: function(e) { e.preventDefault(); this.popup.unbind("activate", this._focusInputHandler); this._focused = this.wrapper; this._prevent = false; this._toggle(); }, _editable: function(options) { var that = this; var element = that.element; var disable = options.disable; var readonly = options.readonly; var wrapper = that.wrapper.add(that.filterInput).off(ns); var dropDownWrapper = that.wrapper.off(HOVEREVENTS); if (!readonly && !disable) { element.prop(DISABLED, false).prop(READONLY, false); dropDownWrapper .removeClass(STATEDISABLED) .on(HOVEREVENTS, that._toggleHover); wrapper .attr(TABINDEX, wrapper.data(TABINDEX)) .attr(ARIA_DISABLED, false) .attr(ARIA_READONLY, false) .on("keydown" + ns, that, that._keydown.bind(that)) .on(kendo.support.mousedown + ns, that._wrapperMousedown.bind(that)) .on("paste" + ns, that._filterPaste.bind(that)); that.wrapper.on("click" + ns, that._wrapperClick.bind(that)); if (!that.filterInput) { wrapper.on("keypress" + ns, that._keypress.bind(that)); } else { wrapper.on("input" + ns, that._search.bind(that)); } } else if (disable) { wrapper.removeAttr(TABINDEX); dropDownWrapper.addClass(STATEDISABLED); } else { dropDownWrapper.removeClass(STATEDISABLED); } element.attr(DISABLED, disable) .attr(READONLY, readonly); wrapper.attr(ARIA_DISABLED, disable) .attr(ARIA_READONLY, readonly); }, _keydown: function(e) { var that = this; var key = e.keyCode; var altKey = e.altKey; var isInputActive; var handled; var isPopupVisible = that.popup.visible(); if (that.filterInput) { isInputActive = that.filterInput[0] === activeElement(); } if (key === keys.LEFT) { key = keys.UP; handled = true; } else if (key === keys.RIGHT) { key = keys.DOWN; handled = true; } if (handled && isInputActive) { return; } e.keyCode = key; if ((altKey && key === keys.UP) || key === keys.ESC) { that._focusElement(that.wrapper); } if (that._state === STATE_FILTER && key === keys.ESC) { that._clearFilter(); that._open = false; that._state = STATE_ACCEPT; } if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) { e.preventDefault(); return; } if (key === keys.SPACEBAR && !isInputActive) { that.toggle(!isPopupVisible); e.preventDefault(); } handled = that._move(e); if (handled) { return; } if (!isPopupVisible || !that.filterInput) { var current = that._focus(); if (key === keys.HOME) { handled = true; that._firstItem(); } else if (key === keys.END) { handled = true; that._lastItem(); } if (handled) { if (that.trigger("select", { dataItem: that._getElementDataItem(that._focus()), item: that._focus() })) { that._focus(current); return; } that._select(that._focus(), true).done(function() { if (!isPopupVisible) { that._blur(); } }); e.preventDefault(); } } if (!altKey && !handled && that.filterInput) { that._search(); } }, _matchText: function(text, word) { var ignoreCase = this.options.ignoreCase; if (text === undefined$1 || text === null) { return false; } text = text + ""; if (ignoreCase) { text = text.toLowerCase(); } return text.indexOf(word) === 0; }, _shuffleData: function(data, splitIndex) { var optionDataItem = this._optionLabelDataItem(); if (optionDataItem) { data = [optionDataItem].concat(data); } return data.slice(splitIndex).concat(data.slice(0, splitIndex)); }, _selectNext: function() { var that = this; var data = that.dataSource.flatView(); var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0); var isInLoop = sameCharsOnly(that._word, that._last); var startIndex = that.selectedIndex; var oldFocusedItem; var text; if (startIndex === -1) { startIndex = 0; } else { startIndex += isInLoop ? 1 : 0; startIndex = normalizeIndex(startIndex, dataLength); } data = data.toJSON ? data.toJSON() : data.slice(); data = that._shuffleData(data, startIndex); for (var idx = 0; idx < dataLength; idx++) { text = that._text(data[idx]); if (isInLoop && that._matchText(text, that._last)) { break; } else if (that._matchText(text, that._word)) { break; } } if (idx !== dataLength) { oldFocusedItem = that._focus(); that._select(normalizeIndex(startIndex + idx, dataLength)).done(function() { var done = function() { if (!that.popup.visible()) { that._change(); } }; if (that.trigger("select", { dataItem: that._getElementDataItem(that._focus()), item: that._focus() })) { that._select(oldFocusedItem).done(done); } else { done(); } }); } }, _keypress: function(e) { var that = this; if (e.which === 0 || e.keyCode === kendo.keys.ENTER) { return; } var character = String.fromCharCode(e.charCode || e.keyCode); if (that.options.ignoreCase) { character = character.toLowerCase(); } if (character === " ") { e.preventDefault(); } that._word += character; that._last = character; that._search(); }, _popupOpen: function(e) { var popup = this.popup; if (e.isDefaultPrevented() || this._hasActionSheet()) { return; } popup.wrapper = kendo.wrap(popup.element); if (popup.element.closest(".km-root")[0]) { popup.wrapper.addClass("km-popup km-widget"); this.wrapper.addClass("km-widget"); } }, _popup: function() { Select.fn._popup.call(this); this.popup.element.addClass("k-dropdownlist-popup"); this.popup.one("open", this._popupOpen.bind(this)); }, _postCreatePopup: function() { Select.fn._postCreatePopup.call(this); this._attachFocusHandlers(); }, _getElementDataItem: function(element) { if (!element || !element[0]) { return null; } if (element[0] === this.optionLabel[0]) { return this._optionLabelDataItem(); } return this.listView.dataItemByIndex(this.listView.getElementIndex(element)); }, _click: function(e) { var that = this; var item = e.item || $(e.currentTarget); e.preventDefault(); if (that.trigger("select", { dataItem: that._getElementDataItem(item), item: item })) { that.close(); return; } that._userTriggered = true; that._select(item).done(function() { that._blur(); that._focusElement(that.wrapper); }); }, _focusElement: function(element) { var active = activeElement(); var wrapper = this.wrapper; var filterInput = this.filterInput; var compareElement = element === filterInput ? wrapper : filterInput; var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers); if (filterInput && filterInput[0] === element[0] && touchEnabled) { return; } if (filterInput && (compareElement[0] === active || this._focusFilter)) { this._focusFilter = false; this._prevent = true; this._focused = element.trigger("focus"); } }, _searchByWord: function(word) { if (!word) { return; } var that = this; var ignoreCase = that.options.ignoreCase; if (ignoreCase) { word = word.toLowerCase(); } that._select(function(dataItem) { return that._matchText(that._text(dataItem), word); }); }, _inputValue: function() { return this.text(); }, _search: function() { var that = this; var dataSource = that.dataSource; clearTimeout(that._typingTimeout); if (that._isFilterEnabled()) { that._typingTimeout = setTimeout(function() { var value = that.filterInput.val(); if (that._prev !== value) { that._prev = value; that.search(value); that._resizeFilterInput(); } that._typingTimeout = null; }, that.options.delay); } else { that._typingTimeout = setTimeout(function() { that._word = ""; }, that.options.delay); if (!that.listView.bound()) { dataSource.fetch().done(function() { that._selectNext(); }); return; } that._selectNext(); } }, _get: function(candidate) { var data, found, idx; var isFunction = typeof candidate === "function"; var jQueryCandidate = !isFunction ? $(candidate) : $(); if (this.hasOptionLabel()) { if (typeof candidate === "number") { if (candidate > -1) { candidate -= 1; } } else if (jQueryCandidate.hasClass("k-list-optionlabel")) { candidate = -1; } } if (isFunction) { data = this.dataSource.flatView(); for (idx = 0; idx < data.length; idx++) { if (candidate(data[idx])) { candidate = idx; found = true; break; } } if (!found) { candidate = -1; } } return candidate; }, _firstItem: function() { if (this.hasOptionLabel()) { this._focus(this.optionLabel); } else { this.listView.focusFirst(); } }, _lastItem: function() { this._resetOptionLabel(); this.listView.focusLast(); }, _nextItem: function() { var focusIndex; if (this.optionLabel.hasClass("k-focus")) { this._resetOptionLabel(); this.listView.focusFirst(); focusIndex = 1; } else { focusIndex = this.listView.focusNext(); } return focusIndex; }, _prevItem: function() { var focusIndex; if (this.optionLabel.hasClass("k-focus")) { return; } focusIndex = this.listView.focusPrev(); if (!this.listView.focus() && !this.options.virtual) { this._focus(this.optionLabel); } return focusIndex; }, _focusItem: function() { var options = this.options; var listView = this.listView; var focusedItem = listView.focus(); var index = listView.select(); index = index[index.length - 1]; if (index === undefined$1 && options.highlightFirst && !focusedItem) { index = 0; } if (index !== undefined$1) { listView.focus(index); } else { if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== "dataItem")) { this._focus(this.optionLabel); this._select(this.optionLabel); this.listView.content.scrollTop(0); } else { listView.scrollToIndex(0); } } }, _resetOptionLabel: function(additionalClass) { this.optionLabel.removeClass("k-focus" + (additionalClass || "")).removeAttr("id"); }, _focus: function(candidate) { var listView = this.listView; var optionLabel = this.optionLabel; if (candidate === undefined$1) { candidate = listView.focus(); if (!candidate && optionLabel.hasClass("k-focus")) { candidate = optionLabel; } return candidate; } this._resetOptionLabel(); candidate = this._get(candidate); listView.focus(candidate); if (candidate === -1) { optionLabel.addClass("k-focus") .attr("id", listView._optionID); if (this.filterInput) { this.filterInput .removeAttr("aria-activedescendant") .attr("aria-activedescendant", listView._optionID); } } }, _select: function(candidate, keepState) { var that = this; candidate = that._get(candidate); return that.listView.select(candidate).done(function() { if (!keepState && that._state === STATE_FILTER) { that._state = STATE_ACCEPT; } if (candidate === -1) { that._selectValue(null); } }); }, _selectValue: function(dataItem) { var that = this; var optionLabel = that.options.optionLabel; var idx = that.listView.select(); var value = ""; var text = ""; idx = idx[idx.length - 1]; if (idx === undefined$1) { idx = -1; } this._resetOptionLabel(" k-selected"); if (dataItem || dataItem === 0) { text = dataItem; value = that._dataValue(dataItem); if (optionLabel) { idx += 1; } } else if (optionLabel) { that._focus(that.optionLabel.addClass("k-selected")); text = that._optionLabelText(); if (typeof optionLabel === "string") { value = ""; } else { value = that._value(optionLabel); } idx = 0; } that.selectedIndex = idx; if (value === null) { value = ""; } that._textAccessor(text); that._accessor(value, idx); that._triggerCascade(); }, _mobile: function() { var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents(".km-root").eq(0); if (root.length && mobileOS) { popup.options.animation.open.effects = (mobileOS.android || mobileOS.meego) ? "fadeIn" : (mobileOS.ios || mobileOS.wp) ? "slideIn:up" : popup.options.animation.open.effects; } }, _span: function() { var that = this, wrapper = that.wrapper, SELECTOR = "span.k-input-value-text", id = kendo.guid(), options = that.options, span, arrowBtn; span = wrapper.find(SELECTOR); if (!span[0]) { arrowBtn = html.renderButton('<button role="button" tabindex="-1" class="k-input-button" aria-label="select"></button>', { icon: "caret-alt-down", size: options.size, fillMode: options.fillMode, shape: "none", rounded: "none" }); wrapper.append('<span id="' + id + '" unselectable="on" class="k-input-inner">' + '<span class="k-input-value-text"></span>' + '</span>') .append(arrowBtn) .append(that.element); span = wrapper.find(SELECTOR); } that.span = span; that._arrow = wrapper.find(".k-input-button"); that._arrowIcon = that._arrow.find(".k-icon,.k-svg-icon"); }, _wrapper: function() { var that = this, element = that.element, DOMelement = element[0], wrapper; wrapper = element.parent(); if (!wrapper.is("span.k-picker")) { wrapper = element.wrap("<span />").parent(); wrapper[0].style.cssText = DOMelement.style.cssText; wrapper[0].title = DOMelement.title; } that._focused = that.wrapper = wrapper .addClass("k-picker k-dropdownlist") .addClass(DOMelement.className) .removeClass('input-validation-error') .css("display", "") .attr({ accesskey: element.attr("accesskey"), unselectable: "on", role: "combobox", "aria-expanded": false }); element.hide().removeAttr("accesskey"); }, _clearSelection: function(parent) { this.select(parent.value() ? 0 : -1); }, _openHandler: function(e) { this._adjustListWidth(); if (this.trigger(OPEN)) { e.preventDefault(); } else { this.wrapper.attr("aria-expanded", true); this.ul.attr("aria-hidden", false); } }, _closeHandler: function(e) { if (this.trigger(CLOSE)) { e.preventDefault(); } else { this.wrapper.attr("aria-expanded", false); this.ul.attr("aria-hidden", true); } }, _inputTemplate: function() { var that = this, template = that.options.valueTemplate; if (!template) { template = (data) => encode(that._text(data)); } else { template = kendo.template(template); } that.valueTemplate = template; if (that.hasOptionLabel() && !that.options.optionLabelTemplate) { try { that.valueTemplate(that._optionLabelDataItem()); } catch (e) { throw new Error(MSG_INVALID_OPTION_LABEL); } } }, _textAccessor: function(text) { var dataItem = null; var template = this.valueTemplate; var optionLabelText = this._optionLabelText(); var span = this.span; if (text === undefined$1) { return span.text(); } if ($.isPlainObject(text) || text instanceof ObservableObject) { dataItem = text; } else if (optionLabelText && optionLabelText === text) { dataItem = this.options.optionLabel; } if (!dataItem) { dataItem = this._assignInstance(text, this._accessor()); } if (this.hasOptionLabel()) { if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) { template = this.optionLabelTemplate; if (typeof this.options.optionLabel === "string" && !this.options.optionLabelTemplate) { dataItem = optionLabelText; } } } try { span.html(template(dataItem)); } catch (e) { //dataItem has missing fields required in custom template span.html(""); } }, _preselect: function(value, text) { if (!value && !text) { text = this._optionLabelText(); } this._accessor(value); this._textAccessor(text); this._old = this._accessor(); this._oldIndex = this.selectedIndex; this.listView.setValue(value); this._initialIndex = null; this._presetValue = true; }, _assignInstance: function(text, value) { var dataTextField = this.options.dataTextField; var dataItem = {}; if (dataTextField) { assign(dataItem, dataTextField.split("."), text); assign(dataItem, this.options.dataValueField.split("."), value); dataItem = new ObservableObject(dataItem); } else { dataItem = text; } return dataItem; } }); function assign(instance, fields, value) { var idx = 0, lastIndex = fields.length - 1, field; for (; idx < lastIndex; ++idx) { field = fields[idx]; if (!(field in instance)) { instance[field] = {}; } instance = instance[field]; } instance[fields[lastIndex]] = value; } function normalizeIndex(index, length) { if (index >= length) { index -= length; } return index; } function sameCharsOnly(word, character) { for (var idx = 0; idx < word.length; idx++) { if (word.charAt(idx) !== character) { return false; } } return true; } ui.plugin(DropDownList); kendo.cssProperties.registerPrefix("DropDownList", "k-picker-"); kendo.cssProperties.registerValues("DropDownList", [{ prop: "rounded", values: kendo.cssProperties.roundedValues.concat([['full', 'full']]) }]); })(window.kendo.jQuery); var kendo$1 = kendo; export { __meta__, kendo$1 as default };