PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.7.5
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.7.5
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / js / render-facade.js

render-facade.js in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.7.5, at js/render-facade.js

240 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* global console */
2 /* global visualizer */
3 /* global jQuery */
4
5 (function($, visualizer){
6
7 function initActionsButtons(v) {
8 if($('a.visualizer-chart-shortcode').length > 0) {
9 var clipboard1 = new ClipboardJS('a.visualizer-chart-shortcode'); // jshint ignore:line
10 clipboard1.on('success', function(e) {
11 window.alert(v.i10n['copied']);
12 });
13 }
14
15 if($('a.visualizer-action[data-visualizer-type=copy]').length > 0) {
16 $('a.visualizer-action[data-visualizer-type=copy]').on('click', function(e) {
17 e.preventDefault();
18 });
19 var clipboard = new ClipboardJS('a.visualizer-action[data-visualizer-type=copy]'); // jshint ignore:line
20 clipboard.on('success', function(e) {
21 window.alert(v.i10n['copied']);
22 });
23 }
24 $('a.visualizer-action[data-visualizer-type!=copy]').off('click').on('click', function(e) {
25 var type = $(this).attr( 'data-visualizer-type' );
26 var chart = $(this).attr( 'data-visualizer-chart-id' );
27 var container = $(this).attr( 'data-visualizer-container-id' );
28 var lock = $('.visualizer-front.visualizer-front-' + chart);
29 var mime = $(this).attr( 'data-visualizer-mime' );
30 lock.lock();
31 e.preventDefault();
32 $.ajax({
33 url : v.rest_url.replace('#id#', chart).replace('#type#', type),
34 beforeSend: function ( xhr ) {
35 xhr.setRequestHeader( 'X-WP-Nonce', v.wp_nonce );
36 },
37 success: function(data) {
38 if (data && data.data) {
39 switch(type){
40 case 'csv':
41 var blob = new Blob([data.data.csv], {type: mime });
42 if(window.navigator.msSaveOrOpenBlob){
43 window.navigator.msSaveOrOpenBlob(blob, data.data.name);
44 } else {
45 var url = window.URL.createObjectURL(blob);
46 var $a = $("<a>");
47 $a.attr("href", url);
48 $("body").append($a);
49 $a.attr("download", data.data.name);
50 $a[0].click();
51 setTimeout(function () {
52 window.URL.revokeObjectURL(url);
53 $a.remove();
54 }, 100);
55 }
56 break;
57 case 'xls':
58 if(window.navigator.msSaveOrOpenBlob){
59 blob = new Blob([s2ab(atob(data.data.raw))], {type: '' });
60 window.navigator.msSaveOrOpenBlob(blob, data.data.name);
61 } else {
62 var $a = $("<a>"); // jshint ignore:line
63 $a.attr("href", data.data.csv);
64 $("body").append($a);
65 $a.attr("download", data.data.name);
66 $a[0].click();
67 $a.remove();
68 }
69 break;
70 case 'print':
71 case 'image':
72 $('body').trigger('visualizer:action:specificchart', {action: type, id: container, data: data.data.csv, dataObj: data.data});
73 break;
74 default:
75 if(window.visualizer_perform_action) {
76 window.visualizer_perform_action(type, chart, data.data);
77 }
78 break;
79 }
80 }
81 lock.unlock();
82 }
83 });
84 });
85 }
86
87 function s2ab(s) {
88 var buf = new ArrayBuffer(s.length);
89 var view = new Uint8Array(buf);
90 for (var i=0; i !== s.length; ++i) {
91 view[i] = s.charCodeAt(i) & 0xFF;
92 }
93 return buf;
94 }
95
96 $(document).ready(function(){
97
98 // for updating the currently displayed chart (preview mode)
99 window.vizUpdateChartPreview = function(){
100 var event = new CustomEvent('visualizer:render:currentchart:update', {detail: {visualizer: visualizer}});
101 document.body.dispatchEvent(event);
102 };
103
104 initChartDisplay();
105 initActionsButtons(visualizer);
106 registerDefaultActions();
107 });
108
109 // Refresh charts if chart not generated.
110 function refreshEachCharts() {
111 setTimeout( function() {
112 displayChartsOnFrontEnd();
113 }, 100 );
114 }
115
116 function initChartDisplay() {
117 if(visualizer.is_front == true){ // jshint ignore:line
118 displayChartsOnFrontEnd();
119 }else{
120 showChart();
121 }
122 }
123
124 /**
125 * If an `id` is provided, that particular chart will load.
126 */
127 function showChart(id) {
128 // clone the visualizer object so that the original object is not affected.
129 var viz = Object.assign(visualizer, window.visualizer || {});
130 if(id){
131 viz.id = id;
132 }
133 $('body').trigger('visualizer:render:chart:start', viz);
134 }
135
136 function displayChartsOnFrontEnd() {
137 // display all charts that are NOT to be lazy-loaded.
138 $( 'div.viz-facade-loaded:not(.visualizer-lazy):empty' ).removeClass( 'viz-facade-loaded' );
139 $('div.visualizer-front:not(.visualizer-lazy):not(.viz-facade-loaded)').each(function(index, element){
140 var id = $(element).addClass('viz-facade-loaded').attr('id');
141 showChart(id);
142 refreshEachCharts();
143 });
144
145 // interate through all charts that are to be lazy-loaded and observe each one.
146 $('div.visualizer-front.visualizer-lazy').each(function(index, element){
147 var id = $(element).attr('id');
148 var limit = $(element).attr('data-lazy-limit');
149 if(!limit){
150 limit = 300;
151 }
152 var target = document.querySelector('#' + id);
153
154 // configure the intersection observer instance
155 var intersectionObserverOptions = {
156 root: null,
157 rootMargin: limit + 'px',
158 threshold: 0
159 };
160
161 var observer = new IntersectionObserver(function(entries) {
162 entries.forEach(function(entry) {
163 if (entry.isIntersecting) {
164 observer.unobserve(target);
165 showChart($(entry.target).attr('id'));
166 }
167 });
168 }, intersectionObserverOptions);
169
170 // start observing.
171 observer.observe(target);
172 });
173 }
174
175 function registerDefaultActions(){
176 $('body').off('visualizer:action:specificchart:defaultprint').on('visualizer:action:specificchart:defaultprint', function(event, v){
177 var iframe = $('<iframe>').attr("name", "print-visualization").attr("id", "print-visualization").css("position", "absolute");
178 iframe.appendTo($('body'));
179 var iframe_doc = iframe.get(0).contentWindow || iframe.get(0).contentDocument.document || iframe.get(0).contentDocument;
180 iframe_doc.document.open();
181 iframe_doc.document.write(v.data);
182 iframe_doc.document.close();
183 setTimeout(function(){
184 window.frames['print-visualization'].focus();
185 window.frames['print-visualization'].print();
186 iframe.remove();
187 }, 500);
188 });
189 }
190 })(jQuery, visualizer);
191
192 (function ($) {
193 $.fn.lock = function () {
194 $(this).each(function () {
195 var $this = $(this);
196 var position = $this.css('position');
197
198 if (!position) {
199 position = 'static';
200 }
201
202 switch (position) {
203 case 'absolute':
204 case 'relative':
205 break;
206 default:
207 $this.css('position', 'relative');
208 break;
209 }
210 $this.data('position', position);
211
212 var width = $this.width(),
213 height = $this.height();
214
215 var locker = $('<div class="locker"></div>');
216 locker.width(width).height(height);
217
218 var loader = $('<div class="locker-loader"></div>');
219 loader.width(width).height(height);
220
221 locker.append(loader);
222 $this.append(locker);
223 $(window).resize(function () {
224 $this.find('.locker,.locker-loader').width($this.width()).height($this.height());
225 });
226 });
227
228 return $(this);
229 };
230
231 $.fn.unlock = function () {
232 $(this).each(function () {
233 $(this).find('.locker').remove();
234 $(this).css('position', $(this).data('position'));
235 });
236
237 return $(this);
238 };
239 })(jQuery);
240