@dhis2/analytics 26.8.6 → 26.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/__demo__/SingleValue.stories.js +706 -0
- package/build/cjs/components/PivotTable/PivotTableValueCell.js +6 -2
- package/build/cjs/components/PivotTable/styles/PivotTable.style.js +2 -2
- package/build/cjs/locales/en/translations.json +2 -0
- package/build/cjs/locales/lo/translations.json +16 -12
- package/build/cjs/modules/pivotTable/PivotTableEngine.js +59 -24
- package/build/cjs/modules/pivotTable/pivotTableConstants.js +6 -2
- package/build/cjs/modules/valueTypes.js +4 -1
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/chart/default.js +26 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/chart/index.js +18 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/chart/singleValue.js +19 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/index.js +36 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueBackgroundColor.js +12 -0
- package/build/cjs/visualizations/config/adapters/{dhis_dhis/value/index.js → dhis_highcharts/customSVGOptions/singleValue/getSingleValueFormattedValue.js} +8 -6
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueLegendColor.js +11 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueSubtext.js +11 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueTextColor.js +20 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueTitleColor.js +26 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/index.js +31 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/index.js +24 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/index.js +18 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/addIconElement.js +34 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/checkIfFitsWithinContainer.js +19 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/computeLayoutRect.js +39 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/computeSpacingTop.js +21 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/constants.js +11 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/getAvailableSpace.js +14 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/index.js +48 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/positionElements.js +46 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/styles.js +109 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/exporting.js +30 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/index.js +33 -23
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/lang.js +17 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/plotOptions.js +1 -1
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/series/index.js +5 -1
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/subtitle/__tests__/singleValue.spec.js +62 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/subtitle/index.js +56 -22
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/subtitle/singleValue.js +27 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/title/__tests__/singleValue.spec.js +44 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/title/index.js +50 -22
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/title/singleValue.js +31 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/type.js +2 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/xAxis/index.js +1 -0
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/yAxis/index.js +4 -5
- package/build/cjs/visualizations/config/adapters/index.js +2 -4
- package/build/cjs/visualizations/config/generators/highcharts/index.js +8 -0
- package/build/cjs/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/index.js +13 -0
- package/build/cjs/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/nonASCIIFont.js +17 -0
- package/build/cjs/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/textShadow.js +289 -0
- package/build/cjs/visualizations/config/generators/index.js +2 -4
- package/build/cjs/visualizations/store/adapters/dhis_highcharts/index.js +3 -0
- package/build/cjs/visualizations/store/adapters/dhis_highcharts/singleValue.js +10 -0
- package/build/cjs/visualizations/store/adapters/index.js +2 -4
- package/build/cjs/visualizations/util/shouldUseContrastColor.js +24 -0
- package/build/es/__demo__/SingleValue.stories.js +702 -0
- package/build/es/components/PivotTable/PivotTableValueCell.js +6 -2
- package/build/es/components/PivotTable/styles/PivotTable.style.js +2 -2
- package/build/es/locales/en/translations.json +2 -0
- package/build/es/locales/lo/translations.json +16 -12
- package/build/es/modules/pivotTable/PivotTableEngine.js +61 -26
- package/build/es/modules/pivotTable/pivotTableConstants.js +4 -1
- package/build/es/modules/valueTypes.js +2 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/chart/default.js +19 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/chart/index.js +11 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/chart/singleValue.js +12 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/index.js +29 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueBackgroundColor.js +6 -0
- package/build/es/visualizations/config/adapters/{dhis_dhis/value/index.js → dhis_highcharts/customSVGOptions/singleValue/getSingleValueFormattedValue.js} +4 -4
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueLegendColor.js +5 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueSubtext.js +5 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueTextColor.js +14 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/getSingleValueTitleColor.js +20 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/customSVGOptions/singleValue/index.js +25 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/index.js +16 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/index.js +11 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/addIconElement.js +28 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/checkIfFitsWithinContainer.js +13 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/computeLayoutRect.js +33 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/computeSpacingTop.js +15 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/constants.js +4 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/getAvailableSpace.js +8 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/index.js +42 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/positionElements.js +40 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/events/loadCustomSVG/singleValue/styles.js +101 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/exporting.js +23 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/index.js +23 -13
- package/build/es/visualizations/config/adapters/dhis_highcharts/lang.js +11 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/plotOptions.js +1 -1
- package/build/es/visualizations/config/adapters/dhis_highcharts/series/index.js +6 -2
- package/build/es/visualizations/config/adapters/dhis_highcharts/subtitle/__tests__/singleValue.spec.js +59 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/subtitle/index.js +56 -24
- package/build/es/visualizations/config/adapters/dhis_highcharts/subtitle/singleValue.js +14 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/title/__tests__/singleValue.spec.js +42 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/title/index.js +52 -24
- package/build/es/visualizations/config/adapters/dhis_highcharts/title/singleValue.js +18 -0
- package/build/es/visualizations/config/adapters/dhis_highcharts/type.js +3 -1
- package/build/es/visualizations/config/adapters/dhis_highcharts/xAxis/index.js +2 -1
- package/build/es/visualizations/config/adapters/dhis_highcharts/yAxis/index.js +5 -6
- package/build/es/visualizations/config/adapters/index.js +1 -3
- package/build/es/visualizations/config/generators/highcharts/index.js +8 -0
- package/build/es/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/index.js +6 -0
- package/build/es/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/nonASCIIFont.js +11 -0
- package/build/es/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/textShadow.js +283 -0
- package/build/es/visualizations/config/generators/index.js +1 -3
- package/build/es/visualizations/store/adapters/dhis_highcharts/index.js +4 -1
- package/build/es/visualizations/store/adapters/dhis_highcharts/singleValue.js +4 -0
- package/build/es/visualizations/store/adapters/index.js +1 -3
- package/build/es/visualizations/util/shouldUseContrastColor.js +17 -0
- package/package.json +1 -2
- package/build/cjs/visualizations/config/adapters/dhis_dhis/index.js +0 -39
- package/build/cjs/visualizations/config/adapters/dhis_dhis/subtitle/__tests__/index.spec.js +0 -49
- package/build/cjs/visualizations/config/adapters/dhis_dhis/subtitle/__tests__/singleValue.spec.js +0 -15
- package/build/cjs/visualizations/config/adapters/dhis_dhis/subtitle/index.js +0 -34
- package/build/cjs/visualizations/config/adapters/dhis_dhis/subtitle/singleValue.js +0 -11
- package/build/cjs/visualizations/config/adapters/dhis_dhis/title/__tests__/index.spec.js +0 -39
- package/build/cjs/visualizations/config/adapters/dhis_dhis/title/__tests__/singleValue.spec.js +0 -17
- package/build/cjs/visualizations/config/adapters/dhis_dhis/title/index.js +0 -31
- package/build/cjs/visualizations/config/adapters/dhis_dhis/title/singleValue.js +0 -18
- package/build/cjs/visualizations/config/adapters/dhis_dhis/type.js +0 -19
- package/build/cjs/visualizations/config/adapters/dhis_highcharts/chart.js +0 -39
- package/build/cjs/visualizations/config/generators/dhis/index.js +0 -28
- package/build/cjs/visualizations/config/generators/dhis/singleValue.js +0 -359
- package/build/cjs/visualizations/store/adapters/dhis_dhis/index.js +0 -83
- package/build/cjs/visualizations/store/adapters/dhis_dhis/singleValue.js +0 -10
- package/build/es/visualizations/config/adapters/dhis_dhis/index.js +0 -30
- package/build/es/visualizations/config/adapters/dhis_dhis/subtitle/__tests__/index.spec.js +0 -46
- package/build/es/visualizations/config/adapters/dhis_dhis/subtitle/__tests__/singleValue.spec.js +0 -12
- package/build/es/visualizations/config/adapters/dhis_dhis/subtitle/index.js +0 -27
- package/build/es/visualizations/config/adapters/dhis_dhis/subtitle/singleValue.js +0 -4
- package/build/es/visualizations/config/adapters/dhis_dhis/title/__tests__/index.spec.js +0 -36
- package/build/es/visualizations/config/adapters/dhis_dhis/title/__tests__/singleValue.spec.js +0 -14
- package/build/es/visualizations/config/adapters/dhis_dhis/title/index.js +0 -24
- package/build/es/visualizations/config/adapters/dhis_dhis/title/singleValue.js +0 -11
- package/build/es/visualizations/config/adapters/dhis_dhis/type.js +0 -13
- package/build/es/visualizations/config/adapters/dhis_highcharts/chart.js +0 -32
- package/build/es/visualizations/config/generators/dhis/index.js +0 -21
- package/build/es/visualizations/config/generators/dhis/singleValue.js +0 -353
- package/build/es/visualizations/store/adapters/dhis_dhis/index.js +0 -76
- package/build/es/visualizations/store/adapters/dhis_dhis/singleValue.js +0 -4
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import isString from 'd2-utilizr/lib/isString';
|
|
2
|
-
import { FONT_STYLE_OPTION_ITALIC, FONT_STYLE_OPTION_BOLD, FONT_STYLE_OPTION_TEXT_COLOR, FONT_STYLE_OPTION_FONT_SIZE, FONT_STYLE_OPTION_TEXT_ALIGN, FONT_STYLE_VISUALIZATION_TITLE, mergeFontStyleWithDefault } from '../../../../../modules/fontStyle.js';
|
|
3
|
-
import { VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_GAUGE, isVerticalType, VIS_TYPE_SCATTER } from '../../../../../modules/visTypes.js';
|
|
2
|
+
import { FONT_STYLE_OPTION_ITALIC, FONT_STYLE_OPTION_BOLD, FONT_STYLE_OPTION_TEXT_COLOR, FONT_STYLE_OPTION_FONT_SIZE, FONT_STYLE_OPTION_TEXT_ALIGN, FONT_STYLE_VISUALIZATION_TITLE, mergeFontStyleWithDefault, defaultFontStyle } from '../../../../../modules/fontStyle.js';
|
|
3
|
+
import { VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_GAUGE, isVerticalType, VIS_TYPE_SCATTER, VIS_TYPE_SINGLE_VALUE } from '../../../../../modules/visTypes.js';
|
|
4
4
|
import getFilterText from '../../../../util/getFilterText.js';
|
|
5
5
|
import { getTextAlignOption } from '../getTextAlignOption.js';
|
|
6
6
|
import getScatterTitle from './scatter.js';
|
|
7
|
+
import { getSingleValueTitleColor, getSingleValueTitleText } from './singleValue.js';
|
|
7
8
|
import getYearOverYearTitle from './yearOverYear.js';
|
|
8
9
|
const DASHBOARD_TITLE_STYLE = {
|
|
9
10
|
margin: 15,
|
|
@@ -23,19 +24,41 @@ function getDefault(layout, metaData, dashboard) {
|
|
|
23
24
|
}
|
|
24
25
|
return null;
|
|
25
26
|
}
|
|
26
|
-
export default function (layout, metaData,
|
|
27
|
-
const fontStyle = mergeFontStyleWithDefault(layout.fontStyle && layout.fontStyle[FONT_STYLE_VISUALIZATION_TITLE], FONT_STYLE_VISUALIZATION_TITLE);
|
|
28
|
-
const title = {
|
|
29
|
-
text: undefined
|
|
30
|
-
};
|
|
27
|
+
export default function (layout, metaData, extraOptions, series) {
|
|
31
28
|
if (layout.hideTitle) {
|
|
32
|
-
return
|
|
29
|
+
return {
|
|
30
|
+
text: undefined
|
|
31
|
+
};
|
|
33
32
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const {
|
|
34
|
+
dashboard,
|
|
35
|
+
legendSets
|
|
36
|
+
} = extraOptions;
|
|
37
|
+
const legendOptions = layout.legend;
|
|
38
|
+
const fontStyle = mergeFontStyleWithDefault(layout.fontStyle && layout.fontStyle[FONT_STYLE_VISUALIZATION_TITLE], FONT_STYLE_VISUALIZATION_TITLE);
|
|
39
|
+
const title = Object.assign({
|
|
40
|
+
text: undefined
|
|
41
|
+
}, dashboard ? DASHBOARD_TITLE_STYLE : {
|
|
42
|
+
margin: 30,
|
|
43
|
+
align: getTextAlignOption(fontStyle[FONT_STYLE_OPTION_TEXT_ALIGN], FONT_STYLE_VISUALIZATION_TITLE, isVerticalType(layout.type)),
|
|
44
|
+
style: {
|
|
45
|
+
color: undefined,
|
|
46
|
+
fontSize: `${fontStyle[FONT_STYLE_OPTION_FONT_SIZE]}px`,
|
|
47
|
+
fontWeight: fontStyle[FONT_STYLE_OPTION_BOLD] ? FONT_STYLE_OPTION_BOLD : 'normal',
|
|
48
|
+
fontStyle: fontStyle[FONT_STYLE_OPTION_ITALIC] ? FONT_STYLE_OPTION_ITALIC : 'normal',
|
|
49
|
+
whiteSpace: 'nowrap',
|
|
50
|
+
overflow: 'hidden',
|
|
51
|
+
textOverflow: 'ellipsis'
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const customTitleText = layout.title && layout.displayTitle || layout.title;
|
|
55
|
+
if (isString(customTitleText) && customTitleText.length) {
|
|
56
|
+
title.text = customTitleText;
|
|
37
57
|
} else {
|
|
38
58
|
switch (layout.type) {
|
|
59
|
+
case VIS_TYPE_SINGLE_VALUE:
|
|
60
|
+
title.text = getSingleValueTitleText(layout, metaData, dashboard);
|
|
61
|
+
break;
|
|
39
62
|
case VIS_TYPE_GAUGE:
|
|
40
63
|
case VIS_TYPE_YEAR_OVER_YEAR_LINE:
|
|
41
64
|
case VIS_TYPE_YEAR_OVER_YEAR_COLUMN:
|
|
@@ -49,17 +72,22 @@ export default function (layout, metaData, dashboard) {
|
|
|
49
72
|
break;
|
|
50
73
|
}
|
|
51
74
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
75
|
+
switch (layout.type) {
|
|
76
|
+
case VIS_TYPE_SINGLE_VALUE:
|
|
77
|
+
{
|
|
78
|
+
var _defaultFontStyle$FON, _layout$fontStyle, _layout$fontStyle$FON;
|
|
79
|
+
const defaultColor = defaultFontStyle === null || defaultFontStyle === void 0 ? void 0 : (_defaultFontStyle$FON = defaultFontStyle[FONT_STYLE_VISUALIZATION_TITLE]) === null || _defaultFontStyle$FON === void 0 ? void 0 : _defaultFontStyle$FON[FONT_STYLE_OPTION_TEXT_COLOR];
|
|
80
|
+
const customColor = layout === null || layout === void 0 ? void 0 : (_layout$fontStyle = layout.fontStyle) === null || _layout$fontStyle === void 0 ? void 0 : (_layout$fontStyle$FON = _layout$fontStyle[FONT_STYLE_VISUALIZATION_TITLE]) === null || _layout$fontStyle$FON === void 0 ? void 0 : _layout$fontStyle$FON[FONT_STYLE_OPTION_TEXT_COLOR];
|
|
81
|
+
title.style.color = getSingleValueTitleColor(customColor, defaultColor, series[0], legendOptions, legendSets);
|
|
82
|
+
if (dashboard) {
|
|
83
|
+
// TODO: is this always what we want?
|
|
84
|
+
title.style.fontWeight = 'normal';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
title.style.color = fontStyle[FONT_STYLE_OPTION_TEXT_COLOR];
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
return title;
|
|
65
93
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import getFilterText from '../../../../util/getFilterText.js';
|
|
2
|
+
export { getSingleValueTitleColor } from '../customSVGOptions/singleValue/getSingleValueTitleColor.js';
|
|
3
|
+
export function getSingleValueTitleText(layout, metaData) {
|
|
4
|
+
if (layout.hideTitle) {
|
|
5
|
+
return '';
|
|
6
|
+
}
|
|
7
|
+
if (typeof layout.title === 'string' && layout.title.length) {
|
|
8
|
+
return layout.title;
|
|
9
|
+
}
|
|
10
|
+
if (layout.columns) {
|
|
11
|
+
const firstItem = layout.columns[0].items[0];
|
|
12
|
+
const column = Object.assign({}, layout.columns[0], {
|
|
13
|
+
items: [firstItem]
|
|
14
|
+
});
|
|
15
|
+
return getFilterText([column], metaData);
|
|
16
|
+
}
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VIS_TYPE_BAR, VIS_TYPE_STACKED_BAR, VIS_TYPE_LINE, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_AREA, VIS_TYPE_STACKED_AREA, VIS_TYPE_PIE, VIS_TYPE_RADAR, VIS_TYPE_GAUGE, VIS_TYPE_COLUMN, VIS_TYPE_STACKED_COLUMN, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_SCATTER } from '../../../../modules/visTypes.js';
|
|
1
|
+
import { VIS_TYPE_BAR, VIS_TYPE_STACKED_BAR, VIS_TYPE_LINE, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_AREA, VIS_TYPE_STACKED_AREA, VIS_TYPE_PIE, VIS_TYPE_RADAR, VIS_TYPE_GAUGE, VIS_TYPE_COLUMN, VIS_TYPE_STACKED_COLUMN, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_SCATTER, VIS_TYPE_SINGLE_VALUE } from '../../../../modules/visTypes.js';
|
|
2
2
|
export default function (type) {
|
|
3
3
|
switch (type) {
|
|
4
4
|
case VIS_TYPE_BAR:
|
|
@@ -34,6 +34,8 @@ export default function (type) {
|
|
|
34
34
|
type: 'scatter',
|
|
35
35
|
zoomType: 'xy'
|
|
36
36
|
};
|
|
37
|
+
case VIS_TYPE_SINGLE_VALUE:
|
|
38
|
+
return {};
|
|
37
39
|
case VIS_TYPE_COLUMN:
|
|
38
40
|
case VIS_TYPE_STACKED_COLUMN:
|
|
39
41
|
case VIS_TYPE_YEAR_OVER_YEAR_COLUMN:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import objectClean from 'd2-utilizr/lib/objectClean';
|
|
2
2
|
import { FONT_STYLE_HORIZONTAL_AXIS_TITLE, FONT_STYLE_AXIS_LABELS, FONT_STYLE_OPTION_TEXT_COLOR, FONT_STYLE_OPTION_FONT_SIZE, FONT_STYLE_OPTION_BOLD, FONT_STYLE_OPTION_ITALIC, mergeFontStyleWithDefault } from '../../../../../modules/fontStyle.js';
|
|
3
|
-
import { VIS_TYPE_GAUGE, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_PIE, VIS_TYPE_RADAR, VIS_TYPE_SCATTER, isTwoCategoryChartType } from '../../../../../modules/visTypes.js';
|
|
3
|
+
import { VIS_TYPE_GAUGE, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_PIE, VIS_TYPE_RADAR, VIS_TYPE_SCATTER, isTwoCategoryChartType, VIS_TYPE_SINGLE_VALUE } from '../../../../../modules/visTypes.js';
|
|
4
4
|
import { getAxis } from '../../../../util/axes.js';
|
|
5
5
|
import getAxisTitle from '../getAxisTitle.js';
|
|
6
6
|
import getCategories from '../getCategories.js';
|
|
@@ -44,6 +44,7 @@ export default function (store, layout, extraOptions, series) {
|
|
|
44
44
|
switch (layout.type) {
|
|
45
45
|
case VIS_TYPE_PIE:
|
|
46
46
|
case VIS_TYPE_GAUGE:
|
|
47
|
+
case VIS_TYPE_SINGLE_VALUE:
|
|
47
48
|
xAxis = noAxis();
|
|
48
49
|
break;
|
|
49
50
|
case VIS_TYPE_YEAR_OVER_YEAR_LINE:
|
|
@@ -2,7 +2,7 @@ import arrayClean from 'd2-utilizr/lib/arrayClean';
|
|
|
2
2
|
import objectClean from 'd2-utilizr/lib/objectClean';
|
|
3
3
|
import i18n from '../../../../../locales/index.js';
|
|
4
4
|
import { FONT_STYLE_VERTICAL_AXIS_TITLE, mergeFontStyleWithDefault, TEXT_ALIGN_RIGHT } from '../../../../../modules/fontStyle.js';
|
|
5
|
-
import { isDualAxisType, isStacked, VIS_TYPE_GAUGE, VIS_TYPE_SCATTER } from '../../../../../modules/visTypes.js';
|
|
5
|
+
import { isDualAxisType, isStacked, VIS_TYPE_GAUGE, VIS_TYPE_SCATTER, VIS_TYPE_SINGLE_VALUE } from '../../../../../modules/visTypes.js';
|
|
6
6
|
import { getAxis } from '../../../../util/axes.js';
|
|
7
7
|
import { getAxisStringFromId } from '../../../../util/axisId.js';
|
|
8
8
|
import { getGridLineColor, getLabels, getMaxValue, getMinValue, getRegressionLine } from '../axis.js';
|
|
@@ -100,13 +100,12 @@ function getDefault(layout, series, extraOptions) {
|
|
|
100
100
|
return axes;
|
|
101
101
|
}
|
|
102
102
|
export default function (layout, series, extraOptions) {
|
|
103
|
-
let yAxis;
|
|
104
103
|
switch (layout.type) {
|
|
104
|
+
case VIS_TYPE_SINGLE_VALUE:
|
|
105
|
+
return null;
|
|
105
106
|
case VIS_TYPE_GAUGE:
|
|
106
|
-
|
|
107
|
-
break;
|
|
107
|
+
return getGauge(layout, series, extraOptions.legendSets[0]);
|
|
108
108
|
default:
|
|
109
|
-
|
|
109
|
+
return getDefault(layout, series, extraOptions);
|
|
110
110
|
}
|
|
111
|
-
return yAxis;
|
|
112
111
|
}
|
|
@@ -3,16 +3,24 @@ import HM from 'highcharts/highcharts-more';
|
|
|
3
3
|
import HB from 'highcharts/modules/boost';
|
|
4
4
|
import HE from 'highcharts/modules/exporting';
|
|
5
5
|
import HNDTD from 'highcharts/modules/no-data-to-display';
|
|
6
|
+
import HOE from 'highcharts/modules/offline-exporting';
|
|
6
7
|
import HPF from 'highcharts/modules/pattern-fill';
|
|
7
8
|
import HSG from 'highcharts/modules/solid-gauge';
|
|
9
|
+
import PEBFP from './pdfExportBugFixPlugin/index.js';
|
|
8
10
|
|
|
9
11
|
// apply
|
|
10
12
|
HM(H);
|
|
11
13
|
HSG(H);
|
|
12
14
|
HNDTD(H);
|
|
13
15
|
HE(H);
|
|
16
|
+
HOE(H);
|
|
14
17
|
HPF(H);
|
|
15
18
|
HB(H);
|
|
19
|
+
PEBFP(H);
|
|
20
|
+
|
|
21
|
+
/* Whitelist some additional SVG attributes here. Without this,
|
|
22
|
+
* the PDF export for the SingleValue visualization breaks. */
|
|
23
|
+
H.AST.allowedAttributes.push('fill-rule', 'clip-rule');
|
|
16
24
|
function drawLegendSymbolWrap() {
|
|
17
25
|
const pick = H.pick;
|
|
18
26
|
H.wrap(H.seriesTypes.column.prototype, 'drawLegendSymbol', function (proceed, legend, item) {
|
package/build/es/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/nonASCIIFont.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* This is a workaround for https://github.com/highcharts/highcharts/issues/22008
|
|
2
|
+
* We add some transparent text in a non-ASCII script to the chart to prevent
|
|
3
|
+
* the chart from being exported in a serif font */
|
|
4
|
+
|
|
5
|
+
export default function (H) {
|
|
6
|
+
H.addEvent(H.Chart, 'load', function () {
|
|
7
|
+
this.renderer.text('모', 20, 20).attr({
|
|
8
|
+
opacity: 0
|
|
9
|
+
}).add();
|
|
10
|
+
});
|
|
11
|
+
}
|
package/build/es/visualizations/config/generators/highcharts/pdfExportBugFixPlugin/textShadow.js
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/* This plugin was provided by HighCharts support and resolves an issue with label
|
|
2
|
+
* text that has a white outline, such as the one we use for stacked bar charts.
|
|
3
|
+
* For example: "ANC: 1-4 visits by districts this year (stacked)"
|
|
4
|
+
* This issue has actually been resolved in HighCharts v11, so once we have upgraded
|
|
5
|
+
* to that version, this plugin can be removed. */
|
|
6
|
+
|
|
7
|
+
export default function (H) {
|
|
8
|
+
const {
|
|
9
|
+
AST,
|
|
10
|
+
defaultOptions,
|
|
11
|
+
downloadURL
|
|
12
|
+
} = H,
|
|
13
|
+
{
|
|
14
|
+
ajax
|
|
15
|
+
} = H.HttpUtilities,
|
|
16
|
+
doc = document,
|
|
17
|
+
win = window,
|
|
18
|
+
OfflineExporting = H._modules['Extensions/OfflineExporting/OfflineExporting.js'],
|
|
19
|
+
{
|
|
20
|
+
getScript,
|
|
21
|
+
svgToPdf,
|
|
22
|
+
imageToDataUrl,
|
|
23
|
+
svgToDataUrl
|
|
24
|
+
} = OfflineExporting;
|
|
25
|
+
H.wrap(OfflineExporting, 'downloadSVGLocal', function (proceed, svg, options, failCallback, successCallback) {
|
|
26
|
+
var dummySVGContainer = doc.createElement('div'),
|
|
27
|
+
imageType = options.type || 'image/png',
|
|
28
|
+
filename = (options.filename || 'chart') + '.' + (imageType === 'image/svg+xml' ? 'svg' : imageType.split('/')[1]),
|
|
29
|
+
scale = options.scale || 1;
|
|
30
|
+
var svgurl,
|
|
31
|
+
blob,
|
|
32
|
+
finallyHandler,
|
|
33
|
+
libURL = options.libURL || defaultOptions.exporting.libURL,
|
|
34
|
+
objectURLRevoke = true,
|
|
35
|
+
pdfFont = options.pdfFont;
|
|
36
|
+
// Allow libURL to end with or without fordward slash
|
|
37
|
+
libURL = libURL.slice(-1) !== '/' ? libURL + '/' : libURL;
|
|
38
|
+
/*
|
|
39
|
+
* Detect if we need to load TTF fonts for the PDF, then load them and
|
|
40
|
+
* proceed.
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
var loadPdfFonts = function (svgElement, callback) {
|
|
45
|
+
var hasNonASCII = function (s) {
|
|
46
|
+
return (
|
|
47
|
+
// eslint-disable-next-line no-control-regex
|
|
48
|
+
/[^\u0000-\u007F\u200B]+/.test(s)
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
// Register an event in order to add the font once jsPDF is
|
|
52
|
+
// initialized
|
|
53
|
+
var addFont = function (variant, base64) {
|
|
54
|
+
win.jspdf.jsPDF.API.events.push(['initialized', function () {
|
|
55
|
+
this.addFileToVFS(variant, base64);
|
|
56
|
+
this.addFont(variant, 'HighchartsFont', variant);
|
|
57
|
+
if (!this.getFontList().HighchartsFont) {
|
|
58
|
+
this.setFont('HighchartsFont');
|
|
59
|
+
}
|
|
60
|
+
}]);
|
|
61
|
+
};
|
|
62
|
+
// If there are no non-ASCII characters in the SVG, do not use
|
|
63
|
+
// bother downloading the font files
|
|
64
|
+
if (pdfFont && !hasNonASCII(svgElement.textContent || '')) {
|
|
65
|
+
pdfFont = void 0;
|
|
66
|
+
}
|
|
67
|
+
// Add new font if the URL is declared, #6417.
|
|
68
|
+
var variants = ['normal', 'italic', 'bold', 'bolditalic'];
|
|
69
|
+
// Shift the first element off the variants and add as a font.
|
|
70
|
+
// Then asynchronously trigger the next variant until calling the
|
|
71
|
+
// callback when the variants are empty.
|
|
72
|
+
var normalBase64;
|
|
73
|
+
var shiftAndLoadVariant = function () {
|
|
74
|
+
var variant = variants.shift();
|
|
75
|
+
// All variants shifted and possibly loaded, proceed
|
|
76
|
+
if (!variant) {
|
|
77
|
+
return callback();
|
|
78
|
+
}
|
|
79
|
+
var url = pdfFont && pdfFont[variant];
|
|
80
|
+
if (url) {
|
|
81
|
+
ajax({
|
|
82
|
+
url: url,
|
|
83
|
+
responseType: 'blob',
|
|
84
|
+
success: function (data, xhr) {
|
|
85
|
+
var reader = new FileReader();
|
|
86
|
+
reader.onloadend = function () {
|
|
87
|
+
if (typeof this.result === 'string') {
|
|
88
|
+
var base64 = this.result.split(',')[1];
|
|
89
|
+
addFont(variant, base64);
|
|
90
|
+
if (variant === 'normal') {
|
|
91
|
+
normalBase64 = base64;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
shiftAndLoadVariant();
|
|
95
|
+
};
|
|
96
|
+
reader.readAsDataURL(xhr.response);
|
|
97
|
+
},
|
|
98
|
+
error: shiftAndLoadVariant
|
|
99
|
+
});
|
|
100
|
+
} else {
|
|
101
|
+
// For other variants, fall back to normal text weight/style
|
|
102
|
+
if (normalBase64) {
|
|
103
|
+
addFont(variant, normalBase64);
|
|
104
|
+
}
|
|
105
|
+
shiftAndLoadVariant();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
shiftAndLoadVariant();
|
|
109
|
+
};
|
|
110
|
+
/*
|
|
111
|
+
* @private
|
|
112
|
+
*/
|
|
113
|
+
var downloadPDF = function () {
|
|
114
|
+
AST.setElementHTML(dummySVGContainer, svg);
|
|
115
|
+
var textElements = dummySVGContainer.getElementsByTagName('text'),
|
|
116
|
+
// Copy style property to element from parents if it's not
|
|
117
|
+
// there. Searches up hierarchy until it finds prop, or hits the
|
|
118
|
+
// chart container.
|
|
119
|
+
setStylePropertyFromParents = function (el, propName) {
|
|
120
|
+
var curParent = el;
|
|
121
|
+
while (curParent && curParent !== dummySVGContainer) {
|
|
122
|
+
if (curParent.style[propName]) {
|
|
123
|
+
el.style[propName] = curParent.style[propName];
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
curParent = curParent.parentNode;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
var titleElements, outlineElements
|
|
130
|
+
// Workaround for the text styling. Making sure it does pick up
|
|
131
|
+
// settings for parent elements.
|
|
132
|
+
;
|
|
133
|
+
[].forEach.call(textElements, function (el) {
|
|
134
|
+
// Workaround for the text styling. making sure it does pick up
|
|
135
|
+
// the root element
|
|
136
|
+
;
|
|
137
|
+
['font-family', 'font-size'].forEach(function (property) {
|
|
138
|
+
setStylePropertyFromParents(el, property);
|
|
139
|
+
});
|
|
140
|
+
el.style.fontFamily = pdfFont && pdfFont.normal ?
|
|
141
|
+
// Custom PDF font
|
|
142
|
+
'HighchartsFont' :
|
|
143
|
+
// Generic font (serif, sans-serif etc)
|
|
144
|
+
String(el.style.fontFamily && el.style.fontFamily.split(' ').splice(-1));
|
|
145
|
+
// Workaround for plotband with width, removing title from text
|
|
146
|
+
// nodes
|
|
147
|
+
titleElements = el.getElementsByTagName('title');
|
|
148
|
+
[].forEach.call(titleElements, function (titleElement) {
|
|
149
|
+
el.removeChild(titleElement);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// Remove all .highcharts-text-outline elements, #17170
|
|
153
|
+
outlineElements = el.getElementsByClassName('highcharts-text-outline');
|
|
154
|
+
while (outlineElements.length > 0) {
|
|
155
|
+
const outline = outlineElements[0];
|
|
156
|
+
if (outline.parentNode) {
|
|
157
|
+
outline.parentNode.removeChild(outline);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
var svgNode = dummySVGContainer.querySelector('svg');
|
|
162
|
+
if (svgNode) {
|
|
163
|
+
loadPdfFonts(svgNode, function () {
|
|
164
|
+
svgToPdf(svgNode, 0, function (pdfData) {
|
|
165
|
+
try {
|
|
166
|
+
downloadURL(pdfData, filename);
|
|
167
|
+
if (successCallback) {
|
|
168
|
+
successCallback();
|
|
169
|
+
}
|
|
170
|
+
} catch (e) {
|
|
171
|
+
failCallback(e);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
// Initiate download depending on file type
|
|
178
|
+
if (imageType === 'image/svg+xml') {
|
|
179
|
+
// SVG download. In this case, we want to use Microsoft specific
|
|
180
|
+
// Blob if available
|
|
181
|
+
try {
|
|
182
|
+
if (typeof win.navigator.msSaveOrOpenBlob !== 'undefined') {
|
|
183
|
+
// eslint-disable-next-line no-undef
|
|
184
|
+
blob = new MSBlobBuilder();
|
|
185
|
+
blob.append(svg);
|
|
186
|
+
svgurl = blob.getBlob('image/svg+xml');
|
|
187
|
+
} else {
|
|
188
|
+
svgurl = svgToDataUrl(svg);
|
|
189
|
+
}
|
|
190
|
+
downloadURL(svgurl, filename);
|
|
191
|
+
if (successCallback) {
|
|
192
|
+
successCallback();
|
|
193
|
+
}
|
|
194
|
+
} catch (e) {
|
|
195
|
+
failCallback(e);
|
|
196
|
+
}
|
|
197
|
+
} else if (imageType === 'application/pdf') {
|
|
198
|
+
if (win.jspdf && win.jspdf.jsPDF) {
|
|
199
|
+
downloadPDF();
|
|
200
|
+
} else {
|
|
201
|
+
// Must load pdf libraries first. // Don't destroy the object
|
|
202
|
+
// URL yet since we are doing things asynchronously. A cleaner
|
|
203
|
+
// solution would be nice, but this will do for now.
|
|
204
|
+
objectURLRevoke = true;
|
|
205
|
+
getScript(libURL + 'jspdf.js', function () {
|
|
206
|
+
getScript(libURL + 'svg2pdf.js', downloadPDF);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
// PNG/JPEG download - create bitmap from SVG
|
|
211
|
+
svgurl = svgToDataUrl(svg);
|
|
212
|
+
finallyHandler = function () {
|
|
213
|
+
try {
|
|
214
|
+
OfflineExporting.domurl.revokeObjectURL(svgurl);
|
|
215
|
+
} catch (e) {
|
|
216
|
+
// Ignore
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
// First, try to get PNG by rendering on canvas
|
|
220
|
+
imageToDataUrl(svgurl, imageType, {}, scale, function (imageURL) {
|
|
221
|
+
// Success
|
|
222
|
+
try {
|
|
223
|
+
downloadURL(imageURL, filename);
|
|
224
|
+
if (successCallback) {
|
|
225
|
+
successCallback();
|
|
226
|
+
}
|
|
227
|
+
} catch (e) {
|
|
228
|
+
failCallback(e);
|
|
229
|
+
}
|
|
230
|
+
}, function () {
|
|
231
|
+
// Failed due to tainted canvas
|
|
232
|
+
// Create new and untainted canvas
|
|
233
|
+
var canvas = doc.createElement('canvas'),
|
|
234
|
+
ctx = canvas.getContext('2d'),
|
|
235
|
+
imageWidth = svg.match(
|
|
236
|
+
// eslint-disable-next-line no-useless-escape
|
|
237
|
+
/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale,
|
|
238
|
+
imageHeight = svg.match(
|
|
239
|
+
// eslint-disable-next-line no-useless-escape
|
|
240
|
+
/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale,
|
|
241
|
+
downloadWithCanVG = function () {
|
|
242
|
+
var v = win.canvg.Canvg.fromString(ctx, svg);
|
|
243
|
+
v.start();
|
|
244
|
+
try {
|
|
245
|
+
downloadURL(win.navigator.msSaveOrOpenBlob ? canvas.msToBlob() : canvas.toDataURL(imageType), filename);
|
|
246
|
+
if (successCallback) {
|
|
247
|
+
successCallback();
|
|
248
|
+
}
|
|
249
|
+
} catch (e) {
|
|
250
|
+
failCallback(e);
|
|
251
|
+
} finally {
|
|
252
|
+
finallyHandler();
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
canvas.width = imageWidth;
|
|
256
|
+
canvas.height = imageHeight;
|
|
257
|
+
if (win.canvg) {
|
|
258
|
+
// Use preloaded canvg
|
|
259
|
+
downloadWithCanVG();
|
|
260
|
+
} else {
|
|
261
|
+
// Must load canVG first. // Don't destroy the object
|
|
262
|
+
// URL yet since we are doing things asynchronously. A
|
|
263
|
+
// cleaner solution would be nice, but this will do for
|
|
264
|
+
// now.
|
|
265
|
+
objectURLRevoke = true;
|
|
266
|
+
getScript(libURL + 'canvg.js', function () {
|
|
267
|
+
downloadWithCanVG();
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
// No canvas support
|
|
272
|
+
failCallback,
|
|
273
|
+
// Failed to load image
|
|
274
|
+
failCallback,
|
|
275
|
+
// Finally
|
|
276
|
+
function () {
|
|
277
|
+
if (objectURLRevoke) {
|
|
278
|
+
finallyHandler();
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import arrayContains from 'd2-utilizr/lib/arrayContains';
|
|
2
2
|
import arrayUnique from 'd2-utilizr/lib/arrayUnique';
|
|
3
|
-
import { VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_PIE, VIS_TYPE_GAUGE, isTwoCategoryChartType } from '../../../../modules/visTypes.js';
|
|
3
|
+
import { VIS_TYPE_YEAR_OVER_YEAR_COLUMN, VIS_TYPE_YEAR_OVER_YEAR_LINE, VIS_TYPE_PIE, VIS_TYPE_GAUGE, isTwoCategoryChartType, VIS_TYPE_SINGLE_VALUE } from '../../../../modules/visTypes.js';
|
|
4
4
|
import getGauge from './gauge.js';
|
|
5
5
|
import getPie from './pie.js';
|
|
6
|
+
import getSingleValue from './singleValue.js';
|
|
6
7
|
import getTwoCategory from './twoCategory.js';
|
|
7
8
|
import getYearOnYear from './yearOnYear.js';
|
|
8
9
|
const VALUE_ID = 'value';
|
|
@@ -63,6 +64,8 @@ function getSeriesFunction(type, categoryIds) {
|
|
|
63
64
|
return getTwoCategory;
|
|
64
65
|
}
|
|
65
66
|
switch (type) {
|
|
67
|
+
case VIS_TYPE_SINGLE_VALUE:
|
|
68
|
+
return getSingleValue;
|
|
66
69
|
case VIS_TYPE_PIE:
|
|
67
70
|
return getPie;
|
|
68
71
|
case VIS_TYPE_GAUGE:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const shouldUseContrastColor = function () {
|
|
2
|
+
let inputColor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
3
|
+
// based on https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color
|
|
4
|
+
var color = inputColor.charAt(0) === '#' ? inputColor.substring(1, 7) : inputColor;
|
|
5
|
+
var r = parseInt(color.substring(0, 2), 16); // hexToR
|
|
6
|
+
var g = parseInt(color.substring(2, 4), 16); // hexToG
|
|
7
|
+
var b = parseInt(color.substring(4, 6), 16); // hexToB
|
|
8
|
+
var uicolors = [r / 255, g / 255, b / 255];
|
|
9
|
+
var c = uicolors.map(col => {
|
|
10
|
+
if (col <= 0.03928) {
|
|
11
|
+
return col / 12.92;
|
|
12
|
+
}
|
|
13
|
+
return Math.pow((col + 0.055) / 1.055, 2.4);
|
|
14
|
+
});
|
|
15
|
+
var L = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];
|
|
16
|
+
return L <= 0.179;
|
|
17
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhis2/analytics",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.9.0",
|
|
4
4
|
"main": "./build/cjs/index.js",
|
|
5
5
|
"module": "./build/es/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "d2-app-scripts build",
|
|
23
|
-
"postbuild": "yarn build-storybook",
|
|
24
23
|
"build-storybook": "build-storybook",
|
|
25
24
|
"start-storybook": "start-storybook --port 5000",
|
|
26
25
|
"start": "yarn start-storybook",
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.INDICATOR_FACTOR_100 = void 0;
|
|
7
|
-
exports.default = _default;
|
|
8
|
-
var _index = _interopRequireDefault(require("./subtitle/index.js"));
|
|
9
|
-
var _index2 = _interopRequireDefault(require("./title/index.js"));
|
|
10
|
-
var _index3 = _interopRequireDefault(require("./value/index.js"));
|
|
11
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
-
const INDICATOR_FACTOR_100 = 100;
|
|
13
|
-
exports.INDICATOR_FACTOR_100 = INDICATOR_FACTOR_100;
|
|
14
|
-
function _default(_ref) {
|
|
15
|
-
let {
|
|
16
|
-
store,
|
|
17
|
-
layout,
|
|
18
|
-
extraOptions
|
|
19
|
-
} = _ref;
|
|
20
|
-
const data = store.generateData({
|
|
21
|
-
type: layout.type,
|
|
22
|
-
seriesId: layout.columns && layout.columns.length ? layout.columns[0].dimension : null,
|
|
23
|
-
categoryId: layout.rows && layout.rows.length ? layout.rows[0].dimension : null
|
|
24
|
-
});
|
|
25
|
-
const metaData = store.data[0].metaData;
|
|
26
|
-
const config = {
|
|
27
|
-
value: data[0],
|
|
28
|
-
formattedValue: data[0] === undefined ? extraOptions.noData.text : (0, _index3.default)(data[0], layout, metaData),
|
|
29
|
-
title: (0, _index2.default)(layout, metaData, extraOptions.dashboard),
|
|
30
|
-
subtitle: (0, _index.default)(layout, metaData, extraOptions.dashboard)
|
|
31
|
-
};
|
|
32
|
-
const indicatorType = metaData.items[metaData.dimensions.dx[0]].indicatorType;
|
|
33
|
-
|
|
34
|
-
// Use % symbol for factor 100 and the full string for others
|
|
35
|
-
if ((indicatorType === null || indicatorType === void 0 ? void 0 : indicatorType.factor) !== INDICATOR_FACTOR_100) {
|
|
36
|
-
config.subText = indicatorType === null || indicatorType === void 0 ? void 0 : indicatorType.displayName;
|
|
37
|
-
}
|
|
38
|
-
return config;
|
|
39
|
-
}
|