PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.9.2
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.9.2
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
← All changes | js/frame.js +375 -47 3.1.33.9.2 View file →
@@ -1,9 +1,11 @@
1 1 /* global prompt */
2 2 /* global visualizer */
3 3 /* global alert */
4 +/* global confirm */
4 5 /* global ajaxurl */
5 6 /* global CodeMirror */
7 +/* global vizHaveSettingsChanged */
6 8
7 9 (function ($) {
8 10 $(window).on('load', function(){
9 11 // scroll to the selected chart type.
@@ -12,11 +14,35 @@
12 14 }
13 15 });
14 16
15 17 $(document).ready(function () {
16 - // open the correct source tab.
18 + onReady();
19 + });
20 +
21 + function initTabs(){
22 + $( "#sidebar" ).lock();
23 + $( "#viz-tabs" ).tabs({
24 + create: function( event, ui ) {
25 + $(this).addClass('done');
26 + $( "#sidebar" ).unlock();
27 + },
28 + beforeActivate: function( event, ui ) {
29 + // if settings have changed in tab #2 and tab #1 is being activated, warn the user.
30 + if(vizHaveSettingsChanged() && ui.newTab.find( 'a' ).attr( 'id' ).includes('viz-tab-basic')){
31 + return confirm(visualizer.l10n.save_settings);
32 + }
33 + }
34 + });
35 + }
36 +
37 + function onReady() {
38 + initTabs();
39 +
40 + // open the correct source tab/sub-tab.
17 41 var source = $('#visualizer-chart-id').attr('data-chart-source');
18 42 $('li.viz-group.' + source).addClass('open');
43 + $('li.viz-group.' + source + ' span.viz-section-title.' + source).addClass('open');
44 + $('li.viz-group.' + source + ' span.viz-section-title.' + source + '.open').parent().find('div.viz-section-items').show();
19 45
20 46 init_permissions();
21 47
22 48 if(typeof visualizer !== 'undefined' && visualizer.is_pro) {
@@ -23,8 +49,12 @@
23 49 init_db_import();
24 50 init_filter_import();
25 51 }
26 52
53 + init_json_import();
54 +
55 + init_editor_table();
56 +
27 57 // update the manual configuation link to point to the correct chart type.
28 58 var type = $('#visualizer-chart-id').attr('data-chart-type');
29 59 var chart_type_in_api_link = type + 'chart';
30 60 switch (type) {
@@ -43,22 +73,10 @@
43 73 $('.type-label-selected').removeClass('type-label-selected');
44 74 $(this).parent().addClass('type-label-selected');
45 75 });
46 76
47 - $('#vz-chart-settings h2').click(function () {
48 - $("#vz-chart-source").hide();
49 - $("#vz-chart-permissions").removeClass('open').addClass('bottom-fixed');
50 - $(this).parent().removeClass('bottom-fixed').addClass('open');
51 - $("#vz-chart-permissions .viz-group-header").hide();
52 - return false;
53 - });
54 - $('#vz-chart-settings .customize-section-back').click(function () {
55 - $("#vz-chart-source").show();
56 - $(this).parent().parent().removeClass('open').addClass('bottom-fixed');
57 -
58 - return false;
59 - });
60 - $('.viz-group-title').click(function () {
77 + // collapse other open sections of this group
78 + $(document).on('click', '.viz-group-title', function () {
61 79 var parent = $(this).parent();
62 80
63 81 if (parent.hasClass('open')) {
64 82 parent.removeClass('open');
@@ -65,14 +83,32 @@
65 83 } else {
66 84 parent.parent().find('.viz-group.open').removeClass('open');
67 85 parent.addClass('open');
68 86 }
87 +
88 + /*
89 + * if the user wants to perform an action and click that tab to change the source
90 + * and the chart is no longer showing because that particular LHS screen is showing
91 + * e.g. create parameters, import json, db query box etc.
92 + * we need to make sure we cancel the current process WITHOUT saving
93 + * and then show the chart as it was
94 + * let's close the LHS window and show the chart that is hidden
95 + */
96 + $('body').trigger('visualizer:change:action');
69 97 });
98 +
99 + // collapse other open subsections of this section
100 + $(document).on('click', '.viz-section-title', function () {
101 + var grandparent = $(this).parent().parent();
102 + grandparent.find('.viz-section-title.open ~ .viz-section-items').hide();
103 + grandparent.find('.viz-section-title.open').removeClass('open');
104 + });
105 +
70 106 $('#view-remote-file').click(function () {
71 - var url = $(this).parent().find('#remote-data').val();
107 + var url = $(this).parent().find('#vz-schedule-url').val();
72 108
73 109 if (url !== '') {
74 - if (/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(url)) {
110 + if (url.indexOf('localhost') !== -1 || /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(url)) {
75 111 if (url.substr(url.length - 8) === '/pubhtml') {
76 112 url = url.substring(0, url.length - 8) + '/export?format=csv';
77 113 }
78 114
@@ -91,17 +127,17 @@
91 127 $(this).parent().submit();
92 128 }
93 129 });
94 130
95 - $('#thehole').load(function () {
131 + $( window ).on( 'load', function() {
96 132 $('#canvas').unlock();
97 - });
133 + } );
98 134
99 - $('.viz-section-title').click(function () {
135 + $(document).on('click', '.viz-section-title', function () {
100 136 $(this).toggleClass('open').parent().find('.viz-section-items').toggle();
101 137 });
102 138
103 - $('.more-info').click(function () {
139 + $(document).on('click', '.more-info', function () {
104 140 $(this).parent().find('.viz-section-description:first').toggle();
105 141 return false;
106 142 });
107 143
@@ -108,40 +144,41 @@
108 144 $('#cancel-button').click(function () {
109 145 $('#cancel-form').submit();
110 146 });
111 147
112 - });
148 + init_type_vs_library();
113 149
114 - function init_permissions(){
115 - $('#vz-chart-permissions h2').click(function () {
116 - $("#vz-chart-source").hide();
117 - $("#vz-chart-permissions .viz-group-header").show();
118 - $("#vz-chart-settings").removeClass('open').addClass('bottom-fixed');
150 + $('.viz-abort').on('click', function(e){
151 + e.preventDefault();
152 + window.parent.postMessage('visualizer:mediaframe:close', '*');
153 + });
119 154
120 - $('#settings-button').click(function(e) {
121 - e.preventDefault();
122 - $('#permissions-form').submit();
123 - $('#settings-form').submit();
124 - });
155 + }
125 156
126 - $(this).parent().removeClass('bottom-fixed').addClass('open');
127 -
128 - return false;
157 + function init_type_vs_library() {
158 + var $data = $('select.viz-select-library').attr('data-type-vs-library');
159 + if(typeof $data === 'undefined' || $data.length === 0){
160 + return;
161 + }
162 + var $typeVsLibrary = JSON.parse( $('select.viz-select-library').attr('data-type-vs-library') );
163 + // disable all unsupported libraries for the chart type.
164 + $('input.type-radio').on('click', function(){
165 + enable_libraries_for($(this).val(), $typeVsLibrary);
129 166 });
130 - $('#vz-chart-permissions .customize-section-back').click(function () {
131 - $("#vz-chart-source").show();
132 167
133 - $("#vz-chart-permissions .viz-group-header").hide();
134 - $('#settings-button').click(function(e) {
135 - e.preventDefault();
136 - $('#settings-form').submit();
137 - });
168 + enable_libraries_for($('input.type-radio:checked').val(), $typeVsLibrary);
169 + }
138 170
139 - $(this).parent().parent().removeClass('open').addClass('bottom-fixed');
140 -
141 - return false;
171 + function enable_libraries_for($type, $typeVsLibrary) {
172 + $('select.viz-select-library option').addClass('disabled').attr('disabled', 'disabled');
173 + var $libs = $typeVsLibrary[$type];
174 + $.each($libs, function( i, $lib ) {
175 + $('select.viz-select-library option[value="' + $lib + '"]').removeClass('disabled').removeAttr('disabled');
142 176 });
177 + $('select.viz-select-library').val( $('select.viz-select-library option:not(.disabled)').val() );
178 + }
143 179
180 + function init_permissions(){
144 181 $('.visualizer-permission').chosen({
145 182 width : '50%',
146 183 search_contains : true
147 184 });
@@ -219,8 +256,20 @@
219 256 // from the editor. Let's force this.
220 257 $('body').on('visualizer:db:query:update', function(event, data){
221 258 cm.save();
222 259 });
260 +
261 + // clear the editor.
262 + $('body').on('visualizer:db:query:setvalue', function(event, data){
263 + cm.setValue(data.value);
264 + cm.clearHistory();
265 + cm.refresh();
266 + });
267 +
268 + // set an option at runtime?
269 + $('body').on('visualizer:db:query:changeoption', function(event, data){
270 + cm.setOption(data.name, data.value);
271 + });
223 272 }
224 273
225 274 function init_filter_import() {
226 275 $( '#db-filter-save-button' ).on( 'click', function(){
@@ -267,8 +316,18 @@
267 316 });
268 317 });
269 318
270 319 $( '#db-chart-button' ).on( 'click', function(){
320 +
321 + $('body').off('visualizer:change:action').on('visualizer:change:action', function(e){
322 + var filter_button = $( '#db-chart-button' );
323 + $( '#visualizer-db-query' ).css("z-index", "-1").hide();
324 + filter_button.val( filter_button.attr( 'data-t-chart' ) );
325 + filter_button.html( filter_button.attr( 'data-t-chart' ) );
326 + filter_button.attr( 'data-current', 'chart' );
327 + $( '#canvas' ).css("z-index", "1").show();
328 + });
329 +
271 330 $('#content').css('width', 'calc(100% - 300px)');
272 331 if( $(this).attr( 'data-current' ) === 'chart'){
273 332 $(this).val( $(this).attr( 'data-t-filter' ) );
274 333 $(this).html( $(this).attr( 'data-t-filter' ) );
@@ -289,11 +348,280 @@
289 348 }
290 349 } );
291 350
292 351 $( '#db-chart-save-button' ).on( 'click', function(){
293 - $('#viz-db-wizard-params').val($('#db-query-form').serialize());
294 - $('#vz-db-wizard').submit();
352 + // submit only if a query has been provided.
353 + if($('#db-query-form .visualizer-db-query').val().length > 0){
354 + $('#viz-db-wizard-params').val($('#db-query-form').serialize());
355 + $('#vz-db-wizard').submit();
356 + }else{
357 + $('#canvas').unlock();
358 + }
295 359 });
360 + }
361 +
362 + function init_json_import(){
363 + if(typeof visualizer === 'undefined'){
364 + return;
365 + }
366 +
367 + var regex = new RegExp(visualizer.json_tag_separator, 'g');
368 +
369 + $( '#visualizer-json-screen' ).css("z-index", "-1").hide();
370 + $('.visualizer-json-form').accordion({
371 + heightStyle: 'content',
372 + active: 0
373 + });
374 + $('.visualizer-json-subform').accordion({
375 + heightStyle: 'content',
376 + active: false,
377 + collapsible: true
378 + });
379 +
380 + // open the accordions by default if they are indicated with the 'open' class.
381 + $('.visualizer-json-subform .viz-substep.open').each(function(i, e){
382 + $('.visualizer-json-subform').accordion( "option", "active", i );
383 + });
384 +
385 + // toggle between chart and create/modify parameters
386 + $( '#json-chart-button, #woo-chart-button' ).on( 'click', function(){
387 +
388 + $('body').off('visualizer:change:action').on('visualizer:change:action', function(e){
389 + var filter_button = $( '#json-chart-button, #woo-chart-button' );
390 + $( '#visualizer-json-screen' ).css("z-index", "-1").hide();
391 + filter_button.val( filter_button.attr( 'data-t-chart' ) );
392 + filter_button.html( filter_button.attr( 'data-t-chart' ) );
393 + filter_button.attr( 'data-current', 'chart' );
394 + $( '#canvas' ).css("z-index", "1").show();
395 + $( '#vz-import-woo-report' ).find( 'select, input' ).removeAttr( 'disabled' );
396 + });
397 +
398 + if ( 'json-chart-button' === $( this ).attr( 'id' ) ) {
399 + $( '#vz-import-woo-report' ).find( 'select, input' ).attr( 'disabled', true );
400 + } else {
401 + $( '#vz-import-woo-report' ).find( 'select, input' ).removeAttr( 'disabled' );
402 + }
403 + $('#content').css('width', 'calc(100% - 100px)');
404 + if( $(this).attr( 'data-current' ) === 'chart'){
405 + // toggle from chart to LHS form
406 + $(this).val( $(this).attr( 'data-t-filter' ) );
407 + $(this).html( $(this).attr( 'data-t-filter' ) );
408 + $(this).attr( 'data-current', 'filter' );
409 + $( '.visualizer-editor-lhs' ).hide();
410 + $( '#visualizer-json-screen' ).css("z-index", "9999").show();
411 + if ( 'woo-chart-button' === $( this ).attr( 'id' ) && '' !== $( '#vz-woo-source:visible' ).val() ) {
412 + $( '#vz-import-json-url' ).val( visualizer.rest_base + $( '#vz-woo-source' ).val() ).attr( 'readonly', true );
413 + } else {
414 + if ( 'undefined' !== $( '#vz-import-json-url' ).attr( 'readonly' ) ) {
415 + $( '#vz-import-json-url' ).val( '' ).removeAttr( 'readonly' ).removeAttr( 'value' );
416 + $('#json-endpoint-form')[0].reset();
417 + $('.visualizer-json-form h3.viz-step:not(.step1)').addClass('ui-state-disabled');
418 + }
419 + }
420 + $( '#canvas' ).hide();
421 + }else{
422 + // toggle from LHS form to chart
423 + $( '#json-conclude-form' ).trigger('submit');
424 + }
425 + } );
426 +
427 + $('body').on('visualizer:json:form:submit', function() {
428 + var filter_button = $( '#json-chart-button, #woo-chart-button' );
429 + $( '#visualizer-json-screen' ).css("z-index", "-1").hide();
430 + $('#canvas').lock();
431 + filter_button.val( filter_button.attr( 'data-t-chart' ) );
432 + filter_button.html( filter_button.attr( 'data-t-chart' ) );
433 + filter_button.attr( 'data-current', 'chart' );
434 + end_ajax( $( '#visualizer-json-screen' ) );
435 + $( '#canvas' ).removeClass('visualizer-chart-loaded').css("z-index", "1").show();
436 + });
437 +
438 +
439 + // fetch the roots for the provided endpoint
440 + $( '#visualizer-json-fetch' ).on( 'click', function(e){
441 + e.preventDefault();
442 + $('.visualizer-json-form').accordion( 'option', 'active', 0 );
443 + $('.visualizer-json-form h3.viz-step:not(.step1)').addClass('ui-state-disabled');
444 + $('.json-table').html('');
445 + start_ajax( $( '#visualizer-json-screen' ) );
446 + $.ajax({
447 + url : ajaxurl,
448 + method : 'post',
449 + data : {
450 + 'action' : visualizer.ajax['actions']['json_get_roots'],
451 + 'security' : visualizer.ajax['nonces']['json_get_roots'],
452 + 'params' : $('#json-endpoint-form').serialize()
453 + },
454 + success : function(data){
455 + if(data.success){
456 + $('#vz-import-json-root').empty();
457 + $.each(data.data.roots, function(i, name){
458 + $('#vz-import-json-root').append('<option value="' + name + '">' + name.replace(regex, visualizer.json_tag_separator_view) + '</option>');
459 + });
460 + $('#json-root-form').fadeIn('medium');
461 + json_accordion_activate(1, true);
462 + }else{
463 + alert(data.data.msg);
464 + }
465 + },
466 + complete: function(){
467 + end_ajax($('#visualizer-json-screen'));
468 + }
469 + });
470 + });
471 +
472 + // fetch the data for the chosen root
473 + $( '#visualizer-json-parse' ).on( 'click', function(e){
474 + e.preventDefault();
475 + $('.visualizer-json-form h3.viz-step:not(.step1):not(.step2)').addClass('ui-state-disabled');
476 + $('.json-table').html('');
477 + start_ajax( $( '#visualizer-json-screen' ) );
478 + $.ajax({
479 + url : ajaxurl,
480 + method : 'post',
481 + data : {
482 + 'action' : visualizer.ajax['actions']['json_get_data'],
483 + 'security' : visualizer.ajax['nonces']['json_get_data'],
484 + 'params' : $('#json-root-form, #json-endpoint-form').serialize()
485 + },
486 + success : function(data){
487 + if(data.success){
488 + $('#vz-import-json-paging option:not(.static)').remove();
489 + if(data.data.paging.length > 0){
490 + var $template = $('#vz-import-json-paging').attr('data-template');
491 + $.each(data.data.paging, function(i, name){
492 + var display = name.replace(regex, visualizer.json_tag_separator_view);
493 + display = $template.replace('?', display);
494 + $('#vz-import-json-paging').append('<option value="' + name + '">' + display + '</option>');
495 + });
496 + $('.json-pagination').show();
497 + }
498 + $('#json-conclude-form .json-table').html(data.data.table);
499 +
500 + var $table = create_editor_table( '#json-conclude-form' );
501 +
502 + json_accordion_activate(3, true);
503 + json_accordion_activate(2, false);
504 + $table.columns.adjust().draw();
505 + }else{
506 + alert(data.data.msg);
507 + }
508 + },
509 + complete: function(){
510 + end_ajax($('#visualizer-json-screen'));
511 + }
512 + });
513 + });
514 +
515 + // when the data is set and the chart is updated, toggle the screen so that the chart is shown
516 + $('#json-conclude-form').on( 'submit', function(e){
517 + // at least one column has to be selected as non-excluded.
518 + var count_selected = 0;
519 + $('select.viz-select-data-type').each(function(i, element){
520 + if($(element).prop('selectedIndex') > 0){
521 + count_selected++;
522 + }
523 + });
524 + if(count_selected === 0){
525 + alert(visualizer.l10n.select_columns);
526 + return false;
527 + }
528 +
529 + // populate the form elements that are in the other tabs.
530 + $('#json-conclude-form-helper .json-form-element, #json-endpoint-form .json-form-element, #json-root-form .json-form-element, #vz-import-json .json-form-element, #vz-import-woo-report .json-form-element:not(:disabled)').each(function(x, y){
531 + $('#json-conclude-form').append('<input type="hidden" name="' + y.name + '" value="' + y.value + '">');
532 + });
533 +
534 + $('body').trigger('visualizer:json:form:submit');
535 + });
536 +
537 + // update the schedule
538 + $('#json-chart-save-button, #woo-chart-save-button').on('click', function(e){
539 + e.preventDefault();
540 + $('#canvas').lock();
541 + var btnID = jQuery( this ).attr( 'id' );
542 + $.ajax({
543 + url : ajaxurl,
544 + method : 'post',
545 + data : {
546 + 'action' : visualizer.ajax['actions']['json_set_schedule'],
547 + 'security' : visualizer.ajax['nonces']['json_set_schedule'],
548 + 'chart' : $('#vz-json-time, #vz-woo-time').attr('data-chart'),
549 + 'time' : $('#vz-json-time, #vz-woo-time').val(),
550 + 'is_woocommerce_report': 'woo-chart-save-button' === btnID,
551 + },
552 + success : function(data){
553 + // do nothing.
554 + },
555 + complete: function(){
556 + $('#canvas').unlock();
557 + }
558 + });
559 + });
560 +
561 + // Select WooCommerce report endpoint.
562 + $( '#vz-woo-source' ).on( 'click', function( e ) {
563 + // Trigger change action.
564 + $( 'body' ).trigger( 'visualizer:change:action' );
565 +
566 + if ( '' !== $( this ).val() ) {
567 + $( '#woo-chart-button, #woo-chart-save-button' ).removeAttr( 'disabled' );
568 + } else {
569 + $( '#woo-chart-button, #woo-chart-save-button' ).attr( 'disabled', true );
570 + }
571 + } );
572 +
573 + }
574 +
575 + function init_editor_table() {
576 + $('body').on('visualizer:db:editor:table:init', function(event, data){
577 + var $table = create_editor_table('.viz-table-editor', data.config);
578 + $('body').on('visualizer:db:editor:table:redraw', function(event, data){
579 + $table.draw();
580 + });
581 + });
582 + }
583 +
584 + function create_editor_table(element, config) {
585 + var settings = {
586 + paging: false,
587 + searching: false,
588 + ordering: false,
589 + select: false,
590 + scrollX: "100%",
591 + scrollY: "400px",
592 + info: false,
593 + colReorder: {
594 + fixedColumnsLeft: 1
595 + }
596 + };
597 +
598 + // show column visibility button only when more than 6 columns are found (including the Label column)
599 + if($(element + ' table.viz-editor-table thead tr th').length > 6){
600 + $.extend( settings, {
601 + dom: 'Bt',
602 + buttons: [
603 + {
604 + extend: 'colvis',
605 + columns: ':gt(0)',
606 + collectionLayout: 'four-column'
607 + }
608 + ]
609 + } );
610 + }
611 + if(config){
612 + $.extend( settings, config );
613 + }
614 +
615 + var $table = $(element + ' .viz-editor-table').DataTable(settings);
616 + return $table;
617 + }
618 +
619 + function json_accordion_activate($step, $activate){
620 + $('.visualizer-json-form h3.viz-step.step' + ( $step + 1 )).removeClass('ui-state-disabled');
621 + if($activate){
622 + $('.visualizer-json-form').accordion( 'option', 'active', $step );
623 + }
296 624 }
297 625
298 626 function start_ajax(element){
299 627 element.lock();