{"version":3,"file":"kendo.virtuallist.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendovirtuallist","js","this","$","undefined$1","kendo","window","ui","encode","htmlEncode","Widget","DataBoundWidget","percentageUnitsRegex","LIST_ITEM","TABLE_ITEM","GROUPITEM","SELECTED","FOCUSED","HOVER","CHANGE","CLICK","LISTBOUND","ITEMCHANGE","ACTIVATE","DEACTIVATE","GROUP_ROW_SEL","VIRTUAL_LIST_NS","lastFrom","array","length","toArray","value","Array","isPrimitive","dataItem","appendChild","parent","className","tagName","element","document","createElement","render","data","templates","itemTemplate","template","hasColumns","options","columns","altRow","index","item","placeholderTemplate","header","group","html","fixedGroupTemplate","angular","elements","attr","uid","addClass","removeClass","renderedColumns","i","currentWidth","width","currentWidthInt","parseInt","widthStyle","widthValue","test","renderColumns","applyStylesFromKendoAttributes","empty","append","find","remove","toggleClass","current","selected","newGroup","isLastGroupedItem","groupTemplate","appendTo","top","y","style","webkitTransform","transform","position","isActivePromise","promise","state","VirtualList","extend","init","listSize","lineHeight","mockList","that","contentClasses","bound","_fetching","fn","call","itemHeight","css","left","visibility","body","parseFloat","getComputedStyles","height","contentSelector","split","join","wrapper","closest","content","wrap","thead","row","TABLE_LIST","before","prev","ariaLabel","ariaLabelledBy","on","_values","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_optionID","guid","_templates","setDataSource","dataSource","throttle","_renderItems","_triggerListBound","delay","_selectable","name","autoBind","listScreens","threshold","oppositeBuffer","type","selectable","dataValueField","mapValueTo","valueMapper","events","setOptions","itemClass","_selectProxy","off","refresh","items","_items","destroy","unbind","_refreshHandler","source","isArray","DataSource","create","_clean","_deferValueSet","mute","bind","setDSFilter","filter","view","fetch","skip","currentRangeStart","_selectingValue","_skip","trigger","_getValues","dataItems","getter","_valueGetter","map","_highlightSelectedItems","_getElementByDataItem","e","result","action","isItemChange","filtered","isFiltered","_mute","focus","_createList","skipUpdateOnBind","_emptySearch","done","itemsToMatch","found","j","itemsLength","selectedLength","changed","unchanged","push","mapChangedItems","removeAt","splice","_removeSelectedDataItem","valueGetter","idx","setValue","_forcePrefetch","slice","_valueDeferred","Deferred","select","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","newValue","dataView","_dataView","forSelection","success","response","mapValueToIndex","mapValueToDataItem","indexes","removed","_deselect","_triggerChange","added","_getIndecies","resolve","deferredRange","take","itemCount","ranges","defs","low","Math","floor","high","ceil","pages","each","_","deferred","end","existingRange","_multiplePrefetch","when","apply","prefetch","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","_findRange","min","total","dataItemByIndex","progress","range","selectedDataItems","scrollWith","scrollTop","scrollTo","scrollToIndex","candidate","id","triggerEvent","flatView","isNaN","_getElementByIndex","_focusedIndex","hasClass","removeAttr","_getElementLocation","_screenHeight","focusIndex","focusFirst","focusLast","lastIndex","heightContainer","offsetHeight","focusPrev","focusNext","indices","initialIndices","isAlreadySelected","singleSelection","prefetchStarted","_selectDeferred","_deselectCurrentValues","_select","_listCreated","callback","_lastDSFilter","Query","compareFilters","skipUpdate","noop","_lastScrollTop","_height","hasData","setScreenHeight","screenHeight","yPosition","yDownPostion","screenEnd","key","forEach","column","templateText","field","toString","_generateItems","count","text","tabIndex","setAttribute","minHeight","_saveInitialRanges","_ranges","start","reorder","get","_buildValueGetter","_setHeight","hide","show","_getter","_onScroll","force","getList","_listItems","_fixedHeader","_whenChanged","_reorderList","list","_calculateGroupPadding","_calculateColumnsHeaderPadding","currentHeight","innerHTML","padHeight","lastRequestedRange","lastRangeStart","pageSize","flatGroups","rangeStart","inRange","flatGroup","groups","len","groupLength","_getterDeferred","reject","then","firstItemIndex","_indexConstraint","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","firstVisibleGroup","fixedGroupText","_itemMapper","listType","currentIndex","_currentGroup","_range","_view","_getDataItemsCollection","lastScrollTop","_listIndex","theValidator","downThreshold","upThreshold","listValidator","theNew","currentOffset","Infinity","arr1","arr2","ns","list2","offset","range2","diff","abs","unshift","reshift","_bufferSizes","opposite","down","up","max","buffers","_clickHandler","getElementIndex","jQuery","elementIndex","selectedIndex","selectedIndexes","removedindexesCounter","inArray","_deselectSingleItem","children","values","oldSkip","currentTarget","isDefaultPrevented","firstItem","first","groupHeader","padding","display","support","scrollbar","isRtl","columnsHeader","plugin"],"sources":["kendo.virtuallist.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.data.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.data'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendovirtuallist = global.kendovirtuallist || {}, global.kendovirtuallist.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"virtuallist\",\n name: \"VirtualList\",\n category: \"framework\",\n depends: [ \"data\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n encode = kendo.htmlEncode,\n Widget = ui.Widget,\n DataBoundWidget = ui.DataBoundWidget,\n percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i,\n LIST_CONTENT = \"k-list-content k-virtual-content\",\n TABLE_CONTENT = \"k-table-body k-table-scroller\",\n HEADER = \"k-list-group-sticky-header\",\n LIST_ITEM = \"k-list-item\",\n TABLE_ITEM = \"k-table-row\",\n HEIGHTCONTAINER = \"k-height-container\",\n GROUPITEM = \"k-list-item-group-label\",\n LIST_UL = \"k-list-ul\",\n TABLE_LIST = \"k-table-list\",\n\n SELECTED = \"k-selected\",\n FOCUSED = \"k-focus\",\n HOVER = \"k-hover\",\n CHANGE = \"change\",\n CLICK = \"click\",\n LISTBOUND = \"listBound\",\n ITEMCHANGE = \"itemChange\",\n\n ACTIVATE = \"activate\",\n DEACTIVATE = \"deactivate\",\n\n GROUP_ROW_SEL = \".k-table-group-row\",\n\n VIRTUAL_LIST_NS = \".VirtualList\";\n\n function lastFrom(array) {\n return array[array.length - 1];\n }\n\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n\n function isPrimitive(dataItem) {\n return typeof dataItem === \"string\" || typeof dataItem === \"number\" || typeof dataItem === \"boolean\";\n }\n\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || \"div\");\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n\n return element;\n }\n\n function getDefaultItemHeight(listSize) {\n var mockList = $('
' +\n '
' +\n '' +\n '
' +\n '
');\n var lineHeight;\n\n mockList.css({\n position: \"absolute\",\n left: \"-200000px\",\n visibility: \"hidden\"\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find(\".k-list-item\")[0], [\"height\"]).height);\n mockList.remove();\n\n return lineHeight;\n }\n\n function bufferSizes(screenHeight, listScreens, opposite) { //in pixels\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n\n return function(list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n\n function scrollCallback(element, callback) {\n return function(force) {\n return callback(element.scrollTop, force);\n };\n }\n\n function syncList(reorder) {\n return function(list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n\n function position(element, y) {\n element.style.webkitTransform = 'translateY(' + y + \"px)\";\n element.style.transform = 'translateY(' + y + \"px)\";\n }\n\n function map2(callback, templates) {\n return function(arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, { item: $(arr1[i]), data: arr2[i].item, ns: kendo.ui });\n }\n }\n };\n }\n\n function reshift(items, diff) {\n var range;\n\n if (diff > 0) { // down\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else { // up\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n\n return range;\n }\n\n function render(element, data, templates) {\n var itemTemplate = templates.template,\n hasColumns = this.options.columns && this.options.columns.length,\n altRow = data.index % 2 === 1 ? \"k-table-alt-row\" : \"\";\n\n element = $(element);\n\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n\n if (data.index === 0 && this.header && data.group) {\n this.header.html(templates.fixedGroupTemplate(data.group));\n }\n\n this.angular(\"cleanup\", function() {\n return { elements: [ element ] };\n });\n\n element\n .attr(\"data-uid\", data.item ? data.item.uid : \"\")\n .attr(\"data-offset-index\", data.index);\n\n if (hasColumns && data.item) {\n if (altRow.length > 0) {\n element.addClass(altRow);\n } else {\n element.removeClass(\"k-table-alt-row\");\n }\n\n var renderedColumns = $(renderColumns(this.options, data.item, templates));\n kendo.applyStylesFromKendoAttributes(renderedColumns, [\"width\", \"max-width\"]);\n element.empty().append(renderedColumns);\n } else {\n element.find(\".\" + GROUPITEM).remove();\n element.find(\".k-list-item-text\").html(itemTemplate(data.item || {}));\n }\n\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass(\"k-first\", data.newGroup);\n element.toggleClass(\"k-last\", data.isLastGroupedItem);\n element.toggleClass(\"k-loading-item\", !data.item);\n\n if (data.index !== 0 && data.newGroup) {\n if (hasColumns) {\n $('' + templates.groupTemplate(data.group) + '')\n .appendTo(element);\n } else {\n $(\"
\")\n .appendTo(element)\n .html(templates.groupTemplate(data.group));\n }\n } else if (data.group && hasColumns) {\n element.append($(''));\n }\n\n if (data.top !== undefined$1) {\n position(element[0], data.top);\n }\n\n this.angular(\"compile\", function() {\n return { elements: [ element ], data: [ { dataItem: data.item, group: data.group, newGroup: data.newGroup } ] };\n });\n }\n\n function renderColumns(options, dataItem, templates) {\n var item = \"\";\n\n for (var i = 0; i < options.columns.length; i++) {\n var currentWidth = options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n\n if (currentWidth) {\n var widthValue = \"\" + currentWidthInt + (percentageUnitsRegex.test(currentWidth) ? \"%\" : \"px\");\n widthStyle = (kendo.attr(\"style-width\")) + \"=\\\"\" + widthValue + \"\\\" \" + (kendo.attr(\"style-max-width\")) + \"=\\\"\" + widthValue + \"\\\"\";\n }\n\n item += \"\";\n item += templates[\"column\" + i](dataItem);\n item += \"\";\n }\n\n return item;\n }\n\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n\n var changed = [];\n var unchanged = [];\n\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({ index: i, item: dataItem });\n break;\n }\n }\n\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n\n function isActivePromise(promise) {\n return promise && promise.state() !== \"resolved\";\n }\n\n var VirtualList = DataBoundWidget.extend({\n init: function(element, options) {\n var that = this,\n contentClasses = options.columns && options.columns.length ? TABLE_CONTENT : LIST_CONTENT;\n\n that.bound(false);\n that._fetching = false;\n\n Widget.fn.init.call(that, element, options);\n\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight(options.listSize);\n }\n\n options = that.options;\n\n that.element.attr(\"role\", \"listbox\");\n\n var contentSelector = \".\" + contentClasses.split(' ').join('.');\n var wrapper = that.element.closest(contentSelector);\n\n that.content = that.wrapper = wrapper.length ? wrapper : that.element.wrap(\"
\").parent();\n\n if (that.options.columns && that.options.columns.length) {\n var thead = that.element.closest(\".k-data-table\").find('.k-table-thead');\n var row = $('' +\n '' +\n '');\n\n thead.append(row);\n\n that.header = row.find(\".k-table-th\");\n that.element.addClass(TABLE_LIST + \" k-virtual-table\");\n } else {\n that.header = that.content.before(\"
\").prev();\n that.element.addClass(LIST_UL);\n }\n\n if (options.ariaLabel) {\n this.element.attr(\"aria-label\", options.ariaLabel);\n } else if (options.ariaLabelledBy) {\n this.element.attr(\"aria-labelledby\", options.ariaLabelledBy);\n }\n\n that.element.on(\"mouseenter\" + VIRTUAL_LIST_NS, \"li:not(.k-loading-item)\", function() { $(this).addClass(HOVER); })\n .on(\"mouseleave\" + VIRTUAL_LIST_NS, \"li\", function() { $(this).removeClass(HOVER); });\n\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n\n that._templates();\n\n that.setDataSource(options.dataSource);\n\n that.content.on(\"scroll\" + VIRTUAL_LIST_NS, kendo.throttle(function() {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n\n that._selectable();\n },\n\n options: {\n name: \"VirtualList\",\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: \"flat\",\n selectable: false,\n value: [],\n dataValueField: null,\n template: function (data) { return encode(data); },\n placeholderTemplate: function () { return \"loading...\"; },\n groupTemplate: function (data) { return encode(data); },\n fixedGroupTemplate: function (data) { return encode(data); },\n mapValueTo: \"index\",\n valueMapper: null,\n ariaLabel: null,\n ariaLabelledBy: null\n },\n\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n\n setOptions: function(options) {\n var itemClass = this.options.columns && this.options.columns.length ? TABLE_ITEM : LIST_ITEM;\n\n Widget.fn.setOptions.call(this, options);\n\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, \".\" + itemClass, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n\n this._templates();\n this.refresh();\n },\n\n items: function() {\n return $(this._items);\n },\n\n destroy: function() {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n\n setDataSource: function(source) {\n var that = this;\n var dataSource = source || {};\n var value;\n\n dataSource = Array.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n\n that._clean();\n that.bound(false);\n\n that._deferValueSet = true;\n value = that.value();\n\n that.value([]);\n that.mute(function() {\n that.value(value);\n });\n } else {\n that._refreshHandler = that.refresh.bind(that);\n }\n\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n\n that.setDSFilter(dataSource.filter());\n\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n\n skip: function() {\n return this.dataSource.currentRangeStart();\n },\n\n _triggerListBound: function() {\n var that = this;\n var skip = that.skip();\n\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n\n _getValues: function(dataItems) {\n var getter = this._valueGetter;\n\n return $.map(dataItems, function(dataItem) {\n return getter(dataItem);\n });\n },\n\n _highlightSelectedItems: function() {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n if (item.length) {\n item.addClass(SELECTED);\n }\n }\n },\n\n refresh: function(e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === \"itemchange\";\n var filtered = this.isFiltered();\n var result;\n\n if (that._mute) { return; }\n\n that._deferValueSet = false;\n\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n\n that._createList();\n if (!action && that._values.length && !filtered &&\n !that.options.skipUpdateOnBind && !that._emptySearch) {\n that._selectingValue = true;\n\n that.bound(true);\n that.value(that._values, true).done(function() {\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._highlightSelectedItems();\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n\n that._triggerListBound();\n }\n\n if (isItemChange || action === \"remove\") {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger(\"selectedItemChange\", {\n items: result.changed\n });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n\n that._fetching = false;\n },\n\n removeAt: function(position) {\n var value = this._values.splice(position, 1)[0];\n\n return {\n position: position,\n dataItem: this._removeSelectedDataItem(value)\n };\n },\n\n _removeSelectedDataItem: function(value) {\n var that = this,\n valueGetter = that._valueGetter;\n\n for (var idx in that._selectedDataItems) {\n if (valueGetter(that._selectedDataItems[idx]) === value) {\n that._selectedIndexes.splice(idx, 1);\n return that._selectedDataItems.splice(idx, 1)[0];\n }\n }\n },\n\n setValue: function(value) {\n this._values = toArray(value);\n },\n\n value: function(value, _forcePrefetch) {\n var that = this;\n\n if (value === undefined$1) {\n return that._values.slice();\n }\n\n if (value === null) {\n value = [];\n }\n\n value = toArray(value);\n\n if (!that._valueDeferred || that._valueDeferred.state() === \"resolved\") {\n that._valueDeferred = $.Deferred();\n }\n\n var shouldClear = that.options.selectable === \"multiple\" && that.select().length && value.length;\n\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n\n that._values = value;\n\n if ((that.bound() && !that._mute && !that._deferValueSet) || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n\n return that._valueDeferred;\n },\n\n _checkValuesOrder: function(value) {\n if (this._removedAddedIndexes &&\n this._removedAddedIndexes.length === value.length) {\n var newValue = this._removedAddedIndexes.slice();\n this._removedAddedIndexes = null;\n return newValue;\n }\n\n return value;\n },\n\n _prefetchByValue: function(value) {\n var that = this,\n dataView = that._dataView,\n valueGetter = that._valueGetter,\n mapValueTo = that.options.mapValueTo,\n item, match = false,\n forSelection = [];\n\n //try to find the items in the loaded data\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n\n //prefetch the items\n if (typeof that.options.valueMapper === \"function\") {\n that.options.valueMapper({\n value: (this.options.selectable === \"multiple\") ? value : value[0],\n success: function(response) {\n if (mapValueTo === \"index\") {\n that.mapValueToIndex(response);\n } else if (mapValueTo === \"dataItem\") {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n if (!that.value()[0]) {\n that.select([-1]);\n } else {\n that._selectingValue = false;\n that._triggerListBound();\n }\n }\n },\n\n mapValueToIndex: function(indexes) {\n if (indexes === undefined$1 || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n\n this.select(indexes);\n },\n\n mapValueToDataItem: function(dataItems) {\n var removed, added;\n\n if (dataItems === undefined$1 || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function(item, index) {\n return { index: index, dataItem: item };\n });\n\n added = $.map(dataItems, function(item, index) {\n return { index: index, dataItem: item };\n });\n\n this._selectedDataItems = dataItems;\n\n this._selectedIndexes = [];\n\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n this._selectedIndexes.push(this._getIndecies(item)[0]);\n item.addClass(SELECTED);\n }\n\n this._triggerChange(removed, added);\n\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n\n deferredRange: function(index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n\n var pages = high === low ? [ high ] : [ low, high ];\n\n $.each(pages, function(_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n\n if (!existingRange || (existingRange.end !== end)) {\n deferred = $.Deferred();\n ranges[skip] = { end: end, deferred: deferred };\n\n dataSource._multiplePrefetch(skip, take, function() {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n\n defs.push(deferred);\n });\n\n $.when.apply($, defs).done(function() {\n result.resolve();\n });\n\n return result;\n },\n\n prefetch: function(indexes) {\n var that = this,\n take = this.itemCount,\n isEmptyList = !that._promisesList.length;\n\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n\n $.each(indexes, function(_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function() {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n\n return that._activeDeferred;\n },\n\n _findDataItem: function(view, index) {\n var group;\n\n //find in grouped view\n if (this.options.type === \"group\") {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n\n //find in flat view\n return view[index];\n },\n\n _getRange: function(skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n\n dataItemByIndex: function(index) {\n var that = this;\n var take = that.itemCount;\n var skip = that._getSkip(index, take);\n var view = this._getRange(skip, take);\n\n //should not return item if data is not loaded\n if (!that._getRange(skip, take).length) {\n return null;\n }\n\n if (that.options.type === \"group\") {\n kendo.ui.progress($(that.wrapper), true);\n that.mute(function() {\n that.dataSource.range(skip, take, function() {\n kendo.ui.progress($(that.wrapper), false);\n });\n view = that.dataSource.view();\n });\n }\n\n return that._findDataItem(view, [index - skip]);\n },\n\n selectedDataItems: function() {\n return this._selectedDataItems.slice();\n },\n\n scrollWith: function(value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n\n scrollTo: function(y) {\n this.content.scrollTop(y); //works only if the element is visible\n },\n\n scrollToIndex: function(index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n\n focus: function(candidate) {\n var element,\n index,\n data,\n current,\n itemHeight = this.options.itemHeight,\n id = this._optionID,\n triggerEvent = true;\n\n if (candidate === undefined$1) {\n current = this.element.find(\".\" + FOCUSED);\n return current.length ? current : null;\n }\n\n if (typeof candidate === \"function\") {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr(\"data-offset-index\"), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n\n if (index === -1) {\n this.element.find(\".\" + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined$1;\n return;\n }\n\n if (element.length) { /*focus rendered item*/\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined$1) {\n current = this._getElementByIndex(this._focusedIndex);\n current\n .removeClass(FOCUSED)\n .removeAttr(\"id\");\n\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n\n this._focusedIndex = index;\n\n element\n .addClass(FOCUSED)\n .attr(\"id\", id);\n\n var position = this._getElementLocation(index);\n\n if (position === \"top\") {\n this.scrollTo(index * itemHeight);\n } else if (position === \"bottom\") {\n this.scrollTo((index * itemHeight + itemHeight) - this._screenHeight);\n } else if (position === \"outScreen\") {\n this.scrollTo(index * itemHeight);\n }\n\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else { /*focus non rendered item*/\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n\n focusIndex: function() {\n return this._focusedIndex;\n },\n\n focusFirst: function() {\n this.scrollTo(0);\n this.focus(0);\n },\n\n focusLast: function() {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex - 1);\n },\n\n focusPrev: function() {\n var index = this._focusedIndex;\n var current;\n\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n\n current = this.focus();\n if (current && current.hasClass(\"k-loading-item\")) {\n index += 1;\n this.focus(index);\n }\n\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n\n focusNext: function() {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n\n current = this.focus();\n if (current && current.hasClass(\"k-loading-item\")) {\n index -= 1;\n this.focus(index);\n }\n\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n\n _triggerChange: function(removed, added) {\n removed = removed || [];\n added = added || [];\n\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n\n select: function(candidate) {\n var that = this,\n indices,\n initialIndices,\n singleSelection = that.options.selectable !== \"multiple\",\n prefetchStarted = isActivePromise(that._activeDeferred),\n filtered = this.isFiltered(),\n isAlreadySelected,\n deferred,\n result,\n removed = [];\n\n if (candidate === undefined$1) {\n return that._selectedIndexes.slice();\n }\n\n if (!that._selectDeferred || that._selectDeferred.state() === \"resolved\") {\n that._selectDeferred = $.Deferred();\n }\n\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n\n if (that._valueDeferred) {\n that._valueDeferred.resolve().promise();\n }\n\n return that._selectDeferred.resolve().promise();\n }\n\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n\n initialIndices = indices;\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n\n var done = function() {\n var added = that._select(indices);\n\n if (initialIndices.length === indices.length || singleSelection) {\n that.focus(indices);\n }\n\n that._triggerChange(removed, added);\n\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n\n that._selectDeferred.resolve();\n };\n\n deferred = that.prefetch(indices);\n\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n\n return that._selectDeferred.promise();\n },\n\n bound: function(bound) {\n if (bound === undefined$1) {\n return this._listCreated;\n }\n\n this._listCreated = bound;\n },\n\n mute: function(callback) {\n this._mute = true;\n callback();\n this._mute = false;\n },\n\n setDSFilter: function(filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n\n isFiltered: function() {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n\n skipUpdate: $.noop,\n\n _getElementByIndex: function(index) {\n return this.items().filter(function(idx, element) {\n return index === parseInt($(element).attr(\"data-offset-index\"), 10);\n });\n },\n\n _getElementByDataItem: function(dataItem) {\n var dataView = this._dataView,\n valueGetter = this._valueGetter,\n element, match;\n\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : dataView[i].item && dataItem && valueGetter(dataView[i].item) == valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n\n return element ? this._getElementByIndex(element.index) : $();\n },\n\n _clean: function() {\n this.result = undefined$1;\n this._lastScrollTop = undefined$1;\n this._skip = undefined$1;\n $(this.heightContainer).remove();\n this.heightContainer = undefined$1;\n this.element.empty();\n },\n\n _height: function() {\n var hasData = !!this.dataSource.view().length,\n height = this.options.height,\n itemHeight = this.options.itemHeight,\n total = this.dataSource.total();\n\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n\n return height;\n },\n\n setScreenHeight: function() {\n var height = this._height();\n\n this.content.height(height);\n this._screenHeight = height;\n },\n\n screenHeight: function() {\n return this._screenHeight;\n },\n\n _getElementLocation: function(index) {\n var scrollTop = this.content.scrollTop(),\n screenHeight = this._screenHeight,\n itemHeight = this.options.itemHeight,\n yPosition = index * itemHeight,\n yDownPostion = yPosition + itemHeight,\n screenEnd = scrollTop + screenHeight,\n position;\n\n if (yPosition === (scrollTop - itemHeight) || (yDownPostion > scrollTop && yPosition < scrollTop)) {\n position = \"top\";\n } else if (yPosition === screenEnd || (yPosition < screenEnd && screenEnd < yDownPostion)) {\n position = \"bottom\";\n } else if ((yPosition >= scrollTop) && (yPosition <= scrollTop + (screenHeight - itemHeight))) {\n position = \"inScreen\";\n } else {\n position = \"outScreen\";\n }\n\n return position;\n },\n\n _templates: function() {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n\n if (options.columns) {\n options.columns.forEach(function (column, i) {\n var templateText = column.field ? column.field.toString() : \"text\";\n var templateFunc = function (data) { return encode(kendo.getter(templateText)(data)); };\n\n templates[\"column\" + i] = column.template || templateFunc;\n });\n }\n\n for (var key in templates) {\n if (typeof templates[key] !== \"function\") {\n templates[key] = kendo.template(templates[key] || \"\");\n }\n }\n\n this.templates = templates;\n },\n\n _generateItems: function(element, count) {\n var items = [],\n item, text,\n itemHeight = this.options.itemHeight + \"px\",\n itemClass = this.options.columns && this.options.columns.length ? TABLE_ITEM : LIST_ITEM;\n\n while (count-- > 0) {\n text = document.createElement(\"span\");\n text.className = \"k-list-item-text\";\n\n item = document.createElement(\"li\");\n item.tabIndex = -1;\n item.className = itemClass;\n item.setAttribute(\"role\", \"option\");\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n item.appendChild(text);\n\n element.appendChild(item);\n\n items.push(item);\n }\n\n return items;\n },\n\n _saveInitialRanges: function() {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = { end: ranges[i].end, deferred: deferred };\n }\n },\n\n _createList: function() {\n var that = this,\n content = that.content.get(0),\n options = that.options,\n dataSource = that.dataSource;\n\n if (that.bound()) {\n that._clean();\n }\n\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n\n that._items = that._generateItems(that.element[0], that.itemCount);\n\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? \"group\" : \"flat\";\n\n if (that.options.type === \"flat\") {\n if (that.header.closest(GROUP_ROW_SEL).length) {\n that.header.closest(GROUP_ROW_SEL).hide();\n } else {\n that.header.hide();\n }\n } else {\n if (that.header.closest(GROUP_ROW_SEL).length) {\n that.header.closest(GROUP_ROW_SEL).show();\n } else {\n that.header.show();\n }\n }\n\n that.getter = that._getter(function() {\n that._renderItems(true);\n });\n\n that._onScroll = function(scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n\n that._renderItems = that._whenChanged(\n scrollCallback(content, that._onScroll),\n syncList(that._reorderList(that._items, render.bind(that)))\n );\n\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n that._calculateColumnsHeaderPadding();\n },\n\n _setHeight: function(height) {\n var currentHeight,\n heightContainer = this.heightContainer;\n\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n\n if (height !== currentHeight) {\n heightContainer.innerHTML = \"\";\n\n while (height > 0) {\n var padHeight = Math.min(height, 250000); //IE workaround, should not create elements with height larger than 250000px\n appendChild(heightContainer).style.height = padHeight + \"px\";\n height -= padHeight;\n }\n }\n },\n\n _getter: function() {\n var lastRequestedRange = null,\n dataSource = this.dataSource,\n lastRangeStart = dataSource.skip(),\n type = this.options.type,\n pageSize = this.itemCount,\n flatGroups = {};\n\n if (dataSource.pageSize() < pageSize) {\n this.mute(function() {\n dataSource.pageSize(pageSize);\n });\n }\n\n return function(index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function() {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n\n that._getterDeferred = null;\n\n if (rangeStart <= firstItemIndex && firstItemIndex <= (rangeStart + pageSize)) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function() {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n\n var result;\n if (type === \"group\") { //grouped list\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({ item: group.items[j], group: group.value });\n }\n }\n }\n\n result = flatGroups[rangeStart][index - rangeStart];\n } else { //flat list\n result = dataSource.view()[index - rangeStart];\n }\n\n return result;\n }\n };\n },\n\n _fixedHeader: function(scrollTop, list) {\n var group = this.currentVisibleGroup,\n itemHeight = this.options.itemHeight,\n firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight),\n firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n\n if (firstVisibleGroup !== group) {\n var fixedGroupText = firstVisibleGroup || \"\";\n this.header.html(this.templates.fixedGroupTemplate(fixedGroupText));\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n\n return list;\n },\n\n _itemMapper: function(item, index, value) {\n var listType = this.options.type,\n itemHeight = this.options.itemHeight,\n currentIndex = this._focusedIndex,\n selected = false,\n current = false,\n newGroup = false,\n group = null,\n match = false,\n valueGetter = this._valueGetter;\n\n if (listType === \"group\") {\n if (item) {\n newGroup = index === 0 || (this._currentGroup !== false && this._currentGroup !== item.group);\n this._currentGroup = item.group;\n }\n\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n\n if (this.options.mapValueTo === \"dataItem\" && this._selectedDataItems.length && item) {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n if (match) {\n selected = true;\n break;\n }\n }\n } else if (!this.isFiltered() && value.length && item) {\n for (var j = 0; j < value.length; j++) {\n match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n if (match) {\n value.splice(j , 1);\n selected = true;\n break;\n }\n }\n }\n\n if (currentIndex === index) {\n current = true;\n }\n\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n\n _range: function(index) {\n var itemCount = this.itemCount,\n value = this._values.slice(),\n items = [],\n item;\n\n this._view = {};\n this._currentGroup = false;\n\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n if (items[items.length - 1]) {\n items[items.length - 1].isLastGroupedItem = item.newGroup;\n }\n items.push(item);\n this._view[item.index] = item;\n }\n\n this._dataView = items;\n return items;\n },\n\n _getDataItemsCollection: function(scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n\n _listItems: function() {\n var screenHeight = this._screenHeight,\n options = this.options;\n\n var theValidator = listValidator(options, screenHeight);\n\n return (function(value, force) {\n var result = this.result,\n lastScrollTop = this._lastScrollTop;\n\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n\n this._lastScrollTop = value;\n this.result = result;\n\n return result;\n }).bind(this);\n },\n\n _whenChanged: function(getter, callback) {\n var current;\n\n return function(force) {\n var theNew = getter(force);\n\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n\n _reorderList: function(list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = map2(reorder, this.templates).bind(this);\n\n return function(list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n\n if (force || Math.abs(diff) >= length) { // full reorder\n range = list;\n range2 = list2;\n } else { // partial reorder\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n\n reorder(range, range2, that.bound());\n\n currentOffset = offset;\n };\n },\n\n _bufferSizes: function() {\n var options = this.options;\n\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n\n _indexConstraint: function(position) {\n var itemCount = this.itemCount,\n itemHeight = this.options.itemHeight,\n total = this.dataSource.total();\n\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight )));\n },\n\n _listIndex: function(scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(),\n position;\n\n position = scrollTop - ((scrollTop > lastScrollTop) ? buffers.down : buffers.up);\n\n return this._indexConstraint(position);\n },\n\n _selectable: function() {\n var itemClass = this.options.columns && this.options.columns.length ? TABLE_ITEM : LIST_ITEM;\n\n if (this.options.selectable) {\n this._selectProxy = this._clickHandler.bind(this);\n this.element.on(CLICK + VIRTUAL_LIST_NS, \".\" + itemClass, this._selectProxy);\n }\n },\n\n getElementIndex: function(element) {\n if (!(element instanceof jQuery)) {\n return undefined$1;\n }\n\n return parseInt(element.attr(\"data-offset-index\"), 10);\n },\n\n _getIndecies: function(candidate) {\n var result = [], data;\n\n if (typeof candidate === \"function\") {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n\n if (typeof candidate === \"number\") {\n result.push(candidate);\n }\n\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n\n if (candidate instanceof Array) {\n result = candidate;\n }\n\n return result;\n },\n\n _deselect: function(indices) {\n var removed = [],\n selectedIndex,\n dataItem,\n selectedIndexes = this._selectedIndexes,\n selectedDataItems = this._selectedDataItems,\n position = 0,\n selectable = this.options.selectable,\n removedindexesCounter = 0,\n valueGetter = this._valueGetter,\n item, match,\n result = null;\n\n indices = indices.slice();\n\n if (selectable === true || !indices.length) { //deselect everything\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined$1) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === \"multiple\") {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n\n if (selectedIndex !== undefined$1) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n\n removedindexesCounter++;\n i--;\n }\n }\n }\n\n return {\n indices: indices,\n removed: removed\n };\n },\n\n _deselectSingleItem: function(item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n\n if (!item.hasClass(SELECTED)) {\n return;\n }\n\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n\n _deselectCurrentValues: function(indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n\n if (this.options.selectable !== \"multiple\" || !this.isFiltered()) {\n return [];\n }\n\n if (indices[0] === -1) {\n $(children).removeClass(SELECTED);\n removed = $.map(this._selectedDataItems.slice(0), function(dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n if (this.dataItemByIndex(index)) {\n value = this._valueGetter(this.dataItemByIndex(index));\n }\n\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass(SELECTED);\n }\n }\n\n return removed;\n },\n\n _getSkip: function(index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n\n return (page - 1) * take;\n },\n\n _select: function(indexes) {\n var that = this,\n singleSelection = this.options.selectable !== \"multiple\",\n dataSource = this.dataSource,\n dataItem, oldSkip,\n take = this.itemCount,\n valueGetter = this._valueGetter,\n added = [];\n\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n\n oldSkip = dataSource.skip();\n\n $.each(indexes, function(_, index) {\n var skip = that._getSkip(index, take);\n\n that.mute(function() {\n dataSource.range(skip, take); //switch the range to get the dataItem\n\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n\n added.push({\n index: index,\n dataItem: dataItem\n });\n\n that._getElementByIndex(index).addClass(SELECTED);\n\n dataSource.range(oldSkip, take); //switch back the range\n });\n });\n\n that._values = that._checkValuesOrder(that._values);\n\n return added;\n },\n\n _clickHandler: function(e) {\n var item = $(e.currentTarget);\n\n if (!e.isDefaultPrevented() && item.attr(\"data-uid\")) {\n this.trigger(CLICK, { item: item });\n }\n },\n\n _buildValueGetter: function() {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n\n _calculateGroupPadding: function(height) {\n var firstItem = this.items().first(),\n groupHeader = this.header,\n padding = 0;\n\n if (groupHeader[0] && groupHeader[0].style.display !== \"none\") {\n if (height !== \"auto\") {\n padding = kendo.support.scrollbar();\n }\n\n padding += parseFloat(firstItem.css(\"border-right-width\"), 10) + parseFloat(firstItem.children(\".k-group\").css(\"right\"), 10);\n\n groupHeader.css(\"padding-right\", padding);\n }\n },\n\n _calculateColumnsHeaderPadding: function() {\n if (this.options.columns && this.options.columns.length) {\n var isRtl = kendo.support.isRtl(this.wrapper);\n var scrollbar = kendo.support.scrollbar();\n var columnsHeader = this.content.parent().parent().find(\".k-table-header\");\n var total = this.dataSource.total();\n\n columnsHeader.css((isRtl ? \"padding-left\" : \"padding-right\"), total ? scrollbar : 0);\n }\n }\n\n });\n\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}