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 / examiner_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
examiner_controller.js
124 lines
1 import {Controller} from "@hotwired/stimulus"
2 import MicroModal from "micromodal"
3
4 class ExaminerController extends Controller {
5 static targets = ['content']
6
7 options = null
8
9 // Track last opened frame to know if the loading screen should be disabled or not
10 lastOpenedFrame = null
11
12 // Track which windows are loaded so the loading state can be restored if examiner is closed and reopened
13 loadedWindows = new Set()
14
15 connect() {
16 document.addEventListener('iawp:showExaminer', this.showExaminer)
17 window.addEventListener('message', this.processMessage)
18 }
19
20 disconnect() {
21 document.removeEventListener('iawp:showExaminer', this.showExaminer)
22 window.removeEventListener('message', this.processMessage)
23 }
24
25 showExaminer = (event) => {
26 this.options = event.detail
27
28 this.element.querySelector('.examiner-skeleton .date-picker-parent .iawp-label').innerText = this.options.dateLabel
29 this.element.querySelector('.examiner-skeleton .report-title').innerText = this.options.title
30 this.element.querySelector('.examiner-skeleton .report-subtitle').innerText = this.options.reportName
31
32 const currentSvg = document.querySelector(`.reports-list .menu-section.current svg`)
33 if(currentSvg) {
34 this.element.querySelector('.examiner-skeleton .report-subtitle').prepend(currentSvg)
35 }
36
37 MicroModal.show('iawp-examiner-modal', {
38 onClose: () => {
39 this.cleanUp()
40 }
41 })
42
43 const existingFrame = Array.from(this.contentTarget.querySelectorAll('iframe.preserved')).find((frame) => {
44 return frame.src === this.options.url
45 })
46
47 if(existingFrame) {
48 this.lastOpenedFrame = existingFrame
49
50 if(this.loadedWindows.has(existingFrame.contentWindow)) {
51 this.hideLoadingScreen()
52 }
53
54 existingFrame.classList.remove('preserved')
55 return
56 }
57
58 const iframe = this.createInlineFrame(this.options.url)
59 this.contentTarget.appendChild(iframe)
60 this.lastOpenedFrame = iframe
61
62 clearTimeout(this.fallbackTimeout)
63 this.fallbackTimeout = setTimeout(() => {
64 this.hideLoadingScreen()
65 }, 10000)
66 }
67
68 processMessage = (event) => {
69 const fromCurrentWindow = event.source === window
70 const fromLastOpenedFrame = event.source === (this.lastOpenedFrame && this.lastOpenedFrame.contentWindow)
71
72 // Ignore events from the current window
73 if(fromCurrentWindow) {
74 return
75 }
76
77 if (event.data === 'iawpPageReady') {
78 this.loadedWindows.add(event.source)
79 }
80
81 if (event.data === 'iawpPageReady' && fromLastOpenedFrame) {
82 this.hideLoadingScreen()
83 }
84
85 if (event.data === 'iawpCloseExaminer') {
86 this.close()
87 }
88 }
89
90 createInlineFrame(url) {
91 const iframe = document.createElement('iframe');
92
93 iframe.src = url
94 iframe.classList.add('examiner-iframe')
95
96 return iframe
97 }
98
99 close() {
100 MicroModal.close('iawp-examiner-modal')
101 }
102
103 cleanUp() {
104 this.options = null
105 this.showLoadingScreen()
106 clearTimeout(this.fallbackTimeout)
107
108 const currentFrame = this.element.querySelector('iframe:not(.preserved)')
109
110 if(currentFrame) {
111 currentFrame.classList.add('preserved')
112 }
113 }
114
115 showLoadingScreen() {
116 this.element.querySelector('.examiner').classList.add('examiner--loading')
117 }
118
119 hideLoadingScreen() {
120 this.element.querySelector('.examiner').classList.remove('examiner--loading')
121 }
122 }
123
124 export default ExaminerController