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 += '| ' + vColumnText + ' | ';
- 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 += '
';
- }
- }
- }
- }
//render data
function RenderData() {
- html += '
';
- 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;
+ });
+}