PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.2.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.2.0
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-datatables.js

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

366 lines 11.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
4 (function($) {
5 var all_charts;
6 // so that we know which charts belong to our library.
7 var rendered_charts = [];
8
9 function renderChart(id, v) {
10 renderSpecificChart(id, all_charts[id], v);
11 }
12
13 function renderSpecificChart(id, chart, v) {
14 var render, container, series, data, table, settings, i, j, row, date, axis, property, format, formatter, type, rows, cols;
15
16 if(chart.library !== 'datatables'){
17 return;
18 }
19 rendered_charts[id] = 'yes';
20
21 series = chart.series;
22 data = chart.data;
23
24 container = document.getElementById(id);
25 if (container == null) {
26 return;
27 }
28
29 if($('#' + id).find('table.visualizer-data-table').length > 0){
30 $('#' + id).empty();
31 }
32 $('#' + id).append($('<table class="dataTable visualizer-data-table table table-striped"></table>'));
33
34 settings = {
35 destroy: true,
36 paging: false,
37 searching: false,
38 ordering: true,
39 select: false,
40 lengthChange: false,
41 buttons: {
42 buttons: [{
43 extend: 'print',
44 text: '',
45 title: ''
46 }]
47 },
48 dom: 'Bfrtip',
49 };
50
51 if(typeof v.page_type !== 'undefined'){
52 switch(v.page_type){
53 case 'post':
54 case 'library':
55 $.extend( settings, {
56 scrollX: 150,
57 scrollY: 180,
58 scrollCollapse: true
59 } );
60 break;
61 case 'frontend':
62 case 'chart':
63 // empty.
64 break;
65 }
66 }
67
68 var select = {
69 info: false
70 };
71 // we cannot use { select } below because https://github.com/Codeinwp/visualizer/issues/357
72 $.extend( settings, { info: false } ); // jshint ignore:line
73
74 var stripe = ['', ''];
75
76 // in preview mode, cssClassNames will not exist when a color is changed.
77 if(typeof chart.settings['cssClassNames'] !== 'undefined'){
78 if(typeof chart.settings['cssClassNames']['oddTableRow'] !== 'undefined'){
79 stripe[0] = chart.settings['cssClassNames']['oddTableRow'];
80 }
81
82 if(typeof chart.settings['cssClassNames']['evenTableRow'] !== 'undefined'){
83 stripe[1] = chart.settings['cssClassNames']['evenTableRow'];
84 }
85
86 if(typeof chart.settings['cssClassNames']['selectedTableItem'] !== 'undefined'){
87 $.extend( select, {
88 className: chart.settings['cssClassNames']['selectedTableItem']
89 } );
90 }
91 }
92
93 for (i in chart.settings) {
94 var valoo = chart.settings[i];
95
96 // remove the type suffix to get the name of the setting.
97 i = i.replace(/_bool/g, '').replace(/_int/g, '');
98
99 switch(valoo){
100 case 'true':
101 valoo = true;
102 break;
103 case 'false':
104 valoo = false;
105 break;
106 default:
107 if(parseInt(valoo) > 0){
108 valoo = parseInt(valoo);
109 }
110 }
111
112 // if the setting name has an '_' this means it is a sub-setting e.g. select_items means { select: { items: ... } }.
113 var array = i.split('_');
114 if(array.length === 2){
115 i = eval( array[0] ); // jshint ignore:line
116 i[ array[1] ] = valoo;
117 }
118 settings[i] = valoo;
119 }
120
121 $.extend( $.fn.dataTable.defaults, settings );
122
123 cols = [];
124 for (j = 0; j < series.length; j++) {
125 type = series[j].type;
126 switch(type){
127 case 'number':
128 type = 'num';
129 break;
130 case 'date':
131 case 'datetime':
132 case 'timeofday':
133 type = 'date';
134 break;
135 }
136
137 render = addRenderer(series[j].type, settings.series, j);
138
139 var col = { title: series[j].label, data: series[j].label, type: type, render: render };
140 if(typeof chart.settings['cssClassNames'] !== 'undefined' && typeof chart.settings['cssClassNames']['tableCell'] !== 'undefined'){
141 col['className'] = chart.settings['cssClassNames']['tableCell'];
142 }
143 cols.push(col);
144 }
145
146 rows = [];
147 for (i = 0; i < data.length; i++) {
148 row = [];
149 for (j = 0; j < series.length; j++) {
150 var datum = data[i][j];
151 row[ series[j].label ] = datum;
152 }
153 rows.push(row);
154 }
155
156 // allow user to extend the settings.
157 $('body').trigger('visualizer:chart:settings:extend', {id: id, chart: chart, settings: settings});
158
159 table = $('#' + id + ' table.visualizer-data-table');
160 table.DataTable( {
161 data: rows,
162 columns: cols,
163 stripeClasses: stripe,
164 } );
165 $('.loader').remove();
166 }
167
168 function addRenderer(type, series, index){
169 var render = null;
170 if(typeof series === 'undefined' || typeof series[index] === 'undefined' || typeof series[index].format === 'undefined' ){
171 return render;
172 }
173
174 series = series[index];
175
176 /* jshint ignore:start */
177 switch(type){
178 case 'number':
179 var parts = ['', '', '', '', ''];
180 if(typeof series.format.thousands !== ''){
181 parts[0] = series.format.thousands;
182 }
183 if(typeof series.format.decimal !== ''){
184 parts[1] = series.format.decimal;
185 }
186 if(typeof series.format.precision !== ''){
187 parts[2] = series.format.precision;
188 }
189 if(typeof series.format.prefix !== ''){
190 parts[3] = series.format.prefix;
191 }
192 if(typeof series.format.suffix !== ''){
193 parts[4] = series.format.suffix;
194 }
195 render = $.fn.dataTable.render.number(parts[0], parts[1], parts[2], parts[3], parts[4]);
196 break;
197 case 'date':
198 case 'datetime':
199 case 'timeofday':
200 if(typeof series.format.to !== 'undefined' && typeof series.format.from !== 'undefined' && series.format.from != '' && series.format.to !== ''){
201 render = $.fn.dataTable.render.moment(series.format.from, series.format.to);
202 }
203 break;
204 }
205 /* jshint ignore:end */
206 return render;
207 }
208
209 function render(v) {
210 for (var id in (all_charts || {})) {
211 renderChart(id, v);
212 }
213 }
214
215 if(typeof visualizer !== 'undefined'){
216 // called while updating the chart.
217 visualizer.update = function(){
218 renderChart('canvas', visualizer);
219 };
220 }
221
222 $('body').on('visualizer:render:chart:start', function(event, v){
223 all_charts = v.charts;
224 render(v);
225 });
226
227 $('body').on('visualizer:render:specificchart:start', function(event, v){
228 renderSpecificChart(v.id, v.chart, v.v);
229 });
230
231 // front end actions
232 $('body').on('visualizer:action:specificchart', function(event, v){
233 switch(v.action){
234 case 'print':
235 var id = v.id;
236 if(typeof rendered_charts[id] === 'undefined'){
237 return;
238 }
239 $('#' + id + ' .buttons-print').trigger('click');
240 break;
241 }
242 });
243
244 })(jQuery);
245
246
247 /* jshint ignore:start */
248
249 /**
250 * Date / time formats often from back from server APIs in a format that you
251 * don't wish to display to your end users (ISO8601 for example). This rendering
252 * helper can be used to transform any source date / time format into something
253 * which can be easily understood by your users when reading the table, and also
254 * by DataTables for sorting the table.
255 *
256 * The [MomentJS library](http://momentjs.com/) is used to accomplish this and
257 * you simply need to tell it which format to transfer from, to and specify a
258 * locale if required.
259 *
260 * This function should be used with the `dt-init columns.render` configuration
261 * option of DataTables.
262 *
263 * It accepts one, two or three parameters:
264 *
265 * $.fn.dataTable.render.moment( to );
266 * $.fn.dataTable.render.moment( from, to );
267 * $.fn.dataTable.render.moment( from, to, locale );
268 *
269 * Where:
270 *
271 * * `to` - the format that will be displayed to the end user
272 * * `from` - the format that is supplied in the data (the default is ISO8601 -
273 * `YYYY-MM-DD`)
274 * * `locale` - the locale which MomentJS should use - the default is `en`
275 * (English).
276 *
277 * @name datetime
278 * @summary Convert date / time source data into one suitable for display
279 * @author [Allan Jardine](http://datatables.net)
280 * @requires DataTables 1.10+
281 *
282 * @example
283 * // Convert ISO8601 dates into a simple human readable format
284 * $('#example').DataTable( {
285 * columnDefs: [ {
286 * targets: 1,
287 * render: $.fn.dataTable.render.moment( 'Do MMM YYYYY' )
288 * } ]
289 * } );
290 *
291 * @example
292 * // Specify a source format - in this case a unix timestamp
293 * $('#example').DataTable( {
294 * columnDefs: [ {
295 * targets: 2,
296 * render: $.fn.dataTable.render.moment( 'X', 'Do MMM YY' )
297 * } ]
298 * } );
299 *
300 * @example
301 * // Specify a source format and locale
302 * $('#example').DataTable( {
303 * columnDefs: [ {
304 * targets: 2,
305 * render: $.fn.dataTable.render.moment( 'YYYY/MM/DD', 'Do MMM YY', 'fr' )
306 * } ]
307 * } );
308 */
309 (function( factory ) {
310 "use strict";
311
312 if ( typeof define === 'function' && define.amd ) {
313 // AMD
314 define( ['jquery'], function ( $ ) {
315 return factory( $, window, document );
316 } );
317 }
318 else if ( typeof exports === 'object' ) {
319 // CommonJS
320 module.exports = function (root, $) {
321 if ( ! root ) {
322 root = window;
323 }
324
325 if ( ! $ ) {
326 $ = typeof window !== 'undefined' ?
327 require('jquery') :
328 require('jquery')( root );
329 }
330
331 return factory( $, root, root.document );
332 };
333 }
334 else {
335 // Browser
336 factory( jQuery, window, document );
337 }
338 }
339 (function( $, window, document ) {
340
341
342 $.fn.dataTable.render.moment = function ( from, to, locale ) {
343 // Argument shifting
344 if ( arguments.length === 1 ) {
345 locale = 'en';
346 to = from;
347 from = 'YYYY-MM-DD';
348 }
349 else if ( arguments.length === 2 ) {
350 locale = 'en';
351 }
352
353 return function ( d, type, row ) {
354 if (!d) return null;
355 var m = window.moment( d, from, locale, true );
356
357 // Order and type get a number value from Moment, everything else
358 // sees the rendered value
359 return m.format( type === 'sort' || type === 'type' ? 'x' : to );
360 };
361 };
362
363
364 }));
365
366 /* jshint ignore:end */