PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.10.5
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.10.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.10.5, at js/render-facade.js

237 lines 9.2 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 function initChartDisplay() {
111 if(visualizer.is_front == true){ // jshint ignore:line
112 displayChartsOnFrontEnd();
113 } else {
114 showChart();
115 }
116 }
117
118 /**
119 * If an `id` is provided, that particular chart will load.
120 */
121 function showChart(id) {
122 // clone the visualizer object so that the original object is not affected.
123 var viz = Object.assign(visualizer, window.visualizer || {});
124 if(id){
125 viz.id = id;
126 }
127 $('body').trigger('visualizer:render:chart:start', viz);
128 }
129
130 function displayChartsOnFrontEnd() {
131
132 $('div.visualizer-front:not(.viz-facade-loaded):not(.visualizer-lazy):not(.visualizer-cw-error):empty').each(function(index, element){
133 if ( $(element).is(':visible') ) {
134 var id = $(element).addClass('viz-facade-loaded').attr('id');
135 setTimeout(function(){
136 // Add a short delay between each chart to avoid overloading the browser event loop.
137 showChart(id);
138 }, ( index + 1 ) * 100);
139 }
140 });
141
142 // interate through all charts that are to be lazy-loaded and observe each one.
143 $('div.visualizer-front.visualizer-lazy').each(function(index, element){
144 var id = $(element).attr('id');
145 var limit = $(element).attr('data-lazy-limit');
146 if(!limit){
147 limit = 300;
148 }
149 var target = document.querySelector('#' + id);
150
151 // configure the intersection observer instance
152 var intersectionObserverOptions = {
153 root: null,
154 rootMargin: limit + 'px',
155 threshold: 0
156 };
157
158 var observer = new IntersectionObserver(function(entries) {
159 entries.forEach(function(entry) {
160 if (entry.isIntersecting) {
161 observer.unobserve(target);
162 showChart($(entry.target).attr('id'));
163 }
164 });
165 }, intersectionObserverOptions);
166
167 // start observing.
168 observer.observe(target);
169 });
170 }
171
172 function registerDefaultActions(){
173 $('body').off('visualizer:action:specificchart:defaultprint').on('visualizer:action:specificchart:defaultprint', function(event, v){
174 var iframe = $('<iframe>').attr("name", "print-visualization").attr("id", "print-visualization").css("position", "absolute");
175 iframe.appendTo($('body'));
176 var iframe_doc = iframe.get(0).contentWindow || iframe.get(0).contentDocument.document || iframe.get(0).contentDocument;
177 iframe_doc.document.open();
178 iframe_doc.document.write(v.data);
179 iframe_doc.document.close();
180 setTimeout(function(){
181 window.frames['print-visualization'].focus();
182 window.frames['print-visualization'].print();
183 iframe.remove();
184 }, 500);
185 });
186 }
187 })(jQuery, visualizer);
188
189 (function ($) {
190 $.fn.lock = function () {
191 $(this).each(function () {
192 var $this = $(this);
193 var position = $this.css('position');
194
195 if (!position) {
196 position = 'static';
197 }
198
199 switch (position) {
200 case 'absolute':
201 case 'relative':
202 break;
203 default:
204 $this.css('position', 'relative');
205 break;
206 }
207 $this.data('position', position);
208
209 var width = $this.width(),
210 height = $this.height();
211
212 var locker = $('<div class="locker"></div>');
213 locker.width(width).height(height);
214
215 var loader = $('<div class="locker-loader"></div>');
216 loader.width(width).height(height);
217
218 locker.append(loader);
219 $this.append(locker);
220 $(window).resize(function () {
221 $this.find('.locker,.locker-loader').width($this.width()).height($this.height());
222 });
223 });
224
225 return $(this);
226 };
227
228 $.fn.unlock = function () {
229 $(this).each(function () {
230 $(this).find('.locker').remove();
231 $(this).css('position', $(this).data('position'));
232 });
233
234 return $(this);
235 };
236 })(jQuery);
237