PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.8
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.8
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 +494 -41 3.0.73.4.8 View file →
@@ -1,31 +1,82 @@
1 1 /* global prompt */
2 2 /* global visualizer */
3 3 /* global alert */
4 +/* global confirm */
5 +/* global ajaxurl */
6 +/* global CodeMirror */
7 +/* global vizHaveSettingsChanged */
4 8
5 9 (function ($) {
10 + $(window).on('load', function(){
11 + // scroll to the selected chart type.
12 + if($('label.type-label.type-label-selected').length > 0) {
13 + $('label.type-label.type-label-selected')[0].scrollIntoView();
14 + }
15 + });
16 +
6 17 $(document).ready(function () {
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.context).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.
41 + var source = $('#visualizer-chart-id').attr('data-chart-source');
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();
45 +
7 46 init_permissions();
8 47
48 + if(typeof visualizer !== 'undefined' && visualizer.is_pro) {
49 + init_db_import();
50 + init_filter_import();
51 + }
52 +
53 + init_json_import();
54 +
55 + init_editor_table();
56 +
57 + // update the manual configuation link to point to the correct chart type.
58 + var type = $('#visualizer-chart-id').attr('data-chart-type');
59 + var chart_type_in_api_link = type + 'chart';
60 + switch (type) {
61 + case "gauge":
62 + case "table":
63 + case "timeline":
64 + chart_type_in_api_link = type;
65 + break;
66 + }
67 +
68 + if($('span.viz-gvlink').length > 0) {
69 + $('span.viz-gvlink').html($('span.viz-gvlink').html().replace('?', chart_type_in_api_link));
70 + }
71 +
9 72 $('.type-radio').change(function () {
10 73 $('.type-label-selected').removeClass('type-label-selected');
11 74 $(this).parent().addClass('type-label-selected');
12 75 });
13 76
14 - $('#vz-chart-settings h2').click(function () {
15 - $("#vz-chart-source").hide();
16 - $("#vz-chart-permissions").removeClass('open').addClass('bottom-fixed');
17 - $(this).parent().removeClass('bottom-fixed').addClass('open');
18 - $("#vz-chart-permissions .viz-group-header").hide();
19 - return false;
20 - });
21 - $('#vz-chart-settings .customize-section-back').click(function () {
22 - $("#vz-chart-source").show();
23 - $(this).parent().parent().removeClass('open').addClass('bottom-fixed');
24 -
25 - return false;
26 - });
27 - $('.viz-group-title').click(function () {
77 + // collapse other open sections of this group
78 + $(document).on('click', '.viz-group-title', function () {
28 79 var parent = $(this).parent();
29 80
30 81 if (parent.hasClass('open')) {
31 82 parent.removeClass('open');
@@ -32,14 +83,32 @@
32 83 } else {
33 84 parent.parent().find('.viz-group.open').removeClass('open');
34 85 parent.addClass('open');
35 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');
36 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 +
37 106 $('#view-remote-file').click(function () {
38 - var url = $(this).parent().find('#remote-data').val();
107 + var url = $(this).parent().find('#vz-schedule-url').val();
39 108
40 109 if (url !== '') {
41 - 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)) {
42 111 if (url.substr(url.length - 8) === '/pubhtml') {
43 112 url = url.substring(0, url.length - 8) + '/export?format=csv';
44 113 }
45 114
@@ -62,49 +131,54 @@
62 131 $('#thehole').load(function () {
63 132 $('#canvas').unlock();
64 133 });
65 134
66 - $('.viz-section-title').click(function () {
135 + $(document).on('click', '.viz-section-title', function () {
67 136 $(this).toggleClass('open').parent().find('.viz-section-items').toggle();
68 137 });
69 138
70 - $('.more-info').click(function () {
139 + $(document).on('click', '.more-info', function () {
71 140 $(this).parent().find('.viz-section-description:first').toggle();
72 141 return false;
73 142 });
74 143
75 - });
144 + $('#cancel-button').click(function () {
145 + $('#cancel-form').submit();
146 + });
76 147
77 - function init_permissions(){
78 - $('#vz-chart-permissions h2').click(function () {
79 - $("#vz-chart-source").hide();
80 - $("#vz-chart-permissions .viz-group-header").show();
81 - $("#vz-chart-settings").removeClass('open').addClass('bottom-fixed');
148 + init_type_vs_library();
82 149
83 - $('#settings-button').click(function(e) {
84 - e.preventDefault();
85 - $('#permissions-form').submit();
86 - $('#settings-form').submit();
87 - });
150 + $('.viz-abort').on('click', function(e){
151 + e.preventDefault();
152 + window.parent.postMessage('visualizer:mediaframe:close', '*');
153 + });
88 154
89 - $(this).parent().removeClass('bottom-fixed').addClass('open');
155 + }
90 156
91 - 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);
92 166 });
93 - $('#vz-chart-permissions .customize-section-back').click(function () {
94 - $("#vz-chart-source").show();
95 167
96 - $("#vz-chart-permissions .viz-group-header").hide();
97 - $('#settings-button').click(function(e) {
98 - e.preventDefault();
99 - $('#settings-form').submit();
100 - });
168 + enable_libraries_for($('input.type-radio:checked').val(), $typeVsLibrary);
169 + }
101 170
102 - $(this).parent().parent().removeClass('open').addClass('bottom-fixed');
103 -
104 - 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');
105 176 });
177 + $('select.viz-select-library').val( $('select.viz-select-library option:not(.disabled)').val() );
178 + }
106 179
180 + function init_permissions(){
107 181 $('.visualizer-permission').chosen({
108 182 width : '50%',
109 183 search_contains : true
110 184 });
@@ -148,8 +222,387 @@
148 222 }
149 223 });
150 224 });
151 225 }
226 +
227 + // https://codemirror.net/
228 + function init_db_import_component(){
229 + var table_columns = visualizer.db_query.tables;
230 + var code_mirror = wp.CodeMirror || CodeMirror;
231 + var cm = code_mirror.fromTextArea($('.visualizer-db-query').get(0), {
232 + value: $('.visualizer-db-query').val(),
233 + autofocus: true,
234 + mode: 'text/x-mysql',
235 + lineWrapping: true,
236 + dragDrop: false,
237 + matchBrackets: true,
238 + autoCloseBrackets: true,
239 + extraKeys: {"Ctrl-Space": "autocomplete"},
240 + hintOptions: { tables: table_columns }
241 + });
242 +
243 + // force refresh so that the query shows on first time load. Otherwise you have to click on the editor for it to show.
244 + $('body').on('visualizer:db:query:focus', function(event, data){
245 + cm.refresh();
246 + });
247 +
248 + cm.focus();
249 +
250 + // update text area.
251 + cm.on('inputRead', function(x, y){
252 + cm.save();
253 + });
254 +
255 + // backspace and delete do not register so the text box does not get empty if the entire query is deleted
256 + // from the editor. Let's force this.
257 + $('body').on('visualizer:db:query:update', function(event, data){
258 + cm.save();
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 + });
272 + }
273 +
274 + function init_filter_import() {
275 + $( '#db-filter-save-button' ).on( 'click', function(){
276 + $('#vz-filter-wizard').submit();
277 + });
278 + }
279 +
280 + function init_db_import(){
281 + $( '#visualizer-db-query' ).css("z-index", "-1").hide();
282 +
283 + init_db_import_component();
284 +
285 + $('#visualizer-query-fetch').on('click', function(e){
286 +
287 + $('body').trigger('visualizer:db:query:update', {});
288 + if($('.visualizer-db-query').val() === ''){
289 + return;
290 + }
291 +
292 + start_ajax($('#visualizer-db-query'));
293 + $('.db-wizard-results').empty();
294 + $('.db-wizard-error').empty();
295 + $.ajax({
296 + url : ajaxurl,
297 + method : 'post',
298 + data : {
299 + 'action' : visualizer.ajax['actions']['db_get_data'],
300 + 'security' : visualizer.ajax['nonces']['db_get_data'],
301 + 'params' : $('#db-query-form').serialize()
302 + },
303 + success : function(data){
304 + if(data.success){
305 + $('.db-wizard-results').html(data.data.table);
306 + $('#results').DataTable({
307 + "paging": false
308 + });
309 + }else{
310 + $('.db-wizard-error').html(data.data.msg);
311 + }
312 + },
313 + complete: function(){
314 + end_ajax($('#visualizer-db-query'));
315 + }
316 + });
317 + });
318 +
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 +
330 + $('#content').css('width', 'calc(100% - 300px)');
331 + if( $(this).attr( 'data-current' ) === 'chart'){
332 + $(this).val( $(this).attr( 'data-t-filter' ) );
333 + $(this).html( $(this).attr( 'data-t-filter' ) );
334 + $(this).attr( 'data-current', 'filter' );
335 + $( '.visualizer-editor-lhs' ).hide();
336 + $( '#visualizer-db-query' ).css("z-index", "9999").show();
337 + $('body').trigger('visualizer:db:query:focus', {});
338 + $( '#canvas' ).hide();
339 + }else{
340 + var filter_button = $(this);
341 + $( '#visualizer-db-query' ).css("z-index", "-1").hide();
342 + $('#canvas').lock();
343 + filter_button.val( filter_button.attr( 'data-t-chart' ) );
344 + filter_button.html( filter_button.attr( 'data-t-chart' ) );
345 + filter_button.attr( 'data-current', 'chart' );
346 + $( '#canvas' ).css("z-index", "1").show();
347 + $( '#db-chart-save-button' ).trigger('click');
348 + }
349 + } );
350 +
351 + $( '#db-chart-save-button' ).on( 'click', function(){
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 + }
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' ).on( 'click', function(){
387 +
388 + $('body').off('visualizer:change:action').on('visualizer:change:action', function(e){
389 + var filter_button = $( '#json-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 + });
396 +
397 + $('#content').css('width', 'calc(100% - 100px)');
398 + if( $(this).attr( 'data-current' ) === 'chart'){
399 + // toggle from chart to LHS form
400 + $(this).val( $(this).attr( 'data-t-filter' ) );
401 + $(this).html( $(this).attr( 'data-t-filter' ) );
402 + $(this).attr( 'data-current', 'filter' );
403 + $( '.visualizer-editor-lhs' ).hide();
404 + $( '#visualizer-json-screen' ).css("z-index", "9999").show();
405 + $( '#canvas' ).hide();
406 + }else{
407 + // toggle from LHS form to chart
408 + $( '#json-conclude-form' ).trigger('submit');
409 + }
410 + } );
411 +
412 + $('body').on('visualizer:json:form:submit', function() {
413 + var filter_button = $( '#json-chart-button' );
414 + $( '#visualizer-json-screen' ).css("z-index", "-1").hide();
415 + $('#canvas').lock();
416 + filter_button.val( filter_button.attr( 'data-t-chart' ) );
417 + filter_button.html( filter_button.attr( 'data-t-chart' ) );
418 + filter_button.attr( 'data-current', 'chart' );
419 + end_ajax( $( '#visualizer-json-screen' ) );
420 + $( '#canvas' ).css("z-index", "1").show();
421 + });
422 +
423 +
424 + // fetch the roots for the provided endpoint
425 + $( '#visualizer-json-fetch' ).on( 'click', function(e){
426 + e.preventDefault();
427 + $('.visualizer-json-form').accordion( 'option', 'active', 0 );
428 + $('.visualizer-json-form h3.viz-step:not(.step1)').addClass('ui-state-disabled');
429 + $('.json-table').html('');
430 + start_ajax( $( '#visualizer-json-screen' ) );
431 + $.ajax({
432 + url : ajaxurl,
433 + method : 'post',
434 + data : {
435 + 'action' : visualizer.ajax['actions']['json_get_roots'],
436 + 'security' : visualizer.ajax['nonces']['json_get_roots'],
437 + 'params' : $('#json-endpoint-form').serialize()
438 + },
439 + success : function(data){
440 + if(data.success){
441 + $('#vz-import-json-root').empty();
442 + $.each(data.data.roots, function(i, name){
443 + $('#vz-import-json-root').append('<option value="' + name + '">' + name.replace(regex, visualizer.json_tag_separator_view) + '</option>');
444 + });
445 + $('#json-root-form').fadeIn('medium');
446 + json_accordion_activate(1, true);
447 + }else{
448 + alert(data.data.msg);
449 + }
450 + },
451 + complete: function(){
452 + end_ajax($('#visualizer-json-screen'));
453 + }
454 + });
455 + });
456 +
457 + // fetch the data for the chosen root
458 + $( '#visualizer-json-parse' ).on( 'click', function(e){
459 + e.preventDefault();
460 + $('.visualizer-json-form h3.viz-step:not(.step1):not(.step2)').addClass('ui-state-disabled');
461 + $('.json-table').html('');
462 + start_ajax( $( '#visualizer-json-screen' ) );
463 + $.ajax({
464 + url : ajaxurl,
465 + method : 'post',
466 + data : {
467 + 'action' : visualizer.ajax['actions']['json_get_data'],
468 + 'security' : visualizer.ajax['nonces']['json_get_data'],
469 + 'params' : $('#json-root-form, #json-endpoint-form').serialize()
470 + },
471 + success : function(data){
472 + if(data.success){
473 + $('#vz-import-json-paging option:not(.static)').remove();
474 + if(data.data.paging.length > 0){
475 + var $template = $('#vz-import-json-paging').attr('data-template');
476 + $.each(data.data.paging, function(i, name){
477 + var display = name.replace(regex, visualizer.json_tag_separator_view);
478 + display = $template.replace('?', display);
479 + $('#vz-import-json-paging').append('<option value="' + name + '">' + display + '</option>');
480 + });
481 + $('.json-pagination').show();
482 + }
483 + $('#json-conclude-form .json-table').html(data.data.table);
484 +
485 + var $table = create_editor_table( '#json-conclude-form' );
486 +
487 + json_accordion_activate(3, true);
488 + json_accordion_activate(2, false);
489 + $table.columns.adjust().draw();
490 + }else{
491 + alert(data.data.msg);
492 + }
493 + },
494 + complete: function(){
495 + end_ajax($('#visualizer-json-screen'));
496 + }
497 + });
498 + });
499 +
500 + // when the data is set and the chart is updated, toggle the screen so that the chart is shown
501 + $('#json-conclude-form').on( 'submit', function(e){
502 + // at least one column has to be selected as non-excluded.
503 + var count_selected = 0;
504 + $('select.viz-select-data-type').each(function(i, element){
505 + if($(element).prop('selectedIndex') > 0){
506 + count_selected++;
507 + }
508 + });
509 + if(count_selected === 0){
510 + alert(visualizer.l10n.select_columns);
511 + return false;
512 + }
513 +
514 + // populate the form elements that are in the other tabs.
515 + $('#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').each(function(x, y){
516 + $('#json-conclude-form').append('<input type="hidden" name="' + y.name + '" value="' + y.value + '">');
517 + });
518 +
519 + $('body').trigger('visualizer:json:form:submit');
520 + });
521 +
522 + // update the schedule
523 + $('#json-chart-save-button').on('click', function(e){
524 + e.preventDefault();
525 + $('#canvas').lock();
526 + $.ajax({
527 + url : ajaxurl,
528 + method : 'post',
529 + data : {
530 + 'action' : visualizer.ajax['actions']['json_set_schedule'],
531 + 'security' : visualizer.ajax['nonces']['json_set_schedule'],
532 + 'chart' : $('#vz-json-time').attr('data-chart'),
533 + 'time' : $('#vz-json-time').val()
534 + },
535 + success : function(data){
536 + // do nothing.
537 + },
538 + complete: function(){
539 + $('#canvas').unlock();
540 + }
541 + });
542 + });
543 +
544 + }
545 +
546 + function init_editor_table() {
547 + $('body').on('visualizer:db:editor:table:init', function(event, data){
548 + var $table = create_editor_table('.viz-table-editor', data.config);
549 + $('body').on('visualizer:db:editor:table:redraw', function(event, data){
550 + $table.draw();
551 + });
552 + });
553 + }
554 +
555 + function create_editor_table(element, config) {
556 + var settings = {
557 + paging: false,
558 + searching: false,
559 + ordering: false,
560 + select: false,
561 + scrollX: "100%",
562 + scrollY: "400px",
563 + info: false,
564 + colReorder: {
565 + fixedColumnsLeft: 1
566 + }
567 + };
568 +
569 + // show column visibility button only when more than 6 columns are found (including the Label column)
570 + if($(element + ' table.viz-editor-table thead tr th').length > 6){
571 + $.extend( settings, {
572 + dom: 'Bt',
573 + buttons: [
574 + {
575 + extend: 'colvis',
576 + columns: ':gt(0)',
577 + collectionLayout: 'four-column'
578 + }
579 + ]
580 + } );
581 + }
582 + if(config){
583 + $.extend( settings, config );
584 + }
585 +
586 + var $table = $(element + ' .viz-editor-table').DataTable(settings);
587 + return $table;
588 + }
589 +
590 + function json_accordion_activate($step, $activate){
591 + $('.visualizer-json-form h3.viz-step.step' + ( $step + 1 )).removeClass('ui-state-disabled');
592 + if($activate){
593 + $('.visualizer-json-form').accordion( 'option', 'active', $step );
594 + }
595 + }
596 +
597 + function start_ajax(element){
598 + element.lock();
599 + }
600 +
601 + function end_ajax(element){
602 + element.unlock();
603 + }
604 +
152 605 })(jQuery);
153 606
154 607 (function ($) {
155 608 $.fn.lock = function () {