From 86f009fd3f506f8c19becdac1d2bcefc38b11adb Mon Sep 17 00:00:00 2001 From: Kristoffer Lind Date: Fri, 21 Dec 2018 14:24:43 +0100 Subject: [PATCH] extract row wrapper --- src/paint.js | 649 ++------------------------------------------- src/row-wrapper.js | 636 ++++++++++++++++++++++++++++++++++++++++++++ src/utilities.js | 7 + 3 files changed, 665 insertions(+), 627 deletions(-) create mode 100644 src/row-wrapper.js diff --git a/src/paint.js b/src/paint.js index 3581766..83268d5 100644 --- a/src/paint.js +++ b/src/paint.js @@ -1,22 +1,9 @@ import $ from 'jquery'; -import { addSeparators } from './utilities'; -import { ApplyPreMask } from './masking'; import { enableExcelExport } from './excel-export'; import { generateHeaderWrapper } from './header-wrapper'; +import { generateRowWrapper } from './row-wrapper'; export default function paint($element, layout, component) { - var vCustomFileBool = layout.customfilebool; - var vCustomFile = layout.customfile; - var vPadding = layout.indentbool; - var vPaddingText = ''; - var vGlobalComas = 0; - var vGlobalComas2 = 0; - var vGlobalComment = 0; - var vGlobalCommentColor = ''; - var vGlobalFontSize = 0; - var vComas = 0; - var vMedium = false; - const colors = { vColLibClean: layout.collibclean, vColLibSoft: layout.collibsoft, @@ -40,60 +27,6 @@ export default function paint($element, layout, component) { vColLibCustomP: layout.collibcustomp }; - var vDynamicColorBody = 'vColLib' + layout.ColorSchema; - var vDynamicColorBodyP = 'vColLib' + layout.ColorSchema + 'P'; - - var vColorSchema = colors[vDynamicColorBody]; - var vColorSchemaP = colors[vDynamicColorBodyP]; - - var vFontSize = ''; - - var vColorText = layout.BodyTextColorSchema; - var vDivide = 1; - - - var vSymbolForNulls = layout.symbolfornulls; - - var vAllSemaphores = layout.allsemaphores; - var ConceptsAffectedMatrix = new Array(10); - if (vAllSemaphores == false) { - ConceptsAffectedMatrix[0] = layout.conceptsemaphore1; - ConceptsAffectedMatrix[1] = layout.conceptsemaphore2; - ConceptsAffectedMatrix[2] = layout.conceptsemaphore3; - ConceptsAffectedMatrix[3] = layout.conceptsemaphore4; - ConceptsAffectedMatrix[4] = layout.conceptsemaphore5; - ConceptsAffectedMatrix[5] = layout.conceptsemaphore6; - ConceptsAffectedMatrix[6] = layout.conceptsemaphore7; - ConceptsAffectedMatrix[7] = layout.conceptsemaphore8; - ConceptsAffectedMatrix[8] = layout.conceptsemaphore9; - ConceptsAffectedMatrix[9] = layout.conceptsemaphore10; - } - - var vAllMetrics = layout.allmetrics; - var MetricsAffectedMatrix = JSON.parse('[' + layout.metricssemaphore + ']'); - - var vColorMetric1 = layout.colorstatus1.color; - var vColorMetric2 = layout.colorstatus2.color; - var vColorMetric3 = layout.colorstatus3.color; - var vColorMetric1Text = layout.colorstatus1text.color; - var vColorMetric2Text = layout.colorstatus2text.color; - var vColorMetric3Text = layout.colorstatus3text.color; - var vColorSemaphore = ''; - var vColorSemaphoreText = ''; - - var vCritic = layout.metricsstatus1; - var vMMedium = layout.metricsstatus2; - - var CustomArray = new Array(); - var CustomArrayBasic = new Array(); - var vNumCustomHeaders = 0; - - - var vColumnText = ''; - var vColumnNum = ''; - var vMaskNum = 0; - var StyleTags = ''; - let { html: headerWrapperHTML, nMeasAux, @@ -120,373 +53,33 @@ export default function paint($element, layout, component) { component, colors ); + let html = headerWrapperHTML; - html += "
"; - - if (vCustomFileBool && vCustomFile.length > 4) { - ReadCustomSchema(); - } else { - PaintTheNumbers(); + generateRowWrapper( + layout, + colors, + nMeasAux, + vNumDims, + measure_count, + MeasuresFormat, + vNumMeasures, + vNumMeasures2, + sufixCells, + vFontFamily, + vSeparatorCols, + lastrow, + ConceptMatrix, + ConceptMatrixFirstClean, + vLetterSize, + ConceptMatrixPivot + ).then(rowWrapperHTML => { + html += rowWrapperHTML; RenderData(); - } - //This function opens a csv file that contains the parameters for the custom mode - //this will prevent consuming to many dimensions, as there allowed only 10 columns between - //dimensions and metrics - function ReadCustomSchema() { - var Url = '/Extensions/PLSmartPivot/' + vCustomFile; - var Items = $.get(Url).then(function (response) { - var allTextLines = response.split(/\r\n|\n/); - var headers = allTextLines[0].split(';'); - vNumCustomHeaders = headers.length; + }); - for (var i = 0; i < allTextLines.length; i++) { - CustomArray[i] = new Array(headers.length); - var data = allTextLines[i].split(';'); - - if (data.length == headers.length) { - for (var j = 0; j < headers.length; j++) { - CustomArrayBasic[i] = data[0]; - CustomArray[i][j] = data[j]; - } - } - } - - PaintTheNumbers(); - RenderData(); - }); - - return Items; - } - //Paint the numbers - function PaintTheNumbers() { - if (vNumDims == 1) { - //apply the custom style - for (var nmrows = 0; nmrows <= lastrow; nmrows++) { - vColumnText = ConceptMatrix[nmrows][0]; - vGlobalComment = 0; - vGlobalCommentColor = ''; - if (vColumnText != '-') { - StyleTags = ''; - - if (vCustomFileBool) { - vComas = 0; - vMedium = false; - vGlobalComas = 0; - vGlobalComas2 = 0; - vGlobalFontSize = 0; - var aach = 0; - var vCustomAttribute = ''; - StyleTags = ''; - for (aach = 1; aach < vNumCustomHeaders; aach++) { // for each custom attribute allocated in the external csv - if (CustomArrayBasic.indexOf(vColumnText) < 0) { - vCustomAttribute == 'none'; - } else { - vCustomAttribute = CustomArray[CustomArrayBasic.indexOf(vColumnText)][aach]; //CustomArrayBasic se ha rellenado con los atributos de look al principio de la ejecución del código - } - ApplyBold(vCustomAttribute, vComas); - vComas += vGlobalComas; - ApplyComment(vCustomAttribute, vComas); - vComas += vGlobalComas; - ApplyFontStyle(vCustomAttribute, vComas); - vComas += vGlobalComas; - ApplyBackgroundColor(vCustomAttribute, vComas); - vComas += vGlobalComas; - ApplyFontColor(vCustomAttribute, vComas); - vComas += vGlobalComas; - ApplyFontSize(vCustomAttribute, vComas); - vComas += vGlobalComas; - ApplyAlignment(vCustomAttribute, vComas); - vComas += vGlobalComas; - } - if (vGlobalFontSize == 0) { - if (vComas > 0) { - StyleTags += ';font-size:' + (14 + vLetterSize) + 'px'; - } else { - StyleTags += 'font-size:' + (14 + vLetterSize) + 'px'; - } - vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; - vGlobalFontSize = 1; - } - - // after this the row styles are configured - } else { - ApplyStandardAttributes(nmrows); - vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; - } - - if (vPadding && vGlobalComas2 == 0) { - vPaddingText = ''; - } else { - vPaddingText = ''; - } - - //html += ''; - html += '';//';' + StyleTags + ;width:230px - if (vGlobalComment == 1) { - if (vGlobalCommentColor == '') { - vGlobalCommentColor = 'white'; - } - if (vComas > 0) { - StyleTags += ';color:' + vGlobalCommentColor; - } else { - StyleTags += 'color:' + vGlobalCommentColor; - } - } - for (var nMeasures2 = 1; nMeasures2 <= vNumMeasures; nMeasures2++) { - if (vColumnText.substring(0, 1) == '%') { - vColumnNum = ApplyPreMask('0,00%', ConceptMatrix[nmrows][nMeasures2]); - vSpecialF = '0,00%'; - } else { - switch (MeasuresFormat[nMeasures2 - 1].substr(MeasuresFormat[nMeasures2 - 1].length - 1)) { - case 'k': - vDivide = 1000; - break; - - case 'K': - vDivide = 1000; - break; - - case 'm': - vDivide = 1000000; - break; - - case 'M': - vDivide = 1000000; - break; - - default: - vDivide = 1; - break; - } - var vSpecialF = MeasuresFormat[nMeasures2 - 1].replace(/k|K|m|M/gi, ''); - if (!isNaN(ConceptMatrix[nmrows][nMeasures2])) { - vMaskNum = ConceptMatrix[nmrows][nMeasures2]; - if (vSpecialF.substring(vSpecialF.length - 1) == '%') { - vMaskNum = vMaskNum * 100; - } - switch (vSpecialF) { - case '#.##0': - vColumnNum = addSeparators((vMaskNum / vDivide), '.', ',', 0); - break; - - case '#,##0': - vColumnNum = addSeparators((vMaskNum / vDivide), ',', '.', 0); - break; - - default: - vColumnNum = ApplyPreMask(vSpecialF, (vMaskNum / vDivide)); - break; - } - } else { - vColumnNum = vSymbolForNulls; - } - } - if (vGlobalComment == 1) { - vColumnNum = '.'; - } - // apply the semaphore styles where needed - if ((vAllSemaphores || ConceptsAffectedMatrix.indexOf(vColumnText) >= 0) && (vAllMetrics || MetricsAffectedMatrix.indexOf(nMeasures2) >= 0) && !isNaN(ConceptMatrix[nmrows][nMeasures2]) && vGlobalComment == 0) { - if (ConceptMatrix[nmrows][nMeasures2] < vCritic) { - vColorSemaphore = vColorMetric1; - vColorSemaphoreText = vColorMetric1Text; - } else { - if (ConceptMatrix[nmrows][nMeasures2] < vMMedium) { - vColorSemaphore = vColorMetric2; - vColorSemaphoreText = vColorMetric2Text; - } else { - vColorSemaphore = vColorMetric3; - vColorSemaphoreText = vColorMetric3Text; - } - } - html += ''; - } else { - html += ''; - } - } - } - html += ''; - } - } else { - var nPivotRows = ConceptMatrixFirstClean.length; - for (var nmrows2 = 0; nmrows2 < nPivotRows; nmrows2++) { - vColumnText = ConceptMatrixPivot[nmrows2][0];// the descriptive account text - vGlobalComment = 0; - vGlobalCommentColor = ''; - if (vColumnText != '-') { - StyleTags = ''; - if (vCustomFileBool) { - vComas = 0; - vMedium = false; - - vGlobalComas = 0; - vGlobalComas2 = 0; - vGlobalFontSize = 0; - var aach2 = 0; - var vCustomAttribute2 = ''; - StyleTags = ''; - - for (aach2 = 1; aach2 < vNumCustomHeaders; aach2++) { // for each attribute allocated in the external csv - if (CustomArrayBasic.indexOf(vColumnText) < 0) { - vCustomAttribute2 == 'none'; - } else { - vCustomAttribute2 = CustomArray[CustomArrayBasic.indexOf(vColumnText)][aach2]; //CustomArrayBasic has been filled with the custom attribute at the begining of the code - } - ApplyBold(vCustomAttribute2, vComas); - vComas += vGlobalComas; - ApplyComment(vCustomAttribute2, vComas); - vComas += vGlobalComas; - ApplyFontStyle(vCustomAttribute2, vComas); - vComas += vGlobalComas; - ApplyBackgroundColor(vCustomAttribute2, vComas); - vComas += vGlobalComas; - ApplyFontColor(vCustomAttribute2, vComas); - vComas += vGlobalComas; - ApplyFontSize(vCustomAttribute2, vComas); - vComas += vGlobalComas; - ApplyAlignment(vCustomAttribute2, vComas); - vComas += vGlobalComas; - } - if (vGlobalFontSize == 0) { - if (vComas > 0) { - StyleTags += ';font-size:' + (14 + vLetterSize) + 'px'; - } else { - StyleTags += 'font-size:' + (14 + vLetterSize) + 'px'; - } - vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; - vGlobalFontSize = 1; - } - - // custom styles configured - } else { - ApplyStandardAttributes(nmrows2); - vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; - } - - if (vPadding && vGlobalComas2 == 0) { - vPaddingText = ''; - } else { - vPaddingText = ''; - } - html += ''; - if (vGlobalComment == 1) { - if (vGlobalCommentColor == '') { - vGlobalCommentColor = 'white'; - } - if (vComas > 0) { - StyleTags += ';color:' + vGlobalCommentColor; - } else { - StyleTags += 'color:' + vGlobalCommentColor; - } - } - var nMeasure7 = 0; - var nMeasure72 = -1; - var nMeasure72Semaphore = 0; - - for (var nMeasures22 = 1; nMeasures22 <= vNumMeasures2; nMeasures22++) { - nMeasAux = nMeasure72Semaphore; - nMeasure7++; - nMeasure72++; - if (vColumnText.substring(0, 1) == '%') { - vColumnNum = ApplyPreMask('0,00%', ConceptMatrixPivot[nmrows2][nMeasures22]); - var vSpecialF = '0,00%'; - } else { - switch (MeasuresFormat[nMeasure72].substr(MeasuresFormat[nMeasure72].length - 1)) { - case 'k': - vDivide = 1000; - break; - - case 'K': - vDivide = 1000; - break; - - case 'm': - vDivide = 1000000; - break; - - case 'M': - vDivide = 1000000; - break; - - default: - vDivide = 1; - break; - } - var vSpecialF = MeasuresFormat[nMeasure72].replace(/k|K|m|M/gi, ''); - if (!isNaN(ConceptMatrixPivot[nmrows2][nMeasures22])) { - vMaskNum = ConceptMatrixPivot[nmrows2][nMeasures22]; - if (vSpecialF.substring(vSpecialF.length - 1) == '%') { - vMaskNum = vMaskNum * 100; - } - - switch (vSpecialF) { - case '#.##0': - vColumnNum = addSeparators((vMaskNum / vDivide), '.', ',', 0); - break; - case '#,##0': - vColumnNum = addSeparators((vMaskNum / vDivide), ',', '.', 0); - break; - default: - vColumnNum = ApplyPreMask(vSpecialF, (vMaskNum / vDivide)); - break; - } - } else { - vColumnNum = vSymbolForNulls; - } - } - - if (vSeparatorCols && nMeasure7 == (measure_count + 1)) { - html += ''; - nMeasure7 = 1; - } - if (nMeasure72 == (measure_count - 1)) { - nMeasure72 = -1; - nMeasure72Semaphore = measure_count; - } else { - nMeasure72Semaphore = nMeasure72 + 1; - } - - // apply the semaphores where needed - if (vGlobalComment == 1) { - vColumnNum = '.'; - } - if ((vAllSemaphores || ConceptsAffectedMatrix.indexOf(vColumnText) >= 0) && (vAllMetrics || MetricsAffectedMatrix.indexOf(nMeasure72Semaphore) >= 0) && !isNaN(ConceptMatrixPivot[nmrows2][nMeasures22]) && vGlobalComment == 0) { - if (ConceptMatrixPivot[nmrows2][nMeasures22] < vCritic) { - vColorSemaphore = vColorMetric1; - vColorSemaphoreText = vColorMetric1Text; - } else { - if (ConceptMatrixPivot[nmrows2][nMeasures22] < vMMedium) { - vColorSemaphore = vColorMetric2; - vColorSemaphoreText = vColorMetric2Text; - } else { - vColorSemaphore = vColorMetric3; - vColorSemaphoreText = vColorMetric3Text; - } - } - - if (vSpecialF.substring(vSpecialF.length - 1) == '%' && vNumMeasures > 1) { - html += ''; - } else { - html += ''; - } - } else { - if (vSpecialF.substring(vSpecialF.length - 1) == '%' && vNumMeasures > 1) { - html += ''; - } else { - html += ''; - } - } - } - html += ''; - } - } - } - } //render data function RenderData() { - html += '
' + vColumnText + '
' + vPaddingText + vColumnText + '' + vColumnNum + '' + vColumnNum + '
' + vPaddingText + vColumnText + '' + '*' + '' + vColumnNum + '' + vColumnNum + '' + vColumnNum + '' + vColumnNum + '
'; - html += '
'; - // freeze header and first column var x = "
"; x += html; @@ -622,202 +215,4 @@ export default function paint($element, layout, component) { $(this).find('th:not(.fdim-cells)').remove(); }); } - - // PYJAMAS - function ApplyStandardAttributes(strow) { - if (strow / 2 == Math.round(strow / 2)) { - StyleTags += 'background-color:' + vColorSchema + ';color:' + vColorText; - } else { - StyleTags += 'background-color:' + vColorSchemaP + ';color:' + vColorText; - } - StyleTags += ';font-size:' + (14 + vLetterSize) + 'px'; - } - // transform the custom styles in html code - - function ApplyBold(vCustomAttributes, vCustomComas) { - var vPuntoComa = ''; - if (vCustomComas > 0) { - vPuntoComa = ';'; - } - switch (vCustomAttributes) { - case '': - StyleTags += vPuntoComa + 'font-weight:bold'; - vGlobalComas = 1; - vGlobalComas2 = 1; - break; - - default: - StyleTags += ''; - break; - } - } - function ApplyComment(vCustomAttributes) { - switch (vCustomAttributes) { - case '': - vGlobalComment = 1; - break; - - default: - StyleTags += ''; - break; - } - } - function ApplyFontStyle(vCustomAttributes, vCustomComas) { - var vPuntoComa = ''; - if (vCustomComas > 0) { - vPuntoComa = ';'; - } - switch (vCustomAttributes) { - case '': - StyleTags += vPuntoComa + 'font-style:italic'; - vGlobalComas = 1; - vGlobalComas2 = 1; - break; - - case '': - StyleTags += vPuntoComa + 'font-style:oblique'; - vGlobalComas = 1; - vGlobalComas2 = 1; - break; - - default: - StyleTags += ''; - break; - } - } - function ApplyBackgroundColor(vCustomAttributes, vCustomComas) { - var vPuntoComa = ''; - if (vCustomComas > 0) { - vPuntoComa = ';'; - } - switch (vCustomAttributes) { - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibDark; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibDark; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibNight; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibNight; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibSoft; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibSoft; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibRed; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibRed; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibOrange; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibOrange; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibViolete; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibViolete; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibBlue; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibBlue; - break; - - case '': - StyleTags += vPuntoComa + 'background-color:' + colors.vColLibGreen; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = colors.vColLibGreen; - break; - - default: - if (vCustomAttributes.substring(0, 1) == '#' || vCustomAttributes.substring(0, 3).toUpperCase() == 'RGB') { - StyleTags += vPuntoComa + 'background-color:' + vCustomAttributes; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalCommentColor = vCustomAttributes; - } - break; - } - } - function ApplyFontColor(vCustomAttributes, vCustomComas) { - var vPuntoComa = ''; - if (vCustomComas > 0) { - vPuntoComa = ';'; - } - if (vCustomAttributes === '' && vGlobalComment == 0) { - StyleTags += vPuntoComa + 'color:white'; - vGlobalComas = 1; - vGlobalComas2 = 1; - } - } - function ApplyFontSize(vCustomAttributes, vCustomComas) { - var vPuntoComa = ''; - if (vCustomComas > 0) { - vPuntoComa = ';'; - } - switch (vCustomAttributes) { - case '': - StyleTags += vPuntoComa + 'font-size:' + (15 + vLetterSize) + 'px'; - vFontSize = ';font-size:' + (15 + vLetterSize) + 'px'; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalFontSize = 1; - break; - - case '': - StyleTags += vPuntoComa + 'font-size:' + (14 + vLetterSize) + 'px'; - vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; - vGlobalComas = 1; - vMedium == true; - vGlobalFontSize = 1; - break; - - case '': - StyleTags += vPuntoComa + 'font-size:' + (13 + vLetterSize) + 'px'; - vFontSize = ';font-size:' + (13 + vLetterSize) + 'px'; - vGlobalComas = 1; - vGlobalComas2 = 1; - vGlobalFontSize = 1; - break; - - default: - StyleTags += ''; - break; - } - } - function ApplyAlignment(vCustomAttributes, vCustomComas) { - var vPuntoComa = ''; - if (vCustomComas > 0) { - vPuntoComa = ';'; - } - switch (vCustomAttributes) { - case '
': - StyleTags += vPuntoComa + 'text-align:center'; - vGlobalComas = 1; - vGlobalComas2 = 1; - break; - - default: - StyleTags += ''; - break; - } - } } diff --git a/src/row-wrapper.js b/src/row-wrapper.js new file mode 100644 index 0000000..1540232 --- /dev/null +++ b/src/row-wrapper.js @@ -0,0 +1,636 @@ +import $ from 'jquery'; +import { addSeparators, Deferred } from './utilities'; +import { ApplyPreMask } from './masking'; + +export function generateRowWrapper ( + layout, + colors, + nMeasAux, + vNumDims, + measure_count, + MeasuresFormat, + vNumMeasures, + vNumMeasures2, + sufixCells, + vFontFamily, + vSeparatorCols, + lastrow, + ConceptMatrix, + ConceptMatrixFirstClean, + vLetterSize, + ConceptMatrixPivot +) { + var vCustomFileBool = layout.customfilebool; + var vCustomFile = layout.customfile; + var vPadding = layout.indentbool; + var vPaddingText = ''; + var vGlobalComas = 0; + var vGlobalComas2 = 0; + var vGlobalComment = 0; + var vGlobalCommentColor = ''; + var vGlobalFontSize = 0; + var vComas = 0; + var vMedium = false; + var vFontSize = ''; + var vColorText = layout.BodyTextColorSchema; + var vDivide = 1; + var vSymbolForNulls = layout.symbolfornulls; + var vDynamicColorBody = 'vColLib' + layout.ColorSchema; + var vDynamicColorBodyP = 'vColLib' + layout.ColorSchema + 'P'; + var vAllMetrics = layout.allmetrics; + var MetricsAffectedMatrix = JSON.parse('[' + layout.metricssemaphore + ']'); + var vColorMetric1 = layout.colorstatus1.color; + var vColorMetric2 = layout.colorstatus2.color; + var vColorMetric3 = layout.colorstatus3.color; + var vColorMetric1Text = layout.colorstatus1text.color; + var vColorMetric2Text = layout.colorstatus2text.color; + var vColorMetric3Text = layout.colorstatus3text.color; + var vColorSemaphore = ''; + var vColorSemaphoreText = ''; + var vCritic = layout.metricsstatus1; + var vMMedium = layout.metricsstatus2; + var CustomArray = new Array(); + var CustomArrayBasic = new Array(); + var vNumCustomHeaders = 0; + var vColumnText = ''; + var vColumnNum = ''; + var vMaskNum = 0; + var StyleTags = ''; + var vColorSchema = colors[vDynamicColorBody]; + var vColorSchemaP = colors[vDynamicColorBodyP]; + var vAllSemaphores = layout.allsemaphores; + var ConceptsAffectedMatrix = new Array(10); + if (vAllSemaphores == false) { + ConceptsAffectedMatrix[0] = layout.conceptsemaphore1; + ConceptsAffectedMatrix[1] = layout.conceptsemaphore2; + ConceptsAffectedMatrix[2] = layout.conceptsemaphore3; + ConceptsAffectedMatrix[3] = layout.conceptsemaphore4; + ConceptsAffectedMatrix[4] = layout.conceptsemaphore5; + ConceptsAffectedMatrix[5] = layout.conceptsemaphore6; + ConceptsAffectedMatrix[6] = layout.conceptsemaphore7; + ConceptsAffectedMatrix[7] = layout.conceptsemaphore8; + ConceptsAffectedMatrix[8] = layout.conceptsemaphore9; + ConceptsAffectedMatrix[9] = layout.conceptsemaphore10; + } + + //This function opens a csv file that contains the parameters for the custom mode + //this will prevent consuming to many dimensions, as there allowed only 10 columns between + //dimensions and metrics + function ReadCustomSchema() { + var Url = '/Extensions/PLSmartPivot/' + vCustomFile; + var Items = $.get(Url).then(function (response) { + var allTextLines = response.split(/\r\n|\n/); + var headers = allTextLines[0].split(';'); + vNumCustomHeaders = headers.length; + + for (var i = 0; i < allTextLines.length; i++) { + CustomArray[i] = new Array(headers.length); + var data = allTextLines[i].split(';'); + + if (data.length == headers.length) { + for (var j = 0; j < headers.length; j++) { + CustomArrayBasic[i] = data[0]; + CustomArray[i][j] = data[j]; + } + } + } + }); + + return Items; + } + + //Paint the numbers + function PaintTheNumbers() { + if (vNumDims == 1) { + //apply the custom style + for (var nmrows = 0; nmrows <= lastrow; nmrows++) { + vColumnText = ConceptMatrix[nmrows][0]; + vGlobalComment = 0; + vGlobalCommentColor = ''; + if (vColumnText != '-') { + StyleTags = ''; + + if (vCustomFileBool) { + vComas = 0; + vMedium = false; + vGlobalComas = 0; + vGlobalComas2 = 0; + vGlobalFontSize = 0; + var aach = 0; + var vCustomAttribute = ''; + StyleTags = ''; + for (aach = 1; aach < vNumCustomHeaders; aach++) { // for each custom attribute allocated in the external csv + if (CustomArrayBasic.indexOf(vColumnText) < 0) { + vCustomAttribute == 'none'; + } else { + vCustomAttribute = CustomArray[CustomArrayBasic.indexOf(vColumnText)][aach]; //CustomArrayBasic se ha rellenado con los atributos de look al principio de la ejecución del código + } + ApplyBold(vCustomAttribute, vComas); + vComas += vGlobalComas; + ApplyComment(vCustomAttribute, vComas); + vComas += vGlobalComas; + ApplyFontStyle(vCustomAttribute, vComas); + vComas += vGlobalComas; + ApplyBackgroundColor(vCustomAttribute, vComas); + vComas += vGlobalComas; + ApplyFontColor(vCustomAttribute, vComas); + vComas += vGlobalComas; + ApplyFontSize(vCustomAttribute, vComas); + vComas += vGlobalComas; + ApplyAlignment(vCustomAttribute, vComas); + vComas += vGlobalComas; + } + if (vGlobalFontSize == 0) { + if (vComas > 0) { + StyleTags += ';font-size:' + (14 + vLetterSize) + 'px'; + } else { + StyleTags += 'font-size:' + (14 + vLetterSize) + 'px'; + } + vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; + vGlobalFontSize = 1; + } + + // after this the row styles are configured + } else { + ApplyStandardAttributes(nmrows); + vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; + } + + if (vPadding && vGlobalComas2 == 0) { + vPaddingText = ''; + } else { + vPaddingText = ''; + } + + html += '' + vPaddingText + vColumnText + '';//';' + StyleTags + ;width:230px + if (vGlobalComment == 1) { + if (vGlobalCommentColor == '') { + vGlobalCommentColor = 'white'; + } + if (vComas > 0) { + StyleTags += ';color:' + vGlobalCommentColor; + } else { + StyleTags += 'color:' + vGlobalCommentColor; + } + } + for (var nMeasures2 = 1; nMeasures2 <= vNumMeasures; nMeasures2++) { + if (vColumnText.substring(0, 1) == '%') { + vColumnNum = ApplyPreMask('0,00%', ConceptMatrix[nmrows][nMeasures2]); + vSpecialF = '0,00%'; + } else { + switch (MeasuresFormat[nMeasures2 - 1].substr(MeasuresFormat[nMeasures2 - 1].length - 1)) { + case 'k': + vDivide = 1000; + break; + + case 'K': + vDivide = 1000; + break; + + case 'm': + vDivide = 1000000; + break; + + case 'M': + vDivide = 1000000; + break; + + default: + vDivide = 1; + break; + } + var vSpecialF = MeasuresFormat[nMeasures2 - 1].replace(/k|K|m|M/gi, ''); + if (!isNaN(ConceptMatrix[nmrows][nMeasures2])) { + vMaskNum = ConceptMatrix[nmrows][nMeasures2]; + if (vSpecialF.substring(vSpecialF.length - 1) == '%') { + vMaskNum = vMaskNum * 100; + } + switch (vSpecialF) { + case '#.##0': + vColumnNum = addSeparators((vMaskNum / vDivide), '.', ',', 0); + break; + + case '#,##0': + vColumnNum = addSeparators((vMaskNum / vDivide), ',', '.', 0); + break; + + default: + vColumnNum = ApplyPreMask(vSpecialF, (vMaskNum / vDivide)); + break; + } + } else { + vColumnNum = vSymbolForNulls; + } + } + if (vGlobalComment == 1) { + vColumnNum = '.'; + } + // apply the semaphore styles where needed + if ((vAllSemaphores || ConceptsAffectedMatrix.indexOf(vColumnText) >= 0) && (vAllMetrics || MetricsAffectedMatrix.indexOf(nMeasures2) >= 0) && !isNaN(ConceptMatrix[nmrows][nMeasures2]) && vGlobalComment == 0) { + if (ConceptMatrix[nmrows][nMeasures2] < vCritic) { + vColorSemaphore = vColorMetric1; + vColorSemaphoreText = vColorMetric1Text; + } else { + if (ConceptMatrix[nmrows][nMeasures2] < vMMedium) { + vColorSemaphore = vColorMetric2; + vColorSemaphoreText = vColorMetric2Text; + } else { + vColorSemaphore = vColorMetric3; + vColorSemaphoreText = vColorMetric3Text; + } + } + html += '' + vColumnNum + ''; + } else { + html += '' + vColumnNum + ''; + } + } + } + html += ''; + } + } else { + var nPivotRows = ConceptMatrixFirstClean.length; + for (var nmrows2 = 0; nmrows2 < nPivotRows; nmrows2++) { + vColumnText = ConceptMatrixPivot[nmrows2][0];// the descriptive account text + vGlobalComment = 0; + vGlobalCommentColor = ''; + if (vColumnText != '-') { + StyleTags = ''; + if (vCustomFileBool) { + vComas = 0; + vMedium = false; + + vGlobalComas = 0; + vGlobalComas2 = 0; + vGlobalFontSize = 0; + var aach2 = 0; + var vCustomAttribute2 = ''; + StyleTags = ''; + + for (aach2 = 1; aach2 < vNumCustomHeaders; aach2++) { // for each attribute allocated in the external csv + if (CustomArrayBasic.indexOf(vColumnText) < 0) { + vCustomAttribute2 == 'none'; + } else { + vCustomAttribute2 = CustomArray[CustomArrayBasic.indexOf(vColumnText)][aach2]; //CustomArrayBasic has been filled with the custom attribute at the begining of the code + } + ApplyBold(vCustomAttribute2, vComas); + vComas += vGlobalComas; + ApplyComment(vCustomAttribute2, vComas); + vComas += vGlobalComas; + ApplyFontStyle(vCustomAttribute2, vComas); + vComas += vGlobalComas; + ApplyBackgroundColor(vCustomAttribute2, vComas); + vComas += vGlobalComas; + ApplyFontColor(vCustomAttribute2, vComas); + vComas += vGlobalComas; + ApplyFontSize(vCustomAttribute2, vComas); + vComas += vGlobalComas; + ApplyAlignment(vCustomAttribute2, vComas); + vComas += vGlobalComas; + } + if (vGlobalFontSize == 0) { + if (vComas > 0) { + StyleTags += ';font-size:' + (14 + vLetterSize) + 'px'; + } else { + StyleTags += 'font-size:' + (14 + vLetterSize) + 'px'; + } + vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; + vGlobalFontSize = 1; + } + + // custom styles configured + } else { + ApplyStandardAttributes(nmrows2); + vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; + } + + if (vPadding && vGlobalComas2 == 0) { + vPaddingText = ''; + } else { + vPaddingText = ''; + } + html += '' + vPaddingText + vColumnText + ''; + if (vGlobalComment == 1) { + if (vGlobalCommentColor == '') { + vGlobalCommentColor = 'white'; + } + if (vComas > 0) { + StyleTags += ';color:' + vGlobalCommentColor; + } else { + StyleTags += 'color:' + vGlobalCommentColor; + } + } + var nMeasure7 = 0; + var nMeasure72 = -1; + var nMeasure72Semaphore = 0; + + for (var nMeasures22 = 1; nMeasures22 <= vNumMeasures2; nMeasures22++) { + nMeasAux = nMeasure72Semaphore; + nMeasure7++; + nMeasure72++; + if (vColumnText.substring(0, 1) == '%') { + vColumnNum = ApplyPreMask('0,00%', ConceptMatrixPivot[nmrows2][nMeasures22]); + var vSpecialF = '0,00%'; + } else { + switch (MeasuresFormat[nMeasure72].substr(MeasuresFormat[nMeasure72].length - 1)) { + case 'k': + vDivide = 1000; + break; + + case 'K': + vDivide = 1000; + break; + + case 'm': + vDivide = 1000000; + break; + + case 'M': + vDivide = 1000000; + break; + + default: + vDivide = 1; + break; + } + var vSpecialF = MeasuresFormat[nMeasure72].replace(/k|K|m|M/gi, ''); + if (!isNaN(ConceptMatrixPivot[nmrows2][nMeasures22])) { + vMaskNum = ConceptMatrixPivot[nmrows2][nMeasures22]; + if (vSpecialF.substring(vSpecialF.length - 1) == '%') { + vMaskNum = vMaskNum * 100; + } + + switch (vSpecialF) { + case '#.##0': + vColumnNum = addSeparators((vMaskNum / vDivide), '.', ',', 0); + break; + case '#,##0': + vColumnNum = addSeparators((vMaskNum / vDivide), ',', '.', 0); + break; + default: + vColumnNum = ApplyPreMask(vSpecialF, (vMaskNum / vDivide)); + break; + } + } else { + vColumnNum = vSymbolForNulls; + } + } + + if (vSeparatorCols && nMeasure7 == (measure_count + 1)) { + html += '' + '*' + ''; + nMeasure7 = 1; + } + if (nMeasure72 == (measure_count - 1)) { + nMeasure72 = -1; + nMeasure72Semaphore = measure_count; + } else { + nMeasure72Semaphore = nMeasure72 + 1; + } + + // apply the semaphores where needed + if (vGlobalComment == 1) { + vColumnNum = '.'; + } + if ((vAllSemaphores || ConceptsAffectedMatrix.indexOf(vColumnText) >= 0) && (vAllMetrics || MetricsAffectedMatrix.indexOf(nMeasure72Semaphore) >= 0) && !isNaN(ConceptMatrixPivot[nmrows2][nMeasures22]) && vGlobalComment == 0) { + if (ConceptMatrixPivot[nmrows2][nMeasures22] < vCritic) { + vColorSemaphore = vColorMetric1; + vColorSemaphoreText = vColorMetric1Text; + } else { + if (ConceptMatrixPivot[nmrows2][nMeasures22] < vMMedium) { + vColorSemaphore = vColorMetric2; + vColorSemaphoreText = vColorMetric2Text; + } else { + vColorSemaphore = vColorMetric3; + vColorSemaphoreText = vColorMetric3Text; + } + } + + if (vSpecialF.substring(vSpecialF.length - 1) == '%' && vNumMeasures > 1) { + html += '' + vColumnNum + ''; + } else { + html += '' + vColumnNum + ''; + } + } else { + if (vSpecialF.substring(vSpecialF.length - 1) == '%' && vNumMeasures > 1) { + html += '' + vColumnNum + ''; + } else { + html += '' + vColumnNum + ''; + } + } + } + html += ''; + } + } + } + } + + // PYJAMAS + function ApplyStandardAttributes(strow) { + if (strow / 2 == Math.round(strow / 2)) { + StyleTags += 'background-color:' + vColorSchema + ';color:' + vColorText; + } else { + StyleTags += 'background-color:' + vColorSchemaP + ';color:' + vColorText; + } + StyleTags += ';font-size:' + (14 + vLetterSize) + 'px'; + } + + // transform the custom styles in html code + function ApplyBold(vCustomAttributes, vCustomComas) { + var vPuntoComa = ''; + if (vCustomComas > 0) { + vPuntoComa = ';'; + } + switch (vCustomAttributes) { + case '': + StyleTags += vPuntoComa + 'font-weight:bold'; + vGlobalComas = 1; + vGlobalComas2 = 1; + break; + + default: + StyleTags += ''; + break; + } + } + function ApplyComment(vCustomAttributes) { + switch (vCustomAttributes) { + case '': + vGlobalComment = 1; + break; + + default: + StyleTags += ''; + break; + } + } + function ApplyFontStyle(vCustomAttributes, vCustomComas) { + var vPuntoComa = ''; + if (vCustomComas > 0) { + vPuntoComa = ';'; + } + switch (vCustomAttributes) { + case '': + StyleTags += vPuntoComa + 'font-style:italic'; + vGlobalComas = 1; + vGlobalComas2 = 1; + break; + + case '': + StyleTags += vPuntoComa + 'font-style:oblique'; + vGlobalComas = 1; + vGlobalComas2 = 1; + break; + + default: + StyleTags += ''; + break; + } + } + function ApplyBackgroundColor(vCustomAttributes, vCustomComas) { + var vPuntoComa = ''; + if (vCustomComas > 0) { + vPuntoComa = ';'; + } + switch (vCustomAttributes) { + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibDark; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibDark; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibNight; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibNight; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibSoft; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibSoft; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibRed; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibRed; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibOrange; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibOrange; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibViolete; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibViolete; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibBlue; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibBlue; + break; + + case '': + StyleTags += vPuntoComa + 'background-color:' + colors.vColLibGreen; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = colors.vColLibGreen; + break; + + default: + if (vCustomAttributes.substring(0, 1) == '#' || vCustomAttributes.substring(0, 3).toUpperCase() == 'RGB') { + StyleTags += vPuntoComa + 'background-color:' + vCustomAttributes; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalCommentColor = vCustomAttributes; + } + break; + } + } + function ApplyFontColor(vCustomAttributes, vCustomComas) { + var vPuntoComa = ''; + if (vCustomComas > 0) { + vPuntoComa = ';'; + } + if (vCustomAttributes === '' && vGlobalComment == 0) { + StyleTags += vPuntoComa + 'color:white'; + vGlobalComas = 1; + vGlobalComas2 = 1; + } + } + function ApplyFontSize(vCustomAttributes, vCustomComas) { + var vPuntoComa = ''; + if (vCustomComas > 0) { + vPuntoComa = ';'; + } + switch (vCustomAttributes) { + case '': + StyleTags += vPuntoComa + 'font-size:' + (15 + vLetterSize) + 'px'; + vFontSize = ';font-size:' + (15 + vLetterSize) + 'px'; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalFontSize = 1; + break; + + case '': + StyleTags += vPuntoComa + 'font-size:' + (14 + vLetterSize) + 'px'; + vFontSize = ';font-size:' + (14 + vLetterSize) + 'px'; + vGlobalComas = 1; + vMedium == true; + vGlobalFontSize = 1; + break; + + case '': + StyleTags += vPuntoComa + 'font-size:' + (13 + vLetterSize) + 'px'; + vFontSize = ';font-size:' + (13 + vLetterSize) + 'px'; + vGlobalComas = 1; + vGlobalComas2 = 1; + vGlobalFontSize = 1; + break; + + default: + StyleTags += ''; + break; + } + } + function ApplyAlignment(vCustomAttributes, vCustomComas) { + var vPuntoComa = ''; + if (vCustomComas > 0) { + vPuntoComa = ';'; + } + switch (vCustomAttributes) { + case '
': + StyleTags += vPuntoComa + 'text-align:center'; + vGlobalComas = 1; + vGlobalComas2 = 1; + break; + + default: + StyleTags += ''; + break; + } + } + + const deferred = new Deferred(); + let html = "
"; + + const schemaPromise = (vCustomFileBool && vCustomFile.length > 4) ? ReadCustomSchema() : Promise.resolve(); + schemaPromise.then(() => { + PaintTheNumbers(); + html += '
'; + html += '
'; + deferred.resolve(html); + }); + + return deferred.promise; // should be promise +} diff --git a/src/utilities.js b/src/utilities.js index df233f3..81c97e5 100644 --- a/src/utilities.js +++ b/src/utilities.js @@ -14,3 +14,10 @@ export function addSeparators(nStr, thousandsSep, decimalSep, numDecimals) { } return x1 + x2; } + +export function Deferred () { + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); +}