{"version":3,"file":"kendo.mobile.listview.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","Node","mobile","ui","outerHeight","_outerHeight","DataSource","data","Widget","DataBoundWidget","HIGHLIGHT_SELECTOR","ICON_SELECTOR","attr","attrValue","GROUP_CLASS","GROUP_TEMPLATE","template","SEARCH_TEMPLATE","NS","STYLED","DATABOUND","DATABINDING","ITEM_CHANGE","CLICK","CHANGE","PROGRESS","FUNCTION","whitespaceRegExp","buttonRegExp","whitespace","this","nodeType","TEXT_NODE","nodeValue","match","addIcon","item","icon","querySelector","prepend","putAt","element","top","css","HeaderFixer","Class","extend","init","listView","scroller","options","_shouldFixHeaders","headerFixer","cacheHeaders","_cacheHeaders","bind","_scrollHandler","e","_fixHeader","destroy","that","unbind","fixedHeaders","headerPair","offset","header","i","headers","scrollTop","currentHeader","fixedContainer","html","clone","type","find","each","_","unshift","position","DEFAULT_PULL_PARAMETERS","page","RefreshHandler","handler","pullParameters","setDataSource","dataSource","setOptions","pullToRefresh","pull","_pulled","read","call","_first","messages","pullTemplate","releaseTemplate","refreshTemplate","view","_change","pullHandled","VirtualList","Observable","list","fn","buffer","height","items","footer","refresh","endReached","length","pop","prevItem","itemConstructor","idx","viewSize","total","content","below","push","itemCount","trigger","_resize","totalHeight","bottom","averageItemHeight","remainingItemsCount","batchUpdate","initialOffset","lastDirection","update","above","nextIndex","shift","firstItem","lastItem","padding","up","lastTop","topBorder","bottomBorder","index","at","VirtualListViewItem","dataItem","append","offsetHeight","setDataItem","remove","LOAD_ICON","VirtualListViewLoadingIndicator","appendTo","_loadIcon","enable","show","disable","hide","VirtualListViewPressToLoadMore","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","next","_showLoadButton","addClass","removeClass","VirtualListViewItemBinder","binder","chromeHeight","wrapper","children","not","empty","reset","range","makeVirtual","_scroll","_scrollEnd","pageSize","pressToLoadMore","virtualViewSize","Error","Buffer","Math","floor","updateScrollerSize","updateSize","virtualSize","ListViewItemBinder","itemBinder","_refreshHandler","_progressHandler","showLoading","_unbindDataSource","removedItems","addedItems","addedDataItems","action","dataItems","prependOnRefresh","appendOnRefresh","groups","group","groupedMode","_filter","findByDataItem","_shouldShowLoading","hideLoading","replaceGrouped","replace","indexOf","insertAt","ns","_hasBindingTarget","endlessScroll","ListViewFilter","filter","filterable","events","before","placeholder","autoFilter","searchInput","closest","on","preventDefault","end","_oldFilter","val","split","join","_filterChange","clearButton","_clearFilter","_dataSourceChange","_refreshInput","appliedFilters","filters","field","value","_search","expr","setTimeout","_applyFilter","operator","ignoreCase","ListView","scrollTreshold","scrollThreshold","_userEvents","UserEvents","fastTap","allowSelection","tap","_click","wrap","parent","_headerFixer","_itemsCache","_templates","virtual","_style","$angular","_start","_itemBinder","_pullToRefreshHandler","_enhanceItems","notify","name","style","autoBind","headerTemplate","pullOffset","emptyDataSource","create","fetch","unwrap","_scrollerInstance","loader","triggerChange","_renderItems","eq","after","_angularItems","cancel","render","groupTemplate","angular","elements","selectors","uid","newItem","replaceWith","_size","getSize","callback","map","_dim","_toggle","_highlight","highlight","which","clicked","currentTarget","plainItem","prevented","isDefaultPrevented","toggleClass","templateProxy","groupTemplateProxy","_headerTemplate","event","target","buttonElement","roleSelector","button","widgetInstance","id","getByUid","_styleGroups","rootItems","li","groupHeader","contents","first","is","grouped","inset","parents","child","enhanced","label","itemAndDetailButtons","add","enhanceLinkItem","enhanceItem","plugin","jQuery"],"sources":["kendo.mobile.listview.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.userevents', 'kendo.mobile.button'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"mobile.listview\",\n name: \"ListView\",\n category: \"mobile\",\n description: \"The Kendo Mobile ListView widget is used to display flat or grouped list of items.\",\n depends: [ \"data\", \"userevents\", \"mobile.button\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Node = window.Node,\n mobile = kendo.mobile,\n ui = mobile.ui,\n outerHeight = kendo._outerHeight,\n DataSource = kendo.data.DataSource,\n Widget = ui.DataBoundWidget,\n ITEM_SELECTOR = \".km-list > li, > li:not(.km-group-container)\",\n HIGHLIGHT_SELECTOR = \".km-listview-link, .km-listview-label\",\n ICON_SELECTOR = \"[\" + kendo.attr(\"icon\") + \"]\",\n attrValue = kendo.attrValue,\n GROUP_CLASS = \"km-group-title\",\n ACTIVE_CLASS = \"km-state-active\",\n GROUP_WRAPPER = '
',\n GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
  • '),\n WRAPPER = '
    ',\n SEARCH_TEMPLATE = kendo.template('
    Clear
    '),\n NS = \".kendoMobileListView\",\n STYLED = \"styled\",\n DATABOUND = \"dataBound\",\n DATABINDING = \"dataBinding\",\n ITEM_CHANGE = \"itemChange\",\n CLICK = \"click\",\n CHANGE = \"change\",\n PROGRESS = \"progress\",\n FUNCTION = \"function\",\n\n whitespaceRegExp = /^\\s+$/,\n buttonRegExp = /button/;\n\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector(\".km-icon\")) {\n item.prepend('');\n }\n }\n\n function enhanceItem(item) {\n addIcon(item, attrValue(item, \"icon\"));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), \"icon\"));\n }\n\n function enhanceLinkItem(item) {\n var parent = item.parent(),\n itemAndDetailButtons = item.add(parent.children(kendo.roleSelector(\"detailbutton\"))),\n otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n\n if (otherNodes.length) {\n return;\n }\n\n item.addClass(\"km-listview-link\")\n .attr(kendo.attr(\"role\"), \"listview-link\");\n\n addIcon(item, attrValue(parent, \"icon\"));\n addIcon(item, attrValue(item, \"icon\"));\n }\n\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector(\"input[type=checkbox],input[type=radio]\")) {\n return;\n }\n\n var item = label.parent();\n\n if (item.contents().not(label).not(function() { return this.nodeType == 3; })[0]) {\n return;\n }\n\n label.addClass(\"km-listview-label\");\n\n label.children(\"[type=checkbox],[type=radio]\").addClass(\"km-widget km-icon km-check\");\n }\n\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n\n var HeaderFixer = kendo.Class.extend({\n init: function(listView) {\n var scroller = listView.scroller();\n\n if (!scroller) {\n return;\n }\n\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n\n var headerFixer = this;\n\n var cacheHeaders = function() {\n headerFixer._cacheHeaders();\n };\n\n listView.bind(\"resize\", cacheHeaders);\n\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n\n this._scrollHandler = function(e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind(\"scroll\", this._scrollHandler);\n },\n\n destroy: function() {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind(\"scroll\", that._scrollHandler);\n }\n },\n\n _fixHeader: function(e) {\n if (!this.fixedHeaders) {\n return;\n }\n\n var i = 0,\n scroller = this.scroller,\n headers = this.headers,\n scrollTop = e.scrollTop,\n headerPair,\n offset,\n header;\n\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $(\"
    \");\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n\n _shouldFixHeaders: function() {\n this.fixedHeaders = this.options.type === \"group\" && this.options.fixedHeaders;\n },\n\n _cacheHeaders: function() {\n this._shouldFixHeaders();\n\n if (!this.fixedHeaders) {\n return;\n }\n\n var headers = [], offset = this.scroller.scrollTop;\n\n this.element.find(\".\" + GROUP_CLASS).each(function(_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n\n var DEFAULT_PULL_PARAMETERS = function() {\n return { page: 1 };\n };\n\n var RefreshHandler = kendo.Class.extend({\n init: function(listView) {\n var handler = this,\n options = listView.options,\n scroller = listView.scroller(),\n pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n\n this.listView = listView;\n this.scroller = scroller;\n\n listView.bind(\"_dataSource\", function(e) {\n handler.setDataSource(e.dataSource);\n });\n\n scroller.setOptions({\n pullToRefresh: true,\n pull: function() {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n\n setDataSource: function(dataSource) {\n var handler = this;\n\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n\n dataSource.bind(\"change\", function() {\n handler._change();\n });\n\n dataSource.bind(\"error\", function() {\n handler._change();\n });\n },\n\n _change: function() {\n var scroller = this.scroller,\n dataSource = this.dataSource;\n\n if (this._pulled) {\n scroller.pullHandled();\n }\n\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n\n if (view[0]) {\n this._first = view[0];\n }\n }\n\n this._pulled = false;\n }\n });\n\n var VirtualList = kendo.Observable.extend({\n init: function(options) {\n var list = this;\n\n kendo.Observable.fn.init.call(list);\n\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n\n list.buffer.bind(\"reset\", function() {\n list.refresh();\n });\n\n },\n\n refresh: function() {\n var buffer = this.buffer,\n items = this.items,\n endReached = false;\n\n while (items.length) {\n items.pop().destroy();\n }\n\n this.offset = buffer.offset;\n\n var itemConstructor = this.item,\n prevItem,\n item;\n\n for (var idx = 0; idx < buffer.viewSize; idx ++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n\n this.itemCount = items.length;\n\n this.trigger(\"reset\");\n\n this._resize();\n\n if (endReached) {\n this.trigger(\"endReached\");\n }\n },\n\n totalHeight: function() {\n if (!this.items[0]) {\n return 0;\n }\n\n var list = this,\n items = list.items,\n top = items[0].top,\n bottom = items[items.length - 1].bottom,\n averageItemHeight = (bottom - top) / list.itemCount,\n remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n\n batchUpdate: function(top) {\n var height = this.height(),\n items = this.items,\n item,\n initialOffset = this.offset;\n\n if (!items[0]) {\n return;\n }\n\n if (this.lastDirection) { // scrolling up\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n\n this.offset --;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else { // scrolling down\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount; // here, it should be offset + 1 + itemCount - 1.\n\n if (nextIndex === this.buffer.total()) {\n this.trigger(\"endReached\");\n break;\n }\n\n if (nextIndex === this.buffer.length) {\n break;\n }\n\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset ++;\n }\n }\n\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n\n update: function(top) {\n var list = this,\n items = this.items,\n item,\n firstItem,\n lastItem,\n height = this.height(),\n itemCount = this.itemCount,\n padding = height / 2,\n up = (this.lastTop || 0) > top,\n topBorder = top - padding,\n bottomBorder = top + height + padding;\n\n if (!items[0]) {\n return;\n }\n\n this.lastTop = top;\n this.lastDirection = up;\n\n if (up) { // scrolling up\n if (items[0].top > topBorder && // needs reorder\n items[items.length - 1].bottom > bottomBorder + padding && // enough padding below\n this.offset > 0 // we are not at the top\n )\n {\n this.offset --;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n\n item.above(firstItem);\n list._resize();\n }\n } else { // scrolling down\n if (\n items[items.length - 1].bottom < bottomBorder && // needs reorder\n items[0].top < topBorder - padding // enough padding above\n )\n {\n var nextIndex = this.offset + itemCount; // here, it should be offset + 1 + itemCount - 1.\n\n if (nextIndex === this.buffer.total()) {\n this.trigger(\"endReached\");\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset ++;\n\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n\n content: function(index) {\n return this.buffer.at(index);\n },\n\n destroy: function() {\n this.unbind();\n },\n\n _resize: function() {\n var items = this.items,\n top = 0,\n bottom = 0,\n firstItem = items[0],\n lastItem = items[items.length - 1];\n\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n\n this.trigger(\"resize\", { top: top, bottom: bottom });\n\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n\n // export for testing purposes\n kendo.mobile.ui.VirtualList = VirtualList;\n\n var VirtualListViewItem = kendo.Class.extend({\n init: function(listView, dataItem) {\n var element = listView.append([dataItem], true)[0],\n height = element.offsetHeight;\n\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n\n update: function(dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n\n above: function(item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n\n below: function(item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n\n destroy: function() {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function(listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n\n enable: function() {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n\n disable: function() {\n this.element.hide();\n this.height = 0;\n },\n\n below: function(item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function(listView, buffer) {\n\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n\n var loadMore = this;\n\n this._loadButton.kendoMobileButton().data(\"kendoMobileButton\").bind(\"click\", function() {\n loadMore._hideShowButton();\n buffer.next();\n });\n\n buffer.bind(\"resize\", function() {\n loadMore._showLoadButton();\n });\n\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n\n _hideShowButton: function() {\n this._loadButton.hide();\n this.element.addClass(\"km-scroller-refresh\");\n this._loadIcon.css('display', 'block');\n },\n\n _showLoadButton: function() {\n this._loadButton.show();\n this.element.removeClass(\"km-scroller-refresh\");\n this._loadIcon.hide();\n }\n });\n\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function(listView) {\n var binder = this;\n\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n\n listView.bind(\"_dataSource\", function(e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n\n listView.bind(\"resize\", function() {\n if (!binder.list.items.length) {\n return;\n }\n\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n\n this.scroller.makeVirtual();\n\n this._scroll = function(e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function(e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n\n destroy: function() {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n\n setDataSource: function(dataSource, empty) {\n var binder = this,\n options = this.options,\n listView = this.listView,\n scroller = listView.scroller(),\n pressToLoadMore = options.loadMore,\n pageSize,\n buffer,\n footer;\n\n this.dataSource = dataSource;\n\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n\n if (!pageSize && !empty) {\n throw new Error(\"the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.\");\n }\n\n if (this.buffer) {\n this.buffer.destroy();\n }\n\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n\n if (this.list) {\n this.list.destroy();\n }\n\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function(dataItem) { return new VirtualListViewItem(listView, dataItem); },\n height: function() { return scroller.height(); }\n });\n\n list.bind(\"resize\", function() {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n\n list.bind(\"reset\", function() {\n binder.footer.enable();\n });\n\n list.bind(\"endReached\", function() {\n footer.disable();\n binder.updateScrollerSize();\n });\n\n buffer.bind(\"expand\", function() {\n list.lastDirection = false; // expand down\n list.batchUpdate(scroller.scrollTop);\n });\n\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n\n updateScrollerSize: function() {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n\n refresh: function() {\n this.list.refresh();\n },\n\n reset: function() {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n\n var ListViewItemBinder = kendo.Class.extend({\n init: function(listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n\n var itemBinder = this;\n\n this._refreshHandler = function(e) {\n itemBinder.refresh(e);\n };\n\n this._progressHandler = function() {\n listView.showLoading();\n };\n\n listView.bind(\"_dataSource\", function(e) {\n binder.setDataSource(e.dataSource);\n });\n },\n\n destroy: function() {\n this._unbindDataSource();\n },\n\n reset: function() { },\n\n refresh: function(e) {\n var action = e && e.action,\n dataItems = e && e.items,\n listView = this.listView,\n dataSource = this.dataSource,\n prependOnRefresh = this.options.appendOnRefresh,\n view = dataSource.view(),\n groups = dataSource.group(),\n groupedMode = groups && groups[0],\n item;\n\n\n if (action === \"itemchange\") {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n\n var removedItems, addedItems, addedDataItems;\n var adding = (action === \"add\" && !groupedMode) || (prependOnRefresh && !listView._filter);\n var removing = action === \"remove\" && !groupedMode;\n\n if (adding) {\n // no need to unbind anything\n removedItems = [];\n } else if (removing) {\n // unbind the items about to be removed;\n removedItems = listView.findByDataItem(dataItems);\n }\n\n if (listView.trigger(DATABINDING, { action: action || \"rebind\", items: dataItems, removedItems: removedItems, index: e && e.index })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n\n if (action === \"add\" && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === \"remove\" && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n }\n else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n }\n else {\n listView.replace(view);\n }\n\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n\n listView.trigger(DATABOUND, { ns: ui, addedItems: addedItems, addedDataItems: addedDataItems });\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n\n _unbindDataSource: function() {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n\n _shouldShowLoading: function() {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n\n var ListViewFilter = kendo.Class.extend({\n init: function(listView) {\n var filter = this,\n filterable = listView.options.filterable,\n events = \"change paste\",\n that = this;\n\n this.listView = listView;\n this.options = filterable;\n\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || \"Search...\" }));\n\n if (filterable.autoFilter !== false) {\n events += \" keyup\";\n }\n\n this.element = listView.wrapper.find(\".km-search-form\");\n\n this.searchInput = listView.wrapper.find(\"input[type=search]\")\n .closest(\"form\").on(\"submit\" + NS, function(e) {\n e.preventDefault();\n })\n .end()\n .on(\"focus\" + NS, function() {\n filter._oldFilter = filter.searchInput.val();\n })\n .on(events.split(\" \").join(NS + \" \") + NS, this._filterChange.bind(this));\n\n this.clearButton = listView.wrapper.find(\".km-filter-reset\")\n .on(CLICK, this._clearFilter.bind(this))\n .hide();\n\n this._dataSourceChange = this._refreshInput.bind(this);\n listView.bind(\"_dataSource\", function(e) {\n e.dataSource.bind(\"change\", that._dataSourceChange);\n });\n },\n\n _refreshInput: function() {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val(\"\");\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n\n _search: function(expr) {\n this._filter = true;\n this.clearButton[expr ? \"show\" : \"hide\"]();\n this.listView.dataSource.filter(expr);\n },\n\n _filterChange: function(e) {\n var filter = this;\n if (e.type == \"paste\" && this.options.autoFilter !== false) {\n setTimeout(function() {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n\n _applyFilter: function() {\n var options = this.options,\n value = this.searchInput.val(),\n expr = value.length ? {\n field: options.field,\n operator: options.operator || \"startswith\",\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n\n if (value === this._oldFilter) {\n return;\n }\n\n this._oldFilter = value;\n this._search(expr);\n },\n\n _clearFilter: function(e) {\n this.searchInput.val(\"\");\n this._search(null);\n\n e.preventDefault();\n }\n });\n\n var ListView = Widget.extend({\n init: function(element, options) {\n var listView = this;\n\n Widget.fn.init.call(this, element, options);\n\n element = this.element;\n\n options = this.options;\n\n // support for legacy typo in configuration options: scrollTreshold -> scrollThreshold.\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n\n element\n .on(\"down\", HIGHLIGHT_SELECTOR, \"_highlight\")\n .on(\"move up cancel\", HIGHLIGHT_SELECTOR, \"_dim\");\n\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function(e) {\n listView._click(e);\n }\n });\n\n // HACK!!! to negate the ms touch action from the user events.\n element.css(\"-ms-touch-action\", \"auto\");\n\n element.wrap(WRAPPER);\n\n this.wrapper = this.element.parent();\n\n this._headerFixer = new HeaderFixer(this);\n\n this._itemsCache = {};\n this._templates();\n\n this.virtual = options.endlessScroll || options.loadMore;\n\n this._style();\n\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout(this._start.bind(this));\n } else {\n this._start();\n }\n\n },\n\n _start: function() {\n var options = this.options;\n\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n\n this.setDataSource(options.dataSource);\n\n this._enhanceItems(this.items());\n\n kendo.notify(this, ui);\n },\n\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n\n options: {\n name: \"ListView\",\n style: \"\",\n type: \"flat\",\n autoBind: true,\n fixedHeaders: false,\n template: \"#:data#\",\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: \"Press to load more\",\n pullTemplate: \"Pull to refresh\",\n releaseTemplate: \"Release to refresh\",\n refreshTemplate: \"Refreshing\"\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n\n refresh: function() {\n this._itemBinder.refresh();\n },\n\n reset: function() {\n this._itemBinder.reset();\n },\n\n setDataSource: function(dataSource) {\n // the listView should have a ready datasource for MVVM to function properly. But an empty datasource should not empty the element\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n\n this.trigger(\"_dataSource\", { dataSource: this.dataSource, empty: emptyDataSource });\n\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n\n items: function() {\n if (this.options.type === \"group\") {\n return this.element.find(\".km-list\").children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n\n scroller: function() {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest(\".km-scroll-wrapper\").data(\"kendoMobileScroller\");\n }\n\n return this._scrollerInstance;\n },\n\n showLoading: function() {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n\n hideLoading: function() {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n\n insertAt: function(dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function(items) {\n if (index === 0) {\n listView.element.prepend(items);\n }\n else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n\n if (triggerChange) {\n for (var i = 0; i < items.length; i ++) {\n listView.trigger(ITEM_CHANGE, { item: items.eq(i), data: dataItems[i], ns: ui });\n }\n }\n });\n },\n\n append: function(dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n\n prepend: function(dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n\n replace: function(dataItems) {\n this.options.type = \"flat\";\n this._angularItems(\"cleanup\");\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n\n replaceGrouped: function(groups) {\n this.options.type = \"group\";\n this._angularItems(\"cleanup\");\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n\n this._enhanceItems(items.children(\"ul\").children(\"li\"));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems(\"compile\");\n },\n\n remove: function(dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular(\"cleanup\", function() {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n\n findByDataItem: function(dataItems) {\n var selectors = [];\n\n for (var idx = 0, length = dataItems.length; idx < length; idx ++) {\n selectors[idx] = \"[data-\" + kendo.ns + \"uid=\" + dataItems[idx].uid + \"]\";\n }\n\n return this.element.find(selectors.join(\",\"));\n },\n\n // item is a DOM element, not jQuery object.\n setDataItem: function(item, dataItem) {\n var listView = this,\n replaceItem = function(items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular(\"cleanup\", function() { return { elements: [ $(item) ] }; });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, { item: newItem, data: dataItem, ns: ui });\n };\n\n return this._renderItems([dataItem], replaceItem)[0];\n },\n\n updateSize: function() {\n this._size = this.getSize();\n },\n\n _renderItems: function(dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n\n callback(items);\n\n this.angular(\"compile\", function() {\n return {\n elements: items,\n data: dataItems.map(function(data) {\n return { dataItem: data };\n })\n };\n });\n\n mobile.init(items);\n this._enhanceItems(items);\n\n return items;\n },\n\n _dim: function(e) {\n this._toggle(e, false);\n },\n\n _highlight: function(e) {\n this._toggle(e, true);\n },\n\n _toggle: function(e, highlight) {\n if (e.which > 1) {\n return;\n }\n\n var clicked = $(e.currentTarget),\n item = clicked.parent(),\n role = attrValue(clicked, \"role\") || \"\",\n plainItem = (!role.match(buttonRegExp)),\n prevented = e.isDefaultPrevented();\n\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n\n _templates: function() {\n var template = this.options.template,\n headerTemplate = this.options.headerTemplate,\n dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"',\n templateProxy = {},\n groupTemplateProxy = {};\n\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = \"#=this.template(data)#\";\n }\n\n this.template = kendo.template(\"\" + template + \"\").bind(templateProxy);\n\n groupTemplateProxy.template = this.template;\n\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = \"#=this._headerTemplate(data)#\";\n }\n\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n\n this.groupTemplate = GROUP_TEMPLATE.bind(groupTemplateProxy);\n },\n\n _click: function(e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n\n var dataItem,\n item = e.target,\n target = $(e.event.target),\n buttonElement = target.closest(kendo.roleSelector(\"button\", \"detailbutton\", \"backbutton\")),\n button = kendo.widgetInstance(buttonElement, ui),\n id = item.attr(kendo.attr(\"uid\"));\n\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n\n if (this.trigger(CLICK, { target: target, item: item, dataItem: dataItem, button: button })) {\n e.preventDefault();\n }\n },\n\n _styleGroups: function() {\n var rootItems = this.element.children();\n\n rootItems.children(\"ul\").addClass(\"km-list\");\n\n rootItems.each(function() {\n var li = $(this),\n groupHeader = li.contents().first();\n\n li.addClass(\"km-group-container\");\n if (!groupHeader.is(\"ul\") && !groupHeader.is(\"div.\" + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n\n _style: function() {\n var options = this.options,\n grouped = options.type === \"group\",\n element = this.element,\n inset = options.style === \"inset\";\n\n element.addClass(\"km-listview\")\n .toggleClass(\"km-list\", !grouped)\n .toggleClass(\"km-virtual-list\", this.virtual)\n .toggleClass(\"km-listinset\", !grouped && inset)\n .toggleClass(\"km-listgroup\", grouped && !inset)\n .toggleClass(\"km-listgroupinset\", grouped && inset);\n\n if (!element.parents(\".km-listview\")[0]) {\n element.closest(\".km-content\").toggleClass(\"km-insetcontent\", inset); // iOS has white background when the list is not inset.\n }\n\n if (grouped) {\n this._styleGroups();\n }\n\n this.trigger(STYLED);\n },\n\n _enhanceItems: function(items) {\n items.each(function() {\n var item = $(this),\n child,\n enhanced = false;\n\n item.children().each(function() {\n child = $(this);\n if (child.is(\"a\")) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is(\"label\")) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n\n ui.plugin(ListView);\n })(window.kendo.jQuery);\n\n}));\n"]}