PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.10.7
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.10.7
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 +383 -48 3.1.03.10.7 View file →
@@ -1,12 +1,14 @@
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 - $(window).load(function(){
10 + $(window).on('load', function(){
9 11 // scroll to the selected chart type.
10 12 if($('label.type-label.type-label-selected').length > 0) {
11 13 $('label.type-label.type-label-selected')[0].scrollIntoView();
12 14 }
@@ -12,18 +14,47 @@
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 49 init_db_import();
50 + init_filter_import();
24 51 }
25 52
53 + init_json_import();
54 +
55 + init_editor_table();
56 +
26 57 // update the manual configuation link to point to the correct chart type.
27 58 var type = $('#visualizer-chart-id').attr('data-chart-type');
28 59 var chart_type_in_api_link = type + 'chart';
29 60 switch (type) {
@@ -42,22 +73,10 @@
42 73 $('.type-label-selected').removeClass('type-label-selected');
43 74 $(this).parent().addClass('type-label-selected');
44 75 });
45 76
46 - $('#vz-chart-settings h2').click(function () {
47 - $("#vz-chart-source").hide();
48 - $("#vz-chart-permissions").removeClass('open').addClass('bottom-fixed');
49 - $(this).parent().removeClass('bottom-fixed').addClass('open');
50 - $("#vz-chart-permissions .viz-group-header").hide();
51 - return false;
52 - });
53 - $('#vz-chart-settings .customize-section-back').click(function () {
54 - $("#vz-chart-source").show();
55 - $(this).parent().parent().removeClass('open').addClass('bottom-fixed');
56 -
57 - return false;
58 - });
59 - $('.viz-group-title').click(function () {
77 + // collapse other open sections of this group
78 + $(document).on('click', '.viz-group-title', function () {
60 79 var parent = $(this).parent();
61 80
62 81 if (parent.hasClass('open')) {
63 82 parent.removeClass('open');
@@ -64,14 +83,32 @@
64 83 } else {
65 84 parent.parent().find('.viz-group.open').removeClass('open');
66 85 parent.addClass('open');
67 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');
68 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 +
69 106 $('#view-remote-file').click(function () {
70 - var url = $(this).parent().find('#remote-data').val();
107 + var url = $(this).parent().find('#vz-schedule-url').val();
71 108
72 109 if (url !== '') {
73 - 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)) {
74 111 if (url.substr(url.length - 8) === '/pubhtml') {
75 112 url = url.substring(0, url.length - 8) + '/export?format=csv';
76 113 }
77 114
@@ -90,17 +127,17 @@
90 127 $(this).parent().submit();
91 128 }
92 129 });
93 130
94 - $('#thehole').load(function () {
131 + $( window ).on( 'load', function() {
95 132 $('#canvas').unlock();
96 - });
133 + } );
97 134
98 - $('.viz-section-title').click(function () {
135 + $(document).on('click', '.viz-section-title', function () {
99 136 $(this).toggleClass('open').parent().find('.viz-section-items').toggle();
100 137 });
101 138
102 - $('.more-info').click(function () {
139 + $(document).on('click', '.more-info', function () {
103 140 $(this).parent().find('.viz-section-description:first').toggle();
104 141 return false;
105 142 });
106 143
@@ -107,40 +144,41 @@
107 144 $('#cancel-button').click(function () {
108 145 $('#cancel-form').submit();
109 146 });
110 147
111 - });
148 + init_type_vs_library();
112 149
113 - function init_permissions(){
114 - $('#vz-chart-permissions h2').click(function () {
115 - $("#vz-chart-source").hide();
116 - $("#vz-chart-permissions .viz-group-header").show();
117 - $("#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 + });
118 154
119 - $('#settings-button').click(function(e) {
120 - e.preventDefault();
121 - $('#permissions-form').submit();
122 - $('#settings-form').submit();
123 - });
155 + }
124 156
125 - $(this).parent().removeClass('bottom-fixed').addClass('open');
126 -
127 - 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);
128 166 });
129 - $('#vz-chart-permissions .customize-section-back').click(function () {
130 - $("#vz-chart-source").show();
131 167
132 - $("#vz-chart-permissions .viz-group-header").hide();
133 - $('#settings-button').click(function(e) {
134 - e.preventDefault();
135 - $('#settings-form').submit();
136 - });
168 + enable_libraries_for($('input.type-radio:checked').val(), $typeVsLibrary);
169 + }
137 170
138 - $(this).parent().parent().removeClass('open').addClass('bottom-fixed');
139 -
140 - 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');
141 176 });
177 + $('select.viz-select-library').val( $('select.viz-select-library option:not(.disabled)').val() );
178 + }
142 179
180 + function init_permissions(){
143 181 $('.visualizer-permission').chosen({
144 182 width : '50%',
145 183 search_contains : true
146 184 });
@@ -218,10 +256,28 @@
218 256 // from the editor. Let's force this.
219 257 $('body').on('visualizer:db:query:update', function(event, data){
220 258 cm.save();
221 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 + });
222 272 }
223 273
274 + function init_filter_import() {
275 + $( '#db-filter-save-button' ).on( 'click', function(){
276 + $('#vz-filter-wizard').submit();
277 + });
278 + }
279 +
224 280 function init_db_import(){
225 281 $( '#visualizer-db-query' ).css("z-index", "-1").hide();
226 282
227 283 init_db_import_component();
@@ -260,8 +316,18 @@
260 316 });
261 317 });
262 318
263 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 +
264 330 $('#content').css('width', 'calc(100% - 300px)');
265 331 if( $(this).attr( 'data-current' ) === 'chart'){
266 332 $(this).val( $(this).attr( 'data-t-filter' ) );
267 333 $(this).html( $(this).attr( 'data-t-filter' ) );
@@ -282,11 +348,280 @@
282 348 }
283 349 } );
284 350
285 351 $( '#db-chart-save-button' ).on( 'click', function(){
286 - $('#viz-db-wizard-params').val($('#db-query-form').serialize());
287 - $('#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 + }
288 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 + }
289 624 }
290 625
291 626 function start_ajax(element){
292 627 element.lock();