{"version":3,"sources":["kendo.treelist.js"],"names":["f","define","$","undefined","is","field","object","not","func","isCellVisible","this","style","display","sortCells","cells","indexAttr","kendo","attr","sort","a","b","indexA","indexB","index","parseInt","leafDataCells","container","rows","find","filter","el","hasClass","length","add","last","createPlaceholders","options","i","level","spans","className","push","kendoDomElement","columnsWidth","cols","colWidth","idx","width","indexOf","syncTableHeight","table1","table2","lockedHeigth","tableHeigth","row","diff","offsetHeight","filterRowRegExp","test","height","isInputElement","element","isLocked","column","parentColumn","locked","findParentColumnWithChildren","columns","source","rtl","target","targetLocked","findReorderTarget","before","masterColumns","parent","parentColumns","sourceIndex","targetIndex","columnParent","inArray","leafColumns","result","concat","getColumnsFields","visibleChildColumns","grep","hidden","isVisible","visibleColumns","normalizeColumns","hide","parentIds","map","uid","guid","headerAttributes","extend","headers","id","flatColumnsInDomOrder","flatColumns","lockedColumns","nonLockedColumns","targetParentContainerIndex","parentColumnsCells","cell","parentCellsWithChildren","offset","prevCells","parentCell","closest","headerRows","eq","prevAll","colSpan","Math","max","getAttribute","childColumnsCells","child","value","rowSpan","colSpanAttr","next","parents","columnParents","inserted","splice","children","columnPosition","cellCounts","updateCellIndex","thead","position","allColumns","depth","temp","updateRowSpans","containerDOMtree","each","attributes","rowspan","removeEmptyRows","emptyRows","shouldRemove","remove","focusTable","table","direct","scrollTop","scrollLeft","focusElement","one","e","preventDefault","focus","adjustRowHeight","row1","row2","offsetHeight1","offsetHeight2","isColumnEditable","model","selectable","command","editable","isDirtyColumn","dirty","dirtyFields","isUndefined","isNumber","isNaN","TreeListModel","TreeListDataSource","TreeListPager","Editor","PopupEditor","IncellEditor","TreeList","data","kendoDom","dom","kendoTextElement","text","kendoHtmlElement","html","outerWidth","_outerWidth","keys","outerHeight","_outerHeight","ui","DataBoundWidget","DataSource","ObservableArray","Query","Model","browser","support","kendoTemplate","template","activeElement","_activeElement","touchDevice","touch","isArray","proxy","isPlainObject","Array","prototype","STRING","CHANGE","ITEM_CHANGE","ERROR","PROGRESS","DOT","NS","CLICK","INPUT","BEFORE_EDIT","EDIT","PAGE","PAGE_CHANGE","SAVE","SAVE_CHANGES","SORT","EXPAND","COLLAPSE","CELL_CLOSE","REMOVE","DATA_CELL","FILTER_CELL","DATABINDING","DATABOUND","CANCEL","TABINDEX","FILTERMENUINIT","FILTERMENUOPEN","COLUMNHIDE","COLUMNSHOW","HEADERCELLS","COLUMNREORDER","COLUMNRESIZE","COLUMNMENUINIT","COLUMNMENUOPEN","COLUMNLOCK","COLUMNUNLOCK","PARENTIDFIELD","DRAGSTART","DRAG","DROP","DRAGEND","NAVROW","NAVCELL","NAVHEADER","NORECORDSCLASS","ITEMROW","FIRSTNAVITEM","LASTITEMROW","isRtl","HEIGHT","INCELL","INLINE","POPUP","TABLE","CHECKBOX","CHECKBOXINPUT","SELECTCOLUMNTMPL","SELECTCOLUMNHEADERTMPL","SELECTED","whitespaceRegExp","RegExp","classNames","wrapper","header","button","alt","editCell","editRow","dirtyCell","group","toolbar","gridToolbar","gridHeader","gridHeaderWrap","gridContent","gridContentWrap","gridFilter","footerTemplate","focused","loading","refresh","retry","selected","status","link","withIcon","filterable","icon","iconFilter","iconCollapse","iconExpand","iconHidden","iconPlaceHolder","input","dropPositions","dropTop","dropBottom","dropAdd","dropMiddle","dropDenied","dragStatus","dragClue","dragClueText","defaultCommands","create","imageClass","methodName","createchild","destroy","edit","update","canceledit","cancel","save","excel","pdf","search","TreeView","Class","init","that","defaultParentId","idField","parentIdField","childrenMap","dataItem","dataItemId","dataItemParentId","dataLength","_childrenMap","idsMap","_idMap","dataMaps","_dataMaps","ids","rootNodes","removeCollapsedSubtreesFromRootNodes","prunedTree","maxDepth","Infinity","removeCollapsedSubtrees","rootNode","childIdx","expanded","TreeQuery","constructor","process","inPlace","query","filterCallback","skip","take","total","filteredChildrenMap","view","prunedData","normalizeGroup","normalizeSort","toArray","processFromRootNodes","range","parentId","fields","type","nullable","fn","call","_loaded","get","accept","set","initiator","loaded","shouldSerialize","base","_getDataMaps","schema","modelBase","_addRange","_createNewModel","fromModel","_modelParentIdField","_isPageable","_shouldWrap","_push","operation","_readData","_getData","_data","newData","toJSON","_replaceData","sourceLength","_readAggregates","_aggregateResult","reader","aggregates","_defaultParentId","read","_modelOptions","_skip","_page","_collapsedTotal","root","_removeChildData","_removeFromDataMaps","removePristine","pageable","_getChildrenMap","items","_subtree","shouldRemovePristine","removedItems","_removeItems","pushDestroy","insert","newModel","_insertInDataMaps","_filterCallback","item","_modelIdField","parentSubtree","_parentNode","unshift","parentNode","len","_observeView","_createTreeView","_initIdsMap","_idsMap","_getIdsMap","_getFilteredChildrenMap","filteredChildren","_setFilteredChildrenMap","_initDataMaps","_initChildrenMapForParent","_defaultTreeModelOptions","modelOptions","_defaultDataItemType","ObservableObject","_calculateAggregates","subtree","pageableChildrenMap","aggregate","_queryProcess","hasLoadedChildren","_processPageableQuery","hasChildren","slice","_processTreeQuery","_replaceWithObservedData","_processDataItemsState","_replaceItemsInDataMaps","dataToAggregate","_dataToAggregate","_replaceInMapWithObservedData","_calculateCollapsedTotal","firstDataItem","firstItemParents","_parentNodes","observableArray","directParent","viewIndex","itemType","_insertInIdsMap","_replaceInMap","replacement","itemInArray","itemIndex","dataToReplace","replacementArray","itemToReplace","itemToReplaceId","dataItemIndex","observableItem","_getById","at","key","_insertInChildrenMap","itemId","_removeFromIdsMap","_removeFromChildrenMap","_indexInChildrenMap","_itemIndexInMap","dataMap","_isLastItemInView","_defaultPageableQueryOptions","page","pageSize","serverPaging","_updateTotalForAction","action","_updateCollapsedTotalForAction","_setFilterTotal","filterTotal","setDefaultValue","collapsedTotal","filteredData","_dataWithoutCollapsedSubtrees","_removeCollapsedSubtrees","_processDataItemState","_queueRequest","callback","_modelLoaded","childNodes","_modelError","_error","success","requestParams","_observe","_total","load","method","remote","serverSorting","serverFiltering","serverGrouping","serverAggregates","defaultPromise","Deferred","resolve","promise","done","fail","contains","rootId","_byParentId","defaultId","current","defaults","allChildNodes","directChildren","_rootNode","_pageableRootNodes","nodesWithoutParentInView","node","_nodesWithoutParentInView","_parentNodesNotInView","parentInView","_parentInView","_pageableModelLevel","baseFilter","_pageableQueryOptions","_flatData","cancelChanges","_restorePageSizeAfterAddChild","_modelCanceled","_changesCanceled","_setAddChildPageSize","queryOptions","_addChildPageSize","_query","sync","then","_syncEnd","Pager","name","totalPages","dataSource","_filter","ceil","_createDataSource","Observable","bind","events","_fields","_initContainer","createEditable","Editable","clearContainer","change","_isEditable","format","editor","end","close","empty","removeAttr","_attachHandlers","cycleForm","open","window","modal","resizable","draggable","title","visible","formContent","append","_appendTemplate","_appendFields","_appendButtons","Tree","render","appendTo","Window","form","unescape","class","fieldRenderer","commandRenderer","closeHandler","_cancelProxy","_cancel","on","_saveProxy","_save","userTriggered","_detachHandlers","off","trigger","center","_events","_dataSource","_aria","_columns","_layout","_navigatable","_selectable","_sortable","_resizable","_filterable","_filterRow","_attachEvents","_toolbar","_scrollable","_reorderable","_columnMenu","_minScreenSupport","_draggable","_pageable","autoBind","fetch","_hasLockedColumns","widget","addClass","_resizeHandler","resize","notify","reorderable","move","_dragging","HierarchicalDragAndDrop","$angular","autoScroll","holdToDrag","itemSelector","allowedContainers","hintText","separator","join","destination","dest","src","itemFromTarget","first","tr","prevRow","prev","nextRow","sameLevel","content","dragstart","css","drag","drop","removeClass","dragend","isPrevented","originalSrcParentId","originalSrcIndex","insertBefore","insertAfter","dropHintContainer","dropPositionFrom","dropHint","contents","dropHintElement","isAfterText","nodeType","arguments","nodeData","referenceNode","insertAction","indexOffset","referenceNodeIndex","destIndex","nodeDataIndex","originalDestIndex","_unbindDataSource","_unbindDataChange","_destroyed","pop","_bindDataChange","_bindDataSource","_changeHandler","unbind","_refreshHandler","itemFor","tbody","_itemFor","lockedContent","lockedTable","scrollables","touchScroller","scrollable","_wheelScroll","movable","_touchScroller","sender","x","y","delta","lockedDiv","ctrlKey","wheelDeltaY","currentTarget","scrollHeight","clientHeight","_progress","messages","_showStatus","_render","error","isCurrentInHeader","currentIndex","_cancelEditor","_adjustHeight","navigatable","_isActiveInTable","cellIndex","_restoreCurrent","_checkBoxSelection","_deselectCheckRows","_angularFooters","footer","allAggregates","footerRows","_footerItems","_angularFooter","angular","elements","col","_items","dataItems","n","tmp","_showNoRecordsTemplate","defaultTemplate","scrollableNoGridHeightStyles","_contentTree","_lockedContentTree","noRows","message","_hideStatus","_hideNoRecordsTempalte","show","isHeightSet","contentWrap","pagerHeight","pager","scrollbar","initialHeight","newHeight","offsetWidth","clientWidth","_resize","size","force","_applyLockedContainersWidth","any","hideMinScreenCols","minScreenResizeHandler","_iterateMinScreenCols","screenWidth","minWidth","minScreenWidth","hideColumn","showColumn","innerWidth","screen","_destroyColumnAttachments","_errorHandler","_progressHandler","_navigatableTables","_current","_draggableInstance","_userEvents","_destroyEditor","_destroyPager","_autoExpandable","_dataSourceFetchProxy","lockedHeader","_statusTree","_headerTree","_lockedHeaderColsTree","_lockedContentColsTree","_lockedHeaderTree","sortable","columnMenu","requestFailed","commands","hierarchy","renderAllRows","rowTemplate","altRowTemplate","getOptions","initialData","deepExtend","transport","setOptions","currentOptions","_setEvents","th","filterMenu","_toggle","expand","afterModelLoaded","_toggleData","_syncLockedContentHeight","_isIncellEditable","closeCell","always","_togglePageableData","_renderProgress","_refreshPager","collapse","_toggleChildren","event","tables","headerTables","_tableClick","_tableFocus","_tableBlur","_tableKeyDown","td","lockedColumnOffset","active","rowIndex","newCurrent","_updateCurrentAttr","_scrollCurrent","_lastCellIndex","_setCurrent","tableContainer","isInLockedContainer","isInContent","scrollableContainer","_scrollTo","_relatedRow","_findCurrentCell","elementToLowercase","tagName","toLowerCase","isHorizontal","elementOffsetDir","containerScroll","containerOffsetDir","elementOffset","abs","offsetLeft","bottomDistance","ieCorrection","firefoxCorrection","msie","edge","mozilla","webkit","version","_elementId","_currentDataIndex","lockedColumnsCount","_prevVerticalCell","cellSelector","_nextVerticalCell","tmpIndex","currentRowCells","hiddenColumns","_verticalContainer","up","step","floor","headerId","replace","handled","canHandle","isDefaultPrevented","keyCode","UP","_moveUp","shiftKey","DOWN","_moveDown","LEFT","RIGHT","altKey","_handleExpand","_moveRight","_handleCollapse","_moveLeft","PAGEDOWN","_handlePageDown","PAGEUP","_handlePageUp","ENTER","F2","_handleEnterKey","ESC","_handleEscKey","HOME","_handleHome","END","_handleEnd","TAB","_handleTabKey","stopPropagation","ctrl","rowContainer","isInLockedTable","isInBody","currentTable","blur","cancelRow","has","focusable","click","_handleEditing","incellEditing","_tabNext","_preventPageSizeRestore","back","switchRow","nextAll","editContainer","isEdited","editedCell","isIE","nextFocusableCellRowIndex","nextFocusableCellIndex","currentFocusedCellRowIndex","currentFocusedCellIndex","opera","triggerHandler","saveRow","isHeader","headerTable","isInput","setTimeout","_setTabIndex","retryButton","UserEvents","press","_onPress","allowSelection","_commandClick","_search","_attachCellEditingEventHandlers","icons","multiple","relatedTarget","isLockedCell","clearTimeout","_closeCellTimeout","_commandByName","j","currentName","commandName","parentsUntil","_searchTimeOut","searchFields","expression","filters","logic","operator","_ensureExpandableColumn","expandableColumns","expandable","lockedCols","encoded","Error","_columnTemplates","_columnAttributes","_includeChildren","includeChildren","_checkboxClick","_headerCheckboxClick","dirtyCellTemplate","_createDirtyColumnTemplate","dirtyIndicatorTemplate","_createIndicatorTemplate","headerTemplate","convertStyle","properties","declaration","split","trim","camelCase","_clearSortClasses","layout","addBack","_initVirtualTrees","_renderCols","_renderHeader","_headerColsTree","_contentColsTree","buttons","_buildCommands","_lockedColumns","_nonLockedColumns","_templateColumns","_flushCache","maps","uidAttr","hasFooterTemplate","viewChildrenMap","_renderOptions","_dataToRender","_renderedModelLevel","select","_","_absoluteIndex","_angularItems","_clearRenderMap","buttonClass","_viewChildrenMap","_hasFooterTemplate","_trs","editedColumn","editedColumnIndex","contentResized","_muteAngularRebind","_togglePagerVisibility","_setExpanderElement","expander","hiddenDivClass","hiddenDiv","toggle","progress","parentsNotInView","parentNotInView","parentNotInViewId","childId","parentsCopy","parentIndex","_markNodeAsNonRenderable","_skipRenderingMap","nodeId","_adjustRowsHeight","rows2","containers","containersLength","heights","_ths","cellClasses","headerContent","leafs","ths","scope","role","href","data-field","data-title","_cols","_clearColsCache","_retrieveFirstColumn","_updateFirstColumnClass","_updateRowSpans","included","_setColumnDataIndexes","_updateColumnCellIndex","_setParentsVisibility","predicate","p","_prepareColumns","parentRow","childRow","totalColSpan","_renderHeaderTree","tree","hasMultiColumnHeaders","rowsToRender","filterThs","_hasFilterRow","_filterThs","_syncLockedHeaderHeight","_updateFilterThs","refColumn","thIndex","refIndex","currIndex","filterRowThs","lockedWidth","nonLockedWidth","wrapperWidth","modelId","rowOptions","_edit","isAlt","_trFromTemplate","_tds","_td","data-parentId","_footerId","isFunction","parseRowTemplate","currElement","nodeName","toLocaleLowerCase","parseAttributes","nodeValue","_createCellElement","_isTextNode","spaceElements","iconElement","noop","c","renderer","editedColumnField","editColumn","iconClass","columnHasEditCommand","_cellContent","dirtyIndicator","_evalColumnTemplate","templateSettings","_customTemplateSettings","columnTemplateAlias","paramName","templateString","_dirtyIndicatorTemplate","templateFunction","columnTemplate","dirtyField","charAt","expr","Template","_handleCommand","_button","data-command","_positionResizeHandle","headerWrap","webkitCorrection","leftMargin","invisibleSpace","leftBorderWidth","resizeHandle","rtlCorrection","cellWidth","which","indicatorWidth","columnResizeHandleWidth","halfResizeHandle","left","parseFloat","scrollWidth","top","val","autoFitColumn","contentTable","footerTable","oldColumnWidth","newColumnWidth","totalWidth","visibleLocked","oldWidth","newWidth","_adjustLockedHorizontalScrollBar","_syncLockedScroll","treelist","Resizable","handle","start","colSelector","startLocation","location","columnWidth","rtlModifier","minColumnWidth","resizeend","sortableInstance","kendoColumnSorter","filterMenuInstance","filterInit","filterOpen","mode","kendoFilterMenu","settings","filterHandler","existingInstance","suggestDataSource","operators","customDataSource","cellOptions","enabled","values","delay","inputWidth","suggestionOperator","minLength","dataTextField","showOperators","kendoFilterCell","hasFiltering","columnsWithoutFiltering","_change","selectedValues","_uncheckCheckBoxes","_checkRows","_toggleHeaderCheckState","_isLocked","useAllItems","multi","Selectable","parseOptions","aria","continuousItems","_continuousItems","_selectableTarget","SPACEBAR","clear","_lastActive","selectRange","_firstSelectee","lockedItems","nonLockedItems","apply","related","clearSelection","prop","preventChange","checkBox","checked","parentGrid","getKendoTreeList","isSelecting","selector","ds","_sortHandler","setDataSource","getByUid","_isPopupEditable","_editMode","_createEditor","_cancelEdit","args","addRow","inlineEditing","_isInlineEditable","showNewModelInView","_insertAt","_firstEditableColumnIndex","removeRow","document","_shouldRestorePageSize","leafCols","_createIncellEditor","_editCell","isCancel","ns","saveChanges","valid","_toggleColumnVisibility","_findColumn","_adjustTablesWidth","Draggable","hint","prepend","Reorderable","dragOverContainers","_allowDragOverContainers","inSameContainer","oldIndex","newIndex","reorderColumn","lockable","_reorderTrees","destSources","destContainer","destDomTree","sources","sourcesContainer","sourcesDomTree","destDomChildren","destRow","sourcesLeafs","destLeafs","reorderTaget","destThs","sourceDOM","sourceChildren","destColumn","_insertTree","domTr","_reorderHeader","rowsToAdd","destTarget","sourcesDepth","targetDepth","sourceLocked","destLocked","destRows","lockChanged","nonLockedColumnsLength","lockColumn","unlockColumn","menu","menuOptions","initHandler","_columnMenuInit","openHandler","_columnMenuOpen","hasLockableColumns","compare","pane","owner","closeCallback","kendoColumnMenu","_createPager","alwaysVisible","ExcelMixin","PDFMixin","_drawPDF","allPages","startingPage","exportPage","doc","treeList","_drawPDFShadow","avoidLinks","pageNum","pageNumber","err","reject","paperSize","_drawPDF_autoPageBreak","_initPDFProgress","drawing","Group","deferred","progressBar","clone","kendoProgressBar","chunkCount","min","draw","cont","body","_destructive","drawDOM","renderPage","origBody","overflow","paddingRight","plugin","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.treelist.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.treelist', [\n 'kendo.dom',\n 'kendo.data',\n 'kendo.columnsorter',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.filtermenu',\n 'kendo.selectable',\n 'kendo.resizable',\n 'kendo.treeview.draganddrop',\n 'kendo.pager',\n 'kendo.filtercell'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'treelist',\n name: 'TreeList',\n category: 'web',\n description: 'The TreeList widget displays self-referencing data and offers rich support for interacting with data, sorting, filtering, and selection.',\n depends: [\n 'dom',\n 'data',\n 'pager'\n ],\n features: [\n {\n id: 'treelist-sorting',\n name: 'Sorting',\n description: 'Support for column sorting',\n depends: ['columnsorter']\n },\n {\n id: 'treelist-filtering',\n name: 'Filtering',\n description: 'Support for record filtering',\n depends: ['filtermenu']\n },\n {\n id: 'treelist-editing',\n name: 'Editing',\n description: 'Support for record editing',\n depends: [\n 'editable',\n 'window'\n ]\n },\n {\n id: 'treelist-selection',\n name: 'Selection',\n description: 'Support for row selection',\n depends: ['selectable']\n },\n {\n id: 'treelist-column-resize',\n name: 'Column resizing',\n description: 'Support for column resizing',\n depends: ['resizable']\n },\n {\n id: 'treelist-dragging',\n name: 'Drag & Drop',\n description: 'Support for drag & drop of rows',\n depends: ['treeview.draganddrop']\n },\n {\n id: 'treelist-excel-export',\n name: 'Excel export',\n description: 'Export data as Excel spreadsheet',\n depends: ['excel']\n },\n {\n id: 'treelist-pdf-export',\n name: 'PDF export',\n description: 'Export data as PDF',\n depends: [\n 'pdf',\n 'drawing'\n ]\n },\n {\n id: 'treelist-paging',\n name: 'Paging',\n description: 'Support for treelist paging',\n depends: ['pager']\n }\n ]\n };\n (function ($, undefined) {\n var data = kendo.data;\n var kendoDom = kendo.dom;\n var kendoDomElement = kendoDom.element;\n var kendoTextElement = kendoDom.text;\n var kendoHtmlElement = kendoDom.html;\n var outerWidth = kendo._outerWidth;\n var keys = kendo.keys;\n var outerHeight = kendo._outerHeight;\n var ui = kendo.ui;\n var DataBoundWidget = ui.DataBoundWidget;\n var DataSource = data.DataSource;\n var ObservableArray = data.ObservableArray;\n var Query = data.Query;\n var Model = data.Model;\n var browser = kendo.support.browser;\n var kendoTemplate = kendo.template;\n var activeElement = kendo._activeElement;\n var touchDevice = kendo.support.touch;\n var isArray = $.isArray;\n var extend = $.extend;\n var proxy = $.proxy;\n var map = $.map;\n var grep = $.grep;\n var inArray = $.inArray;\n var isPlainObject = $.isPlainObject;\n var push = Array.prototype.push;\n var STRING = 'string';\n var CHANGE = 'change';\n var ITEM_CHANGE = 'itemChange';\n var ERROR = 'error';\n var PROGRESS = 'progress';\n var DOT = '.';\n var NS = '.kendoTreeList';\n var CLICK = 'click';\n var INPUT = 'input';\n var BEFORE_EDIT = 'beforeEdit';\n var EDIT = 'edit';\n var PAGE = 'page';\n var PAGE_CHANGE = 'pageChange';\n var SAVE = 'save';\n var SAVE_CHANGES = 'saveChanges';\n var SORT = 'sort';\n var EXPAND = 'expand';\n var COLLAPSE = 'collapse';\n var CELL_CLOSE = 'cellClose';\n var REMOVE = 'remove';\n var DATA_CELL = 'td:not(.k-group-cell):not(.k-hierarchy-cell):visible';\n var FILTER_CELL = '.k-filter-row th:not(.k-group-cell):not(.k-hierarchy-cell):visible';\n var DATABINDING = 'dataBinding';\n var DATABOUND = 'dataBound';\n var CANCEL = 'cancel';\n var TABINDEX = 'tabIndex';\n var FILTERMENUINIT = 'filterMenuInit';\n var FILTERMENUOPEN = 'filterMenuOpen';\n var COLUMNHIDE = 'columnHide';\n var COLUMNSHOW = 'columnShow';\n var HEADERCELLS = 'th.k-header';\n var COLUMNREORDER = 'columnReorder';\n var COLUMNRESIZE = 'columnResize';\n var COLUMNMENUINIT = 'columnMenuInit';\n var COLUMNMENUOPEN = 'columnMenuOpen';\n var COLUMNLOCK = 'columnLock';\n var COLUMNUNLOCK = 'columnUnlock';\n var PARENTIDFIELD = 'parentId';\n var DRAGSTART = 'dragstart';\n var DRAG = 'drag';\n var DROP = 'drop';\n var DRAGEND = 'dragend';\n var NAVROW = 'tr:visible';\n var NAVCELL = 'td:visible';\n var NAVHEADER = 'th:visible';\n var NORECORDSCLASS = 'k-grid-norecords';\n var ITEMROW = 'tr:not(.k-footer-template):visible';\n var FIRSTNAVITEM = NAVROW + ' > td:first:visible';\n var LASTITEMROW = ITEMROW + ':last';\n var isRtl = false;\n var HEIGHT = 'height';\n var INCELL = 'incell';\n var INLINE = 'inline';\n var POPUP = 'popup';\n var TABLE = 'table';\n var CHECKBOX = 'k-checkbox';\n var CHECKBOXINPUT = 'input[data-role=\\'checkbox\\'].' + CHECKBOX;\n var SELECTCOLUMNTMPL = '';\n var SELECTCOLUMNHEADERTMPL = '';\n var SELECTED = 'k-state-selected';\n var whitespaceRegExp = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]';\n var filterRowRegExp = new RegExp('(^|' + whitespaceRegExp + ')' + '(k-filter-row)' + '(' + whitespaceRegExp + '|$)');\n var classNames = {\n wrapper: 'k-treelist k-grid k-widget k-grid-display-block',\n header: 'k-header',\n button: 'k-button',\n alt: 'k-alt',\n editCell: 'k-edit-cell',\n editRow: 'k-grid-edit-row',\n dirtyCell: 'k-dirty-cell',\n group: 'k-treelist-group',\n toolbar: 'k-toolbar',\n gridToolbar: 'k-grid-toolbar',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n gridContentWrap: 'k-grid-content',\n gridFilter: 'k-grid-filter',\n footerTemplate: 'k-footer-template',\n focused: 'k-state-focused',\n loading: 'k-i-loading',\n refresh: 'k-i-reload',\n retry: 'k-request-retry',\n selected: 'k-state-selected',\n status: 'k-status',\n link: 'k-link',\n withIcon: 'k-with-icon',\n filterable: 'k-filterable',\n icon: 'k-icon',\n iconFilter: 'k-i-filter',\n iconCollapse: 'k-i-collapse',\n iconExpand: 'k-i-expand',\n iconHidden: 'k-i-none',\n iconPlaceHolder: 'k-icon k-i-none',\n input: 'k-input',\n dropPositions: 'k-i-insert-up k-i-insert-down k-i-plus k-i-insert-middle',\n dropTop: 'k-i-insert-up',\n dropBottom: 'k-i-insert-down',\n dropAdd: 'k-i-plus',\n dropMiddle: 'k-i-insert-middle',\n dropDenied: 'k-i-cancel',\n dragStatus: 'k-drag-status',\n dragClue: 'k-drag-clue',\n dragClueText: 'k-clue-text'\n };\n var defaultCommands = {\n create: {\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n methodName: 'addRow'\n },\n createchild: {\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n methodName: 'addRow'\n },\n destroy: {\n imageClass: 'k-i-close',\n className: 'k-grid-delete',\n methodName: 'removeRow'\n },\n edit: {\n imageClass: 'k-i-edit',\n className: 'k-grid-edit',\n methodName: 'editRow'\n },\n update: {\n imageClass: 'k-i-check',\n className: 'k-primary k-grid-update',\n methodName: 'saveRow'\n },\n canceledit: {\n imageClass: 'k-i-cancel',\n className: 'k-grid-cancel',\n methodName: '_cancelEdit'\n },\n cancel: {\n imageClass: 'k-icon k-i-cancel',\n text: 'Cancel changes',\n className: 'k-grid-cancel-changes',\n methodName: 'cancelChanges'\n },\n save: {\n imageClass: 'k-icon k-i-check',\n text: 'Save changes',\n className: 'k-grid-save-changes',\n methodName: 'saveChanges'\n },\n excel: {\n imageClass: 'k-i-file-excel',\n className: 'k-grid-excel',\n methodName: 'saveAsExcel'\n },\n pdf: {\n imageClass: 'k-i-file-pdf',\n className: 'k-grid-pdf',\n methodName: 'saveAsPDF'\n },\n search: { template: '' + '' + '' + '' }\n };\n var TreeView = kendo.Class.extend({\n init: function (data, options) {\n var that = this;\n that.data = data || [];\n that.options = extend(that.options, options);\n },\n options: {\n defaultParentId: null,\n idField: 'id',\n parentIdField: PARENTIDFIELD\n },\n childrenMap: function () {\n var that = this;\n var childrenMap = {};\n var dataLength = that.data.length;\n var dataItem;\n var dataItemId;\n var dataItemParentId;\n var idField = that.options.idField;\n var parentIdField = that.options.parentIdField;\n if (that._childrenMap) {\n return that._childrenMap;\n }\n for (var i = 0; i < dataLength; i++) {\n dataItem = this.data[i];\n dataItemId = dataItem[idField];\n dataItemParentId = dataItem[parentIdField];\n childrenMap[dataItemId] = childrenMap[dataItemId] || [];\n childrenMap[dataItemParentId] = childrenMap[dataItemParentId] || [];\n childrenMap[dataItemParentId].push(dataItem);\n }\n that._childrenMap = childrenMap;\n return childrenMap;\n },\n idsMap: function () {\n var that = this;\n var idsMap = {};\n var data = that.data;\n var dataLength = data.length;\n var dataItem;\n var idField = that.options.idField;\n if (that._idMap) {\n return that._idMap;\n }\n for (var i = 0; i < dataLength; i++) {\n dataItem = data[i];\n idsMap[dataItem[idField]] = dataItem;\n }\n that.idsMap = idsMap;\n return idsMap;\n },\n dataMaps: function () {\n var that = this;\n var childrenMap = {};\n var data = that.data;\n var dataLength = data.length;\n var idsMap = {};\n var dataItem;\n var dataItemId;\n var dataItemParentId;\n var idField = that.options.idField;\n var parentIdField = that.options.parentIdField;\n if (that._dataMaps) {\n return that._dataMaps;\n }\n for (var i = 0; i < dataLength; i++) {\n dataItem = data[i];\n dataItemId = dataItem[idField];\n dataItemParentId = dataItem[parentIdField];\n idsMap[dataItemId] = dataItem;\n childrenMap[dataItemId] = childrenMap[dataItemId] || [];\n childrenMap[dataItemParentId] = childrenMap[dataItemParentId] || [];\n childrenMap[dataItemParentId].push(dataItem);\n }\n that._dataMaps = {\n children: childrenMap,\n ids: idsMap\n };\n return that._dataMaps;\n },\n rootNodes: function () {\n var that = this;\n var data = that.data;\n var defaultParentId = that.options.defaultParentId;\n var dataLength = data.length;\n var rootNodes = [];\n var dataItem;\n var parentIdField = that.options.parentIdField;\n for (var i = 0; i < dataLength; i++) {\n dataItem = data[i];\n if (dataItem[parentIdField] === defaultParentId) {\n rootNodes.push(dataItem);\n }\n }\n return rootNodes;\n },\n removeCollapsedSubtreesFromRootNodes: function (options) {\n options = options || {};\n var that = this;\n var rootNodes = that.rootNodes();\n var result = [];\n var prunedTree;\n that._childrenMap = options.childrenMap = options.childrenMap || that.childrenMap();\n options.maxDepth = options.maxDepth || Infinity;\n for (var i = 0; i < rootNodes.length; i++) {\n prunedTree = that.removeCollapsedSubtrees(rootNodes[i], options);\n result = result.concat(prunedTree);\n }\n return result;\n },\n removeCollapsedSubtrees: function (rootNode, options) {\n options = options || {};\n var that = this;\n var result = [];\n var childIdx;\n var prunedTree;\n var childrenMap = options.childrenMap || {};\n var maxDepth = options.maxDepth || Infinity;\n var idField = that.options.idField;\n var children = childrenMap[rootNode[idField]] || [];\n var expanded = isUndefined(rootNode.expanded) ? options.expanded : rootNode.expanded;\n result.push(rootNode);\n if (children && expanded) {\n for (childIdx = 0; childIdx < children.length; childIdx++) {\n if (result.length >= maxDepth) {\n break;\n }\n prunedTree = that.removeCollapsedSubtrees(children[childIdx], options);\n result = result.concat(prunedTree);\n }\n }\n return result;\n }\n });\n var TreeQuery = function (data) {\n this.data = data || [];\n };\n TreeQuery.prototype = new Query();\n TreeQuery.prototype.constructor = TreeQuery;\n TreeQuery.process = function (data, options, inPlace) {\n options = options || {};\n var query = new TreeQuery(data);\n var group = options.group;\n var sort = Query.normalizeGroup(group || []).concat(Query.normalizeSort(options.sort || []));\n var filterCallback = options.filterCallback;\n var filter = options.filter;\n var skip = options.skip;\n var take = options.take;\n var total;\n var childrenMap;\n var filteredChildrenMap;\n var view;\n var prunedData;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort && !inPlace) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (options.processFromRootNodes) {\n view = new TreeView(query.toArray(), options);\n if (filter) {\n filteredChildrenMap = view.childrenMap();\n }\n prunedData = view.removeCollapsedSubtreesFromRootNodes({\n childrenMap: filter || sort && sort.length ? undefined : options.childrenMap,\n expanded: options.expanded,\n maxDepth: skip + take || Infinity\n });\n childrenMap = view.childrenMap();\n query = new TreeQuery(prunedData);\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray(),\n childrenMap: childrenMap,\n filteredChildrenMap: filteredChildrenMap\n };\n };\n var TreeListModel = Model.define({\n id: 'id',\n parentId: PARENTIDFIELD,\n fields: {\n id: { type: 'number' },\n parentId: {\n type: 'number',\n nullable: true\n }\n },\n init: function (value) {\n Model.fn.init.call(this, value);\n this._loaded = false;\n if (!this.parentIdField) {\n this.parentIdField = PARENTIDFIELD;\n }\n this.parentId = this.get(this.parentIdField);\n },\n accept: function (data) {\n Model.fn.accept.call(this, data);\n this.parentId = this.get(this.parentIdField);\n },\n set: function (field, value, initiator) {\n if (field == PARENTIDFIELD && this.parentIdField != PARENTIDFIELD) {\n this[this.parentIdField] = value;\n }\n Model.fn.set.call(this, field, value, initiator);\n if (field == this.parentIdField) {\n this.parentId = this.get(this.parentIdField);\n }\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== '_loaded' && field != '_error' && field != '_edit' && !(this.parentIdField !== 'parentId' && field === 'parentId');\n }\n });\n TreeListModel.parentIdField = PARENTIDFIELD;\n TreeListModel.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = TreeListModel;\n }\n var parentId = options.parentId || PARENTIDFIELD;\n options.parentIdField = parentId;\n var model = Model.define(base, options);\n if (parentId) {\n model.parentIdField = parentId;\n }\n return model;\n };\n function is(field) {\n return function (object) {\n return object[field];\n };\n }\n function not(func) {\n return function (object) {\n return !func(object);\n };\n }\n var TreeListDataSource = DataSource.extend({\n init: function (options) {\n options = options || {};\n var that = this;\n that._dataMaps = that._getDataMaps();\n options.schema = extend(true, {}, {\n modelBase: TreeListModel,\n model: TreeListModel\n }, options.schema);\n DataSource.fn.init.call(this, options);\n },\n _addRange: function () {\n },\n _createNewModel: function (data) {\n var that = this;\n var model = {};\n var fromModel = data instanceof Model;\n var parentIdField = this._modelParentIdField();\n if (fromModel) {\n model = data;\n }\n model = DataSource.fn._createNewModel.call(this, model);\n if (!fromModel) {\n if (data.parentId) {\n data[model.parentIdField] = data.parentId;\n } else if (that._isPageable() && data[parentIdField]) {\n data[model.parentIdField] = data[parentIdField];\n }\n model.accept(data);\n }\n return model;\n },\n _shouldWrap: function () {\n return true;\n },\n _push: function (result, operation) {\n var data = DataSource.fn._readData.call(this, result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _getData: function () {\n return this._data || [];\n },\n _readData: function (newData) {\n var that = this;\n var data = that._isPageable() ? that._getData().toJSON() : that.data();\n newData = DataSource.fn._readData.call(this, newData);\n this._replaceData((data.toJSON ? data.toJSON() : data).concat(newData), data);\n if (newData instanceof ObservableArray) {\n return newData;\n }\n return data;\n },\n _replaceData: function (source, target) {\n var sourceLength = source.length;\n for (var i = 0; i < sourceLength; i++) {\n target[i] = source[i];\n }\n target.length = sourceLength;\n },\n _readAggregates: function (data) {\n var result = extend(this._aggregateResult, this.reader.aggregates(data));\n if ('' in result) {\n result[this._defaultParentId()] = result[''];\n delete result[''];\n }\n return result;\n },\n read: function (data) {\n var that = this;\n if (that._isPageable()) {\n that._dataMaps = {};\n if (!that._modelOptions().expanded) {\n that._skip = 0;\n that._page = 1;\n that._collapsedTotal = undefined;\n }\n }\n return DataSource.fn.read.call(that, data);\n },\n remove: function (root) {\n this._removeChildData(root);\n this._removeFromDataMaps(root);\n return DataSource.fn.remove.call(this, root);\n },\n _removeChildData: function (model, removePristine) {\n var that = this;\n var pageable = that._isPageable();\n var data = pageable ? this._getData() : this.data();\n var childrenMap = pageable ? that._getChildrenMap() || that.childrenMap(data) : that._childrenMap(data);\n var items = this._subtree(childrenMap, model.id);\n var shouldRemovePristine = isUndefined(removePristine) ? false : removePristine;\n var removedItems = this._removeItems(items, shouldRemovePristine);\n that._removeFromDataMaps(removedItems);\n },\n pushDestroy: function (items) {\n var that = this;\n if (!isArray(items)) {\n items = [items];\n }\n for (var i = 0; i < items.length; i++) {\n that._removeChildData(items[i], true);\n that._removeFromDataMaps(items[i]);\n }\n DataSource.fn.pushDestroy.call(that, items);\n },\n insert: function (index, model) {\n var that = this;\n var newModel = that._createNewModel(model);\n that._insertInDataMaps(newModel);\n return DataSource.fn.insert.call(that, index, newModel);\n },\n _filterCallback: function (query) {\n var that = this;\n var i, item;\n var map = {};\n var result = [];\n var data = query.toArray();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var pageable = that._isPageable();\n var parentSubtree = [];\n var parent;\n for (i = 0; i < data.length; i++) {\n item = data[i];\n if (pageable) {\n parentSubtree = [];\n if (!map[item[idField]]) {\n map[item[idField]] = true;\n parentSubtree.push(item);\n }\n parent = that._parentNode(item);\n while (parent) {\n if (!map[parent[idField]]) {\n map[parent[idField]] = true;\n parentSubtree.unshift(parent);\n parent = that._parentNode(parent);\n } else {\n break;\n }\n }\n if (parentSubtree.length) {\n result = result.concat(parentSubtree);\n }\n } else {\n while (item) {\n if (!map[item[idField]]) {\n map[item[idField]] = true;\n result.push(item);\n }\n if (!map[item[parentIdField]]) {\n map[item[parentIdField]] = true;\n item = this.parentNode(item);\n if (item) {\n result.push(item);\n }\n } else {\n break;\n }\n }\n }\n }\n return new Query(result);\n },\n _subtree: function (map, id) {\n var that = this;\n var result = map[id] || [];\n var defaultParentId = that._defaultParentId();\n var idField = that._modelIdField();\n for (var i = 0, len = result.length; i < len; i++) {\n if (result[i][idField] !== defaultParentId) {\n result = result.concat(that._subtree(map, result[i][idField]));\n }\n }\n return result;\n },\n _childrenMap: function (data) {\n var map = {};\n var i, item, id, parentId;\n data = this._observeView(data);\n for (i = 0; i < data.length; i++) {\n item = data[i];\n id = item.id;\n parentId = item.parentId;\n map[id] = map[id] || [];\n map[parentId] = map[parentId] || [];\n map[parentId].push(item);\n }\n return map;\n },\n childrenMap: function (data) {\n var view = this._createTreeView(data);\n var map = view.childrenMap();\n return map;\n },\n _getChildrenMap: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n return dataMaps.children;\n },\n _initIdsMap: function (data) {\n var that = this;\n var dataMaps = that._getDataMaps();\n if (isUndefined(dataMaps.ids)) {\n dataMaps.ids = that._idsMap(data);\n }\n return dataMaps.ids;\n },\n _idsMap: function (data) {\n var view = this._createTreeView(data);\n var map = view.idsMap();\n return map;\n },\n _getIdsMap: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n return dataMaps.ids || {};\n },\n _getFilteredChildrenMap: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n return dataMaps.filteredChildren;\n },\n _setFilteredChildrenMap: function (map) {\n var that = this;\n var dataMaps = that._getDataMaps();\n dataMaps.filteredChildren = map;\n },\n _initDataMaps: function (data) {\n var that = this;\n var view = that._createTreeView(data);\n that._dataMaps = view.dataMaps();\n return that._dataMaps;\n },\n _initChildrenMapForParent: function (parent) {\n var that = this;\n var data = that._getData();\n var childrenMap = that._getChildrenMap();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var parentId = (parent || {})[idField];\n if (childrenMap && parent) {\n childrenMap[parentId] = [];\n for (var i = 0; i < data.length; i++) {\n if (data[i][parentIdField] === parentId) {\n childrenMap[parentId].push(data[i]);\n }\n }\n }\n },\n _getDataMaps: function () {\n var that = this;\n that._dataMaps = that._dataMaps || {};\n return that._dataMaps;\n },\n _createTreeView: function (data, options) {\n var view = new TreeView(data, extend(options, this._defaultTreeModelOptions()));\n return view;\n },\n _defaultTreeModelOptions: function () {\n var that = this;\n var modelOptions = that._modelOptions();\n return {\n defaultParentId: that._defaultParentId(),\n idField: that._modelIdField(),\n parentIdField: that._modelParentIdField(),\n expanded: modelOptions.expanded\n };\n },\n _defaultDataItemType: function () {\n return this.reader.model || kendo.data.ObservableObject;\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var that = this;\n var result = {};\n var item, subtree, i;\n var filter = options.filter;\n var skip = options.skip;\n var take = options.take;\n var maxDepth = !isUndefined(skip) && !isUndefined(take) ? skip + take : Infinity;\n var pageable = that._isPageable();\n var filteredChildrenMap = options.filteredChildrenMap;\n var childrenMap = options.childrenMap;\n var pageableChildrenMap;\n if (pageable) {\n if (isUndefined(options.aggregate)) {\n return result;\n }\n if (filteredChildrenMap) {\n pageableChildrenMap = filteredChildrenMap;\n } else if (childrenMap) {\n pageableChildrenMap = childrenMap;\n } else {\n pageableChildrenMap = that.childrenMap(that._getData());\n }\n }\n if (!pageable && filter) {\n data = Query.process(data, {\n filter: filter,\n filterCallback: proxy(this._filterCallback, this)\n }).data;\n }\n var map = pageable ? pageableChildrenMap : that._childrenMap(data);\n result[this._defaultParentId()] = new Query(this._subtree(map, this._defaultParentId())).aggregate(options.aggregate);\n for (i = 0; i < data.length; i++) {\n if (i >= maxDepth) {\n break;\n }\n item = data[i];\n subtree = this._subtree(map, item.id);\n result[item.id] = new Query(subtree).aggregate(options.aggregate);\n }\n return result;\n },\n _queryProcess: function (data, options) {\n var that = this;\n var result = {};\n options = options || {};\n options.filterCallback = proxy(this._filterCallback, this);\n if (that._isPageable()) {\n return that._processPageableQuery(data, options);\n } else {\n var defaultParentId = this._defaultParentId();\n result = Query.process(data, options);\n var map = this._childrenMap(result.data);\n var hasLoadedChildren, i, item, children;\n data = map[defaultParentId] || [];\n for (i = 0; i < data.length; i++) {\n item = data[i];\n if (item.id === defaultParentId) {\n continue;\n }\n children = map[item.id];\n hasLoadedChildren = !!(children && children.length);\n if (!item.loaded()) {\n item.loaded(hasLoadedChildren || !item.hasChildren);\n }\n if (item.loaded() || item.hasChildren !== true) {\n item.hasChildren = hasLoadedChildren;\n }\n if (hasLoadedChildren) {\n data = data.slice(0, i + 1).concat(children, data.slice(i + 1));\n }\n }\n result.data = data;\n }\n return result;\n },\n _processPageableQuery: function (data, options) {\n var that = this;\n var dataMaps = that._getDataMaps();\n var result;\n var filteredChildrenMap;\n if (that._getData() !== data || !dataMaps.children || !dataMaps.ids) {\n dataMaps = that._initDataMaps(that._getData());\n }\n options.childrenMap = dataMaps.children || {};\n options.idsMap = dataMaps.ids || {};\n result = that._processTreeQuery(data, options);\n that._replaceWithObservedData(result.data, data);\n that._processDataItemsState(result.data, result.childrenMap);\n that._replaceItemsInDataMaps(result.data);\n result.dataToAggregate = that._dataToAggregate(result.data, options);\n if (options.filter || that.filter()) {\n filteredChildrenMap = result.filteredChildrenMap;\n that._replaceInMapWithObservedData(filteredChildrenMap, data);\n that._setFilteredChildrenMap(filteredChildrenMap);\n options.filteredChildrenMap = filteredChildrenMap;\n that._calculateCollapsedTotal(result.data);\n } else {\n that._collapsedTotal = undefined;\n }\n return result;\n },\n _dataToAggregate: function (data) {\n var that = this;\n var firstDataItem = data[0] || {};\n var firstItemParents = that._parentNodes(firstDataItem);\n var dataToAggregate = firstItemParents.concat(data);\n return dataToAggregate;\n },\n _replaceItemsInDataMaps: function (observableArray) {\n var that = this;\n var view = isArray(observableArray) ? observableArray : [observableArray];\n var itemType = that._defaultDataItemType();\n var defaultParentId = that._defaultParentId();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var dataMaps = that._getDataMaps();\n var item;\n var parents;\n var directParent;\n for (var viewIndex = 0; viewIndex < view.length; viewIndex++) {\n item = view[viewIndex];\n if (!(item instanceof itemType)) {\n continue;\n }\n that._insertInIdsMap(item);\n parents = that._parentNodes(item);\n directParent = parents && parents.length ? parents[parents.length - 1] : undefined;\n if (item[parentIdField] === defaultParentId) {\n that._replaceInMap(dataMaps.children, defaultParentId, item, itemType);\n } else if (directParent) {\n that._replaceInMap(dataMaps.children, directParent[idField], item, itemType);\n }\n }\n },\n _replaceInMap: function (map, id, replacement, itemType) {\n var idField = this._modelIdField();\n map[id] = map[id] || [];\n itemType = itemType || this._defaultDataItemType();\n var itemInArray = map[id].filter(function (element) {\n return replacement[idField] === element[idField];\n })[0];\n var itemIndex = itemInArray ? map[id].indexOf(itemInArray) : -1;\n if (itemIndex !== -1 && !(itemInArray instanceof itemType)) {\n map[id][itemIndex] = replacement;\n }\n },\n _replaceWithObservedData: function (dataToReplace, replacementArray) {\n var that = this;\n var idsMap = that._getDataMaps().ids || {};\n var idField = that._modelIdField();\n var itemType = that._defaultDataItemType();\n var itemToReplace;\n var itemToReplaceId;\n var dataItem;\n var dataItemIndex;\n var observableItem;\n for (var i = 0; i < dataToReplace.length; i++) {\n itemToReplace = dataToReplace[i];\n itemToReplaceId = itemToReplace[idField];\n if (!(itemToReplace instanceof itemType)) {\n if (!(idsMap[itemToReplaceId] instanceof itemType)) {\n dataItem = that._getById(itemToReplaceId);\n dataItemIndex = replacementArray.indexOf(dataItem);\n if (dataItem && dataItemIndex !== -1) {\n observableItem = replacementArray.at(dataItemIndex);\n dataToReplace[i] = observableItem;\n }\n } else {\n dataToReplace[i] = idsMap[itemToReplaceId];\n }\n }\n }\n },\n _replaceInMapWithObservedData: function (map, replacementArray) {\n var that = this;\n for (var key in map) {\n that._replaceWithObservedData(map[key], replacementArray);\n }\n },\n _insertInDataMaps: function (item) {\n var that = this;\n if (that._isPageable()) {\n that._insertInIdsMap(item);\n that._insertInChildrenMap(item);\n }\n },\n _insertInIdsMap: function (item) {\n var that = this;\n var idsMap = that._getIdsMap();\n var idField = that._modelIdField();\n if (!isUndefined(item[idField])) {\n idsMap[item[idField]] = item;\n }\n },\n _insertInChildrenMap: function (item, index) {\n var that = this;\n var childrenMap = that._getChildrenMap() || {};\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var itemId = item[idField];\n var parentId = item[parentIdField];\n index = index || 0;\n childrenMap[itemId] = childrenMap[itemId] || [];\n childrenMap[parentId] = childrenMap[parentId] || [];\n childrenMap[parentId].splice(index, 0, item);\n },\n _removeFromDataMaps: function (items) {\n var that = this;\n items = isArray(items) ? items : [items];\n if (that._isPageable()) {\n for (var i = 0; i < items.length; i++) {\n that._removeFromIdsMap(items[i]);\n that._removeFromChildrenMap(items[i]);\n }\n }\n },\n _removeFromIdsMap: function (item) {\n var that = this;\n var idsMap = that._getIdsMap();\n var idField = that._modelIdField();\n if (!isUndefined(item[idField])) {\n idsMap[item[idField]] = undefined;\n }\n },\n _removeFromChildrenMap: function (item) {\n var that = this;\n var childrenMap = that._getChildrenMap() || {};\n var parentIdField = that._modelParentIdField();\n var parentId = item[parentIdField];\n childrenMap[parentId] = childrenMap[parentId] || [];\n var itemIndex = that._indexInChildrenMap(item);\n if (itemIndex !== -1) {\n childrenMap[parentId].splice(itemIndex, 1);\n }\n },\n _indexInChildrenMap: function (item) {\n var that = this;\n return that._itemIndexInMap(item, that._getChildrenMap());\n },\n _itemIndexInMap: function (item, dataMap) {\n var that = this;\n var map = dataMap || {};\n var parentIdField = that._modelParentIdField();\n var parentId = item[parentIdField];\n map[parentId] = map[parentId] || [];\n var itemInArray = map[parentId].filter(function (element) {\n return item.uid === element.uid;\n })[0];\n var itemIndex = itemInArray ? map[parentId].indexOf(itemInArray) : -1;\n return itemIndex;\n },\n _getById: function (id) {\n var that = this;\n var idField = that._modelIdField();\n var data = that._getData();\n for (var i = 0; i < data.length; i++) {\n if (data[i][idField] === id) {\n return data[i];\n }\n }\n },\n _isLastItemInView: function (dataItem) {\n var view = this.view();\n return view.length && view[view.length - 1] === dataItem;\n },\n _defaultPageableQueryOptions: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n var options = {\n skip: that.skip(),\n take: that.take(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate(),\n filterCallback: proxy(that._filterCallback, that),\n childrenMap: dataMaps.children,\n idsMap: dataMaps.ids\n };\n return options;\n },\n _isPageable: function () {\n var pageSize = this.pageSize();\n return !isUndefined(pageSize) && pageSize > 0 && !this.options.serverPaging;\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n DataSource.fn._updateTotalForAction.call(that, action, items);\n if (that._isPageable()) {\n that._updateCollapsedTotalForAction(action, items);\n }\n },\n _updateCollapsedTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._collapsedTotal, 10);\n if (!isNumber(that._collapsedTotal)) {\n that._calculateCollapsedTotal();\n return;\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._calculateCollapsedTotal();\n } else if (action === 'sync') {\n total = that._calculateCollapsedTotal();\n }\n that._collapsedTotal = total;\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n DataSource.fn._setFilterTotal.call(that, filterTotal, setDefaultValue);\n },\n collapsedTotal: function () {\n var that = this;\n if (!isUndefined(that._collapsedTotal)) {\n return that._collapsedTotal;\n }\n return that._calculateCollapsedTotal();\n },\n _calculateCollapsedTotal: function (filteredData) {\n var that = this;\n var data = that._dataWithoutCollapsedSubtrees(filteredData);\n if (data.length) {\n that._collapsedTotal = data.length;\n }\n return that._collapsedTotal;\n },\n _dataWithoutCollapsedSubtrees: function (filteredData) {\n return this._removeCollapsedSubtrees(filteredData || this._getData());\n },\n _removeCollapsedSubtrees: function (data) {\n var that = this;\n var view = that._createTreeView(data);\n var result = view.removeCollapsedSubtreesFromRootNodes({\n expanded: that._modelOptions().expanded,\n childrenMap: that.filter() ? that._getFilteredChildrenMap() : that._getChildrenMap()\n });\n return result;\n },\n _processTreeQuery: function (data, options) {\n var result = TreeQuery.process(data, extend(options, this._defaultTreeModelOptions(), { processFromRootNodes: true }));\n return result;\n },\n _processDataItemsState: function (data, childrenMap) {\n var dataLength = data.length;\n var i;\n for (i = 0; i < dataLength; i++) {\n this._processDataItemState(data[i], childrenMap);\n }\n },\n _processDataItemState: function (dataItem, childrenMap) {\n var defaultParentId = this._defaultParentId();\n if (dataItem.id === defaultParentId) {\n return;\n }\n var children = childrenMap[dataItem.id] || [];\n var hasLoadedChildren = !!(children && children.length);\n if (!dataItem.loaded) {\n return;\n }\n if (!dataItem.loaded()) {\n dataItem.loaded(hasLoadedChildren || !dataItem.hasChildren);\n }\n if (dataItem.loaded() || dataItem.hasChildren !== true) {\n dataItem.hasChildren = hasLoadedChildren;\n }\n },\n _queueRequest: function (options, callback) {\n callback.call(this);\n },\n _modelLoaded: function (id) {\n var model = this.get(id);\n model.loaded(true);\n model.hasChildren = this.childNodes(model).length > 0;\n },\n _modelError: function (id, e) {\n this.get(id)._error = e;\n },\n success: function (data, requestParams) {\n if (!requestParams || typeof requestParams.id == 'undefined') {\n this._data = this._observe([]);\n }\n DataSource.fn.success.call(this, data, requestParams);\n this._total = this._data.length;\n },\n load: function (model) {\n var method = '_query';\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n var defaultPromise = $.Deferred().resolve().promise();\n if (model.loaded()) {\n if (remote) {\n return defaultPromise;\n }\n } else if (model.hasChildren) {\n method = 'read';\n this._removeChildData(model);\n }\n return this[method]({ id: model.id }).done(proxy(this._modelLoaded, this, model.id)).fail(proxy(this._modelError, this, model.id));\n },\n contains: function (root, child) {\n var that = this;\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var rootId = root[idField];\n var pageable = that._isPageable();\n while (child) {\n if (child[parentIdField] === rootId) {\n return true;\n }\n child = pageable ? that._parentNode(child) : that.parentNode(child);\n }\n return false;\n },\n _byParentId: function (id, defaultId) {\n var result = [];\n var view = this.view();\n var current;\n if (id === defaultId) {\n return [];\n }\n for (var i = 0; i < view.length; i++) {\n current = view.at(i);\n if (current.parentId == id) {\n result.push(current);\n }\n }\n return result;\n },\n _defaultParentId: function () {\n return this.reader.model.fn.defaults[this.reader.model.parentIdField];\n },\n _modelOptions: function () {\n var modelOptions = (this.options.schema || {}).model || {};\n return modelOptions;\n },\n _modelIdField: function () {\n var modelOptions = this._modelOptions();\n return modelOptions.id || 'id';\n },\n _modelParentIdField: function () {\n var modelOptions = this._modelOptions();\n return modelOptions.parentId || PARENTIDFIELD;\n },\n childNodes: function (model) {\n return this._byParentId(model.id, this._defaultParentId());\n },\n allChildNodes: function (model, result) {\n var directChildren = this.data().filter(function (item) {\n return item.parentId === model.id;\n });\n for (var i = 0; i < directChildren.length; i++) {\n result.push(directChildren[i]);\n this.allChildNodes(directChildren[i], result);\n }\n },\n rootNodes: function () {\n return this._byParentId(this._defaultParentId());\n },\n _rootNode: function (child) {\n return this._parentNodes(child)[0];\n },\n _pageableRootNodes: function (options) {\n options = options || {};\n var that = this;\n var defaultParentId = that._defaultParentId();\n var parentIdField = that._modelParentIdField();\n var result = [];\n var nodesWithoutParentInView = that._nodesWithoutParentInView(options);\n var node;\n var root;\n for (var i = 0; i < nodesWithoutParentInView.length; i++) {\n node = nodesWithoutParentInView[i];\n if (node[parentIdField] === defaultParentId) {\n result.push(node);\n } else {\n root = that._rootNode(node);\n if (root && result.indexOf(root) === -1) {\n result.push(root);\n }\n }\n }\n return result;\n },\n parentNode: function (model) {\n return this.get(model.parentId);\n },\n _parentNode: function (child) {\n var that = this;\n var parentIdField = that._modelParentIdField();\n var idsMap = that._initIdsMap(that._getData());\n var parentId = child[parentIdField];\n var parent = idsMap[parentId] || that._getById(parentId);\n return parent;\n },\n _parentNodes: function (child) {\n var that = this;\n var parent = that._parentNode(child);\n var parents = [];\n while (parent) {\n parents.unshift(parent);\n parent = that._parentNode(parent);\n }\n return parents;\n },\n _parentNodesNotInView: function () {\n var that = this;\n var view = that.view();\n var result = [];\n var defaultParentId = that._defaultParentId();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var parentInView;\n var parents = [];\n var directParent;\n var dataItem;\n var dataItemId;\n var dataItemParentId;\n for (var i = 0; i < view.length; i++) {\n dataItem = view[i];\n dataItemId = dataItem[idField];\n dataItemParentId = dataItem[parentIdField];\n parentInView = that._parentInView(dataItemParentId);\n if (!parentInView && dataItemParentId !== defaultParentId) {\n parents = that._parentNodes(dataItem);\n directParent = parents && parents.length ? parents[parents.length - 1] : that._getById(dataItemParentId);\n if (directParent && result.indexOf(directParent) === -1) {\n result.push(directParent);\n }\n }\n }\n return result;\n },\n _nodesWithoutParentInView: function (options) {\n options = options || {};\n var that = this;\n var view = that.view();\n var childrenMap = options.childrenMap || that.childrenMap(that._getData());\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var dataItem;\n var parentInView;\n var children = [];\n var result = [];\n for (var i = 0; i < view.length; i++) {\n dataItem = view[i];\n children = childrenMap[dataItem[idField]];\n parentInView = that._parentInView(dataItem[parentIdField]);\n if (!parentInView) {\n result.push(dataItem);\n }\n }\n return result;\n },\n _parentInView: function (parentId) {\n var view = this.view();\n for (var i = 0; i < view.length; i++) {\n if (view[i].id === parentId) {\n return view[i];\n }\n }\n },\n level: function (model) {\n var result = -1;\n if (!(model instanceof TreeListModel)) {\n model = this.get(model);\n }\n do {\n model = this.parentNode(model);\n result++;\n } while (model);\n return result;\n },\n _pageableModelLevel: function (model) {\n var that = this;\n if (!model || !that._isPageable()) {\n return 0;\n }\n var parents = that._parentNodes(model);\n return parents.length;\n },\n filter: function (value) {\n var baseFilter = DataSource.fn.filter;\n if (value === undefined) {\n return baseFilter.call(this, value);\n }\n baseFilter.call(this, value);\n },\n _pageableQueryOptions: function (options) {\n var dataMaps = this._getDataMaps();\n options.childrenMap = dataMaps.children;\n options.idsMap = dataMaps.ids;\n return options;\n },\n _flatData: function (data, skip) {\n skip = this._isPageable() ? true : skip;\n return DataSource.fn._flatData.call(this, data, skip);\n },\n data: function (data) {\n var that = this;\n var result = DataSource.fn.data.call(that, data);\n if (that._isPageable()) {\n that._initDataMaps(that._getData());\n that._calculateCollapsedTotal();\n }\n return result;\n },\n cancelChanges: function (model) {\n var that = this;\n DataSource.fn.cancelChanges.call(that, model);\n that._restorePageSizeAfterAddChild();\n },\n _modelCanceled: function (model) {\n var that = this;\n if (that._isPageable()) {\n that._removeFromDataMaps(model);\n }\n },\n _changesCanceled: function () {\n var that = this;\n if (that._isPageable()) {\n that._initDataMaps(that._getData());\n }\n },\n _setAddChildPageSize: function () {\n var that = this;\n var queryOptions = {};\n if (that._isPageable()) {\n that._addChildPageSize = that.pageSize() + 1;\n queryOptions = that._defaultPageableQueryOptions();\n queryOptions.take = that._addChildPageSize;\n queryOptions.pageSize = that._addChildPageSize;\n that._query(queryOptions);\n }\n },\n _restorePageSizeAfterAddChild: function () {\n var that = this;\n var queryOptions = {};\n if (that._isPageable()) {\n if (!isUndefined(that._addChildPageSize)) {\n queryOptions = that._defaultPageableQueryOptions();\n queryOptions.take = that._addChildPageSize - 1;\n queryOptions.pageSize = that._addChildPageSize - 1;\n that._query(queryOptions);\n }\n }\n that._addChildPageSize = undefined;\n },\n sync: function () {\n var that = this;\n return DataSource.fn.sync.call(that).then(function () {\n that._restorePageSizeAfterAddChild();\n });\n },\n _syncEnd: function () {\n var that = this;\n if (that._isPageable()) {\n that._initDataMaps(that._getData());\n }\n }\n });\n TreeListDataSource.create = function (options) {\n if ($.isArray(options)) {\n options = { data: options };\n } else if (options instanceof ObservableArray) {\n options = { data: options.toJSON() };\n }\n return options instanceof TreeListDataSource ? options : new TreeListDataSource(options);\n };\n function isCellVisible() {\n return this.style.display !== 'none';\n }\n function sortCells(cells) {\n var indexAttr = kendo.attr('index');\n return cells.sort(function (a, b) {\n a = $(a);\n b = $(b);\n var indexA = a.attr(indexAttr);\n var indexB = b.attr(indexAttr);\n if (indexA === undefined) {\n indexA = $(a).index();\n }\n if (indexB === undefined) {\n indexB = $(b).index();\n }\n indexA = parseInt(indexA, 10);\n indexB = parseInt(indexB, 10);\n return indexA > indexB ? 1 : indexA < indexB ? -1 : 0;\n });\n }\n function leafDataCells(container) {\n var rows = container.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n var cells = $();\n if (rows.length > 1) {\n cells = rows.find('th[data-index]').filter(filter);\n }\n cells = cells.add(rows.last().find('th').filter(filter));\n return sortCells(cells);\n }\n function createPlaceholders(options) {\n var spans = [];\n var className = options.className;\n for (var i = 0, level = options.level; i < level; i++) {\n spans.push(kendoDomElement('span', { className: className }));\n }\n return spans;\n }\n function columnsWidth(cols) {\n var colWidth, width = 0;\n for (var idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n }\n }\n return width;\n }\n function syncTableHeight(table1, table2) {\n table1 = table1[0];\n table2 = table2[0];\n if (table1.rows.length && table2.rows.length && table1.rows.length !== table2.rows.length) {\n var lockedHeigth = table1.offsetHeight;\n var tableHeigth = table2.offsetHeight;\n var row;\n var diff;\n if (lockedHeigth > tableHeigth) {\n row = table2.rows[table2.rows.length - 1];\n if (filterRowRegExp.test(row.className)) {\n row = table2.rows[table2.rows.length - 2];\n }\n diff = lockedHeigth - tableHeigth;\n } else {\n row = table1.rows[table1.rows.length - 1];\n if (filterRowRegExp.test(row.className)) {\n row = table1.rows[table1.rows.length - 2];\n }\n diff = tableHeigth - lockedHeigth;\n }\n row.style.height = row.offsetHeight + diff + 'px';\n }\n }\n var TreeListPager = ui.Pager.extend({\n options: { name: 'TreeListPager' },\n totalPages: function () {\n var that = this;\n var dataSource = that.dataSource;\n if (dataSource && dataSource._filter) {\n return ui.Pager.fn.totalPages.call(that);\n }\n return Math.ceil((that._collapsedTotal() || 0) / (that.pageSize() || 1));\n },\n _createDataSource: function (options) {\n this.dataSource = kendo.data.TreeListDataSource.create(options.dataSource);\n },\n _collapsedTotal: function () {\n var dataSource = this.dataSource;\n return dataSource ? dataSource.collapsedTotal() || 0 : 0;\n }\n });\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n options = this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.bind(this.events, options);\n this.model = this.options.model;\n this.fields = this._fields(this.options.columns);\n this._initContainer();\n this.createEditable();\n },\n events: [],\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: options.clearContainer,\n model: this.model,\n change: options.change\n });\n },\n _isEditable: function (column) {\n return isColumnEditable(column, this.model);\n },\n _fields: function (columns) {\n var fields = [];\n var idx, length, column;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (this._isEditable(column)) {\n fields.push({\n field: column.field,\n format: column.format,\n editor: column.editor\n });\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n close: function () {\n this.destroy();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty().end().removeAttr(kendo.attr('role'));\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this._attachHandlers();\n kendo.cycleForm(this.wrapper);\n this.open();\n },\n events: [\n CANCEL,\n SAVE\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var options = this.options;\n var formContent = [];\n this.wrapper = $('
').attr(kendo.attr('uid'), this.model.uid).append('
');\n if (options.template) {\n this._appendTemplate(formContent);\n this.fields = [];\n } else {\n this._appendFields(formContent);\n }\n this._appendButtons(formContent);\n new kendoDom.Tree(this.wrapper.children()[0]).render(formContent);\n this.wrapper.appendTo(options.appendTo);\n this.window = new ui.Window(this.wrapper, options.window);\n },\n _appendTemplate: function (form) {\n var template = this.options.template;\n if (typeof template === STRING) {\n template = kendo.unescape(template);\n }\n template = kendo.template(template)(this.model);\n form.push(kendoHtmlElement(template));\n },\n _appendFields: function (form) {\n var idx, length, column;\n var columns = this.options.columns;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.selectable) {\n continue;\n }\n if (column.command) {\n continue;\n }\n form.push(kendoHtmlElement('
'));\n if (this._isEditable(column)) {\n form.push(kendoHtmlElement('
'));\n } else {\n form.push(kendoDomElement('div', { 'class': 'k-edit-field' }, [this.options.fieldRenderer(column, this.model)]));\n }\n }\n },\n _appendButtons: function (form) {\n form.push(kendoDomElement('div', { 'class': 'k-edit-buttons k-state-default' }, this.options.commandRenderer()));\n },\n _attachHandlers: function () {\n var closeHandler = this._cancelProxy = proxy(this._cancel, this);\n this.wrapper.on(CLICK + NS, '.k-grid-cancel', this._cancelProxy);\n this._saveProxy = proxy(this._save, this);\n this.wrapper.on(CLICK + NS, '.k-grid-update', this._saveProxy);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n closeHandler(e);\n }\n });\n },\n _detachHandlers: function () {\n this._cancelProxy = null;\n this._saveProxy = null;\n this.wrapper.off(NS);\n },\n _cancel: function (e) {\n this.trigger(CANCEL, e);\n },\n _save: function () {\n this.trigger(SAVE);\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.destroy();\n this.window = null;\n this._detachHandlers();\n Editor.fn.destroy.call(this);\n }\n });\n var IncellEditor = Editor.extend({\n destroy: function () {\n var that = this;\n that.editable.destroy();\n that.editable.element.off().empty().removeAttr(kendo.attr('role'));\n that.model = that.wrapper = that.element = that.columns = that.editable = null;\n }\n });\n var TreeList = DataBoundWidget.extend({\n init: function (element, options, events) {\n DataBoundWidget.fn.init.call(this, element, options);\n if (events) {\n this._events = events;\n }\n isRtl = kendo.support.isRtl(element);\n this._dataSource(this.options.dataSource);\n this._aria();\n this._columns();\n this._layout();\n this._navigatable();\n this._selectable();\n this._sortable();\n this._resizable();\n this._filterable();\n this._filterRow();\n this._attachEvents();\n this._toolbar();\n this._scrollable();\n this._reorderable();\n this._columnMenu();\n this._minScreenSupport();\n this._draggable();\n this._pageable();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n if (this._hasLockedColumns) {\n var widget = this;\n this.wrapper.addClass('k-grid-lockedcolumns');\n this._resizeHandler = function () {\n widget.resize();\n };\n $(window).on('resize' + NS, this._resizeHandler);\n }\n kendo.notify(this);\n },\n _draggable: function () {\n var that = this;\n var editable = this.options.editable;\n var dataSource = that.dataSource;\n var idField = dataSource._modelIdField();\n var parentIdField = dataSource._modelParentIdField();\n var pageable = that._isPageable();\n var reorderable;\n if (!editable || !editable.move) {\n return;\n }\n reorderable = editable.move.reorderable;\n this._dragging = new kendo.ui.HierarchicalDragAndDrop(this.wrapper, {\n $angular: this.$angular,\n autoScroll: true,\n holdToDrag: touchDevice,\n filter: 'tbody>tr',\n itemSelector: 'tr',\n allowedContainers: this.wrapper,\n hintText: function (row) {\n var text = function () {\n return $(this).text();\n };\n var separator = '';\n return row.children('td').map(text).toArray().join(separator);\n },\n contains: proxy(function (source, destination) {\n var dest = this.dataItem(destination);\n var src = this.dataItem(source);\n return src == dest || this.dataSource.contains(src, dest);\n }, this),\n itemFromTarget: function (target) {\n var tr = target.closest('tr');\n var prevRow = tr.prev();\n var nextRow = tr.next();\n var first;\n var last;\n if (prevRow) {\n first = !that.sameLevel(prevRow, tr);\n }\n if (nextRow) {\n last = !that.sameLevel(nextRow, tr);\n }\n return {\n item: tr,\n content: tr,\n first: first,\n last: last\n };\n },\n dragstart: proxy(function (source) {\n this.wrapper.addClass('k-treelist-dragging');\n if (this.wrapper.find('.k-grid-content').length) {\n this.wrapper.find('.k-grid-content table, .k-grid-content-locked table').css('position', 'relative');\n }\n var model = this.dataItem(source);\n return this.trigger(DRAGSTART, { source: model });\n }, this),\n drag: proxy(function (e) {\n e.source = this.dataItem(e.source);\n this.trigger(DRAG, e);\n }, this),\n drop: proxy(function (e) {\n e.source = this.dataItem(e.source);\n e.destination = this.dataItem(e.destination);\n this.wrapper.removeClass('k-treelist-dragging');\n if (this.wrapper.find('.k-grid-content').length) {\n this.wrapper.find('.k-grid-content table, .k-grid-content-locked table').css('position', 'static');\n }\n return this.trigger(DROP, e);\n }, this),\n dragend: proxy(function (e) {\n var dest = this.dataItem(e.destination);\n var src = this.dataItem(e.source);\n var originalSrcParentId = src[parentIdField];\n var originalSrcIndex = dataSource._indexInChildrenMap(src);\n var position = e.position;\n if (position == 'over') {\n if (pageable) {\n dataSource._removeFromChildrenMap(src);\n src[parentIdField] = dest ? dest[idField] : null;\n dataSource._initChildrenMapForParent(dest);\n src[parentIdField] = originalSrcParentId;\n }\n var isPrevented = src.set('parentId', dest ? dest.id : null);\n if (pageable && isPrevented) {\n dataSource._removeFromChildrenMap(src);\n src[parentIdField] = originalSrcParentId;\n dataSource._removeFromChildrenMap(src);\n dataSource._insertInChildrenMap(src, originalSrcIndex);\n }\n } else {\n if (position == 'before') {\n that.insertBefore(src, dest);\n } else if (position == 'after') {\n that.insertAfter(src, dest);\n }\n }\n e.source = src;\n e.destination = dest;\n this.trigger(DRAGEND, e);\n }, this),\n reorderable: reorderable,\n dropHintContainer: function (item) {\n return item.children('td:visible:eq(0)');\n },\n dropPositionFrom: function (dropHint) {\n var contents;\n var length;\n var i;\n var dropHintElement;\n var isAfterText = false;\n if (dropHint.parent().find('.k-i-none').length) {\n return dropHint.prevAll('.k-i-none').length > 0 ? 'after' : 'before';\n } else {\n contents = dropHint.parent().contents();\n length = contents.length;\n dropHintElement = dropHint[0];\n for (i = 0; i < length; i++) {\n if (contents[i] === dropHintElement) {\n break;\n }\n if (contents[i].nodeType === 3) {\n isAfterText = true;\n }\n }\n return isAfterText ? 'after' : 'before';\n }\n }\n });\n },\n sameLevel: function () {\n return arguments[0].find('.' + classNames.iconHidden).length === arguments[1].find('.' + classNames.iconHidden).length;\n },\n insertAfter: function (nodeData, referenceNode) {\n this.insertAction(nodeData, referenceNode, 1);\n },\n insertBefore: function (nodeData, referenceNode) {\n this.insertAction(nodeData, referenceNode, 0);\n },\n insertAction: function (nodeData, referenceNode, indexOffset) {\n var that = this;\n var dataSource = that.dataSource;\n var parentIdField = dataSource._modelParentIdField();\n var referenceNodeIndex;\n var nodeDataIndex = dataSource.indexOf(nodeData);\n var pageable = that._isPageable();\n var originalDestIndex = dataSource._indexInChildrenMap(referenceNode);\n var destIndex;\n var childrenMap = dataSource._getChildrenMap() || {};\n var parentId = nodeData[parentIdField];\n that._unbindDataSource();\n that._unbindDataChange();\n if (pageable) {\n dataSource._removeFromChildrenMap(nodeData);\n }\n if (nodeData[parentIdField] != referenceNode[parentIdField]) {\n nodeData.set('parentId', referenceNode && referenceNode.parentId ? referenceNode.parentId : null);\n }\n dataSource._data.splice(nodeDataIndex, 1);\n referenceNodeIndex = dataSource.indexOf(referenceNode);\n destIndex = referenceNodeIndex + indexOffset;\n if (pageable) {\n originalDestIndex += indexOffset;\n if (childrenMap[parentId].length <= originalDestIndex) {\n originalDestIndex = childrenMap[parentId].length;\n }\n dataSource._insertInChildrenMap(nodeData, originalDestIndex);\n }\n dataSource._data.splice(destIndex, 0, nodeData);\n dataSource._destroyed.pop();\n that._bindDataChange();\n that._bindDataSource();\n that.refresh();\n },\n _bindDataChange: function () {\n var dataSource = this.dataSource;\n if (dataSource._data && dataSource._changeHandler) {\n dataSource._data.bind(CHANGE, dataSource._changeHandler);\n dataSource._data.trigger(CHANGE);\n }\n },\n _unbindDataChange: function () {\n var dataSource = this.dataSource;\n if (dataSource._data && dataSource._changeHandler) {\n dataSource._data.unbind(CHANGE, dataSource._changeHandler);\n }\n },\n _bindDataSource: function () {\n var that = this;\n var dataSource = that.dataSource;\n if (dataSource) {\n dataSource.bind(CHANGE, that._refreshHandler);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n var dataSource = that.dataSource;\n if (dataSource) {\n dataSource.unbind(CHANGE, that._refreshHandler);\n }\n },\n itemFor: function (model) {\n if (typeof model == 'number') {\n model = this.dataSource.get(model);\n }\n return this.tbody.find('[' + kendo.attr('uid') + '=' + model.uid + ']');\n },\n _itemFor: function (model) {\n var that = this;\n var table = that.lockedContent ? that.lockedTable : that.table;\n if (typeof model == 'number') {\n model = this.dataSource.get(model);\n }\n return table.find('[' + kendo.attr('uid') + '=' + model.uid + ']');\n },\n _scrollable: function () {\n if (this.options.scrollable) {\n var scrollables = this.thead.closest('.k-grid-header-wrap');\n var lockedContent = $(this.lockedContent).bind('DOMMouseScroll' + NS + ' mousewheel' + NS, proxy(this._wheelScroll, this));\n this.content.bind('scroll' + NS, function () {\n kendo.scrollLeft(scrollables, this.scrollLeft);\n lockedContent.scrollTop(this.scrollTop);\n });\n var touchScroller = kendo.touchScroller(this.content);\n if (touchScroller && touchScroller.movable) {\n this._touchScroller = touchScroller;\n touchScroller.movable.bind('change', function (e) {\n kendo.scrollLeft(scrollables, -e.sender.x);\n if (lockedContent) {\n lockedContent.scrollTop(-e.sender.y);\n }\n });\n }\n }\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n var delta = kendo.wheelDeltaY(e);\n var lockedDiv = $(e.currentTarget);\n if (delta) {\n if (lockedDiv[0].scrollHeight > lockedDiv[0].clientHeight && (lockedDiv[0].scrollTop < lockedDiv[0].scrollHeight - lockedDiv[0].clientHeight && delta < 0 || lockedDiv[0].scrollTop > 0 && delta > 0)) {\n e.preventDefault();\n }\n lockedDiv.one('wheel' + NS, false);\n this.content.scrollTop(this.content.scrollTop() + -delta);\n }\n },\n _progress: function () {\n var messages = this.options.messages;\n if (!this.tbody.find('tr').length) {\n this._showStatus(kendo.template(' #: messages.loading #')({\n className: classNames.icon + ' ' + classNames.loading,\n messages: messages\n }));\n }\n },\n _error: function (e) {\n if (!this.dataSource.rootNodes().length) {\n this._render({ error: e });\n }\n },\n refresh: function (e) {\n var that = this;\n e = e || {};\n if (e.action == 'itemchange' && this.editor) {\n return;\n }\n if (this.trigger(DATABINDING)) {\n return;\n }\n var current = $(this.current());\n var isCurrentInHeader = false;\n var currentIndex;\n this._cancelEditor();\n this._render();\n this._adjustHeight();\n if (this.options.navigatable) {\n if (this._isActiveInTable() || this.editor) {\n isCurrentInHeader = current.is('th');\n currentIndex = Math.max(this.cellIndex(current), 0);\n }\n this._restoreCurrent(currentIndex, isCurrentInHeader);\n }\n if (that._checkBoxSelection) {\n that._deselectCheckRows(that.items(), true);\n }\n this.trigger(DATABOUND);\n },\n _angularFooters: function (command) {\n var i, footer, aggregates;\n var allAggregates = this.dataSource.aggregates();\n var footerRows = this._footerItems();\n for (i = 0; i < footerRows.length; i++) {\n footer = footerRows.eq(i);\n aggregates = allAggregates[footer.attr('data-parentId')];\n this._angularFooter(command, footer.find('td').get(), aggregates);\n }\n },\n _angularFooter: function (command, cells, aggregates) {\n var columns = this.columns;\n this.angular(command, function () {\n return {\n elements: cells,\n data: map(columns, function (col) {\n return {\n column: col,\n aggregate: aggregates && aggregates[col.field]\n };\n })\n };\n });\n },\n items: function () {\n if (this._hasLockedColumns) {\n return this._items(this.tbody).add(this._items(this.lockedTable));\n } else {\n return this._items(this.tbody);\n }\n },\n _items: function (container) {\n return container.find('tr[data-uid]').filter(function () {\n return !$(this).hasClass(classNames.footerTemplate);\n });\n },\n _footerItems: function () {\n var container = this.tbody;\n if (this._hasLockedColumns) {\n container = container.add(this.lockedTable);\n }\n return container.find('tr').filter(function () {\n return $(this).hasClass(classNames.footerTemplate);\n });\n },\n dataItems: function () {\n var dataItems = kendo.ui.DataBoundWidget.fn.dataItems.call(this);\n if (this._hasLockedColumns) {\n var n = dataItems.length, tmp = new Array(2 * n);\n for (var i = n; --i >= 0;) {\n tmp[i] = tmp[i + n] = dataItems[i];\n }\n dataItems = tmp;\n }\n return dataItems;\n },\n _showNoRecordsTemplate: function () {\n var wrapper = '
{1}
';\n var defaultTemplate = '
{0}
';\n var scrollableNoGridHeightStyles = this.options.scrollable && !this.wrapper[0].style.height ? ' style=\"margin:0 auto;position:static;\"' : '';\n var template;\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n template = kendo.format(defaultTemplate, this.options.messages.noRows, scrollableNoGridHeightStyles);\n $(kendo.template(kendo.format(wrapper, NORECORDSCLASS, template))({})).insertAfter(this.table);\n },\n _showStatus: function (message) {\n var status = this.element.find('.k-status');\n var content = $(this.content).add(this.lockedContent);\n if (!status.length) {\n status = $('
').appendTo(this.element);\n }\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n content.hide();\n status.html(message);\n },\n _hideStatus: function () {\n this.element.find('.k-status').remove();\n this._hideNoRecordsTempalte();\n $(this.content).add(this.lockedContent).show();\n },\n _hideNoRecordsTempalte: function () {\n this.element.find('.' + NORECORDSCLASS).remove();\n },\n _adjustHeight: function () {\n var that = this;\n var element = this.element;\n var contentWrap = element.find(DOT + classNames.gridContentWrap);\n var header = element.find(DOT + classNames.gridHeader);\n var toolbar = element.find(DOT + classNames.gridToolbar);\n var status = element.find(DOT + classNames.status);\n var pagerHeight = that._isPageable() && that.pager && that.pager.element.is(':visible') ? outerHeight(that.pager.element) : 0;\n var height;\n var scrollbar = kendo.support.scrollbar();\n element.css(HEIGHT, this.options.height);\n var isHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n el.height('');\n return initialHeight != newHeight;\n };\n if (isHeightSet(element)) {\n height = element.height() - outerHeight(header) - outerHeight(toolbar) - outerHeight(status) - pagerHeight;\n contentWrap.height(height);\n if (this._hasLockedColumns) {\n scrollbar = this.table[0].offsetWidth > this.table.parent()[0].clientWidth ? scrollbar : 0;\n this.lockedContent.height(height - scrollbar);\n }\n }\n },\n _resize: function (size, force) {\n this._applyLockedContainersWidth();\n this._adjustHeight();\n if (this.pager && this.pager.element) {\n this.pager.resize(force);\n }\n },\n _minScreenSupport: function () {\n var any = this.hideMinScreenCols();\n if (any) {\n this.minScreenResizeHandler = proxy(this.hideMinScreenCols, this);\n $(window).on('resize', this.minScreenResizeHandler);\n }\n },\n _iterateMinScreenCols: function (cols, screenWidth) {\n var any = false;\n for (var i = 0; i < cols.length; i++) {\n var col = cols[i];\n var minWidth = col.minScreenWidth;\n if (minWidth !== undefined && minWidth !== null) {\n any = true;\n if (minWidth > screenWidth) {\n this.hideColumn(col);\n } else {\n this.showColumn(col);\n }\n }\n if (!col.hidden && col.columns) {\n any = this._iterateMinScreenCols(col.columns, screenWidth) || any;\n }\n }\n return any;\n },\n hideMinScreenCols: function () {\n var cols = this.columns, screenWidth = window.innerWidth > 0 ? window.innerWidth : screen.width;\n return this._iterateMinScreenCols(cols, screenWidth);\n },\n destroy: function () {\n this._destroyColumnAttachments();\n DataBoundWidget.fn.destroy.call(this);\n var dataSource = this.dataSource;\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n dataSource.unbind(PROGRESS, this._progressHandler);\n this._navigatableTables = null;\n this._current = null;\n if (this._resizeHandler) {\n $(window).off('resize' + NS, this._resizeHandler);\n }\n if (this._dragging) {\n this._dragging.destroy();\n this._dragging = null;\n }\n if (this.resizable) {\n this.resizable.destroy();\n this.resizable = null;\n }\n if (this.reorderable) {\n this.reorderable.destroy();\n this.reorderable = null;\n }\n if (this._draggableInstance && this._draggableInstance.element) {\n this._draggableInstance.destroy();\n this._draggableInstance = null;\n }\n if (this.selectable) {\n this.selectable.destroy();\n }\n if (this._userEvents) {\n this._userEvents.destroy();\n this._userEvents = null;\n }\n if (this.minScreenResizeHandler) {\n $(window).off('resize', this.minScreenResizeHandler);\n }\n this._destroyEditor();\n this.element.off(NS);\n if (this.wrapper) {\n this.wrapper.off(NS);\n }\n if (this._touchScroller) {\n this._touchScroller.destroy();\n }\n this._destroyPager();\n if (dataSource) {\n dataSource._dataMaps = null;\n }\n this._autoExpandable = null;\n this._refreshHandler = this._errorHandler = this._progressHandler = this._dataSourceFetchProxy = null;\n this.thead = this.content = this.tbody = this.table = this.element = this.lockedHeader = this.lockedContent = null;\n this._statusTree = this._headerTree = this._contentTree = this._lockedHeaderColsTree = this._lockedContentColsTree = this._lockedHeaderTree = this._lockedContentTree = null;\n kendo.destroy(this.wrapper);\n },\n options: {\n name: 'TreeList',\n columns: [],\n autoBind: true,\n scrollable: true,\n selectable: false,\n sortable: false,\n toolbar: null,\n height: null,\n columnMenu: false,\n messages: {\n noRows: 'No records to display',\n loading: 'Loading...',\n requestFailed: 'Request failed.',\n retry: 'Retry',\n commands: {\n edit: 'Edit',\n update: 'Update',\n canceledit: 'Cancel',\n create: 'Add new record',\n createchild: 'Add child record',\n destroy: 'Delete',\n excel: 'Export to Excel',\n pdf: 'Export to PDF',\n search: 'Search...'\n }\n },\n excel: { hierarchy: true },\n resizable: false,\n search: false,\n filterable: false,\n editable: false,\n reorderable: false,\n pageable: false,\n renderAllRows: true,\n rowTemplate: '',\n altRowTemplate: ''\n },\n events: [\n CHANGE,\n BEFORE_EDIT,\n EDIT,\n PAGE,\n SAVE,\n SAVE_CHANGES,\n REMOVE,\n EXPAND,\n COLLAPSE,\n DATABINDING,\n DATABOUND,\n CANCEL,\n DRAGSTART,\n DRAG,\n DROP,\n DRAGEND,\n FILTERMENUINIT,\n ITEM_CHANGE,\n CELL_CLOSE,\n FILTERMENUOPEN,\n COLUMNHIDE,\n COLUMNSHOW,\n COLUMNREORDER,\n COLUMNRESIZE,\n COLUMNMENUINIT,\n COLUMNMENUOPEN,\n COLUMNLOCK,\n COLUMNUNLOCK\n ],\n getOptions: function () {\n var options = this.options;\n options.dataSource = null;\n var result = extend(true, {}, this.options);\n result.columns = kendo.deepExtend([], this.columns);\n var dataSource = this.dataSource;\n var initialData = dataSource.options.data && dataSource._data;\n dataSource.options.data = null;\n result.dataSource = $.extend(true, {}, dataSource.options);\n dataSource.options.data = initialData;\n result.dataSource.data = initialData;\n result.dataSource.page = dataSource.page();\n result.dataSource.filter = $.extend(true, {}, dataSource.filter());\n result.dataSource.pageSize = dataSource.pageSize();\n result.dataSource.sort = dataSource.sort();\n result.dataSource.group = dataSource.group();\n result.dataSource.aggregate = dataSource.aggregate();\n if (result.dataSource.transport) {\n result.dataSource.transport.dataSource = null;\n }\n if (result.pageable && result.pageable.pageSize) {\n result.pageable.pageSize = dataSource.pageSize();\n }\n result.$angular = undefined;\n return result;\n },\n setOptions: function (options) {\n var currentOptions = this.getOptions();\n kendo.deepExtend(currentOptions, options);\n if (!options.dataSource) {\n currentOptions.dataSource = this.dataSource;\n }\n var wrapper = this.wrapper;\n var events = this._events;\n var element = this.element;\n this.destroy();\n this.options = null;\n if (wrapper[0] !== element[0]) {\n wrapper.before(element);\n wrapper.remove();\n }\n element.empty();\n this.init(element, currentOptions, events);\n this._setEvents(currentOptions);\n },\n _destroyColumnAttachments: function () {\n var that = this;\n if (!that.thead) {\n return;\n }\n this.angular('cleanup', function () {\n return { elements: that.thead.get() };\n });\n that.thead.add(that.lockedHeader).find('th').each(function () {\n var th = $(this), filterMenu = th.data('kendoFilterMenu'), sortable = th.data('kendoColumnSorter'), columnMenu = th.data('kendoColumnMenu');\n if (filterMenu) {\n filterMenu.destroy();\n }\n if (sortable) {\n sortable.destroy();\n }\n if (columnMenu) {\n columnMenu.destroy();\n }\n });\n },\n _toggle: function (model, expand) {\n var that = this;\n var defaultPromise = $.Deferred().resolve().promise();\n var loaded = model.loaded();\n if (that._isIncellEditable() && that.editor) {\n $(activeElement()).change();\n that.closeCell();\n }\n if (model._error) {\n model.expanded = false;\n model._error = undefined;\n }\n if (!loaded && model.expanded) {\n return defaultPromise;\n }\n if (typeof expand == 'undefined') {\n expand = !model.expanded;\n }\n model.expanded = expand;\n function afterModelLoaded() {\n that._toggleData();\n if (that._isPageable()) {\n that.refresh();\n } else {\n that._render();\n }\n that._syncLockedContentHeight();\n }\n if (!loaded) {\n defaultPromise = this.dataSource.load(model).always(proxy(function () {\n afterModelLoaded();\n }, this));\n }\n afterModelLoaded();\n return defaultPromise;\n },\n _toggleData: function () {\n var that = this;\n if (that._isPageable()) {\n that._togglePageableData();\n }\n },\n _togglePageableData: function () {\n var that = this;\n var dataSource = that.dataSource;\n var data = dataSource._getData();\n var result;\n var queryOptions = dataSource._defaultPageableQueryOptions();\n that._renderProgress(true);\n var childrenMap = dataSource._getChildrenMap() || dataSource.childrenMap(dataSource._getData());\n dataSource._processDataItemsState(data, childrenMap);\n result = dataSource._processPageableQuery(data, queryOptions);\n queryOptions.childrenMap = result.childrenMap;\n queryOptions.filteredChildrenMap = result.filteredChildrenMap;\n dataSource._aggregateResult = dataSource._calculateAggregates(result.dataToAggregate, queryOptions);\n dataSource.view(result.data);\n if (!dataSource.filter()) {\n dataSource._calculateCollapsedTotal();\n }\n that._refreshPager();\n that._renderProgress(false);\n },\n _refreshPager: function () {\n var pager = this.pager;\n if (pager) {\n pager.refresh();\n }\n },\n expand: function (row) {\n return this._toggle(this.dataItem(row), true);\n },\n collapse: function (row) {\n return this._toggle(this.dataItem(row), false);\n },\n _toggleChildren: function (e) {\n var icon = $(e.target);\n var model = this.dataItem(icon);\n if (!model) {\n return;\n }\n var event = !model.expanded ? EXPAND : COLLAPSE;\n if (!this.trigger(event, { model: model })) {\n this._toggle(model);\n }\n e.preventDefault();\n },\n _navigatable: function () {\n var that = this;\n if (!that.options.navigatable) {\n return;\n }\n var tables = that.table.add(that.lockedTable);\n var headerTables = that.thead.parent().add($('>table', that.lockedHeader));\n if (that.options.scrollable) {\n tables = tables.add(headerTables);\n headerTables.attr(TABINDEX, -1);\n }\n this._navigatableTables = tables;\n tables.on(kendo.support.touch ? 'touchstart' + NS : 'mousedown' + NS, NAVROW + '>:visible', proxy(that._tableClick, that)).on('focus' + NS, proxy(that._tableFocus, that)).on('focusout' + NS, proxy(that._tableBlur, that)).on('keydown' + NS, proxy(that._tableKeyDown, that));\n },\n cellIndex: function (td) {\n var lockedColumnOffset = 0;\n if (this.lockedTable && !$.contains(this.lockedTable[0], td[0])) {\n lockedColumnOffset = leafColumns(lockedColumns(this.columns)).length;\n }\n return $(td).parent().children().index(td) + lockedColumnOffset;\n },\n _isActiveInTable: function () {\n var active = kendo._activeElement();\n if (!active) {\n return false;\n }\n return this.table[0] === active || $.contains(this.table[0], active) || this.lockedTable && (this.lockedTable[0] === active || $.contains(this.lockedTable[0], active));\n },\n _restoreCurrent: function (currentIndex, isCurrentInHeader) {\n var rowIndex;\n var row;\n var td;\n if (currentIndex === undefined || currentIndex < 0) {\n return;\n }\n if (this._current) {\n this._current.removeClass('k-state-focused');\n }\n if (isCurrentInHeader) {\n this.current(this.thead.find('th').eq(currentIndex));\n } else {\n rowIndex = 0;\n currentIndex = 0;\n row = $();\n if (this.lockedTable) {\n row = this.lockedTable.find('>tbody>tr:visible').eq(rowIndex);\n }\n row = row.add(this.tbody.children().eq(rowIndex));\n td = row.find('>td:visible').eq(currentIndex);\n this.current(td);\n }\n if (this._current) {\n focusTable(this._current.closest('table')[0], true);\n }\n },\n current: function (newCurrent) {\n var current = this._current;\n newCurrent = $(newCurrent);\n if (newCurrent.length && (!current || current[0] !== newCurrent[0])) {\n this._updateCurrentAttr(current, newCurrent);\n this._scrollCurrent();\n }\n if (newCurrent && newCurrent.length) {\n this._lastCellIndex = newCurrent.parent().children(DATA_CELL).index(newCurrent);\n }\n return this._current;\n },\n _setCurrent: function (newCurrent) {\n var that = this;\n newCurrent = $(newCurrent);\n if (newCurrent[0]) {\n that._current = newCurrent;\n that._updateCurrentAttr(that._current, newCurrent);\n that._scrollCurrent();\n }\n return that._current;\n },\n _scrollCurrent: function () {\n var current = this._current;\n var scrollable = this.options.scrollable;\n if (!current || !scrollable) {\n return;\n }\n var row = current.parent();\n var tableContainer = row.closest('table').parent();\n var isInLockedContainer = tableContainer.is('.k-grid-content-locked,.k-grid-header-locked');\n var isInContent = tableContainer.is('.k-grid-content-locked,.k-grid-content');\n var scrollableContainer = $(this.content)[0];\n if (isInContent) {\n this._scrollTo(this._relatedRow(row)[0], scrollableContainer);\n }\n if (this.lockedContent) {\n this.lockedContent[0].scrollTop = scrollableContainer.scrollTop;\n }\n if (!isInLockedContainer) {\n this._scrollTo(current[0], scrollableContainer);\n }\n },\n _findCurrentCell: function () {\n var that = this;\n var current = that.current();\n var elements = $(that.table).add(that.header).add(that.lockedTable).add(that.lockedHeader);\n if (current && elements.find(current).length > 0) {\n return current;\n } else {\n return elements.find(DOT + classNames.focused);\n }\n },\n _scrollTo: function (element, container) {\n var elementToLowercase = element.tagName.toLowerCase();\n var isHorizontal = elementToLowercase === 'td' || elementToLowercase === 'th';\n var table = $(element).closest('table')[0];\n var elementOffsetDir = element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n var containerScroll = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n var containerOffsetDir = container[isHorizontal ? 'clientWidth' : 'clientHeight'];\n var elementOffset = $(element).css('position') === 'relative' && isRtl && isHorizontal ? Math.abs(table.offsetLeft - element.offsetLeft) : element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n var bottomDistance = elementOffset + elementOffsetDir;\n var result = 0;\n var ieCorrection = 0;\n var firefoxCorrection = 0;\n if (isRtl && isHorizontal) {\n if (browser.msie || browser.edge) {\n ieCorrection = table.offsetLeft;\n } else if (browser.mozilla || browser.webkit && browser.version > 85) {\n firefoxCorrection = table.offsetLeft - kendo.support.scrollbar();\n }\n }\n containerScroll = Math.abs(containerScroll + ieCorrection - firefoxCorrection);\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (bottomDistance > containerScroll + containerOffsetDir) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = bottomDistance - containerOffsetDir;\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n result = Math.abs(result + ieCorrection) + firefoxCorrection;\n container[isHorizontal ? 'scrollLeft' : 'scrollTop'] = result;\n },\n _aria: function () {\n var id = this.element.attr('id') || 'aria';\n if (id) {\n this._elementId = id + '_active_element';\n }\n },\n _currentDataIndex: function (table, current) {\n var index = current.attr('data-index');\n if (!index) {\n return undefined;\n }\n var lockedColumnsCount = lockedColumns(this.columns).length;\n if (lockedColumnsCount && !table.closest('div').hasClass('k-grid-content-locked')[0]) {\n return index - lockedColumnsCount;\n }\n return index;\n },\n _prevVerticalCell: function (container, current) {\n var cells;\n var row = current.parent();\n var rows = container.children(NAVROW);\n var rowIndex = rows.index(row);\n var index = this._currentDataIndex(container, current);\n var cellSelector = DATA_CELL + ',' + FILTER_CELL;\n if (index || current.hasClass('k-header')) {\n cells = parentColumnsCells(current);\n return cells.eq(cells.length - 2);\n }\n index = Math.max(row.children(cellSelector).index(current), this._lastCellIndex || 0);\n if (row.hasClass('k-filter-row')) {\n return leafDataCells(container).filter(isCellVisible).eq(index);\n }\n if (rowIndex == -1) {\n row = container.find('tr.k-filter-row:visible');\n if (!row[0]) {\n return leafDataCells(container).filter(isCellVisible).eq(index);\n }\n } else {\n row = rowIndex === 0 ? $() : rows.eq(rowIndex - 1);\n }\n cells = row.children(cellSelector);\n if (cells.length > index) {\n return cells.eq(index);\n }\n return cells.eq(0);\n },\n _nextVerticalCell: function (container, current) {\n var cells;\n var row = current.parent();\n var rows = container.children(NAVROW);\n var rowIndex = rows.index(row);\n var index = this._currentDataIndex(container, current);\n var cellSelector = DATA_CELL + ',' + FILTER_CELL;\n if (rowIndex != -1 && index === undefined && current.hasClass('k-header')) {\n return childColumnsCells(current).eq(1);\n }\n index = index ? parseInt(index, 10) : row.children(cellSelector).index(current);\n index = Math.max(index, this._lastCellIndex || 0);\n if (rowIndex == -1) {\n row = rows.eq(0);\n } else {\n row = rows.eq(rowIndex + current[0].rowSpan);\n }\n var tmpIndex = index;\n if (this._currentDataIndex(container, current) !== undefined) {\n var currentRowCells = row.children(':not(.k-group-cell):not(.k-hierarchy-cell)');\n var hiddenColumns = currentRowCells.filter(':hidden');\n for (var idx = 0, length = hiddenColumns.length; idx < length; idx++) {\n if (currentRowCells.index(hiddenColumns[idx]) < index) {\n tmpIndex--;\n }\n }\n }\n index = tmpIndex;\n cells = row.children(cellSelector);\n if (cells.length > index) {\n return cells.eq(index);\n }\n return cells.eq(0);\n },\n _verticalContainer: function (container, up) {\n var table = container.parent();\n var length = this._navigatableTables.length;\n var step = Math.floor(length / 2);\n var index = inArray(table[0], this._navigatableTables);\n if (up) {\n step *= -1;\n }\n index += step;\n if (index >= 0 || index < length) {\n table = this._navigatableTables.eq(index);\n }\n return table.find(up ? 'thead' : 'tbody');\n },\n _updateCurrentAttr: function (current, next) {\n var headerId = $(current).data('headerId');\n $(current).removeClass(classNames.focused).closest('table').removeAttr('aria-activedescendant');\n if (headerId) {\n headerId = headerId.replace(this._elementId, '');\n $(current).attr('id', headerId);\n } else {\n $(current).removeAttr('id');\n }\n next.data('headerId', next.attr('id')).attr('id', this._elementId).addClass(classNames.focused).closest('table').attr('aria-activedescendant', this._elementId);\n this._current = next;\n },\n _tableKeyDown: function (e) {\n var handled = false;\n var current = this.current();\n var target = $(e.target);\n var canHandle = !e.isDefaultPrevented() && !target.is(':button,a,:input,a>.k-icon');\n current = current ? current : $(this.lockedTable).add(this.table).find(FIRSTNAVITEM);\n if (canHandle && e.keyCode == keys.UP) {\n handled = this._moveUp(current, e.shiftKey);\n }\n if (canHandle && e.keyCode == keys.DOWN) {\n handled = this._moveDown(current, e.shiftKey);\n }\n if (canHandle && e.keyCode == (isRtl ? keys.LEFT : keys.RIGHT)) {\n if (e.altKey) {\n handled = this._handleExpand(current);\n } else {\n handled = this._moveRight(current);\n }\n }\n if (canHandle && e.keyCode == (isRtl ? keys.RIGHT : keys.LEFT)) {\n if (e.altKey) {\n handled = this._handleCollapse(current);\n } else {\n handled = this._moveLeft(current);\n }\n }\n if (canHandle && e.keyCode == keys.PAGEDOWN) {\n handled = this._handlePageDown();\n }\n if (canHandle && e.keyCode == keys.PAGEUP) {\n handled = this._handlePageUp();\n }\n if (e.keyCode == keys.ENTER || e.keyCode == keys.F2) {\n handled = this._handleEnterKey(current, e.currentTarget, target);\n }\n if (e.keyCode == keys.ESC) {\n handled = this._handleEscKey(current, e.currentTarget);\n }\n if (canHandle && e.keyCode == keys.HOME) {\n handled = this._handleHome(current, e.ctrlKey);\n }\n if (canHandle && e.keyCode == keys.END) {\n handled = this._handleEnd(current, e.ctrlKey);\n }\n if (e.keyCode == keys.TAB) {\n handled = this._handleTabKey(current, e.currentTarget, e.shiftKey);\n }\n if (handled) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n _handleExpand: function (current) {\n var that = this;\n var row = current.parent();\n var model = that.dataItem(row);\n if (current.hasClass('k-header')) {\n return false;\n }\n if (model && model.hasChildren && !model.expanded && !that.trigger(EXPAND, { model: model })) {\n this.expand(row);\n return true;\n }\n return false;\n },\n _handleCollapse: function (current) {\n var that = this;\n var row = current.parent();\n var model = that.dataItem(row);\n if (current.hasClass('k-header')) {\n return false;\n }\n if (model && model.hasChildren && model.expanded && !that.trigger(COLLAPSE, { model: model })) {\n that.collapse(row);\n return true;\n }\n return false;\n },\n _handleHome: function (current, ctrl) {\n var row = current.parent();\n var rowContainer = row.parent();\n var isInLockedTable = this.lockedTable && this.lockedTable.children('tbody')[0] === rowContainer[0];\n var isInBody = rowContainer[0] === this.tbody[0];\n var prev;\n if (ctrl) {\n if (this.lockedTable) {\n prev = this.lockedTable.find(FIRSTNAVITEM);\n } else {\n prev = this.table.find(FIRSTNAVITEM);\n }\n } else if (isInBody || isInLockedTable) {\n if (isInBody && this.lockedTable) {\n row = this._relatedRow(row);\n }\n prev = row.children(NAVCELL + ':first');\n }\n if (prev && prev.length) {\n this.current(prev);\n return true;\n }\n },\n _handleEnd: function (current, ctrl) {\n var row = current.parent();\n var rowContainer = row.parent();\n var isInLockedTable = this.lockedTable && this.lockedTable.children('tbody')[0] === rowContainer[0];\n var isInBody = rowContainer[0] === this.tbody[0];\n var next;\n if (ctrl) {\n next = this.table.find(LASTITEMROW + '>' + NAVCELL + ':last');\n } else if (isInBody || isInLockedTable) {\n if (!isInBody && this.lockedTable) {\n row = this._relatedRow(row);\n }\n next = row.children(NAVCELL + ':last');\n }\n if (next && next.length) {\n this.current(next);\n return true;\n }\n },\n _handlePageDown: function () {\n var that = this;\n if (!that._isPageable()) {\n return false;\n }\n that.dataSource._restorePageSizeAfterAddChild();\n that.dataSource.page(that.dataSource.page() + 1);\n return true;\n },\n _handlePageUp: function () {\n var that = this;\n if (!that._isPageable()) {\n return false;\n }\n that.dataSource._restorePageSizeAfterAddChild();\n that.dataSource.page(that.dataSource.page() - 1);\n return true;\n },\n _handleEscKey: function (current, currentTable) {\n var active = kendo._activeElement();\n var currentIndex;\n var that = this;\n var row;\n var rowIndex;\n var cellIndex;\n var tbody;\n if (!current || !current.parent().hasClass('k-grid-edit-row')) {\n if (current.has(active).length) {\n focusTable(currentTable, true);\n return true;\n }\n return false;\n }\n if (that._isIncellEditable()) {\n row = current.parent();\n cellIndex = current.index();\n rowIndex = row.index();\n tbody = row.closest('tbody');\n that.closeCell(true);\n that._setCurrent(tbody.children().eq(rowIndex).children().eq(cellIndex));\n } else {\n currentIndex = $(current).parent().index();\n if (active) {\n active.blur();\n }\n this.cancelRow();\n if (currentIndex >= 0) {\n this.current(this.items().eq(currentIndex).children(NAVCELL).first());\n }\n }\n focusTable(currentTable, true);\n return true;\n },\n _handleEnterKey: function (current, currentTable, target) {\n var editable = this.options.editable;\n var container = target.closest('[role=gridcell]');\n var focusable;\n if (!target.is('table') && !$.contains(current[0], target[0])) {\n current = container;\n }\n if (current.is('th')) {\n current.find('.k-link').click();\n return true;\n }\n focusable = current.find(':kendoFocusable:first');\n if (focusable[0] && current.hasClass('k-state-focused')) {\n focusable.focus();\n return true;\n }\n if (editable && !target.is(':button,.k-button,textarea')) {\n if (!container[0]) {\n container = current;\n }\n this._handleEditing(container, false, currentTable);\n return true;\n }\n return false;\n },\n _handleTabKey: function (current, currentTable, shiftKey) {\n var that = this;\n var incellEditing = that.options.editable && that._isIncellEditable();\n var cell;\n if (!incellEditing || current.is('th')) {\n return false;\n }\n cell = $(activeElement()).closest(DOT + classNames.editCell);\n if (cell[0] && cell[0] !== current[0]) {\n current = cell;\n }\n cell = that._tabNext(current, currentTable, shiftKey);\n if (cell.length) {\n that._handleEditing(current, cell, cell.closest(TABLE));\n return true;\n } else {\n that._preventPageSizeRestore = false;\n }\n return false;\n },\n _tabNext: function (current, currentTable, back) {\n var that = this;\n var switchRow = true;\n var next = back ? current.prevAll(DATA_CELL + ':first') : current.nextAll(':visible:first');\n if (!next.length) {\n next = current.parent();\n if (that.lockedTable) {\n switchRow = back && currentTable == that.lockedTable[0] || !back && currentTable == that.table[0];\n next = that._relatedRow(next);\n }\n if (switchRow) {\n next = next[back ? 'prevAll' : 'nextAll']('tr:not(.k-grouping-row):not(.k-detail-row):visible:first');\n }\n next = next.children(DATA_CELL + (back ? ':last' : ':first'));\n that.dataSource._restorePageSizeAfterAddChild();\n }\n return next;\n },\n _handleEditing: function (current, next, table) {\n var that = this, active = $(kendo._activeElement()), isIE = browser.msie, editContainer, focusable, isEdited;\n var editable = that.options.editable && that.options.editable.update !== false;\n var incellEditing = that._isIncellEditable();\n var nextFocusableCellRowIndex = $(next).parents('tr').index();\n var nextFocusableCellIndex = $(next).index();\n var currentFocusedCellRowIndex = $(current).parents('tr').index();\n var currentFocusedCellIndex = current.index();\n var editedCell;\n table = $(table);\n if (incellEditing) {\n isEdited = current.hasClass(classNames.editCell);\n } else {\n isEdited = current.parent().hasClass('k-grid-edit-row');\n }\n if (that.editor) {\n editContainer = that.editor.wrapper;\n if (editContainer && $.contains(editContainer[0], active[0])) {\n if (browser.opera) {\n active.blur().change().triggerHandler('blur');\n } else {\n active.blur();\n if (isIE) {\n active.blur();\n }\n }\n }\n if (!that.editor) {\n focusTable(table);\n return;\n }\n if (that.editor.end()) {\n if (incellEditing) {\n that._preventPageSizeRestore = true;\n that.closeCell();\n that._preventPageSizeRestore = false;\n if ($(that.table).add(that.lockedTable).find(DOT + classNames.editCell).length === 0) {\n that.current(table.find('tbody').children().eq(currentFocusedCellRowIndex).children().eq(currentFocusedCellIndex));\n }\n } else {\n that.saveRow();\n isEdited = true;\n }\n } else {\n if (incellEditing) {\n that.current(editContainer);\n } else {\n that.current(editContainer.children().filter(NAVCELL).first());\n }\n focusable = editContainer.find(':kendoFocusable:first')[0];\n if (focusable) {\n focusable.focus();\n }\n return;\n }\n }\n next = $(next).length && table.find(next).length === 0 ? table.find('tbody').children().eq(nextFocusableCellRowIndex).children().eq(nextFocusableCellIndex) : next;\n if (next) {\n that.current(next);\n }\n focusTable(table, true);\n if (!editable) {\n return;\n }\n if (!isEdited && !next || next) {\n var currentIndex = that.current().index();\n if (incellEditing) {\n that.editCell(that.current());\n editedCell = $(that.table).add(that.lockedTable).find(DOT + classNames.editCell)[0];\n if (editedCell) {\n that._current = $(editedCell);\n } else {\n that.current(that._findCurrentCell());\n }\n } else {\n that.editRow(that.current().parent());\n that.current(that.editor.wrapper.children().eq(currentIndex));\n that.current().removeClass('k-state-focused');\n }\n } else {\n that.dataSource._restorePageSizeAfterAddChild();\n }\n },\n _moveRight: function (current) {\n var next = current.nextAll(NAVCELL).first();\n var row = current.parent();\n var rowIndex = row.index();\n if (current.hasClass('k-header') || row.is('.k-filter-row')) {\n next = current.nextAll(NAVHEADER).first();\n if (!next[0] && this.lockedTable && current.closest('table')[0] === this.lockedHeader.find('table')[0]) {\n next = this.thead.find('tr:eq(' + rowIndex + ') ' + NAVHEADER + ':first');\n }\n }\n if (!next[0] && this.lockedTable && current.closest('table')[0] === this.lockedTable[0]) {\n next = this._relatedRow(row).children(NAVCELL).first();\n }\n if (next[0] && next[0] !== current[0]) {\n focusTable(next.closest('table'), true);\n }\n this.current(next);\n return true;\n },\n _moveLeft: function (current) {\n var prev = current.prevAll(NAVCELL).first();\n var row = current.parent();\n var rowIndex = row.index();\n if (current.hasClass('k-header') || row.is('.k-filter-row')) {\n prev = current.prevAll(NAVHEADER).first();\n if (!prev[0] && this.lockedTable && current.closest('table')[0] === this.thead.parent()[0]) {\n prev = this.lockedHeader.find('>table>thead>tr:eq(' + rowIndex + ')>' + NAVHEADER + ':last');\n }\n }\n if (!prev[0] && this.lockedTable && current.closest('table')[0] === this.table[0]) {\n prev = this._relatedRow(row).children(NAVCELL).last();\n }\n if (prev[0] && prev[0] !== current[0]) {\n focusTable(prev.closest('table'), true);\n }\n this.current(prev);\n return true;\n },\n _moveUp: function (current, shiftKey) {\n var container = current.parent().parent();\n var prev;\n if (shiftKey) {\n prev = current.parent();\n prev = prev.prevAll(ITEMROW + ':first');\n prev = current.parent().is(ITEMROW) ? prev.children().eq(current.index()) : prev.children(DATA_CELL + ':last');\n } else {\n prev = this._prevVerticalCell(container, current);\n if (!prev[0]) {\n this._lastCellIndex = 0;\n container = this._verticalContainer(container, true);\n prev = this._prevVerticalCell(container, current);\n if (prev[0]) {\n focusTable(container.parent(), true);\n }\n }\n }\n var tmp = this._lastCellIndex || 0;\n this.current(prev);\n this._lastCellIndex = tmp;\n return true;\n },\n _moveDown: function (current, shiftKey) {\n var container = current.parent().parent();\n var next;\n if (shiftKey) {\n next = current.parent();\n next = next.nextAll(ITEMROW + ':first');\n next = current.parent().is(ITEMROW) ? next.children().eq(current.index()) : next.children(DATA_CELL + ':first');\n } else {\n next = this._nextVerticalCell(container, current);\n if (!next[0]) {\n this._lastCellIndex = 0;\n container = this._verticalContainer(container);\n next = this._nextVerticalCell(container, current);\n if (next[0]) {\n focusTable(container.parent(), true);\n }\n }\n }\n var tmp = this._lastCellIndex || 0;\n this.current(next);\n this._lastCellIndex = tmp;\n return true;\n },\n _tableClick: function (e) {\n var currentTarget = $(e.currentTarget), isHeader = currentTarget.is('th'), table = this.table.add(this.lockedTable), headerTable = this.thead.parent().add($('>table', this.lockedHeader)), isInput = isInputElement(e.target), currentTable = currentTarget.closest('table')[0];\n if (kendo.support.touch) {\n return;\n }\n if (currentTable !== table[0] && currentTable !== table[1] && currentTable !== headerTable[0] && currentTable !== headerTable[1]) {\n return;\n }\n if (this.options.navigatable) {\n this.current(currentTarget);\n }\n if (isHeader || !isInput) {\n setTimeout(function () {\n if (!isInputElement(kendo._activeElement()) || !$.contains(currentTable, kendo._activeElement())) {\n focusTable(currentTable, true);\n }\n });\n }\n if (isHeader) {\n e.preventDefault();\n }\n },\n _setTabIndex: function (table) {\n this._navigatableTables.attr(TABINDEX, -1);\n table.attr(TABINDEX, 0);\n },\n _tableFocus: function (e) {\n var current = this.current();\n var table = $(e.currentTarget);\n if (current && current.is(':visible')) {\n current.addClass(classNames.focused);\n } else {\n this.current(table.find(FIRSTNAVITEM));\n }\n this._setTabIndex(table);\n },\n _tableBlur: function () {\n var current = this.current();\n if (current) {\n current.removeClass(classNames.focused);\n }\n },\n _attachEvents: function () {\n var that = this;\n var retryButton = DOT + classNames.retry;\n that._userEvents = new kendo.UserEvents(that.element, {\n press: proxy(that._onPress, that),\n allowSelection: true\n });\n this.element.on(CLICK + NS, retryButton, this._dataSourceFetchProxy).on(CLICK + NS, '.k-button[data-command]', proxy(this._commandClick, this)).on(INPUT + NS, '.k-grid-search input', proxy(this._search, this));\n this._attachCellEditingEventHandlers();\n },\n _onPress: function (e) {\n var that = this;\n var icons = DOT + classNames.iconCollapse + ', .' + classNames.iconExpand + ', .' + classNames.refresh;\n if ($(e.event.target).is(icons)) {\n that._toggleChildren.call(that, e.event);\n }\n },\n _attachCellEditingEventHandlers: function () {\n var that = this;\n var editable = that.options.editable;\n var selectable = that.selectable && that.selectable.options.multiple;\n var closeCell = function (e) {\n var target = activeElement();\n var editor = that.editor || {};\n var cell = editor.element;\n if (cell && !$.contains(cell[0], target) && cell[0] !== target && !$(target).closest('.k-animation-container').length) {\n if (editor.end()) {\n if (!e.relatedTarget && that._isPageable() && !isUndefined(that.dataSource._addChildPageSize)) {\n that._preventPageSizeRestore = false;\n }\n that.closeCell();\n }\n }\n that._preventPageSizeRestore = false;\n };\n if (that._isIncellEditable() && editable.update !== false) {\n that.wrapper.on(CLICK + NS, 'tr:not(.k-grouping-row) > td', function (e) {\n var td = $(this), isLockedCell = that.lockedTable && td.closest('table')[0] === that.lockedTable[0];\n if (td.hasClass(classNames.editCell) || td.has('a.k-grid-delete').length || td.has('button.k-grid-delete').length || td.closest('tbody')[0] !== that.tbody[0] && !isLockedCell || $(e.target).is(':input') || $(e.target).hasClass(classNames.iconExpand) || $(e.target).hasClass(classNames.iconCollapse)) {\n if (!that.editor) {\n that.dataSource._restorePageSizeAfterAddChild();\n }\n that._preventPageSizeRestore = false;\n return;\n }\n if (that.editor) {\n if (that.editor.end()) {\n if (selectable) {\n $(activeElement()).blur();\n }\n that.closeCell();\n that.editCell(td);\n }\n } else {\n that.editCell(td);\n }\n }).on('mousedown' + NS, 'tr:not(.k-grouping-row) > td', function (e) {\n if (that.editor && that._isPageable() && !isUndefined(that.dataSource._addChildPageSize)) {\n that._preventPageSizeRestore = $(e.target).parents(DOT + classNames.editRow).length > 0;\n } else {\n that._preventPageSizeRestore = false;\n }\n }).on('focusin' + NS, function () {\n if (!$.contains(this, activeElement())) {\n clearTimeout(that._closeCellTimeout);\n that._closeCellTimeout = null;\n }\n }).on('focusout' + NS, function (e) {\n that._closeCellTimeout = setTimeout(function () {\n closeCell(e);\n }, 1);\n });\n }\n },\n _commandByName: function (name) {\n var columns = this.columns;\n var toolbar = $.isArray(this.options.toolbar) ? this.options.toolbar : [];\n var i, j, commands, currentName;\n name = name.toLowerCase();\n if (defaultCommands[name]) {\n return defaultCommands[name];\n }\n for (i = 0; i < columns.length; i++) {\n commands = columns[i].command;\n if (commands) {\n for (j = 0; j < commands.length; j++) {\n currentName = commands[j].name;\n if (!currentName) {\n continue;\n }\n if (currentName.toLowerCase() == name) {\n return commands[j];\n }\n }\n }\n }\n for (i = 0; i < toolbar.length; i++) {\n currentName = toolbar[i].name;\n if (!currentName) {\n continue;\n }\n if (currentName.toLowerCase() == name) {\n return toolbar[i];\n }\n }\n },\n _commandClick: function (e) {\n var button = $(e.currentTarget);\n var commandName = button.attr('data-command');\n var command = this._commandByName(commandName);\n var row = button.parentsUntil(this.wrapper, 'tr');\n row = row.length ? row : undefined;\n if (command) {\n if (command.methodName) {\n this[command.methodName](row);\n } else if (command.click) {\n command.click.call(this, e);\n }\n e.preventDefault();\n }\n },\n _search: function (e) {\n var that = this;\n var input = e.currentTarget;\n clearTimeout(that._searchTimeOut);\n that._searchTimeOut = setTimeout(function () {\n that._searchTimeOut = null;\n var options = that.options;\n var searchFields = options.search ? options.search.fields : null;\n var expression = {\n filters: [],\n logic: 'or'\n };\n var value = input.value;\n if (!searchFields) {\n searchFields = getColumnsFields(options.columns);\n }\n if (value) {\n for (var i = 0; i < searchFields.length; i++) {\n expression.filters.push({\n field: searchFields[i],\n operator: 'contains',\n value: value\n });\n }\n } else {\n expression = {};\n }\n that.dataSource.filter(expression);\n }, 300);\n },\n _ensureExpandableColumn: function () {\n if (this._autoExpandable) {\n delete this._autoExpandable.expandable;\n }\n var visibleColumns = grep(this.columns, not(is('hidden')));\n visibleColumns = grep(visibleColumns, not(is('command')));\n visibleColumns = grep(visibleColumns, not(is('selectable')));\n var expandableColumns = grep(visibleColumns, is('expandable'));\n if (this.columns.length && !expandableColumns.length) {\n this._autoExpandable = visibleColumns[0];\n visibleColumns[0].expandable = true;\n }\n },\n _columns: function () {\n var that = this;\n var columns = this.options.columns || [];\n this.columns = map(columns, function (column) {\n column = typeof column === 'string' ? { field: column } : column;\n return extend({ encoded: true }, column);\n });\n var lockedCols = lockedColumns(columns);\n if (lockedCols.length > 0) {\n if (this.options.rowTemplate || this.options.altRowTemplate) {\n throw new Error('Having both row template and locked columns is not supported');\n }\n this._hasLockedColumns = true;\n this.columns = lockedCols.concat(nonLockedColumns(this.columns));\n }\n this.columns = normalizeColumns(this.columns);\n this._ensureExpandableColumn();\n this._columnTemplates();\n this._columnAttributes();\n if ($.grep(leafColumns(that.columns), function (col) {\n if (col.selectable) {\n that._includeChildren = col.includeChildren;\n }\n return col.selectable;\n }).length) {\n that._checkBoxSelection = true;\n that.element.on(CLICK + NS, 'tbody > tr ' + CHECKBOXINPUT, proxy(that._checkboxClick, that));\n that.element.on(CLICK + NS, 'thead > tr ' + CHECKBOXINPUT, proxy(that._headerCheckboxClick, that));\n }\n },\n _columnTemplates: function () {\n var idx, length, column;\n var columns = leafColumns(this.columns);\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.template) {\n column.template = kendo.template(column.template);\n }\n if (this._isIncellEditable()) {\n column.dirtyCellTemplate = this._createDirtyColumnTemplate(column);\n column.dirtyIndicatorTemplate = this._createIndicatorTemplate(column);\n }\n if (column.headerTemplate) {\n column.headerTemplate = kendo.template(column.headerTemplate);\n }\n if (column.footerTemplate) {\n column.footerTemplate = kendo.template(column.footerTemplate);\n }\n }\n },\n _columnAttributes: function () {\n var idx, length;\n var columns = this.columns;\n function convertStyle(attr) {\n var properties, i, declaration;\n if (attr && attr.style && attr.style.split) {\n properties = attr.style.split(';');\n attr.style = {};\n for (i = 0; i < properties.length; i++) {\n declaration = properties[i].split(':');\n var name = kendo.trim(declaration[0]);\n if (name) {\n attr.style[$.camelCase(name)] = kendo.trim(declaration[1]);\n }\n }\n }\n }\n for (idx = 0, length = columns.length; idx < length; idx++) {\n convertStyle(columns[idx].attributes);\n convertStyle(columns[idx].headerAttributes);\n }\n },\n _clearSortClasses: function () {\n var that = this;\n if (that.content) {\n that.content.find('col:not(.k-group-col):not(.k-hierarchy-col)').removeClass('k-sorted');\n }\n if (that.lockedContent) {\n that.lockedContent.find('col:not(.k-group-col):not(.k-hierarchy-col)').removeClass('k-sorted');\n }\n },\n _layout: function () {\n var columns = this.columns;\n var element = this.element;\n var layout = '';\n this.wrapper = element.addClass(classNames.wrapper);\n layout = '
';\n if (this._hasLockedColumns) {\n layout += '
' + '' + '' + '' + '
' + '
';\n }\n layout += '
' + '' + '' + '' + '
' + '
' + '
';\n if (this._hasLockedColumns) {\n layout += '
' + '' + '' + '' + '
' + '
';\n }\n layout += '
' + '' + '' + '' + '
' + '
';\n if (!this.options.scrollable) {\n layout = '' + '' + '' + '' + '
';\n }\n if (this.options.toolbar) {\n layout = '
' + layout;\n }\n element.append(kendo.template(layout)(classNames) + '
');\n this.toolbar = element.find(DOT + classNames.gridToolbar);\n var header = element.find(DOT + classNames.gridHeader).find('thead').addBack().filter('thead');\n this.thead = header.last();\n if (this.options.scrollable) {\n var rtl = kendo.support.isRtl(element);\n element.find('div.' + classNames.gridHeader).css(rtl ? 'padding-left' : 'padding-right', kendo.support.scrollbar());\n }\n var content = element.find(DOT + classNames.gridContentWrap);\n if (!content.length) {\n content = element;\n } else {\n this.content = content;\n }\n this.table = content.find('>table');\n this.tbody = this.table.find('>tbody');\n if (this._hasLockedColumns) {\n this.lockedHeader = header.first().closest('.k-grid-header-locked');\n this.lockedContent = element.find('.k-grid-content-locked');\n this.lockedTable = this.lockedContent.children();\n }\n this._initVirtualTrees();\n this._renderCols();\n this._renderHeader();\n this.angular('compile', function () {\n return {\n elements: header.find('th.k-header').get(),\n data: map(columns, function (col) {\n return { column: col };\n })\n };\n });\n },\n _initVirtualTrees: function () {\n this._headerColsTree = new kendoDom.Tree(this.thead.prev()[0]);\n this._contentColsTree = new kendoDom.Tree(this.tbody.prev()[0]);\n this._headerTree = new kendoDom.Tree(this.thead[0]);\n this._contentTree = new kendoDom.Tree(this.tbody[0]);\n this._statusTree = new kendoDom.Tree(this.element.children('.k-status')[0]);\n if (this.lockedHeader) {\n this._lockedHeaderColsTree = new kendoDom.Tree(this.lockedHeader.find('colgroup')[0]);\n this._lockedContentColsTree = new kendoDom.Tree(this.lockedTable.find('>colgroup')[0]);\n this._lockedHeaderTree = new kendoDom.Tree(this.lockedHeader.find('thead')[0]);\n this._lockedContentTree = new kendoDom.Tree(this.lockedTable.find('>tbody')[0]);\n }\n },\n _toolbar: function () {\n var options = this.options.toolbar;\n var toolbar = this.toolbar;\n if (!options) {\n return;\n }\n if ($.isArray(options)) {\n var buttons = this._buildCommands(options);\n new kendoDom.Tree(toolbar[0]).render(buttons);\n } else {\n toolbar.append(kendo.template(options)({}));\n }\n this.angular('compile', function () {\n return { elements: toolbar.get() };\n });\n },\n _lockedColumns: function () {\n return grep(this.columns, is('locked'));\n },\n _nonLockedColumns: function () {\n return grep(this.columns, not(is('locked')));\n },\n _templateColumns: function () {\n return grep(this.columns, is('template'));\n },\n _flushCache: function () {\n if (this.options.$angular && this._templateColumns().length) {\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n }\n },\n _render: function (options) {\n var that = this;\n options = options || {};\n options = that._renderOptions(options);\n var messages = this.options.messages;\n var pageable = that._isPageable();\n var dataSource = that.dataSource;\n var maps = {\n children: options.filteredChildrenMap || options.childrenMap,\n ids: options.idsMap\n };\n var dataMaps = pageable ? maps && maps.children && maps.ids ? maps : dataSource._initDataMaps(dataSource._getData()) : {};\n var childrenMap = dataMaps.children;\n var idsMap = dataMaps.ids;\n options.childrenMap = childrenMap;\n options.idsMap = idsMap;\n var data = that._dataToRender(options);\n var level = that._renderedModelLevel(data[0], options);\n var uidAttr = kendo.attr('uid');\n var hasFooterTemplate;\n var selected = this.select().removeClass('k-state-selected').map(function (_, row) {\n return $(row).attr(uidAttr);\n });\n var viewChildrenMap;\n this._absoluteIndex = 0;\n this._angularItems('cleanup');\n this._angularFooters('cleanup');\n this._flushCache();\n that._clearRenderMap();\n if (options.error) {\n this._showStatus(kendo.template('#: messages.requestFailed # ' + '')({\n buttonClass: [\n classNames.button,\n classNames.retry\n ].join(' '),\n messages: messages\n }));\n } else if (!data.length) {\n this._hideStatus();\n this._showNoRecordsTemplate();\n } else {\n if (pageable) {\n viewChildrenMap = that._viewChildrenMap(options);\n }\n this._hideStatus();\n hasFooterTemplate = this._hasFooterTemplate();\n this._contentTree.render(this._trs({\n columns: leafColumns(nonLockedColumns(this.columns)),\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n aggregates: options.aggregates,\n selected: selected,\n data: data,\n childrenMap: childrenMap,\n viewChildrenMap: viewChildrenMap,\n hasFooterTemplate: hasFooterTemplate,\n visible: true,\n level: 0\n }));\n if (this._hasLockedColumns) {\n this._absoluteIndex = 0;\n this._lockedContentTree.render(this._trs({\n columns: leafColumns(lockedColumns(this.columns)),\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n aggregates: options.aggregates,\n selected: selected,\n data: data,\n childrenMap: childrenMap,\n viewChildrenMap: viewChildrenMap,\n hasFooterTemplate: hasFooterTemplate,\n visible: true,\n level: level\n }));\n }\n }\n if (this._touchScroller) {\n this._touchScroller.contentResized();\n }\n this._muteAngularRebind(function () {\n this._angularItems('compile');\n this._angularFooters('compile');\n });\n this.items().filter(function () {\n return $.inArray($(this).attr(uidAttr), selected) >= 0;\n }).addClass('k-state-selected');\n this._syncLockedContentHeight();\n that._togglePagerVisibility();\n that._setExpanderElement();\n },\n _setExpanderElement: function () {\n var that = this, hiddenDivClass = 'k-grid-content-expander', hiddenDiv = '
', expander;\n if (that.options.scrollable && that.wrapper.is(':visible')) {\n expander = that.table.parent().children('.' + hiddenDivClass);\n if (!that.dataSource || !that.dataSource.view().length) {\n if (!expander[0]) {\n expander = $(hiddenDiv).appendTo(that.table.parent());\n }\n if (that.thead) {\n expander.width(that.thead.width());\n }\n } else if (expander[0]) {\n expander.remove();\n }\n }\n },\n _renderProgress: function (toggle) {\n kendo.ui.progress(this.wrapper, toggle);\n },\n _renderOptions: function (options) {\n options = options || {};\n var that = this;\n var dataMaps = that.dataSource._getDataMaps();\n var filter = that.dataSource.filter();\n if (that._isPageable()) {\n options.childrenMap = dataMaps.children;\n options.idsMap = dataMaps.ids;\n if (filter) {\n options.filteredChildrenMap = dataMaps.filteredChildren;\n }\n }\n return options;\n },\n _renderedModelLevel: function (model, options) {\n return !this._isPageable() ? 0 : this.dataSource._pageableModelLevel(model, options);\n },\n _viewChildrenMap: function (options) {\n options = options || {};\n var that = this;\n var dataSource = that.dataSource;\n var viewChildrenMap = dataSource.childrenMap(dataSource.view());\n var idField = dataSource._modelIdField();\n var parentsNotInView = dataSource._parentNodesNotInView();\n var parentNotInView;\n var parentNotInViewId;\n var parents;\n var parent;\n var parentId;\n var child;\n var childId;\n var parentsCopy;\n that._clearRenderMap();\n for (var i = 0; i < parentsNotInView.length; i++) {\n parentNotInView = parentsNotInView[i];\n parentNotInViewId = parentNotInView[idField];\n that._markNodeAsNonRenderable(parentNotInViewId);\n viewChildrenMap[parentNotInViewId] = viewChildrenMap[parentNotInViewId] || [];\n parents = dataSource._parentNodes(parentNotInView);\n parentsCopy = parents.slice();\n parentsCopy.push(parentNotInView);\n for (var parentIndex = 0; parentIndex < parentsCopy.length - 1; parentIndex++) {\n parent = parentsCopy[parentIndex];\n parentId = parent[idField];\n that._markNodeAsNonRenderable(parentId);\n viewChildrenMap[parentId] = viewChildrenMap[parentId] || [];\n child = parentsCopy[parentIndex + 1];\n childId = child[idField];\n that._markNodeAsNonRenderable(childId);\n viewChildrenMap[childId] = viewChildrenMap[childId] || [];\n if (viewChildrenMap[parentId].indexOf(child) === -1) {\n viewChildrenMap[parentId].unshift(child);\n }\n }\n }\n return viewChildrenMap;\n },\n _clearRenderMap: function () {\n this._skipRenderingMap = {};\n },\n _dataToRender: function (options) {\n var that = this;\n if (that._isPageable()) {\n return that.dataSource._pageableRootNodes(options);\n }\n return that.dataSource.rootNodes();\n },\n _markNodeAsNonRenderable: function (nodeId) {\n this._skipRenderingMap[nodeId] = true;\n },\n _adjustRowsHeight: function (table1, table2) {\n if (!this._hasLockedColumns) {\n return;\n }\n var rows = table1[0].rows;\n var length = rows.length;\n var idx;\n var rows2 = table2[0].rows;\n var containers = table1.add(table2);\n var containersLength = containers.length;\n var heights = [];\n for (idx = 0; idx < length; idx++) {\n if (!rows2[idx]) {\n break;\n }\n if (rows[idx].style.height) {\n rows[idx].style.height = rows2[idx].style.height = '';\n }\n }\n for (idx = 0; idx < length; idx++) {\n if (!rows2[idx]) {\n break;\n }\n var offsetHeight1 = rows[idx].offsetHeight;\n var offsetHeight2 = rows2[idx].offsetHeight;\n var height = 0;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1;\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2;\n }\n heights.push(height);\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = 'none';\n }\n for (idx = 0; idx < length; idx++) {\n if (heights[idx]) {\n rows[idx].style.height = rows2[idx].style.height = heights[idx] + 1 + 'px';\n }\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = '';\n }\n },\n _ths: function (columns, rowSpan) {\n var ths = [];\n var column, title, children, cellClasses, attr, headerContent;\n var index;\n var leafs;\n for (var i = 0, length = columns.length; i < length; i++) {\n column = columns[i];\n children = [];\n cellClasses = [classNames.header];\n if (column.selectable) {\n leafs = leafColumns(columns);\n index = inArray(column, leafs);\n attr = {\n scope: 'col',\n role: 'columnheader',\n className: cellClasses.join(' ')\n };\n if (column.headerTemplate) {\n title = column.headerTemplate({});\n }\n title = column.headerTemplate ? title : kendo.template(SELECTCOLUMNHEADERTMPL)({});\n if (rowSpan && !column.colSpan) {\n attr.rowSpan = rowSpan;\n }\n if (index > -1) {\n attr[kendo.attr('index')] = index;\n }\n children.push(kendoHtmlElement(title));\n ths.push(kendoDomElement('th', $.extend(true, {}, attr, column.headerAttributes), children));\n continue;\n }\n if (column.headerTemplate) {\n title = column.headerTemplate({});\n } else {\n title = column.title || column.field || '';\n }\n if (column.headerTemplate) {\n headerContent = kendoHtmlElement(title);\n } else {\n headerContent = kendoTextElement(title);\n }\n if (column.sortable) {\n children.push(kendoDomElement('a', {\n href: '#',\n className: classNames.link\n }, [headerContent]));\n } else {\n children.push(headerContent);\n }\n attr = {\n 'data-field': column.field,\n 'data-title': column.title,\n 'style': column.hidden === true ? { 'display': 'none' } : {},\n className: cellClasses.join(' '),\n 'role': 'columnheader'\n };\n if (!column.columns) {\n attr.rowSpan = rowSpan ? rowSpan : 1;\n }\n if (column.headerAttributes) {\n if (column.headerAttributes.colSpan === 1) {\n delete column.headerAttributes.colSpan;\n }\n if (column.headerAttributes['class']) {\n attr.className += ' ' + column.headerAttributes['class'];\n delete column.headerAttributes['class'];\n }\n }\n if (column['data-index'] > -1) {\n attr['data-index'] = column['data-index'];\n }\n attr = extend(true, {}, attr, column.headerAttributes);\n ths.push(kendoDomElement('th', attr, children));\n }\n return ths;\n },\n _cols: function (columns) {\n var cols = [];\n var width, attr;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].hidden === true) {\n continue;\n }\n width = columns[i].width;\n attr = {};\n if (width && parseInt(width, 10) !== 0) {\n attr.style = { width: typeof width === 'string' ? width : width + 'px' };\n }\n cols.push(kendoDomElement('col', attr));\n }\n return cols;\n },\n _clearColsCache: function () {\n this._headerColsTree.render([]);\n if (this.options.scrollable) {\n this._contentColsTree.render([]);\n }\n if (this._hasLockedColumns) {\n this._lockedHeaderColsTree.render([]);\n this._lockedContentColsTree.render([]);\n }\n },\n _renderCols: function () {\n var columns = nonLockedColumns(this.columns);\n this._headerColsTree.render(this._cols(leafColumns(columns)));\n if (this.options.scrollable) {\n this._contentColsTree.render(this._cols(leafColumns(columns)));\n }\n if (this._hasLockedColumns) {\n columns = lockedColumns(this.columns);\n this._lockedHeaderColsTree.render(this._cols(leafColumns(columns)));\n this._lockedContentColsTree.render(this._cols(leafColumns(columns)));\n }\n },\n _retrieveFirstColumn: function (columns, rows) {\n var result = $();\n if (rows.length && columns[0]) {\n var column = columns[0];\n while (column.columns && column.columns.length) {\n column = column.columns[0];\n rows = rows.filter(':not(:first())');\n }\n result = result.add(rows);\n }\n return result;\n },\n _updateFirstColumnClass: function () {\n var that = this;\n var columns = that.columns || [];\n var tr = that.thead.find('>tr:not(:first, .k-filter-row)');\n var rows;\n columns = nonLockedColumns(columns);\n rows = that._retrieveFirstColumn(columns, tr);\n if (that.lockedHeader) {\n tr = that.lockedHeader.find('thead>tr:not(.k-filter-row):not(:first)');\n columns = lockedColumns(that.columns);\n rows = rows.add(that._retrieveFirstColumn(columns, tr));\n }\n rows.each(function () {\n var ths = $(this).find('th');\n ths.removeClass('k-first');\n ths.eq(0).addClass('k-first');\n });\n },\n _updateRowSpans: function (rows) {\n for (var i = rows.length - 1; i >= 0; i--) {\n var included = visibleChildColumns(rows[i].cells).length > 0;\n if (included) {\n rows[i].rowSpan = rows.length - i;\n }\n }\n },\n _setColumnDataIndexes: function (columns) {\n for (var i = 0; i < columns.length; i++) {\n columns[i]['data-index'] = i;\n }\n },\n _updateColumnCellIndex: function () {\n var header;\n var offset = 0;\n if (this.lockedHeader) {\n header = this.lockedHeader.find('thead');\n offset = updateCellIndex(header, lockedColumns(this.columns));\n }\n updateCellIndex(this.thead, nonLockedColumns(this.columns), offset);\n },\n _setParentsVisibility: function (column, visible) {\n var columns = this.columns;\n var idx;\n var parents = [];\n var parent;\n var predicate = visible ? function (p) {\n return visibleColumns(p.columns).length && p.hidden;\n } : function (p) {\n return !visibleColumns(p.columns).length && !p.hidden;\n };\n if (columnParents(column, columns, parents) && parents.length) {\n for (idx = parents.length - 1; idx >= 0; idx--) {\n parent = parents[idx];\n if (predicate(parent)) {\n parent.hidden = !visible;\n }\n }\n }\n },\n _prepareColumns: function (rows, columns, parentCell, parentRow, parentColumn) {\n var row = parentRow || rows[rows.length - 1];\n var childRow = rows[row.index + 1];\n var totalColSpan = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n var cell = $.extend({}, columns[idx], { headerAttributes: columns[idx].headerAttributes || {} });\n row.cells.push(cell);\n if (columns[idx].columns && columns[idx].columns.length) {\n if (!childRow) {\n childRow = {\n rowSpan: 0,\n cells: [],\n index: rows.length\n };\n rows.push(childRow);\n }\n if (columns[idx].columns.length) {\n cell.headerAttributes.colSpan = visibleChildColumns(columns[idx].columns).length || 1;\n cell.headerAttributes['data-colspan'] = leafColumns(columns[idx].columns).length;\n }\n this._prepareColumns(rows, columns[idx].columns, cell, childRow, columns[idx]);\n if (!cell.hidden) {\n totalColSpan += cell.headerAttributes.colSpan - 1;\n }\n row.rowSpan = rows.length - row.index;\n }\n columns[idx].rowIndex = row.index;\n if (parentColumn) {\n columns[idx].parentColumn = parentColumn;\n }\n columns[idx].cellIndex = row.cells.length - 1;\n }\n if (parentCell) {\n parentCell.headerAttributes.colSpan += totalColSpan;\n }\n },\n _renderHeaderTree: function (tree, columns, hasMultiColumnHeaders) {\n var idx;\n var rows = [];\n var rowsToRender = [];\n var filterThs = [];\n if (hasMultiColumnHeaders) {\n rows = [{\n rowSpan: 1,\n cells: [],\n index: 0\n }];\n this._prepareColumns(rows, columns);\n this._updateRowSpans(rows);\n for (idx = 0; idx < rows.length; idx++) {\n rowsToRender.push(kendoDomElement('tr', { 'role': 'row' }, this._ths(rows[idx].cells, rows[idx].rowSpan)));\n }\n } else {\n rowsToRender.push(kendoDomElement('tr', { 'role': 'row' }, this._ths(columns)));\n }\n if (this._hasFilterRow()) {\n this._filterThs(columns, filterThs);\n rowsToRender.push(kendoDomElement('tr', { 'class': 'k-filter-row' }, filterThs));\n }\n tree.render(rowsToRender);\n },\n _renderHeader: function () {\n var columns = nonLockedColumns(this.columns);\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n this._setColumnDataIndexes(leafColumns(this.columns));\n this._renderHeaderTree(this._headerTree, columns, hasMultiColumnHeaders);\n if (this._hasLockedColumns) {\n columns = lockedColumns(this.columns);\n this._renderHeaderTree(this._lockedHeaderTree, columns, hasMultiColumnHeaders);\n this._applyLockedContainersWidth();\n this._syncLockedHeaderHeight();\n }\n this._updateFirstColumnClass();\n },\n _filterThs: function (columns, ths) {\n var column;\n var attr;\n var uidAttr = kendo.attr('uid');\n for (var i = 0, length = columns.length; i < length; i++) {\n column = columns[i];\n if (column.columns) {\n this._filterThs(column.columns, ths);\n }\n if (column.columns && column.columns.length) {\n continue;\n }\n attr = { 'style': column.hidden === true ? { 'display': 'none' } : {} };\n attr[uidAttr] = column.headerAttributes.id;\n ths.push(kendoDomElement('th', attr));\n }\n },\n _updateFilterThs: function (before, column, refColumn) {\n var columns = leafColumns([column]);\n var filterRowThs = $(this.lockedHeader).add(this.thead).find('tr.k-filter-row th');\n var refIndex;\n var currIndex;\n var uidAttr = kendo.attr('uid');\n function thIndex(ths, uid) {\n for (var i = 0; i < ths.length; i++) {\n if (ths.eq(i).attr(uidAttr) === uid) {\n return i;\n }\n }\n }\n for (var i = columns.length - 1; i >= 0; i--) {\n column = columns[i];\n currIndex = thIndex(filterRowThs, column.headerAttributes.id);\n refIndex = thIndex(filterRowThs, refColumn.headerAttributes.id);\n filterRowThs.eq(currIndex)[before ? 'insertBefore' : 'insertAfter'](filterRowThs.eq(refIndex));\n }\n },\n _applyLockedContainersWidth: function () {\n if (!this._hasLockedColumns) {\n return;\n }\n var lockedWidth = columnsWidth(this.lockedHeader.find('>table>colgroup>col'));\n var headerTable = this.thead.parent();\n var nonLockedWidth = columnsWidth(headerTable.find('>colgroup>col'));\n var wrapperWidth = this.wrapper[0].clientWidth;\n var scrollbar = kendo.support.scrollbar();\n if (lockedWidth >= wrapperWidth) {\n lockedWidth = wrapperWidth - 3 * scrollbar;\n }\n this.lockedHeader.add(this.lockedContent).width(lockedWidth);\n headerTable.add(this.table).width(nonLockedWidth);\n var width = wrapperWidth - lockedWidth;\n this.content.width(width - 1);\n headerTable.parent().width(width - scrollbar - 2);\n },\n _trs: function (options) {\n var that = this;\n var model, attr, className, hasChildren, childNodes, i, length;\n var modelId;\n var rows = [];\n var level = options.level;\n var data = options.data;\n var dataSource = this.dataSource;\n var aggregates = dataSource.aggregates() || {};\n var idField = dataSource._modelIdField();\n var parentIdField = dataSource._modelParentIdField();\n var columns = options.columns;\n var pageable = that._isPageable();\n var childrenMap = options.childrenMap || dataSource.childrenMap(dataSource._getData());\n for (i = 0, length = data.length; i < length; i++) {\n className = [];\n model = data[i];\n modelId = model[idField];\n childNodes = pageable ? childrenMap[modelId] : model.loaded() ? dataSource.childNodes(model) : [];\n hasChildren = childNodes && childNodes.length;\n attr = { 'role': 'row' };\n attr[kendo.attr('uid')] = model.uid;\n if (hasChildren) {\n attr['aria-expanded'] = !!model.expanded;\n }\n if (options.visible) {\n if (!pageable || pageable && !that._skipRenderingMap[modelId]) {\n if (this._absoluteIndex % 2 !== 0) {\n className.push(classNames.alt);\n }\n this._absoluteIndex++;\n }\n } else {\n attr.style = { display: 'none' };\n }\n if ($.inArray(model.uid, options.selected) >= 0) {\n className.push(classNames.selected);\n }\n if (hasChildren) {\n className.push(classNames.group);\n }\n if (model._edit) {\n className.push('k-grid-edit-row');\n }\n attr.className = className.join(' ');\n if (!that._skipRenderingMap[modelId]) {\n var row;\n var rowOptions = {\n model: model,\n attr: attr,\n level: pageable ? that._renderedModelLevel(model, options) : level,\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n hasChildren: hasChildren,\n visible: options.visible,\n isAlt: this._absoluteIndex % 2 === 0\n };\n if (that.options.rowTemplate) {\n row = this._trFromTemplate(rowOptions);\n } else {\n row = this._tds(rowOptions, columns, proxy(this._td, this));\n }\n rows.push(row);\n }\n if (hasChildren && (that.options.renderAllRows || !!model.expanded)) {\n if (pageable) {\n childNodes = (options.viewChildrenMap || {})[modelId] || [];\n }\n if (childNodes.length === 0) {\n continue;\n }\n rows = rows.concat(this._trs({\n columns: columns,\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n aggregates: aggregates,\n selected: options.selected,\n visible: pageable ? options.visible : options.visible && !!model.expanded,\n data: childNodes,\n childrenMap: options.childrenMap || childrenMap,\n hasFooterTemplate: options.hasFooterTemplate,\n viewChildrenMap: options.viewChildrenMap,\n level: level + 1\n }));\n }\n }\n if (options.hasFooterTemplate && model) {\n attr = {\n className: classNames.footerTemplate,\n 'data-parentId': model[parentIdField]\n };\n if (!options.visible) {\n attr.style = { display: 'none' };\n }\n rows.push(this._tds({\n model: aggregates[model[parentIdField]],\n attr: attr,\n level: level,\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex\n }, columns, this._footerId));\n }\n return rows;\n },\n _trFromTemplate: function (options) {\n var rowTemplate = this.options.rowTemplate;\n var altRowTemplate = this.options.altRowTemplate;\n var row;\n var template;\n altRowTemplate = altRowTemplate ? altRowTemplate : rowTemplate;\n if (!kendo.isFunction(rowTemplate)) {\n rowTemplate = kendo.template(rowTemplate);\n }\n if (!kendo.isFunction(altRowTemplate)) {\n altRowTemplate = kendo.template(altRowTemplate);\n }\n if (this._absoluteIndex % 2 !== 0) {\n template = rowTemplate(options);\n } else {\n template = altRowTemplate(options);\n }\n if (!$(template).length) {\n return kendoTextElement(template);\n }\n row = this.parseRowTemplate($(template)[0], options);\n return row;\n },\n parseRowTemplate: function (element, options) {\n var nodeName = element.nodeName.toLocaleLowerCase();\n var childNodes = element.childNodes;\n var children = [];\n var currElement;\n var attributes;\n attributes = this.parseAttributes(element);\n for (var i = 0; i < childNodes.length; i++) {\n if (!/\\S/.test(childNodes[i].nodeValue)) {\n continue;\n }\n if (childNodes[i].nodeName.toLocaleLowerCase() === 'td') {\n children.push(this._createCellElement(childNodes[i]));\n }\n }\n if (options && !options.visible) {\n attributes.style = attributes.style || {};\n attributes.style = $.extend(true, attributes.style, { display: 'none' });\n }\n if (this._isTextNode(nodeName)) {\n currElement = kendoTextElement(element.nodeValue);\n } else {\n currElement = kendoDomElement(nodeName, attributes, children);\n }\n return currElement;\n },\n _createCellElement: function (element) {\n var attributes = this.parseAttributes(element);\n var spaceElements = $(element).find('.' + classNames.iconHidden).remove();\n var iconElement = $(element).find('.' + classNames.iconExpand + ',.' + classNames.iconCollapse).remove()[0];\n var children = [];\n for (var i = 0; i < spaceElements.length; i++) {\n children.push(kendoDomElement('span', this.parseAttributes(spaceElements[i])));\n }\n if (iconElement) {\n children.push(kendoDomElement('span', this.parseAttributes(iconElement)));\n }\n children.push(kendoHtmlElement($(element).html()));\n return kendoDomElement('td', attributes, children);\n },\n parseAttributes: function (element) {\n if (this._isTextNode(element.nodeName)) {\n return null;\n }\n element = $(element)[0];\n var attributes = element.attributes;\n var length = attributes.length;\n var result = {};\n for (var i = 0; i < length; i++) {\n result[attributes[i].name] = attributes[i].value;\n }\n return result;\n },\n _isTextNode: function (nodeName) {\n return nodeName.indexOf('text') >= 0;\n },\n _footerId: function (options) {\n var content = [];\n var column = options.column;\n var template = options.column.footerTemplate || $.noop;\n var aggregates = options.model[column.field] || {};\n var attr = {\n 'role': 'gridcell',\n 'style': column.hidden === true ? { 'display': 'none' } : {}\n };\n if (column.expandable) {\n content = content.concat(createPlaceholders({\n level: options.level + 1,\n className: classNames.iconPlaceHolder\n }));\n }\n if (column.attributes) {\n extend(true, attr, column.attributes, { 'style': column.hidden === true ? { 'display': 'none' } : {} });\n }\n content.push(kendoHtmlElement(template(aggregates) || ''));\n return kendoDomElement('td', attr, content);\n },\n _hasFooterTemplate: function () {\n return !!grep(leafColumns(this.columns), function (c) {\n return c.footerTemplate;\n }).length;\n },\n _tds: function (options, columns, renderer) {\n var children = [];\n var column;\n var editedColumnField = (options.editedColumn || {}).field;\n var incellEditing = this._isIncellEditable();\n var length = columns.length;\n for (var i = 0; i < length; i++) {\n column = columns[i];\n var col = renderer({\n model: options.model,\n column: column,\n editColumn: !incellEditing || incellEditing && column.field === editedColumnField && options.editedColumnIndex === i,\n level: options.level\n });\n children.push(col);\n }\n return kendoDomElement('tr', options.attr, children);\n },\n _td: function (options) {\n var children = [];\n var model = options.model;\n var column = options.column;\n var iconClass;\n var attr = {\n 'role': 'gridcell',\n 'style': column.hidden === true ? { 'display': 'none' } : {}\n };\n var incellEditing = this._isIncellEditable();\n var columnHasEditCommand = false;\n if (column.attributes) {\n extend(true, attr, column.attributes);\n }\n if (this.options.navigatable) {\n attr['aria-describedby'] = column.headerAttributes.id;\n }\n if (model._edit && column.field && options.editColumn && (incellEditing || !incellEditing && isColumnEditable(column, model))) {\n attr[kendo.attr('container-for')] = column.field;\n if (incellEditing) {\n if (attr.className && attr.className.indexOf(classNames.editCell) !== -1) {\n attr.className += ' ' + classNames.editCell;\n } else if (!attr.className) {\n attr.className = classNames.editCell;\n }\n }\n } else {\n if (column.expandable) {\n children = createPlaceholders({\n level: options.level,\n className: classNames.iconPlaceHolder\n });\n iconClass = [classNames.icon];\n if (model.hasChildren) {\n iconClass.push(model.expanded ? classNames.iconCollapse : classNames.iconExpand);\n } else {\n iconClass.push(classNames.iconHidden);\n }\n if (model._error) {\n iconClass.push(classNames.refresh);\n } else if (!model.loaded() && model.expanded) {\n iconClass.push(classNames.loading);\n }\n children.push(kendoDomElement('span', { className: iconClass.join(' ') }));\n attr.style['white-space'] = 'nowrap';\n }\n if (isDirtyColumn(column, model)) {\n if (attr.className) {\n attr.className += classNames.dirtyCell;\n } else if (!attr.className) {\n attr.className = classNames.dirtyCell;\n }\n }\n if (column.command) {\n if (attr.className && attr.className.indexOf('k-command-cell') !== -1) {\n attr.className += ' k-command-cell';\n } else if (!attr.className) {\n attr.className = 'k-command-cell';\n }\n columnHasEditCommand = grep(column.command, function (command) {\n return command === EDIT || command.name === EDIT;\n }).length > 0;\n if (model._edit && !this._isIncellEditable() && columnHasEditCommand) {\n children = this._buildCommands([\n 'update',\n 'canceledit'\n ]);\n } else {\n children = this._buildCommands(column.command);\n }\n } else {\n children.push(this._cellContent(column, model));\n }\n attr.className = [\n attr['class'],\n attr.className\n ].join(' ').trim();\n }\n return kendoDomElement('td', attr, children);\n },\n _cellContent: function (column, model) {\n var that = this;\n var value;\n var incellEditing = that._isIncellEditable();\n var dirtyIndicator;\n if (column.selectable) {\n return kendoHtmlElement(SELECTCOLUMNTMPL);\n }\n if (column.template) {\n value = that._evalColumnTemplate(column, model);\n } else if (column.field) {\n value = model.get(column.field);\n dirtyIndicator = incellEditing ? column.dirtyIndicatorTemplate(model) : '';\n if (value !== null && !isUndefined(value)) {\n if (column.format) {\n value = kendo.format(column.format, value);\n }\n value = dirtyIndicator + value;\n } else {\n value = dirtyIndicator;\n }\n } else if (value === null || isUndefined(value)) {\n value = '';\n }\n if (column.template || !column.encoded) {\n return kendoHtmlElement(value);\n } else {\n if (incellEditing) {\n return kendoHtmlElement(value);\n } else {\n return kendoTextElement(value);\n }\n }\n },\n _evalColumnTemplate: function (column, model) {\n if (this._isIncellEditable()) {\n return column.dirtyCellTemplate(model);\n } else {\n return column.template(model);\n }\n },\n _createDirtyColumnTemplate: function (column) {\n var that = this;\n var templateSettings = that._customTemplateSettings();\n var columnTemplateAlias = '#=this.columnTemplate(' + templateSettings.paramName + ')#';\n var templateString = that._dirtyIndicatorTemplate(column.field) + columnTemplateAlias;\n var templateFunction = proxy(kendoTemplate(templateString, templateSettings), { columnTemplate: column.template });\n return templateFunction;\n },\n _createIndicatorTemplate: function (column) {\n var dirtyIndicatorTemplate = this._dirtyIndicatorTemplate(column.field);\n return kendoTemplate(dirtyIndicatorTemplate);\n },\n _dirtyIndicatorTemplate: function (field) {\n var that = this;\n var dirtyField;\n var templateSettings = that._customTemplateSettings();\n var paramName = templateSettings.paramName;\n if (field && paramName) {\n dirtyField = field.charAt(0) === '[' ? kendo.expr(field, paramName + '.dirtyFields') : paramName + '.dirtyFields[\\'' + field + '\\']';\n return '#= ' + paramName + ' && ' + paramName + '.dirty && ' + paramName + '.dirtyFields && ' + dirtyField + ' ? \\'\\' : \\'\\' #';\n }\n return '';\n },\n _customTemplateSettings: function () {\n return extend({}, kendo.Template, this.options.templateSettings);\n },\n _buildCommands: function (commands) {\n var i, result = [];\n for (i = 0; i < commands.length; i++) {\n result.push(this._handleCommand(commands[i]));\n }\n return result;\n },\n _handleCommand: function (command) {\n var name = (command.name || command).toLowerCase();\n var text = this.options.messages.commands[name];\n var icon = [];\n command = extend({}, defaultCommands[name], { text: text }, command);\n if (command.imageClass) {\n icon.push(kendoDomElement('span', {\n className: [\n 'k-icon',\n command.imageClass\n ].join(' ')\n }));\n }\n if (command.template) {\n return kendoHtmlElement(kendo.template(command.template)({ message: command.text || this.options.messages.commands.search }));\n } else {\n return this._button(command, name, icon);\n }\n },\n _button: function (command, name, icon) {\n return kendoDomElement('button', {\n 'type': 'button',\n 'data-command': name,\n className: [\n 'k-button',\n 'k-button-icontext',\n command.className\n ].join(' ')\n }, icon.concat([kendoTextElement(command.text || command.name)]));\n },\n _positionResizeHandle: function (e) {\n var th = $(e.currentTarget);\n var resizeHandle = this.resizeHandle;\n var position = th.position();\n var left;\n var rtlCorrection = 0;\n var headerWrap;\n var ieCorrection;\n var webkitCorrection;\n var firefoxCorrection;\n var leftMargin;\n var invisibleSpace;\n var leftBorderWidth;\n var scrollLeft;\n var cellWidth = outerWidth(th);\n var container = th.closest('div');\n var button = typeof e.buttons !== 'undefined' ? e.buttons : e.which || e.button;\n var indicatorWidth = this.options.columnResizeHandleWidth || 3;\n var halfResizeHandle = indicatorWidth * 3 / 2;\n left = cellWidth;\n if (typeof button !== 'undefined' && button !== 0) {\n return;\n }\n if (!resizeHandle) {\n resizeHandle = this.resizeHandle = $('
');\n }\n var cells = leafDataCells(th.closest('thead')).filter(':visible');\n if (isRtl) {\n scrollLeft = kendo.scrollLeft(container);\n if (browser.mozilla || browser.webkit && browser.version >= 85) {\n scrollLeft = scrollLeft * -1;\n }\n leftBorderWidth = parseFloat(container.css('borderLeftWidth'));\n left = th.offset().left + scrollLeft - parseFloat(th.css('marginLeft')) - (container.offset().left + leftBorderWidth);\n rtlCorrection = left <= scrollLeft ? halfResizeHandle : 0;\n headerWrap = th.closest('.k-grid-header-wrap, .k-grid-header-locked');\n invisibleSpace = headerWrap[0].scrollWidth - headerWrap[0].offsetWidth;\n leftMargin = parseFloat(headerWrap.css('marginLeft'));\n ieCorrection = browser.msie ? 2 * kendo.scrollLeft(headerWrap) + leftBorderWidth - leftMargin - rtlCorrection : 0;\n webkitCorrection = browser.webkit && browser.version < 85 ? invisibleSpace - rtlCorrection - leftMargin + leftBorderWidth : -rtlCorrection;\n firefoxCorrection = browser.mozilla ? leftBorderWidth - leftMargin - rtlCorrection : 0;\n left -= webkitCorrection + firefoxCorrection + ieCorrection;\n } else {\n for (var idx = 0; idx < cells.length; idx++) {\n if (cells[idx] == th[0]) {\n break;\n }\n left += cells[idx].offsetWidth;\n }\n }\n container.append(resizeHandle);\n resizeHandle.show().css({\n top: position.top,\n left: left - halfResizeHandle,\n height: outerHeight(th),\n width: indicatorWidth * 3\n }).data('th', th);\n var that = this;\n resizeHandle.off('dblclick' + NS).on('dblclick' + NS, function () {\n var index = th.index();\n if ($.contains(that.thead[0], th[0])) {\n index += grep(that.columns, function (val) {\n return val.locked && !val.hidden;\n }).length;\n }\n that.autoFitColumn(index);\n });\n },\n autoFitColumn: function (column) {\n var that = this, options = that.options, columns = that.columns, index, th, headerTable, isLocked, visibleLocked = that.lockedHeader ? leafDataCells(that.lockedHeader.find('>table>thead')).filter(isCellVisible).length : 0, col;\n if (typeof column == 'number') {\n column = columns[column];\n } else if (isPlainObject(column)) {\n column = grep(columns, function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n index = inArray(column, columns);\n isLocked = column.locked;\n if (isLocked) {\n headerTable = that.lockedHeader.children('table');\n } else {\n headerTable = that.thead.parent();\n }\n th = headerTable.find('[data-index=\\'' + index + '\\']');\n var contentTable = isLocked ? that.lockedTable : that.table, footer = that.footer || $();\n if (that.footer && that.lockedContent) {\n footer = isLocked ? that.footer.children('.k-grid-footer-locked') : that.footer.children('.k-grid-footer-wrap');\n }\n var footerTable = footer.find('table').first();\n if (that.lockedHeader && visibleLocked >= index && !isLocked) {\n index -= visibleLocked;\n }\n for (var j = 0; j < columns.length; j++) {\n if (columns[j] === column) {\n break;\n } else {\n if (columns[j].hidden) {\n index--;\n }\n }\n }\n if (options.scrollable) {\n col = headerTable.find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')').add(contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')')).add(footerTable.find('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')'));\n } else {\n col = contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')');\n }\n var tables = headerTable.add(contentTable).add(footerTable);\n var oldColumnWidth = outerWidth(th);\n col.width('');\n tables.css('table-layout', 'fixed');\n col.width('auto');\n tables.addClass('k-autofitting');\n tables.css('table-layout', '');\n var newColumnWidth = Math.ceil(Math.max(outerWidth(th), outerWidth(contentTable.find('tr').eq(0).children('td:visible').eq(index)), outerWidth(footerTable.find('tr').eq(0).children('td:visible').eq(index))));\n col.width(newColumnWidth);\n column.width = newColumnWidth;\n if (options.scrollable) {\n var cols = headerTable.find('col'), colWidth, totalWidth = 0;\n for (var idx = 0, length = cols.length; idx < length; idx += 1) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n totalWidth += parseInt(colWidth, 10);\n } else {\n totalWidth = 0;\n break;\n }\n }\n if (totalWidth) {\n tables.each(function () {\n this.style.width = totalWidth + 'px';\n });\n }\n }\n tables.removeClass('k-autofitting');\n that.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: oldColumnWidth,\n newWidth: newColumnWidth\n });\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n },\n _adjustLockedHorizontalScrollBar: function () {\n var table = this.table, content = table.parent();\n var scrollbar = table[0].offsetWidth > content[0].clientWidth ? kendo.support.scrollbar() : 0;\n this.lockedContent.height(outerHeight(content) - scrollbar);\n },\n _syncLockedContentHeight: function () {\n if (this.lockedTable) {\n if (!this._touchScroller) {\n this._adjustLockedHorizontalScrollBar();\n }\n this._adjustRowsHeight(this.table, this.lockedTable);\n this._syncLockedScroll();\n }\n },\n _syncLockedHeaderHeight: function () {\n if (this.lockedHeader) {\n var lockedTable = this.lockedHeader.children('table');\n var table = this.thead.parent();\n this._adjustRowsHeight(lockedTable, table);\n syncTableHeight(lockedTable, table);\n }\n },\n _syncLockedScroll: function () {\n if (!this.options.scrollable) {\n return;\n }\n this.lockedContent[0].scrollTop = this.content[0].scrollTop;\n },\n _resizable: function () {\n if (!this.options.resizable) {\n return;\n }\n if (this.resizable) {\n this.resizable.destroy();\n }\n var treelist = this;\n $(this.lockedHeader).find('thead').add(this.thead).on('mousemove' + NS, 'tr:not(.k-filter-row) > th', $.proxy(this._positionResizeHandle, this));\n this.resizable = new kendo.ui.Resizable(this.wrapper, {\n handle: '.k-resize-handle',\n start: function (e) {\n var th = $(e.currentTarget).data('th');\n var index = $.inArray(th[0], leafDataCells(th.closest('thead')).filter(':visible'));\n var colSelector = 'col:eq(' + index + ')';\n var header, contentTable;\n treelist.wrapper.addClass('k-grid-column-resizing');\n if (treelist.lockedHeader && $.contains(treelist.lockedHeader[0], th[0])) {\n header = treelist.lockedHeader;\n contentTable = treelist.lockedTable;\n } else {\n header = treelist.thead.parent();\n contentTable = treelist.table;\n }\n this.col = contentTable.children('colgroup').find(colSelector).add(header.find(colSelector));\n this.th = th;\n this.startLocation = e.x.location;\n this.columnWidth = outerWidth(th);\n this.table = this.col.closest('table');\n this.totalWidth = this.table.width();\n },\n resize: function (e) {\n var rtlModifier = isRtl ? -1 : 1;\n var minColumnWidth = 11;\n var delta = e.x.location * rtlModifier - this.startLocation * rtlModifier;\n if (this.columnWidth + delta < minColumnWidth) {\n delta = minColumnWidth - this.columnWidth;\n }\n this.table.width(this.totalWidth + delta);\n this.col.width(this.columnWidth + delta);\n },\n resizeend: function () {\n treelist.wrapper.removeClass('k-grid-column-resizing');\n var field = this.th.attr('data-field');\n var column = grep(leafColumns(treelist.columns), function (c) {\n return c.field == field;\n });\n var newWidth = Math.floor(outerWidth(this.th));\n column[0].width = newWidth;\n treelist._resize();\n treelist._syncLockedContentHeight();\n treelist._syncLockedHeaderHeight();\n treelist.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: this.columnWidth,\n newWidth: newWidth\n });\n this.table = this.col = this.th = null;\n }\n });\n },\n _sortable: function () {\n var columns;\n var column;\n var sortableInstance;\n var cells;\n var cell, idx, length;\n var sortable = this.options.sortable;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n if (!sortable) {\n return;\n }\n if (hasMultiColumnHeaders) {\n if (this.lockedHeader) {\n cells = sortCells(leafDataCells(this.lockedHeader.find('>table>thead')).add(leafDataCells(this.thead)));\n } else {\n cells = leafDataCells(this.thead);\n }\n } else {\n cells = $(this.lockedHeader).add(this.thead).find('tr:not(.k-filter-row) th');\n }\n columns = leafColumns(this.columns);\n for (idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n if (column.sortable !== false && !column.command && column.field && !column.selectable) {\n cell = cells.eq(idx);\n sortableInstance = cell.data('kendoColumnSorter');\n if (sortableInstance) {\n sortableInstance.destroy();\n }\n cell.kendoColumnSorter(extend({}, sortable, column.sortable, { dataSource: this.dataSource }));\n }\n }\n },\n _filterable: function () {\n var cells;\n var filterable = this.options.filterable;\n var idx;\n var length;\n var columns;\n var column;\n var cell;\n var filterMenuInstance;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n if (!filterable || this.options.columnMenu) {\n return;\n }\n var filterInit = proxy(function (e) {\n this.trigger(FILTERMENUINIT, {\n field: e.field,\n container: e.container\n });\n }, this);\n var filterOpen = proxy(function (e) {\n this.trigger(FILTERMENUOPEN, {\n field: e.field,\n container: e.container\n });\n }, this);\n if (hasMultiColumnHeaders) {\n if (this.lockedHeader) {\n cells = leafDataCells(this.lockedHeader.find('>table>thead').add(this.thead));\n } else {\n cells = leafDataCells(this.thead);\n }\n } else {\n cells = $(this.lockedHeader).add(this.thead).find('tr:not(.k-filter-row) th');\n }\n columns = leafColumns(this.columns);\n if (filterable && typeof filterable.mode == STRING && filterable.mode.indexOf('menu') == -1) {\n filterable = false;\n }\n if (!filterable) {\n return;\n }\n for (idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n cell = cells.eq(idx);\n filterMenuInstance = cell.data('kendoFilterMenu');\n if (filterMenuInstance) {\n filterMenuInstance.destroy();\n }\n if (column.command || column.filterable === false || column.selectable) {\n continue;\n }\n cell.kendoFilterMenu(extend(true, {}, filterable, column.filterable, {\n dataSource: this.dataSource,\n init: filterInit,\n open: filterOpen\n }));\n }\n },\n _filterRow: function () {\n var that = this;\n if (!that._hasFilterRow()) {\n return;\n }\n var settings;\n var $angular = that.options.$angular;\n var uidAttr = kendo.attr('uid');\n var columns = leafColumns(that.columns), filterable = that.options.filterable, filterHandler = function (e) {\n if (that.trigger('filter', {\n filter: e.filter,\n field: e.field\n })) {\n e.preventDefault();\n }\n }, existingInstance;\n for (var i = 0; i < columns.length; i++) {\n var suggestDataSource, col = columns[i], operators = that.options.filterable.operators, customDataSource = false, th = this.wrapper.find('.k-grid-header .k-filter-row th[' + uidAttr + '=\"' + col.headerAttributes.id + '\"]'), field = col.field, parentColumn = col.parentColumn;\n delete col.parentColumn;\n if (field && col.filterable !== false) {\n var cellOptions = col.filterable && col.filterable.cell || {};\n existingInstance = th.find('.k-filtercell').data('kendoFilterCell');\n if (existingInstance) {\n existingInstance.destroy();\n th.empty();\n }\n suggestDataSource = that.options.dataSource;\n if (suggestDataSource instanceof DataSource) {\n suggestDataSource = that.options.dataSource.options;\n }\n var messages = extend(true, {}, filterable.messages);\n if (col.filterable) {\n extend(true, messages, col.filterable.messages);\n }\n if (cellOptions.enabled === false) {\n th.html(' ');\n continue;\n }\n if (cellOptions.dataSource) {\n suggestDataSource = cellOptions.dataSource;\n customDataSource = true;\n }\n if (col.filterable && col.filterable.operators) {\n operators = col.filterable.operators;\n }\n settings = {\n column: col,\n dataSource: that.dataSource,\n suggestDataSource: suggestDataSource,\n customDataSource: customDataSource,\n field: field,\n messages: messages,\n values: col.values,\n template: cellOptions.template,\n delay: cellOptions.delay,\n inputWidth: cellOptions.inputWidth,\n suggestionOperator: cellOptions.suggestionOperator,\n minLength: cellOptions.minLength,\n dataTextField: cellOptions.dataTextField,\n operator: cellOptions.operator,\n operators: operators,\n showOperators: cellOptions.showOperators,\n change: filterHandler\n };\n if ($angular) {\n settings.$angular = $angular;\n }\n $('').attr(kendo.attr('field'), field).appendTo(th).kendoFilterCell(settings);\n col.parentColumn = parentColumn;\n } else {\n th.html(' ');\n }\n }\n },\n _hasFilterRow: function () {\n var filterable = this.options.filterable;\n var hasFiltering = filterable && typeof filterable.mode == STRING && filterable.mode.indexOf('row') != -1;\n var columns = this.columns;\n var columnsWithoutFiltering = $.grep(columns, function (col) {\n return col.filterable === false;\n });\n if (columns.length && columnsWithoutFiltering.length == columns.length) {\n hasFiltering = false;\n }\n return hasFiltering;\n },\n _change: function () {\n var that = this;\n var selectedValues;\n if (that._checkBoxSelection) {\n selectedValues = that.selectable.value();\n that._uncheckCheckBoxes();\n that._checkRows(selectedValues);\n if (selectedValues.length && selectedValues.length === that.items().length) {\n that._toggleHeaderCheckState(true);\n } else {\n that._toggleHeaderCheckState(false);\n }\n }\n this.trigger(CHANGE);\n },\n _isLocked: function () {\n return this.lockedHeader !== null;\n },\n _selectable: function () {\n var that = this;\n var selectable = this.options.selectable;\n var filter;\n var element = this.table;\n var useAllItems;\n var isLocked = that._isLocked();\n var multi;\n var cell;\n if (selectable) {\n selectable = kendo.ui.Selectable.parseOptions(selectable);\n if (this._hasLockedColumns) {\n element = element.add(this.lockedTable);\n useAllItems = selectable.multiple && selectable.cell;\n }\n filter = '>tbody>tr:not(.k-footer-template)';\n if (selectable.cell) {\n filter = filter + '>td';\n }\n this.selectable = new kendo.ui.Selectable(element, {\n filter: filter,\n aria: true,\n multiple: selectable.multiple,\n change: proxy(this._change, this),\n useAllItems: useAllItems,\n continuousItems: proxy(this._continuousItems, this, filter, selectable.cell),\n relatedTarget: !selectable.cell && this._hasLockedColumns ? proxy(this._selectableTarget, this) : undefined\n });\n if (that.options.navigatable) {\n multi = selectable.multiple;\n cell = selectable.cell;\n element.on('keydown' + NS, function (e) {\n var current = that.current();\n var target = e.target;\n if (e.keyCode === keys.SPACEBAR && !e.shiftKey && $.inArray(target, element) > -1 && !current.is('.k-header')) {\n e.preventDefault();\n e.stopPropagation();\n current = cell ? current : current.parent();\n if (isLocked && !cell) {\n current = current.add(that._relatedRow(current));\n }\n if (multi) {\n if (!e.ctrlKey) {\n that.selectable.clear();\n } else {\n if (current.hasClass(classNames.selected)) {\n current.removeClass(classNames.selected);\n that.trigger(CHANGE);\n return;\n }\n }\n } else {\n that.selectable.clear();\n }\n if (!cell) {\n that.selectable._lastActive = current;\n }\n that.selectable.value(current);\n } else if (!cell && (e.shiftKey && e.keyCode == keys.LEFT || e.shiftKey && e.keyCode == keys.RIGHT || e.shiftKey && e.keyCode == keys.UP || e.shiftKey && e.keyCode == keys.DOWN || e.keyCode === keys.SPACEBAR && e.shiftKey)) {\n e.preventDefault();\n e.stopPropagation();\n current = current.parent();\n if (isLocked) {\n current = current.add(that._relatedRow(current));\n }\n if (multi) {\n if (!that.selectable._lastActive) {\n that.selectable._lastActive = current;\n }\n that.selectable.selectRange(that.selectable._firstSelectee(), current);\n } else {\n that.selectable.clear();\n that.selectable.value(current);\n }\n }\n });\n }\n }\n },\n _continuousItems: function (filter, cell) {\n if (!this.lockedContent) {\n return;\n }\n var lockedItems = $(filter, this.lockedTable);\n var nonLockedItems = $(filter, this.table);\n var columns = cell ? lockedColumns(this.columns).length : 1;\n var nonLockedColumns = cell ? this.columns.length - columns : 1;\n var result = [];\n for (var idx = 0; idx < lockedItems.length; idx += columns) {\n push.apply(result, lockedItems.slice(idx, idx + columns));\n push.apply(result, nonLockedItems.splice(0, nonLockedColumns));\n }\n return result;\n },\n _selectableTarget: function (items) {\n var related;\n var result = $();\n for (var idx = 0, length = items.length; idx < length; idx++) {\n related = this._relatedRow(items[idx]);\n if (inArray(related[0], items) < 0) {\n result = result.add(related);\n }\n }\n return result;\n },\n _relatedRow: function (row) {\n var lockedTable = this.lockedTable;\n row = $(row);\n if (!lockedTable) {\n return row;\n }\n var table = row.closest(this.table.add(this.lockedTable));\n var index = table.find('>tbody>tr').index(row);\n table = table[0] === this.table[0] ? lockedTable : this.table;\n return table.find('>tbody>tr').eq(index);\n },\n select: function (value) {\n var that = this;\n var selectable = this.selectable;\n if (that._checkBoxSelection) {\n if (value) {\n that._checkRows(value);\n if (that.select().length === that.items().length) {\n that._toggleHeaderCheckState(true);\n }\n }\n return that.items().filter('.' + SELECTED);\n }\n if (!selectable) {\n return $();\n }\n if (typeof value !== 'undefined') {\n if (!selectable.options.multiple) {\n selectable.clear();\n value = value.first();\n }\n if (this._hasLockedColumns) {\n value = value.add($.map(value, proxy(this._relatedRow, this)));\n }\n }\n return selectable.value(value);\n },\n clearSelection: function () {\n var that = this;\n if (that.selectable && !that._checkBoxSelection) {\n that.selectable.clear();\n }\n if (that._checkBoxSelection) {\n that._deselectCheckRows(that.select(), true);\n return;\n }\n },\n _uncheckCheckBoxes: function () {\n var that = this;\n var tables = that.table.add(that.lockedTable);\n tables.find('tbody ' + CHECKBOXINPUT).attr('aria-checked', false).prop('checked', false).attr('aria-label', 'Select row');\n },\n _deselectCheckRows: function (items, preventChange) {\n var that = this;\n items = that.table.add(that.lockedTable).find(items);\n if (that._isLocked()) {\n items = items.add(items.map(function () {\n return that._relatedRow(this);\n }));\n }\n items.each(function () {\n $(this).removeClass(SELECTED).find(CHECKBOXINPUT).attr('aria-checked', false).prop('checked', false).attr('aria-label', 'Select row');\n });\n that._toggleHeaderCheckState(false);\n if (!preventChange) {\n that.trigger(CHANGE);\n }\n },\n _headerCheckboxClick: function (e) {\n var that = this, checkBox = $(e.target), checked = checkBox.prop('checked'), parentGrid = checkBox.closest('.k-grid.k-widget').getKendoTreeList();\n if (that !== parentGrid) {\n return;\n }\n if (checked) {\n that.select(parentGrid.items());\n } else {\n that.clearSelection();\n }\n that.trigger(CHANGE);\n },\n _checkboxClick: function (e) {\n var that = this, row = $(e.target).closest('tr'), isSelecting = !row.hasClass(SELECTED), dataItem = that.dataItem(row), children = [], selector = '';\n if (that !== row.closest('.k-grid.k-widget').getKendoTreeList()) {\n return;\n }\n if (that._includeChildren) {\n that.dataSource.allChildNodes(dataItem, children);\n for (var i = 0; i < children.length; i++) {\n selector += 'tr[data-uid=\\'' + children[i].uid + '\\'],';\n }\n }\n selector += 'tr[data-uid=\\'' + dataItem.uid + '\\']';\n row = $(selector);\n if (isSelecting) {\n that.select(row);\n that.trigger(CHANGE);\n } else {\n that._deselectCheckRows(row);\n }\n },\n _checkRows: function (items) {\n items.each(function () {\n $(this).addClass(SELECTED).find(CHECKBOXINPUT).prop('checked', true).attr('aria-label', 'Deselect row').attr('aria-checked', true);\n });\n },\n _toggleHeaderCheckState: function (checked) {\n var that = this;\n if (checked) {\n that.thead.add(that.lockedHeader).find('tr ' + CHECKBOXINPUT).prop('checked', true).attr('aria-checked', true).attr('aria-label', 'Deselect all rows');\n } else {\n that.thead.add(that.lockedHeader).find('tr ' + CHECKBOXINPUT).prop('checked', false).attr('aria-checked', false).attr('aria-label', 'Select all rows');\n }\n },\n _dataSource: function (dataSource) {\n var that = this;\n var ds = this.dataSource;\n var pageable = that.options.pageable;\n if (ds) {\n ds.unbind(CHANGE, this._refreshHandler);\n ds.unbind(ERROR, this._errorHandler);\n ds.unbind(SORT, this._sortHandler);\n ds.unbind(PROGRESS, this._progressHandler);\n }\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this._sortHandler = proxy(this._clearSortClasses, this);\n this._progressHandler = proxy(this._progress, this);\n if (isPlainObject(dataSource)) {\n extend(dataSource, {\n table: that.table,\n fields: that.columns\n });\n if (isPlainObject(pageable) && pageable.pageSize !== undefined) {\n dataSource.pageSize = pageable.pageSize;\n }\n }\n ds = this.dataSource = TreeListDataSource.create(dataSource);\n if (pageable) {\n ds._collapsedTotal = undefined;\n }\n ds.bind(CHANGE, this._refreshHandler);\n ds.bind(ERROR, this._errorHandler);\n ds.bind(SORT, this._sortHandler);\n ds.bind(PROGRESS, this._progressHandler);\n this._dataSourceFetchProxy = proxy(function () {\n this.dataSource.fetch();\n }, this);\n },\n setDataSource: function (dataSource) {\n this._dataSource(dataSource);\n this._sortable();\n this._filterable();\n this._filterRow();\n this._columnMenu();\n this._pageable();\n this._contentTree.render([]);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n dataItem: function (element) {\n if (element instanceof TreeListModel) {\n return element;\n }\n var row = $(element).closest('tr');\n var uid = row.attr(kendo.attr('uid'));\n var model = isUndefined(uid) ? null : this.dataSource.getByUid(uid);\n return model;\n },\n editRow: function (row) {\n var that = this;\n var model;\n if (this._isIncellEditable() || !this.options.editable) {\n return;\n }\n if (typeof row === STRING) {\n row = this.tbody.find(row);\n }\n if (that._isPageable() && that._isPopupEditable() && row instanceof TreeListModel) {\n model = row;\n } else {\n model = this.dataItem(row);\n }\n if (!model) {\n return;\n }\n if (that.editor) {\n model._edit = true;\n this._render();\n this._cancelEditor();\n } else {\n that._preventPageSizeRestore = false;\n }\n if (this._editMode() != 'popup') {\n model._edit = true;\n }\n if (this.trigger(BEFORE_EDIT, { model: model })) {\n that.dataSource._restorePageSizeAfterAddChild();\n return;\n }\n this._render();\n this._createEditor(model);\n this.trigger(EDIT, {\n container: this.editor.wrapper,\n model: model\n });\n },\n _cancelEdit: function (e) {\n if (!this.editor) {\n return;\n }\n var currentIndex;\n e = extend(e, {\n container: this.editor.wrapper,\n model: this.editor.model\n });\n if (this.trigger(CANCEL, e)) {\n return;\n }\n if (this.options.navigatable) {\n currentIndex = this.items().index($(this.current()).parent());\n }\n this.cancelRow();\n if (this.options.navigatable) {\n this.current(this.items().eq(currentIndex).children().filter(NAVCELL).first());\n focusTable(this.table, true);\n }\n },\n cancelRow: function () {\n if (this._isIncellEditable()) {\n return;\n }\n this._cancelEditor();\n this._render();\n },\n saveRow: function () {\n var editor = this.editor;\n var args;\n if (this._isIncellEditable()) {\n return;\n }\n if (!editor) {\n return;\n }\n args = {\n model: editor.model,\n container: editor.wrapper\n };\n if (editor.end() && !this.trigger(SAVE, args)) {\n this.dataSource.sync();\n }\n },\n addRow: function (parent) {\n var that = this;\n var dataSource = that.dataSource;\n var pageable = that._isPageable();\n var incellEditing = that._isIncellEditable();\n var inlineEditing = that._isInlineEditable();\n var editor = this.editor;\n var index = 0;\n var model = {};\n if (editor && !editor.end() || !this.options.editable) {\n return;\n }\n if (parent) {\n if (!(parent instanceof TreeListModel)) {\n parent = this.dataItem(parent);\n }\n model[parent.parentIdField] = parent.id;\n index = this.dataSource.indexOf(parent) + 1;\n this.expand(parent).then(function () {\n var showNewModelInView = pageable && dataSource._isLastItemInView(parent) && (incellEditing || inlineEditing);\n that._insertAt(model, index, showNewModelInView);\n });\n return;\n }\n this._insertAt(model, index);\n },\n _insertAt: function (model, index, showNewModelInView) {\n var that = this;\n var dataSource = that.dataSource;\n model = that.dataSource.insert(index, model);\n if (showNewModelInView) {\n dataSource._setAddChildPageSize();\n }\n var row = this._itemFor(model);\n var cell;\n if (that._isIncellEditable()) {\n cell = row.children('td').eq(that._firstEditableColumnIndex(row));\n that.editCell(cell);\n } else if (row && row[0]) {\n that.editRow(row);\n } else if (that._isPageable() && that._isPopupEditable()) {\n that.editRow(model);\n }\n },\n _firstEditableColumnIndex: function (container) {\n var that = this;\n var model = that.dataItem(container);\n var columns = leafColumns(that.columns);\n var length = columns.length;\n var column;\n var idx;\n for (idx = 0; idx < length; idx++) {\n column = columns[idx];\n if (model && (!model.editable || model.editable(column.field)) && !column.command && column.field && column.hidden !== true) {\n return idx;\n }\n }\n return -1;\n },\n removeRow: function (row) {\n var model = this.dataItem(row);\n var args = {\n model: model,\n row: row\n };\n if (this.options.editable && model && !this.trigger(REMOVE, args)) {\n if (document.activeElement === $(row).find('.k-grid-delete')[0]) {\n $(row).find('.k-grid-delete').blur();\n }\n this.dataSource.remove(model);\n if (!this._isIncellEditable()) {\n this.dataSource.sync();\n }\n }\n },\n _cancelEditor: function () {\n var that = this;\n var model;\n var editor = that.editor;\n if (editor) {\n model = editor.model;\n that._destroyEditor();\n if (!that._isIncellEditable()) {\n that.dataSource.cancelChanges(model);\n } else if (that._shouldRestorePageSize()) {\n that.dataSource._restorePageSizeAfterAddChild();\n }\n model._edit = false;\n }\n that._preventPageSizeRestore = false;\n },\n _shouldRestorePageSize: function () {\n var that = this;\n return that._isPageable() && that._isIncellEditable() && !that._preventPageSizeRestore;\n },\n _destroyEditor: function () {\n if (!this.editor) {\n return;\n }\n this.editor.close();\n this.editor = null;\n },\n _createEditor: function (model) {\n var row = this.itemFor(model);\n var columns = leafColumns(this.columns);\n var leafCols = [];\n for (var idx = 0; idx < columns.length; idx++) {\n leafCols.push(extend({}, columns[idx]));\n delete leafCols[idx].parentColumn;\n }\n row = row.add(this._relatedRow(row));\n var mode = this._editMode();\n var options = {\n columns: leafCols,\n model: model,\n target: this,\n clearContainer: false,\n template: this.options.editable.template\n };\n if (mode == 'inline') {\n this.editor = new Editor(row, options);\n } else {\n extend(options, {\n window: this.options.editable.window,\n commandRenderer: proxy(function () {\n return this._buildCommands([\n 'update',\n 'canceledit'\n ]);\n }, this),\n fieldRenderer: proxy(this._cellContent, this),\n save: proxy(this.saveRow, this),\n cancel: proxy(this._cancelEdit, this),\n appendTo: this.wrapper\n });\n this.editor = new PopupEditor(row, options);\n }\n },\n _createIncellEditor: function (cell, options) {\n var that = this;\n var column = extend({}, options.columns[0]);\n delete column.parentColumn;\n return new IncellEditor(cell, extend({}, {\n fieldRenderer: proxy(that._cellContent, that),\n appendTo: that.wrapper,\n clearContainer: false,\n target: that,\n columns: [column],\n model: options.model,\n change: options.change\n }));\n },\n editCell: function (cell) {\n var that = this;\n cell = $(cell);\n var column = leafColumns(that.columns)[that.cellIndex(cell)];\n var model = that.dataItem(cell);\n if (that._isIncellEditable() && model && isColumnEditable(column, model)) {\n that._editCell(cell, column, model);\n }\n },\n _editCell: function (cell, column, model) {\n var that = this;\n var editedCell;\n if (that.trigger(BEFORE_EDIT, { model: model })) {\n that.dataSource._restorePageSizeAfterAddChild();\n return;\n }\n that.closeCell();\n model._edit = true;\n that._cancelEditor();\n that._render({\n editedColumn: column,\n editedColumnIndex: cell.index()\n });\n editedCell = that.table.add(that.lockedTable).find(DOT + classNames.editCell).first();\n that.editor = that._createIncellEditor(editedCell, {\n columns: [column],\n model: model,\n change: function (e) {\n if (that.trigger(SAVE, {\n values: e.values,\n container: cell,\n model: model\n })) {\n e.preventDefault();\n }\n }\n });\n that._current = editedCell;\n that.trigger(EDIT, {\n container: cell,\n model: model\n });\n },\n closeCell: function (isCancel) {\n var that = this;\n var cell = (that.editor || {}).element;\n var tr;\n var model;\n if (!cell || !cell[0] || !that._isIncellEditable()) {\n return;\n }\n model = that.dataItem(cell);\n if (isCancel && that.trigger(CANCEL, {\n container: cell,\n model: model\n })) {\n return;\n }\n that.trigger(CELL_CLOSE, {\n type: isCancel ? CANCEL : SAVE,\n model: model,\n container: cell\n });\n that._cancelEditor();\n cell.removeClass(classNames.editCell);\n tr = cell.parent().removeClass(classNames.editRow);\n if (that.lockedContent) {\n that._relatedRow(tr).removeClass(classNames.editRow);\n }\n that._render();\n that.trigger(ITEM_CHANGE, {\n item: tr,\n data: model,\n ns: ui\n });\n if (that.lockedContent) {\n adjustRowHeight(tr.css('height', '')[0], that._relatedRow(tr).css('height', '')[0]);\n }\n },\n cancelChanges: function () {\n this.dataSource.cancelChanges();\n },\n saveChanges: function () {\n var that = this;\n var editable = (that.editor || {}).editable;\n var valid = editable && editable.end();\n if ((valid || !editable) && !that.trigger(SAVE_CHANGES)) {\n that.dataSource.sync();\n }\n },\n _editMode: function () {\n var mode = 'inline', editable = this.options.editable;\n if (editable !== true) {\n if (typeof editable == 'string') {\n mode = editable;\n } else {\n mode = editable.mode || mode;\n }\n }\n return mode.toLowerCase();\n },\n _isIncellEditable: function () {\n return this._editMode() === INCELL;\n },\n _isInlineEditable: function () {\n return this._editMode() === INLINE;\n },\n _isPopupEditable: function () {\n return this._editMode() === POPUP;\n },\n hideColumn: function (column) {\n this._toggleColumnVisibility(column, true);\n },\n showColumn: function (column) {\n this._toggleColumnVisibility(column, false);\n },\n _toggleColumnVisibility: function (column, hidden) {\n column = this._findColumn(column);\n if (!column || column.hidden === hidden) {\n return;\n }\n column.hidden = hidden;\n this._setParentsVisibility(column, !hidden);\n this._ensureExpandableColumn();\n this._clearColsCache();\n this._renderCols();\n this._renderHeader();\n this._render();\n this._adjustTablesWidth();\n this.trigger(hidden ? COLUMNHIDE : COLUMNSHOW, { column: column });\n if (!hidden && !column.width) {\n this.table.add(this.thead.closest('table')).width('');\n }\n this._updateFirstColumnClass();\n },\n _findColumn: function (column) {\n if (typeof column == 'number') {\n column = this.columns[column];\n } else if (isPlainObject(column)) {\n column = grep(leafColumns(this.columns), function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(leafColumns(this.columns), function (item) {\n return item.field === column;\n })[0];\n }\n return column;\n },\n _adjustTablesWidth: function () {\n var idx, length;\n var cols = this.thead.prev().children();\n var colWidth, width = 0;\n for (idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n } else {\n width = 0;\n break;\n }\n }\n if (width) {\n this.table.add(this.thead.closest('table')).width(width);\n }\n },\n _reorderable: function () {\n if (!this.options.reorderable) {\n return;\n }\n var scrollable = this.options.scrollable === true;\n var selector = (scrollable ? '.k-grid-header:first ' : 'table:first>.k-grid-header ') + HEADERCELLS;\n var that = this;\n this._draggableInstance = new ui.Draggable(this.wrapper, {\n group: kendo.guid(),\n filter: selector,\n hint: function (target) {\n return $('
').html(target.attr(kendo.attr('title')) || target.attr(kendo.attr('field')) || target.text()).prepend('');\n }\n });\n this.reorderable = new ui.Reorderable(this.wrapper, {\n draggable: this._draggableInstance,\n dragOverContainers: proxy(this._allowDragOverContainers, this),\n inSameContainer: function (e) {\n return $(e.source).parent()[0] === $(e.target).parent()[0] && targetParentContainerIndex(flatColumnsInDomOrder(that.columns), that.columns, e.sourceIndex, e.targetIndex) > -1;\n },\n change: function (e) {\n var columns = flatColumnsInDomOrder(that.columns);\n var column = columns[e.oldIndex];\n var newIndex = targetParentContainerIndex(columns, that.columns, e.oldIndex, e.newIndex);\n that.trigger(COLUMNREORDER, {\n newIndex: newIndex,\n oldIndex: inArray(column, columns),\n column: column\n });\n that.reorderColumn(newIndex, column, e.position === 'before');\n }\n });\n },\n _allowDragOverContainers: function (sourceIndex, targetIndex) {\n var columns = flatColumnsInDomOrder(this.columns);\n return columns[sourceIndex].lockable !== false && targetParentContainerIndex(columns, this.columns, sourceIndex, targetIndex) > -1;\n },\n _reorderTrees: function (destSources, destContainer, destDomTree, sources, sourcesContainer, sourcesDomTree, before, depth) {\n var ths = $();\n var source = sourcesContainer.find('tr:eq(' + sources[0].rowIndex + ')');\n var sourceDOM = sourcesDomTree.children[sources[0].rowIndex];\n var sourceChildren = source.children();\n var destDomChildren;\n var currentIndex;\n var destColumn = before ? destSources[0] : destSources[destSources.length - 1];\n var destRow;\n var sourcesLeafs;\n var destLeafs;\n var reorderTaget;\n var destThs;\n for (var idx = 0; idx < sources.length; idx++) {\n currentIndex = sources[idx].cellIndex;\n ths = ths.add(sourceChildren.eq(currentIndex));\n destDomChildren = destDomTree.children[destColumn.rowIndex].children;\n if (destDomTree === sourcesDomTree && before) {\n currentIndex += idx;\n }\n destDomChildren.splice(before ? destColumn.cellIndex + idx : destColumn.cellIndex + 1 + idx, 0, sourceDOM.children[currentIndex]);\n }\n if (destDomTree === sourcesDomTree && before) {\n sourceDOM.children.splice(sources[0].cellIndex + sources.length, sources.length);\n } else {\n sourceDOM.children.splice(sources[0].cellIndex, sources.length);\n }\n destRow = destContainer.find('tr:eq(' + destColumn.rowIndex + ')');\n destThs = destRow.find('>th.k-header:eq(' + destColumn.cellIndex + ')');\n if (destThs.length && ths[0] !== destThs[0]) {\n ths[before ? 'insertBefore' : 'insertAfter'](destThs);\n }\n if (depth >= sources[0].rowIndex + 1 && depth != 1) {\n sourcesLeafs = [];\n for (idx = 0; idx < sources.length; idx++) {\n if (sources[idx].columns) {\n sourcesLeafs = sourcesLeafs.concat(sources[idx].columns);\n }\n }\n if (!sourcesLeafs.length) {\n return;\n }\n destLeafs = [];\n for (idx = 0; idx < destSources.length; idx++) {\n if (destSources[idx].columns) {\n destLeafs = destLeafs.concat(destSources[idx].columns);\n }\n }\n if (!destLeafs.length && (destContainer !== sourcesContainer || (destColumn.cellIndex - sources[0].cellIndex > 1 || sources[0].cellIndex - destColumn.cellIndex > 1))) {\n reorderTaget = findReorderTarget(this.columns, destColumn, sources[0], before, this.columns);\n destLeafs = [reorderTaget];\n if (!reorderTaget && sourcesLeafs.length && destContainer.find('tr').length > sources[0].rowIndex + 1) {\n this._insertTree(sourcesLeafs, sourcesContainer, sourcesDomTree, destContainer, destDomTree);\n return;\n }\n }\n if (!destLeafs.length) {\n return;\n }\n this._reorderTrees(destLeafs, destContainer, destDomTree, sourcesLeafs, sourcesContainer, sourcesDomTree, before, depth);\n }\n },\n _insertTree: function (columns, sourcesContainer, sourcesDomTree, destContainer, destDomTree) {\n var leafs = [];\n var row;\n var ths = $();\n var domTr;\n row = sourcesContainer.find('tr:eq(' + columns[0].rowIndex + ')');\n domTr = sourcesDomTree.children[columns[0].rowIndex];\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n leafs = leafs.concat(columns[idx].columns);\n }\n destDomTree.children[columns[0].rowIndex].children.splice(idx, 0, domTr.children[columns[idx].rowIndex]);\n ths = ths.add(row.find('>th.k-header:eq(' + columns[idx].cellIndex + ')'));\n }\n sourcesDomTree.children[columns[0].rowIndex].children.splice(columns[0].cellIndex, columns.length);\n destContainer.find('tr:eq(' + columns[0].rowIndex + ')').append(ths);\n if (leafs.length) {\n this._insertTree(leafs, sourcesContainer, sourcesDomTree, destContainer, destDomTree);\n }\n },\n _reorderHeader: function (destColumn, column, before) {\n var sourcesDepth = column.columns ? depth([column]) : 1;\n var targetDepth = destColumn.columns ? depth([destColumn]) : 1;\n var sourceLocked = isLocked(column);\n var destLocked = isLocked(destColumn);\n var destContainer = destLocked ? this.lockedHeader : this.thead;\n var sourcesContainer = sourceLocked ? this.lockedHeader : this.thead;\n var destDomTree = destLocked ? this._lockedHeaderTree : this._headerTree;\n var sourcesDomTree = sourceLocked ? this._lockedHeaderTree : this._headerTree;\n var rowsToAdd;\n var destRows = destContainer.find('tr:not(.k-filter-row)');\n var destTarget;\n if (sourcesDepth === targetDepth || sourcesDepth < destRows.length) {\n this._reorderTrees([destColumn], destContainer, destDomTree, [column], sourcesContainer, sourcesDomTree, before, sourcesDepth);\n updateRowSpans(destContainer, destDomTree);\n removeEmptyRows(sourcesContainer, sourcesDomTree);\n } else {\n if (destContainer !== sourcesContainer) {\n rowsToAdd = sourcesDepth - destRows.length;\n destRows.each(function (idx) {\n var cells = this.cells;\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].colSpan <= 1 && cells[i].attributes.rowspan) {\n destDomTree.children[idx].children[i].attr.rowSpan += rowsToAdd;\n cells[i].rowSpan += rowsToAdd;\n }\n }\n });\n for (var j = 0; j < rowsToAdd; j++) {\n destDomTree.children.push(kendoDomElement('tr', { 'role': 'row' }));\n if (destContainer.is('thead')) {\n destTarget = destContainer;\n } else {\n destTarget = destContainer.find('thead');\n }\n if (this._hasFilterRow()) {\n $('').insertBefore(destTarget.find('tr.k-filter-row'));\n } else {\n destTarget.append('');\n }\n }\n }\n this._reorderTrees([destColumn], destContainer, destDomTree, [column], sourcesContainer, sourcesDomTree, before, sourcesDepth);\n removeEmptyRows(sourcesContainer, sourcesDomTree);\n }\n },\n reorderColumn: function (destIndex, column, before) {\n var lockChanged;\n var parent = column.parentColumn;\n var columns = parent ? parent.columns : this.columns;\n var sourceIndex = inArray(column, columns);\n var destColumn = columns[destIndex];\n var isLocked = !!destColumn.locked;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n var nonLockedColumnsLength = nonLockedColumns(columns).length;\n if (sourceIndex === destIndex) {\n return;\n }\n if (isLocked && !column.locked && nonLockedColumnsLength == 1) {\n return;\n }\n if (!isLocked && column.locked && columns.length - nonLockedColumnsLength == 1) {\n return;\n }\n if (before === undefined) {\n before = destIndex < sourceIndex;\n }\n if (hasMultiColumnHeaders) {\n this._reorderHeader(destColumn, column, before);\n }\n lockChanged = !!column.locked;\n lockChanged = lockChanged != isLocked;\n column.locked = isLocked;\n columns.splice(before ? destIndex : destIndex + 1, 0, column);\n columns.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n this._setColumnDataIndexes(leafColumns(this.columns));\n this._clearColsCache();\n this._renderCols();\n if (!hasMultiColumnHeaders) {\n var ths = $(this.lockedHeader).add(this.thead).find('tr:not(.k-filter-row) th');\n ths.eq(sourceIndex)[before ? 'insertBefore' : 'insertAfter'](ths.eq(destIndex));\n var dom = this._headerTree.children[0].children;\n if (this._hasLockedColumns) {\n dom = this._lockedHeaderTree.children[0].children.concat(dom);\n }\n dom.splice(before ? destIndex : destIndex + 1, 0, dom[sourceIndex]);\n dom.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n if (this._hasLockedColumns) {\n this._lockedHeaderTree.children[0].children = dom.splice(0, lockedColumns(columns).length);\n this._headerTree.children[0].children = dom;\n }\n } else {\n if (this.lockedHeader) {\n columns = nonLockedColumns(this.columns);\n this._prepareColumns([{\n rowSpan: 1,\n cells: [],\n index: 0\n }], columns);\n columns = lockedColumns(this.columns);\n this._prepareColumns([{\n rowSpan: 1,\n cells: [],\n index: 0\n }], columns);\n } else {\n this._prepareColumns([{\n rowSpan: 1,\n cells: [],\n index: 0\n }], this.columns);\n }\n }\n this._updateColumnCellIndex();\n this._applyLockedContainersWidth();\n this._syncLockedHeaderHeight();\n this._updateFirstColumnClass();\n if (this._hasFilterRow()) {\n this._updateFilterThs(before, column, destColumn);\n }\n this.refresh();\n if (!lockChanged) {\n return;\n }\n if (isLocked) {\n this.trigger(COLUMNLOCK, { column: column });\n } else {\n this.trigger(COLUMNUNLOCK, { column: column });\n }\n },\n lockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n var index = lockedColumns(columns).length - 1;\n this.reorderColumn(index, column, false);\n },\n unlockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n var index = lockedColumns(columns).length;\n this.reorderColumn(index, column, true);\n },\n _columnMenu: function () {\n var ths = $(this.lockedHeader).add(this.thead).find('th');\n var columns = this.columns;\n var options = this.options;\n var columnMenu = options.columnMenu;\n var column, menu, menuOptions, sortable, filterable;\n var initHandler = proxy(this._columnMenuInit, this);\n var openHandler = proxy(this._columnMenuOpen, this);\n var hasLockableColumns = grep(this.columns, function (item) {\n return item.lockable !== false;\n }).length > 0;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n if (hasMultiColumnHeaders) {\n columns = leafColumns(columns);\n if (this.lockedHeader) {\n ths = sortCells(leafDataCells(this.lockedHeader.find('>table>thead')).add(leafDataCells(this.thead)));\n } else {\n ths = leafDataCells(this.thead);\n }\n } else {\n ths = $(this.lockedHeader).add(this.thead).find('tr:not(.k-filter-row) th');\n }\n if (!columnMenu) {\n return;\n }\n if (typeof columnMenu == 'boolean') {\n columnMenu = {};\n }\n for (var i = 0; i < ths.length; i++) {\n column = columns[i];\n if (!column.field) {\n continue;\n }\n menu = ths.eq(i).data('kendoColumnMenu');\n if (menu) {\n menu.destroy();\n }\n sortable = false;\n if (column.sortable !== false && columnMenu.sortable !== false && options.sortable !== false) {\n sortable = extend({}, options.sortable, { compare: (column.sortable || {}).compare });\n }\n filterable = false;\n if (options.filterable && column.filterable !== false && columnMenu.filterable !== false) {\n filterable = extend({ pane: this.pane }, column.filterable, options.filterable);\n }\n menuOptions = {\n dataSource: this.dataSource,\n values: column.values,\n columns: columnMenu.columns,\n sortable: sortable,\n filterable: filterable,\n messages: columnMenu.messages,\n owner: this,\n closeCallback: $.noop,\n init: initHandler,\n open: openHandler,\n pane: this.pane,\n hasLockableColumns: lockedColumns(columns).length > 0 && hasLockableColumns && !hasMultiColumnHeaders\n };\n if (options.$angular) {\n menuOptions.$angular = options.$angular;\n }\n ths.eq(i).kendoColumnMenu(menuOptions);\n }\n },\n _columnMenuInit: function (e) {\n this.trigger(COLUMNMENUINIT, {\n field: e.field,\n container: e.container\n });\n },\n _columnMenuOpen: function (e) {\n this.trigger(COLUMNMENUOPEN, {\n field: e.field,\n container: e.container\n });\n },\n _pageable: function () {\n var that = this, wrapper, pageable = that.options.pageable;\n if (pageable) {\n wrapper = that.wrapper.children('div.k-grid-pager');\n if (!wrapper.length) {\n wrapper = $('
').appendTo(that.wrapper);\n }\n that._destroyPager();\n if (typeof pageable === 'object' && pageable instanceof kendo.ui.TreeListPager) {\n that.pager = pageable;\n } else if (that.dataSource && !that.dataSource.options.serverPaging) {\n that._createPager(wrapper);\n }\n if (that.pager) {\n that.pager.bind(PAGE_CHANGE, function (e) {\n if (that.trigger(PAGE, { page: e.index })) {\n e.preventDefault();\n }\n });\n }\n }\n },\n _createPager: function (element, options) {\n var that = this;\n that.pager = new TreeListPager(element, extend({}, that.options.pageable, { dataSource: that.dataSource }, options));\n },\n _destroyPager: function () {\n if (this.pager) {\n this.pager.destroy();\n this.pager = null;\n }\n },\n _isPageable: function () {\n var that = this;\n return that.options.pageable && (!that.dataSource || that.dataSource && that.dataSource._isPageable());\n },\n _togglePagerVisibility: function () {\n var that = this;\n var pageable = that.options.pageable;\n if (pageable && (isPlainObject(pageable) || pageable instanceof TreeListPager) && pageable.alwaysVisible === false) {\n that.wrapper.find('.k-grid-pager').toggle((that.dataSource.collapsedTotal() || 0) >= that.dataSource.pageSize());\n }\n }\n });\n function isInputElement(element) {\n return $(element).is(':button,a,:input,a>.k-icon,textarea,span.k-select,span.k-icon,span.k-link,.k-input,.k-multiselect-wrap,.k-tool-icon');\n }\n function isLocked(column) {\n if (!column.parentColumn) {\n return !!column.locked;\n }\n return !!isLocked(column.parentColumn);\n }\n function findParentColumnWithChildren(columns, index, source, rtl) {\n var target;\n var locked = !!source.locked;\n var targetLocked;\n do {\n target = columns[index];\n index += rtl ? 1 : -1;\n targetLocked = !!target.locked;\n } while (target && index > -1 && index < columns.length && target != source && !target.columns && targetLocked === locked);\n return target;\n }\n function findReorderTarget(columns, target, source, before, masterColumns) {\n if (target.columns) {\n target = target.columns;\n return target[before ? 0 : target.length - 1];\n } else {\n var parent = columnParent(target, columns);\n var parentColumns;\n if (parent) {\n parentColumns = parent.columns;\n } else {\n parentColumns = columns;\n }\n var index = inArray(target, parentColumns);\n if (index === 0 && before && parentColumns.length !== 1) {\n index++;\n } else if (index == parentColumns.length - 1 && !before && index !== 0) {\n index--;\n } else if (index > 0 || index === 0 && !before && index !== 0) {\n index += before ? -1 : 1;\n }\n var sourceIndex = inArray(source, parentColumns);\n target = findParentColumnWithChildren(parentColumns, index, source, sourceIndex > index);\n var targetIndex = inArray(target, masterColumns);\n if (target.columns && (!targetIndex || targetIndex === parentColumns.length - 1)) {\n return null;\n }\n if (target && target != source && target.columns) {\n return findReorderTarget(columns, target, source, before, masterColumns);\n }\n }\n return null;\n }\n function leafColumns(columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (!columns[idx].columns) {\n result.push(columns[idx]);\n continue;\n }\n result = result.concat(leafColumns(columns[idx].columns));\n }\n return result;\n }\n function getColumnsFields(columns) {\n var result = [];\n columns = leafColumns(columns);\n for (var idx = 0; idx < columns.length; idx++) {\n if (typeof columns[idx] === 'string') {\n result.push(columns[idx]);\n } else if (columns[idx].field) {\n result.push(columns[idx].field);\n }\n }\n return result;\n }\n function visibleChildColumns(columns) {\n return grep(columns, function (column) {\n return !column.hidden;\n });\n }\n function isVisible(column) {\n return visibleColumns([column]).length > 0;\n }\n function visibleColumns(columns) {\n return grep(columns, function (column) {\n var result = !column.hidden;\n if (result && column.columns) {\n result = visibleColumns(column.columns).length > 0;\n }\n return result;\n });\n }\n function normalizeColumns(columns, hide, parentIds) {\n return map(columns, function (column) {\n var hidden;\n column.parentIds = parentIds;\n if (!isVisible(column) || hide) {\n hidden = true;\n }\n var uid = kendo.guid();\n column.headerAttributes = extend({ headers: parentIds }, column.headerAttributes);\n if (!column.headerAttributes || !column.headerAttributes.id) {\n column.headerAttributes = extend({ id: uid }, column.headerAttributes);\n } else {\n uid = column.headerAttributes.id;\n }\n if (column.columns) {\n column.columns = normalizeColumns(column.columns, hidden, parentIds ? parentIds + ' ' + uid : uid);\n }\n return extend({ hidden: hidden }, column);\n });\n }\n function flatColumnsInDomOrder(columns) {\n var result = flatColumns(lockedColumns(columns));\n return result.concat(flatColumns(nonLockedColumns(columns)));\n }\n function targetParentContainerIndex(flatColumns, columns, sourceIndex, targetIndex) {\n var column = flatColumns[sourceIndex];\n var target = flatColumns[targetIndex];\n var parent = columnParent(column, columns);\n columns = parent ? parent.columns : columns;\n return inArray(target, columns);\n }\n function parentColumnsCells(cell) {\n var container = cell.closest('table');\n var result = $().add(cell);\n var row = cell.closest('tr');\n var headerRows = container.find('tr');\n var level = headerRows.index(row);\n if (level > 0) {\n var parent = headerRows.eq(level - 1);\n var parentCellsWithChildren = parent.find('th').filter(function () {\n return !$(this).attr('rowspan');\n });\n var offset = 0;\n var index = row.find('th').index(cell);\n var prevCells = cell.prevAll().filter(function () {\n return this.colSpan > 1;\n });\n for (var idx = 0; idx < prevCells.length; idx++) {\n offset += prevCells[idx].colSpan || 1;\n }\n index += Math.max(offset - 1, 0);\n offset = 0;\n for (idx = 0; idx < parentCellsWithChildren.length; idx++) {\n var parentCell = parentCellsWithChildren.eq(idx);\n if (parentCell.attr('data-colspan')) {\n offset += parentCell[0].getAttribute('data-colspan');\n } else {\n offset += 1;\n }\n if (index >= idx && index < offset) {\n result = parentColumnsCells(parentCell).add(result);\n break;\n }\n }\n }\n return result;\n }\n function childColumnsCells(cell) {\n var container = cell.closest('thead');\n var result = $().add(cell);\n var row = cell.closest('tr');\n var headerRows = container.find('tr');\n var level = headerRows.index(row) + cell[0].rowSpan;\n var colSpanAttr = kendo.attr('colspan');\n if (level <= headerRows.length - 1) {\n var child = row.next();\n var prevCells = cell.prevAll();\n var idx;\n prevCells = prevCells.filter(function () {\n return !this.rowSpan || this.rowSpan === 1;\n });\n var offset = 0;\n for (idx = 0; idx < prevCells.length; idx++) {\n offset += parseInt(prevCells.eq(idx).attr(colSpanAttr), 10) || 1;\n }\n var cells = child.find('th');\n var colSpan = parseInt(cell.attr(colSpanAttr), 10) || 1;\n idx = 0;\n while (idx < colSpan) {\n child = cells.eq(idx + offset);\n result = result.add(childColumnsCells(child));\n var value = parseInt(child.attr(colSpanAttr), 10);\n if (value > 1) {\n colSpan -= value - 1;\n }\n idx++;\n }\n }\n return result;\n }\n function columnParent(column, columns) {\n var parents = [];\n columnParents(column, columns, parents);\n return parents[parents.length - 1];\n }\n function columnParents(column, columns, parents) {\n parents = parents || [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (column === columns[idx]) {\n return true;\n } else if (columns[idx].columns) {\n var inserted = parents.length;\n parents.push(columns[idx]);\n if (!columnParents(column, columns[idx].columns, parents)) {\n parents.splice(inserted, parents.length - inserted);\n } else {\n return true;\n }\n }\n }\n return false;\n }\n function flatColumns(columns) {\n var result = [];\n var children = [];\n for (var idx = 0; idx < columns.length; idx++) {\n result.push(columns[idx]);\n if (columns[idx].columns) {\n children = children.concat(columns[idx].columns);\n }\n }\n if (children.length) {\n result = result.concat(flatColumns(children));\n }\n return result;\n }\n function columnPosition(column, columns, row, cellCounts) {\n var result;\n var idx;\n row = row || 0;\n cellCounts = cellCounts || {};\n cellCounts[row] = cellCounts[row] || 0;\n for (idx = 0; idx < columns.length; idx++) {\n if (columns[idx] == column) {\n result = {\n cell: cellCounts[row],\n row: row\n };\n break;\n } else if (columns[idx].columns) {\n result = columnPosition(column, columns[idx].columns, row + 1, cellCounts);\n if (result) {\n break;\n }\n }\n cellCounts[row]++;\n }\n return result;\n }\n function updateCellIndex(thead, columns, offset) {\n offset = offset || 0;\n var position;\n var cell;\n var allColumns = columns;\n columns = leafColumns(columns);\n var cells = {};\n var rows = thead.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n for (var idx = 0, length = columns.length; idx < length; idx++) {\n position = columnPosition(columns[idx], allColumns);\n if (!cells[position.row]) {\n cells[position.row] = rows.eq(position.row).find('.k-header').filter(filter);\n }\n cell = cells[position.row].eq(position.cell);\n cell.attr(kendo.attr('index'), offset + idx);\n }\n return columns.length;\n }\n function depth(columns) {\n var result = 1;\n var max = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n var temp = depth(columns[idx].columns);\n if (temp > max) {\n max = temp;\n }\n }\n }\n return result + max;\n }\n function lockedColumns(columns) {\n return grep(columns, is('locked'));\n }\n function nonLockedColumns(columns) {\n return grep(columns, not(is('locked')));\n }\n function updateRowSpans(container, containerDOMtree) {\n var rows = container.find('tr:not(.k-filter-row)');\n var length = rows.length;\n rows.each(function (idx) {\n var cells = this.cells;\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].colSpan <= 1 && cells[i].attributes.rowspan) {\n containerDOMtree.children[idx].children[i].attr.rowSpan = length - idx;\n cells[i].rowSpan = length - idx;\n }\n }\n });\n }\n function removeEmptyRows(container, containerDOMtree) {\n var rows = container.find('tr');\n var emptyRows = [];\n rows.filter(function (idx) {\n var shouldRemove = !$(this).children().length;\n if (shouldRemove) {\n emptyRows.push(idx);\n }\n return shouldRemove;\n }).remove();\n for (var i = emptyRows.length - 1; i >= 0; i--) {\n containerDOMtree.children.splice(emptyRows[i], 1);\n }\n updateRowSpans(container, containerDOMtree);\n }\n function focusTable(table, direct) {\n if (direct === true) {\n table = $(table);\n var scrollTop, scrollLeft;\n scrollTop = table.parent().scrollTop();\n scrollLeft = kendo.scrollLeft(table.parent());\n kendo.focusElement(table);\n kendo.scrollLeft(table.parent().scrollTop(scrollTop), scrollLeft);\n } else {\n $(table).one('focusin', function (e) {\n e.preventDefault();\n }).focus();\n }\n }\n function adjustRowHeight(row1, row2) {\n var height;\n var offsetHeight1 = row1.offsetHeight;\n var offsetHeight2 = row2.offsetHeight;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1 + 'px';\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2 + 'px';\n }\n if (height) {\n row1.style.height = row2.style.height = height;\n }\n }\n function isColumnEditable(column, model) {\n if (!column || !model || !column.field || column.selectable || column.command || column.editable && !column.editable(model)) {\n return false;\n }\n return column.field && model.editable && model.editable(column.field);\n }\n function isDirtyColumn(column, model) {\n var field = (column || {}).field || '';\n return model.dirty && model.dirtyFields && model.dirtyFields[field] && isColumnEditable(column, model);\n }\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (kendo.ExcelMixin) {\n kendo.ExcelMixin.extend(TreeList.prototype);\n }\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(TreeList.prototype);\n TreeList.prototype._drawPDF = function (progress) {\n var treeList = this;\n if (treeList.options.pdf.paperSize && treeList.options.pdf.paperSize != 'auto') {\n return treeList._drawPDF_autoPageBreak(progress);\n }\n var result = new $.Deferred();\n var dataSource = treeList.dataSource;\n var allPages = treeList.options.pdf.allPages;\n this._initPDFProgress(progress);\n var doc = new kendo.drawing.Group();\n var startingPage = dataSource.page();\n function resolve() {\n if (allPages && startingPage !== undefined) {\n dataSource.unbind('change', exportPage);\n dataSource.one('change', function () {\n result.resolve(doc);\n });\n dataSource.page(startingPage);\n } else {\n result.resolve(doc);\n }\n }\n function exportPage() {\n treeList._drawPDFShadow({ width: treeList.wrapper.width() }, { avoidLinks: treeList.options.pdf.avoidLinks }).done(function (group) {\n var pageNum = dataSource.page();\n var totalPages = allPages ? dataSource.totalPages() : 1;\n var args = {\n page: group,\n pageNumber: pageNum,\n progress: pageNum / totalPages,\n totalPages: totalPages\n };\n progress.notify(args);\n doc.append(args.page);\n if (pageNum < totalPages) {\n dataSource.page(pageNum + 1);\n } else {\n resolve();\n }\n }).fail(function (err) {\n result.reject(err);\n });\n }\n if (allPages) {\n dataSource.bind('change', exportPage);\n dataSource.page(1);\n } else {\n exportPage();\n }\n return result.promise();\n };\n TreeList.prototype._initPDFProgress = function (deferred) {\n var loading = $('
');\n loading.prepend(this.wrapper.clone().css({\n position: 'absolute',\n top: 0,\n left: 0\n }));\n this.wrapper.append(loading);\n var progressBar = $('
').appendTo(loading).kendoProgressBar({\n type: 'chunk',\n chunkCount: 10,\n min: 0,\n max: 1,\n value: 0\n }).data('kendoProgressBar');\n deferred.progress(function (e) {\n progressBar.value(e.progress);\n }).always(function () {\n kendo.destroy(loading);\n loading.remove();\n });\n };\n TreeList.prototype._drawPDF_autoPageBreak = function (progress) {\n var treeList = this;\n var result = new $.Deferred();\n var dataSource = treeList.dataSource;\n var allPages = treeList.options.pdf.allPages;\n var origBody = treeList.wrapper.find('table[role=\"treeList\"] > tbody');\n var cont = $('
').css({\n position: 'absolute',\n left: -10000,\n top: -10000\n });\n var clone = treeList.wrapper.clone().css({\n height: 'auto',\n width: 'auto'\n }).appendTo(cont);\n clone.find('.k-grid-content').css({\n height: 'auto',\n width: 'auto',\n overflow: 'visible'\n });\n clone.find('table[role=\"treeList\"], .k-grid-footer table').css({\n height: 'auto',\n width: '100%',\n overflow: 'visible'\n });\n clone.find('.k-grid-pager, .k-grid-toolbar, .k-grouping-header').remove();\n clone.find('.k-grid-header, .k-grid-footer').css({ paddingRight: 0 });\n this._initPDFProgress(progress);\n var body = clone.find('table[role=\"treeList\"] > tbody').empty();\n var startingPage = dataSource.page();\n function resolve() {\n if (allPages && startingPage !== undefined) {\n dataSource.one('change', draw);\n dataSource.page(startingPage);\n } else {\n treeList.refresh();\n draw();\n }\n }\n function draw() {\n cont.appendTo(document.body);\n var options = $.extend({}, treeList.options.pdf, {\n _destructive: true,\n progress: function (p) {\n progress.notify({\n page: p.page,\n pageNumber: p.pageNum,\n progress: 0.5 + p.pageNum / p.totalPages / 2,\n totalPages: p.totalPages\n });\n }\n });\n kendo.drawing.drawDOM(clone, options).always(function () {\n cont.remove();\n }).then(function (group) {\n result.resolve(group);\n }).fail(function (err) {\n result.reject(err);\n });\n }\n function renderPage() {\n var pageNum = dataSource.page();\n var totalPages = allPages ? dataSource.totalPages() : 1;\n body.append(origBody.find('tr'));\n if (pageNum < totalPages) {\n dataSource.page(pageNum + 1);\n } else {\n dataSource.unbind('change', renderPage);\n resolve();\n }\n }\n if (allPages) {\n dataSource.bind('change', renderPage);\n dataSource.page(1);\n } else {\n renderPage();\n }\n return result.promise();\n };\n }\n extend(true, kendo.data, {\n TreeListDataSource: TreeListDataSource,\n TreeListModel: TreeListModel\n });\n ui.plugin(TreeList);\n ui.plugin(TreeListPager);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}