{"version":3,"file":"BarCharts-7lacpIGD.js","sources":["../../js/behaviors/BarCharts.ts"],"sourcesContent":["import _ from 'lodash';\nimport Page from '../lib/Page';\nimport Chart from 'chart.js';\n\nPage.registerBehavior('.barchart', function (element) {\n initializeBarChart(element);\n});\ntype Data = {\n [key: string]: string\n}\nfunction initializeBarChart(el: Element) {\n const datasets: any[] = [];\n const unit = el.getAttribute('data-unit');\n const stacked = (el.getAttribute('data-stacked')||'').toLowerCase() === 'true';\n const sortLabelsDescending = el.getAttribute('data-x-sort') ===' desc';\n \n for (let i = 1; true; i++) {\n const rawdata = el.getAttribute(\"data-set-\" + i + \"-data\");\n if (!rawdata) break;\n\n const label = el.getAttribute(\"data-set-\" + i + \"-label\");\n\n const data = _.reduce(rawdata.split(';'), function (acc: Data, datum: string) {\n const pair = datum.split(':') as string[];\n const key = pair[0];\n const value = pair[1];\n\n acc[key] = value;\n\n return acc;\n }, {});\n datasets.push({ label: label, data: data });\n }\n\n let labels = _.flatMap(datasets, function (dataset) {\n return _.keys(dataset.data);\n });\n\n labels = _.sortedUniq(_.flatMap(datasets, function (dataset) {\n return _.keys(dataset.data);\n }).sort());\n\n if (sortLabelsDescending)\n labels = _.reverse(labels);\n\n const canvas = document.createElement(\"canvas\");\n\n el.parentNode!.appendChild(canvas);\n\n let formatValue: Function = (v: number): string => v.toString()\n if (unit == 'euro')\n formatValue = formatEuro;\n if (unit == 'ratio')\n formatValue = formatRatio;\n\n const colors = getChartColorSeries();\n \n new Chart(canvas, {\n type: 'bar',\n data: {\n labels: labels,\n datasets: _.map(datasets, function (dataset) {\n return _.merge(\n {\n label: dataset.label,\n data: labels.map(function (label) { return dataset.data[label]||undefined }),\n borderWidth: 1,\n maxBarThickness: 30\n },\n colors.next()\n );\n })\n },\n options: {\n legend: {\n display: datasets.length > 0,\n position: 'bottom',\n onHover: function (e: Event) {\n (e.target as HTMLElement).style.cursor = 'pointer';\n }\n },\n hover: {\n onHover: function (e: Event) {\n var point = this.getElementAtEvent(e);\n if (point.length) (e.target as HTMLElement).style.cursor = 'pointer';\n else (e.target as HTMLElement).style.cursor = 'default';\n }\n },\n scales: {\n xAxes: [{\n stacked: stacked\n }],\n yAxes: [{\n ticks: {\n beginAtZero: true,\n callback: function (value, index, values) {\n return formatValue(value);\n }\n },\n stacked: stacked\n }]\n },\n tooltips: {\n callbacks: {\n label: function (params) {\n return datasets[params.datasetIndex!].label + ': ' + formatValue(params.yLabel);\n }\n }\n },\n responsiveAnimationDuration: 0,\n animation: { duration: 0 },\n maintainAspectRatio: true,\n responsive: true\n }\n });\n}\n\n\nfunction formatEuro(value: number): string {\n value = Math.round(value);\n const sign = value < 0 ? '-' : '';\n let chunks = [];\n value = Math.abs(value);\n\n while (value >= 1000) {\n chunks.unshift(value.toString().substr(-3))\n value = Math.floor(value / 1000);\n }\n chunks.unshift(value.toString())\n\n return '\\u20AC ' + sign + chunks.join('.');\n}\n\nfunction formatRatio(value: number): string {\n const left = Math.round(value);\n const right = Math.round((value - Math.floor(value)) * 100);\n\n return left + '.' + (right < 10 ? right + \"0\" : right);\n}\n\nfunction getChartColorSeries() {\n let current = 0,\n colors = [\n {\n backgroundColor: '#73a6d7',\n borderColor: '#73a6d7'\n },\n {\n backgroundColor: 'rgba(232, 49, 49, 0.6)',\n borderColor: 'rgba(232, 49, 49, 1)'\n },\n {\n backgroundColor: 'rgba(255, 183, 28, 0.6)',\n borderColor: 'rgb(255, 183, 28)'\n },\n {\n backgroundColor: 'rgba(22, 200, 110, 0.6)',\n borderColor: 'rgb(22, 200, 110)'\n },\n {\n backgroundColor: 'rgba(194, 21, 186, 0.6)',\n borderColor: 'rgb(194, 21, 186)'\n },\n {\n backgroundColor: 'rgba(255, 131, 28, 0.6)',\n borderColor: 'rgb(255, 131, 28)'\n },\n {\n backgroundColor: 'rgba(43, 54, 197, 0.6)',\n borderColor: 'rgb(43, 54, 197)'\n }\n ],\n length = colors.length;\n return {\n next: function () {\n return colors[current++%length];\n }\n }\n}\n\n\n"],"names":["Page","element","initializeBarChart","el","datasets","unit","stacked","sortLabelsDescending","i","rawdata","label","data","_","acc","datum","pair","key","value","labels","dataset","canvas","formatValue","v","formatEuro","formatRatio","colors","getChartColorSeries","Chart","e","point","index","values","params","sign","chunks","left","right","current","length"],"mappings":"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"}