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