{"version":3,"sources":["webpack:///./modules/DonutChart.ts","webpack:///./helpers/QuickFactsUtils.ts"],"names":["DonutChart_DonutChartSlide","DonutChartSlide","element","chartDataContainer","_this","this","chartData","dataFields","Array","from","getElementsByTagName","dataFields_1","__values","dataFields_1_1","next","done","dataField","value","sectorName","dataset","percent","parseFloat","push","google","charts","load","packages","callback","initGoogleChart","prototype","setTimeout","redrawDesktopVersion","addEventListener","window","visualization","drawChart","fitFontSize","windowWidth","innerWidth","getFitFontSize","dimension","getChartWidth","chartOptions","backgroundColor","chartArea","width","height","top","enableInteractivity","legend","position","pieHole","pieSliceBorderColor","pieSliceText","pieSliceTextStyle","color","fontSize","pieStartAngle","rotate","tooltip","trigger","googleChartData","arrayToDataTable","chart","PieChart","legendEntries","parentElement","querySelectorAll","events","addListener","evt","showSector","row","hideSector","postProcess","draw","addChartBackground","selectedRow","classList","add","forEach","entry","remove","setCountrySpecificCommaForSvgTexts","chartContainerStyle","getComputedStyle","chartContainerWidth","clientWidth","paddingLeft","paddingRight","getChartLayoutInterface","getChartAreaBoundingBox","svg","getContainer","radius","circle","document","createElementNS","setAttribute","left","toString","prepend","needle","replacement","language","getAttribute","svgTexts","test","textContent","replace","DonutChart_DonutChart","DonutChart","initSliderForMobile","querySelector","container","setup","selector","filter","node","moduleInitialized","Object","helperFunctions","glide_esm","mount","then","catch","error","console"],"mappings":"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","file":"./modules/DonutChart.24397f89.js","sourcesContent":["import { getFitFontSize } from \"../helpers/QuickFactsUtils\";\r\nimport { isMobile, loadFromUrl } from \"../helpers/helperFunctions\";\r\nimport Glide from \"@glidejs/glide\";\r\nimport PieChartOptions = google.visualization.PieChartOptions;\r\nimport PieChart = google.visualization.PieChart;\r\n\r\nconst moduleSelector = '[data-module=\"DonutChart\"]';\r\n\r\nclass DonutChartSlide {\r\n chartData: [[string, string | number]];\r\n chartOptions: PieChartOptions;\r\n\r\n constructor(public element: HTMLElement, public chartDataContainer: HTMLElement) {\r\n this.chartData = [[\"Sector\", \"Percent\"]];\r\n const dataFields = Array.from(this.chartDataContainer.getElementsByTagName(\"input\"));\r\n\r\n for (const dataField of dataFields) {\r\n const sectorName = dataField.dataset.sectorName;\r\n const percent = parseFloat(dataField.dataset.percent);\r\n this.chartData.push([sectorName, percent]);\r\n }\r\n \r\n google.charts.load(\"current\", { packages: [\"corechart\"], callback: () => this.initGoogleChart() });\r\n }\r\n\r\n initGoogleChart() {\r\n setTimeout(() => this.redrawDesktopVersion(), 1000);\r\n\r\n this.element.addEventListener(\"resize\", () => this.redrawDesktopVersion());\r\n window.addEventListener(\"resize\", () => this.redrawDesktopVersion());\r\n }\r\n\r\n redrawDesktopVersion() {\r\n if (typeof google.visualization === \"undefined\") {\r\n google.charts.load(\"current\", { packages: [\"corechart\"], callback: () => this.drawChart() });\r\n }\r\n else {\r\n this.drawChart();\r\n }\r\n }\r\n\r\n drawChart() {\r\n const fitFontSize = getFitFontSize();\r\n const dimension = this.getChartWidth();\r\n\r\n if (dimension < 1) {\r\n return;\r\n }\r\n\r\n this.chartOptions = {\r\n backgroundColor: \"transparent\",\r\n chartArea: { width: \"100%\", height: \"100%\", top: 5 },\r\n enableInteractivity: false,\r\n height: dimension,\r\n legend: { position: \"none\" },\r\n pieHole: 0.5,\r\n pieSliceBorderColor: \"transparent\",\r\n pieSliceText: \"value\",\r\n pieSliceTextStyle: { color: \"white\", fontSize: fitFontSize },\r\n pieStartAngle: parseFloat(this.chartDataContainer.dataset.rotate),\r\n tooltip: { trigger: \"none\" },\r\n width: dimension\r\n };\r\n\r\n const googleChartData = google.visualization.arrayToDataTable(this.chartData);\r\n const chart = new google.visualization.PieChart(this.element);\r\n\r\n const legendEntries = this.element.parentElement.querySelectorAll(\".cw-legend > li\");\r\n\r\n google.visualization.events.addListener(chart, \"onmouseover\", evt => this.showSector(legendEntries, evt.row));\r\n google.visualization.events.addListener(chart, \"onmouseout\", () => this.hideSector(legendEntries));\r\n google.visualization.events.addListener(chart, \"ready\", () => this.postProcess());\r\n\r\n chart.draw(googleChartData, this.chartOptions);\r\n this.addChartBackground(chart);\r\n }\r\n\r\n showSector(legendEntries: NodeListOf, selectedRow: number) {\r\n legendEntries[selectedRow].classList.add(\"hover\");\r\n }\r\n \r\n hideSector(legendEntries: NodeListOf) {\r\n legendEntries.forEach(entry => entry.classList.remove(\"hover\"));\r\n }\r\n\r\n postProcess() {\r\n this.setCountrySpecificCommaForSvgTexts();\r\n }\r\n\r\n private getChartWidth() {\r\n const chartContainerStyle = getComputedStyle(this.element);\r\n let chartContainerWidth = this.element.clientWidth;\r\n chartContainerWidth -= parseFloat(chartContainerStyle.paddingLeft) + parseFloat(chartContainerStyle.paddingRight);\r\n return chartContainerWidth;\r\n }\r\n\r\n private addChartBackground(chart: PieChart) {\r\n const layout = chart.getChartLayoutInterface();\r\n const chartArea = layout.getChartAreaBoundingBox();\r\n const svg = chart.getContainer().getElementsByTagName(\"svg\")[0];\r\n const radius = chartArea.height / 2;\r\n\r\n const circle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n circle.setAttribute(\"class\", \"cw-chart-background\");\r\n circle.setAttribute(\"cx\", (radius + chartArea.left).toString());\r\n circle.setAttribute(\"cy\", (radius + chartArea.top).toString());\r\n circle.setAttribute(\"r\", radius.toString());\r\n svg.prepend(circle);\r\n }\r\n\r\n private setCountrySpecificCommaForSvgTexts() {\r\n const language = document.getElementsByTagName(\"html\")[0].getAttribute(\"lang\");\r\n const svgTexts = this.element.querySelectorAll(\"svg g text\") as NodeListOf;\r\n let needle: string, replacement: string;\r\n\r\n if ((/^de/).test(language)) {\r\n needle = \".\";\r\n replacement = \",\";\r\n } else {\r\n needle = \",\";\r\n replacement = \".\";\r\n }\r\n\r\n svgTexts.forEach(value => value.textContent = value.textContent.replace(needle, replacement));\r\n }\r\n}\r\n\r\nexport default class DonutChart {\r\n chartDataContainer: HTMLElement;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized)\r\n .forEach((element: HTMLElement) => {\r\n new DonutChart(element);\r\n element.dataset.moduleInitialized = \"true\";\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement) {\r\n this.initSliderForMobile();\r\n\r\n const chartDataContainer = this.element.querySelector(\".cw-data\") as HTMLElement;\r\n const chartContainers = this.element.querySelectorAll(\".cw-chart\");\r\n chartContainers.forEach(container => {\r\n new DonutChartSlide(container as HTMLElement, chartDataContainer);\r\n });\r\n }\r\n\r\n initSliderForMobile() {\r\n if (isMobile()) {\r\n const glide: glide.Glide = new Glide(\".cw-chart-slider\");\r\n glide.mount();\r\n }\r\n }\r\n}\r\n\r\nloadFromUrl(\"https://www.gstatic.com/charts/loader.js\")\r\n .then(() => new DonutChart.setup())\r\n .catch(error => console.error(\"Google visualization could not be loaded.\", error));","export function getFitFontSize() {\r\n const windowWidth = window.innerWidth;\r\n\r\n if (windowWidth <= 640)\r\n return 18;\r\n\r\n if (windowWidth <= 800)\r\n return 19;\r\n\r\n return 20;\r\n}"],"sourceRoot":""}