{"version":3,"file":"kendo.pivotgrid.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendopivotgrid","js","this","Navigation","options","tabIndex","root","eventHandlers","update","prototypeAccessors","elements","configurable","first","last","current","get","Array","from","querySelectorAll","selectors","join","querySelector","all","length","find","el","matches","prototype","start","this$1$1","loop","eventType","mouseEvents","ev","target","Element","closest","call","undefined","addEventListener","eventType$1","keyboardEvents","key","stop","removeEventListener","focusElement","element","previous","removeAttribute","classList","remove","setAttribute","String","focus","preventScroll","Object","defineProperties","scrollableValuesSel","scrollableColumnHeaderSel","scrollableRowHeaderSel","emptyCellSel","tableSel","cellSel","scrollables","selectors$1","onEnter","nav","icon","index","indexOf","click","preventDefault","tryScrollLeft","scrollable","elToScroll","offsetLeft","scrollLeft","tryScrollRight","offsetWidth","tryScrollUp","scrollTop","offsetTop","tryScrollDown","offsetHeight","scrollTo","scrollFunc","forEach","scroll","tableMap","table","rows","colsCount","cells","map","c","colSpan","reduce","prev","cur","row","r","curColSpan","colSp","rowSp","rowSpan","ind","findIndex","val","curInd","navigationMap","columnHeader","rowHeader","values","emptyCell","emptyCellRow","fill","i","push","concat","i$1","ctrlKey","metaKey","cellAt","pos","targetPos","getTargetPos","nextPos","next","keyboardEvents$1","keydown","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","o","_target","_ev","nextElementSibling","HTMLElement","parentNode","setTimeout","confHeader","Enter","Space","Home","ro","Boolean","x","End","mouseEvents$1","hasAttribute","PivotGridNavigation","apply","arguments","__proto__","create","constructor","$","undefined$1","kendo","window","ui","encode","htmlEncode","Class","Comparer","data","Widget","DataSource","outerWidth","_outerWidth","outerHeight","_outerHeight","common","pivotgrid","fetchDiscover","normalizeFilter","Query","normalizeSort","toString","identity","extend","keys","isFunction","fetchData","createLocalDataState","createDataTree","sumAggregate","averageAggregate","minAggregate","maxAggregate","createDataState","toColumns","toRows","toTree","toData","headersReducer","RESIZE","READ","CHANGE","ERROR","PROGRESS","MEASURES","STATERESET","AUTO","DIV","NS","ROW_TOTAL_KEY","DATABINDING","DATABOUND","EXPANDMEMBER","HEADERTEMPLATE","ref","id","headerClass","colspan","rowspan","expandable","iconClass","role","expanded","COLLAPSEMEMBER","STATE_EXPANDED_ICONNAME","STATE_EXPANDED_SELECTOR","STATE_COLLAPSED_ICONNAME","HEADER_TEMPLATE","member","caption","name","PIVOTGRID_TREND_ICONS_MAP","KPISTATUS_TEMPLATE","dataItem","value","KPITREND_TEMPLATE","DATACELL_TEMPLATE","fmtValue","tableStyles","normalizeMeasures","measure","descriptor","descriptors","d","type","normalizeMembers","expand","slice","normalizeName","accumulateMembers","accumulator","rootTuple","tuple","level","idx","children","members","stringify","buildPath","descriptorsForAxes","tuples","result","k","JSON","parse","descriptorsForMembers","axis","measures","firstTuple","tupleMembers","found","j","getName","hierarchy","addMissingPathMembers","tupletoSearch","findExistingTuple","tupleToDescriptors","createAggregateGetter","m","measureGetter","getter","field","aggregatorContext","state","aggregate","isNumber","isNaN","isDate","getTime","loadLocalData","params","deferred","that","originalData","reader","_pristineData","columnSettings","_createSettings","columnAxes","rowSettings","rowAxes","stateArgs","dataTree","dataField","columnsData","filter","item","reverse","fields","sort","flattenSortDescriptors","_saveState","trigger","resolve","dir","split","pop","createLocalMeasure","format","measureMap","sum","average","min","max","bind","uniqueName","functions","count","PivotCubeBuilder","init","dimensions","_normalizeDescriptors","keyField","_rootTuples","rootNames","measureAggregators","parts","aggregatorsLength","dimensionsSchema","measureIdx","rootNamesLength","levelName","levelNum","hasChildren","parentName","_sortMap","sortDescriptors","flattenTree","mapItem","sortedMaps","sortTree","directParentName","fillSortTree","sortItemsTree","flatColumns","_expandedTuples","currentKeys","memberInfo","expandedNames","accumulatorKeys","isEmptyObject","_findExpandedMember","uniquePath","names","expandedIdx","_asTuples","rootInfo","expandedInfo","_measuresInfo","rowAxis","aggregateNames","resultFuncs","formats","_toDataArray","measuresInfo","rowKeys","columnKeys","aggregates","n","column","columnKey","columnMeasureNames","rowMeasureNamesLength","rowMeasureNames","rowLength","columnLength","items","_addData","resultFunc","ordinal","_matchDescriptors","getters","parentField","expectedValue","_calculateAggregate","totalItem","aggregator","_processColumns","columns","rowTotal","updateColumn","path","columnIndex","childrenMap","_measureAggregators","defaultAggregate","measureDescriptors","aggregators","toLowerCase","Error","_buildGetters","_parseDescriptors","parsedDescriptors","parseDescriptors","getRootNames","mapNames","_filter","expr","filters","operator","_normalizeFilter","logic","process","measuresRowAxis","measuresAxis","columnDescriptors","rowDescriptors","rowValue","rowIdx","rowDescriptor","rowName","columnsInfo","rowsInfo","aggregatedData","columnGetters","rowGetters","processed","expandedColumns","expandedRows","hasExpandedRows","axes","PivotTransport","transport","discover","read","destroy","success","catalog","connection","cube","PivotDataSourceV2","schema","cubes","catalogs","hierarchies","levels","cubeSchema","_cubeSchema","fn","transportOptions","_online","XmlaTransportV2","_columns","_rows","_measuresAxis","_measures","serverSorting","serverPaging","serverFiltering","serverGrouping","serverAggregates","normalizeAxis","_mergeState","fetch","callback","_data","_query","done","settings","dimensionsSettings","displayValueFunc","sortValueFunc","displayValue","sortValue","defaultHierarchy","restoreMeasure","memberType","distinct","levelUniqueName","childrenCardinality","isPrevented","_params","Deferred","newDataState","response","_preventRefresh","error","err","promise","measureAxes","schemaMeasures","command","restrictions","catalogName","cubeName","schemaKPIs","schemaDimensions","schemaHierarchies","dimensionName","dimensionUniqueName","schemaLevels","hierarchyName","hierarchyUniqueName","schemaCubes","schemaCatalogs","schemaMembers","_columnTuples","_rowTuples","_view","PivotDataSource","cubeBuilder","_skipNormalize","_axes","memberUniqueName","schemaData","dataGetter","_rawData","treeOp","_clearAxesData","query","rowsAxisDescriptors","columnsAxisDescriptors","_expandPath","origin","other","memberToExpand","_lastExpanded","_descriptorsForAxis","_process","e","page","pageSize","group","_updateLocalData","expandColumn","expandRow","_processResult","processedData","_requestData","columnIndexes","rowIndexes","resultAxis","axisToSkip","hasColumnTuples","_rowMeasures","_normalizeTuples","_columnMeasures","_normalizeData","columnsLength","rowsLength","validateAxis","sourceTuples","targetTuples","columnIdx","dataIdx","targetColumnsLength","membersCount","measuresLength","tupleIndex","adjustDataByColumn","adjustDataByRow","_mergeAxes","_readData","newData","_createTuple","buildRoot","Number","_hasRoot","source","isRoot","sourceAxes","startIndex","columnMeasures","rowMeasures","oldRowsLength","newRowsLength","oldColumnsLength","newColumnsLength","rowIndex","dataIndex","calcIndex","indices","buildDataIndices","Math","prepareDataOnColumns","parseSource","mergedColumns","mergeTuples","targetIndex","sourceIndex","parseInt","prepareDataOnRows","mergedRows","findDataIndex","parsedRoot","memberIndex","offset","_mergeColumnData","_mergeRowData","toAdd","toJSON","drop","splice","_observe","_ranges","_addRange","_total","_pristineTotal","memberIdx","roots","indexes","tupleName","_addMissingDataItems","metadata","addEmptyDataItem","_normalizeOrdinals","lastOrdinal","converter","_handleCustomErrors","status","reject","kpis","sortFunction","currentItem","newAxis","collection","queue","shift","counter","targetMembers","sourceMembers","equalTuples","second","equal","toFind","membersLength","addMembers","len","findParentMember","parentMember","parentPath","normalizeTupleMeasures","measureIndex","measurePosition","spliceIndex","baseHierarchyPath","memberName","expandMemberDescriptor","sortDescriptor","sortDescriptorForMember","crossJoin","crossJoinCommand","tmp","measureNames","rootName","rootLength","l","child","serializeMembers","crossJoinCommands","dataSource","filterFunctionFormats","contains","doesnotcontain","startswith","endswith","eq","neq","serializeExpression","expression","serializeOptions","parentTagName","capitalize","replace","toUpperCase","xmlaDiscoverCommands","convertersMap","serializeFilters","properties","Catalog","XmlaTransport","RemoteTransport","originalOptions","url","setup","dataType","contentType","parameterMap","ajax","fetchOptions","noop","then","catch","asArray","object","translateAxis","captionGetter","unameGetter","levelNameGetter","levelNumGetter","childrenGetter","hierarchyGetter","parentNameGetter","Member","schemaDataReaderMap","description","groupName","displayFolder","defaultFormat","goal","trend","statusGraphic","trendGraphic","defaultMember","orderingProperty","xmlaReaderMethods","XmlaDataReader","XmlDataReader","_extend","methodName","option","xml","errors","fault","faultstring","faultcode","ordinalGetter","valueGetter","fmtValueGetter","_mapSchema","obj","transports","xmla","readers","removeExpr","expressions","PivotSettingTarget","addClass","_refreshHandler","refresh","template","actions","enabled","emptyTemplate","_sortable","on","action","attr","hasClass","sortable","sortDirection","currentTarget","filterable","fieldMenu","PivotFieldMenu","messages","setting","empty","setDataSource","unbind","kendoSortable","connectWith","hint","cursor","change","add","move","newIndex","_isKPI","validate","isMeasure","isArray","sortExpressions","_sort","skipExpr","allowUnsort","html","sortIcon","_sortIcon","off","sortExpr","PivotSettingTargetV2","parent","text","navigatable","chip","keyCode","DELETE","BACKSPACE","configuratorNavigation","DOWN","altKey","shiftKey","LEFT","RIGHT","UP","otherTarget","PivotFieldMenuV2","events","_applyState","_sortState","_stateFilter","_savedState","_cancelChanges","deepExtend","_initialState","_redraw","_state","newState","modifyInit","blur","_savedFilter","_emptyState","enable","removeClass","_targetsHTML","menuenabled","PivotConfiguratorButton","_element","_attachEvents","configurator","setOptions","toggle","pivot","pivotEl","toggleClass","getKendoPivotGridV2","_setContentWidth","_updateDimensions","PivotContainer","_addClasses","configuratorPosition","className","PivotGridV2","_dataSource","_bindConfigurator","_ariaId","guid","_wrapper","_columnHeadersWrapper","_rowHeadersWrapper","_contentWrapper","wrapper","append","_columnBuilder","ColumnRowBuilder","columnHeaderTemplate","ariaId","_rowBuilder","rowHeaderTemplate","_contentBuilder","ContentBuilderV2","dataCellTemplate","_scrollable","button","is","isRow","paths","eventName","reducerPayLoad","payload","tree","getTree","currentAxes","newHeaders","autoBind","_aria","_initPivotGridNavigation","notify","height","columnWidth","emptyCellLabel","_windowResizeHandler","navigation","firstCell","_matchAriaAttributes","rowHeaderRows","rowHeaderCols","acc","curr","getAttribute","colHeaderRows","colHeaderCells","valueTableCells","firstColHeadersRow","firstColHeaderRowCellsIds","valueCellsIds","filterAndMap","idParts","cell","cellColIndex","colHeaderCellsIds","headerCellColIndex","headerCellColspan","arr","predicate","mapper","_progressHandler","_errorHandler","_requestStart","_error","_resize","div","scrollbar","style","setProperty","document","createElement","cssText","innerHTML","body","appendChild","scrollWidth","removeChild","columnsHeader","rowsHeader","_wheelScroll","delta","wheelDeltaY","one","css","_progress","progress","contentTable","columnTable","rowTable","width","kendoPivotConfiguratorV2","cellInfoByElement","cellInfo","contentBuilder","columnsCount","rowsCount","columnTuple","hash","rowTuple","lastFocusedCellID","_activeElement","lastCellIdWithTabIndex","setTuples","build","setRowColumnInfo","columnHeaderLeafs","getHeaderLeafs","rowHeaderLeafs","columnHeaderBreadth","getBreadth","rowHeaderDepth","plugin","PivotGrid","columnBuilder","rowBuilder","support","isRtl","_createLayout","ColumnBuilder","RowBuilder","ContentBuilder","_templates","builder","eventArgs","parseJSON","request","childrenLoaded","maxChildren","reorderable","kpiStatusTemplate","kpiTrendTemplate","measureFields","columnFields","rowFields","columnTemplate","rowTemplate","dataTemplate","useWithBlock","kendoPivotConfigurator","columnInfo","rowInfo","view","measuresTarget","rowsTarget","columnsTarget","clearTimeout","_headerReflowTimeout","_stateResetHandler","_stateReset","reset","_measureFields","_createSettingTarget","pivotOptions","getIcons","_initSettingTargets","layoutTable","leftContainer","rightContainer","gridWrapper","wrap","content","columnsHeaderTree","dom","Tree","rowsHeaderTree","contentTree","firstChild","_setSectionsWidth","_setSectionsHeight","_setContentHeight","_columnHeaderReflow","browser","mozilla","leftColumn","measureFieldsHeight","columnFieldsHeight","rowFieldsHeight","innerHeight","columnsHeight","padding","firstRowHeight","secondRowHeight","calculatedWidth","minWidth","ceil","_resetColspan","skipScrollbar","clientHeight","_colspan","_layoutTimeout","_axisMeasures","hasMeasure","columnAxis","render","_indexes","touchScroller","contentResized","movable","sender","y","htmlNode","createMetadata","maxMembers","addColElements","addRowElements","addColumCell","rowEl","rowItem","cellEl","total","headerTemplate","columnHeaderRows","treeData","headerRows","headerLeafs","breadth","rowHeaderBreadth","_tree","_breadth","_headerLeafs","tbody","_tbody","colgroup","_colGroup","_rowLength","_buildRows","_normalize","cellsLength","cellIdx","tupleAll","_rowIndex","_row","parentRow","rowKey","notFirst","collapsed","measureRow","_cell","_content","childRow","childrenLength","allCell","nextMember","cellChildren","memberCollapsed","rootLevelNum","cellIconEl","maxcolSpan","allRow","firstMemberName","tuplePath","hasChild","axisInfo","axisInfoMember","skipChildren","firstEmpty","_buildRow","templateInfo","cellContent","startIdx","PivotExcelExporter","widget","columnHeaderTable","rowHeaderTable","columnHeaderLength","rowHeaderLength","autoWidth","_cells","background","color","contentRows","columnRows","rowRows","_freezePane","colSplit","rowSplit","workbook","sheets","freezePane","PivotExcelMixin","proto","excel","saveAsExcel","proxyURL","fileName","book","ooxml","Workbook","toDataURLAsync","dataURI","saveAs","forceProxy","PDFMixin","_drawPDF","_drawPDFShadow","avoidLinks","pdf","jQuery"],"sources":["kendo.pivotgrid.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.pivot.common.js'), require('kendo.dom.js'), require('kendo.data.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.pivot.common', 'kendo.dom', 'kendo.data', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendopivotgrid = global.kendopivotgrid || {}, global.kendopivotgrid.js = factory()));\n})(this, (function () {\n var Navigation = function Navigation(options) {\n this.tabIndex = 0;\n this.root = null;\n this.eventHandlers = {};\n this.update = function () { };\n this.tabIndex = options.tabIndex;\n };\n\n var prototypeAccessors = { elements: { configurable: true },first: { configurable: true },last: { configurable: true },current: { configurable: true } };\n prototypeAccessors.elements.get = function () {\n return this.root ? Array.from(this.root.querySelectorAll(this.selectors.join(','))) : [];\n };\n prototypeAccessors.first.get = function () {\n return (this.root && this.root.querySelector(this.selectors.join(','))) || null;\n };\n prototypeAccessors.last.get = function () {\n var all = this.elements;\n return all[all.length - 1] || null;\n };\n prototypeAccessors.current.get = function () {\n return this.elements.find(function (el) { return el.matches(':focus'); });\n };\n Navigation.prototype.start = function start (root) {\n var this$1$1 = this;\n\n this.root = root;\n var loop = function ( eventType ) {\n if (this$1$1.mouseEvents[eventType]) {\n this$1$1.eventHandlers[eventType] = (function (ev) {\n var target = ev.target instanceof Element && ev.target.closest(this$1$1.selectors.join(','));\n if (target) {\n this$1$1.mouseEvents[eventType].call(undefined, target, this$1$1, ev);\n }\n });\n root.addEventListener(eventType, this$1$1.eventHandlers[eventType]);\n }\n };\n\n for (var eventType in this$1$1.mouseEvents) loop( eventType );\n var loop$1 = function ( eventType ) {\n if (this$1$1.keyboardEvents[eventType$1]) {\n this$1$1.eventHandlers[eventType$1] = (function (ev) {\n var target = ev.target instanceof Element && ev.target.closest(this$1$1.selectors.join(','));\n var key = ev.key === ' ' ? 'Space' : ev.key;\n if (target && this$1$1.keyboardEvents[eventType$1][key]) {\n this$1$1.keyboardEvents[eventType$1][key].call(undefined, target, this$1$1, ev);\n }\n });\n root.addEventListener(eventType$1, this$1$1.eventHandlers[eventType$1]);\n }\n };\n\n for (var eventType$1 in this$1$1.keyboardEvents) loop$1( eventType );\n };\n Navigation.prototype.stop = function stop () {\n if (this.root) {\n for (var eventType in this.eventHandlers) {\n if (this.eventHandlers[eventType]) {\n this.root.removeEventListener(eventType, this.eventHandlers[eventType]);\n }\n }\n }\n this.root = null;\n };\n Navigation.prototype.focusElement = function focusElement (element, previous) {\n if (element) {\n if (previous) {\n previous.removeAttribute('tabindex');\n previous.classList.remove('k-focus');\n }\n element.setAttribute('tabindex', String(this.tabIndex));\n element.focus({ preventScroll: true });\n }\n };\n\n Object.defineProperties( Navigation.prototype, prototypeAccessors );\n\n var scrollableValuesSel = '.k-pivotgrid .k-pivotgrid-values';\n var scrollableColumnHeaderSel = '.k-pivotgrid .k-pivotgrid-column-headers';\n var scrollableRowHeaderSel = '.k-pivotgrid .k-pivotgrid-row-headers';\n var emptyCellSel = '.k-pivotgrid > .k-pivotgrid-empty-cell';\n var tableSel = 'table.k-pivotgrid-table';\n var cellSel = '.k-pivotgrid-cell';\n var scrollables = [scrollableValuesSel, scrollableColumnHeaderSel, scrollableRowHeaderSel].join(',');\n var selectors$1 = [\n emptyCellSel,\n [scrollableColumnHeaderSel, tableSel, cellSel].join(' '),\n [scrollableRowHeaderSel, tableSel, cellSel].join(' '),\n [scrollableValuesSel, tableSel, cellSel].join(' ')\n ];\n var onEnter = function (target, nav, ev) {\n var icon = target.querySelector('.k-icon, .k-svg-icon');\n if (icon) {\n var index = nav.elements.indexOf(target);\n nav.update = function () {\n nav.focusElement(nav.elements[index], null);\n nav.update = function () { };\n };\n icon.click();\n ev.preventDefault();\n }\n };\n var tryScrollLeft = function (target, scrollable, elToScroll) {\n if (target.offsetLeft < scrollable.scrollLeft) {\n elToScroll.scrollLeft = target.offsetLeft;\n }\n };\n var tryScrollRight = function (target, scrollable, elToScroll) {\n if (target.offsetLeft + target.offsetWidth > scrollable.scrollLeft + scrollable.offsetWidth &&\n target.offsetWidth < scrollable.offsetWidth) {\n elToScroll.scrollLeft = target.offsetLeft + target.offsetWidth - scrollable.offsetWidth;\n }\n };\n var tryScrollUp = function (target, scrollable, elToScroll) {\n if (scrollable.scrollTop && target.offsetTop < scrollable.scrollTop) {\n elToScroll.scrollTop = target.offsetTop;\n }\n };\n var tryScrollDown = function (target, scrollable, elToScroll) {\n if (target.offsetTop + target.offsetHeight > scrollable.scrollTop + scrollable.offsetHeight &&\n target.offsetHeight < scrollable.offsetHeight) {\n elToScroll.scrollTop = target.offsetTop + target.offsetHeight - scrollable.offsetHeight;\n }\n };\n var scrollTo = function (target, root, scrollFunc) {\n var elToScroll = root.querySelector(scrollableValuesSel);\n var scrollable = target && target.closest(scrollables);\n if (!elToScroll || !scrollable || !target) {\n return;\n }\n scrollFunc.forEach(function (scroll) { return scroll(target, scrollable, elToScroll); });\n };\n var tableMap = function (table) {\n var rows = Array.from(table.rows);\n var colsCount = Array.from((rows && rows[0] && rows[0].cells) || [])\n .map(function (c) { return c.colSpan; })\n .reduce(function (prev, cur) { return prev + cur; }, 0);\n var map = rows.map(function () { return new Array(colsCount); });\n rows.forEach(function (row, r) {\n var curColSpan = 0;\n Array.from(row.cells).forEach(function (c) {\n for (var colSp = 0; colSp < c.colSpan; colSp++) {\n for (var rowSp = 0; rowSp < c.rowSpan; rowSp++) {\n var ind = map[r + rowSp].findIndex(function (val, curInd) { return curInd >= curColSpan && !val; });\n map[r + rowSp][ind] = c;\n }\n curColSpan++;\n }\n });\n });\n return map;\n };\n var navigationMap = function (root) {\n var columnHeader = tableMap(root.querySelector([scrollableColumnHeaderSel, tableSel].join(' ')));\n var rowHeader = tableMap(root.querySelector([scrollableRowHeaderSel, tableSel].join(' ')));\n var values = tableMap(root.querySelector([scrollableValuesSel, tableSel].join(' ')));\n var emptyCell = root.querySelector(emptyCellSel);\n var emptyCellRow = new Array(rowHeader[0].length).fill(emptyCell);\n var map = [];\n for (var i = 0; i < columnHeader.length; i++) {\n map.push(emptyCellRow.concat(columnHeader[i]));\n }\n for (var i$1 = 0; i$1 < rowHeader.length; i$1++) {\n map.push(rowHeader[i$1].concat(values[i$1]));\n }\n return map;\n };\n var getTargetPos = function (map, target) {\n for (var r = 0; r < map.length; r++) {\n for (var c = 0; c < map[r].length; c++) {\n if (map[r][c] === target) {\n return [r, c];\n }\n }\n }\n return [-1, -1];\n };\n var ctrlKey = function (ev) { return ev.ctrlKey || ev.metaKey; };\n var cellAt = function (root, target, pos) {\n var map = navigationMap(root);\n var targetPos = getTargetPos(map, target);\n var nextPos = [targetPos[0] + pos[0], targetPos[1] + pos[1]];\n var next = map[nextPos[0]] && map[nextPos[0]][nextPos[1]];\n while (next && next === target) {\n nextPos = [nextPos[0] + pos[0], nextPos[1] + pos[1]];\n next = map[nextPos[0]] && map[nextPos[0]][nextPos[1]];\n }\n return next;\n };\n var keyboardEvents$1 = {\n keydown: {\n ArrowLeft: function (target, nav, ev) {\n ev.preventDefault();\n var next = cellAt(nav.root, target, [0, -1]);\n nav.focusElement(next, target);\n scrollTo(next, nav.root, [tryScrollRight, tryScrollLeft, tryScrollDown, tryScrollUp]);\n },\n ArrowRight: function (target, nav, ev) {\n ev.preventDefault();\n var next = cellAt(nav.root, target, [0, 1]);\n nav.focusElement(next, target);\n scrollTo(next, nav.root, [tryScrollLeft, tryScrollRight, tryScrollDown, tryScrollUp]);\n },\n ArrowUp: function (target, nav, ev) {\n ev.preventDefault();\n var next = cellAt(nav.root, target, [-1, 0]);\n nav.focusElement(next, target);\n scrollTo(next, nav.root, [tryScrollRight, tryScrollLeft, tryScrollDown, tryScrollUp]);\n },\n ArrowDown: function (target, nav, ev) {\n ev.preventDefault();\n var next = cellAt(nav.root, target, [1, 0]);\n nav.focusElement(next, target);\n scrollTo(next, nav.root, [tryScrollRight, tryScrollLeft, tryScrollUp, tryScrollDown]);\n },\n o: function (_target, nav, _ev) {\n if (!nav.root) {\n return;\n }\n // FIX: ADDED manually to fix an issue where depending on the order of the config element and button\n // you either can open the configurator with Ctrl+O, or you can close the configurator with ESC\n var next = nav.root.nextElementSibling;\n if (!(next && next instanceof HTMLElement)) {\n return;\n }\n\n if (!next.matches('div.k-pivotgrid-configurator-button')) {\n next = next.nextElementSibling;\n }\n\n if (next && next instanceof HTMLElement && next.matches('div.k-pivotgrid-configurator-button')) {\n if (!nav.root.parentNode || nav.root.parentNode.querySelector(\".k-pivotgrid-configurator.k-hidden\")) {\n next.click();\n }\n\n setTimeout(function () {\n if (nav.root.parentNode) {\n var confHeader = nav.root.parentNode.querySelector('.k-pivotgrid-configurator-content .k-form-field .k-fields-list-wrapper .k-treeview');\n if (confHeader instanceof HTMLElement) {\n confHeader.setAttribute('tabindex', String(nav.tabIndex));\n confHeader.focus();\n }\n }\n }, 0);\n }\n },\n Enter: onEnter,\n Space: onEnter,\n Home: function (target, nav, ev) {\n var map = navigationMap(nav.root);\n var ctrl = ctrlKey(ev);\n var row = ctrl ? map[0] : (map.find(function (ro) { return Boolean(ro.find(function (x) { return x === target; })); }) || []);\n var next = row[0];\n if (next) {\n nav.focusElement(next, target);\n scrollTo(next, nav.root, [tryScrollRight, tryScrollLeft, tryScrollDown, tryScrollUp]);\n ev.preventDefault();\n }\n },\n End: function (target, nav, ev) {\n var map = navigationMap(nav.root);\n var ctrl = ctrlKey(ev);\n var row = ctrl ? map[map.length - 1] : (map.find(function (ro) { return Boolean(ro.find(function (x) { return x === target; })); }) || []);\n var next = row && row[row.length - 1] || null;\n if (next) {\n nav.focusElement(next, target);\n scrollTo(next, nav.root, [tryScrollLeft, tryScrollRight, tryScrollUp, tryScrollDown]);\n ev.preventDefault();\n }\n }\n }\n };\n var mouseEvents$1 = {\n click: function (target, nav) {\n if (target && target instanceof HTMLElement) {\n var prev = nav.elements.find(function (c) { return c.hasAttribute('tabindex'); }) || null;\n nav.focusElement(target, prev);\n }\n }\n };\n /**\n * The PivotGrid keyboard navigation functionality.\n *\n * Usage:\n *\n * On Initialize\n * const navigation = new PivotGridNavigation({ tabindex: 0 });\n *\n * Turn on\n * navigation.start(rootDomElement);\n *\n * On After Update\n * navigation.update();\n *\n * On Destroy / Turn off\n * navigation.stop();\n */\n var PivotGridNavigation = /*@__PURE__*/(function (Navigation) {\n function PivotGridNavigation() {\n Navigation.apply(this, arguments);\n this.selectors = selectors$1;\n this.mouseEvents = mouseEvents$1;\n this.keyboardEvents = keyboardEvents$1;\n }\n\n if ( Navigation ) PivotGridNavigation.__proto__ = Navigation;\n PivotGridNavigation.prototype = Object.create( Navigation && Navigation.prototype );\n PivotGridNavigation.prototype.constructor = PivotGridNavigation;\n\n return PivotGridNavigation;\n }(Navigation));\n\n var selectors = [\n '.k-pivotgrid-configurator-content .k-form-field .k-fields-list-wrapper .k-treeview',\n '.k-pivotgrid-configurator-content .k-chip',\n '.k-pivotgrid-configurator-actions button'\n ];\n var onEscape = function (_target, nav, ev) {\n if (ev.target instanceof HTMLElement) {\n if (nav.root) {\n var pivot = nav.root.previousElementSibling;\n var confButton = nav.root.nextElementSibling;\n var pivotCell = Array.from(pivot instanceof HTMLElement ? pivot.querySelectorAll('[tabindex]') : []).find(function (c) { return c.tabIndex >= 0; });\n if (pivotCell instanceof HTMLElement) {\n pivotCell.focus();\n if (confButton instanceof HTMLElement) {\n confButton.click();\n }\n }\n }\n }\n };\n var navigate = function (target, nav, ev, dir) {\n ev.preventDefault();\n var all = nav.elements;\n var index = all.indexOf(target) + dir;\n if (index < 0) {\n index = all.length - 1;\n }\n nav.focusElement(all[index % all.length], target);\n };\n var onDelete = function (target, nav, ev) {\n if (ev.target instanceof HTMLElement) {\n var deleteButton = ev.target.querySelector('.k-icon.k-i-x-circle, .k-svg-icon.k-svg-i-x-circle');\n if (deleteButton instanceof HTMLElement) {\n ev.preventDefault();\n navigate(target, nav, ev, -1);\n }\n }\n };\n var keyboardEvents = {\n keydown: {\n Tab: function (target, nav, ev) {\n navigate(target, nav, ev, ev.shiftKey ? -1 : 1);\n },\n Escape: onEscape,\n Delete: onDelete,\n Backspace: onDelete\n }\n };\n var mouseEvents = {\n click: function (target, nav) {\n if (target && target instanceof HTMLElement) {\n var prev = nav.elements.find(function (c) { return c.hasAttribute('tabindex'); }) || null;\n nav.focusElement(target, prev);\n }\n }\n };\n /**\n * The PivotGrid Configurator keyboard navigation functionality.\n *\n * Usage:\n *\n * On Initialize\n * const navigation = new ConfiguratorNavigation({ tabindex: 0 });\n *\n * Turn on\n * navigation.start(rootDomElement);\n *\n * On After Update\n * navigation.update();\n *\n * On Destroy / Turn off\n * navigation.stop();\n */\n var ConfiguratorNavigation = /*@__PURE__*/(function (Navigation) {\n function ConfiguratorNavigation() {\n Navigation.apply(this, arguments);\n this.selectors = selectors;\n this.mouseEvents = mouseEvents;\n this.keyboardEvents = keyboardEvents;\n }\n\n if ( Navigation ) ConfiguratorNavigation.__proto__ = Navigation;\n ConfiguratorNavigation.prototype = Object.create( Navigation && Navigation.prototype );\n ConfiguratorNavigation.prototype.constructor = ConfiguratorNavigation;\n\n return ConfiguratorNavigation;\n }(Navigation));\n\n var __meta__ = {\n id: \"pivotgrid\",\n name: \"PivotGrid\",\n category: \"web\",\n description: \"The PivotGrid widget is a data summarization tool.\",\n depends: [ \"dom\", \"data\", \"data.xml\", \"sortable\", \"pivot.common\", \"icons\" ],\n features: [{\n id: \"pivotgrid-configurator\",\n name: \"Configurator\",\n description: \"The PivotConfigurator widget allows the user to select data slices displayed in PivotGrid\",\n depends: [ \"pivot.configurator\" ]\n }, {\n id: \"pivotgrid-filtering\",\n name: \"Filtering\",\n description: \"Support for filtering\",\n depends: [ \"pivot.fieldmenu\" ]\n }, {\n id: \"pivotgrid-excel-export\",\n name: \"Excel export\",\n description: \"Export pivot grid data as Excel spreadsheet\",\n depends: [ \"ooxml\" ]\n }, {\n id: \"pivotgrid-pdf-export\",\n name: \"PDF export\",\n description: \"Export pivot grid data as PDF\",\n depends: [ \"pdf\", \"drawing\" ]\n }, {\n id: \"mobile-scroller\",\n name: \"Mobile scroller\",\n description: \"Support for kinetic scrolling in mobile device\",\n depends: [ \"mobile.scroller\" ]\n }]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n encode = kendo.htmlEncode,\n Class = kendo.Class,\n Comparer = kendo.data.Comparer,\n Widget = ui.Widget,\n DataSource = kendo.data.DataSource,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n common = window.kendo.pivotgrid.common,\n fetchDiscover = common.fetchDiscover,\n normalizeFilter = kendo.data.Query.normalizeFilter,\n normalizeSort = kendo.data.Query.normalizeSort,\n toString = {}.toString,\n identity = function(o) { return o; },\n map = $.map,\n extend = $.extend,\n keys = kendo.keys,\n isFunction = kendo.isFunction,\n fetchData = common.fetchData,\n createLocalDataState = common.createLocalDataState,\n createDataTree = common.createDataTree,\n sumAggregate = common.sumAggregate,\n averageAggregate = common.averageAggregate,\n minAggregate = common.minAggregate,\n maxAggregate = common.maxAggregate,\n createDataState = common.createDataState,\n toColumns = common.toColumns,\n toRows = common.toRows,\n toTree = common.toTree,\n toData = common.toData,\n headersReducer = common.headersReducer,\n RESIZE = \"resize\",\n READ = \"read\",\n CHANGE = \"change\",\n ERROR = \"error\",\n REQUESTSTART = \"requestStart\",\n PROGRESS = \"progress\",\n REQUESTEND = \"requestEnd\",\n MEASURES = \"Measures\",\n STATERESET = \"stateReset\",\n AUTO = \"auto\",\n DIV = \"
\",\n NS = \".kendoPivotGrid\",\n ROW_TOTAL_KEY = \"__row_total__\",\n DATABINDING = \"dataBinding\",\n DATABOUND = \"dataBound\",\n EXPANDMEMBER = \"expandMember\",\n HEADERTEMPLATE = function (ref) {\n var id = ref.id;\n var key = ref.key;\n var headerClass = ref.headerClass;\n var colspan = ref.colspan;\n var rowspan = ref.rowspan;\n var expandable = ref.expandable;\n var iconClass = ref.iconClass;\n var role = ref.role;\n var expanded = ref.expanded;\n\n return \"\" +\n \"\" + (expandable ? kendo.ui.icon($(''), { icon: (\"chevron-\" + (encode(iconClass))) }) : '') +\n '';\n },\n COLLAPSEMEMBER = \"collapseMember\",\n STATE_EXPANDED_ICONNAME = \"caret-alt-down\",\n STATE_EXPANDED_SELECTOR = \".k-i-\" + STATE_EXPANDED_ICONNAME + \",.k-svg-i-\" + STATE_EXPANDED_ICONNAME,\n STATE_COLLAPSED_ICONNAME = \"caret-alt-right\",\n HEADER_TEMPLATE = function (ref) {\n var member = ref.member;\n\n return (\"\" + (encode(member.caption || member.name)) + \"\");\n },\n PIVOTGRID_TREND_ICONS_MAP = {\n \"kpi-trend-decrease\": \"caret-alt-down\",\n \"kpi-trend-increase\": \"caret-alt-up\",\n \"kpi-trend-equal\": \"minus\",\n },\n KPISTATUS_TEMPLATE = function (ref) {\n var dataItem = ref.dataItem;\n\n return kendo.ui.icon($((\"\")), { icon: (\"kpi-status-\" + (dataItem.value > 0 ? \"open\" : dataItem.value < 0 ? \"deny\" : \"hold\")) });\n },\n KPITREND_TEMPLATE = function (ref) {\n var dataItem = ref.dataItem;\n\n return kendo.ui.icon($((\"\")), { icon: PIVOTGRID_TREND_ICONS_MAP[(\"kpi-trend-\" + (dataItem.value > 0 ? \"increase\" : dataItem.value < 0 ? \"decrease\" : \"equal\"))] });\n },\n DATACELL_TEMPLATE = function (ref) {\n var dataItem = ref.dataItem;\n\n return (\"\" + (dataItem ? encode(dataItem.fmtValue || dataItem.value) || \" \" : \" \"));\n },\n LAYOUT_TABLE = '' +\n '' +\n '' +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
';\n var AXIS_ROWS = \"rows\";\n var AXIS_COLUMNS = \"columns\";\n\n var tableStyles = {\n tableRow: \"k-table-row\",\n header: \"k-header k-table-th\",\n headerTable: \"k-grid-header-table k-table k-table-md\",\n table: \"k-table k-table-md\",\n contentTable: \"k-grid-table k-table k-table-md\",\n tbody: \"k-table-tbody\",\n tableCell: \"k-table-td\"\n };\n\n function normalizeMeasures(measure) {\n var descriptor = typeof measure === \"string\" ? [{ name: measure }] : measure;\n var descriptors = toString.call(descriptor) === \"[object Array]\" ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return map(descriptors, function(d) {\n if (typeof d === \"string\") {\n return { name: d };\n }\n return $.extend(true, d, { name: d.name, type: d.type });\n });\n }\n\n function normalizeMembers(member) {\n var descriptor = typeof member === \"string\" ? [{ name: [member], expand: false }] : member;\n var descriptors = toString.call(descriptor) === \"[object Array]\" ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return map(descriptors, function(d) {\n if (typeof d === \"string\") {\n return { name: [d], expand: false };\n }\n return { name: (toString.call(d.name) === \"[object Array]\" ? d.name.slice() : [d.name]), expand: d.expand };\n });\n }\n\n function normalizeName(name) {\n if (name.indexOf(\" \") !== -1) {\n name = '[\"' + name + '\"]';\n }\n\n return name;\n }\n\n function accumulateMembers(accumulator, rootTuple, tuple, level) {\n var idx, length;\n var children;\n var member;\n\n if (!tuple) {\n tuple = rootTuple;\n }\n\n if (!level) {\n level = 0;\n }\n\n member = tuple.members[level];\n\n if (!member || member.measure) { //return if no member or measure\n return;\n }\n\n children = member.children;\n length = children.length;\n\n if (tuple === rootTuple) {\n accumulator[kendo.stringify([member.name])] = !!length;\n } else if (length) {\n accumulator[kendo.stringify(buildPath(tuple, level))] = true;\n }\n\n if (length) {\n for (idx = 0; idx < length; idx++) {\n accumulateMembers(accumulator, rootTuple, children[idx], level);\n }\n }\n\n accumulateMembers(accumulator, rootTuple, tuple, level + 1);\n }\n\n function descriptorsForAxes(tuples) {\n var result = {};\n\n if (tuples.length) {\n accumulateMembers(result, tuples[0]);\n }\n\n var descriptors = [];\n for (var k in result) {\n descriptors.push({ name: JSON.parse(k), expand: result[k] });\n }\n\n return descriptors;\n }\n\n function addMissingPathMembers(members, axis) {\n var tuples = axis.tuples || [];\n var firstTuple = tuples[0];\n\n if (firstTuple && members.length < firstTuple.members.length) {\n var tupleMembers = firstTuple.members;\n\n for (var idx = 0; idx < tupleMembers.length; idx++) {\n if (tupleMembers[idx].measure) {\n continue;\n }\n\n var found = false;\n for (var j = 0; j < members.length; j++) {\n if (getName(members[j]).indexOf(tupleMembers[idx].hierarchy) === 0) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n members.push({ name: [tupleMembers[idx].name], expand: false }); //calling normalize here to make name from string to array\n }\n }\n }\n }\n\n function tupleToDescriptors(tuple) {\n var result = [];\n var members = tuple.members;\n\n for (var idx = 0; idx < members.length; idx++) {\n if (members[idx].measure) {\n continue;\n }\n\n //make tuple name an array\n result.push({ name: [members[idx].name], expand: members[idx].children.length > 0 });\n }\n\n return result;\n }\n\n function descriptorsForMembers(axis, members, measures) {\n axis = axis || {};\n\n addMissingPathMembers(members, axis);\n\n if (measures.length > 1) {\n members.push({\n name: MEASURES,\n measure: true,\n children: normalizeMembers(measures)\n });\n }\n\n var tupletoSearch = {\n members: members\n };\n\n if (axis.tuples) {\n var result = findExistingTuple(axis.tuples, tupletoSearch);\n if (result.tuple) {\n members = tupleToDescriptors(result.tuple);\n }\n }\n\n return members;\n }\n\n function createAggregateGetter(m) {\n var measureGetter = kendo.getter(m.field, true);\n return function(aggregatorContext, state) {\n return m.aggregate(measureGetter(aggregatorContext.dataItem), state, aggregatorContext);\n };\n }\n\n function isNumber(val) {\n return typeof val === \"number\" && !isNaN(val);\n }\n\n function isDate(val) {\n return val && val.getTime;\n }\n\n function getScollWidth() {\n var scrollbar = 0;\n var div;\n if (document && document.createElement) {\n div = document.createElement('div');\n\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n\n scrollbar = div.offsetWidth - div.scrollWidth;\n\n document.body.removeChild(div);\n }\n\n return scrollbar;\n }\n\n function loadLocalData(data, params, deferred) {\n var that = this;\n var originalData = (that.reader.data(data) || []).slice(0);\n if (originalData && !that._pristineData) {\n that._pristineData = originalData;\n }\n var columnSettings = that._createSettings(params.columnAxes);\n var rowSettings = that._createSettings(params.rowAxes);\n var measures = that.measures();\n var dataTree = createDataTree(originalData, rowSettings, columnSettings, measures, { dataField: \"aggregate\", columnsData: \"columns\" }, that.filter() || []);\n\n var stateArgs = {\n dataTree: dataTree,\n columnSettings: columnSettings,\n rowSettings: rowSettings,\n columnAxes: params.columnAxes,\n rowAxes: params.rowAxes,\n measures: measures.map(function(item) { return item; }).reverse(),\n fields: { dataField: \"aggregate\", columnsData: \"columns\" },\n sort: flattenSortDescriptors(params.sort || [])\n };\n\n that._saveState(createLocalDataState(stateArgs));\n that.trigger(CHANGE);\n deferred.resolve();\n }\n\n function flattenSortDescriptors(descriptors) {\n var result = [];\n for (var i = 0; i < descriptors.length; i++) {\n result.push({\n dir: descriptors[i].dir,\n field: descriptors[i].field.split(\".\").pop()\n });\n }\n return result;\n }\n\n function createLocalMeasure(field, key, format, aggregate) {\n var formatFunc = function(value) { return kendo.format(this.format, value); };\n var measureMap = {\n \"sum\": sumAggregate,\n \"average\": averageAggregate,\n \"min\": minAggregate,\n \"max\": maxAggregate,\n };\n var valueFunc = function(item) { return item[this.field]; };\n var measure = {\n value: valueFunc.bind({ field: field }),\n aggregate: measureMap[aggregate],\n caption: key,\n uniqueName: key,\n type: 2,\n name: [key]\n };\n if (format) {\n measure.aggregate.format = formatFunc.bind({ format: format });\n }\n\n return measure;\n }\n\n function getIcons(sortIcon, options, pivotOptions) {\n var sortable = options.sortable,\n filterable = options.filterable,\n reorderable = pivotOptions.reorderable,\n result = \"\";\n\n if (sortable) {\n result += sortIcon ? (\"\" + (kendo.ui.icon(sortIcon + \"-sm\")) + \"\") : '';\n }\n\n if (filterable || sortable) {\n result += \"\" + (kendo.ui.icon(\"more-vertical\")) + \"\";\n }\n if (reorderable) {\n result += \"\" + (kendo.ui.icon(\"x\")) + \"\";\n }\n\n return result;\n }\n\n var functions = {\n sum: function(value, state) {\n var accumulator = state.accumulator;\n\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n\n return accumulator;\n },\n count: function(value, state) {\n return (state.accumulator || 0) + 1;\n },\n average: {\n aggregate: function(value, state) {\n var accumulator = state.accumulator;\n\n if (state.count === undefined$1) {\n state.count = 0;\n }\n\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n\n if (isNumber(value)) {\n state.count++;\n }\n\n return accumulator;\n },\n result: function(state) {\n var accumulator = state.accumulator;\n\n if (isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n\n return accumulator;\n }\n },\n max: function(value, state) {\n var accumulator = state.accumulator;\n\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function(value, state) {\n var accumulator = state.accumulator;\n\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n\n var PivotCubeBuilder = Class.extend({\n init: function(options) {\n this.options = extend({}, this.options, options);\n this.dimensions = this._normalizeDescriptors(\"field\", this.options.dimensions);\n this.measures = this._normalizeDescriptors(\"name\", this.options.measures);\n },\n\n _normalizeDescriptors: function(keyField, descriptors) {\n descriptors = descriptors || {};\n var fields = {};\n var field;\n\n if (toString.call(descriptors) === \"[object Array]\") {\n for (var idx = 0, length = descriptors.length; idx < length; idx++) {\n field = descriptors[idx];\n if (typeof field === \"string\") {\n fields[field] = {};\n } else if (field[keyField]) {\n fields[field[keyField]] = field;\n }\n }\n descriptors = fields;\n }\n\n return descriptors;\n },\n\n _rootTuples: function(rootNames, measureAggregators) {\n var aggregatorsLength = measureAggregators.length || 1;\n var dimensionsSchema = this.dimensions || [];\n var root, name, parts;\n var measureIdx = 0;\n var idx;\n\n var rootNamesLength = rootNames.length;\n var result = [];\n var keys = [];\n\n if (rootNamesLength || measureAggregators.length) {\n for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n\n root = { members: [] };\n\n for (idx = 0; idx < rootNamesLength; idx++) {\n name = rootNames[idx];\n parts = name.split(\"&\");\n\n root.members[root.members.length] = {\n children: [],\n caption: (dimensionsSchema[name] || {}).caption || \"All\",\n name: name,\n levelName: name,\n levelNum: \"0\",\n hasChildren: true,\n parentName: parts.length > 1 ? parts[0] : undefined$1,\n hierarchy: name\n };\n }\n\n if (aggregatorsLength > 1) {\n root.members[root.members.length] = {\n children: [],\n caption: (measureAggregators[measureIdx]).caption,\n name: measureAggregators[measureIdx].descriptor.name,\n levelName: \"MEASURES\",\n levelNum: \"0\",\n hasChildren: false,\n parentName: undefined$1,\n hierarchy: \"MEASURES\"\n };\n }\n\n result[result.length] = root;\n }\n\n keys.push(ROW_TOTAL_KEY);\n }\n\n return {\n keys: keys,\n tuples: result\n };\n },\n\n _sortMap: function(map, sortDescriptors) {\n var sortedMaps = [];\n var sortTree = [];\n var flattenTree = [];\n var mapItem;\n var key;\n\n for (key in map) {\n if (!map[key].directParentName) {\n sortTree.push($.extend({}, { name: key, parentName: map[key].parentName }));\n }\n }\n\n //if there are no root this means that something is expanding\n //and we should only sort that part of the tree\n if (!sortTree.length) {\n for (key in map) {\n sortTree.push($.extend({}, { name: key, parentName: map[key].parentName }));\n }\n }\n\n fillSortTree(sortTree, map);\n\n // fill tree recursive\n for (var i = 0; i < sortDescriptors.length; i++) {\n sortItemsTree(sortDescriptors[i].field.split(\".\").pop(), sortTree, Comparer.create({ field: \"name\", dir: sortDescriptors[i].dir }));\n }\n\n flattenTree = flatColumns(sortTree);\n\n //we need to flatten the structure so the tuples can build correctly\n for (var j = 0; j < flattenTree.length; j++) {\n mapItem = map[flattenTree[j].name];\n mapItem.index = j;\n sortedMaps[j] = mapItem;\n }\n\n return sortedMaps;\n },\n\n _expandedTuples: function(map, expanded, measureAggregators, sortDescriptors) {\n var aggregatorsLength = measureAggregators.length || 1;\n var dimensionsSchema = this.dimensions || [];\n var measureIdx;\n var tuple;\n\n var key;\n var mapItem;\n var current;\n var currentKeys;\n var accumulator = [];\n var accumulatorKeys = [];\n var memberInfo;\n\n var expandedNames;\n var parts;\n var name;\n var idx;\n\n if (sortDescriptors && sortDescriptors.length && !$.isEmptyObject(map)) {\n map = this._sortMap(map, sortDescriptors);\n }\n\n for (key in map) {\n mapItem = map[key];\n memberInfo = this._findExpandedMember(expanded, mapItem.uniquePath);\n\n current = accumulator[memberInfo.index] || [];\n currentKeys = accumulatorKeys[memberInfo.index] || [];\n\n expandedNames = memberInfo.member.names;\n\n for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n tuple = { members: [] };\n for (idx = 0; idx < expandedNames.length; idx++) {\n if (idx === memberInfo.member.expandedIdx) {\n tuple.members[tuple.members.length] = {\n children: [],\n caption: mapItem.value,\n name: mapItem.name,\n hasChildren: false,\n levelNum: 1,\n levelName: mapItem.parentName + mapItem.name,\n parentName: mapItem.parentName,\n hierarchy: mapItem.parentName + mapItem.name\n };\n\n if (measureIdx === 0) {\n currentKeys.push(buildPath(tuple, idx).join(\"\"));\n }\n } else {\n name = expandedNames[idx];\n parts = name.split(\"&\");\n tuple.members[tuple.members.length] = {\n children: [],\n caption: (dimensionsSchema[name] || {}).caption || \"All\",\n name: name,\n levelName: name,\n levelNum: \"0\",\n hasChildren: true,\n parentName: parts.length > 1 ? parts[0] : undefined$1,\n hierarchy: name\n };\n }\n }\n\n if (aggregatorsLength > 1) {\n tuple.members[tuple.members.length] = {\n children: [],\n caption: measureAggregators[measureIdx].caption,\n name: measureAggregators[measureIdx].descriptor.name,\n levelName: \"MEASURES\",\n levelNum: \"0\",\n hasChildren: true,\n parentName: undefined$1,\n hierarchy: \"MEASURES\"\n };\n }\n\n current[current.length] = tuple;\n }\n\n accumulator[memberInfo.index] = current;\n accumulatorKeys[memberInfo.index] = currentKeys;\n }\n\n return {\n keys: accumulatorKeys,\n tuples: accumulator\n };\n },\n\n _findExpandedMember: function(members, parentName) {\n for (var idx = 0; idx < members.length; idx++) {\n if (members[idx].uniquePath === parentName) {\n return {\n member: members[idx],\n index: idx\n };\n }\n }\n },\n\n _asTuples: function(map, descriptor, measureAggregators, sortDescriptors) {\n measureAggregators = measureAggregators || [];\n\n var rootInfo = this._rootTuples(descriptor.root, measureAggregators);\n var expandedInfo = this._expandedTuples(map, descriptor.expanded, measureAggregators, sortDescriptors);\n\n return {\n keys: [].concat.apply(rootInfo.keys, expandedInfo.keys),\n tuples: [].concat.apply(rootInfo.tuples, expandedInfo.tuples)\n };\n },\n\n _measuresInfo: function(measures, rowAxis) {\n var idx = 0;\n var length = measures && measures.length;\n\n var aggregateNames = [];\n var resultFuncs = {};\n var formats = {};\n\n var descriptors = (this.measures || {});\n var measure;\n var name;\n\n for (; idx < length; idx++) {\n name = measures[idx].descriptor.name;\n measure = descriptors[name] || {};\n\n aggregateNames.push(name);\n\n if (measure.result) {\n resultFuncs[name] = measure.result;\n }\n\n if (measure.format) {\n formats[name] = measure.format;\n }\n }\n\n return {\n names: aggregateNames,\n formats: formats,\n resultFuncs: resultFuncs,\n rowAxis: rowAxis\n };\n },\n\n _toDataArray: function(map, measuresInfo, rowKeys, columnKeys) {\n var result = [];\n\n var aggregates;\n var name, i, j, k, n;\n var row, column, columnKey;\n\n var rowMeasureNamesLength = 1;\n var rowMeasureNames = [];\n var columnMeasureNames;\n\n var rowLength = rowKeys.length || 1;\n var columnLength = columnKeys.length || 1;\n\n if (measuresInfo.rowAxis) {\n rowMeasureNames = measuresInfo.names;\n rowMeasureNamesLength = rowMeasureNames.length;\n } else {\n columnMeasureNames = measuresInfo.names;\n }\n\n for (i = 0; i < rowLength; i++) {\n row = map[rowKeys[i] || ROW_TOTAL_KEY];\n\n for (n = 0; n < rowMeasureNamesLength; n++) {\n if (measuresInfo.rowAxis) {\n columnMeasureNames = [rowMeasureNames[n]];\n }\n\n for (j = 0; j < columnLength; j++) {\n columnKey = columnKeys[j] || ROW_TOTAL_KEY;\n column = row.items[columnKey];\n\n if (columnKey === ROW_TOTAL_KEY) {\n aggregates = row.aggregates;\n } else {\n aggregates = column ? column.aggregates : {};\n }\n\n for (k = 0; k < columnMeasureNames.length; k++) {\n name = columnMeasureNames[k];\n this._addData(result, aggregates[name], measuresInfo.formats[name], measuresInfo.resultFuncs[name]);\n }\n }\n }\n }\n\n return result;\n },\n\n _addData: function(result, value, format, resultFunc) {\n var fmtValue = \"\";\n var ordinal;\n\n if (value) {\n value = resultFunc ? resultFunc(value) : value.accumulator;\n fmtValue = format ? kendo.format(format, value) : value;\n }\n\n ordinal = result.length;\n\n result[ordinal] = {\n ordinal: ordinal,\n value: value || \"\",\n fmtValue: fmtValue\n };\n },\n\n _matchDescriptors: function(dataItem, descriptor, getters) {\n var parts;\n var parentField;\n var expectedValue;\n\n var names = descriptor.names;\n var idx = descriptor.expandedIdx;\n var value;\n\n while (idx > 0) {\n parts = names[--idx].split(\"&\");\n if (parts.length > 1) {\n parentField = parts[0];\n expectedValue = parts[1];\n\n value = getters[parentField](dataItem);\n value = (value !== undefined$1 && value !== null) ? value.toString() : value;\n\n if (value != expectedValue) {\n return false;\n }\n }\n }\n return true;\n },\n\n _calculateAggregate: function(measureAggregators, aggregatorContext, totalItem) {\n var result = {};\n var state;\n var name;\n\n for (var measureIdx = 0; measureIdx < measureAggregators.length; measureIdx++) {\n name = measureAggregators[measureIdx].descriptor.name;\n state = totalItem.aggregates[name] || { };\n state.accumulator = measureAggregators[measureIdx].aggregator(aggregatorContext, state);\n result[name] = state;\n }\n\n return result;\n },\n\n _processColumns: function(measureAggregators, descriptors, getters, columns, aggregatorContext, rowTotal, state, updateColumn) {\n var value;\n var descriptor;\n var column;\n var totalItem;\n var key, name, parentName, path;\n var dataItem = aggregatorContext.dataItem;\n var idx = 0;\n\n for (; idx < descriptors.length; idx++) {\n descriptor = descriptors[idx];\n\n //checks whether the dataItem is relevant to the descriptors\n if (!this._matchDescriptors(dataItem, descriptor, getters)) {\n continue;\n }\n\n path = descriptor.names.slice(0, descriptor.expandedIdx).join(\"\");\n name = descriptor.names[descriptor.expandedIdx];\n\n\n value = getters[name](dataItem);\n value = (value !== undefined$1 && value !== null) ? value.toString() : value;\n\n parentName = name;\n name = name + \"&\" + value;\n key = path + name;\n\n column = columns[key] || {\n index: state.columnIndex,\n parentName: parentName,\n name: name,\n directParentName: path.indexOf(\"&\") !== -1 ? path : \"\",\n uniquePath: path + parentName,\n childrenMap: {},\n value: value\n };\n\n if (path && columns[path] && !columns[path].childrenMap[path + parentName + \"&\" + value]) {\n columns[path].childrenMap[path + parentName + \"&\" + value] = true;\n }\n\n totalItem = rowTotal.items[key] || {\n aggregates: {}\n };\n\n rowTotal.items[key] = {\n index: column.index,\n aggregates: this._calculateAggregate(measureAggregators, aggregatorContext, totalItem)\n };\n\n if (updateColumn) {\n if (!columns[key]) {\n state.columnIndex++;\n }\n columns[key] = column;\n }\n }\n },\n\n _measureAggregators: function(options) {\n var measureDescriptors = options.measures || [];\n var measures = this.measures || {};\n var aggregators = [];\n var descriptor, measure, idx, length;\n var defaultAggregate, aggregate;\n\n if (measureDescriptors.length) {\n for (idx = 0, length = measureDescriptors.length; idx < length; idx++) {\n descriptor = measureDescriptors[idx];\n measure = measures[descriptor.name];\n defaultAggregate = null;\n\n if (measure) {\n aggregate = measure.aggregate;\n if (typeof aggregate === \"string\") {\n defaultAggregate = functions[aggregate.toLowerCase()];\n\n if (!defaultAggregate) {\n throw new Error(\"There is no such aggregate function\");\n }\n\n measure.aggregate = defaultAggregate.aggregate || defaultAggregate;\n measure.result = defaultAggregate.result;\n }\n\n\n aggregators.push({\n descriptor: descriptor,\n caption: measure.caption,\n result: measure.result,\n aggregator: createAggregateGetter(measure)\n });\n }\n }\n } else {\n aggregators.push({\n descriptor: { name: \"default\" },\n caption: \"default\",\n aggregator: function() { return 1; }\n });\n }\n\n return aggregators;\n },\n\n _buildGetters: function(names) {\n var result = {};\n var parts;\n var name;\n\n for (var idx = 0; idx < names.length; idx++) {\n name = names[idx];\n parts = name.split(\"&\");\n\n if (parts.length > 1) {\n result[parts[0]] = kendo.getter(parts[0], true);\n } else {\n result[name] = kendo.getter(normalizeName(name), true);\n }\n }\n\n return result;\n },\n\n _parseDescriptors: function(descriptors) {\n var parsedDescriptors = parseDescriptors(descriptors);\n var rootNames = getRootNames(parsedDescriptors.root);\n var expanded = parsedDescriptors.expanded;\n var result = [];\n\n for (var idx = 0; idx < expanded.length; idx++) {\n result.push(mapNames(expanded[idx].name, rootNames));\n }\n\n return {\n root: rootNames,\n expanded: result\n };\n },\n\n _filter: function(data, filter) {\n if (!filter) {\n return data;\n }\n\n var expr;\n var idx = 0;\n var filters = filter.filters;\n\n for (; idx < filters.length; idx++) {\n expr = filters[idx];\n\n if (expr.operator === \"in\") {\n filters[idx] = this._normalizeFilter(expr);\n }\n }\n\n return new kendo.data.Query(data).filter(filter).data;\n },\n\n _normalizeFilter: function(filter) {\n var value = filter.value.split(\",\");\n var result = [];\n\n if (!value.length) {\n return value;\n }\n\n for (var idx = 0; idx < value.length; idx++) {\n result.push({\n field: filter.field,\n operator: \"eq\",\n value: value[idx]\n });\n }\n\n return {\n logic: \"or\",\n filters: result\n };\n },\n\n process: function(data, options) {\n data = data || [];\n options = options || {};\n\n data = this._filter(data, options.filter);\n\n var measures = options.measures || [];\n\n var measuresRowAxis = options.measuresAxis === \"rows\";\n\n var columnDescriptors = options.columns || [];\n var rowDescriptors = options.rows || [];\n\n if (!columnDescriptors.length && rowDescriptors.length && (!measures.length || (measures.length && measuresRowAxis))) {\n columnDescriptors = rowDescriptors;\n rowDescriptors = [];\n measuresRowAxis = false;\n }\n\n if (!columnDescriptors.length && !rowDescriptors.length) {\n measuresRowAxis = false;\n }\n\n if (!columnDescriptors.length && measures.length) {\n columnDescriptors = normalizeMembers(options.measures);\n }\n\n columnDescriptors = this._parseDescriptors(columnDescriptors);\n rowDescriptors = this._parseDescriptors(rowDescriptors);\n\n var aggregatedData = {};\n var columns = {};\n var rows = {};\n\n var rowValue;\n var state = { columnIndex: 0 };\n\n var measureAggregators = this._measureAggregators(options);\n\n var columnGetters = this._buildGetters(columnDescriptors.root);\n var rowGetters = this._buildGetters(rowDescriptors.root);\n\n var processed = false;\n\n var expandedColumns = columnDescriptors.expanded;\n var expandedRows = rowDescriptors.expanded;\n\n var dataItem;\n var aggregatorContext;\n var hasExpandedRows = expandedRows.length !== 0;\n\n var rowIdx, rowDescriptor, rowName, rowTotal;\n var key, path, parentName, value;\n var columnsInfo, rowsInfo;\n var length = data.length;\n var idx = 0;\n\n if (columnDescriptors.root.length || rowDescriptors.root.length) {\n processed = true;\n\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n\n aggregatorContext = {\n dataItem: dataItem,\n index: idx\n };\n\n rowTotal = aggregatedData[ROW_TOTAL_KEY] || {\n items: {},\n aggregates: {}\n };\n\n this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, rowTotal, state, !hasExpandedRows);\n\n rowTotal.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, rowTotal);\n aggregatedData[ROW_TOTAL_KEY] = rowTotal;\n\n for (rowIdx = 0; rowIdx < expandedRows.length; rowIdx++) {\n rowDescriptor = expandedRows[rowIdx];\n\n if (!this._matchDescriptors(dataItem, rowDescriptor, rowGetters)) {\n this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, { items: {}, aggregates: {} }, state, true);\n continue;\n }\n\n path = rowDescriptor.names.slice(0, rowDescriptor.expandedIdx).join(\"\");\n rowName = rowDescriptor.names[rowDescriptor.expandedIdx];\n\n parentName = rowName;\n\n rowValue = rowGetters[rowName](dataItem);\n rowValue = rowValue !== undefined$1 ? rowValue.toString() : rowValue;\n\n rowName = rowName + \"&\" + rowValue;\n key = path + rowName;\n\n rows[key] = {\n uniquePath: path + parentName,\n parentName: parentName,\n name: rowName,\n value: rowValue\n };\n\n value = aggregatedData[key] || {\n items: {},\n aggregates: {}\n };\n\n this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, value, state, true);\n\n value.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, value);\n aggregatedData[key] = value;\n }\n }\n }\n\n if (processed && length) {\n if (measureAggregators.length > 1 && (!options.columns || !options.columns.length)) {\n columnDescriptors = {\n root: [],\n expanded: []\n };\n }\n\n columnsInfo = this._asTuples(columns, columnDescriptors, measuresRowAxis ? [] : measureAggregators, options.sort ? options.sort : []);\n rowsInfo = this._asTuples(rows, rowDescriptors, measuresRowAxis ? measureAggregators : [], options.sort ? options.sort : []);\n\n columns = columnsInfo.tuples;\n rows = rowsInfo.tuples;\n\n aggregatedData = this._toDataArray(aggregatedData, this._measuresInfo(measureAggregators, measuresRowAxis), rowsInfo.keys, columnsInfo.keys);\n } else {\n aggregatedData = columns = rows = [];\n }\n\n return {\n axes: {\n columns: { tuples: columns },\n rows: { tuples: rows }\n },\n data: aggregatedData\n };\n }\n });\n\n var PivotTransport = Class.extend({\n init: function(options, transport) {\n this.transport = transport;\n this.options = transport.options || {};\n\n if (!this.transport.discover) {\n if (isFunction(options.discover)) {\n this.discover = options.discover;\n }\n }\n },\n read: function(options) {\n return this.transport.read(options);\n },\n update: function(options) {\n return this.transport.update(options);\n },\n create: function(options) {\n return this.transport.create(options);\n },\n destroy: function(options) {\n return this.transport.destroy(options);\n },\n discover: function(options) {\n if (this.transport.discover) {\n return this.transport.discover(options);\n }\n options.success({});\n },\n catalog: function(val) {\n var options = this.options || {};\n\n if (val === undefined$1) {\n return (options.connection || {}).catalog;\n\n }\n\n var connection = options.connection || {};\n connection.catalog = val;\n\n this.options.connection = connection;\n $.extend(this.transport.options, { connection: connection });\n },\n cube: function(val) {\n var options = this.options || {};\n\n if (val === undefined$1) {\n return (options.connection || {}).cube;\n }\n\n var connection = options.connection || {};\n connection.cube = val;\n\n this.options.connection = connection;\n extend(true, this.transport.options, { connection: connection });\n }\n });\n\n var PivotDataSourceV2 = DataSource.extend({\n init: function(options) {\n\n var cube = ((options || {}).schema || {}).cube;\n\n var schema = {\n axes: identity,\n cubes: identity,\n catalogs: identity,\n measures: identity,\n dimensions: identity,\n hierarchies: identity,\n levels: identity,\n members: identity\n };\n\n if (cube) {\n this.cubeSchema = $.extend(schema, this._cubeSchema(cube));\n }\n\n DataSource.fn.init.call(this, extend(true, {}, {\n //schema: schema\n }, options));\n\n var transportOptions = this.options.transport || {};\n if ((this.options.type || \"xmla\").toLowerCase() === \"xmla\") {\n this._online = true;\n this.transport = new XmlaTransportV2(transportOptions);\n } else {\n this.transport = new PivotTransport(this.options.transport || {}, this.transport);\n }\n\n this._columns = normalizeMembers(this.options.columns);\n this._rows = normalizeMembers(this.options.rows);\n\n var measures = this.cubeSchema ? this.cubeSchema.measures() : this.options.measures || [];\n\n if (toString.call(measures) === \"[object Object]\") {\n this._measuresAxis = measures.axis || \"columns\";\n measures = measures.values || [];\n }\n\n this._measures = normalizeMeasures(measures);\n },\n\n options: {\n serverSorting: true,\n serverPaging: true,\n serverFiltering: true,\n serverGrouping: true,\n serverAggregates: true\n },\n\n axes: function() {\n return {\n columns: normalizeAxis(this.columns()),\n rows: normalizeAxis(this.rows())\n };\n },\n\n catalog: function(val) {\n if (val === undefined$1) {\n return this.transport.catalog();\n }\n\n this.transport.catalog(val);\n this._mergeState({});// clears current state\n this.read();\n },\n\n cube: function(val) {\n if (val === undefined$1) {\n return this.transport.cube();\n }\n\n this.transport.cube(val);\n this._mergeState({});// clears current state\n this.read();\n },\n\n measuresAxis: function() {\n return this._measuresAxis || \"columns\";\n },\n\n fetch: function(callback) {\n var that = this;\n if (this._data === undefined$1 || this._data.length === 0) {\n var fn = function() {\n if (isFunction(callback)) {\n callback.call(that);\n }\n };\n\n return this._query().done(fn);\n }\n },\n\n _createSettings: function(axes) {\n var settings = [];\n var key;\n var dimensions = this.cubeSchema.dimensionsSettings();\n var displayValueFunc = function(item) { return item[this.key]; };\n var sortValueFunc = function(value) { return value; };\n for (var i = 0; i < axes.length; i++) {\n key = axes[i].name[0];\n settings.push({\n key: key,\n displayValue: displayValueFunc.bind({ key: key }),\n sortValue: sortValueFunc,\n caption: (dimensions[key] || {}).caption || key\n });\n }\n return settings;\n },\n\n _cubeSchema: function(cube) {\n return {\n dimensionsSettings: function() {\n return cube.dimensions;\n },\n dimensions: function() {\n var result = [];\n var dimensions = cube.dimensions;\n\n for (var key in dimensions) {\n result.push({\n name: key,\n caption: dimensions[key].caption || key,\n uniqueName: key,\n defaultHierarchy: key,\n type: 1\n });\n }\n\n if (cube.measures) {\n result.push({\n name: MEASURES,\n caption: MEASURES,\n uniqueName: MEASURES,\n type: 2\n });\n }\n\n return result;\n },\n restoreMeasure: function(measures, measure) {\n for (var i = 0; i < measures.length; i++) {\n if (!measures[i].aggregate) {\n measures[i].aggregate = measure.aggregate;\n measures[i].value = measure.value;\n measures[i].caption = measure.caption;\n measures[i].uniqueName = measure.uniqueName;\n measures[i].type = 2;\n }\n }\n },\n measures: function() {\n var result = [];\n var measures = cube.measures;\n\n for (var key in measures) {\n result.push(createLocalMeasure(measures[key].field, key, measures[key].format, measures[key].aggregate));\n }\n\n return result;\n },\n memberType: function(name) {\n var getter = kendo.getter(normalizeName(name), true);\n var data = this.options.data || this._pristineData || [];\n if (!data.length) {\n return null;\n }\n\n return typeof getter(data[0]);\n }.bind(this),\n members: function(name) {\n var data = this.options.data || this._pristineData || [];\n var result = [];\n var distinct = {};\n var getter;\n var value;\n var idx = 0;\n\n if (name.indexOf(\"[(ALL)]\") !== -1) {\n return [\n {\n caption: cube.dimensions[name.split(\".\")[0]].caption || name,\n levelUniqueName: name,\n name: name,\n childrenCardinality: 1,\n uniqueName: name\n }\n ];\n }\n\n getter = kendo.getter(normalizeName(name), true);\n\n for (; idx < data.length; idx++) {\n value = getter(data[idx]);\n if ((value || value === 0 || value === false) && !distinct[value]) {\n distinct[value] = true;\n\n result.push({\n caption: value + \"\",\n name: value + \"\",\n childrenCardinality: 0,\n uniqueName: value\n });\n }\n }\n\n return result;\n }.bind(this)\n };\n },\n\n read: function(data) {\n var that = this;\n var isPrevented = that.trigger(REQUESTSTART, { type: READ });\n var params = that._params(data);\n var deferred = $.Deferred();\n if (!isPrevented) {\n that.trigger(PROGRESS);\n\n if (that.options.data) {\n loadLocalData.call(that, that.options.data, params, deferred);\n } else if ((this.options.type || \"xmla\").toLowerCase() === \"xmla\") {\n that.transport.read({\n data: params,\n success: function(newDataState) {\n that._saveState(newDataState);\n that.trigger(REQUESTEND, { response: newDataState, type: READ });\n that.trigger(CHANGE);\n if (that._preventRefresh) {\n that._preventRefresh = false;\n }\n deferred.resolve();\n },\n error: function(err) {\n that.trigger(ERROR, { error: err });\n }\n });\n } else {\n that.transport.read({\n success: function(data) {\n loadLocalData.call(that, data, params, deferred);\n },\n error: function(err) {\n that.trigger(ERROR, { error: err });\n }\n });\n }\n }\n return deferred.promise();\n },\n\n _params: function(data) {\n var that = this;\n var options = DataSource.fn._params.call(that, data);\n\n options = extend({\n columnAxes: JSON.parse(JSON.stringify(that._columns)),\n rowAxes: JSON.parse(JSON.stringify(that._rows)),\n measuresAxis: that.measuresAxis(),\n measureAxes: that._measures\n }, options);\n\n if ((this.options.type || \"\").toLowerCase() === \"xmla\") {\n options.connection = that.options.transport.connection;\n }\n\n if (options.filter) {\n options.filter = normalizeFilter(options.filter);\n options.filter = (options.filter || {}).filters;\n }\n\n if (options.sort) {\n options.sort = normalizeSort(options.sort);\n }\n\n return options;\n },\n\n discover: function(options) {\n var that = this,\n transport = that.transport;\n\n if (transport.discover) {\n return transport.discover(options);\n }\n },\n\n schemaMeasures: function() {\n var that = this;\n return that.discover(\n {\n command: \"schemaMeasures\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }, function(response) {\n return response;\n });\n },\n\n schemaKPIs: function() {\n var that = this;\n\n return that.discover(\n {\n command: \"schemaKPIs\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }, function(response) {\n return response;\n });\n },\n\n schemaDimensions: function() {\n var that = this;\n\n return that.discover(\n {\n command: \"schemaDimensions\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }, function(response) {\n return response;\n });\n },\n\n schemaHierarchies: function(dimensionName) {\n var that = this;\n\n return that.discover({\n command: \"schemaHierarchies\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube(),\n dimensionUniqueName: dimensionName\n }\n }, function(response) {\n return response;\n });\n },\n\n schemaLevels: function(hierarchyName) {\n var that = this;\n\n return that.discover({\n command: \"schemaLevels\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube(),\n hierarchyUniqueName: hierarchyName\n }\n }, function(response) {\n return response;\n });\n },\n\n schemaCubes: function() {\n var that = this;\n\n return that.discover({\n command: \"schemaCubes\",\n restrictions: {\n catalogName: that.transport.catalog()\n }\n }, function(response) {\n return response;\n });\n },\n\n schemaCatalogs: function() {\n var that = this;\n\n return that.discover({\n command: \"schemaCatalogs\"\n }, function(response) {\n return response;\n });\n },\n\n schemaMembers: function(restrictions) {\n var that = this;\n\n return that.discover({\n command: \"schemaMembers\",\n restrictions: extend({\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }, restrictions)\n }, function(response) {\n return response;\n });\n },\n\n _saveState: function(state) {\n var that = this;\n\n that._columnTuples = state.columns;\n that._rowTuples = state.rows;\n that._view = that._data = state.data;\n },\n\n columns: function(val) {\n if (val === undefined$1) {\n return this._columns;\n }\n\n this._columns = normalizeMembers(val);\n this.read();\n },\n\n rows: function(val) {\n if (val === undefined$1) {\n return this._rows;\n }\n\n this._rows = normalizeMembers(val);\n\n this.read();\n },\n\n measures: function(val) {\n if (val === undefined$1) {\n return this._measures;\n }\n\n this._measures = normalizeMeasures(val);\n\n this.read();\n },\n\n _mergeState: function(options) {\n options = DataSource.fn._mergeState.call(this, options);\n\n return options;\n },\n\n _query: function(options) {\n var that = this;\n var params = extend({}, {\n sort: that.sort(),\n measuresAxis: that.measuresAxis(),\n filter: that.filter()\n }, options);\n this._mergeState(params);\n\n return this.read();\n },\n });\n\n var PivotDataSource = DataSource.extend({\n init: function(options) {\n var cube = ((options || {}).schema || {}).cube;\n var measuresAxis = \"columns\";\n var measures;\n\n var schema = {\n axes: identity,\n cubes: identity,\n catalogs: identity,\n measures: identity,\n dimensions: identity,\n hierarchies: identity,\n levels: identity,\n members: identity\n };\n\n if (cube) {\n schema = $.extend(schema, this._cubeSchema(cube));\n this.cubeBuilder = new PivotCubeBuilder(cube);\n }\n\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: schema\n }, options));\n\n this.transport = new PivotTransport(this.options.transport || {}, this.transport);\n\n this._columns = normalizeMembers(this.options.columns);\n this._rows = normalizeMembers(this.options.rows);\n\n measures = this.options.measures || [];\n\n if (toString.call(measures) === \"[object Object]\") {\n measuresAxis = measures.axis || \"columns\";\n measures = measures.values || [];\n }\n\n this._measures = normalizeMeasures(measures);\n this._measuresAxis = measuresAxis;\n\n this._skipNormalize = 0;\n this._axes = {};\n },\n\n _cubeSchema: function(cube) {\n return {\n dimensions: function() {\n var result = [];\n var dimensions = cube.dimensions;\n\n for (var key in dimensions) {\n result.push({\n name: key,\n caption: dimensions[key].caption || key,\n uniqueName: key,\n defaultHierarchy: key,\n type: 1\n });\n }\n\n if (cube.measures) {\n result.push({\n name: MEASURES,\n caption: MEASURES,\n uniqueName: MEASURES,\n type: 2\n });\n }\n\n return result;\n },\n hierarchies: function() {\n return [];\n },\n measures: function() {\n var result = [];\n var measures = cube.measures;\n\n for (var key in measures) {\n result.push({\n name: key,\n caption: key,\n uniqueName: key,\n aggregator: key\n });\n }\n\n return result;\n },\n members: function(response, restrictions) {\n var name = restrictions.levelUniqueName || restrictions.memberUniqueName;\n var schemaData = this.options.schema.data;\n var dataGetter = isFunction(schemaData) ? schemaData : kendo.getter(schemaData, true);\n var data = (this.options.data && dataGetter(this.options.data)) || this._rawData || [];\n var result = [];\n var getter;\n var value;\n var idx = 0;\n var distinct = {};\n\n if (name) {\n name = name.split(\".\")[0];\n }\n\n if (!restrictions.treeOp) {\n result.push({\n caption: cube.dimensions[name].caption || name,\n childrenCardinality: \"1\",\n dimensionUniqueName: name,\n hierarchyUniqueName: name,\n levelUniqueName: name,\n name: name,\n uniqueName: name\n });\n\n return result;\n }\n\n getter = kendo.getter(normalizeName(name), true);\n\n for (; idx < data.length; idx++) {\n value = getter(data[idx]);\n if ((value || value === 0) && !distinct[value]) {\n distinct[value] = true;\n\n result.push({\n caption: value,\n childrenCardinality: \"0\",\n dimensionUniqueName: name,\n hierarchyUniqueName: name,\n levelUniqueName: name,\n name: value,\n uniqueName: value\n });\n }\n }\n\n return result;\n }.bind(this)\n };\n },\n\n options: {\n serverSorting: true,\n serverPaging: true,\n serverFiltering: true,\n serverGrouping: true,\n serverAggregates: true\n },\n\n catalog: function(val) {\n if (val === undefined$1) {\n return this.transport.catalog();\n }\n\n this.transport.catalog(val);\n this._mergeState({});// clears current state\n this._axes = {};\n this.data([]);\n },\n\n cube: function(val) {\n if (val === undefined$1) {\n return this.transport.cube();\n }\n\n this.transport.cube(val);\n this._axes = {};\n this._mergeState({});// clears current state\n this.data([]);\n },\n\n axes: function() {\n return this._axes;\n },\n\n columns: function(val) {\n if (val === undefined$1) {\n return this._columns;\n }\n\n this._skipNormalize += 1;\n this._clearAxesData = true;\n\n this._columns = normalizeMembers(val);\n this.query({\n columns: val,\n rows: this.rowsAxisDescriptors(),\n measures: this.measures(),\n sort: this.sort(),\n filter: this.filter()\n });\n },\n\n rows: function(val) {\n if (val === undefined$1) {\n return this._rows;\n }\n\n this._skipNormalize += 1;\n this._clearAxesData = true;\n\n this._rows = normalizeMembers(val);\n\n this.query({\n columns: this.columnsAxisDescriptors(),\n rows: val,\n measures: this.measures(),\n sort: this.sort(),\n filter: this.filter()\n });\n },\n\n measures: function(val) {\n if (val === undefined$1) {\n return this._measures;\n }\n\n this._skipNormalize += 1;\n this._clearAxesData = true;\n\n this.query({\n columns: this.columnsAxisDescriptors(),\n rows: this.rowsAxisDescriptors(),\n measures: normalizeMeasures(val),\n sort: this.sort(),\n filter: this.filter()\n });\n },\n\n measuresAxis: function() {\n return this._measuresAxis || \"columns\";\n },\n\n _expandPath: function(path, axis) {\n var origin = axis === \"columns\" ? \"columns\" : \"rows\";\n var other = axis === \"columns\" ? \"rows\" : \"columns\";\n\n var members = normalizeMembers(path);\n var memberToExpand = getName(members[members.length - 1]);\n\n this._lastExpanded = origin;\n\n members = descriptorsForMembers(this.axes()[origin], members, this.measures());\n\n for (var idx = 0; idx < members.length; idx++) {\n var memberName = getName(members[idx]);\n\n if (memberName === memberToExpand) {\n if (members[idx].expand) {\n return;\n }\n members[idx].expand = true;\n } else {\n members[idx].expand = false;\n }\n }\n\n var descriptors = {};\n descriptors[origin] = members;\n descriptors[other] = this._descriptorsForAxis(other);\n\n this._query(descriptors);\n },\n\n _descriptorsForAxis: function(axis) {\n var axes = this.axes();\n var descriptors = this[axis]() || [];\n\n if (axes && axes[axis] && axes[axis].tuples && axes[axis].tuples[0]) {\n descriptors = descriptorsForAxes(axes[axis].tuples || []);\n }\n return descriptors;\n },\n\n columnsAxisDescriptors: function() {\n return this._descriptorsForAxis(\"columns\");\n },\n\n rowsAxisDescriptors: function() {\n return this._descriptorsForAxis(\"rows\");\n },\n\n _process: function(data, e) {\n this._view = data;\n\n e = e || {};\n e.items = e.items || this._view;\n\n this.trigger(CHANGE, e);\n },\n\n _query: function(options) {\n var that = this;\n\n if (!options) {\n this._skipNormalize += 1;\n this._clearAxesData = true;\n }\n\n return that.query(extend({}, {\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 columns: this.columnsAxisDescriptors(),\n rows: this.rowsAxisDescriptors(),\n measures: this.measures()\n }, options));\n },\n\n query: function(options) {\n var state = this._mergeState(options);\n\n if (this._data.length && this.cubeBuilder) {\n this._params(state);\n this._updateLocalData(this._pristineData);\n\n return $.Deferred().resolve().promise();\n }\n\n return this.read(state);\n },\n\n _mergeState: function(options) {\n options = DataSource.fn._mergeState.call(this, options);\n\n if (options !== undefined$1) {\n this._measures = normalizeMeasures(options.measures);\n\n if (options.columns) {\n options.columns = normalizeMembers(options.columns);\n } else if (!options.columns) {\n this._columns = [];\n }\n\n if (options.rows) {\n options.rows = normalizeMembers(options.rows);\n } else if (!options.rows) {\n this._rows = [];\n }\n }\n return options;\n },\n\n filter: function(val) {\n if (val === undefined$1) {\n return this._filter;\n }\n\n this._skipNormalize += 1;\n this._clearAxesData = true;\n this._query({ filter: val, page: 1 });\n },\n\n expandColumn: function(path) {\n this._expandPath(path, \"columns\");\n },\n\n expandRow: function(path) {\n this._expandPath(path, \"rows\");\n },\n\n success: function(data) {\n var originalData;\n if (this.cubeBuilder) {\n originalData = (this.reader.data(data) || []).slice(0);\n }\n DataSource.fn.success.call(this, data);\n if (originalData) {\n this._pristineData = originalData;\n }\n },\n\n _processResult: function(data, axes) {\n if (this.cubeBuilder) {\n var processedData = this.cubeBuilder.process(data, this._requestData);\n\n data = processedData.data;\n axes = processedData.axes;\n }\n\n var columnIndexes, rowIndexes;\n var tuples, resultAxis, measures, axisToSkip;\n var columnDescriptors = this.columns();\n var rowDescriptors = this.rows();\n var hasColumnTuples = axes.columns && axes.columns.tuples;\n\n if (!columnDescriptors.length && rowDescriptors.length && hasColumnTuples && (this._rowMeasures().length || !this.measures().length)) {\n axes = {\n columns: {},\n rows: axes.columns\n };\n }\n\n if (!columnDescriptors.length && !rowDescriptors.length && this.measuresAxis() === \"rows\" && hasColumnTuples) {\n axes = {\n columns: {},\n rows: axes.columns\n };\n }\n\n this._axes = {\n columns: normalizeAxis(this._axes.columns),\n rows: normalizeAxis(this._axes.rows)\n };\n\n axes = {\n columns: normalizeAxis(axes.columns),\n rows: normalizeAxis(axes.rows)\n };\n\n columnIndexes = this._normalizeTuples(axes.columns.tuples, this._axes.columns.tuples, columnDescriptors, this._columnMeasures());\n rowIndexes = this._normalizeTuples(axes.rows.tuples, this._axes.rows.tuples, rowDescriptors, this._rowMeasures());\n\n if (this._skipNormalize > 0) {\n this._skipNormalize -= 1;\n }\n\n if (!this.cubeBuilder) {\n data = this._normalizeData({\n columnsLength: axes.columns.tuples.length,\n rowsLength: axes.rows.tuples.length,\n columnIndexes: columnIndexes,\n rowIndexes: rowIndexes,\n data: data\n });\n }\n\n if (this._lastExpanded == \"rows\") {\n tuples = axes.columns.tuples;\n measures = this._columnMeasures();\n resultAxis = validateAxis(axes.columns, this._axes.columns, measures);\n\n if (resultAxis) {\n axisToSkip = \"columns\";\n axes.columns = resultAxis;\n adjustDataByColumn(tuples, resultAxis.tuples, axes.rows.tuples.length, measures, data);\n if (!this.cubeBuilder) {\n data = this._normalizeData({\n columnsLength: membersCount(axes.columns.tuples, measures),\n rowsLength: axes.rows.tuples.length,\n data: data\n });\n }\n }\n } else if (this._lastExpanded == \"columns\") {\n tuples = axes.rows.tuples;\n measures = this._rowMeasures();\n resultAxis = validateAxis(axes.rows, this._axes.rows, measures);\n\n if (resultAxis) {\n axisToSkip = \"rows\";\n axes.rows = resultAxis;\n adjustDataByRow(tuples, resultAxis.tuples, axes.columns.tuples.length, measures, data);\n\n if (!this.cubeBuilder) {\n data = this._normalizeData({\n columnsLength: membersCount(axes.rows.tuples, measures),\n rowsLength: axes.columns.tuples.length,\n data: data\n });\n }\n }\n }\n\n this._lastExpanded = null;\n\n var result = this._mergeAxes(axes, data, axisToSkip);\n this._axes = result.axes;\n\n return result.data;\n },\n\n _readData: function(data) {\n var axes = this.reader.axes(data);\n var newData = this.reader.data(data);\n\n if (this.cubeBuilder) {\n this._rawData = newData;\n }\n\n return this._processResult(newData, axes);\n },\n\n _createTuple: function(tuple, measure, buildRoot) {\n var members = tuple.members;\n var length = members.length;\n var root = { members: [] };\n var levelName, levelNum;\n var name, parentName;\n var hasChildren;\n var hierarchy;\n var caption;\n var member;\n var idx = 0;\n\n if (measure) {\n length -= 1;\n }\n\n for (; idx < length; idx++) {\n member = members[idx];\n levelNum = Number(member.levelNum);\n\n name = member.name;\n parentName = member.parentName;\n caption = member.caption || name;\n hasChildren = member.hasChildren;\n hierarchy = member.hierarchy;\n levelName = member.levelName;\n\n if (buildRoot) {\n caption = \"All\";\n if (levelNum === 0) {\n parentName = member.name;\n } else {\n levelNum -= 1;\n }\n\n hasChildren = true;\n name = hierarchy = levelName = parentName;\n }\n\n root.members.push({\n name: name,\n children: [],\n caption: caption,\n levelName: levelName,\n levelNum: levelNum.toString(),\n hasChildren: hasChildren,\n hierarchy: hierarchy,\n parentName: !buildRoot ? parentName : \"\"\n });\n }\n\n if (measure) {\n root.members.push({\n name: measure.name,\n children: []\n });\n }\n\n return root;\n },\n\n _hasRoot: function(target, source, descriptors) {\n if (source.length) {\n return findExistingTuple(source, target).tuple;\n }\n\n var members = target.members;\n var member;\n var descriptor;\n\n var isRoot = true;\n var levelNum;\n\n for (var idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n levelNum = Number(member.levelNum) || 0;\n descriptor = descriptors[idx];\n\n if (!(levelNum === 0 || (descriptor && member.name === getName(descriptor)))) {\n isRoot = false;\n break;\n }\n }\n\n return isRoot;\n },\n\n _mergeAxes: function(sourceAxes, data, axisToSkip) {\n var columnMeasures = this._columnMeasures();\n var rowMeasures = this._rowMeasures();\n var axes = this.axes();\n var startIndex, tuples;\n\n var oldRowsLength = membersCount(axes.rows.tuples, rowMeasures);\n var newRowsLength = sourceAxes.rows.tuples.length;\n\n var oldColumnsLength = membersCount(axes.columns.tuples, columnMeasures);\n var newColumnsLength = sourceAxes.columns.tuples.length;\n\n if (axisToSkip == \"columns\") {\n newColumnsLength = oldColumnsLength;\n tuples = sourceAxes.columns.tuples;\n } else {\n tuples = parseSource(sourceAxes.columns.tuples, columnMeasures);\n data = prepareDataOnColumns(tuples, data);\n }\n\n var mergedColumns = mergeTuples(axes.columns.tuples, tuples, columnMeasures);\n\n if (axisToSkip == \"rows\") {\n newRowsLength = membersCount(sourceAxes.rows.tuples, rowMeasures);\n tuples = sourceAxes.rows.tuples;\n } else {\n tuples = parseSource(sourceAxes.rows.tuples, rowMeasures);\n data = prepareDataOnRows(tuples, data);\n }\n var mergedRows = mergeTuples(axes.rows.tuples, tuples, rowMeasures);\n\n axes.columns.tuples = mergedColumns.tuples;\n axes.rows.tuples = mergedRows.tuples;\n\n if (oldColumnsLength !== membersCount(axes.columns.tuples, columnMeasures)) {\n //columns are expanded\n startIndex = mergedColumns.index + findDataIndex(mergedColumns.parsedRoot, mergedColumns.memberIndex, columnMeasures);\n var offset = oldColumnsLength + newColumnsLength;\n data = this._mergeColumnData(data, startIndex, newRowsLength, newColumnsLength, offset);\n } else if (oldRowsLength !== membersCount(axes.rows.tuples, rowMeasures)) {\n //rows are expanded\n startIndex = mergedRows.index + findDataIndex(mergedRows.parsedRoot, mergedRows.memberIndex, rowMeasures);\n data = this._mergeRowData(data, startIndex, newRowsLength, newColumnsLength);\n }\n\n if (axes.columns.tuples.length === 0 && axes.rows.tuples.length === 0) {\n data = [];\n }\n\n return {\n axes: axes,\n data: data\n };\n },\n\n _mergeColumnData: function(newData, columnIndex, rowsLength, columnsLength, offset) {\n var data = this.data().toJSON();\n var rowIndex, index, drop = 0, toAdd;\n var columnMeasures = Math.max(this._columnMeasures().length, 1);\n\n rowsLength = Math.max(rowsLength, 1);\n\n if (data.length > 0) {\n //if there is already data, drop the first new data item\n drop = columnMeasures;\n offset -= columnMeasures;\n }\n\n for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n index = columnIndex + (rowIndex * offset);\n toAdd = newData.splice(0, columnsLength);\n toAdd.splice(0, drop);\n [].splice.apply(data, [index, 0].concat(toAdd));\n }\n\n return data;\n },\n\n _mergeRowData: function(newData, rowIndex, rowsLength, columnsLength) {\n var data = this.data().toJSON();\n var idx, dataIndex, toAdd;\n var rowMeasures = Math.max(this._rowMeasures().length, 1);\n\n columnsLength = Math.max(columnsLength, 1);\n if (data.length > 0) {\n //if there is already data, drop the first new data item\n rowsLength -= rowMeasures;\n newData.splice(0, columnsLength * rowMeasures);\n }\n\n for (idx = 0; idx < rowsLength; idx++) {\n toAdd = newData.splice(0, columnsLength);\n dataIndex = (rowIndex * columnsLength) + (idx * columnsLength);\n [].splice.apply(data, [dataIndex, 0].concat(toAdd));\n }\n\n return data;\n },\n\n _columnMeasures: function() {\n var measures = this.measures();\n var columnMeasures = [];\n\n if (this.measuresAxis() === \"columns\") {\n if (this.columns().length === 0) {\n columnMeasures = measures;\n } else if (measures.length > 1) {\n columnMeasures = measures;\n }\n }\n\n return columnMeasures;\n },\n\n _rowMeasures: function() {\n var measures = this.measures();\n var rowMeasures = [];\n\n if (this.measuresAxis() === \"rows\") {\n if (this.rows().length === 0) {\n rowMeasures = measures;\n } else if (measures.length > 1) {\n rowMeasures = measures;\n }\n }\n\n return rowMeasures;\n },\n\n _updateLocalData: function(data, state) {\n if (this.cubeBuilder) {\n if (state) {\n this._requestData = state;\n }\n data = this._processResult(data);\n }\n\n this._data = this._observe(data);\n\n this._ranges = [];\n this._addRange(this._data);\n\n this._total = this._data.length;\n this._pristineTotal = this._total;\n this._process(this._data);\n },\n\n data: function(value) {\n var that = this;\n if (value !== undefined$1) {\n this._pristineData = value.slice(0);\n this._updateLocalData(value, {\n columns: this.columns(),\n rows: this.rows(),\n measures: this.measures()\n });\n } else {\n return that._data;\n }\n },\n\n _normalizeTuples: function(tuples, source, descriptors, measures) {\n var length = measures.length || 1;\n var idx = 0;\n\n var roots = [];\n var indexes = {};\n var measureIdx = 0;\n var tuple, memberIdx, last;\n\n if (!tuples.length) {\n return;\n }\n\n if (this._skipNormalize <= 0 && !this._hasRoot(tuples[0], source, descriptors)) {\n this._skipNormalize = 0;\n for (; idx < length; idx++) {\n roots.push(this._createTuple(tuples[0], measures[idx], true));\n indexes[idx] = idx;\n }\n\n tuples.splice.apply(tuples, [0, tuples.length].concat(roots).concat(tuples));\n idx = length;\n }\n\n if (measures.length) {\n last = tuple = tuples[idx];\n memberIdx = tuple.members.length - 1;\n\n while (tuple) {\n if (measureIdx >= length) {\n measureIdx = 0;\n }\n\n if (tuple.members[memberIdx].name !== measures[measureIdx].name) {\n tuples.splice(idx, 0, this._createTuple(tuple, measures[measureIdx]));\n indexes[idx] = idx;\n }\n\n idx += 1;\n measureIdx += 1;\n tuple = tuples[idx];\n\n if (length > measureIdx && (!tuple || tupleName(last, memberIdx - 1) !== tupleName(tuple, memberIdx - 1))) {\n for (; measureIdx < length; measureIdx++) {\n tuples.splice(idx, 0, this._createTuple(last, measures[measureIdx]));\n indexes[idx] = idx;\n idx += 1;\n }\n tuple = tuples[idx];\n }\n last = tuple;\n }\n }\n\n return indexes;\n },\n\n _addMissingDataItems: function(result, metadata) {\n while (metadata.rowIndexes[parseInt(result.length / metadata.columnsLength, 10)] !== undefined$1) {\n for (var idx = 0; idx < metadata.columnsLength; idx++) {\n result = addEmptyDataItem(result);\n }\n }\n\n while (metadata.columnIndexes[result.length % metadata.columnsLength] !== undefined$1) {\n result = addEmptyDataItem(result);\n }\n\n return result;\n },\n\n _normalizeOrdinals: function(result, dataItem, metadata) {\n var lastOrdinal = metadata.lastOrdinal;\n\n if (!dataItem) {\n return addEmptyDataItem(result);\n }\n\n if ((dataItem.ordinal - lastOrdinal) > 1) {\n lastOrdinal += 1;\n\n while (lastOrdinal < dataItem.ordinal && result.length < metadata.length) {\n result = this._addMissingDataItems(addEmptyDataItem(result), metadata);\n lastOrdinal += 1;\n }\n }\n\n dataItem.ordinal = result.length;\n result[result.length] = dataItem;\n\n return result;\n },\n\n _normalizeData: function(options) {\n var data = options.data;\n var dataIdx = 0;\n var dataItem;\n var result = [];\n var lastOrdinal;\n var length;\n\n options.lastOrdinal = 0;\n options.columnIndexes = options.columnIndexes || {};\n options.rowIndexes = options.rowIndexes || {};\n options.columnsLength = options.columnsLength || 1;\n options.rowsLength = options.rowsLength || 1;\n options.length = options.columnsLength * options.rowsLength;\n length = options.length;\n\n if (data.length === length) {\n return data;\n }\n\n while (result.length < length) {\n dataItem = data[dataIdx++];\n if (dataItem) {\n lastOrdinal = dataItem.ordinal;\n }\n\n result = this._normalizeOrdinals(this._addMissingDataItems(result, options), dataItem, options);\n\n options.lastOrdinal = lastOrdinal;\n }\n\n return result;\n },\n\n discover: function(options, converter) {\n var that = this,\n transport = that.transport;\n\n return $.Deferred(function(deferred) {\n transport.discover(extend({\n success: function(response) {\n response = that.reader.parse(response);\n\n if (that._handleCustomErrors(response)) {\n return;\n }\n\n if (converter) {\n response = converter(response);\n }\n deferred.resolve(response);\n },\n error: function(response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, options));\n }).promise().done(function() {\n that.trigger(\"schemaChange\");\n });\n },\n\n schemaMeasures: function() {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaMeasures\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }\n }, function(response) {\n return that.reader.measures(response);\n });\n },\n\n schemaKPIs: function() {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaKPIs\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }\n }, function(response) {\n return that.reader.kpis(response);\n });\n },\n\n schemaDimensions: function() {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaDimensions\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }\n }, function(response) {\n return that.reader.dimensions(response);\n });\n },\n\n schemaHierarchies: function(dimensionName) {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaHierarchies\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube(),\n dimensionUniqueName: dimensionName\n }\n }\n }, function(response) {\n return that.reader.hierarchies(response);\n });\n },\n\n schemaLevels: function(hierarchyName) {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaLevels\",\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube(),\n hierarchyUniqueName: hierarchyName\n }\n }\n }, function(response) {\n return that.reader.levels(response);\n });\n },\n\n schemaCubes: function() {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaCubes\",\n restrictions: {\n catalogName: that.transport.catalog()\n }\n }\n }, function(response) {\n return that.reader.cubes(response);\n });\n },\n\n schemaCatalogs: function() {\n var that = this;\n\n return that.discover({\n data: {\n command: \"schemaCatalogs\"\n }\n }, function(response) {\n return that.reader.catalogs(response);\n });\n },\n\n schemaMembers: function(restrictions) {\n var that = this;\n var success = (function(restrictions) {\n return function(response) {\n return that.reader.members(response, restrictions);\n };\n }(restrictions));\n\n return that.discover({\n data: {\n command: \"schemaMembers\",\n restrictions: extend({\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }, restrictions)\n }\n }, success);\n },\n\n _params: function(data) {\n if (this._clearAxesData) {\n this._axes = {};\n this._data = this._observe([]);\n this._clearAxesData = false;\n this.trigger(STATERESET);\n }\n\n var options = DataSource.fn._params.call(this, data);\n\n options = extend({\n measures: this.measures(),\n measuresAxis: this.measuresAxis(),\n columns: this.columns(),\n rows: this.rows()\n }, options);\n\n if (this.cubeBuilder) {\n this._requestData = options;\n }\n\n return options;\n }\n });\n\n function flatColumns(columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n result.push(columns[idx]);\n if (columns[idx].children) {\n result = result.concat(flatColumns(columns[idx].children));\n }\n }\n\n return result;\n }\n\n function sortItemsTree(field, items, sortFunction) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].children && items[i].children.length) {\n sortItemsTree(field, items[i].children, sortFunction);\n }\n }\n if (items[0].parentName != field) {\n return;\n }\n items = items.sort(sortFunction);\n }\n\n function fillSortTree(items, map) {\n for (var i = 0; i < items.length; i++) {\n var currentItem = map[items[i].name];\n\n if (!$.isEmptyObject(currentItem.childrenMap)) {\n items[i].children = [];\n for (var name in currentItem.childrenMap) {\n items[i].children.push($.extend({}, { name: name, parentName: map[name].parentName }));\n }\n\n fillSortTree(items[i].children, map);\n }\n }\n }\n\n function addEmptyDataItem(result) {\n result[result.length] = { value: \"\", fmtValue: \"\", ordinal: result.length };\n return result;\n }\n\n function validateAxis(newAxis, axis, measures) {\n if (newAxis.tuples.length < membersCount(axis.tuples, measures)) {\n\n return axis;\n }\n\n return;\n }\n\n function adjustDataByColumn(sourceTuples, targetTuples, rowsLength, measures, data) {\n var columnIdx, rowIdx, dataIdx;\n var columnsLength = sourceTuples.length;\n var targetColumnsLength = membersCount(targetTuples, measures);\n var measuresLength = measures.length || 1;\n\n for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n dataIdx = tupleIndex(sourceTuples[columnIdx], targetTuples) * measuresLength;\n dataIdx += columnIdx % measuresLength;\n\n data[rowIdx * columnsLength + columnIdx].ordinal = rowIdx * targetColumnsLength + dataIdx;\n }\n }\n }\n\n function adjustDataByRow(sourceTuples, targetTuples, columnsLength, measures, data) {\n var columnIdx, rowIdx, dataIdx;\n var rowsLength = sourceTuples.length;\n var measuresLength = measures.length || 1;\n\n for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n dataIdx = tupleIndex(sourceTuples[rowIdx], targetTuples);\n dataIdx *= measuresLength;\n dataIdx += rowIdx % measuresLength;\n\n for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n data[rowIdx * columnsLength + columnIdx].ordinal = dataIdx * columnsLength + columnIdx;\n }\n }\n }\n\n function tupleIndex(tuple, collection) {\n return findExistingTuple(collection, tuple).index;\n }\n\n function membersCount(tuples, measures) {\n if (!tuples.length) {\n return 0;\n }\n\n var queue = tuples.slice();\n var current = queue.shift();\n var result = 1;\n\n while (current) {\n if (current.members) {\n [].push.apply(queue, current.members);\n } else if (current.children) {\n if (!current.measure) {\n result += current.children.length;\n }\n [].push.apply(queue, current.children);\n }\n\n current = queue.shift();\n }\n\n if (measures.length) {\n result = result * measures.length;\n }\n\n return result;\n }\n\n function normalizeAxis(axis) {\n if (!axis) {\n axis = {\n tuples: []\n };\n }\n\n if (!axis.tuples) {\n axis.tuples = [];\n }\n\n return axis;\n }\n\n function findDataIndex(tuple, memberIndex, measures) {\n if (!tuple) {\n return 0;\n }\n\n var measuresLength = Math.max(measures.length, 1);\n var tuples = tuple.members.slice(0, memberIndex);\n var current = tuples.shift();\n\n //the initial value is equal to the total number of measures\n //as the measures member is not extracted from the members of the starting tuple\n //but should be calculated in the final result\n var counter = measuresLength;\n\n while (current) {\n if (current.name === MEASURES) {\n //subtract 1 as the measures member has been already counted as a single standard member\n //but we are interested in the total number of measures instead\n counter += (measuresLength - 1);\n } else if (current.children) {\n //is member\n [].push.apply(tuples, current.children);\n } else {\n //is tuple\n counter ++;\n [].push.apply(tuples, current.members);\n }\n\n current = tuples.shift();\n }\n\n return counter;\n }\n\n function mergeTuples(target, source, measures) {\n if (!source[0]) {\n return {\n parsedRoot: null,\n tuples: target,\n memberIndex: 0,\n index: 0\n };\n }\n\n var result = findExistingTuple(target, source[0]);\n\n if (!result.tuple) {\n return {\n parsedRoot: null,\n tuples: source,\n memberIndex: 0,\n index: 0\n };\n }\n\n var targetMembers = result.tuple.members;\n var sourceMembers = source[0].members;\n var memberIndex = -1;\n\n if (targetMembers.length !== sourceMembers.length) {\n return {\n parsedRoot: null,\n tuples: source,\n memberIndex: 0,\n index: 0\n };\n }\n\n for (var idx = 0, length = targetMembers.length; idx < length; idx++) {\n if (!targetMembers[idx].measure && sourceMembers[idx].children[0]) {\n if (memberIndex == -1 && sourceMembers[idx].children.length) {\n memberIndex = idx;\n }\n\n targetMembers[idx].children = sourceMembers[idx].children;\n }\n }\n\n measures = Math.max(measures.length, 1);\n\n return {\n parsedRoot: result.tuple,\n index: result.index * measures,\n memberIndex: memberIndex,\n tuples: target\n };\n }\n\n function equalTuples(first, second) {\n var equal = true;\n var idx, length;\n\n first = first.members;\n second = second.members;\n\n for (idx = 0, length = first.length; idx < length; idx++) {\n if (first[idx].measure || second[idx].measure) {\n continue;\n }\n\n equal = equal && (getName(first[idx]) === getName(second[idx]));\n }\n\n return equal;\n }\n\n function findExistingTuple(tuples, toFind) {\n var idx, length, tuple, found, counter = 0;\n var memberIndex, membersLength, member;\n\n for (idx = 0, length = tuples.length; idx < length; idx++) {\n tuple = tuples[idx];\n if (equalTuples(tuple, toFind)) {\n return {\n tuple: tuple,\n index: counter\n };\n }\n\n counter ++;\n\n for (memberIndex = 0, membersLength = tuple.members.length; memberIndex < membersLength; memberIndex++) {\n member = tuple.members[memberIndex];\n if (member.measure) {\n //counter += member.children.length;\n continue;\n }\n found = findExistingTuple(member.children, toFind);\n counter += found.index;\n if (found.tuple) {\n return {\n tuple: found.tuple,\n index: counter\n };\n }\n }\n }\n\n return {\n index: counter\n };\n }\n\n function addMembers(members, map) {\n var member, i, len, path = \"\";\n for (i = 0, len = members.length; i < len; i++) {\n member = members[i];\n path += member.name;\n if (!map[path]) {\n map[path] = member;\n }\n }\n }\n\n\n function findParentMember(tuple, map) {\n var members = tuple.members;\n var i, len, member, path = \"\";\n var parentPath = \"\";\n var parentMember;\n\n for (i = 0, len = members.length; i < len; i++) {\n member = members[i];\n if (parentMember) {\n if (map[path + member.name]) {\n path += member.name;\n parentMember = map[path];\n continue;\n } else if (map[path + member.parentName]) {\n return map[path + member.parentName];\n } else if (map[parentPath + member.parentName]) {\n return map[parentPath + member.parentName];\n } else {\n return map[parentPath];\n }\n }\n\n path += member.name;\n parentMember = map[member.parentName];\n\n if (!parentMember) {\n parentMember = map[path];\n if (!parentMember) {\n return null;\n }\n }\n\n if (parentMember) {\n parentPath += parentMember.name;\n }\n }\n\n return parentMember;\n }\n\n function measurePosition(tuple, measures) {\n if (measures.length === 0) {\n return -1;\n }\n\n var measure = measures[0];\n var members = tuple.members;\n for (var idx = 0, len = members.length; idx < len; idx ++) {\n if (members[idx].name == measure.name) {\n return idx;\n }\n }\n }\n\n function normalizeTupleMeasures(tuple, index) {\n if (index < 0) {\n return;\n }\n var member = {\n name: MEASURES,\n measure: true,\n children: [\n $.extend({ members: [], dataIndex: tuple.dataIndex }, tuple.members[index])\n ]\n };\n tuple.members.splice(index, 1, member);\n tuple.dataIndex = undefined$1;\n }\n\n function parseSource(tuples, measures) {\n if (tuples.length < 1) {\n return [];\n }\n var result = [];\n var map = { };\n var measureIndex = measurePosition(tuples[0], measures);\n\n for (var i = 0; i < tuples.length; i++) {\n var tuple = tuples[i];\n\n //keep the old data index of the tuple\n tuple.dataIndex = i;\n\n normalizeTupleMeasures(tuple, measureIndex);\n var parentMember = findParentMember(tuple, map);\n\n if (parentMember) {\n if (measureIndex < 0 || !parentMember.measure) {\n parentMember.children.push(tuple);\n } else {\n parentMember.children.push(tuple.members[measureIndex].children[0]);\n }\n } else {\n result.push(tuple);\n }\n\n addMembers(tuple.members, map);\n }\n\n return result;\n }\n\n function prepareDataOnRows(tuples, data) {\n if (!tuples || !tuples.length) {\n return data;\n }\n\n var result = [];\n var indices = buildDataIndices(tuples);\n var rowsLength = indices.length;\n var columnsLength = Math.max(data.length / rowsLength, 1);\n var rowIndex, columnIndex, targetIndex, sourceIndex;\n var calcIndex;\n\n for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n targetIndex = columnsLength * rowIndex;\n sourceIndex = columnsLength * indices[rowIndex];\n for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n calcIndex = parseInt(sourceIndex + columnIndex, 10);\n result[parseInt(targetIndex + columnIndex, 10)] = data[calcIndex] || { value: \"\", fmtValue: \"\", ordinal: calcIndex };\n }\n }\n\n return result;\n }\n\n function prepareDataOnColumns(tuples, data) {\n if (!tuples || !tuples.length) {\n return data;\n }\n\n var result = [];\n var indices = buildDataIndices(tuples);\n var columnsLength = indices.length;\n var rowsLength = Math.max(data.length / columnsLength, 1);\n var columnIndex, rowIndex, dataIndex, calcIndex;\n\n for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n dataIndex = columnsLength * rowIndex;\n for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n calcIndex = indices[columnIndex] + dataIndex;\n result[dataIndex + columnIndex] = data[calcIndex] || { value: \"\", fmtValue: \"\", ordinal: calcIndex };\n }\n }\n\n return result;\n }\n\n function buildDataIndices(tuples) {\n tuples = tuples.slice();\n var result = [];\n var tuple = tuples.shift();\n var idx, length, spliceIndex, children, member;\n\n while (tuple) {\n //required for multiple measures\n if (tuple.dataIndex !== undefined$1) {\n result.push(tuple.dataIndex);\n }\n\n spliceIndex = 0;\n for (idx = 0, length = tuple.members.length; idx < length; idx++) {\n member = tuple.members[idx];\n children = member.children;\n if (member.measure) {\n [].splice.apply(tuples, [0, 0].concat(children));\n } else {\n [].splice.apply(tuples, [spliceIndex, 0].concat(children));\n }\n spliceIndex += children.length;\n }\n\n tuple = tuples.shift();\n }\n\n return result;\n }\n\n PivotDataSourceV2.create = function(options) {\n options = options && options.push ? { data: options } : options;\n\n var dataSource = options || {},\n data = dataSource.data;\n\n dataSource.data = data;\n\n if (!(dataSource instanceof PivotDataSourceV2) && dataSource instanceof kendo.data.DataSource) {\n throw new Error(\"Incorrect DataSource type. Only PivotDataSource instances are supported\");\n }\n\n return dataSource instanceof PivotDataSourceV2 ? dataSource : new PivotDataSourceV2(dataSource);\n };\n\n PivotDataSource.create = function(options) {\n options = options && options.push ? { data: options } : options;\n\n var dataSource = options || {},\n data = dataSource.data;\n\n dataSource.data = data;\n\n if (!(dataSource instanceof PivotDataSource) && dataSource instanceof kendo.data.DataSource) {\n throw new Error(\"Incorrect DataSource type. Only PivotDataSource instances are supported\");\n }\n\n return dataSource instanceof PivotDataSource ? dataSource : new PivotDataSource(dataSource);\n };\n\n function baseHierarchyPath(memberName) {\n var parts = memberName.split(\".\");\n if (parts.length > 2) {\n return parts[0] + \".\" + parts[1];\n }\n return memberName;\n }\n\n function expandMemberDescriptor(names, sort) {\n var idx = names.length - 1;\n var name = names[idx];\n var sortDescriptor;\n\n sortDescriptor = sortDescriptorForMember(sort, name);\n\n if (sortDescriptor && sortDescriptor.dir) {\n name = \"ORDER(\" + name + \".Children,\" + sortDescriptor.field + \".CurrentMember.MEMBER_CAPTION,\" + sortDescriptor.dir + \")\";\n } else {\n name += \".Children\";\n }\n\n names[idx] = name;\n\n return names;\n }\n\n function sortDescriptorForMember(sort, member) {\n for (var idx = 0, length = sort.length; idx < length; idx++) {\n if (member.indexOf(sort[idx].field) === 0) {\n return sort[idx];\n }\n }\n return null;\n }\n\n function crossJoin(names) {\n var result = \"CROSSJOIN({\";\n var r;\n\n if (names.length > 2) {\n r = names.pop();\n result += crossJoin(names);\n } else {\n result += names.shift();\n r = names.pop();\n }\n\n result += \"},{\";\n result += r;\n result += \"})\";\n return result;\n }\n\n function crossJoinCommand(members, measures) {\n var tmp = members.slice(0);\n\n if (measures.length > 1) {\n tmp.push(\"{\" + measureNames(measures).join(\",\") + \"}\");\n }\n\n return crossJoin(tmp);\n }\n\n function measureNames(measures) {\n var idx = 0;\n var length = measures.length;\n var result = [];\n var measure;\n\n for (; idx < length; idx++) {\n measure = measures[idx];\n result.push(measure.name !== undefined$1 ? measure.name : measure);\n }\n\n return result;\n }\n\n function indexOf(name, items) {\n var idx, length, index = -1;\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n if (getName(items[idx]) === name) {\n index = idx;\n break;\n }\n }\n return index;\n }\n\n function getName(name) {\n name = name.name || name;\n\n if (toString.call(name) === \"[object Array]\") {\n name = name[name.length - 1];\n }\n\n return name;\n }\n\n function getRootNames(members) {\n var length = members.length;\n var names = [];\n var idx = 0;\n\n for (; idx < length; idx++) {\n names.push(members[idx].name[0]);\n }\n\n return names;\n }\n\n function mapNames(names, rootNames) {\n var name;\n var rootName;\n\n var j;\n var idx = 0;\n var length = names.length;\n var rootLength = rootNames.length;\n\n rootNames = rootNames.slice(0);\n\n for (; idx < length; idx++) {\n name = names[idx];\n\n for (j = 0; j < rootLength; j++) {\n rootName = baseHierarchyPath(rootNames[j]);\n\n if (name.indexOf(rootName) !== -1) {\n rootNames[j] = name;\n break;\n }\n }\n }\n\n return {\n names: rootNames,\n expandedIdx: j,\n uniquePath: rootNames.slice(0, j + 1).join(\"\")\n };\n }\n\n function parseDescriptors(members) {\n var expanded = [];\n var child = [];\n var root = [];\n var member;\n\n var j, l;\n var idx = 0;\n var length = members.length;\n\n var name;\n var hierarchyName;\n\n var found;\n\n for (; idx < length; idx++) {\n member = members[idx];\n name = member.name;\n found = false;\n\n if (toString.call(name) !== \"[object Array]\") {\n member.name = name = [name];\n }\n\n if (name.length > 1) {\n child.push(member);\n } else {\n hierarchyName = baseHierarchyPath(name[0]);\n\n for (j = 0, l = root.length; j < l; j++) {\n if (root[j].name[0].indexOf(hierarchyName) === 0) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n root.push(member);\n }\n\n if (member.expand) {\n expanded.push(member);\n }\n }\n }\n\n expanded = expanded.concat(child);\n\n return {\n root: root,\n expanded: expanded\n };\n }\n\n function serializeMembers(members, measures, sort) {\n var command = \"\";\n\n members = members || [];\n\n var expanded = parseDescriptors(members);\n var root = expanded.root;\n\n var rootNames = getRootNames(root);\n var crossJoinCommands = [];\n\n expanded = expanded.expanded;\n\n var length = expanded.length;\n var idx = 0;\n\n var memberName;\n var names = [];\n\n if (rootNames.length > 1 || measures.length > 1) {\n crossJoinCommands.push(crossJoinCommand(rootNames, measures));\n\n for (; idx < length; idx++) {\n memberName = expandMemberDescriptor(expanded[idx].name, sort);\n names = mapNames(memberName, rootNames).names;\n\n crossJoinCommands.push(crossJoinCommand(names, measures));\n }\n\n command += crossJoinCommands.join(\",\");\n } else {\n for (; idx < length; idx++) {\n memberName = expandMemberDescriptor(expanded[idx].name, sort);\n names.push(memberName[0]); //check if this is ok\n }\n\n command += rootNames.concat(names).join(\",\");\n }\n\n return command;\n }\n\n var filterFunctionFormats = {\n contains: \", InStr({0}.CurrentMember.MEMBER_CAPTION,\\\"{1}\\\") > 0\",\n doesnotcontain: \", InStr({0}.CurrentMember.MEMBER_CAPTION,\\\"{1}\\\")\",\n startswith: \", Left({0}.CurrentMember.MEMBER_CAPTION,Len(\\\"{1}\\\"))=\\\"{1}\\\"\",\n endswith: \", Right({0}.CurrentMember.MEMBER_CAPTION,Len(\\\"{1}\\\"))=\\\"{1}\\\"\",\n eq: \", {0}.CurrentMember.MEMBER_CAPTION = \\\"{1}\\\"\",\n neq: \", {0}.CurrentMember.MEMBER_CAPTION = \\\"{1}\\\"\"\n };\n\n function serializeExpression(expression) {\n var command = \"\";\n var value = expression.value;\n var field = expression.field;\n var operator = expression.operator;\n\n if (operator == \"in\") {\n command += \"{\";\n command += value;\n command += \"}\";\n } else {\n command += operator == \"neq\" || operator == \"doesnotcontain\" ? \"-\" : \"\";\n command += \"Filter(\";\n command += field + \".MEMBERS\";\n command += kendo.format(filterFunctionFormats[operator], field, value);\n command += \")\";\n }\n\n return command;\n }\n\n function serializeFilters(filter, cube) {\n var command = \"\", current;\n var filters = filter.filters;\n var length = filters.length;\n var idx;\n\n for (idx = length - 1; idx >= 0; idx--) {\n\n current = \"SELECT (\";\n current += serializeExpression(filters[idx]);\n current += \") ON 0\";\n\n if (idx == length - 1) {\n current += \" FROM [\" + cube + \"]\";\n command = current;\n } else {\n command = current + \" FROM ( \" + command + \" )\";\n }\n }\n\n return command;\n }\n\n function serializeOptions(parentTagName, options, capitalize) {\n var result = \"\";\n\n if (options) {\n result += \"<\" + parentTagName + \">\";\n var value;\n for (var key in options) {\n value = options[key];\n if (capitalize) {\n key = key.replace(/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g, \"$1_\").toUpperCase().replace(/_$/, \"\");\n }\n result += \"<\" + key + \">\" + value + \"\";\n }\n result += \"\";\n } else {\n result += \"<\" + parentTagName + \"/>\";\n }\n return result;\n }\n\n var xmlaDiscoverCommands = {\n schemaCubes: \"MDSCHEMA_CUBES\",\n schemaCatalogs: \"DBSCHEMA_CATALOGS\",\n schemaMeasures: \"MDSCHEMA_MEASURES\",\n schemaDimensions: \"MDSCHEMA_DIMENSIONS\",\n schemaHierarchies: \"MDSCHEMA_HIERARCHIES\",\n schemaLevels: \"MDSCHEMA_LEVELS\",\n schemaMembers: \"MDSCHEMA_MEMBERS\",\n schemaKPIs: \"MDSCHEMA_KPIS\"\n };\n\n var convertersMap = {\n read: function(options) {\n var command = '
';\n\n command += \"SELECT NON EMPTY {\";\n\n var columns = options.columns || [];\n var rows = options.rows || [];\n\n var measures = options.measures || [];\n var measuresRowAxis = options.measuresAxis === \"rows\";\n var sort = options.sort || [];\n\n if (!columns.length && rows.length && (!measures.length || (measures.length && measuresRowAxis))) {\n columns = rows;\n rows = [];\n measuresRowAxis = false;\n }\n\n if (!columns.length && !rows.length) {\n measuresRowAxis = false;\n }\n\n if (columns.length) {\n command += serializeMembers(columns, !measuresRowAxis ? measures : [], sort);\n } else if (measures.length && !measuresRowAxis) {\n command += measureNames(measures).join(\",\");\n }\n\n command += \"} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON COLUMNS\";\n\n if (rows.length || (measuresRowAxis && measures.length > 1)) {\n command += \", NON EMPTY {\";\n\n if (rows.length) {\n command += serializeMembers(rows, measuresRowAxis ? measures : [], sort);\n } else {\n command += measureNames(measures).join(\",\");\n }\n\n command += \"} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON ROWS\";\n }\n\n if (options.filter) {\n command += \" FROM \";\n command += \"(\";\n command += serializeFilters(options.filter, options.connection.cube);\n command += \")\";\n } else {\n command += \" FROM [\" + options.connection.cube + \"]\";\n }\n\n if (measures.length == 1 && columns.length) {\n command += \" WHERE (\" + measureNames(measures).join(\",\") + \")\";\n }\n\n command += '' + options.connection.catalog + 'Multidimensional';\n return command.replace(/\\&/g, \"&\");\n },\n discover: function(options) {\n options = options || {};\n\n var command = '
';\n command += \"\" + (xmlaDiscoverCommands[options.command] || options.command) + \"\";\n\n command += \"\" + serializeOptions(\"RestrictionList\", options.restrictions, true) + \"\";\n\n if (options.connection && options.connection.catalog) {\n options.properties = $.extend({}, {\n Catalog: options.connection.catalog\n }, options.properties);\n }\n\n command += \"\" + serializeOptions(\"PropertyList\", options.properties) + \"\";\n\n command += '';\n return command;\n }\n };\n\n var XmlaTransport = kendo.data.RemoteTransport.extend({\n init: function(options) {\n var originalOptions = options;\n\n options = this.options = extend(true, {}, this.options, options);\n\n kendo.data.RemoteTransport.call(this, options);\n\n if (isFunction(originalOptions.discover)) {\n this.discover = originalOptions.discover;\n } else if (typeof originalOptions.discover === \"string\") {\n this.options.discover = {\n url: originalOptions.discover\n };\n } else if (!originalOptions.discover) {\n this.options.discover = this.options.read;\n }\n },\n setup: function(options, type) {\n options.data = options.data || {};\n $.extend(true, options.data, { connection: this.options.connection });\n\n return kendo.data.RemoteTransport.fn.setup.call(this, options, type);\n },\n options: {\n read: {\n dataType: \"text\",\n contentType: \"text/xml\",\n type: \"POST\"\n },\n discover: {\n dataType: \"text\",\n contentType: \"text/xml\",\n type: \"POST\"\n },\n parameterMap: function(options, type) {\n return convertersMap[type](options,type);\n }\n },\n\n discover: function(options) {\n return $.ajax(this.setup(options, \"discover\"));\n }\n });\n\n var XmlaTransportV2 = Class.extend({\n init: function(options) {\n options = this.options = extend(true, {}, this.options, options);\n },\n setup: function(options) {\n return $.extend(true, options || {}, { connection: this.options.connection });\n },\n read: function(options) {\n var that = this,\n success,\n error;\n\n var fetchOptions = that.setup(options.data, READ);\n\n success = options.success || $.noop;\n error = options.error || $.noop;\n\n if (options.parameterMap) {\n fetchOptions = that.parameterMap(fetchOptions, READ);\n }\n\n fetchData({ url: that.options.read }, fetchOptions)\n .then(createDataState)\n .then(function(newDataState) {\n success(newDataState);\n })\n .catch(function(err) { error(err); });\n },\n\n catalog: function(val) {\n var options = this.options || {};\n\n if (val === undefined$1) {\n return (options.connection || {}).catalog;\n\n }\n\n var connection = options.connection || {};\n connection.catalog = val;\n\n this.options.connection = connection;\n $.extend(this.transport.options, { connection: connection });\n },\n cube: function(val) {\n var options = this.options || {};\n\n if (val === undefined$1) {\n return (options.connection || {}).cube;\n }\n\n var connection = options.connection || {};\n connection.cube = val;\n\n this.options.connection = connection;\n extend(true, this.transport.options, { connection: connection });\n },\n\n discover: function(options) {\n return fetchDiscover({ url: this.options.read }, options);\n }\n });\n\n function asArray(object) {\n if (object == null) {\n return [];\n }\n\n var type = toString.call(object);\n if (type !== \"[object Array]\") {\n return [object];\n }\n\n return object;\n }\n\n function translateAxis(axis) {\n var result = { tuples: [] };\n var tuples = asArray(kendo.getter(\"Tuples.Tuple\", true)(axis));\n var captionGetter = kendo.getter(\"Caption['#text']\");\n var unameGetter = kendo.getter(\"UName['#text']\");\n var levelNameGetter = kendo.getter(\"LName['#text']\");\n var levelNumGetter = kendo.getter(\"LNum['#text']\");\n var childrenGetter = kendo.getter(\"CHILDREN_CARDINALITY['#text']\", true);\n var hierarchyGetter = kendo.getter(\"['@Hierarchy']\");\n var parentNameGetter = kendo.getter(\"PARENT_UNIQUE_NAME['#text']\", true);\n\n for (var idx = 0; idx < tuples.length; idx++) {\n var members = [];\n var member = asArray(tuples[idx].Member);\n for (var memberIdx = 0; memberIdx < member.length; memberIdx++) {\n members.push({\n children: [],\n caption: captionGetter(member[memberIdx]),\n name: unameGetter(member[memberIdx]),\n levelName: levelNameGetter(member[memberIdx]),\n levelNum: levelNumGetter(member[memberIdx]),\n hasChildren: parseInt(childrenGetter(member[memberIdx]), 10) > 0,\n parentName: parentNameGetter(member[memberIdx]),\n hierarchy: hierarchyGetter(member[memberIdx])\n });\n }\n\n result.tuples.push({ members: members });\n }\n return result;\n }\n\n var schemaDataReaderMap = {\n cubes: {\n name: kendo.getter(\"CUBE_NAME['#text']\", true),\n caption: kendo.getter(\"CUBE_CAPTION['#text']\", true),\n description: kendo.getter(\"DESCRIPTION['#text']\", true),\n type: kendo.getter(\"CUBE_TYPE['#text']\", true)\n },\n catalogs: {\n name: kendo.getter(\"CATALOG_NAME['#text']\", true),\n description: kendo.getter(\"DESCRIPTION['#text']\", true)\n },\n measures: {\n name: kendo.getter(\"MEASURE_NAME['#text']\", true),\n caption: kendo.getter(\"MEASURE_CAPTION['#text']\", true),\n uniqueName: kendo.getter(\"MEASURE_UNIQUE_NAME['#text']\", true),\n description: kendo.getter(\"DESCRIPTION['#text']\", true),\n aggregator: kendo.getter(\"MEASURE_AGGREGATOR['#text']\", true),\n groupName: kendo.getter(\"MEASUREGROUP_NAME['#text']\", true),\n displayFolder: kendo.getter(\"MEASURE_DISPLAY_FOLDER['#text']\", true),\n defaultFormat: kendo.getter(\"DEFAULT_FORMAT_STRING['#text']\", true)\n },\n kpis: {\n name: kendo.getter(\"KPI_NAME['#text']\", true),\n caption: kendo.getter(\"KPI_CAPTION['#text']\", true),\n value: kendo.getter(\"KPI_VALUE['#text']\", true),\n goal: kendo.getter(\"KPI_GOAL['#text']\", true),\n status: kendo.getter(\"KPI_STATUS['#text']\", true),\n trend: kendo.getter(\"KPI_TREND['#text']\", true),\n statusGraphic: kendo.getter(\"KPI_STATUS_GRAPHIC['#text']\", true),\n trendGraphic: kendo.getter(\"KPI_TREND_GRAPHIC['#text']\", true),\n description: kendo.getter(\"KPI_DESCRIPTION['#text']\", true),\n groupName: kendo.getter(\"MEASUREGROUP_NAME['#text']\", true)\n },\n dimensions: {\n name: kendo.getter(\"DIMENSION_NAME['#text']\", true),\n caption: kendo.getter(\"DIMENSION_CAPTION['#text']\", true),\n description: kendo.getter(\"DESCRIPTION['#text']\", true),\n uniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n defaultHierarchy: kendo.getter(\"DEFAULT_HIERARCHY['#text']\", true),\n type: kendo.getter(\"DIMENSION_TYPE['#text']\", true)\n //unknown = 0; time = 1; measure = 2; other = 3; quantitative = 5; accounts = 6; customers = 7; products = 8; scenario = 9; utility = 10; currency = 11; rates = 12; channel = 13; promotion = 14; organization = 15; billOfMaterials = 16; geography = 17;\n\n },\n hierarchies: {\n name: kendo.getter(\"HIERARCHY_NAME['#text']\", true),\n caption: kendo.getter(\"HIERARCHY_CAPTION['#text']\", true),\n description: kendo.getter(\"DESCRIPTION['#text']\", true),\n uniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true),\n dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n displayFolder: kendo.getter(\"HIERARCHY_DISPLAY_FOLDER['#text']\", true),\n origin: kendo.getter(\"HIERARCHY_ORIGIN['#text']\", true),\n defaultMember: kendo.getter(\"DEFAULT_MEMBER['#text']\", true)\n },\n levels: {\n name: kendo.getter(\"LEVEL_NAME['#text']\", true),\n caption: kendo.getter(\"LEVEL_CAPTION['#text']\", true),\n description: kendo.getter(\"DESCRIPTION['#text']\", true),\n uniqueName: kendo.getter(\"LEVEL_UNIQUE_NAME['#text']\", true),\n dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n displayFolder: kendo.getter(\"LEVEL_DISPLAY_FOLDER['#text']\", true),\n orderingProperty: kendo.getter(\"LEVEL_ORDERING_PROPERTY['#text']\", true),\n origin: kendo.getter(\"LEVEL_ORIGIN['#text']\", true),\n hierarchyUniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true)\n },\n members: {\n name: kendo.getter(\"MEMBER_NAME['#text']\", true),\n caption: kendo.getter(\"MEMBER_CAPTION['#text']\", true),\n uniqueName: kendo.getter(\"MEMBER_UNIQUE_NAME['#text']\", true),\n dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n hierarchyUniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true),\n levelUniqueName: kendo.getter(\"LEVEL_UNIQUE_NAME['#text']\", true),\n childrenCardinality: kendo.getter(\"CHILDREN_CARDINALITY['#text']\", true)\n }\n };\n\n var xmlaReaderMethods = [\"axes\", \"catalogs\", \"cubes\", \"dimensions\", \"hierarchies\", \"levels\", \"measures\"];\n\n var XmlaDataReader = kendo.data.XmlDataReader.extend({\n init: function(options) {\n kendo.data.XmlDataReader.call(this, options);\n\n this._extend(options);\n },\n _extend: function(options) {\n var idx = 0;\n var length = xmlaReaderMethods.length;\n var methodName;\n var option;\n\n for (; idx < length; idx++) {\n methodName = xmlaReaderMethods[idx];\n option = options[methodName];\n\n if (option && option !== identity) {\n this[methodName] = option;\n }\n }\n },\n parse: function(xml) {\n var result = kendo.data.XmlDataReader.fn.parse(xml.replace(/<(\\/?)(\\w|-)+:/g, \"<$1\"));\n return kendo.getter(\"['Envelope']['Body']\", true)(result);\n },\n errors: function(root) {\n var fault = kendo.getter(\"['Fault']\", true)(root);\n if (fault) {\n return [{\n faultstring: kendo.getter(\"faultstring['#text']\", true)(fault),\n faultcode: kendo.getter(\"faultcode['#text']\", true)(fault)\n }];\n }\n return null;\n },\n axes: function(root) {\n root = kendo.getter(\"ExecuteResponse[\\\"return\\\"].root\", true)(root);\n\n var axes = asArray(kendo.getter(\"Axes.Axis\", true)(root));\n var axis;\n\n var result = {\n columns: {},\n rows: {}\n };\n\n for (var idx = 0; idx < axes.length; idx++) {\n axis = axes[idx];\n\n if (axis[\"@name\"].toLowerCase() !== \"sliceraxis\") {\n if (!result.columns.tuples) {\n result.columns = translateAxis(axis);\n } else {\n result.rows = translateAxis(axis);\n }\n }\n }\n\n return result;\n },\n data: function(root) {\n root = kendo.getter(\"ExecuteResponse[\\\"return\\\"].root\", true)(root);\n\n var cells = asArray(kendo.getter(\"CellData.Cell\", true)(root));\n\n var result = [];\n var ordinalGetter = kendo.getter(\"['@CellOrdinal']\");\n var valueGetter = kendo.getter(\"Value['#text']\");\n var fmtValueGetter = kendo.getter(\"FmtValue['#text']\");\n\n for (var idx = 0; idx < cells.length; idx++) {\n result.push({\n value: valueGetter(cells[idx]),\n fmtValue: fmtValueGetter(cells[idx]),\n ordinal: parseInt(ordinalGetter(cells[idx]), 10)\n });\n }\n\n return result;\n },\n _mapSchema: function(root, getters) {\n root = kendo.getter(\"DiscoverResponse[\\\"return\\\"].root\", true)(root);\n var rows = asArray(kendo.getter(\"row\", true)(root));\n\n var result = [];\n\n for (var idx = 0; idx < rows.length; idx++) {\n var obj = {};\n for (var key in getters) {\n obj[key] = getters[key](rows[idx]);\n }\n result.push(obj);\n }\n\n return result;\n },\n measures: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.measures);\n },\n kpis: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.kpis);\n },\n hierarchies: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.hierarchies);\n },\n levels: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.levels);\n },\n dimensions: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.dimensions);\n },\n cubes: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.cubes);\n },\n catalogs: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.catalogs);\n },\n members: function(root) {\n return this._mapSchema(root, schemaDataReaderMap.members);\n }\n });\n\n extend(true, kendo.data, {\n PivotDataSource: PivotDataSource,\n PivotDataSourceV2: PivotDataSourceV2,\n XmlaTransport: XmlaTransport,\n XmlaDataReader: XmlaDataReader,\n PivotCubeBuilder: PivotCubeBuilder,\n transports: {\n xmla: XmlaTransport\n },\n readers: {\n xmla: XmlaDataReader\n }\n });\n\n var sortExpr = function(expressions, name) {\n if (!expressions) {\n return null;\n }\n\n for (var idx = 0, length = expressions.length; idx < length; idx++) {\n if (expressions[idx].field === name) {\n return expressions[idx];\n }\n }\n\n return null;\n };\n\n var removeExpr = function(expressions, name) {\n var result = [];\n\n for (var idx = 0, length = expressions.length; idx < length; idx++) {\n if (expressions[idx].field !== name) {\n result.push(expressions[idx]);\n }\n }\n\n return result;\n };\n\n kendo.ui.PivotSettingTarget = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that.element.addClass(\"k-pivot-setting\");\n\n that.dataSource = kendo.data.PivotDataSource.create(options.dataSource);\n\n that._refreshHandler = that.refresh.bind(that);\n that.dataSource.first(CHANGE, that._refreshHandler);\n\n if (!options.template) {\n var actions = '';\n\n if (that.options.enabled) {\n actions = \"\" + (kendo.ui.icon(\"x\")) + \"\";\n }\n\n that.options.template = function (data) { return ''\n + \"\"\n + ''\n + \"\" + (data.name || data) + \"\"\n + ''\n + '' + actions + ''\n + ''; };\n }\n\n that.template = kendo.template(that.options.template);\n that.emptyTemplate = kendo.template(that.options.emptyTemplate);\n\n that._sortable();\n\n that.element.on(\"click\" + NS, '.k-chip, .k-button' , function(e) {\n var target = $(e.target).closest(\":not(path,svg)\");\n var action = target.closest('.k-chip-action');\n var name = target.closest(\"[\" + kendo.attr(\"name\") + \"]\")\n .attr(kendo.attr(\"name\"));\n\n if (!name) {\n return;\n }\n\n if (action.hasClass(\"k-setting-delete\")) {\n that.remove(name);\n return;\n }\n\n if (target.closest('.k-chip-actions').length > 0) {\n return;\n }\n\n if (that.options.sortable) {\n var sortDirection = $(e.currentTarget).closest(\":not(path,svg)\").find('.k-i-sort-asc-small,.k-svg-i-sort-asc-small').length ? 'desc' : 'asc';\n\n that.sort({\n field: name,\n dir: sortDirection\n });\n }\n });\n\n if (options.filterable || options.sortable) {\n that.fieldMenu = new ui.PivotFieldMenu(that.element, {\n messages: that.options.messages.fieldMenu,\n filter: \".k-setting-fieldmenu\",\n filterable: options.filterable,\n sortable: options.sortable,\n dataSource: that.dataSource\n });\n }\n\n that.refresh();\n },\n\n options: {\n name: \"PivotSettingTarget\",\n template: null,\n filterable: false,\n sortable: false,\n emptyTemplate: function (data) { return (\"
\" + data + \"
\"); },\n setting: \"columns\",\n enabled: true,\n messages: {\n empty: \"Drop Fields Here\"\n }\n },\n setDataSource: function(dataSource) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n this.dataSource = this.options.dataSource = dataSource;\n\n if (this.fieldMenu) {\n this.fieldMenu.setDataSource(dataSource);\n }\n dataSource.first(CHANGE, this._refreshHandler);\n\n this.refresh();\n },\n\n _sortable: function() {\n var that = this;\n\n if (that.options.enabled) {\n this.sortable = this.element.kendoSortable({\n connectWith: this.options.connectWith,\n hint: that.options.hint,\n filter: \">*:not(.k-empty)\",\n cursor: \"move\",\n start: function(e) {\n e.item.trigger(\"focus\").trigger(\"blur\");\n },\n change: function(e) {\n var name = e.item.attr(kendo.attr(\"name\"));\n\n if (e.action == \"receive\") {\n that.add(name);\n } else if (e.action == \"remove\") {\n that.remove(name);\n } else if (e.action == \"sort\") {\n that.move(name, e.newIndex);\n }\n }\n }).data(\"kendoSortable\");\n }\n },\n\n _isKPI: function(data) {\n return data.type === \"kpi\" || data.measure;\n },\n\n validate: function(data) {\n var isMeasure = (data.type == 2 || \"aggregator\" in data || this._isKPI(data));\n\n if (isMeasure) {\n return this.options.setting === \"measures\";\n }\n\n if (this.options.setting === \"measures\") {\n return isMeasure;\n }\n\n var items = this.dataSource[this.options.setting]();\n var name = data.defaultHierarchy || data.uniqueName;\n if (indexOf(name, items) > -1) {\n return false;\n }\n\n items = this.dataSource[this.options.setting === \"columns\" ? \"rows\" : \"columns\"]();\n if (indexOf(name, items) > -1) {\n return false;\n }\n\n return true;\n },\n\n add: function(name) {\n var items = this.dataSource[this.options.setting]();\n var i, l;\n\n name = Array.isArray(name) ? name.slice(0) : [name];\n\n for (i = 0, l = name.length; i < l; i++) {\n if (indexOf(name[i], items) !== -1) {\n name.splice(i, 1);\n i -= 1;\n l -= 1;\n }\n }\n\n if (name.length) {\n items = items.concat(name);\n this.dataSource[this.options.setting](items);\n }\n },\n\n move: function(name, index) {\n var items = this.dataSource[this.options.setting]();\n var idx = indexOf(name, items);\n\n if (idx > -1) {\n name = items.splice(idx, 1)[0];\n\n items.splice(index, 0, name);\n\n this.dataSource[this.options.setting](items);\n }\n },\n\n remove: function(name) {\n var items = this.dataSource[this.options.setting]();\n var idx = indexOf(name, items);\n var sortExpressions = this.dataSource.sort();\n var filter = this.dataSource.filter();\n\n if (idx > -1) {\n if (filter) {\n filter.filters = removeExpr(filter.filters, name);\n this.dataSource._filter.filters = filter.filters;\n if (!filter.filters.length) {\n this.dataSource._filter = null;\n }\n }\n if (sortExpressions) {\n sortExpressions = removeExpr(sortExpressions, name);\n this.dataSource._sort = sortExpressions;\n }\n items.splice(idx, 1);\n this.dataSource[this.options.setting](items);\n }\n },\n\n sort: function(expr) {\n var sortable = this.options.sortable;\n var allowUnsort = sortable === true || sortable.allowUnsort;\n var skipExpr = allowUnsort && expr.dir === \"asc\";\n\n var expressions = (this.dataSource.sort() || []);\n var result = removeExpr(expressions, expr.field);\n\n if (skipExpr && expressions.length !== result.length) {\n expr = null;\n }\n\n if (expr) {\n result.push(expr);\n }\n\n this.dataSource.sort(result);\n },\n\n refresh: function() {\n var html = \"\";\n var items = this.dataSource[this.options.setting]();\n var length = items.length;\n var idx = 0;\n var item;\n\n if (length) {\n for (; idx < length; idx++) {\n item = items[idx];\n item = item.name === undefined$1 ? { name: item } : item;\n\n html += this.template(extend({ sortIcon: this._sortIcon(item.name) }, item));\n }\n } else {\n html = this.emptyTemplate(this.options.messages.empty);\n }\n\n this.element.html(html);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n this.element.off(NS);\n\n if (this.sortable) {\n this.sortable.destroy();\n }\n\n if (this.fieldMenu) {\n this.fieldMenu.destroy();\n }\n\n this.element = null;\n this._refreshHandler = null;\n },\n\n _sortIcon: function(name) {\n var expressions = this.dataSource.sort();\n var expr = sortExpr(expressions, getName(name));\n var icon = \"\";\n\n if (expr) {\n icon = \"sort-\" + expr.dir;\n }\n\n return icon;\n }\n });\n\n kendo.ui.PivotSettingTargetV2 = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that.dataSource = kendo.data.PivotDataSourceV2.create(options.dataSource);\n\n that._refreshHandler = that.refresh.bind(that);\n that.dataSource.first(CHANGE, that._refreshHandler);\n\n that.template = kendo.template(that.options.template);\n\n that._sortable();\n\n that.element.on(\"click\" + NS, \".k-i-x-circle,.k-svg-i-x-circle\", function(e) {\n var target = $(e.target).closest(\":not(path,svg)\");\n var parent = target.closest(\".k-chip\");\n var name = parent.find(\".k-chip-label\").text();\n\n if (!name) {\n return;\n }\n\n that.remove(name);\n parent.remove();\n that.trigger(\"remove\", { name: name });\n });\n\n if (that.options.navigatable) {\n that.element.on(\"keydown\" + NS, \".k-chip\", function(ev) {\n var chip = $(ev.target),\n key = ev.keyCode,\n name = chip.find(\".k-chip-label\").text();\n\n if (key === keys.DELETE || key === keys.BACKSPACE) {\n var targetIndex = that.options.configuratorNavigation ? that.options.configuratorNavigation.elements.indexOf(chip[0]) : -1;\n chip.find(\".k-i-x-circle,.k-svg-i-x-circle\").trigger(\"click\");\n if (!that.options.configuratorNavigation) {\n return;\n }\n\n that.options.configuratorNavigation.focusElement(\n that.options.configuratorNavigation.elements[targetIndex - 1]\n );\n } else if (key === keys.DOWN && ev.altKey) {\n chip.find(\".k-i-more-vertical,.k-svg-i-more-vertical\").trigger(\"click\");\n } else if (ev.ctrlKey && ev.shiftKey) {\n if (key == keys.LEFT) {\n that.move(name, Math.max(0, chip.index() - 1));\n\n if (!that.options.configuratorNavigation) {\n return;\n }\n\n that.options.configuratorNavigation.focusElement(\n that.element.find(\".k-chip .k-chip-label\")\n .filter(function (ind, el) { return $(el).text() == name; })\n .closest(\".k-chip\")[0]\n );\n } else if (key == keys.RIGHT) {\n that.move(name, Math.min(chip.index() + 1, chip.parent().find(\"> .k-chip\").length - 1));\n\n if (!that.options.configuratorNavigation) {\n return;\n }\n\n that.options.configuratorNavigation.focusElement(\n that.element.find(\".k-chip .k-chip-label\")\n .filter(function (ind, el) { return $(el).text() == name; })\n .closest(\".k-chip\")[0]\n );\n } else if ((key == keys.UP && that.options.setting == \"rows\") ||\n (key == keys.DOWN && that.options.setting == \"columns\")) {\n\n var otherTarget = that.sortable.options.connectWith.data(\"kendoPivotSettingTargetV2\");\n if (!otherTarget) {\n return;\n }\n\n that.remove(name);\n otherTarget.add(name);\n if (!that.options.configuratorNavigation) {\n return;\n }\n\n that.options.configuratorNavigation.focusElement(\n otherTarget.element.find(\".k-chip\").last()[0]\n );\n }\n }\n });\n }\n\n that.fieldMenu = new ui.PivotFieldMenuV2(that.element, {\n messages: that.options.messages.fieldMenu,\n filterable: options.filterable,\n filter: \".k-i-more-vertical,.k-svg-i-more-vertical\",\n sortable: options.sortable,\n dataSource: that.dataSource,\n setting: options.setting\n });\n\n that.refresh();\n },\n\n events: [\"remove\"],\n\n options: {\n name: \"PivotSettingTargetV2\",\n template: null,\n filterable: false,\n sortable: false,\n setting: \"columns\",\n enabled: true,\n messages: {\n empty: \"Drop Fields Here\"\n }\n },\n setDataSource: function(dataSource) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n this.dataSource = this.options.dataSource = dataSource;\n\n if (this.fieldMenu) {\n this.fieldMenu.setDataSource(dataSource);\n }\n dataSource.first(CHANGE, this._refreshHandler);\n\n this.refresh();\n },\n\n _applyState: function() {\n if (this._sortState !== undefined$1) {\n this.dataSource._sort = this._sortState;\n this._sortState = undefined$1;\n }\n\n if (this._stateFilter !== undefined$1) {\n this.dataSource._filter = this._stateFilter;\n this._stateFilter = undefined$1;\n }\n\n this.dataSource[\"_\" + this.options.setting] = this.options.setting === \"measures\" ? normalizeMeasures(this._savedState) : normalizeMembers(this._savedState);\n },\n\n _cancelChanges: function() {\n this._sortState = undefined$1;\n this._stateFilter = undefined$1;\n this._savedState = kendo.deepExtend([], this._initialState);\n this._redraw();\n },\n\n _state: function(newState, modifyInit) {\n var that = this;\n\n if (!newState) {\n return that._savedState || [];\n } else {\n if (!that._savedState || modifyInit) {\n that._initialState = kendo.deepExtend([], newState);\n }\n that._savedState = kendo.deepExtend([], newState);\n }\n },\n\n _sortable: function() {\n var that = this;\n\n this.sortable = this.element.kendoSortable({\n connectWith: this.options.connectWith,\n hint: that.options.hint,\n filter: \">*:not(.k-empty)\",\n cursor: \"move\",\n start: function(e) {\n e.item.focus().blur();\n },\n change: function(e) {\n var name = e.item.find(\".k-chip-label\").text();\n\n if (e.action == \"receive\") {\n that.add(name);\n } else if (e.action == \"remove\") {\n that.remove(name);\n } else if (e.action == \"sort\") {\n that.move(name, e.newIndex);\n }\n }\n }).data(\"kendoSortable\");\n },\n\n add: function(name) {\n var items = this._state();\n var i, l;\n\n name = Array.isArray(name) ? name.slice(0) : [name];\n\n for (i = 0, l = name.length; i < l; i++) {\n if (indexOf(name[i], items) !== -1) {\n name.splice(i, 1);\n i -= 1;\n l -= 1;\n }\n }\n\n if (name.length) {\n items = items.concat(name);\n this._state(items);\n this._redraw();\n }\n },\n\n move: function(name, index) {\n var items = this._state();\n var idx = indexOf(name, items);\n\n if (idx > -1) {\n name = items.splice(idx, 1)[0];\n\n items.splice(index, 0, name);\n\n this._state(items);\n this._redraw();\n }\n },\n\n remove: function(name) {\n var items = this._state();\n var idx = indexOf(name, items);\n var sortExpressions = this.dataSource.sort();\n var filter = this.dataSource.filter();\n\n if (idx > -1) {\n if (filter) {\n filter.filters = removeExpr(filter.filters, name);\n this._savedFilter = this.dataSource._filter;\n this._savedFilter.filters = filter.filters;\n if (!filter.filters.length) {\n this._savedFilter = null;\n }\n }\n if (sortExpressions) {\n sortExpressions = removeExpr(sortExpressions, name);\n this._sortState = sortExpressions;\n }\n items.splice(idx, 1);\n this._state(items);\n this._redraw();\n }\n },\n\n _emptyState: function(enable) {\n var that = this;\n if (enable) {\n that.element.html(this.options.messages.empty)\n .addClass(\"k-settings-description\")\n .removeClass(\"k-chip-list\");\n } else {\n that.element\n .removeClass(\"k-settings-description\")\n .addClass(\"k-chip-list\");\n }\n },\n\n _redraw: function() {\n var items = this._state() || [];\n this._emptyState(!items.length);\n if (items.length) {\n this.element.html(this._targetsHTML(items));\n }\n },\n\n _targetsHTML: function(items) {\n var item;\n var html = \"\";\n var idx = 0;\n var enabled = true;\n\n if (items.length) {\n for (; idx < items.length; idx++) {\n item = items[idx];\n item = item.name === undefined$1 ? { name: item } : item;\n\n html += this.template({ name: item.name, menuenabled: enabled });\n }\n }\n return html;\n },\n\n refresh: function() {\n if (this.dataSource._preventRefresh) {\n return;\n }\n var items = this.dataSource[this.options.setting]();\n this._state(items, true);\n this._emptyState(!this._state().length);\n if (items.length) {\n this.element.html(this._targetsHTML(items));\n }\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n this.element.off(NS);\n\n if (this.sortable) {\n this.sortable.destroy();\n }\n\n if (this.fieldMenu) {\n this.fieldMenu.destroy();\n }\n\n this.element = null;\n this._refreshHandler = null;\n }\n });\n\n var PivotConfiguratorButton = Widget.extend({\n init: function(element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n\n that._element();\n that._attachEvents();\n },\n\n options: {\n name: \"PivotConfiguratorButton\",\n text: \"Change settings\",\n configurator: \"\"\n },\n\n destroy: function() {\n this.element.off(NS);\n },\n\n setOptions: function(options) {\n var that = this;\n kendo.deepExtend(that.options, options);\n this.init(this.element, this.options);\n },\n\n toggle: function() {\n var attr = kendo.attr(\"role\");\n var pivotEl = this.element\n .closest(\"[\" + attr + \"=pivotcontainer]\")\n .find(\"[\" + attr + \"=pivotgridv2]\");\n var pivot;\n\n $(\"#\" + this.options.configurator).toggleClass(\"k-hidden\");\n\n if (pivotEl.length) {\n pivot = pivotEl.getKendoPivotGridV2();\n pivot._setContentWidth();\n pivot._updateDimensions();\n }\n },\n\n _attachEvents: function() {\n this.element.on(\"click\" + NS, this.toggle.bind(this));\n },\n\n _element: function() {\n var options = this.options;\n this.element.addClass(\"k-pivotgrid-configurator-button\");\n this.element.html(kendo.format(\"{0}{1}\",options.text, kendo.ui.icon('gear')));\n }\n });\n\n var PivotContainer = Widget.extend({\n init: function(element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.options = options;\n\n\n that._addClasses();\n },\n\n options: {\n name: \"PivotContainer\",\n configuratorPosition: \"left\"\n },\n\n setOptions: function(options) {\n var that = this;\n kendo.deepExtend(that.options, options);\n this.init(this.element, this.options);\n },\n\n _addClasses: function() {\n var options = this.options;\n var className;\n this.element.removeClass(\"k-flex-row k-flex-row-reverse k-flex-column k-flex-column-reverse\");\n\n switch (options.configuratorPosition) {\n case \"right\":\n className = \"k-flex-row\";\n break;\n case \"left\":\n className = \"k-flex-row-reverse\";\n break;\n case \"bottom\":\n className = \"k-flex-column\";\n break;\n case \"top\":\n className = \"k-flex-column-reverse\";\n break;\n default:\n className = \"k-flex-row\";\n }\n\n this.element\n .addClass(\"k-d-flex k-pos-relative\")\n .addClass(className);\n }\n });\n\n var PivotGridV2 = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that._dataSource();\n\n that._bindConfigurator();\n\n that._ariaId = that.element.attr(\"id\") || kendo.guid();\n that._wrapper();\n\n that._columnHeadersWrapper = $('
');\n that._rowHeadersWrapper = $('
');\n that._contentWrapper = $('
');\n\n that.wrapper.append(that._columnHeadersWrapper);\n that.wrapper.append(that._rowHeadersWrapper);\n that.wrapper.append(that._contentWrapper);\n\n that._columnBuilder = new ColumnRowBuilder( { template: this.options.columnHeaderTemplate, axes: \"columns\", ariaId: that._ariaId });\n that._rowBuilder = new ColumnRowBuilder( { template: this.options.rowHeaderTemplate, axes: \"rows\", ariaId: that._ariaId });\n that._contentBuilder = new ContentBuilderV2( { template: this.options.dataCellTemplate || DATACELL_TEMPLATE, ariaId: that._ariaId });\n\n that._scrollable();\n that._rowHeadersWrapper\n .add(that._columnHeadersWrapper)\n .on(\"click\", \"span.k-icon,span.k-svg-icon\", function() {\n var button = $(this);\n var path = button.parent().attr(kendo.attr(\"key\"));\n var expanded = button.is(\".k-i-chevron-up,.k-svg-i-chevron-up\");\n var isRow = button.closest(\".k-pivotgrid-row-headers\").length !== 0;\n var paths = path.split(\",\");\n var eventName = expanded ? COLLAPSEMEMBER : EXPANDMEMBER;\n\n if (that.trigger(eventName, { path: paths, axis: isRow ? \"rows\" : \"columns\" })) {\n return;\n }\n\n var reducerPayLoad = {\n type: \"HEADERS_ACTION_TOGGLE\",\n payload: paths,\n tree: isRow ? that._rowBuilder.getTree() : that._columnBuilder.getTree()\n };\n var currentAxes = isRow ? that.dataSource._rows : that.dataSource._columns;\n var newHeaders = headersReducer(currentAxes, reducerPayLoad);\n\n that.dataSource._preventRefresh = true;\n\n if (isRow) {\n that.dataSource.rows(newHeaders);\n } else {\n that.dataSource.columns(newHeaders);\n }\n });\n\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n\n that._aria();\n\n if (that.options.navigatable) {\n that._initPivotGridNavigation();\n }\n\n kendo.notify(that);\n },\n\n events: [\n DATABINDING,\n DATABOUND,\n EXPANDMEMBER,\n COLLAPSEMEMBER\n ],\n\n options: {\n name: \"PivotGridV2\",\n autoBind: true,\n height: null,\n columnWidth: null,\n configurator: \"\",\n columnHeaderTemplate: null,\n rowHeaderTemplate: null,\n dataCellTemplate: null,\n messages: {\n emptyCellLabel: \"PivotGrid Empty Cell\"\n }\n },\n\n destroy: function() {\n var that = this;\n Widget.fn.destroy.call(that);\n\n if (that._windowResizeHandler) {\n $(window).off(RESIZE + NS, that._windowResizeHandler);\n that._windowResizeHandler = null;\n }\n },\n\n _aria: function() {\n var that = this;\n that.element.attr(\"role\", \"grid\");\n },\n\n setDataSource: function(dataSource) {\n this.options.dataSource = dataSource;\n\n this._dataSource();\n\n this._bindConfigurator();\n\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n\n _initPivotGridNavigation: function() {\n var that = this;\n\n that.navigation = new PivotGridNavigation({ tabIndex: 0 });\n that.navigation.start(that.element[0]);\n\n var firstCell = that.navigation.first;\n\n if (firstCell) {\n firstCell.setAttribute('tabindex', '0');\n }\n },\n\n _matchAriaAttributes: function(wrapper) {\n var that = this;\n var rowHeaderRows = wrapper.querySelectorAll(\n \".k-pivotgrid-row-headers .k-pivotgrid-row\"\n );\n var rowHeaderCols = !rowHeaderRows[0] ? [] : Array.from(rowHeaderRows[0].children).reduce(\n function (acc, curr) { return (acc += curr.getAttribute(\"colspan\") !== null ? +curr.getAttribute(\"colspan\") : 1); },\n 0\n );\n var colHeaderRows = wrapper.querySelectorAll(\n \".k-pivotgrid-column-headers tr\"\n );\n var colHeaderCells = wrapper.querySelectorAll(\n \".k-pivotgrid-column-headers th\"\n );\n var valueTableCells = wrapper.querySelectorAll(\".k-pivotgrid-values td\");\n var emptyCell = wrapper.querySelector(\".k-pivotgrid-empty-cell\");\n\n emptyCell.setAttribute(\"aria-rowspan\", colHeaderRows.length.toString());\n emptyCell.setAttribute(\"aria-colspan\", rowHeaderCols.toString());\n\n var firstColHeadersRow = colHeaderRows[0];\n var firstColHeaderRowCellsIds = !firstColHeadersRow ? [] : Array.from(firstColHeadersRow.children)\n .map(function (el) { return el.getAttribute(\"id\"); })\n .join(\" \");\n firstColHeadersRow.setAttribute(\n \"aria-owns\",\n ((emptyCell.getAttribute(\"id\")) + \" \" + firstColHeaderRowCellsIds)\n );\n\n rowHeaderRows.forEach(function (row, index) {\n var valueCellsIds = that.filterAndMap(\n Array.from(valueTableCells),\n function (c) {\n var idParts = c.getAttribute(\"id\").split(\"-\");\n return idParts[idParts.length - 2] === (index + 1).toString();\n },\n function (c) { return c.getAttribute(\"id\"); }\n );\n\n row.setAttribute(\"aria-owns\", valueCellsIds.join(\" \"));\n });\n\n valueTableCells.forEach(function (cell) {\n var idParts = cell.getAttribute(\"id\").split(\"-\");\n var cellColIndex = +idParts[idParts.length - 1];\n var colHeaderCellsIds = that.filterAndMap(\n Array.from(colHeaderCells),\n function (c) {\n var idParts = c.getAttribute(\"id\").split(\"-\");\n var headerCellColIndex = +idParts[idParts.length - 1];\n var headerCellColspan = +c.getAttribute(\"colspan\");\n var colIndexIsEqual = cellColIndex === headerCellColIndex;\n var cellColIndexIsWithinHeaderCellRange =\n headerCellColspan > 1 &&\n headerCellColIndex < cellColIndex &&\n headerCellColIndex + headerCellColspan - 1 >= cellColIndex;\n\n return colIndexIsEqual || cellColIndexIsWithinHeaderCellRange;\n },\n function (c) { return c.getAttribute(\"id\"); }\n );\n\n cell.setAttribute(\"aria-describedby\", colHeaderCellsIds.join(\" \"));\n });\n },\n\n filterAndMap: function(arr, predicate, mapper) {\n return arr.reduce(\n function (acc, curr) { return (predicate(curr) ? acc.concat( [mapper(curr)]) : acc); },\n []\n );\n },\n\n _dataSource: function() {\n var that = this;\n var dataSource = that.options.dataSource;\n\n dataSource = Array.isArray(dataSource) ? { data: dataSource } : dataSource;\n\n if (that.dataSource && this._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler)\n .unbind(PROGRESS, that._progressHandler)\n .unbind(ERROR, that._errorHandler);\n } else {\n that._refreshHandler = that.refresh.bind(that);\n that._progressHandler = that._requestStart.bind(that);\n that._errorHandler = that._error.bind(that);\n }\n\n that.dataSource = kendo.data.PivotDataSourceV2.create(dataSource)\n .bind(CHANGE, that._refreshHandler)\n .bind(PROGRESS, that._progressHandler)\n .bind(ERROR, that._errorHandler);\n },\n\n _resize: function() {\n var that = this;\n that.wrapper[0].style.setProperty('--kendo-scrollbar-width', kendo.format(\"{0}px\", getScollWidth()));\n },\n\n _scrollable: function() {\n var that = this;\n var columnsHeader = that._columnHeadersWrapper;\n var rowsHeader = that._rowHeadersWrapper;\n\n that._resize();\n that._windowResizeHandler = that._resize.bind(that);\n\n that._contentWrapper.scroll(function() {\n kendo.scrollLeft(columnsHeader, this.scrollLeft);\n rowsHeader.scrollTop(this.scrollTop);\n });\n\n rowsHeader.bind(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, that._wheelScroll.bind(that));\n $(window).on(RESIZE + NS, that._windowResizeHandler);\n },\n\n _wheelScroll: function(e) {\n if (e.ctrlKey) {\n return;\n }\n\n var delta = kendo.wheelDeltaY(e);\n var scrollTop = this._contentWrapper.scrollTop();\n\n if (delta) {\n e.preventDefault();\n $(e.currentTarget).one(\"wheel\" + NS, false);\n\n this._rowHeadersWrapper.scrollTop(scrollTop + (-delta));\n this._contentWrapper.scrollTop(scrollTop + (-delta));\n }\n },\n\n _wrapper: function() {\n var height = this.options.height;\n\n this.wrapper = this.element.addClass(\"k-pivotgrid\");\n var emptyCell = $((\"\" + (this.options.messages.emptyCellLabel) + \"\"));\n this.wrapper.append(emptyCell);\n\n if (height) {\n this.wrapper.css(\"height\", height);\n }\n },\n\n _progress: function(toggle) {\n kendo.ui.progress(this.wrapper, toggle);\n },\n\n _error: function() {\n this._progress(false);\n },\n\n _requestStart: function() {\n this._progress(true);\n },\n\n _updateDimensions: function() {\n var that = this;\n that.wrapper.css({\n \"grid-template-columns\": kendo.format(\"{0}px 1fr\", that._rowHeadersWrapper.find(\".k-pivotgrid-table\")[0].offsetWidth),\n \"grid-template-rows\": kendo.format(\"{0}px 1fr\", that._columnHeadersWrapper.find(\".k-pivotgrid-table\")[0].offsetHeight),\n });\n },\n\n _setContentWidth: function() {\n if (!this.options.columnWidth) {\n return;\n }\n var contentTable = this._contentWrapper.find(\"table\");\n var columnTable = this._columnHeadersWrapper.children(\"table\");\n var rowTable = this._rowHeadersWrapper.children(\"table\");\n\n contentTable.add(columnTable).add(rowTable).find(\"col\").width(this.options.columnWidth);\n },\n\n _bindConfigurator: function() {\n var configurator = this.options.configurator;\n if (configurator) {\n $(configurator).kendoPivotConfiguratorV2(\"setDataSource\", this.dataSource);\n }\n },\n\n cellInfoByElement: function(element) {\n element = $(element);\n\n return this.cellInfo(element.index(), element.parent(\"tr\").index());\n },\n\n cellInfo: function(columnIndex, rowIndex) {\n var contentBuilder = this._contentBuilder;\n var dataIndex;\n var dataItem;\n\n if (columnIndex >= contentBuilder.columnsCount || columnIndex < 0 ||\n rowIndex >= contentBuilder.rowsCount || rowIndex < 0) {\n return null;\n }\n\n dataIndex = rowIndex * contentBuilder.columnsCount + columnIndex;\n dataItem = contentBuilder.hash[dataIndex < 0 ? 0 : dataIndex];\n\n return {\n columnTuple: dataItem.columnTuple,\n rowTuple: dataItem.rowTuple,\n dataItem: dataItem.data\n };\n },\n\n refresh: function() {\n var that = this;\n\n var dataSource = that.dataSource;\n if (that.trigger(DATABINDING, { action: \"rebind\" } )) {\n return;\n }\n\n var lastFocusedCellID = kendo._activeElement() ? kendo._activeElement().id : null;\n var lastCellIdWithTabIndex = that.wrapper.find(\"[tabindex=0]\").attr(\"id\");\n that._columnBuilder.setTuples(dataSource._columnTuples);\n that._columnHeadersWrapper.html(that._columnBuilder.build());\n\n that._rowBuilder.setTuples(dataSource._rowTuples);\n that._rowHeadersWrapper.html(that._rowBuilder.build());\n\n that._contentBuilder.setRowColumnInfo({\n columnHeaderLeafs: that._columnBuilder.getHeaderLeafs(),\n rowHeaderLeafs: that._rowBuilder.getHeaderLeafs(),\n columnHeaderBreadth: that._columnBuilder.getBreadth(),\n rowHeaderDepth: that._rowBuilder.getBreadth(),\n data: dataSource._view\n });\n\n that._contentWrapper.html(that._contentBuilder.build());\n\n\n that._setContentWidth();\n that._updateDimensions();\n\n that._progress(false);\n\n that.trigger(DATABOUND);\n that._matchAriaAttributes(that.wrapper[0]);\n\n if (!that.navigation) {\n return;\n }\n\n if (lastCellIdWithTabIndex && that.element.find((\"#\" + lastCellIdWithTabIndex)).length > 0) {\n that.element.find((\"#\" + lastCellIdWithTabIndex)).attr('tabindex', '0');\n } else {\n var firstCell = that.navigation.first;\n\n if (firstCell) {\n firstCell.setAttribute('tabindex', '0');\n }\n }\n\n if (lastFocusedCellID && lastFocusedCellID.indexOf(that._ariaId) == 0) {\n that.navigation.focusElement(that.element.find((\"#\" + lastFocusedCellID))[0]);\n }\n }\n });\n\n ui.plugin(PivotConfiguratorButton);\n ui.plugin(PivotContainer);\n ui.plugin(PivotGridV2);\n\n var PivotGrid = Widget.extend({\n init: function(element, options) {\n var that = this;\n var columnBuilder;\n var rowBuilder;\n\n Widget.fn.init.call(that, element, options);\n\n STATE_COLLAPSED_ICONNAME = kendo.support.isRtl(that.element) ? \"caret-alt-left\" : \"caret-alt-right\";\n\n that._dataSource();\n\n that._bindConfigurator();\n\n that._wrapper();\n that._createLayout();\n\n that._columnBuilder = columnBuilder = new ColumnBuilder();\n that._rowBuilder = rowBuilder = new RowBuilder();\n that._contentBuilder = new ContentBuilder();\n\n that._templates();\n\n that.columnsHeader\n .add(that.rowsHeader)\n .on(\"click\", \"span.k-icon,span.k-svg-icon\", function() {\n var button = $(this);\n var builder = columnBuilder;\n var action = \"expandColumn\";\n var eventName;\n var path = button.attr(kendo.attr(\"path\"));\n var eventArgs = {\n axis: \"columns\",\n path: $.parseJSON(path)\n };\n\n if (button.parent().is(\"td\")) {\n builder = rowBuilder;\n action = \"expandRow\";\n eventArgs.axis = \"rows\";\n }\n\n var expanded = button.is(STATE_EXPANDED_SELECTOR);\n var metadata = builder.metadata[path];\n var request = metadata.expanded === undefined$1;\n\n eventName = expanded ? COLLAPSEMEMBER : EXPANDMEMBER;\n eventArgs.childrenLoaded = metadata.maxChildren > metadata.children;\n\n if (that.trigger(eventName, eventArgs)) {\n return;\n }\n\n builder.metadata[path].expanded = !expanded;\n kendo.ui.icon(button,{ icon: !expanded ? STATE_EXPANDED_ICONNAME : STATE_COLLAPSED_ICONNAME });\n\n if (!expanded && request) {\n that.dataSource[action](eventArgs.path);\n } else {\n that.refresh();\n }\n });\n\n that._scrollable();\n\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n\n kendo.notify(that);\n },\n\n events: [\n DATABINDING,\n DATABOUND,\n EXPANDMEMBER,\n COLLAPSEMEMBER\n ],\n\n options: {\n name: \"PivotGrid\",\n autoBind: true,\n reorderable: true,\n filterable: false,\n sortable: false,\n navigatable: false,\n height: null,\n columnWidth: 100,\n configurator: \"\",\n columnHeaderTemplate: null,\n rowHeaderTemplate: null,\n dataCellTemplate: null,\n kpiStatusTemplate: null,\n kpiTrendTemplate: null,\n messages: {\n measureFields: \"Drop Data Fields Here\",\n columnFields: \"Drop Column Fields Here\",\n rowFields: \"Drop Rows Fields Here\"\n }\n },\n\n _templates: function() {\n var columnTemplate = this.options.columnHeaderTemplate;\n var rowTemplate = this.options.rowHeaderTemplate;\n var dataTemplate = this.options.dataCellTemplate;\n var kpiStatusTemplate = this.options.kpiStatusTemplate;\n var kpiTrendTemplate = this.options.kpiTrendTemplate;\n\n this._columnBuilder.template = kendo.template(columnTemplate || HEADER_TEMPLATE, { useWithBlock: !!columnTemplate });\n this._contentBuilder.dataTemplate = kendo.template(dataTemplate || DATACELL_TEMPLATE, { useWithBlock: !!dataTemplate });\n this._contentBuilder.kpiStatusTemplate = kendo.template(kpiStatusTemplate || KPISTATUS_TEMPLATE, { useWithBlock: !!kpiStatusTemplate });\n this._contentBuilder.kpiTrendTemplate = kendo.template(kpiTrendTemplate || KPITREND_TEMPLATE, { useWithBlock: !!kpiTrendTemplate });\n this._rowBuilder.template = kendo.template(rowTemplate || HEADER_TEMPLATE, { useWithBlock: !!rowTemplate });\n },\n\n _bindConfigurator: function() {\n var configurator = this.options.configurator;\n if (configurator) {\n $(configurator).kendoPivotConfigurator(\"setDataSource\", this.dataSource);\n }\n },\n\n cellInfoByElement: function(element) {\n element = $(element);\n\n return this.cellInfo(element.index(), element.parent(\"tr\").index());\n },\n\n cellInfo: function(columnIndex, rowIndex) {\n var contentBuilder = this._contentBuilder;\n var columnInfo = contentBuilder.columnIndexes[columnIndex || 0];\n var rowInfo = contentBuilder.rowIndexes[rowIndex || 0];\n var dataIndex;\n\n if (!columnInfo || !rowInfo) {\n return null;\n }\n\n dataIndex = (rowInfo.index * contentBuilder.rowLength) + columnInfo.index;\n\n return {\n columnTuple: columnInfo.tuple,\n rowTuple: rowInfo.tuple,\n measure: columnInfo.measure || rowInfo.measure,\n dataItem: this.dataSource.view()[dataIndex]\n };\n },\n\n setDataSource: function(dataSource) {\n this.options.dataSource = dataSource;\n\n this._dataSource();\n\n if (this.measuresTarget) {\n this.measuresTarget.setDataSource(dataSource);\n }\n\n if (this.rowsTarget) {\n this.rowsTarget.setDataSource(dataSource);\n }\n\n if (this.columnsTarget) {\n this.columnsTarget.setDataSource(dataSource);\n }\n\n this._bindConfigurator();\n\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n\n setOptions: function(options) {\n Widget.fn.setOptions.call(this, options);\n\n this._templates();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n clearTimeout(this._headerReflowTimeout);\n },\n\n _dataSource: function() {\n var that = this;\n var dataSource = that.options.dataSource;\n\n dataSource = Array.isArray(dataSource) ? { data: dataSource } : dataSource;\n\n if (that.dataSource && this._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler)\n .unbind(STATERESET, that._stateResetHandler)\n .unbind(PROGRESS, that._progressHandler)\n .unbind(ERROR, that._errorHandler);\n } else {\n that._refreshHandler = that.refresh.bind(that);\n that._progressHandler = that._requestStart.bind(that);\n that._stateResetHandler = that._stateReset.bind(that);\n that._errorHandler = that._error.bind(that);\n }\n\n that.dataSource = kendo.data.PivotDataSource.create(dataSource)\n .bind(CHANGE, that._refreshHandler)\n .bind(PROGRESS, that._progressHandler)\n .bind(STATERESET, that._stateResetHandler)\n .bind(ERROR, that._errorHandler);\n },\n\n _error: function() {\n this._progress(false);\n },\n\n _requestStart: function() {\n this._progress(true);\n },\n\n _stateReset: function() {\n this._columnBuilder.reset();\n this._rowBuilder.reset();\n },\n\n _wrapper: function() {\n var height = this.options.height;\n\n this.wrapper = this.element.addClass(\"k-pivot\");\n\n if (height) {\n this.wrapper.css(\"height\", height);\n }\n },\n\n _measureFields: function() {\n this.measureFields = $(DIV).addClass(\"k-pivot-toolbar k-toolbar k-toolbar-md k-settings-measures\");\n\n this.measuresTarget = this._createSettingTarget(this.measureFields, {\n setting: \"measures\",\n messages: {\n empty: this.options.messages.measureFields\n }\n });\n },\n\n _createSettingTarget: function(element, options) {\n var template,\n pivotOptions = this.options;\n\n template = function (ref) {\n var sortIcon = ref.sortIcon;\n var name = ref.name;\n\n return ''\n + \"\"\n + ''\n + \"\" + name + \"\"\n + ''\n + ''\n + getIcons(sortIcon, options, pivotOptions)\n + ''\n + '';\n };\n\n return new kendo.ui.PivotSettingTarget(element, $.extend({\n dataSource: this.dataSource,\n template: template,\n emptyTemplate: function (data) { return (\"\" + data + \"\"); },\n enabled: this.options.reorderable\n }, options));\n },\n\n _initSettingTargets: function() {\n this.columnsTarget = this._createSettingTarget(this.columnFields, {\n connectWith: this.rowFields,\n setting: \"columns\",\n filterable: this.options.filterable,\n sortable: this.options.sortable,\n messages: {\n empty: this.options.messages.columnFields,\n fieldMenu: this.options.messages.fieldMenu\n }\n });\n\n this.rowsTarget = this._createSettingTarget(this.rowFields, {\n connectWith: this.columnFields,\n setting: \"rows\",\n filterable: this.options.filterable,\n sortable: this.options.sortable,\n messages: {\n empty: this.options.messages.rowFields,\n fieldMenu: this.options.messages.fieldMenu\n }\n });\n },\n\n _createLayout: function() {\n var that = this;\n var layoutTable = $(LAYOUT_TABLE);\n var leftContainer = layoutTable.find(\".k-pivot-rowheaders\");\n var rightContainer = layoutTable.find(\".k-pivot-table\");\n var gridWrapper = $(DIV).addClass(\"k-grid\");\n\n that._measureFields();\n that.columnFields = $(DIV).addClass(\"k-pivot-toolbar k-toolbar k-toolbar-md k-settings-columns\");\n\n that.rowFields = $(DIV).addClass(\"k-pivot-toolbar k-toolbar k-toolbar-md k-settings-rows\");\n that.columnsHeader = $('
')\n .wrap('
');\n\n that.columnsHeader.parent().css(\"padding-right\", kendo.support.scrollbar());\n\n that.rowsHeader = $('
');\n that.content = $('
');\n\n leftContainer.append(that.measureFields);\n leftContainer.append(that.rowFields);\n leftContainer.append(that.rowsHeader);\n\n gridWrapper.append(that.columnsHeader.parent());\n gridWrapper.append(that.content);\n\n rightContainer.append(that.columnFields);\n rightContainer.append(gridWrapper);\n\n that.wrapper.append(layoutTable);\n\n that.columnsHeaderTree = new kendo.dom.Tree(that.columnsHeader[0]);\n that.rowsHeaderTree = new kendo.dom.Tree(that.rowsHeader[0]);\n that.contentTree = new kendo.dom.Tree(that.content[0]);\n\n that._initSettingTargets();\n },\n\n _progress: function(toggle) {\n kendo.ui.progress(this.wrapper, toggle);\n },\n\n _resize: function() {\n if (this.content[0].firstChild) {\n this._setSectionsWidth();\n this._setSectionsHeight();\n this._setContentWidth();\n this._setContentHeight();\n this._columnHeaderReflow();\n }\n },\n\n _columnHeaderReflow: function() {\n var columnTable = this.columnsHeader.children(\"table\");\n\n if (!kendo.support.browser.mozilla) {\n return;\n }\n\n clearTimeout(this._headerReflowTimeout);\n\n columnTable.css(\"table-layout\", \"auto\");\n\n this._headerReflowTimeout = setTimeout(function() {\n columnTable.css(\"table-layout\", \"\");\n });\n },\n\n _setSectionsWidth: function() {\n var rowsHeader = this.rowsHeader;\n var leftColumn = rowsHeader.parent(\".k-pivot-rowheaders\").width(AUTO);\n var width;\n\n width = Math.max(outerWidth(this.measureFields), outerWidth(this.rowFields));\n width = Math.max(rowsHeader.children(\"table\").width(), width);\n\n leftColumn.width(width);\n },\n\n _setSectionsHeight: function() {\n var measureFieldsHeight = this.measureFields.height(AUTO).height();\n var columnFieldsHeight = this.columnFields.height(AUTO).height();\n var rowFieldsHeight = this.rowFields.height(AUTO).innerHeight();\n var columnsHeight = this.columnsHeader.height(AUTO).innerHeight();\n\n var padding = rowFieldsHeight - this.rowFields.height();\n\n var firstRowHeight = columnFieldsHeight > measureFieldsHeight ? columnFieldsHeight : measureFieldsHeight;\n var secondRowHeight = columnsHeight > rowFieldsHeight ? columnsHeight : rowFieldsHeight;\n\n this.measureFields.height(firstRowHeight);\n this.columnFields.height(firstRowHeight);\n this.rowFields.height(secondRowHeight - padding);\n this.columnsHeader.height(secondRowHeight);\n },\n\n _setContentWidth: function() {\n var contentTable = this.content.find(\"table\");\n var columnTable = this.columnsHeader.children(\"table\");\n\n var rowLength = contentTable.children(\"colgroup\").children().length;\n\n var calculatedWidth = rowLength * this.options.columnWidth;\n var minWidth = Math.ceil((calculatedWidth / this.content.width()) * 100);\n\n if (minWidth < 100) {\n minWidth = 100;\n }\n\n contentTable.add(columnTable).css(\"width\", minWidth + \"%\");\n\n this._resetColspan(columnTable);\n },\n\n _setContentHeight: function() {\n var that = this;\n var content = that.content;\n var rowsHeader = that.rowsHeader;\n var innerHeight = that.wrapper.innerHeight();\n var scrollbar = kendo.support.scrollbar();\n var skipScrollbar = content[0].offsetHeight === content[0].clientHeight;\n var height = that.options.height;\n\n if (that.wrapper.is(\":visible\")) {\n if (!innerHeight || !height) {\n if (skipScrollbar) {\n scrollbar = 0;\n }\n\n content.height(\"auto\");\n rowsHeader.height(content.height() - scrollbar);\n return;\n }\n\n innerHeight -= outerHeight(that.columnFields);\n innerHeight -= outerHeight(that.columnsHeader.parent());\n\n if (innerHeight <= scrollbar * 2) { // do not set height if proper scrollbar cannot be displayed\n innerHeight = scrollbar * 2 + 1;\n if (!skipScrollbar) {\n innerHeight += scrollbar;\n }\n }\n\n content.height(innerHeight);\n\n if (skipScrollbar) {\n scrollbar = 0;\n }\n\n rowsHeader.height(innerHeight - scrollbar);\n }\n },\n\n _resetColspan: function(columnTable) {\n var that = this;\n var cell = columnTable.children(\"tbody\").children().first().children().first();\n\n if (that._colspan === undefined$1) {\n that._colspan = cell.attr(\"colspan\");\n }\n\n cell.attr(\"colspan\", 1);\n\n clearTimeout(that._layoutTimeout);\n\n that._layoutTimeout = setTimeout(function() {\n cell.attr(\"colspan\", that._colspan);\n that._colspan = undefined$1;\n });\n },\n\n _axisMeasures: function(axis) {\n var result = [];\n var dataSource = this.dataSource;\n var measures = dataSource.measures();\n var hasMeasure = measures.length > 1 || (measures[0] && measures[0].type);\n\n if (dataSource.measuresAxis() === axis) {\n if (dataSource[axis]().length === 0 || hasMeasure) {\n result = measures;\n }\n }\n\n return result;\n },\n\n items: function() {\n return [];\n },\n\n refresh: function() {\n var that = this;\n var dataSource = that.dataSource;\n\n var axes = dataSource.axes();\n var columns = (axes.columns || {}).tuples || [];\n var rows = (axes.rows || {}).tuples || [];\n\n var columnBuilder = that._columnBuilder;\n var rowBuilder = that._rowBuilder;\n\n var columnAxis = {};\n var rowAxis = {};\n\n if (that.trigger(DATABINDING, { action: \"rebind\" } )) {\n return;\n }\n\n columnBuilder.measures = that._axisMeasures(AXIS_COLUMNS);\n rowBuilder.measures = that._axisMeasures(AXIS_ROWS);\n\n that.columnsHeaderTree.render(columnBuilder.build(columns));\n that.rowsHeaderTree.render(rowBuilder.build(rows));\n\n columnAxis = {\n indexes: columnBuilder._indexes,\n measures: columnBuilder.measures,\n metadata: columnBuilder.metadata\n };\n\n rowAxis = {\n indexes: rowBuilder._indexes,\n measures: rowBuilder.measures,\n metadata: rowBuilder.metadata\n };\n\n that.contentTree.render(that._contentBuilder.build(dataSource.view(), columnAxis, rowAxis));\n\n that._resize();\n\n if (that.touchScroller) {\n that.touchScroller.contentResized();\n } else {\n var touchScroller = kendo.touchScroller(that.content);\n\n if (touchScroller && touchScroller.movable) {\n that.touchScroller = touchScroller;\n\n touchScroller.movable.bind(\"change\", function(e) {\n kendo.scrollLeft(that.columnsHeader, -e.sender.x);\n that.rowsHeader.scrollTop(-e.sender.y);\n });\n }\n }\n\n that._progress(false);\n\n that.trigger(DATABOUND);\n },\n\n _scrollable: function() {\n var that = this;\n var columnsHeader = that.columnsHeader;\n var rowsHeader = that.rowsHeader;\n\n that.content.on(\"scroll\", function() {\n kendo.scrollLeft(columnsHeader, this.scrollLeft);\n rowsHeader.scrollTop(this.scrollTop);\n });\n\n rowsHeader.on(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, that._wheelScroll.bind(that));\n },\n\n _wheelScroll: function(e) {\n if (e.ctrlKey) {\n return;\n }\n\n var delta = kendo.wheelDeltaY(e);\n var scrollTop = this.content.scrollTop();\n\n if (delta) {\n e.preventDefault();\n //In Firefox DOMMouseScroll event cannot be canceled\n $(e.currentTarget).closest(\":not(path,svg)\").one(\"wheel\" + NS, false);\n\n this.rowsHeader.scrollTop(scrollTop + (-delta));\n this.content.scrollTop(scrollTop + (-delta));\n }\n }\n });\n\n var element = kendo.dom.element;\n var htmlNode = kendo.dom.html;\n\n var createMetadata = function(levelNum, memberIdx) {\n return {\n maxChildren: 0,\n children: 0,\n maxMembers: 0,\n members: 0,\n measures: 1,\n levelNum: levelNum,\n parentMember: memberIdx !== 0\n };\n };\n\n var buildPath = function(tuple, index) {\n var path = [];\n var idx = 0;\n\n for (; idx <= index; idx++) {\n path.push(tuple.members[idx].name);\n }\n\n return path;\n };\n\n var tupleName = function(tuple, index) {\n var name = \"\";\n var idx = 0;\n\n for (; idx <= index; idx++) {\n name += tuple.members[idx].name;\n }\n\n return name;\n };\n\n var ContentBuilderV2 = Class.extend({\n init: function(options) {\n this.template = kendo.template(options.template);\n this.ariaId = options.ariaId;\n this.hash = [];\n },\n\n setRowColumnInfo: function(options) {\n this.data = options.data;\n this.columnHeaderLeafs = options.columnHeaderLeafs;\n this.rowHeaderLeafs = options.rowHeaderLeafs;\n this.columnHeaderBreadth = options.columnHeaderBreadth;\n this.rowHeaderDepth = options.rowHeaderDepth;\n this.hash.length = 0;\n },\n\n addColElements: function(count) {\n var html = \"\";\n\n for (var index = 0; index < count; index++) {\n html += \"\";\n }\n\n this.table.find(\"colgroup\").append(html);\n },\n\n addRowElements: function(data) {\n var that = this;\n var body = that.table.find(\"tbody\");\n var row;\n\n for (var index = 0; index < data.length; index++) {\n row = $((\"\"));\n body.append(row);\n that.addColumCell(row, data[index], index);\n }\n\n this.rowsCount = data.length;\n },\n\n addColumCell: function(rowEl, rowItem, rowIndex) {\n var that = this;\n for (var index = 0; index < rowItem.cells.length; index++) {\n var cell = rowItem.cells[index];\n if (cell) {\n var cellEl = $((\"\"));\n if (this.rowHeaderLeafs[rowIndex].total || this.columnHeaderLeafs[index].total) {\n cellEl.addClass(\"k-pivotgrid-header-total\");\n }\n cellEl.append(that.template({\n dataItem: cell.data,\n rowTuple: cell.rowTuple,\n columnTuple: cell.columnTuple\n }));\n this.hash.push(cell);\n rowEl.append(cellEl);\n }\n }\n },\n\n build: function() {\n var data = toData((this.data || []).slice(), this.columnHeaderLeafs, this.rowHeaderLeafs, this.columnHeaderBreadth, this.rowHeaderDepth);\n var that = this;\n\n var table = $((\"\"));\n\n that.table = table;\n that.addColElements(this.columnHeaderLeafs.length);\n that.addRowElements(data);\n this.rowsCount = data.length;\n this.columnsCount = this.columnHeaderLeafs.length;\n\n return that.table;\n }\n });\n\n var ColumnRowBuilder = Class.extend({\n init: function(options) {\n this.tuples = options.tuples;\n this.axes = options.axes;\n this.ariaId = options.ariaId;\n this.headerTemplate = kendo.template(HEADERTEMPLATE);\n if (options.template) {\n this.template = kendo.template(options.template);\n }\n },\n\n setTuples: function(tuples) {\n this.tuples = tuples;\n },\n\n addColElements: function(count) {\n var html = \"\";\n\n for (var index = 0; index < count; index++) {\n html += \"\";\n }\n\n this.table.find(\"colgroup\").append(html);\n },\n\n addRowElements: function(columnHeaderRows) {\n var that = this;\n var body = that.table.find(\"tbody\");\n var row;\n\n for (var index = 0; index < columnHeaderRows.length; index++) {\n row = $('');\n body.append(row);\n that.addColumCell(row, columnHeaderRows[index], index);\n }\n },\n\n addColumCell: function(rowEl, rowItem, rowIndex) {\n var that = this;\n var cellEl;\n var cell;\n\n for (var index = 0; index < rowItem.cells.length; index++) {\n cell = rowItem.cells[index];\n if (cell) {\n cellEl = $(that.headerTemplate({\n id: ((that.ariaId) + \"-\" + (that.axes == \"columns\" ? \"ch\" : \"rh\") + \"-\" + (rowIndex + 1) + \"-\" + (index + 1)),\n rowspan: cell.rowSpan,\n colspan: cell.colSpan,\n key: cell.path.join(\",\") + (cell.total ? '|[TOTAL]' : ''),\n iconClass: (cell.children && cell.children.length) ? \"up\" : \"down\",\n expandable: cell.hasChildren && !cell.total,\n expanded: (cell.children && cell.children.length) ? \"true\" : \"false\",\n headerClass: kendo.format(\"k-pivotgrid-cell{0}{1}\", cell.total ? \" k-pivotgrid-header-total\" : \"\", cell.levelNum === 0 ? \" k-pivotgrid-header-root\" : \"\"),\n role: that.axes == \"columns\" ? \"columnheader\" : \"rowheader\"\n }));\n cellEl.append(that.template ? that.template({ member: cell }) : cell.caption);\n rowEl.append(cellEl);\n }\n }\n },\n\n build: function() {\n var tree = toTree((this.tuples || []).slice());\n var treeData = this.axes == \"columns\" ? toColumns(tree) : toRows(tree);\n var headerRows = treeData[0];\n var headerLeafs = treeData[1];\n var breadth = treeData[2];\n var rowHeaderBreadth = treeData[3];\n var that = this;\n that._tree = tree;\n that._breadth = breadth;\n that._headerLeafs = headerLeafs;\n\n var table = $((\"\"));\n\n that.table = table;\n that.addColElements(this.axes == \"columns\" ? headerLeafs.length : rowHeaderBreadth);\n that.addRowElements(headerRows);\n\n return that.table;\n },\n\n getTree: function() {\n return this._tree;\n },\n\n getBreadth: function() {\n return this._breadth;\n },\n\n getHeaderLeafs: function() {\n return this._headerLeafs;\n }\n });\n\n var ColumnBuilder = Class.extend({\n init: function() {\n this.measures = 1;\n this.metadata = {};\n },\n\n build: function(tuples) {\n var tbody = this._tbody(tuples);\n var colgroup = this._colGroup();\n\n return [\n element(\"table\", { className: tableStyles.headerTable }, [colgroup, tbody])\n ];\n },\n\n reset: function() {\n this.metadata = {};\n },\n\n _colGroup: function() {\n var length = this._rowLength();\n var children = [];\n var idx = 0;\n\n for (; idx < length; idx++) {\n children.push(element(\"col\", null));\n }\n\n return element(\"colgroup\", null, children);\n },\n\n _tbody: function(tuples) {\n var root = tuples[0];\n\n this.map = {};\n this.rows = [];\n this.rootTuple = root;\n\n this._indexes = [];\n\n if (root) {\n this._buildRows(root, 0);\n this._normalize();\n } else {\n this.rows.push(element(\"tr\", { className: tableStyles.tableRow }, [ element(\"th\", { className: tableStyles.header } , [ htmlNode(\" \") ]) ]));\n }\n\n return element(\"tbody\", { className: tableStyles.tbody }, this.rows);\n },\n\n _normalize: function() {\n var rows = this.rows;\n var rowsLength = rows.length;\n var rowIdx = 0;\n var row;\n\n var cellsLength;\n var cellIdx;\n var cells;\n var cell;\n\n for (; rowIdx < rowsLength; rowIdx++) {\n row = rows[rowIdx];\n\n if (row.rowSpan === 1) {\n continue;\n }\n\n cells = row.children;\n\n cellIdx = 0;\n cellsLength = cells.length;\n\n for (; cellIdx < cellsLength; cellIdx++) {\n cell = cells[cellIdx];\n\n if (cell.tupleAll) {\n cell.attr.rowSpan = row.rowSpan;\n }\n }\n }\n },\n\n _rowIndex: function(row) {\n var rows = this.rows;\n var length = rows.length;\n var idx = 0;\n\n for (; idx < length; idx++) {\n if (rows[idx] === row) {\n break;\n }\n }\n\n return idx;\n },\n\n _rowLength: function() {\n var cells = this.rows[0] ? this.rows[0].children : [];\n var length = cells.length;\n var rowLength = 0;\n var idx = 0;\n\n if (length) {\n for (; idx < length; idx++) {\n rowLength += cells[idx].attr.colSpan || 1;\n }\n }\n\n if (!rowLength) {\n rowLength = this.measures;\n }\n\n return rowLength;\n },\n\n _row: function(tuple, memberIdx, parentMember) {\n var rootName = this.rootTuple.members[memberIdx].name;\n var levelNum = tuple.members[memberIdx].levelNum;\n var rowKey = rootName + levelNum;\n var map = this.map;\n var parentRow;\n var children;\n\n var row = map[rowKey];\n\n if (!row) {\n row = element(\"tr\", { className: tableStyles.tableRow }, []);\n\n row.parentMember = parentMember;\n row.collapsed = 0;\n row.colSpan = 0;\n row.rowSpan = 1;\n\n map[rowKey] = row;\n parentRow = map[rootName + (Number(levelNum) - 1)];\n\n if (parentRow) {\n children = parentRow.children;\n\n if (children[1] && children[1].attr.className.indexOf(\"k-alt\") === -1) {\n row.notFirst = true;\n } else {\n row.notFirst = parentRow.notFirst;\n }\n }\n\n this.rows.splice(this._rowIndex(parentRow) + 1, 0, row);\n } else {\n row.notFirst = false;\n\n if (!row.parentMember || row.parentMember !== parentMember) {\n row.parentMember = parentMember;\n row.collapsed = 0;\n row.colSpan = 0;\n }\n }\n\n return row;\n },\n\n _measures: function(measures, tuple, className) {\n var map = this.map;\n var row = map.measureRow;\n var measure;\n\n if (!row) {\n row = element(\"tr\", { className: tableStyles.tableRow }, []);\n map.measureRow = row;\n this.rows.push(row);\n }\n\n for (var idx = 0, length = measures.length; idx < length; idx++) {\n measure = measures[idx];\n row.children.push(this._cell((className || \"\"), [this._content(measure, tuple)], measure));\n }\n\n return length;\n },\n\n _content: function(member, tuple) {\n return htmlNode(this.template({\n member: member,\n tuple: tuple\n }), true);\n },\n\n _cell: function(className, children, member) {\n var cell = element(\"th\", { className: tableStyles.header + \" \" + className }, children);\n cell.value = member.caption || member.name;\n return cell;\n },\n\n _buildRows: function(tuple, memberIdx, parentMember) {\n var members = tuple.members;\n var member = members[memberIdx];\n var nextMember = members[memberIdx + 1];\n\n var row, childRow, children, childrenLength;\n var cell, allCell, cellAttr;\n var cellChildren = [];\n var path;\n\n var idx = 0;\n var metadata;\n\n var colSpan;\n var collapsed = 0;\n var memberCollapsed = 0;\n\n if (member.measure) {\n this._measures(member.children, tuple);\n return;\n }\n\n path = kendo.stringify(buildPath(tuple, memberIdx));\n row = this._row(tuple, memberIdx, parentMember);\n\n children = member.children;\n childrenLength = children.length;\n\n metadata = this.metadata[path];\n if (!metadata) {\n this.metadata[path] = metadata = createMetadata(Number(member.levelNum), memberIdx);\n metadata.rootLevelNum = Number(this.rootTuple.members[memberIdx].levelNum);\n }\n\n this._indexes.push({\n path: path,\n tuple: tuple\n });\n\n if (member.hasChildren) {\n if (metadata.expanded === false) {\n collapsed = metadata.maxChildren;\n row.collapsed += collapsed;\n\n metadata.children = 0;\n childrenLength = 0;\n }\n\n var cellIconEl = $(\"\");\n cellIconEl.attr(kendo.attr(\"path\"), path);\n\n cellChildren.push(kendo.dom.html(kendo.ui.icon(cellIconEl, { icon: childrenLength ? STATE_EXPANDED_ICONNAME : STATE_COLLAPSED_ICONNAME }), true));\n }\n\n cellChildren.push(this._content(member, tuple));\n cell = this._cell((row.notFirst ? \" k-first\" : \"\"), cellChildren, member);\n\n row.children.push(cell);\n row.colSpan += 1;\n\n if (childrenLength) {\n allCell = this._cell(\" k-alt\", [this._content(member, tuple)], member);\n row.children.push(allCell);\n\n for (; idx < childrenLength; idx++) {\n childRow = this._buildRows(children[idx], memberIdx, member);\n }\n\n colSpan = childRow.colSpan;\n collapsed = childRow.collapsed;\n\n cell.attr.colSpan = colSpan;\n\n metadata.children = colSpan;\n metadata.members = 1;\n\n row.colSpan += colSpan;\n row.collapsed += collapsed;\n row.rowSpan = childRow.rowSpan + 1;\n\n if (nextMember) {\n if (nextMember.measure) {\n colSpan = this._measures(nextMember.children, tuple, \" k-alt\");\n } else {\n childRow = this._buildRows(tuple, memberIdx + 1);\n colSpan = childRow.colSpan;\n\n row.collapsed += childRow.collapsed;\n memberCollapsed = childRow.collapsed;\n }\n\n allCell.attr.colSpan = colSpan;\n colSpan -= 1;\n\n metadata.members += colSpan;\n row.colSpan += colSpan;\n }\n } else if (nextMember) {\n if (nextMember.measure) {\n colSpan = this._measures(nextMember.children, tuple);\n } else {\n childRow = this._buildRows(tuple, memberIdx + 1);\n colSpan = childRow.colSpan;\n\n row.collapsed += childRow.collapsed;\n memberCollapsed = childRow.collapsed;\n }\n\n metadata.members = colSpan;\n\n if (colSpan > 1) {\n cell.attr.colSpan = colSpan;\n row.colSpan += colSpan - 1;\n }\n }\n\n if (metadata.maxMembers < (metadata.members + memberCollapsed)) {\n metadata.maxMembers = metadata.members + memberCollapsed;\n }\n\n children = metadata.children + collapsed;\n\n if (metadata.maxChildren < children) {\n metadata.maxChildren = children;\n }\n\n (allCell || cell).tupleAll = true;\n\n return row;\n }\n });\n\n var RowBuilder = Class.extend({\n init: function() {\n this.metadata = {};\n },\n\n build: function(tuples) {\n var tbody = this._tbody(tuples);\n var colgroup = this._colGroup();\n\n return [\n element(\"table\", { className: tableStyles.table }, [colgroup, tbody])\n ];\n },\n\n reset: function() {\n this.metadata = {};\n },\n\n _rowLength: function() {\n var children = this.rows[0].children;\n var length = 0;\n var idx = 0;\n\n var cell = children[idx];\n\n while (cell) {\n length += (cell.attr.colSpan || 1);\n cell = children[++idx];\n }\n\n return length;\n },\n\n _colGroup: function() {\n var length = this._rowLength();\n var children = [];\n var idx = 0;\n\n for (; idx < length; idx++) {\n children.push(element(\"col\", null));\n }\n\n return element(\"colgroup\", null, children);\n },\n\n _tbody: function(tuples) {\n var root = tuples[0];\n\n this.rootTuple = root;\n this.rows = [];\n this.map = {};\n\n this._indexes = [];\n\n if (root) {\n this._buildRows(root, 0);\n this._normalize();\n } else {\n this.rows.push(element(\"tr\", { className: tableStyles.tableRow }, [ element(\"td\", { className: tableStyles.tableCell }, [ htmlNode(\" \") ]) ]));\n }\n\n return element(\"tbody\", { className: tableStyles.tbody }, this.rows);\n },\n\n _normalize: function() {\n var rows = this.rows;\n var rowsLength = rows.length;\n var rowIdx = 0;\n\n var members = this.rootTuple.members;\n var firstMemberName = members[0].name;\n var membersLength = members.length;\n var memberIdx = 0;\n\n var row;\n var cell;\n var maxcolSpan;\n var map = this.map;\n var allRow;\n\n for (; rowIdx < rowsLength; rowIdx++) {\n row = rows[rowIdx];\n\n for (memberIdx = 0; memberIdx < membersLength; memberIdx++) {\n maxcolSpan = this[members[memberIdx].name];\n cell = row.colSpan[\"dim\" + memberIdx];\n\n if (cell && cell.colSpan < maxcolSpan) {\n cell.attr.colSpan = (maxcolSpan - cell.colSpan) + 1;\n }\n }\n }\n\n row = map[firstMemberName];\n allRow = map[firstMemberName + \"all\"];\n\n if (row) {\n row.children[0].attr.className = tableStyles.tableCell + \" k-first\";\n }\n\n if (allRow) {\n allRow.children[0].attr.className += \" k-first \" + tableStyles.tableCell;\n }\n },\n\n _row: function(children) {\n var row = element(\"tr\", { className: tableStyles.tableRow }, children);\n row.rowSpan = 1;\n row.colSpan = {};\n\n this.rows.push(row);\n\n return row;\n },\n\n _content: function(member, tuple) {\n return htmlNode(this.template({\n member: member,\n tuple: tuple\n }), true);\n },\n\n _cell: function(className, children, member) {\n var cell = element(\"td\", { className: tableStyles.tableCell + \" \" + className }, children);\n cell.value = member.caption || member.name;\n return cell;\n },\n\n _buildRows: function(tuple, memberIdx) {\n var map = this.map;\n var path;\n\n var members = tuple.members;\n var member = members[memberIdx];\n var nextMember = members[memberIdx + 1];\n\n var children = member.children;\n var childrenLength = children.length;\n\n var levelNum = Number(member.levelNum);\n var rootName = this.rootTuple.members[memberIdx].name;\n var tuplePath = buildPath(tuple, memberIdx - 1).join(\"\");\n var rootLevelNum = Number(this.rootTuple.members[memberIdx].levelNum);\n var parentName = tuplePath + (rootLevelNum === levelNum ? \"\" : (member.parentName || \"\"));\n var row = map[parentName + \"all\"] || map[parentName];\n var colSpan = levelNum + 1;\n\n var cell, allCell;\n var childRow, allRow;\n var metadata;\n var className;\n var cellChildren = [];\n var expandIconAttr;\n var idx;\n\n if (!row || row.hasChild) {\n row = this._row();\n } else {\n row.hasChild = true;\n }\n\n if (member.measure) {\n className = row.allCell ? \"k-grid-footer\" : \"\";\n row.children.push(this._cell(className, [ this._content(children[0], tuple) ], children[0]));\n\n row.rowSpan = childrenLength;\n\n for (idx = 1; idx < childrenLength; idx++) {\n this._row([ this._cell(className, [ this._content(children[idx], tuple) ], children[idx]) ]);\n }\n\n return row;\n }\n\n map[tuplePath + member.name] = row;\n\n path = kendo.stringify(buildPath(tuple, memberIdx));\n\n metadata = this.metadata[path];\n if (!metadata) {\n this.metadata[path] = metadata = createMetadata(levelNum, memberIdx);\n metadata.rootLevelNum = rootLevelNum;\n }\n\n this._indexes.push({\n path: path,\n tuple: tuple\n });\n\n if (member.hasChildren) {\n if (metadata.expanded === false) {\n childrenLength = 0;\n metadata.children = 0;\n }\n\n var cellIconEl = $(\"\");\n cellIconEl.attr(kendo.attr(\"path\"), path);\n\n cellChildren.push(kendo.dom.html(kendo.ui.icon(cellIconEl, { icon: childrenLength ? STATE_EXPANDED_ICONNAME : STATE_COLLAPSED_ICONNAME }), true));\n }\n\n cellChildren.push(this._content(member, tuple));\n\n className = row.allCell && !childrenLength ? \"k-grid-footer\" : \"\";\n cell = this._cell(className, cellChildren, member);\n cell.colSpan = colSpan;\n\n row.children.push(cell);\n row.colSpan[\"dim\" + memberIdx] = cell;\n\n if (!this[rootName] || this[rootName] < colSpan) {\n this[rootName] = colSpan;\n }\n\n if (childrenLength) {\n row.allCell = false;\n row.hasChild = false;\n\n for (idx = 0; idx < childrenLength; idx++) {\n childRow = this._buildRows(children[idx], memberIdx);\n\n if (row !== childRow) {\n row.rowSpan += childRow.rowSpan;\n }\n }\n\n if (row.rowSpan > 1) {\n cell.attr.rowSpan = row.rowSpan;\n }\n\n metadata.children = row.rowSpan;\n\n allCell = this._cell(\"k-grid-footer\", [this._content(member, tuple)], member);\n allCell.colSpan = colSpan;\n\n allRow = this._row([ allCell ]);\n allRow.colSpan[\"dim\" + memberIdx] = allCell;\n allRow.allCell = true;\n\n map[tuplePath + member.name + \"all\"] = allRow;\n\n if (nextMember) {\n childRow = this._buildRows(tuple, memberIdx + 1);\n allCell.attr.rowSpan = childRow.rowSpan;\n }\n\n row.rowSpan += allRow.rowSpan;\n\n metadata.members = allRow.rowSpan;\n\n } else if (nextMember) {\n row.hasChild = false;\n this._buildRows(tuple, memberIdx + 1);\n\n (allCell || cell).attr.rowSpan = row.rowSpan;\n\n metadata.members = row.rowSpan;\n }\n\n if (metadata.maxChildren < metadata.children) {\n metadata.maxChildren = metadata.children;\n }\n\n if (metadata.maxMembers < metadata.members) {\n metadata.maxMembers = metadata.members;\n }\n\n return row;\n }\n });\n\n var ContentBuilder = Class.extend({\n init: function() {\n this.columnAxis = {};\n this.rowAxis = {};\n },\n\n build: function(data, columnAxis, rowAxis) {\n var index = columnAxis.indexes[0];\n var metadata = columnAxis.metadata[index ? index.path : undefined$1];\n\n this.columnAxis = columnAxis;\n this.rowAxis = rowAxis;\n\n this.data = data;\n\n this.rowLength = metadata ? metadata.maxChildren + metadata.maxMembers : columnAxis.measures.length || 1;\n\n if (!this.rowLength) {\n this.rowLength = 1;\n }\n\n var tbody = this._tbody();\n var colgroup = this._colGroup();\n\n return [\n element(\"table\", { className: tableStyles.contentTable }, [colgroup, tbody])\n ];\n },\n\n _colGroup: function() {\n var length = this.columnAxis.measures.length || 1;\n var children = [];\n var idx = 0;\n\n if (this.rows[0]) {\n length = this.rows[0].children.length;\n }\n\n for (; idx < length; idx++) {\n children.push(element(\"col\", null));\n }\n\n return element(\"colgroup\", null, children);\n },\n\n _tbody: function() {\n this.rows = [];\n\n if (this.data[0]) {\n this.columnIndexes = this._indexes(this.columnAxis, this.rowLength);\n this.rowIndexes = this._indexes(this.rowAxis, Math.ceil(this.data.length / this.rowLength));\n\n this._buildRows();\n } else {\n this.rows.push(element(\"tr\", { className: tableStyles.tableRow }, [ element(\"td\", { className: tableStyles.tableCell }, [ htmlNode(\" \") ]) ]));\n }\n\n return element(\"tbody\", { className: tableStyles.tbody }, this.rows);\n },\n\n _indexes: function(axisInfo, total) {\n var result = [];\n var axisInfoMember;\n var indexes = axisInfo.indexes;\n var metadata = axisInfo.metadata;\n var measures = axisInfo.measures;\n var measuresLength = measures.length || 1;\n\n var current;\n var dataIdx = 0;\n var firstEmpty = 0;\n\n var idx = 0;\n var length = indexes.length;\n var measureIdx;\n var index;\n\n var children;\n var skipChildren;\n\n if (!length) {\n for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n result[measureIdx] = {\n index: measureIdx,\n measure: measures[measureIdx],\n tuple: null\n };\n }\n\n return result;\n }\n\n for (; idx < length; idx++) {\n axisInfoMember = indexes[idx];\n current = metadata[axisInfoMember.path];\n children = current.children + current.members;\n skipChildren = 0;\n\n if (children) {\n children -= measuresLength;\n }\n\n if (current.expanded === false && current.children !== current.maxChildren) {\n skipChildren = current.maxChildren;\n }\n\n if (current.parentMember && current.levelNum === current.rootLevelNum) {\n children = -1;\n }\n\n if (children > -1) {\n for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n index = children + measureIdx;\n if (!current.children) {\n index += firstEmpty;\n }\n\n result[children + firstEmpty + measureIdx] = {\n children: children,\n index: dataIdx,\n measure: measures[measureIdx],\n tuple: axisInfoMember.tuple\n };\n dataIdx += 1;\n }\n\n while (result[firstEmpty] !== undefined$1) {\n firstEmpty += 1;\n }\n }\n\n if (firstEmpty === total) {\n break;\n }\n\n dataIdx += skipChildren;\n }\n\n return result;\n },\n\n _buildRows: function() {\n var rowIndexes = this.rowIndexes;\n var length = rowIndexes.length;\n var idx = 0;\n\n for (; idx < length; idx++) {\n var rowIndex = rowIndexes[idx];\n if (rowIndex) {\n this.rows.push(this._buildRow(rowIndex));\n }\n }\n },\n\n _buildRow: function(rowInfo) {\n var startIdx = rowInfo.index * this.rowLength;\n var columnIndexes = this.columnIndexes;\n var length = columnIndexes.length;\n var columnInfo;\n var cells = [];\n var idx = 0;\n\n var templateInfo;\n var cell, cellContent;\n var attr, dataItem, measure;\n\n for (; idx < length; idx++) {\n columnInfo = columnIndexes[idx];\n\n if (columnInfo === undefined$1) {\n continue;\n }\n\n attr = { className: tableStyles.tableCell };\n if (columnInfo.children) {\n attr.className += \" k-alt\";\n }\n\n cellContent = \"\";\n dataItem = this.data[startIdx + columnInfo.index];\n measure = columnInfo.measure || rowInfo.measure;\n\n templateInfo = {\n columnTuple: columnInfo.tuple,\n rowTuple: rowInfo.tuple,\n measure: measure,\n dataItem: dataItem\n };\n\n if (dataItem.value !== \"\" && measure && measure.type) {\n if (measure.type === \"status\") {\n cellContent = this.kpiStatusTemplate(templateInfo);\n } else if (measure.type === \"trend\") {\n cellContent = this.kpiTrendTemplate(templateInfo);\n }\n }\n\n if (!cellContent) {\n cellContent = this.dataTemplate(templateInfo);\n }\n\n cell = element(\"td\", attr, [ htmlNode(cellContent) ]);\n cell.value = dataItem.value;\n cells.push(cell);\n }\n\n attr = { className: tableStyles.tableRow };\n if (rowInfo.children) {\n attr.className += \" k-grid-footer\";\n }\n\n return element(\"tr\", attr, cells);\n }\n });\n\n ui.plugin(PivotGrid);\n\n kendo.PivotExcelExporter = kendo.Class.extend({\n init: function(options) {\n this.options = options;\n\n this.widget = options.widget;\n this.dataSource = this.widget.dataSource;\n },\n\n _columns: function() {\n var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n\n var columnHeaderLength = columnHeaderTable.children[0].children.length;\n var rowHeaderLength = rowHeaderTable.children[0].children.length;\n\n var width = this.widget.options.columnWidth;\n var result = [];\n var idx;\n\n if (rowHeaderLength && this.dataSource.data()[0]) {\n for (idx = 0; idx < rowHeaderLength; idx++) {\n result.push({\n autoWidth: true\n });\n }\n }\n\n for (idx = 0; idx < columnHeaderLength; idx++) {\n result.push({\n autoWidth: false,\n width: width\n });\n }\n\n return result;\n },\n\n _cells: function(rows, type, callback) {\n var result = [];\n\n var i = 0;\n var length = rows.length;\n\n var cellsLength;\n var row, cells;\n var j, cell;\n\n for (; i < length; i++) {\n row = [];\n cells = rows[i].children;\n cellsLength = cells.length;\n\n for (j = 0; j < cellsLength; j++) {\n cell = cells[j];\n\n row.push({\n background: \"#7a7a7a\",\n color: \"#fff\",\n value: cell.value,\n colSpan: cell.attr.colSpan || 1,\n rowSpan: cell.attr.rowSpan || 1\n });\n }\n\n if (callback) {\n callback(row, i);\n }\n\n result.push({\n cells: row,\n type: type\n });\n }\n\n return result;\n },\n\n _rows: function() {\n var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n\n var columnHeaderLength = columnHeaderTable.children[0].children.length;\n var rowHeaderLength = rowHeaderTable.children[0].children.length;\n\n var columnHeaderRows = columnHeaderTable.children[1].children;\n var rowHeaderRows = rowHeaderTable.children[1].children;\n var contentRows = this.widget.contentTree.children[0].children[1].children;\n\n var columnRows = this._cells(columnHeaderRows, \"header\");\n\n if (rowHeaderLength) {\n columnRows[0].cells.splice(0, 0, {\n background: \"#7a7a7a\",\n color: \"#fff\",\n value: \"\",\n colSpan: rowHeaderLength,\n rowSpan: columnHeaderRows.length\n });\n }\n\n var dataCallback = function(row, index) {\n var j = 0;\n var cell, value;\n var cells = contentRows[index].children;\n\n for (; j < columnHeaderLength; j++) {\n cell = cells[j];\n value = Number(cell.value);\n\n if (isNaN(value)) {\n value = cell.value;\n }\n\n row.push({\n background: \"#dfdfdf\",\n color: \"#333\",\n value: value,\n colSpan: 1,\n rowSpan: 1\n });\n }\n };\n\n var rowRows = this._cells(rowHeaderRows, \"data\", dataCallback);\n\n return columnRows.concat(rowRows);\n },\n\n _freezePane: function() {\n var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n\n var rowHeaderLength = rowHeaderTable.children[0].children.length;\n var columnHeaderRows = columnHeaderTable.children[1].children;\n\n return {\n colSplit: rowHeaderLength,\n rowSplit: columnHeaderRows.length\n };\n },\n\n workbook: function() {\n var promise,\n resolveFn = function() {\n return {\n sheets: [ {\n columns: this._columns(),\n rows: this._rows(),\n freezePane: this._freezePane(),\n filter: null\n } ]\n };\n };\n\n if (this.dataSource.view()[0]) {\n promise = $.Deferred();\n promise.resolve();\n } else {\n promise = this.dataSource.fetch();\n }\n\n return promise.then(resolveFn.bind(this));\n }\n });\n\n var PivotExcelMixin = {\n extend: function(proto) {\n proto.events.push(\"excelExport\");\n proto.options.excel = $.extend(proto.options.excel, this.options);\n proto.saveAsExcel = this.saveAsExcel;\n },\n options: {\n proxyURL: \"\",\n filterable: false,\n fileName: \"Export.xlsx\"\n },\n saveAsExcel: function() {\n var excel = this.options.excel || {};\n\n var exporter = new kendo.PivotExcelExporter({\n widget: this\n });\n\n var resolveFn = function(book) {\n if (!this.trigger(\"excelExport\", { workbook: book })) {\n var workbook = new kendo.ooxml.Workbook(book);\n\n workbook.toDataURLAsync().then(function(dataURI) {\n kendo.saveAs({\n dataURI: dataURI,\n fileName: book.fileName || excel.fileName,\n proxyURL: excel.proxyURL,\n forceProxy: excel.forceProxy\n });\n });\n }\n };\n\n exporter.workbook().then(resolveFn.bind(this));\n }\n };\n\n kendo.PivotExcelMixin = PivotExcelMixin;\n\n if (kendo.ooxml && kendo.ooxml.Workbook) {\n PivotExcelMixin.extend(PivotGrid.prototype);\n }\n\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(PivotGrid.prototype);\n\n PivotGrid.fn._drawPDF = function() {\n return this._drawPDFShadow({\n width: this.wrapper.width()\n }, {\n avoidLinks: this.options.pdf.avoidLinks\n });\n };\n }\n\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(PivotGridV2.prototype);\n\n PivotGridV2.fn._drawPDF = function() {\n return this._drawPDFShadow({\n width: this.wrapper.width()\n }, {\n avoidLinks: this.options.pdf.avoidLinks\n });\n };\n }\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}