PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.12.0
Independent Analytics – WordPress Analytics Plugin v2.12.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 1 year 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 1 year ago examiner_header_controller.js 1 year ago export_overview_controller.js 1 year ago export_reports_controller.js 2 years ago filters_controller.js 1 year ago group_controller.js 2 years ago import_reports_controller.js 2 years ago map_controller.js 1 year ago migration_redirect_controller.js 2 years ago modal_controller.js 2 years ago pie_chart_controller.js 1 year ago plugin_group_options_controller.js 1 year ago pruner_controller.js 1 year ago quick_stats_controller.js 1 year ago real_time_controller.js 1 year ago refresh_overview_controller.js 1 year ago rename_report_controller.js 2 years ago report_controller.js 1 year 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 woocommerce_settings_controller.js 1 year ago
export_overview_controller.js
111 lines
1 import {Controller} from "@hotwired/stimulus"
2 import html2pdf from 'html2pdf.js'
3 import {Chart} from 'chart.js'
4
5 export default class extends Controller {
6 static values = {
7 loadingText: String
8 }
9
10 export() {
11 this.element.classList.add('sending')
12 this.element.setAttribute('disabled', 'disabled')
13
14 setTimeout(() => {
15 const charts = Object.values(Chart.instances)
16 const mapElements = window.mapInstances || []
17
18 // Assign a temporary unique id to every chart
19 charts.forEach((chart) => {
20 chart.canvas.dataset.chartExportId = Math.random()
21 })
22
23 // Assign a temporary unique id to every map
24 mapElements.forEach((map) => {
25 map.container.dataset.chartExportId = Math.random()
26 })
27
28 const clonedPage = document.getElementById('wpwrap').cloneNode(true)
29
30 // Set the width to the PDFs page width
31 clonedPage.style.width = 1056 + 'px'
32
33 charts.forEach((chart) => {
34 // Get an image of the chart
35 const base64Image = chart.toBase64Image('image/png', 1);
36
37 // Generate an image element to inline
38 const imageElement = document.createElement('img')
39 imageElement.src = base64Image
40 imageElement.classList.add('chart-converted-to-image')
41
42 // Swap the chart for the image
43 const chartExportId = chart.canvas.dataset.chartExportId
44 clonedPage.querySelector(`[data-chart-export-id='${chartExportId}']`).replaceWith(imageElement)
45
46 // Remove the temporary export id
47 delete chart.canvas.dataset.chartExportId
48 })
49
50 mapElements.forEach((map) => {
51 // Get an image of the chart
52 const base64Image = map.getImageURI()
53
54 // Generate an image element to inline
55 const imageElement = document.createElement('img')
56 imageElement.src = base64Image
57 imageElement.classList.add('chart-converted-to-image')
58
59 // Swap the chart for the image
60 const chartExportId = map.container.dataset.chartExportId
61 clonedPage.querySelector(`[data-chart-export-id='${chartExportId}']`).replaceWith(imageElement)
62
63 // Remove the temporary export id
64 delete map.container.dataset.chartExportId
65 })
66
67 // Prevent stimulus controllers from firing
68 clonedPage.querySelectorAll('[data-controller]').forEach((element) => {
69 element.removeAttribute('data-controller')
70 })
71
72 // Remove module picker
73 clonedPage.querySelectorAll('.module-picker').forEach((element) => {
74 element.remove()
75 })
76
77 // Remove toolbar
78 clonedPage.querySelectorAll('#report-header-container .toolbar').forEach((element) => {
79 element.remove()
80 })
81
82 // Remove refresh content
83 clonedPage.querySelectorAll('#report-header-container .last-updated-container').forEach((element) => {
84 element.remove()
85 })
86
87 // Remove pagination
88 clonedPage.querySelectorAll('.iawp-module .module-pagination').forEach((element) => {
89 element.remove()
90 })
91
92 const options = {
93 filename: 'overview.pdf',
94 jsPDF: {
95 unit: 'in',
96 format: 'letter',
97 orientation: 'landscape',
98 },
99 }
100 html2pdf().set(options).from(clonedPage).toContainer().save().then(() => {
101 this.element.classList.add('sent')
102 this.element.classList.remove('sending')
103 this.element.removeAttribute('disabled')
104
105 setTimeout(() => {
106 this.element.classList.remove('sent')
107 }, 1000)
108 })
109 }, 250) // Allow animations to finish before exporting blocks things up
110 }
111 }