// definizione VPivot //Controller if (typeof(ZtVPivot) == "undefined") { function ZtVPivot(opts, htmlContainer, PSCtrl, bQueryLevel) { this._initOpts = opts; //copia configurazione originale this.opts = opts; this.bQueryLevel = bQueryLevel; this.ztVPivotData; this.ztVPivotUI; this.htmlContainer = htmlContainer; this.PSCtrl = PSCtrl; //PortalStudio Control var _mSeparator = '##-##'; var _nSeparator = '####'; var _kSeparator = '||#||'; var _level0Key = '#zeroLevel#'; var _znull = 'znull'; var _btotal = '_btotal'; var _npad = 3; var _cssmode = 'csscol'; var _asEmpty = "[empty]"; var _refID; this.drawOpts; this.nestedData; this.drawingColumns; this.drawingColumnsSort = {}; this.aggregateobjRets; this.drillKeys = {}; this._wKey = LibJavascript.CharKeyGen(5); var _this = this; LibJavascript.RequireLibrary(ZtVWeb.SPWebRootURL + '/ZtPivotData.js'); LibJavascript.RequireLibrary(ZtVWeb.SPWebRootURL + '/ZtPivotUI.js'); LibJavascript.RequireLibrary(ZtVWeb.SPWebRootURL + '/HamburgerMenuObj.js'); var options = { root: null, rootMargin: "0px", threshold: 1 }; this.PSObserver = new IntersectionObserver(_fHandleIntersectionObserver, options); this.PSObserver.parent = this; this._workVars={}; if( PSCtrl && PSCtrl.ctrlid ) _refID = PSCtrl && PSCtrl.ctrlid; else _refID = LibJavascript.AlfaKeyGen(5); if( PSCtrl && PSCtrl.h ) this._initOpts.containerHeight = PSCtrl.h; else this._initOpts.containerWidth = this.htmlContainer.offsetHeight; if( PSCtrl && PSCtrl.w ) this._initOpts.containerHeight = PSCtrl.w; else this._initOpts.containerWidth = this.htmlContainer.offsetWidth; if (this.opts.scroll_bars == undefined) { this.opts.scroll_bars = 'false'; } if (this.opts.measuresOnColumn == undefined) { this.opts.measuresOnColumn = false; } if (this.opts.measuresOnColumn == false) { _cssmode = 'cssrow'; } if(this.opts.hideMeasures == undefined) { this.opts.hideMeasures = false; } if (this.opts.subTotalOnRow == undefined) { this.opts.subTotalOnRow = false; } if (this.opts.subTotalOnRowLevel == undefined) { this.opts.subTotalOnRowLevel = false; } if (this.opts.subTotalOnColumn == undefined) { this.opts.subTotalOnColumn = false; } if (this.opts.bigTotalOnRow == undefined) { this.opts.bigTotalOnRow = false; } if (this.opts.bigTotalOnColumn == undefined) { this.opts.bigTotalOnColumn = false; } if (this.opts.bigTotalTitle == undefined) { this.opts.bigTotalTitle = "Total"; } if (this.opts.subTotalTitle == undefined) { this.opts.subTotalTitle = "Total"; } if (this.opts.measuresTitle == undefined) { this.opts.measuresTitle = "Measures"; } if (this.opts.columns == undefined) { this.opts.columns = []; } if (this.opts.columns.length == 0) { this.opts.columns.push({alias:"", desc:""}) } if (this.opts.sortRow == undefined) { this.opts.sortRow = false; } if (this.opts.sortColumn == undefined) { this.opts.sortColumn = false; } if (this.opts.cssClass == undefined || Empty(this.opts.cssClass)) { this.opts.cssClass = 'drilldown'; } var sheetw = document.createElement('style'); sheetw.innerHTML = ""; var ctr = ""; if( this.PSCtrl && this.PSCtrl.ctrl) { this.PSCtrl.ctrl.classList.add(this._wKey) ctr = "." + this._wKey + " "; } sheetw.innerHTML += ctr + "." + this.opts.cssClass + " {white-space:break-spaces !important; word-wrap: break-word} " //rimozione da css//evita modifica manuale vecchio css var i, field, dones = [], cwidth, mcwidth=0; for( i=0; i= 0) continue; if( field.type != 'N') continue; if( !field.cssWidth ) { cwidth = _fGetTextSize(document.body, field.desc, '').width; } else { cwidth = parseInt(field.cssWidth+''); } mcwidth = Math.max(mcwidth, cwidth); dones.push(field.alias) sheetw.innerHTML += ctr + ".csscol ." + field.alias + " {width:" + cwidth +"px} " } sheetw.innerHTML += ctr + ".columndata.cssrow" + " {width:" + mcwidth +"px} " sheetw.innerHTML += ctr + ".columntitle.cssrow" + " {width:" + mcwidth +"px} " sheetw.innerHTML += ctr + ".columntitle .columntotal.cssrow" + " {width:" + mcwidth +"px} " var _mstr = " .drilldown table.t-data td, .drilldown table.t-columns td, " + " .drilldown td.td-view-description table td, " + " .drilldown_table .columndata " //+ "," //+ ".drilldown .drilldown_table .td-view-row, " //+ ".drilldown .td-view-description .t-rows-header .columnheader, " //+ ".drilldown .td-subtotal," //+" .drilldown .td-row-subtotal, " //+" .drilldown .drilldown_table .td-view-columns .td-subtotal, " //+ ".drilldown .drilldown_table .td-view-columns .td-bigtotal, " //+ ".drilldown .drilldown_table .td-view-rows .td-row-subtotal, " //+ ".drilldown .drilldown_table .td-view-rows .td-row-bigtotal" //da rimuovere dopo - settare width delle colonne di righe _mstr = Strtran(_mstr, ".drilldown ", ctr + "." + this.opts.cssClass + " ") sheetw.innerHTML += _mstr + " {white-space:break-spaces !important; word-wrap: break-word} " //rimozione da css//evita modifica manuale vecchio css document.body.appendChild(sheetw); if (this.opts.spTheme == undefined) { this.opts.spTheme = false; } if (this.opts.uiDragDrop == undefined) { this.opts.uiDragDrop = true; } if (this.opts.othDimMeas == undefined) { this.opts.othDimMeas = true; } if (this.opts._cssFiles == undefined) { this.opts._cssFiles = []; if (!this.PSCtrl ) { this.opts._cssFiles.push('styles/GridPivotObj.css'); } } this.opts._cssFiles.push('classeditor/fontList.css'); if( !this._initOpts.onclickFnc && this.PSCtrl ) { this._initOpts.onclickFnc = function(event, o) { var ctrl = _this.PSCtrl; if (event) { if(ctrl.dispatchEvent) ctrl.dispatchEvent('Click', event, o); } } } if( !this._initOpts.onDrillDown && this.PSCtrl ) { this._initOpts.onDrillDown = function(event, o) { var ctrl = _this.PSCtrl; if( o && !o.found && ctrl.drillDown ) { ctrl.drillDown(o); } if (event) { if(ctrl.dispatchEvent) ctrl.dispatchEvent('DrillDown', event, o); } } } if( !this._initOpts.onRendered && this.PSCtrl ) { this._initOpts.onRendered = function() { var ctrl = _this.PSCtrl; if(ctrl.dispatchEvent) ctrl.dispatchEvent('Rendered'); } } this.hasMenu = this.PSCtrl && (this._initOpts.uiDragDrop || this._initOpts.print_result || this._initOpts.canFilter); if( this.PSCtrl && this.PSCtrl.IsMenuEnable) this.hasMenu = this.hasMenu || this.PSCtrl.IsMenuEnable(); this.manageMenu = function( divMenu ) { if ( this.PSCtrl ) { this.PSCtrl.manageMenu(divMenu); } } this._resetAndDraw = function( rows, columns, measures ) { this.mViewer._resetAndDraw(rows, columns, measures); } this._showHideConfig = function() { this.mViewer._showHideConfig(); if ( this.uiClosed!= null ) { if (this.uiClosed ) this.uiClosed = false; else this.uiClosed = true; if( this.PSCtrl && this.PSCtrl.adjustFormHeight ) this.PSCtrl.adjustFormHeight(); } else this.uiClosed = true; } this._retrieveDataOnView = function() { return this.mViewer._retrieveDataOnView(); } this._retrieveDataPivotOnView = function() { return this.mViewer._retrieveDataPivotOnView(); } this._filterData = function (id, ev, alias) { if (!this._initOpts.canFilter) return; if( this.PSCtrl && this.PSCtrl.ToggleFilterArea ) { this.PSCtrl.ToggleFilterArea(id, ev, alias); } } this._removeFilterData = function (alias) { if (!this._initOpts.canFilter && !this._initOpts.canApplyFilter) return; if( this.PSCtrl && this.PSCtrl.RemoveFilterAlias ) { this.PSCtrl.RemoveFilterAlias(alias); } } this.applyFilter = function(filters, asyncFnc) { var _nDrawOpts ; if( this.drawOpts ) _nDrawOpts =_fjsonCopy(this.drawOpts); else _nDrawOpts = {} _nDrawOpts.filters = filters; this.redraw(_nDrawOpts, asyncFnc); } this._updateFiltersDiv = function(filters) { if(!filters) filters = this.drawOpts.filters; if( !filters && this.PSCtrl && this.PSCtrl.Filters ) filters = this.PSCtrl.Filters; var l = this.htmlContainer.getElementsByClassName('rem_filter'); var i, alias, f; var lalias = [], map = {}; if( filters) for( i=0; i 0) cfCols[0].style.height = cfMeas[0].offsetHeight + 'px'; } this._retrieveDataForChart = function() { var ret = {}; ret.Fields = []; ret.FieldsDesc = []; ret.Types = []; ret.Data = []; ret.Config = _fjsonCopy(this.ztController.drawOpts); ret.State = _fjsonCopy(this.getState()); var i, j, key, sl, sp, rows, columns, measure, index, nrow, push, lkey; var elKeys = [], pelKeys = [], pelKeysRows = {}; for( i=0; i 0 ) rowLevels = ret.State.rowsSubLevel[ret.State.rowsSubLevel.length-1]; if( ret.State.columnsSubLevel.length > 0 ) colLevels = ret.State.columnsSubLevel[ret.State.columnsSubLevel.length-1]; for( i=0; i= 0) continue; if( key.indexOf(_level0Key) >= 0) continue; sl = key.split(_kSeparator); index = sl[0]; rows = sl[1]; columns = sl[2]; measure = sl[3]; nrow = []; sp = rows.split(_mSeparator); push = false; if( (rowLevels.length == 0) && (colLevels.length ==0) ) push = true; else { if( rowLevels.length > 0 ) { push = false; for( j=0; !push && j lkey.length) ) { push = true; } } } else { push = true; } if( push ) { if( colLevels.length > 0 ) { push = false; for( j=0; !push && j lkey.length) ) { push = true; } } } } } if( push ) { var rowsdesc='', columnsdesc=''; var rowtitle='', columntitle=''; for( j=0; j 0 ) xk = index+_kSeparator+rows+_kSeparator+_sp+_mSeparator+lv else xk = index+_kSeparator+rows+_kSeparator+lv if( pelKeys.indexOf(xk) >= 0) continue; pelKeys.push(xk) pelKeysRows[xk] = nrow.slice(); } } } } for( j=sp.length; j= 0) continue; if( key.indexOf(_level0Key) >= 0) continue; sl = key.split(_kSeparator); index = sl[0]; rows = sl[1]; columns = sl[2]; measure = sl[3]; if( !Empty(lkey) && lkey != (rows+_kSeparator+columns)) { ret.Data.push(nrow); nrow = []; } lkey = rows+_kSeparator+columns; sp = rows.split(_mSeparator); for( j=0; j= 0) ret.HFieldsDesc[j].push(this.ztController.opts.bigTotalTitle); else ret.HFieldsDesc[j].push(sl[j]); ret.HFieldsKey[j].push(sl[j]) } for ( j=sl.length; j= 0) ret.HFieldsKey[this.ztController.drawOpts.columns.length].push(this.ztController.opts.bigTotalTitle); else ret.HFieldsKey[this.ztController.drawOpts.columns.length].push(tkey); tkey = tkey + _mSeparator + tm ret.Fields.push(tkey); ret.FieldsDesc.push(tkey); ret.Types.push('N'); ret.Fields.push(tkey+'_pic'); ret.FieldsDesc.push(tkey+'_pic'); ret.Types.push('C'); } var lrow = ''; nrow = []; for( i=0; i= 0) continue; //if( key.indexOf(_level0Key) >= 0) continue; sl = key.split(_kSeparator); index = sl[0]; rows = sl[1]; columns = sl[2]; measure = sl[3]; if( /*(columns==_level0Key) ||*/ (!Empty(lrow) && lrow != rows)) { ret.Data.push(nrow); nrow = []; } lrow = rows; if( nrow.length == 0 ) { sp = rows.split(_mSeparator); for( j=0; j= 0) nrow.push(this.ztController.opts.bigTotalTitle); //else if( key.indexOf(_level0Key) >= 0) nrow.push(this.ztController._getFieldAliasKeyValue(this.ztController.opts.rows[j], sp[j]) + 'xxx'); else nrow.push(this.ztController._getFieldAliasKeyValue(this.ztController.opts.rows[j], sp[j])); } } for( j=sp.length; j 0 ) { level = level - 1; } if ( tr.cells.length > level ) { rowskey = _fGetHTMLAttribute(tr.cells[level],"trkey"); } } } } else { rowskey = _level0Key+_btotal; table = this.tdAreaRows.getElementsByClassName("t-rows"); if (table) { table = table[0]; tr = table.rows[frHtmlObj.rowIndex]; if(tr) { index = parseInt(_fGetHTMLAttribute(tr, "dindex")); } } } var o = {}; o.isRowTotal = frHtmlObj.isRowTotal; o.isRowBigTotal = frHtmlObj.isRowBigTotal; o.isColumnBigTotal = frHtmlObj.isColumnBigTotal; o.isColumnTotal = frHtmlObj.isColumnTotal; o.rows = []; o.columns = []; o.measure = {}; var lsplit, i, s; if (rowskey && rowskey.indexOf(_level0Key)<0) { lsplit = rowskey.split(_mSeparator); for (i=0; i opts.columns.length-1 ) { return ret; } if ( columns[key] || columns[level + _nSeparator + key] ) { var columnsLevel = columns[level + _nSeparator + key]; if (!columnsLevel) { columnsLevel = columns[key]; } if(!retArr[level]) { retArr[level] = document.createElement('tr'); } if( opts.columns[level].orderby && columnsSort[level + _nSeparator + key] == undefined) { _dataViewer.ztController._sortColumnsRollingUp(opts, level, columnsLevel, key); columnsSort[level + _nSeparator + key]=""; } var tr = retArr[level]; _fSetHTMLAttribute(tr, "column-level", level); if (level>0 && retArr[level-1]) { var trp = retArr[level-1]; var tdp = trp.lastChild.previousSibling;//trp.cells[tr.cells.length-1]; while (tdp && (tdp.classList.contains("td-subempty") || tdp.classList.contains("td-subtotal") || tdp.classList.contains("td-bigtotal"))) { tdp = tdp.previousSibling; } if ( tdp ) { tdp = tdp.nextSibling; } else if(trp.firstChild) { tdp = trp.firstChild; } while (tdp && (tdp.classList.contains("td-subempty") || tdp.classList.contains("td-subtotal") || tdp.classList.contains("td-bigtotal"))) { var tdx = document.createElement('td'); var divx = document.createElement('div'); divx.classList.add("columndiv", _cssmode); tdx.appendChild(divx); if (tdp.classList.contains("td-subtotal")) { tdx.classList.add("td-view-column", "td-subtotal", _cssmode); //tdx.classList.add("td-view-lastlevel"); } else if (tdp.classList.contains("td-bigtotal")) { tdx.classList.add("td-view-column", "td-bigtotal", "td-view-title", _cssmode); //tdx.classList.add("td-view-lastlevel"); } else { tdx.classList.add("td-view-column", "td-subempty", _cssmode); } _fSetHTMLAttribute(tdx, "tckey", _fGetHTMLAttribute(tdp, "tckey")); if(opts.measuresOnColumn) { tdx.colSpan = opts.measures.length; if( opts.measures.length>0 )divx.classList.add(opts.measures[0].alias); } else tdx.colSpan = 1; tr.appendChild(tdx); tdp = tdp.nextSibling; } } var td, div; if( level > 0 && opts.columnsSubLevel) { if(opts.columnsSubLevel[level-1] && opts.columnsSubLevel[level-1].length>0 && opts.columnsSubLevel[level-1].indexOf(key)>=0) {} else { td = document.createElement('td'); div = document.createElement('div'); div.classList.add("columndiv", _cssmode); td.appendChild(div); td.classList.add("td-view-column", "td-subempty", _cssmode); tr.appendChild(td); _fSetHTMLAttribute(td, "tckey", key); if(opts.measuresOnColumn) { td.colSpan = opts.measures.length; if( opts.measures.length>0 ) div.classList.add(opts.measures[0].alias); } else td.colSpan = 1; return ret; } } for ( var i=0; i= 0 ) { //nModif continue; } td = document.createElement('td'); div = document.createElement('div'); div.classList.add("columndiv", _cssmode); if ( columnsLevel[i] != _znull ) { _fApplyPicture(_dataViewer.ztController._getFieldAliasKeyValue(opts.columns[level], columnsLevel[i])+'', opts.columns[level].pictureFnc, div, opts.columns[level].type);//div.innerHTML = ToHTML(_dataViewer.ztController._getFieldAliasKeyValue(opts.columns[level], columnsLevel[i]));//ToHTML(columnsLevel[i]); div.title = columnsLevel[i]; } td.appendChild(div); td.classList.add("td-view-column", _cssmode); tr.appendChild(td); var r = 0; if ( key == _level0Key ) { _fSetHTMLAttribute(td, "tckey", columnsLevel[i]); r = makeTRColumnsLevel(level+1, opts, columns, columnsSort, columnsLevel[i], retArr, maxColumnLevel); if ( r > 0 ) { td.colSpan = r; div.classList.add("toggle"); div.classList.add("openlevel", "columndiv", "columntitle", _cssmode); div.classList.remove("closelevel"); div.style.cursor = 'pointer'; div.onclick = drillDownColumn; if(opts.measuresOnColumn) { if( opts.measures.length>0 ) div.classList.add(opts.measures[0].alias); } } else { if (level < maxColumnLevel-1) { div.classList.add("toggle"); div.classList.add("closelevel", "columndiv", "columntitle", _cssmode); div.classList.remove("openlevel"); div.style.cursor = 'pointer'; div.onclick = drillDownColumn; } else { div.classList.add("columndiv", "columntitle", _cssmode); div.style.cursor = 'default'; td.classList.add("td-view-title"); } if(opts.measuresOnColumn) { td.colSpan = opts.measures.length; if( opts.measures.length>0 ) div.classList.add(opts.measures[0].alias); } else td.colSpan = 1; } ret += td.colSpan; } else { _fSetHTMLAttribute(td, "tckey", key+_mSeparator+columnsLevel[i]); r = makeTRColumnsLevel(level+1, opts, columns, columnsSort, key+_mSeparator+columnsLevel[i], retArr, maxColumnLevel); if ( r > 0 ) { td.colSpan = r; div.classList.add("toggle"); div.classList.add("openlevel", "columndiv", "columntitle", _cssmode); div.classList.remove("closelevel"); div.style.cursor = 'pointer'; div.onclick = drillDownColumn; if(opts.measuresOnColumn) { if( opts.measures.length>0 ) div.classList.add(opts.measures[0].alias); } } else { if (level < maxColumnLevel-1) { div.classList.add("toggle"); div.classList.add("closelevel", "columndiv", "columntitle", _cssmode); div.classList.remove("openlevel"); div.style.cursor = 'pointer'; div.onclick = drillDownColumn; } else { div.classList.add("columndiv", "columntitle", _cssmode); div.style.cursor = 'default'; td.classList.add("td-view-title"); } if(opts.measuresOnColumn) { td.colSpan = opts.measures.length; if( opts.measures.length>0 ) div.classList.add(opts.measures[0].alias); } else td.colSpan = 1; } ret += td.colSpan } if( _this._initOpts.canFilter ) { td.onmouseover = function(e) { if( _this.PSCtrl && _this.PSCtrl.HoverFilterObjByExample) { var rkey = this.getAttribute("tckey"); if( rkey != null ) { var sp = rkey.split(_mSeparator); _this.PSCtrl.HoverFilterObjByExample(e, this.firstChild, _this.opts.columns[sp.length-1].alias, "col:"+rkey) } } } td.onmouseleave = function(e) { var rkey = this.getAttribute("tckey"); if( rkey != null ) { if( _this.PSCtrl && _this.PSCtrl.OutFilterObjByExample) { _this.PSCtrl.OutFilterObjByExample(e, this, "tckey", rkey) } } } } //subtotal columns? if ( r > 0 && opts.subTotalOnColumn && (level < opts.columns.length-1) ) { if(opts.measuresOnColumn) td.colSpan += opts.measures.length; else td.colSpan += 1; if(opts.measuresOnColumn) ret += opts.measures.length; else ret += 1; } } var lsplit; if ( opts.subTotalOnColumn && (level <= opts.columns.length-1) && (key !=_level0Key)) { td = document.createElement('td'); div = document.createElement('div'); div.classList.add("columndiv", "columntitle", "columntotal", _cssmode); _fSetHTMLAttribute(td, "tckey", key); if(opts.measuresOnColumn) { td.colSpan = opts.measures.length; if( opts.measures.length>0 ) div.classList.add(opts.measures[0].alias); } else td.colSpan = 1; lsplit = key.split(_mSeparator); var v = _dataViewer.ztController._getFieldAliasKeyValue(opts.columns[lsplit.length-1], lsplit[lsplit.length-1]) v += " [" + _fGetCounter(columns[level+_nSeparator+key]) + "]"; var k; if( !Empty(opts.subTotalTitle) ) v+= "["+ opts.subTotalTitle + "]"; div.innerHTML = ToHTML(v); td.appendChild(div); td.classList.add("td-view-column", "td-subtotal", _cssmode); td.classList.add("td-view-title"); tr.appendChild(td); if(opts.measuresOnColumn) { for( k=1; k0 ) div.classList.add(opts.measures[0].alias); } else td.colSpan = 1; lsplit = key.split(_mSeparator); div.innerHTML = ToHTML(opts.bigTotalTitle); td.appendChild(div); td.classList.add("td-view-column", "td-bigtotal", "td-view-title", _cssmode); tr.appendChild(td); if(opts.measuresOnColumn) { for( k=1; k0; i--) { tr = retArr[i]; for (j=i; j>0; j--) { var trp = retArr[j-1]; if (trp) { var tdp = trp.lastChild; while (tdp && (tdp.classList.contains("td-subempty") || tdp.classList.contains("td-subtotal") || tdp.classList.contains("td-bigtotal"))) { tdp = tdp.previousSibling; } if ( tdp ) { tdp = tdp.nextSibling; } else if(trp.firstChild) { tdp = trp.firstChild; } while (tdp && (tdp.classList.contains("td-subempty") || tdp.classList.contains("td-subtotal")|| tdp.classList.contains("td-bigtotal"))) { var tdx = document.createElement('td'); var divx = document.createElement('div'); divx.classList.add("columndiv", _cssmode); //divx.innerHTML = tdp.firstChild.innerHTML; tdx.appendChild(divx); if (tdp.classList.contains("td-subtotal")) { tdx.classList.add("td-view-column", "td-subtotal", _cssmode); } else if (tdp.classList.contains("td-bigtotal")) { tdx.classList.add("td-view-column", "td-bigtotal", "td-view-title", _cssmode); } else { tdx.classList.add("td-view-column", "td-subempty", _cssmode); } _fSetHTMLAttribute(tdx, "tckey", _fGetHTMLAttribute(tdp, "tckey")); if(opts.measuresOnColumn) { tdx.colSpan = opts.measures.length; if( opts.measures.length>0 ) divx.classList.add(opts.measures[0].alias); } else tdx.colSpan = 1; tr.appendChild(tdx); tdp = tdp.nextSibling; } } } } this.tdAreaColumns.innerHTML = ""; var table = document.createElement('table'); table.classList.add("t-columns-title", _cssmode); tr = document.createElement('tr'); tr.classList.add("t-columns-head", _cssmode); var div; for (i=0; i 0) { var tds = retArr[retArr.length-1].cells; for ( i=0; i i ) tw += _mSeparator + tckey[i]; td = tr.querySelector("[tckey=\"" + tw + "\"]"); if( td ) td.classList.add('gridrow_over'); } } function onmouseLeave(e) { var div = e.target; var i, tr, tckey, tw, td; div.parentNode.parentNode.classList.remove('gridrow_over'); //tr var trows = _this.htmlContainer.getElementsByClassName('t-rows'); var rindex = div.parentNode.parentNode.rowIndex; var cindex = div.parentNode.cellIndex; var ttable = trows[0]; ttable.rows[rindex].classList.remove('gridrow_over'); ttable = div.parentNode.parentNode.parentNode; for( i=0; i i ) tw += _mSeparator + tckey[i]; td = tr.querySelector("[tckey=\"" + tw + "\"]"); if( td ) td.classList.remove('gridrow_over'); } } function makeTRRowsDataWithMeasures(index, level, refObj, opts, columnsTds, rows, key, retRows, retData, maxRowLevel, maxSubRowLevel, measuresMap, bigTotal) { var mrows = Math.min(maxSubRowLevel, opts.rows.length); if ( rows[key] ) { var tr, td, div, j, measure, tdmeasure, ao, columnkey, k, i, trdata, ltr, ltd, n, tckey, lastDataTr; if ( Array.isArray(rows[key]) ) { if( level > 0 && opts.rowsSubLevel) { if(opts.rowsSubLevel[level-1] && opts.rowsSubLevel[level-1].length>0 && opts.rowsSubLevel[level-1].indexOf(key)>=0) { } else { for (k=0; k 0) { div.classList.add("toggle", "closelevel", _cssmode); div.classList.remove("openlevel"); } for(j=level; j 0 var prKey = _fGetHTMLAttribute(tr.cells[o.level-1], "trkey"); _fSetHTMLAttribute(tr.cells[o.level], "trkey", prKey + _mSeparator + o.value) } trdata = retData[retData.length-1]; _fSetHTMLAttribute(trdata, "dlevel", o.level); _fSetHTMLAttribute(trdata, "dindex", index); } else { retRows.push(trows[n]); retData.push(tdatarows[n]); } } else { retRows.push(trows[n]); retData.push(tdatarows[n]); } } } if ( o.value != _znull ) { makeTRRowsDataWithMeasures(index, level+1,refObj, opts, columnsTds, rows, key+_mSeparator+o.value, retRows, retData, maxRowLevel, maxSubRowLevel, measuresMap, false); // eslint-disable-line max-len } } //subtotalonrow if ( opts.subTotalOnRow ) { tr = document.createElement('tr'); _fSetHTMLAttribute(tr, "dlevel", level); _fSetHTMLAttribute(tr, "dindex", index); for(i=0; i 0 ) && trc.cells[trc.cells.length-2].firstChild ){ div = trc.cells[trc.cells.length-2].firstChild; div.onmouseover = onmouseRowOver; div.onmouseleave = onmouseRowLeave; } for ( j=0; j 0 && opts.rowsSubLevel) { if(opts.rowsSubLevel[level-1] && opts.rowsSubLevel[level-1].length>0 && opts.rowsSubLevel[level-1].indexOf(key)>=0) { } else { tr = retRows[retRows.length-1]; if ( tr ) { td = tr.cells[level-1]; div = td.firstChild; div.classList.add("toggle", "closelevel", _cssmode); div.classList.remove("openlevel"); for(j=level; j 0 var prKey = _fGetHTMLAttribute(tr.cells[o.level-1], "trkey"); _fSetHTMLAttribute(tr.cells[o.level], "trkey", prKey + _mSeparator + o.value) } trdata = retData[retData.length-1]; _fSetHTMLAttribute(trdata, "dlevel", o.level); _fSetHTMLAttribute(trdata, "dindex", index); } else { retRows.push(tr); retData.push(trdata); } } else { retRows.push(tr); retData.push(trdata); } } if ( o.value != _znull ) { makeTRRowsData(index, level+1,refObj, opts, columnsTds, rows, key+_mSeparator+o.value, retRows, retData, maxRowLevel, maxSubRowLevel, measuresMap, false); // eslint-disable-line max-len } } //subtotalonrow if ( opts.subTotalOnRow ) { tr = document.createElement('tr'); _fSetHTMLAttribute(tr, "dlevel", level); _fSetHTMLAttribute(tr, "dindex", index); trdata = document.createElement('tr'); _fSetHTMLAttribute(trdata, "dlevel", level); _fSetHTMLAttribute(trdata, "dindex", index); for(i=0; i= level-1)) || (!opts.subTotalOnRowLevel && (i >= level)) ) { td.classList.add("td-row-subtotal-mark"); } td.classList.add(_cssmode); tr.appendChild(td); div.onmouseover = onmouseRowOver; div.onmouseleave = onmouseRowLeave; } for ( j=0; j 0) { columndiv[0].scrollLeft = this.scrollLeft; } var rowdiv = _this.htmlContainer.getElementsByClassName("tdiv-rows"); if (rowdiv.length > 0) { rowdiv[0].scrollTop = this.scrollTop; } } this.tdAreaDescription.innerHTML = ""; for (i = 0; i < objRets.length; i++) { retRows = []; retData[i] = [] var objRet = objRets[i]; if (opts.measuresOnColumn) { makeTRRowsData(i, 0, this, opts, columnsTdCells, objRet.rows, _level0Key, retRows, retData[i], maxRowLevel, maxSubRowLevel, measuresMap, false); } else { makeTRRowsDataWithMeasures(i, 0, this, opts, columnsTdCells, objRet.rows, _level0Key, retRows, retData[i], maxRowLevel, maxSubRowLevel, measuresMap, false); } if (opts.bigTotalOnRow) { bigRowTotal = _fMergeDeepSum(bigRowTotal, _dataViewer.getAggregateValue(objRet.rows, _level0Key, i)); } if (retRows.length == 0) continue; objRet.retRows = retRows; mcount += retRows.length; } let l = 0, c = 0; var _interval; _interval = setInterval(function run() { objRet = objRets[l]; if( !objRet) { clearInterval(_interval) endDraw(); _this.PSObserver.observe(_this.htmlContainer); return; } retRows = objRet.retRows; var j; for (j = 0; j < retRows.length; j++) { table.appendChild(retRows[j]); tableData.appendChild(retData[l][j]); var height = Math.max(retRows[j].offsetHeight, retData[l][j].offsetHeight)+2; retRows[j].style.height = height + 'px' //altezze righe retData[l][j].style.height = height + 'px' //altezze righe } l++ c+= retRows.length; if( _this.PSCtrl && _this.PSCtrl.updateLoadingDiv ) _this.PSCtrl.updateLoadingDiv(c, mcount); }, 10); function endDraw() { var ctable = _this.mViewer.tdAreaColumns.getElementsByClassName("t-columns"); var ctablet = _this.mViewer.tdAreaColumns.getElementsByClassName("t-columns-title"); var i, j, ttable, tr, cH = 0, td; if (ctablet && ctablet.length > 0) { ctablet = ctablet[0]; ttable = document.createElement('table'); ttable.classList.add("t-rows-header-title", _cssmode); for (i=0; i 0) { ctable = ctable[0]; ttable = document.createElement('table'); ttable.classList.add("t-rows-header", _cssmode); for (i=0; i opts.rows.length+opts.columns.length) { return; } var datakey; if (level < opts.rows.length) { var r; if (level == 0) { objRet.rows[_level0Key] = {}; r = {}; r.value = node.key; r.total = node.total; r.level = level; objRet.rows[_level0Key] = r; rowPrevKey = node.key; } else { if (!objRet.rows[rowPrevKey]) { objRet.rows[rowPrevKey] = []; } var o = objRet.rows[rowPrevKey]; r = {}; r.value = node.key; r.total = node.total; r.level = level; o.push(r); rowPrevKey += _mSeparator + node.key; } } else if (level < opts.rows.length+opts.columns.length) { var zl = level-opts.rows.length; if ( zl == 0 ) { if(!objRet.columns[_level0Key]) { objRet.columns[_level0Key] = []; } if ( objRet.columns[_level0Key].indexOf(node.key) < 0 ) { objRet.columns[_level0Key].push(node.key); } colPrevKey = node.key; datakey = 0; } else { if (colPrevKey) { var colPrevKeyT = zl + _nSeparator + colPrevKey; if ( !objRet.columns[colPrevKeyT] ) { objRet.columns[colPrevKeyT] = []; } if ( objRet.columns[colPrevKeyT].indexOf(node.key) < 0 ) { objRet.columns[colPrevKeyT].push(node.key); } datakey = colPrevKey; } else { //strano colPrevKey = ''; } colPrevKey += _mSeparator + node.key; } } if (datakey != undefined) { if (!objRet.rows[rowPrevKey]) { objRet.rows[rowPrevKey] = {}; } if (objRet.rows[rowPrevKey] && colPrevKey) { objRet.rows[rowPrevKey][colPrevKey] = node.total; } } if (node.values) { var k, j, nv; if( (level == (opts.rows.length-1)) && node.values[0].key == _znull) { nv = node.values[0]; if(nv.values) { for( k=0; k= 0 ) { if( ix == 0) { dsort = data; dsort.sort ( function(a, b) { if( row.orderby == 'asc') return a.total[row.orderfield.toLowerCase()] - b.total[row.orderfield.toLowerCase()]; else if( row.orderby == 'desc') return b.total[row.orderfield.toLowerCase()] - a.total[row.orderfield.toLowerCase()]; else return 0; } ) } else { if( ix == 2 ) debugger for( jx=0; jx 0 ) { var str = opts.rowsSubLevel[i].toString(); var out = false; for (j=0; !out && j=0){ maxSubRowLevel++; out = true; } } if (!out) { i = opts.rowsSubLevel.length; } } } maxSubRowLevel++; } else { maxSubRowLevel = opts.rows.length; } var objRets, columns, keys; if (!this.ztController.aggregateObjRets || !this.ztController.drawingColumns) { objRets = []; columns = []; for (i=0; i 0 ) { level = parseInt(key.substring(0, key.indexOf(_nSeparator))); } if( opts.columns[level] && opts.columns[level].lvalues ){ addRecursiveValues(level, key); } columns[key] = _fUniqueArray(columns[key]); } var trmeasures = null; if( data.length > 0 ) { trmeasures = this.drawColumns(opts, columns, columnsSort, maxColumnLevel); if(trmeasures) { this.drawRows(opts, objRets, trmeasures.cells, maxRowLevel, maxSubRowLevel); } } else { var _tr = this.ztController.mViewer.htmlTable.rows[0]; var _td = _tr.cells[0]; var _div; if( this.ztController.hasMenu ) { _td.classList.add("td-menu-ctrl", _cssmode); _div = document.createElement('div'); _div.classList.add("refresh_menu_ctrl", "SPPortalZoomBaseMenu", "global_handler", "closed", _cssmode); _div.style.cursor = 'pointer'; _div.onclick = function() { _this.manageMenu(this); } _td.appendChild(_div); } _tr = this.ztController.mViewer.htmlTable.rows[1]; _td = _tr.cells[1]; _div = document.createElement('div'); _div.classList.add("label"); _td.appendChild(_div); if( this.ztController.PSCtrl && this.ztController.PSCtrl.pvGetTranslate) _div.innerHTML = this.ztController.PSCtrl.pvGetTranslate("Empty_Data"); else _div.innerHTML = 'Empty Data'; this.ztController.mViewer.htmlContainer.style.visibility = 'visible'; if( this.ztController.PSCtrl && this.ztController.PSCtrl.adjustFormHeight ) this.ztController.PSCtrl.adjustFormHeight(); if( this.ztController.PSCtrl && this.ztController.PSCtrl.hideLoadingDiv ) this.ztController.PSCtrl.hideLoadingDiv(); if( this.ztController._initOpts.onRendered ) { this.ztController._initOpts.onRendered(); } return; } if( initUi && this.htmlCTable ) this.htmlCTable.click(); } this.getState = function() { var ret = {}; ret.columnsSubLevel = [] ret.rowsSubLevel = [] var divs = this.tdAreaColumns.getElementsByClassName("openlevel"); var i, div, td, tr, key, level; if ( divs.length > 0 ) { for(i=0; i 0 ) { for(i=0; i 0 ) { ret = calSub(mArrZ[mArrZ.length-1]); } else { ret = calSub(mArr); } } else { if ( Array.isArray(rows[key]) ) { mArr = []; mArrZ = []; for( var i=0; i 0 ) { ret = calSub(mArrZ[mArrZ.length-1]); } else { ret = calSub(mArr); } } else { ret = rows[key]; } } if (!this.aggregateDataMap[key]) { this.aggregateDataMap[key] = []; } _this.ztVPivotData.updateWTotal(key, ret); this.aggregateDataMap[key][index] = ret; return ret; } this.getFilterDivPosition = function(handler) { if( handler ) return _fGetAbsoluteXY(handler); //return _fGetAbsoluteXY(this.htmlFLTable); } } try { this.mViewer = new dataViewer(this.htmlContainer, this); } catch(error) { _fOnError(this.htmlContainer, error); return; } this.updateDraw = function(Fields, Data, bDraw, Filters) { try { if( this.ztVPivotData == null ) { if ( this.bQueryLevel == true ) { this.ztVPivotData = new ZtVPivotData(this.opts, Fields, Data, true, this.PSCtrl==null); } else { this.ztVPivotData = new ZtVPivotData(this.opts, Fields, Data, false, this.PSCtrl==null); } this.aggregateObjRets = null; bDraw = true; } else { if ( this.bQueryLevel == true ) { var r = this.ztVPivotData.update(Fields, Data, this.opts, this._lastDrill); if (r) { this.aggregateObjRets = null; } } else { this.ztVPivotData = new ZtVPivotData(this.opts, Fields, Data, false, this.PSCtrl==null); this.aggregateObjRets = null; bDraw = true; this.drillKeys = {}; this.drawOpts.rows = []; this.drawOpts.columns = []; this.dataOpts.measures = []; this.drawOpts.rows.push(this.opts.rows[0]); this.drawOpts.columns.push(this.opts.columns[0]); this.drawOpts.measures = _fjsonCopy(this.opts.measures); this._SdrawOpts = null; this._SdrillKeys = null; this.drawOpts.rowsSubLevel = null; this.drawOpts.columnsSubLevel = null; } } if(bDraw == undefined || bDraw == null) { bDraw = true; } if(bDraw == true) { var force = (this.drawOpts.rows.length != this.dataOpts.rows.length); this.drawOpts.filters = Filters; this.dataOpts.rows = _fjsonCopy(this.drawOpts.rows); //si raggruppa solo per le righe richieste, se cambiano bisogna elaborare di nuovo i dati this.dataOpts.columns = _fjsonCopy(this.opts.columns); //si raggruppa sempre con tutte le colonne this.dataOpts.measures = _fjsonCopy(this.drawOpts.measures); this.dataOpts.filters = _fjsonCopy(this.drawOpts.filters); this.nestedData = this.ztVPivotData.getNestedData(this.dataOpts, force); var fnc = function() { _this._updateFiltersDiv(); //_this.PSObserver.observe(_this.htmlContainer); } this.mViewer.draw(false, fnc); } } catch(error) { _fOnError(this.htmlContainer, error); return; } } this._checkDrawOpts = function (drawOpts) { var isValid = true; var updRowsF = [], updRowsO = []; var updColsF = [], updColsO = []; var i, k; if (drawOpts.columns == undefined) { drawOpts.columns = []; } if (drawOpts.rows == undefined) { drawOpts.rows = []; } if (drawOpts.columns.length == 0) { drawOpts.columns.push(this.opts.columns[0]) } for(i=drawOpts.rows.length-1; i>=0; i--) { if(!drawOpts.rows[i]) { drawOpts.rows.splice(i, 1); } } for(i=drawOpts.columns.length-1; i>=0; i--) { if(!drawOpts.columns[i]) { drawOpts.columns.splice(i, 1); } } for(i=0; isValid && i= length ) { try { var fnc = function(){ var vState = _this.mViewer.getState(); _this.drawOpts.columnsSubLevel = vState.columnsSubLevel; _this.drawOpts.rowsSubLevel = vState.rowsSubLevel; _this._updateFiltersDiv(); //_this.PSObserver.observe(_this.htmlContainer); } myPivot.mViewer.draw(true, fnc); } catch(error) { _fOnError(myPivot.htmlContainer, error); return; } } } function _spprxycizerCss() { if ( (!_this.PSCtrl || (_this.PSCtrl && _this.PSCtrl._forceCSS )) && ZtVWeb) { var lfiles = _this.opts._cssFiles.toString(); var URL = new ZtVWeb.JSURL(ZtVWeb.SPWebRootURL + '/servlet/SPPrxycizerServlet?files=' + URLenc(lfiles), true ); var url = URL.SetUnwrapMsg(false); var output = url.Response(); if(!output.match("ACCESS DENIED")){ _this.opts._cssFiles = output.split(','); } } } function _inLoad(/*src, status*/) { count++; _asyncDraw(_this, count, files.length); } try { if ( this.bQueryLevel == true ) { this.ztVPivotData = new ZtVPivotData(this.opts, Fields, Data, true, this.PSCtrl==null); } else { this.ztVPivotData = new ZtVPivotData(this.opts, Fields, Data, false, this.PSCtrl==null); } if (!this._checkDrawOpts(drawOpts)) { var error = new Error('Invalid configuration'); _fOnError(this.htmlContainer, error); return; } this.dataOpts = {}; this.drawOpts = drawOpts; this.dataOpts.rows = _fjsonCopy(drawOpts.rows); //si raggruppa solo per le righe richieste, se cambiano bisogna elaborare di nuovo i dati this.dataOpts.columns = _fjsonCopy(this.opts.columns); //si raggruppa sempre con tutte le colonne this.dataOpts.measures = _fjsonCopy(this.opts.measures); this.nestedData = this.ztVPivotData.getNestedData(this.dataOpts); _spprxycizerCss(); files = this.opts._cssFiles; _asyncDraw(_this, count, files.length); //caso 0 for ( i=0; i lastColumnLevel ) { //da ottimizzare -- evitare di elaborare i dati se non serve!!!! //forse salvare per livello this.aggregateObjRets = null; } var o = {}; o.level = level; o.drillDownRow = false; o.drill = []; o.isOpen = openclose; var lsplit = key.split(_mSeparator); var dkey = 'column' + _mSeparator + key; for( i=0; i lastColumnLevel) ) { //non dovrebbe servire rifare getNestedData, perche al momento generiamo sempre con tutte le colonne this.aggregateObjRets = null; } var fnc = function() { _this._updateFiltersDiv(); if(_this._initOpts.onDrillDown) { var o = {}; o.level = level - 1; o.drillDownRow = false; o.drill = []; o.isOpen = openclose; var lsplit = key.split(_mSeparator); for (i=0; i=0; k--) { vL = cL[k]; f = false; for(l=0; !f && l lastRowLevel ) { //da ottimizzare -- evitare di elaborare i dati se non serve!!!! //forse salvare per livello this.aggregateObjRets = null; } var o = {}; o.level = level; o.drillDownRow = true; o.drill = []; o.isOpen = openclose; var lsplit = key.split(_mSeparator); var dkey = 'row' + _mSeparator + key; for( i=0; i 1) { td1.firstChild.style.width = (w-td1.childNodes[1].offsetWidth) + "px"; td1.childNodes[1].style.width = (td1.childNodes[1].offsetWidth) + "px"; } else { td1.firstChild.style.width = (w) + "px"; } } if(td2){ if(td2.childNodes.length > 1) { td2.firstChild.style.width = (w-td2.childNodes[1].offsetWidth) + "px"; td2.childNodes[1].style.width = (td2.childNodes[1].offsetWidth) +"px"; } else { td2.firstChild.style.width = (w) + "px"; } } } } } function _fAdjustContainer(ctrl) { ctrl.style.overflowX = ''; ctrl.style.overflowY = ''; var htmlTable = ctrl.getElementsByTagName('table')[0]; if(!htmlTable || !htmlTable.getElementsByClassName) { ctrl.style.overflowX = ''; ctrl.style.overflowY = ''; return; } if ( _this.lwidth && _this.lheight ) { if ( (_this.lwidth == ctrl.offsetWidth) && (_this.lheight == ctrl.offsetHeight) ) { ctrl.style.overflowX = ''; ctrl.style.overflowY = ''; return; } } var tdrows = htmlTable.getElementsByClassName("td-view-rows"); var dvcolumns = htmlTable.getElementsByClassName("tdiv-data-columns"); var maxW = 0; var i; for (i=0; i 0) { if (dvcolumns[i].offsetWidth <= (cW - maxW)) { dvcolumns[i].style.maxWidth = (cW - maxW) + "px"; dvcolumns[i].style.width = null; } else { dvcolumns[i].style.width = (cW - maxW) + "px"; } } else { ctrl.style.overflowX = 'scroll' } if ( dvcolumns[i].classList.contains("tdiv-data") ) { div = dvcolumns[i]; } } //height var tdcolumns = htmlTable.getElementsByClassName("td-view-columns"); var maxH = 0; var divr, divr2, cH = ctrl.offsetHeight; for (i=0; i 0 ) cH = _this._initOpts.containerHeight; //console.log(cH, maxH) if (div && (cH - maxH > 0) ) { div.style.maxHeight = (cH - maxH) + "px"; //div tdiv-data divr = htmlTable.getElementsByClassName("tdiv-rows"); divr[0].style.maxHeight = (cH - maxH) + "px"; } else { ctrl.style.overflowY = 'scroll' } divr2 = htmlTable.getElementsByClassName("tdiv-data-columns"); if( divr2.length > 0 ) { divr2[0].classList.remove("tdiv-rows-overflowy"); divr2[0].classList.remove(_cssmode); if (div && (div.clientHeight < div.scrollHeight)) { //scroll ver divr = htmlTable.getElementsByClassName("tdiv-columns"); divr2[0].classList.add("tdiv-rows-overflowy"); } divr2[0].classList.add(_cssmode); } divr = htmlTable.getElementsByClassName("tdiv-rows"); if( divr.length > 0 ) { divr[0].classList.remove("tdiv-rows-overflowx"); divr[0].classList.remove(_cssmode); if (div && (div.clientWidth < div.scrollWidth)) { //scroll hor divr[0].classList.add("tdiv-rows-overflowx"); } divr[0].classList.add(_cssmode); } _this.lwidth = ctrl.offsetWidth; _this.lheight = ctrl.offsetHeight; //console.log(_this.lheight) } function _fUniqueArray(arrArg) { return arrArg.filter(function(elem, pos,arr) { return arr.indexOf(elem) == pos; }); } function _fReplaceSpecialChars(mtext) { return mtext; } function _fUnReplaceSpecialChars(mtext) { return mtext; } function _fMergeDeepSum (o1, o2) { var tempNewObj = o1; if(o1==null) return o2; //if o1 is an object - {} if(o1.length === undefined && typeof o1 !== "number" && typeof o1 != "function") { for(var key in o2){ if(typeof o2[key]=="function") continue; var value = o2[key]; if(o1[key] === undefined) { tempNewObj[key] = value; } else { tempNewObj[key] = _fMergeDeepSum(o1[key], o2[key]); } } } //else if o1 is an array - [] else if(o1.length > 0 && typeof o1 !== "string" && typeof o1 != "function") { for(var indexc in o2){ if(typeof o2[indexc] == "function") continue; if(o1[indexc] === undefined){ tempNewObj.push(o2[indexc]); } else{ var tmp = _fMergeDeepSum(o1[indexc], o2[indexc]); tempNewObj[indexc] = tmp; } }; } //handling other types like string or number else if(typeof o1 != "function"){ //taking value from the second object o2 //could be modified to keep o1 value with tempNewObj = o1; //if(typeof o1 !== "undefined") -- corretto EG //Modifica per sum tempNewObj = o1+o2; } return tempNewObj; } function _fOnError(ctrl, error) { if (ctrl) { if(_this.PSCtrl && _this.PSCtrl.pvGetTranslate) { ctrl.innerHTML = _this.PSCtrl.pvGetTranslate("Error_msg"); } else { ctrl.innerHTML = "ZTC_ERROR"; } if(console.error) console.error(error); } else if(error) { if(console.error) console.error(error); } } function _fHandleIntersectionObserver(entries, observer) { var htmlTable = entries[0].target; observer.unobserve(htmlTable); if ( observer.parent._reqAnimationId ) { cancelAnimationFrame(observer.parent.reqAnimationId); } //observer.parent._timer = setTimeout(function(myPivot) { var myPivot = observer.parent; observer.parent._reqAnimationId = requestAnimationFrame ( function () { var htmlTable = entries[0].target; _fAdjustWidthTables(htmlTable, "t-rows", "t-rows-header"); _fAdjustHeightTables(htmlTable, "t-rows-header", "t-columns", myPivot); if(myPivot.hasMenu || !myPivot._initOpts.hideMeasures && myPivot._initOpts.measuresOnColumn || !myPivot._initOpts.measuresOnColumn ) _fAdjustHeightTables(htmlTable, "t-rows-header-title", "t-columns-title", myPivot); _this.lwidth = 0; _this.lheight = 0; var trowsH, row; if( myPivot._initOpts.measuresOnColumn && myPivot._initOpts.hideMeasures ) { trowsH = htmlTable.getElementsByClassName("t-rows-header-title"); if( trowsH.length == 0 ) return; var rows = trowsH[0].getElementsByTagName('tr'); var tcolsH = htmlTable.getElementsByClassName("t-columns"); rows = tcolsH[0].getElementsByTagName('tr'); var lastrow = rows[rows.length - 1]; var tds = lastrow.getElementsByTagName('td'); lastrow.style.height = "0px"; lastrow.style.visibility = 'collapse' var i; for( i=0; i 0) { var _rDrill = document.querySelector("[trkey='" + myPivot._drillRowKey +"']"); if( _rDrill) { // Get the top, left coordinates of two elements var eleRect = _rDrill.children[0].getBoundingClientRect(); var targetRect = rowdiv[0].getBoundingClientRect(); // Calculate the top and left positions scrTop = eleRect.top - targetRect.top - targetRect.height/2; //- targetRect.height/2; cercando di centrare } } } if (myPivot._drillColKey) { if (rowdiv && rowdiv.length > 0) { _rDrill = document.querySelector("[tckey='" + myPivot._drillColKey +"']"); if( _rDrill) { // Get the top, left coordinates of two elements eleRect = _rDrill.children[0].getBoundingClientRect(); targetRect =rowdiv[0].getBoundingClientRect(); // Calculate the top and left positions scrLeft = eleRect.left - targetRect.left - targetRect.width/2; } } } var cfCols = htmlTable.getElementsByClassName('columns') var cfMeas = htmlTable.getElementsByClassName('measures') if( cfCols && cfMeas && cfCols[0] && cfMeas[0] && cfMeas[0].offsetHeight > 0) cfCols[0].style.height = cfMeas[0].offsetHeight + 'px'; myPivot.mViewer.htmlContainer.style.visibility = 'visible'; if( myPivot.PSCtrl && myPivot.PSCtrl.adjustFormHeight ) myPivot.PSCtrl.adjustFormHeight(); if( myPivot.PSCtrl && myPivot.PSCtrl.hideLoadingDiv ) myPivot.PSCtrl.hideLoadingDiv(); if( myPivot._initOpts.onRendered ) { myPivot._initOpts.onRendered(); } if (rowdiv && rowdiv.length > 0) { rowdiv[0].scrollTo(scrLeft, scrTop); } }); htmlTable.onmouseout = function(e) { if( e && e.relatedTarget && e.relatedTarget.hasAttribute('filterbyexample_handler')) return; if( myPivot && myPivot.PSCtrl && myPivot.PSCtrl._OutFilterByExample) { myPivot.PSCtrl._OutFilterByExample(e) } } htmlTable.onmouseover = function(e) { if( e && e.relatedTarget && !e.relatedTarget.hasAttribute('filterbyexample_handler')) return; if( myPivot && myPivot.PSCtrl && myPivot.PSCtrl._OutFilterByExample) { myPivot.PSCtrl._OutFilterByExample(e) } } } function _fGetOffset(itm){ if (!itm) return {w:0, h:0}; var bl = parseInt(LibJavascript.DOM.getComputedStyle( itm, "border-left-width" )), br = parseInt(LibJavascript.DOM.getComputedStyle( itm, "border-right-width" )), ml = parseInt(LibJavascript.DOM.getComputedStyle( itm, "margin-left" )), mr = parseInt(LibJavascript.DOM.getComputedStyle( itm, "margin-right" )), pl = parseInt(LibJavascript.DOM.getComputedStyle( itm, "padding-left" )), pr = parseInt(LibJavascript.DOM.getComputedStyle( itm, "padding-right" )), gapw = bl+br+ml+mr+pl+pr, w = itm.offsetWidth - ( gapw), h = 0; return {w:w, h:h} } function _fGetAbsoluteXY(itm) { if (!itm) return {'x':0,'y':0}; var x = 0, y = 0; while (itm != null) { y += itm.offsetTop; x += itm.offsetLeft; itm = itm.offsetParent; } return {'x':x,'y':y}; } function _fPad(num) { var size = _npad; var s = num+""; while (s.length < size) s = "0" + s; return s; } function _fSetHTMLAttribute(elem, attr, value) { if (attr == "class") { elem.setAttribute(attr, value); elem.classList.remove("td-measuretitle"); elem.classList.remove("td-view-title"); } else { elem.setAttribute(attr, _fReplaceSpecialChars(value)); } } function _fGetHTMLAttribute(elem, attr) { if (attr == "class") { return elem.getAttribute(attr); } else { return _fUnReplaceSpecialChars(elem.getAttribute(attr)); } } function _fApplyPicture(value, fnc, htmlE, type){ var v; if (fnc != undefined) { v = _this.ztVPivotData._getApplyPicture(fnc, value, null, type); htmlE.innerHTML = ToHTML(v); } else { if( value != null ) { if(typeof value == 'number') v = (value.toFixed(2))+""; else v = value; htmlE.innerHTML = ToHTML(v); } else { v = ''; htmlE.innerHTML = ToHTML(v); } } return v; } function _fApplyCss(value, fnc, htmlE, rowkey, columnkey, aliasMeasure){ if(fnc != undefined) { var pivotKeys = {}; pivotKeys.rows = null; pivotKeys.columns = null; pivotKeys.measure = aliasMeasure; var lsplit, s, i; if (rowkey.indexOf(_level0Key) < 0) { pivotKeys.rows = []; lsplit = rowkey.split(_mSeparator); for (i=0; i -1) { fnc = fnc.replace(/function:/g, ''); } else if(fnc.indexOf('javascript:') > -1) { fnc = fnc.replace(/javascript:/g, ''); } var evalStr = fnc + '(' + value + ',' + 'pivotKeys' + ')'; ret = eval(evalStr); } else { ret = fnc(value, pivotKeys); } if ( ret!=undefined ) { if (typeof ret === 'string' || ret instanceof String) { if(ret.length >0) { htmlE.classList.add(ret); } } else { //object var keys = Object.keys(ret); for(i=0; i