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

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

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