PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.9.7
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.9.7
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 3.10.4 All 148 releases
visualizer / js / render-facade.js

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

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