PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.10
Independent Analytics – WordPress Analytics Plugin v2.14.10
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / javascript-source / controllers / export_overview_controller.js
independent-analytics / javascript-source / controllers Last commit date
overview 1 year ago campaign_builder_controller.js 1 year ago chart_controller.js 2 months ago chart_interval_controller.js 2 years ago clipboard_controller.js 1 year ago copy_report_controller.js 2 years ago create_report_controller.js 1 year ago delete_data_controller.js 1 year ago delete_report_controller.js 2 years ago easepick_controller.js 2 years ago examiner_controller.js 2 months ago examiner_header_controller.js 11 months ago export_overview_controller.js 9 months ago export_reports_controller.js 2 years ago filters_controller.js 6 months ago group_controller.js 2 years ago import_reports_controller.js 2 years ago journey_controller.js 6 months ago map_controller.js 9 months ago migration_redirect_controller.js 2 years ago modal_controller.js 2 years ago pause_emails_controller.js 6 months ago pie_chart_controller.js 6 months ago plugin_group_options_controller.js 1 year ago pruner_controller.js 5 months ago quick_stats_controller.js 1 year ago real_time_controller.js 6 months ago refresh_overview_controller.js 1 year ago rename_report_controller.js 2 years ago report_controller.js 2 months ago reset_analytics_controller.js 1 year ago reset_overview_controller.js 1 year ago save_report_controller.js 2 years ago select_input_controller.js 2 years ago set_favorite_report_controller.js 2 years ago sort_controller.js 2 years ago sortable_reports_controller.js 2 years ago table_columns_controller.js 2 years ago tooltip_controller.js 6 months ago woocommerce_settings_controller.js 1 year ago
export_overview_controller.js
108 lines
1 import {Controller} from "@hotwired/stimulus"
2 import html2pdf from 'html2pdf.js'
3 import {Chart} from 'chart.js'
4 import {svgToPng} from "../utils/svg-to-png";
5
6 export default class extends Controller {
7 static values = {
8 loadingText: String
9 }
10
11 export() {
12 this.element.classList.add('sending')
13 this.element.setAttribute('disabled', 'disabled')
14
15 setTimeout(async () => {
16 const charts = Object.values(Chart.instances)
17 const mapElements = window.iawpMaps || []
18
19 // Assign a temporary unique id to every chart
20 charts.forEach((chart) => {
21 chart.canvas.dataset.chartExportId = Math.random()
22 })
23
24 // Assign a temporary unique id to every map
25 mapElements.forEach((map) => {
26 map.container.dataset.chartExportId = Math.random()
27 })
28
29 const clonedPage = document.getElementById('wpwrap').cloneNode(true)
30
31 // Set the width to the PDFs page width
32 clonedPage.style.width = 1056 + 'px'
33
34 charts.forEach((chart) => {
35 // Get an image of the chart
36 const base64Image = chart.toBase64Image('image/png', 1);
37
38 // Generate an image element to inline
39 const imageElement = document.createElement('img')
40 imageElement.src = base64Image
41 imageElement.classList.add('chart-converted-to-image')
42
43 // Swap the chart for the image
44 const chartExportId = chart.canvas.dataset.chartExportId
45 clonedPage.querySelector(`[data-chart-export-id='${chartExportId}']`).replaceWith(imageElement)
46
47 // Remove the temporary export id
48 delete chart.canvas.dataset.chartExportId
49 })
50
51 for (const map of mapElements) {
52 // Generate an image element to inline
53 const imageElement = await svgToPng(map.mapImage)
54 imageElement.classList.add('chart-converted-to-image')
55
56 // Swap the chart for the image
57 const chartExportId = map.container.dataset.chartExportId
58 clonedPage.querySelector(`[data-chart-export-id='${chartExportId}']`).replaceWith(imageElement)
59
60 // Remove the temporary export id
61 delete map.container.dataset.chartExportId
62 }
63
64 // Prevent stimulus controllers from firing
65 clonedPage.querySelectorAll('[data-controller]').forEach((element) => {
66 element.removeAttribute('data-controller')
67 })
68
69 // Remove module picker
70 clonedPage.querySelectorAll('.module-picker').forEach((element) => {
71 element.remove()
72 })
73
74 // Remove toolbar
75 clonedPage.querySelectorAll('#report-header-container .toolbar').forEach((element) => {
76 element.remove()
77 })
78
79 // Remove refresh content
80 clonedPage.querySelectorAll('#report-header-container .last-updated-container').forEach((element) => {
81 element.remove()
82 })
83
84 // Remove pagination
85 clonedPage.querySelectorAll('.iawp-module .module-pagination').forEach((element) => {
86 element.remove()
87 })
88
89 const options = {
90 filename: 'overview.pdf',
91 jsPDF: {
92 unit: 'in',
93 format: 'letter',
94 orientation: 'landscape',
95 },
96 }
97 html2pdf().set(options).from(clonedPage).toContainer().save().then(() => {
98 this.element.classList.add('sent')
99 this.element.classList.remove('sending')
100 this.element.removeAttribute('disabled')
101
102 setTimeout(() => {
103 this.element.classList.remove('sent')
104 }, 1000)
105 })
106 }, 250) // Allow animations to finish before exporting blocks things up
107 }
108 }