PluginProbe
Chartify – WordPress Chart Plugin / 3.1.1
Chartify – WordPress Chart Plugin v3.1.1
3.8.0 3.7.9 3.7.8 3.7.7 3.7.6 3.7.5 trunk 1.0.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 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.1.4 3.1.5 3.1.6 All 83 releases
chart-builder / admin / js / chart-builder-admin-google.js

chart-builder-admin-google.js in Chartify – WordPress Chart Plugin 3.1.1, at admin/js/chart-builder-admin-google.js

3,229 lines 130.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function($) {
2 'use strict';
3 function ChartBuilderGoogleCharts(element, options){
4 this.el = element;
5 this.$el = $(element);
6 this.ajaxAction = 'ays_chart_admin_ajax';
7 this.htmlClassPrefix = 'ays-chart-';
8 this.htmlNamePrefix = 'ays_';
9 this.dbOptions = undefined;
10 this.chartSourceData = undefined;
11 this.chartObj = undefined;
12 this.chartOptions = null;
13 this.chartData = null;
14 this.chartTempData = null;
15 this.chartType = 'pie_chart';
16 this.chartSourceType = 'google-charts';
17
18 this.chartSources = {
19 'line_chart' : 'Line Chart',
20 'bar_chart' : 'Bar Chart',
21 'pie_chart' : 'Pie Chart',
22 'column_chart' : 'Column Chart',
23 'org_chart' : 'Org Chart',
24 'donut_chart' : 'Donut Chart',
25 }
26
27 this.init();
28
29 return this;
30 }
31
32 ChartBuilderGoogleCharts.prototype.init = function() {
33 var _this = this;
34 _this.chartSourceData = window.ChartBuilderSourceData;
35
36 _this.setEvents();
37 _this.initLibraries();
38 _this.setAccordionEvents();
39
40 _this.initDbImport();
41 _this.initQuizDBImport();
42 };
43
44 // Set events
45 ChartBuilderGoogleCharts.prototype.setEvents = function(e){
46 var _this = this;
47
48 _this.chartType = _this.chartSourceData.chartType;
49 _this.chartSourceType = _this.chartSourceData.chartSourceType;
50 _this.loadChartBySource();
51 _this.configureOptions();
52
53 /* == Tabulation == */
54 _this.$el.on('click', '.nav-tab-wrapper a.nav-tab' , _this.changeTabs);
55 /* */
56
57 /* == Notifications dismiss button == */
58 _this.$el.on('click', '.notice-dismiss', function (e) {
59 _this.changeCurrentUrl('status');
60 });
61
62 _this.$el.on('click', '.toggle_ddmenu' , _this.toggleDDmenu);
63 /* */
64
65 /* Add Manual data */
66 _this.$el.on("click" , '.'+_this.htmlClassPrefix+'add-new-row-box', function(){
67 _this.addChartDataRow();
68 });
69
70 _this.$el.on("click" , '.'+_this.htmlClassPrefix+'add-new-column-box', function(){
71 _this.addChartDataColumn();
72 });
73
74 _this.$el.on('click', '.'+_this.htmlClassPrefix+'show-on-chart-bttn', function(e){
75 e.preventDefault();
76 if(_this.chartType != "org_chart" ) {
77 _this.showOnChart();
78 } else {
79 _this.orgTypeShowOnChart();
80 }
81 });
82
83 /* */
84
85 /* Delete data */
86 _this.$el.on("click" , '.'+_this.htmlClassPrefix+'chart-source-data-remove-row', function(){
87 _this.deleteChartDataRow($(this));
88 _this.detectManualChange();
89 });
90 _this.$el.on("click" , '.'+_this.htmlClassPrefix+'chart-source-data-remove-col', function(){
91 _this.deleteChartDataColumn($(this));
92 _this.detectManualChange();
93 });
94 _this.$el.on('mouseenter', '.'+_this.htmlClassPrefix+'chart-source-data-remove-block', function() {
95 $(this).find('path').css('fill', '#ff0000');
96 });
97 _this.$el.on('mouseleave', '.'+_this.htmlClassPrefix+'chart-source-data-remove-block', function() {
98 $(this).find('path').css('fill', '#b8b8b8');
99 });
100 /* */
101
102 /* Save with Ctrl + S */
103 _this.$el.on('keydown', $(document), _this.quickSaveHotKeys);
104 /* */
105
106 // Submit buttons disabling
107 _this.$el.on('click', '.'+_this.htmlClassPrefix+'loader-banner', _this.submitOnce);
108 /* */
109
110 // Disabling submit when press enter button on inputing
111 $(document).on("keypress", '.ays-text-input', _this.keyBoardConfig.bind(_this));
112 /* */
113
114 // Modal close
115 $(document).on('click', '.ays-close', function () {
116 $(this).parents('.ays-modal').aysModal('hide');
117 });
118
119 // Changing source type to manual
120 _this.$el.on('input', '.'+_this.htmlClassPrefix+'chart-source-data-content input', function () {
121 _this.detectManualChange();
122 });
123
124 // Shortcode text for editor tooltip
125 $(document).find('strong.ays-chart-shortcode-box').on('mouseleave', function(){
126 var _this = $(this);
127
128 _this.attr('data-original-title', aysChartBuilderAdmin.clickForCopy);
129 _this.attr("data-bs-original-title", aysChartBuilderAdmin.clickForCopy);
130 _this.attr("title", aysChartBuilderAdmin.clickForCopy);
131 });
132
133 // Quiz maker integration
134 $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').on('change', function () {
135 var option = $(this).find('option:selected');
136 if (option.attr('is-pro') == "true") {
137 $(this).find('option[value=""]').prop('selected', true);
138 window.open('https://ays-pro.com/wordpress/chart-builder/', '_blank');
139 } else {
140 _this.$el.find('.ays-chart-quiz-query-tooltip').attr('title', _this.chartSourceData.quiz_query_tooltips[this.value]);
141 _this.$el.find('.ays-chart-quiz-query-tooltip').attr('data-bs-original-title', _this.chartSourceData.quiz_query_tooltips[this.value]);
142 _this.quizMakerIntegrationConfig();
143 _this.toggleQuizSelect(this);
144 }
145 });
146
147 $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-quiz').on('change', function () {
148 _this.quizMakerIntegrationConfig();
149 });
150
151 $(window).on('load', function () {
152 _this.toggleQuizSelect();
153 });
154
155 // Options configuration
156 $(document).find('#'+_this.htmlClassPrefix+'option-haxis-slanted-text').on('change', function () {
157 var angleOption = $(document).find('#'+_this.htmlClassPrefix+'option-haxis-slanted-text-angle').parents('.'+_this.htmlClassPrefix+'options-section');
158 if ($(this).val() !== 'false') {
159 angleOption.removeClass('display_none');
160 } else {
161 angleOption.addClass('display_none');
162 }
163 });
164
165 _this.$el.find('.'+_this.htmlClassPrefix+'toggle-hidden-option').on('change', function () {
166 // var animationOptions = _this.$el.find('.'+_this.htmlClassPrefix+'hidden-options-section');
167 var currentSettings = $(this).parents('.' + _this.htmlClassPrefix + 'settings-data-main-wrap')
168 var hiddenSection = currentSettings.find('.' + _this.htmlClassPrefix + 'hidden-options-section');
169 var notHiddenSection = currentSettings.find('.' + _this.htmlClassPrefix + 'not-hidden-options-section');
170
171 if ($(this).is(':checked')) {
172 hiddenSection.removeClass('display_none');
173 notHiddenSection.addClass('display_none');
174 } else {
175 hiddenSection.addClass('display_none');
176 notHiddenSection.removeClass('display_none');
177 }
178 });
179
180 _this.$el.on("click", '.'+_this.htmlClassPrefix+'chart-source-data-sort', function(){
181 _this.sortDataByColumn($(this));
182 _this.detectManualChange();
183 });
184
185 _this.$el.on("click", '.'+_this.htmlClassPrefix+'charts-change-type-type', function(){
186 _this.chartType = $(this).attr('data-type');
187 _this.changeChartType();
188 _this.$el.find('.'+_this.htmlClassPrefix+'charts-change-type-type').css('backgroundColor', '#e7e7e7');
189 $(this).css('backgroundColor', '#008cff63');
190 });
191
192 // Live preview
193 _this.liveSettingsPreview();
194 }
195
196 ChartBuilderGoogleCharts.prototype.liveSettingsPreview = function () {
197 var _this = this;
198
199 // title
200 _this.$el.find('#ays-title').on('input', function () {
201 _this.$el.find('.'+_this.htmlClassPrefix+'charts-title').text($(this).val());
202 });
203
204 // description
205 _this.$el.find('#'+_this.htmlClassPrefix+'description').on('input', function () {
206 _this.$el.find('.'+_this.htmlClassPrefix+'charts-description').text($(this).val());
207 });
208
209 // general settings
210 _this.$el.find('#'+_this.htmlClassPrefix+'option-width').on('input', function () {
211 var format = _this.$el.find('#'+_this.htmlClassPrefix+'option-width-format').val() == '%' ? '%' : '';
212 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('width', $(this).val() + format);
213 _this.drawChartFunction(_this.chartData, _this.chartOptions);
214 });
215
216 _this.$el.find('#'+_this.htmlClassPrefix+'option-width-format').on('change', function () {
217 var format = '%';
218 if ($(this).val() == 'px') {
219 format = '';
220 }
221 var value = _this.$el.find('#'+_this.htmlClassPrefix+'option-width').val();
222 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('width', value + format);
223 _this.drawChartFunction(_this.chartData, _this.chartOptions);
224 });
225
226 _this.$el.find('#'+_this.htmlClassPrefix+'option-position').on('change', function () {
227 var value = $(this).val();
228 var val = '';
229 switch (value) {
230 case 'center':
231 val = 'auto';
232 break;
233 case 'right':
234 val = 'auto 0 auto auto';
235 break;
236 case 'left':
237 val = 'auto auto auto 0';
238 break;
239 default:
240 break;
241 }
242 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('margin', val);
243 _this.drawChartFunction(_this.chartData, _this.chartOptions);
244 });
245
246 _this.$el.find('#'+_this.htmlClassPrefix+'option-height').on('input', function () {
247 var format = _this.$el.find('#'+_this.htmlClassPrefix+'option-height-format').val() == '%' ? '%' : '';
248 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('height', $(this).val() + format);
249 _this.drawChartFunction(_this.chartData, _this.chartOptions);
250 });
251
252 _this.$el.find('#'+_this.htmlClassPrefix+'option-height-format').on('change', function () {
253 var format = '';
254 if ($(this).val() == '%') {
255 format = '%';
256 }
257 var value = _this.$el.find('#'+_this.htmlClassPrefix+'option-height').val();
258 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('height', value + format);
259 _this.drawChartFunction(_this.chartData, _this.chartOptions);
260 });
261
262 _this.$el.find('#'+_this.htmlClassPrefix+'option-font-size').on('input', function () {
263 _this.chartOptions.fontSize = $(this).val();
264 _this.chartSourceData.settings.font_size = _this.chartOptions.fontSize;
265 _this.drawChartFunction(_this.chartData, _this.chartOptions);
266 });
267
268 _this.$el.find('#'+_this.htmlClassPrefix+'option-background-color').on('input', function () {
269 var isTransparent = _this.$el.find('#'+_this.htmlClassPrefix+'option-transparent-background').is(':checked');
270
271 if (!isTransparent) {
272 _this.chartOptions.backgroundColor.fill = $(this).val();
273 _this.chartSourceData.settings.background_color = _this.chartOptions.backgroundColor.fill;
274 _this.drawChartFunction(_this.chartData, _this.chartOptions);
275 }
276 });
277
278 _this.$el.find('#'+_this.htmlClassPrefix+'option-transparent-background').on('change', function () {
279 var bgColor = _this.$el.find('#'+_this.htmlClassPrefix+'option-background-color').val();
280 var chartBgColor = _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-background-color').val();
281
282 _this.chartSourceData.settings.transparent_background = $(this).is(':checked') ? 'checked' : '';
283 _this.chartOptions.backgroundColor.fill = $(this).is(':checked') ? 'transparent' : bgColor;
284 if (typeof _this.chartOptions.chartArea.backgroundColor !== 'undefined') {
285 _this.chartOptions.chartArea.backgroundColor.fill = $(this).is(':checked') ? 'transparent' : chartBgColor;
286 }
287 _this.drawChartFunction(_this.chartData, _this.chartOptions);
288 });
289
290 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-background-color').on('input', function () {
291 var isTransparent = _this.$el.find('#'+_this.htmlClassPrefix+'option-transparent-background').is(':checked');
292
293 if (!isTransparent) {
294 _this.chartOptions.chartArea.backgroundColor.fill = $(this).val();
295 _this.chartSourceData.settings.chart_background_color = _this.chartOptions.chartArea.backgroundColor.fill;
296 _this.drawChartFunction(_this.chartData, _this.chartOptions);
297 }
298 });
299
300 _this.$el.find('#'+_this.htmlClassPrefix+'option-border-width').on('input', function () {
301 _this.chartSourceData.settings.border_width = $(this).val();
302 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('border-width', $(this).val() + 'px');
303 _this.drawChartFunction(_this.chartData, _this.chartOptions);
304 });
305
306 _this.$el.find('#'+_this.htmlClassPrefix+'option-border-color').on('input', function () {
307 _this.chartSourceData.settings.border_color = $(this).val();
308 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('border-color', $(this).val());
309 _this.drawChartFunction(_this.chartData, _this.chartOptions);
310 });
311
312 _this.$el.find('#'+_this.htmlClassPrefix+'option-border-radius').on('input', function () {
313 _this.chartSourceData.settings.border_radius = $(this).val();
314 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('border-radius', $(this).val() + 'px');
315 _this.drawChartFunction(_this.chartData, _this.chartOptions);
316 });
317
318 _this.$el.find('#'+_this.htmlClassPrefix+'option-border-width-with-title').on('input', function () {
319 _this.chartSourceData.settings.border_width_with_title = $(this).val();
320 _this.$el.find('.'+_this.htmlClassPrefix+'container').css('border-width', $(this).val() + 'px');
321 _this.drawChartFunction(_this.chartData, _this.chartOptions);
322 });
323
324 _this.$el.find('#'+_this.htmlClassPrefix+'option-border-radius-with-title').on('input', function () {
325 _this.chartSourceData.settings.border_radius_with_title = $(this).val();
326 _this.$el.find('.'+_this.htmlClassPrefix+'container').css('border-radius', $(this).val() + 'px');
327 _this.drawChartFunction(_this.chartData, _this.chartOptions);
328 });
329
330 _this.$el.find('#'+_this.htmlClassPrefix+'option-border-color-with-title').on('input', function () {
331 _this.chartSourceData.settings.border_color_with_title = $(this).val();
332 _this.$el.find('.'+_this.htmlClassPrefix+'container').css('border-color', $(this).val());
333 _this.drawChartFunction(_this.chartData, _this.chartOptions);
334 });
335
336 _this.$el.find('#'+_this.htmlClassPrefix+'option-padding-outer').on('input', function () {
337 _this.chartSourceData.settings.padding_outer = $(this).val();
338 _this.$el.find('.'+_this.htmlClassPrefix+'container').css('padding', $(this).val() + 'px');
339 _this.drawChartFunction(_this.chartData, _this.chartOptions);
340 });
341
342 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-border-width').on('input', function () {
343 _this.chartOptions.chartArea.backgroundColor.strokeWidth = $(this).val();
344 _this.chartSourceData.settings.chart_border_width = _this.chartOptions.chartArea.backgroundColor.strokeWidth;
345 _this.drawChartFunction(_this.chartData, _this.chartOptions);
346 });
347
348 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-border-color').on('input', function () {
349 _this.chartOptions.chartArea.backgroundColor.stroke = $(this).val();
350 _this.chartSourceData.settings.chart_border_color = _this.chartOptions.chartArea.backgroundColor.stroke;
351 _this.drawChartFunction(_this.chartData, _this.chartOptions);
352 });
353
354 _this.$el.find('#'+_this.htmlClassPrefix+'option-box-shadow').on('change', function () {
355 if ($(this).is(':checked')) {
356 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('box-shadow', '2px 2px 10px 2px ' + _this.chartSourceData.settings.border_color);
357 } else {
358 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('box-shadow', '');
359 }
360 _this.drawChartFunction(_this.chartData, _this.chartOptions);
361 });
362
363 _this.$el.find('#'+_this.htmlClassPrefix+'option-box-shadow-color').on('input', function () {
364 if (_this.$el.find('#'+_this.htmlClassPrefix+'option-box-shadow').is(':checked')) {
365 _this.chartSourceData.settings.box_shadow_color = $(this).val();
366 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').css('box-shadow', '2px 2px 10px 2px ' + _this.chartSourceData.settings.box_shadow_color);
367 _this.drawChartFunction(_this.chartData, _this.chartOptions);
368 }
369 });
370
371 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-left-margin').on('input', function () {
372 _this.chartOptions.chartArea.left = $(this).val() === '' ? 'auto' : +$(this).val();
373 _this.chartSourceData.settings.chart_left_margin = _this.chartOptions.chartArea.left;
374 _this.drawChartFunction(_this.chartData, _this.chartOptions);
375 });
376
377 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-right-margin').on('input', function () {
378 _this.chartOptions.chartArea.right = $(this).val() === '' ? 'auto' : +$(this).val();
379 _this.chartSourceData.settings.chart_right_margin = _this.chartOptions.chartArea.right;
380 _this.drawChartFunction(_this.chartData, _this.chartOptions);
381 });
382
383 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-top-margin').on('input', function () {
384 _this.chartOptions.chartArea.top = $(this).val() === '' ? 'auto' : +$(this).val();
385 _this.chartSourceData.settings.chart_top_margin = _this.chartOptions.chartArea.top;
386 _this.drawChartFunction(_this.chartData, _this.chartOptions);
387 });
388
389 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-bottom-margin').on('input', function () {
390 _this.chartOptions.chartArea.bottom = $(this).val() === '' ? 'auto' : +$(this).val();
391 _this.chartSourceData.settings.chart_bottom_margin = _this.chartOptions.chartArea.bottom;
392 _this.drawChartFunction(_this.chartData, _this.chartOptions);
393 });
394
395 _this.$el.find('#'+_this.htmlClassPrefix+'option-enable-interactivity').on('change', function () {
396 _this.chartOptions.enableInteractivity = $(this).is(':checked');
397 _this.chartSourceData.settings.enable_interactivity = _this.chartOptions.enableInteractivity ? 'checked' : '';
398 _this.drawChartFunction(_this.chartData, _this.chartOptions);
399 });
400
401 _this.$el.find('#'+_this.htmlClassPrefix+'option-maximized-view').on('change', function () {
402 _this.chartOptions.theme = $(this).is(':checked') ? 'maximized' : null;
403 _this.chartSourceData.settings.maximized_view = $(this).is(':checked') ? 'checked' : '';
404 _this.drawChartFunction(_this.chartData, _this.chartOptions);
405 });
406
407 // tooltip settings
408 _this.$el.find('#'+_this.htmlClassPrefix+'option-tooltip-trigger').on('change', function () {
409 _this.chartOptions.tooltip.trigger = $(this).val();
410 _this.chartSourceData.settings.tooltip_trigger = _this.chartOptions.tooltip.trigger;
411 _this.drawChartFunction(_this.chartData, _this.chartOptions);
412 });
413
414 _this.$el.find('#'+_this.htmlClassPrefix+'option-show-color-code').on('change', function () {
415 _this.chartOptions.tooltip.showColorCode = $(this).is(':checked');
416 _this.chartSourceData.settings.show_color_code = _this.chartOptions.tooltip.showColorCode ? 'checked' : '';
417 _this.drawChartFunction(_this.chartData, _this.chartOptions);
418 });
419
420 _this.$el.find('#'+_this.htmlClassPrefix+'option-tooltip-text-color').on('input', function () {
421 _this.chartOptions.tooltip.textStyle.color = $(this).val();
422 _this.chartSourceData.settings.tooltip_text_color = _this.chartOptions.tooltip.textStyle.color;
423 _this.drawChartFunction(_this.chartData, _this.chartOptions);
424 });
425
426 _this.$el.find('#'+_this.htmlClassPrefix+'option-tooltip-font-size').on('input', function () {
427 _this.chartOptions.tooltip.textStyle.fontSize = $(this).val();
428 _this.chartSourceData.settings.tooltip_font_size = _this.chartOptions.tooltip.textStyle.fontSize;
429 _this.drawChartFunction(_this.chartData, _this.chartOptions);
430 });
431
432 _this.$el.find('#'+_this.htmlClassPrefix+'option-tooltip-italic').on('change', function () {
433 _this.chartOptions.tooltip.textStyle.italic = $(this).is(':checked');
434 _this.chartSourceData.settings.tooltip_italic = _this.chartOptions.tooltip.textStyle.italic ? 'checked' : '';
435 _this.drawChartFunction(_this.chartData, _this.chartOptions);
436 });
437
438 _this.$el.find('#'+_this.htmlClassPrefix+'option-tooltip-bold').on('change', function () {
439 _this.chartOptions.tooltip.textStyle.bold = $(this).val();
440 _this.chartSourceData.settings.tooltip_bold = _this.chartOptions.tooltip.textStyle.bold ? 'checked' : '';
441 _this.drawChartFunction(_this.chartData, _this.chartOptions);
442 });
443
444 // legend settings
445 _this.$el.find('#'+_this.htmlClassPrefix+'option-legend-position').on('change', function () {
446 _this.chartOptions.legend.position = $(this).val();
447 _this.chartSourceData.settings.legend_position = _this.chartOptions.legend.position;
448 _this.drawChartFunction(_this.chartData, _this.chartOptions);
449 });
450
451 _this.$el.find('#'+_this.htmlClassPrefix+'option-legend-alignment').on('change', function () {
452 _this.chartOptions.legend.alignment = $(this).val();
453 _this.chartSourceData.settings.legend_alignment = _this.chartOptions.legend.alignment;
454 _this.drawChartFunction(_this.chartData, _this.chartOptions);
455 });
456
457 _this.$el.find('#'+_this.htmlClassPrefix+'option-legend-font-color').on('input', function () {
458 _this.chartOptions.legend.textStyle.color = $(this).val();
459 _this.chartSourceData.settings.legend_font_color = _this.chartOptions.legend.textStyle.color;
460 _this.drawChartFunction(_this.chartData, _this.chartOptions);
461 });
462
463 _this.$el.find('#'+_this.htmlClassPrefix+'option-legend-font-size').on('input', function () {
464 _this.chartOptions.legend.textStyle.fontSize = $(this).val();
465 _this.chartSourceData.settings.legend_font_size = _this.chartOptions.legend.textStyle.fontSize;
466 _this.drawChartFunction(_this.chartData, _this.chartOptions);
467 });
468
469 _this.$el.find('#'+_this.htmlClassPrefix+'option-legend-italic').on('change', function () {
470 _this.chartOptions.legend.textStyle.italic = $(this).is(':checked');
471 _this.chartSourceData.settings.legend_italic = _this.chartOptions.legend.textStyle.italic ? 'checked' : '';
472 _this.drawChartFunction(_this.chartData, _this.chartOptions);
473 });
474
475 _this.$el.find('#'+_this.htmlClassPrefix+'option-legend-bold').on('change', function () {
476 _this.chartOptions.legend.textStyle.bold = $(this).is(':checked');
477 _this.chartSourceData.settings.legend_bold = _this.chartOptions.legend.textStyle.bold ? 'checked' : '';
478 _this.drawChartFunction(_this.chartData, _this.chartOptions);
479 });
480
481 // horizontal axis settings
482 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-title').on('input', function () {
483 _this.chartOptions.hAxis.title = $(this).val();
484 _this.chartSourceData.settings.haxis_title = _this.chartOptions.hAxis.title;
485 _this.drawChartFunction(_this.chartData, _this.chartOptions);
486 });
487
488 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-text-position').on('change', function () {
489 _this.chartOptions.hAxis.textPosition = $(this).val();
490 _this.chartSourceData.settings.haxis_text_position = _this.chartOptions.hAxis.textPosition;
491 _this.drawChartFunction(_this.chartData, _this.chartOptions);
492 });
493
494 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-text-direction').on('change', function () {
495 _this.chartOptions.hAxis.direction = $(this).is(':checked') ? -1 : 1;
496 _this.chartSourceData.settings.haxis_text_direction = _this.chartOptions.hAxis.direction;
497 _this.drawChartFunction(_this.chartData, _this.chartOptions);
498 });
499
500 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-text-color').on('input', function () {
501 _this.chartOptions.hAxis.textStyle.color = $(this).val();
502 _this.chartSourceData.settings.haxis_text_color = _this.chartOptions.hAxis.textStyle.color;
503 _this.drawChartFunction(_this.chartData, _this.chartOptions);
504 });
505
506 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-baseline-color').on('input', function () {
507 _this.chartOptions.hAxis.baselineColor = $(this).val();
508 _this.chartSourceData.settings.haxis_baseline_color = _this.chartOptions.hAxis.baselineColor;
509 _this.drawChartFunction(_this.chartData, _this.chartOptions);
510 });
511
512 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-text-font-size').on('input', function () {
513 _this.chartOptions.hAxis.textStyle.fontSize = $(this).val();
514 _this.chartSourceData.settings.haxis_text_font_size = _this.chartOptions.hAxis.textStyle.fontSize;
515 _this.drawChartFunction(_this.chartData, _this.chartOptions);
516 });
517
518 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-slanted-text').on('change', function () {
519 _this.chartOptions.hAxis.slantedText = $(this).val();
520 _this.chartSourceData.settings.haxis_slanted_text = _this.chartOptions.hAxis.slantedText;
521 _this.drawChartFunction(_this.chartData, _this.chartOptions);
522 });
523
524 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-slanted-text-angle').on('input', function () {
525 _this.chartOptions.hAxis.slantedTextAngle = $(this).val() != 0 ? $(this).val() : 30;
526 _this.chartSourceData.settings.haxis_slanted_text_angle = _this.chartOptions.hAxis.slantedTextAngle;
527 _this.drawChartFunction(_this.chartData, _this.chartOptions);
528 });
529
530 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-show-text-every').on('input', function () {
531 _this.chartOptions.hAxis.showTextEvery = $(this).val() != 0 ? $(this).val() : 'automatic';
532 _this.chartSourceData.settings.haxis_show_text_every = $(this).val();
533 _this.drawChartFunction(_this.chartData, _this.chartOptions);
534 });
535
536 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-format').on('change', function () {
537 _this.chartOptions.hAxis.format = $(this).val();
538 _this.chartSourceData.settings.haxis_format = _this.chartOptions.hAxis.format;
539 _this.drawChartFunction(_this.chartData, _this.chartOptions);
540 });
541
542 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-label-font-size').on('input', function () {
543 _this.chartOptions.hAxis.titleTextStyle.fontSize = $(this).val();
544 _this.chartSourceData.settings.haxis_label_font_size = _this.chartOptions.hAxis.titleTextStyle.fontSize;
545 _this.drawChartFunction(_this.chartData, _this.chartOptions);
546 });
547
548 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-italic').on('change', function () {
549 _this.chartOptions.hAxis.textStyle.italic = $(this).is(':checked');
550 _this.chartSourceData.settings.haxis_italic = _this.chartOptions.hAxis.textStyle.italic ? 'checked' : '';
551 _this.drawChartFunction(_this.chartData, _this.chartOptions);
552 });
553
554 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-bold').on('change', function () {
555 _this.chartOptions.hAxis.textStyle.bold = $(this).is(':checked');
556 _this.chartSourceData.settings.haxis_bold = _this.chartOptions.hAxis.textStyle.bold ? 'checked' : '';
557 _this.drawChartFunction(_this.chartData, _this.chartOptions);
558 });
559
560 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-title-italic').on('change', function () {
561 _this.chartOptions.hAxis.titleTextStyle.italic = $(this).is(':checked');
562 _this.chartSourceData.settings.haxis_title_italic = _this.chartOptions.hAxis.titleTextStyle.italic ? 'checked' : '';
563 _this.drawChartFunction(_this.chartData, _this.chartOptions);
564 });
565
566 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-title-bold').on('change', function () {
567 _this.chartOptions.hAxis.titleTextStyle.bold = $(this).is(':checked');
568 _this.chartSourceData.settings.haxis_title_bold = _this.chartOptions.hAxis.titleTextStyle.bold ? 'checked' : '';
569 _this.drawChartFunction(_this.chartData, _this.chartOptions);
570 });
571
572 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-label-color').on('input', function () {
573 _this.chartOptions.hAxis.titleTextStyle.color = $(this).val();
574 _this.chartSourceData.settings.haxis_label_color = _this.chartOptions.hAxis.titleTextStyle.color;
575 _this.drawChartFunction(_this.chartData, _this.chartOptions);
576 });
577
578 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-max-value').on('input', function () {
579 _this.chartOptions.hAxis.viewWindow.max = $(this).val();
580 _this.chartSourceData.settings.haxis_max_value = _this.chartOptions.hAxis.viewWindow.max;
581 _this.drawChartFunction(_this.chartData, _this.chartOptions);
582 });
583
584 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-min-value').on('input', function () {
585 _this.chartOptions.hAxis.viewWindow.min = $(this).val();
586 _this.chartSourceData.settings.haxis_min_value = _this.chartOptions.hAxis.viewWindow.min;
587 _this.drawChartFunction(_this.chartData, _this.chartOptions);
588 });
589
590 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-gridlines-count').on('input', function () {
591 _this.chartOptions.hAxis.gridlines.count = $(this).val();
592 _this.chartSourceData.settings.haxis_gridlines_count = _this.chartOptions.hAxis.gridlines.count;
593 _this.drawChartFunction(_this.chartData, _this.chartOptions);
594 });
595
596 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-gridlines-color').on('input', function () {
597 _this.chartOptions.hAxis.gridlines.color = $(this).val();
598 _this.chartSourceData.settings.haxis_gridlines_color = _this.chartOptions.hAxis.gridlines.color;
599 _this.drawChartFunction(_this.chartData, _this.chartOptions);
600 });
601
602 _this.$el.find('#'+_this.htmlClassPrefix+'option-haxis-minor-gridlines-color').on('input', function () {
603 _this.chartOptions.hAxis.minorGridlines.color = $(this).val();
604 _this.chartSourceData.settings.haxis_minor_gridlines_color = _this.chartOptions.hAxis.minorGridlines.color;
605 _this.drawChartFunction(_this.chartData, _this.chartOptions);
606 });
607
608 // vertical axis settings
609 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-title').on('input', function () {
610 _this.chartOptions.vAxis.title = $(this).val();
611 _this.chartSourceData.settings.vaxis_title = _this.chartOptions.vAxis.title;
612 _this.drawChartFunction(_this.chartData, _this.chartOptions);
613 });
614
615 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-text-position').on('change', function () {
616 _this.chartOptions.vAxis.textPosition = $(this).val();
617 _this.chartSourceData.settings.vaxis_text_position = _this.chartOptions.vAxis.textPosition;
618 _this.drawChartFunction(_this.chartData, _this.chartOptions);
619 });
620
621 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-text-direction').on('change', function () {
622 _this.chartOptions.vAxis.direction = $(this).is(':checked') ? -1 : 1;
623 _this.chartSourceData.settings.vaxis_text_direction = _this.chartOptions.vAxis.direction;
624 _this.drawChartFunction(_this.chartData, _this.chartOptions);
625 });
626
627 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-text-color').on('input', function () {
628 _this.chartOptions.vAxis.textStyle.color = $(this).val();
629 _this.chartSourceData.settings.vaxis_text_color = _this.chartOptions.vAxis.textStyle.color;
630 _this.drawChartFunction(_this.chartData, _this.chartOptions);
631 });
632
633 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-baseline-color').on('input', function () {
634 _this.chartOptions.vAxis.baselineColor = $(this).val();
635 _this.chartSourceData.settings.vaxis_baseline_color = _this.chartOptions.vAxis.baselineColor;
636 _this.drawChartFunction(_this.chartData, _this.chartOptions);
637 });
638
639 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-text-font-size').on('input', function () {
640 _this.chartOptions.vAxis.textStyle.fontSize = $(this).val();
641 _this.chartSourceData.settings.vaxis_text_font_size = _this.chartOptions.vAxis.textStyle.fontSize;
642 _this.drawChartFunction(_this.chartData, _this.chartOptions);
643 });
644
645 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-format').on('change', function () {
646 _this.chartOptions.vAxis.format = $(this).val();
647 _this.chartSourceData.settings.vaxis_format = _this.chartOptions.vAxis.format;
648 _this.drawChartFunction(_this.chartData, _this.chartOptions);
649 });
650
651 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-label-font-size').on('input', function () {
652 _this.chartOptions.vAxis.titleTextStyle.fontSize = $(this).val();
653 _this.chartSourceData.settings.vaxis_label_font_size = _this.chartOptions.vAxis.titleTextStyle.fontSize;
654 _this.drawChartFunction(_this.chartData, _this.chartOptions);
655 });
656
657 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-italic').on('change', function () {
658 _this.chartOptions.vAxis.textStyle.italic = $(this).is(':checked');
659 _this.chartSourceData.settings.vaxis_italic = _this.chartOptions.vAxis.textStyle.italic ? 'checked' : '';
660 _this.drawChartFunction(_this.chartData, _this.chartOptions);
661 });
662
663 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-bold').on('change', function () {
664 _this.chartOptions.vAxis.textStyle.bold = $(this).is(':checked');
665 _this.chartSourceData.settings.vaxis_bold = _this.chartOptions.vAxis.textStyle.bold ? 'checked' : '';
666 _this.drawChartFunction(_this.chartData, _this.chartOptions);
667 });
668
669 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-title-italic').on('change', function () {
670 _this.chartOptions.vAxis.titleTextStyle.italic = $(this).is(':checked');
671 _this.chartSourceData.settings.vaxis_title_italic = _this.chartOptions.vAxis.titleTextStyle.italic ? 'checked' : '';
672 _this.drawChartFunction(_this.chartData, _this.chartOptions);
673 });
674
675 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-title-bold').on('change', function () {
676 _this.chartOptions.vAxis.titleTextStyle.bold = $(this).is(':checked');
677 _this.chartSourceData.settings.vaxis_title_bold = _this.chartOptions.vAxis.titleTextStyle.bold ? 'checked' : '';
678 _this.drawChartFunction(_this.chartData, _this.chartOptions);
679 });
680
681 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-label-color').on('input', function () {
682 _this.chartOptions.vAxis.titleTextStyle.color = $(this).val();
683 _this.chartSourceData.settings.vaxis_label_color = _this.chartOptions.vAxis.titleTextStyle.color;
684 _this.drawChartFunction(_this.chartData, _this.chartOptions);
685 });
686
687 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-max-value').on('input', function () {
688 _this.chartOptions.vAxis.viewWindow.max = $(this).val();
689 _this.chartSourceData.settings.vaxis_max_value = _this.chartOptions.vAxis.viewWindow.max;
690 _this.drawChartFunction(_this.chartData, _this.chartOptions);
691 });
692
693 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-min-value').on('input', function () {
694 _this.chartOptions.vAxis.viewWindow.min = $(this).val();
695 _this.chartSourceData.settings.vaxis_min_value = _this.chartOptions.vAxis.viewWindow.min;
696 _this.drawChartFunction(_this.chartData, _this.chartOptions);
697 });
698
699 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-gridlines-count').on('input', function () {
700 _this.chartOptions.vAxis.gridlines.count = $(this).val();
701 _this.chartSourceData.settings.vaxis_gridlines_count = _this.chartOptions.vAxis.gridlines.count;
702 _this.drawChartFunction(_this.chartData, _this.chartOptions);
703 });
704
705 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-gridlines-color').on('input', function () {
706 _this.chartOptions.vAxis.gridlines.color = $(this).val();
707 _this.chartSourceData.settings.vaxis_gridlines_color = _this.chartOptions.vAxis.gridlines.color;
708 _this.drawChartFunction(_this.chartData, _this.chartOptions);
709 });
710
711 _this.$el.find('#'+_this.htmlClassPrefix+'option-vaxis-minor-gridlines-color').on('input', function () {
712 _this.chartOptions.vAxis.minorGridlines.color = $(this).val();
713 _this.chartSourceData.settings.vaxis_minor_gridlines_color = _this.chartOptions.vAxis.minorGridlines.color;
714 _this.drawChartFunction(_this.chartData, _this.chartOptions);
715 });
716
717 // animation settings
718 _this.$el.find('#'+_this.htmlClassPrefix+'option-enable-animation').on('change', function () {
719 if ($(this).is(':checked')) {
720 _this.chartOptions.animation = {
721 startup: _this.$el.find('#'+_this.htmlClassPrefix+'option-animation-startup').is(':checked'),
722 duration: _this.$el.find('#'+_this.htmlClassPrefix+'option-animation-duration').val(),
723 easing: _this.$el.find('#'+_this.htmlClassPrefix+'option-animation-easing').val(),
724 }
725 _this.chartSourceData.settings.enable_animation = 'checked';
726 } else {
727 delete _this.chartOptions.animation;
728 _this.chartSourceData.settings.enable_animation = '';
729 }
730 _this.drawChartFunction(_this.chartData, _this.chartOptions);
731 });
732
733 _this.$el.find('#'+_this.htmlClassPrefix+'option-animation-duration').on('input', function () {
734 if (_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-animation').is(':checked')) {
735 _this.chartOptions.animation.duration = $(this).val();
736 _this.chartSourceData.settings.animation_duration = _this.chartOptions.animation.duration;
737 _this.drawChartFunction(_this.chartData, _this.chartOptions);
738 }
739 });
740
741 _this.$el.find('#'+_this.htmlClassPrefix+'option-animation-startup').on('input', function () {
742 if (_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-animation').is(':checked')) {
743 _this.chartOptions.animation.startup = $(this).is(':checked');
744 _this.chartSourceData.settings.animation_startup = _this.chartOptions.animation.startup ? 'checked' : '';
745 _this.drawChartFunction(_this.chartData, _this.chartOptions);
746 }
747 });
748
749 _this.$el.find('#'+_this.htmlClassPrefix+'option-animation-easing').on('input', function () {
750 if (_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-animation').is(':checked')) {
751 _this.chartOptions.animation.easing = $(this).val();
752 _this.chartSourceData.settings.animation_easing = _this.chartOptions.animation.easing;
753 _this.drawChartFunction(_this.chartData, _this.chartOptions);
754 }
755 });
756
757 // advanced settings
758 _this.$el.find('#'+_this.htmlClassPrefix+'option-rotation-degree').on('input', function () {
759 _this.chartOptions.pieStartAngle = $(this).val();
760 _this.chartSourceData.settings.rotation_degree = _this.chartOptions.pieStartAngle;
761 _this.drawChartFunction(_this.chartData, _this.chartOptions);
762 });
763
764 _this.$el.find('#'+_this.htmlClassPrefix+'option-reverse-categories').on('change', function () {
765 _this.chartOptions.reverseCategories = $(this).is(':checked');
766 _this.chartSourceData.settings.reverse_categories = _this.chartOptions.reverseCategories ? 'checked' : '';
767 _this.drawChartFunction(_this.chartData, _this.chartOptions);
768 });
769
770 _this.$el.find('#'+_this.htmlClassPrefix+'option-slice-border-color').on('input', function () {
771 _this.chartOptions.pieSliceBorderColor = $(this).val();
772 _this.chartSourceData.settings.slice_border_color = _this.chartOptions.pieSliceBorderColor;
773 _this.drawChartFunction(_this.chartData, _this.chartOptions);
774 });
775
776 _this.$el.find('#'+_this.htmlClassPrefix+'option-slice-text').on('change', function () {
777 _this.chartOptions.pieSliceText = $(this).val();
778 _this.chartSourceData.settings.slice_text = _this.chartOptions.pieSliceText;
779 _this.drawChartFunction(_this.chartData, _this.chartOptions);
780 });
781
782 _this.$el.find('#'+_this.htmlClassPrefix+'option-is-stacked').on('change', function () {
783 _this.chartOptions.isStacked = $(this).is(':checked');
784 _this.chartSourceData.settings.is_stacked = _this.chartOptions.isStacked ? 'checked' : '';
785 _this.drawChartFunction(_this.chartData, _this.chartOptions);
786 });
787
788 _this.$el.find('#'+_this.htmlClassPrefix+'option-focus-target').on('change', function () {
789 _this.chartOptions.focusTarget = $(this).val();
790 _this.chartSourceData.settings.focus_target = _this.chartOptions.focusTarget;
791 _this.drawChartFunction(_this.chartData, _this.chartOptions);
792 });
793
794 _this.$el.find('#'+_this.htmlClassPrefix+'option-opacity').on('input', function () {
795 _this.chartOptions.dataOpacity = $(this).val();
796 _this.chartSourceData.settings.opacity = _this.chartOptions.dataOpacity;
797 _this.drawChartFunction(_this.chartData, _this.chartOptions);
798 });
799
800 _this.$el.find('#'+_this.htmlClassPrefix+'option-tooltip-text').on('change', function () {
801 _this.chartOptions.tooltip.text = $(this).val();
802 _this.chartSourceData.settings.tooltip_text = _this.chartOptions.tooltip.text;
803 _this.drawChartFunction(_this.chartData, _this.chartOptions);
804 });
805
806 _this.$el.find('#'+_this.htmlClassPrefix+'option-line-width').on('input', function () {
807 _this.chartOptions.lineWidth = $(this).val();
808 _this.chartSourceData.settings.line_width = _this.chartOptions.lineWidth;
809
810 _this.chartSourceData.settings.series_line_width.forEach((value, id) => {
811 _this.chartOptions.series[id]["lineWidth"] = $(this).val();
812 _this.chartSourceData.settings.series_line_width[id] = $(this).val();
813 _this.$el.find('#'+_this.htmlClassPrefix+'option-series-line-width-'+id).val($(this).val());
814 });
815
816 _this.drawChartFunction(_this.chartData, _this.chartOptions);
817 });
818
819 _this.$el.find('#'+_this.htmlClassPrefix+'option-data-grouping-limit').on('input', function () {
820 _this.chartOptions.sliceVisibilityThreshold = $(this).val()/100;
821 _this.chartSourceData.settings.data_grouping_limit = $(this).val();
822 _this.drawChartFunction(_this.chartData, _this.chartOptions);
823 });
824
825 _this.$el.find('#'+_this.htmlClassPrefix+'option-data-grouping-label').on('input', function () {
826 _this.chartOptions.pieResidueSliceLabel = $(this).val();
827 _this.chartSourceData.settings.data_grouping_label = _this.chartOptions.pieResidueSliceLabel;
828 _this.drawChartFunction(_this.chartData, _this.chartOptions);
829 });
830
831 _this.$el.find('#'+_this.htmlClassPrefix+'option-data-grouping-color').on('input', function () {
832 _this.chartOptions.pieResidueSliceColor = $(this).val();
833 _this.chartSourceData.settings.data_grouping_color = _this.chartOptions.pieResidueSliceColor;
834 _this.drawChartFunction(_this.chartData, _this.chartOptions);
835 });
836
837 _this.$el.find('#'+_this.htmlClassPrefix+'option-multiple-selection').on('change', function () {
838 _this.chartOptions.selectionMode = $(this).is(':checked') ? 'multiple' : 'single';
839 _this.chartSourceData.settings.multiple_selection = $(this).is(':checked') ? 'checked' : '';
840 _this.drawChartFunction(_this.chartData, _this.chartOptions);
841 });
842
843 _this.$el.find('#'+_this.htmlClassPrefix+'option-multiple-data-format').on('change', function () {
844 _this.chartOptions.aggregationTarget = $(this).val();
845 _this.chartSourceData.settings.multiple_data_format = _this.chartOptions.aggregationTarget;
846 _this.drawChartFunction(_this.chartData, _this.chartOptions);
847 });
848
849 _this.$el.find('#'+_this.htmlClassPrefix+'option-point-shape').on('change', function () {
850 _this.chartOptions.pointShape = $(this).val();
851 _this.chartSourceData.settings.point_shape = _this.chartOptions.pointShape;
852
853 _this.chartSourceData.settings.series_point_shape.forEach((value, id) => {
854 _this.chartOptions.series[id]["pointShape"] = $(this).val();
855 _this.chartSourceData.settings.series_point_shape[id] = $(this).val();
856 _this.$el.find('#'+_this.htmlClassPrefix+'option-series-point-shape-'+id).val($(this).val());
857 });
858
859 _this.drawChartFunction(_this.chartData, _this.chartOptions);
860 });
861
862 _this.$el.find('#'+_this.htmlClassPrefix+'option-point-size').on('input', function () {
863 _this.chartOptions.pointSize = $(this).val();
864 _this.chartSourceData.settings.point_size = _this.chartOptions.pointSize;
865
866 _this.chartSourceData.settings.series_point_size.forEach((value, id) => {
867 _this.chartOptions.series[id]["pointSize"] = $(this).val();
868 _this.chartSourceData.settings.series_point_size[id] = $(this).val();
869 _this.$el.find('#'+_this.htmlClassPrefix+'option-series-point-size-'+id).val($(this).val());
870 });
871
872 _this.drawChartFunction(_this.chartData, _this.chartOptions);
873 });
874
875 _this.$el.find('#'+_this.htmlClassPrefix+'option-crosshair-trigger').on('change', function () {
876 _this.chartOptions.crosshair.trigger = $(this).val();
877 _this.chartSourceData.settings.crosshair_trigger = _this.chartOptions.crosshair.trigger;
878 _this.drawChartFunction(_this.chartData, _this.chartOptions);
879 });
880
881 _this.$el.find('#'+_this.htmlClassPrefix+'option-crosshair-orientation').on('change', function () {
882 _this.chartOptions.crosshair.orientation = $(this).val();
883 _this.chartSourceData.settings.crosshair_orientation = _this.chartOptions.crosshair.orientation;
884 _this.drawChartFunction(_this.chartData, _this.chartOptions);
885 });
886
887 _this.$el.find('#'+_this.htmlClassPrefix+'option-crosshair-opacity').on('input', function () {
888 _this.chartOptions.crosshair.opacity = $(this).val();
889 _this.chartSourceData.settings.crosshair_opacity = _this.chartOptions.crosshair.opacity;
890 _this.drawChartFunction(_this.chartData, _this.chartOptions);
891 });
892
893 _this.$el.find('#'+_this.htmlClassPrefix+'option-dash-style').on('input', function () {
894 _this.chartOptions.lineDashStyle = $(this).val() ? $(this).val().split(',') : null;
895 _this.chartSourceData.settings.dash_style = _this.chartOptions.lineDashStyle.join(',');
896 _this.drawChartFunction(_this.chartData, _this.chartOptions);
897 });
898
899 _this.$el.find('#'+_this.htmlClassPrefix+'option-group-width').on('input', function () {
900 var format = _this.$el.find('#'+_this.htmlClassPrefix+'option-group-width-format').val() == '%' ? '%' : '';
901 _this.chartOptions.bar.groupWidth = $(this).val() + format;
902 _this.chartSourceData.settings.group_width = $(this).val();
903 _this.drawChartFunction(_this.chartData, _this.chartOptions);
904 });
905
906 _this.$el.find('#'+_this.htmlClassPrefix+'option-group-width-format').on('change', function () {
907 var format = '%';
908 if ($(this).val() == 'px') {
909 format = '';
910 }
911 var value = _this.$el.find('#'+_this.htmlClassPrefix+'option-group-width').val();
912 _this.chartOptions.bar.groupWidth = value + format;
913 _this.chartSourceData.settings.group_width_format = format;
914 _this.drawChartFunction(_this.chartData, _this.chartOptions);
915 });
916
917 _this.$el.find('#'+_this.htmlClassPrefix+'option-orientation').on('change', function () {
918 _this.chartOptions.orientation = $(this).is(':checked') ? 'vertical' : 'horizontal';
919 _this.chartSourceData.settings.orientation = $(this).is(':checked') ? 'checked' : '';
920 _this.drawChartFunction(_this.chartData, _this.chartOptions);
921 });
922
923 _this.$el.find('#'+_this.htmlClassPrefix+'option-fill-nulls').on('change', function () {
924 _this.chartOptions.interpolateNulls = $(this).is(':checked') ? 'true' : 'false';
925 _this.chartSourceData.settings.full_nulls = $(this).is(':checked') ? 'checked' : '';
926 _this.drawChartFunction(_this.chartData, _this.chartOptions);
927 });
928
929 _this.$el.find('#'+_this.htmlClassPrefix+'option-donut-hole-size').on('input', function () {
930 _this.chartOptions.pieHole = $(this).val();
931 _this.chartSourceData.settings.donut_hole_size = _this.chartOptions.pieHole;
932 _this.drawChartFunction(_this.chartData, _this.chartOptions);
933 });
934
935 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-chart-font-size').on('change', function () {
936 _this.chartOptions.size = $(this).val();
937 _this.chartSourceData.settings.org_chart_font_size = _this.chartOptions.size;
938 _this.drawChartFunction(_this.chartData, _this.chartOptions);
939 });
940
941 _this.$el.find('#'+_this.htmlClassPrefix+'option-allow-collapse').on('change', function () {
942 _this.chartOptions.allowCollapse = $(this).is(':checked');
943 _this.chartSourceData.settings.allow_collapse = _this.chartOptions.allowCollapse;
944 _this.drawChartFunction(_this.chartData, _this.chartOptions);
945 });
946
947 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-classname').on('input', function () {
948 _this.chartOptions.nodeClass = $(this).val();
949 _this.chartSourceData.settings.org_classname = _this.chartOptions.nodeClass;
950 _this.drawChartFunction(_this.chartData, _this.chartOptions);
951 });
952
953 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-background-color').on('input', function () {
954 var orgClassname = _this.chartSourceData.settings.org_classname;
955 _this.chartSourceData.settings.org_node_background_color = $(this).val();
956 if (orgClassname != '') {
957 _this.setOrgChartCustomStyles();
958 }
959 });
960
961 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-padding').on('input', function () {
962 var orgClassname = _this.chartSourceData.settings.org_classname;
963 _this.chartSourceData.settings.org_node_padding = $(this).val();
964 if (orgClassname != '') {
965 _this.setOrgChartCustomStyles();
966 }
967 });
968
969 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-border-radius').on('input', function () {
970 var orgClassname = _this.chartSourceData.settings.org_classname;
971 _this.chartSourceData.settings.org_node_border_radius = $(this).val();
972 if (orgClassname != '') {
973 _this.setOrgChartCustomStyles();
974 }
975 });
976
977 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-border-width').on('input', function () {
978 var orgClassname = _this.chartSourceData.settings.org_classname;
979 _this.chartSourceData.settings.org_node_border_width = $(this).val();
980 if (orgClassname != '') {
981 _this.setOrgChartCustomStyles();
982 }
983 });
984
985 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-border-color').on('input', function () {
986 var orgClassname = _this.chartSourceData.settings.org_classname;
987 _this.chartSourceData.settings.org_node_border_color = $(this).val();
988 if (orgClassname != '') {
989 _this.setOrgChartCustomStyles();
990 }
991 });
992
993 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-text-color').on('input', function () {
994 var orgClassname = _this.chartSourceData.settings.org_classname;
995 _this.chartSourceData.settings.org_node_text_color = $(this).val();
996 if (orgClassname != '') {
997 _this.setOrgChartCustomStyles();
998 }
999 });
1000
1001 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-text-font-size').on('input', function () {
1002 var orgClassname = _this.chartSourceData.settings.org_classname;
1003 _this.chartSourceData.settings.org_node_text_font_size = $(this).val();
1004 if (orgClassname != '') {
1005 _this.setOrgChartCustomStyles();
1006 }
1007 });
1008
1009 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-seslected-classname').on('input', function () {
1010 _this.chartOptions.selectedNodeClass = $(this).val();
1011 _this.chartSourceData.settings.org_selected_classname = _this.chartOptions.selectedNodeClass;
1012 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1013 });
1014
1015 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-selected-node-background-color').on('input', function () {
1016 var orgClassname = _this.chartSourceData.settings.org_selected_classname;
1017 _this.chartSourceData.settings.org_selected_node_background_color = $(this).val();
1018 if (orgClassname != '') {
1019 _this.setOrgChartCustomStyles();
1020 }
1021 });
1022
1023 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-selected-node-text-color').on('input', function () {
1024 var orgClassname = _this.chartSourceData.settings.org_selected_classname;
1025 _this.chartSourceData.settings.org_selected_node_text_color = $(this).val();
1026 if (orgClassname != '') {
1027 _this.setOrgChartCustomStyles();
1028 }
1029 });
1030
1031 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-description-font-color').on('input', function () {
1032 _this.chartSourceData.settings.org_node_description_font_color = $(this).val();
1033 _this.setOrgChartCustomStyles();
1034 });
1035
1036 _this.$el.find('#'+_this.htmlClassPrefix+'option-org-node-description-font-size').on('input', function () {
1037 _this.chartSourceData.settings.org_node_description_font_size = $(this).val();
1038 _this.setOrgChartCustomStyles();
1039 });
1040
1041 // Slices settings
1042 _this.$el.find('.'+_this.htmlClassPrefix+'option-slice-color').on('input', function () {
1043 var id = $(this).attr('data-slice-id');
1044 _this.chartOptions.slices[id].color = $(this).val();
1045 _this.chartSourceData.settings.slice_color[id] = $(this).val();
1046 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1047 });
1048
1049 _this.$el.find('.'+_this.htmlClassPrefix+'option-slice-offset').on('input', function () {
1050 var id = $(this).attr('data-slice-id');
1051 _this.chartOptions.slices[id].offset = $(this).val();
1052 _this.chartSourceData.settings.slice_offset[id] = $(this).val();
1053 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1054 });
1055
1056 _this.$el.find('.'+_this.htmlClassPrefix+'option-slice-text-color').on('input', function () {
1057 var id = $(this).attr('data-slice-id');
1058 _this.chartOptions.slices[id].textStyle.color = $(this).val();
1059 _this.chartSourceData.settings.slice_text_color[id] = $(this).val();
1060 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1061 });
1062
1063 // Series settings
1064 _this.$el.find('.'+_this.htmlClassPrefix+'option-series-color').on('input', function () {
1065 if (!_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').is(':checked')) {
1066 var id = $(this).attr('data-series-id');
1067 _this.chartOptions.series[id].color = $(this).val();
1068 _this.chartSourceData.settings.series_color[id] = $(this).val();
1069 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1070 }
1071 });
1072
1073 _this.$el.find('.'+_this.htmlClassPrefix+'option-series-visible-in-legend').on('input', function () {
1074 if (_this.chartSourceData.source[0].length > 2) {
1075 var id = $(this).attr('data-series-id');
1076 _this.chartOptions.series[id].visibleInLegend = $(this).is(':checked');
1077 _this.chartSourceData.settings.series_visible_in_legend[id] = $(this).val();
1078 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1079 }
1080 });
1081
1082 _this.$el.find('.'+_this.htmlClassPrefix+'option-series-line-width').on('input', function () {
1083 if (!_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').is(':checked')) {
1084 var id = $(this).attr('data-series-id');
1085 _this.chartOptions.series[id].lineWidth = $(this).val();
1086 _this.chartSourceData.settings.series_line_width[id] = $(this).val();
1087 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1088 }
1089 });
1090
1091 _this.$el.find('.'+_this.htmlClassPrefix+'option-series-point-size').on('input', function () {
1092 if (!_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').is(':checked')) {
1093 var id = $(this).attr('data-series-id');
1094 _this.chartOptions.series[id].pointSize = $(this).val();
1095 _this.chartSourceData.settings.series_point_size[id] = $(this).val();
1096 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1097 }
1098 });
1099
1100 _this.$el.find('.'+_this.htmlClassPrefix+'option-series-point-shape').on('change', function () {
1101 if (!_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').is(':checked')) {
1102 var id = $(this).attr('data-series-id');
1103 _this.chartOptions.series[id].pointShape = $(this).val();
1104 _this.chartSourceData.settings.series_point_shape[id] = $(this).val();
1105 _this.drawChartFunction(_this.chartData, _this.chartOptions);
1106 }
1107 });
1108
1109 // Rows settings
1110 _this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').on('change', function () {
1111 var getChartSource = _this.chartSourceData.source;
1112 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1113
1114 if ($(this).is(':checked')) {
1115 dataTypes = _this.setRowOptions(dataTypes, _this.chartSourceData.settings, false);
1116 _this.chartSourceData.settings.enable_row_settings = 'checked';
1117 } else {
1118 dataTypes = _this.removeRowOptions(dataTypes);
1119 _this.chartSourceData.settings.enable_row_settings = '';
1120 }
1121
1122 _this.chartData = google.visualization.arrayToDataTable(dataTypes);
1123 _this.chartObj.draw(_this.chartData, _this.chartOptions);
1124 });
1125
1126 _this.$el.find('.'+_this.htmlClassPrefix+'option-rows-color').on('input', function () {
1127 if (_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').is(':checked')) {
1128 var getChartSource = _this.chartSourceData.source;
1129 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1130
1131 var id = $(this).attr('data-rows-id');
1132 _this.chartSourceData.settings.rows_color[id] = $(this).val();
1133
1134 dataTypes = _this.setRowOptions(dataTypes, _this.chartSourceData.settings, false);
1135
1136 _this.chartData = google.visualization.arrayToDataTable(dataTypes);
1137
1138 _this.chartObj.draw(_this.chartData, _this.chartOptions);
1139 }
1140 });
1141
1142 _this.$el.find('.'+_this.htmlClassPrefix+'option-rows-opacity').on('input', function () {
1143 if (_this.$el.find('#'+_this.htmlClassPrefix+'option-enable-row-settings').is(':checked')) {
1144 var getChartSource = _this.chartSourceData.source;
1145 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1146
1147 var id = $(this).attr('data-rows-id');
1148 _this.chartSourceData.settings.rows_opacity[id] = $(this).val();
1149
1150 dataTypes = _this.setRowOptions(dataTypes, _this.chartSourceData.settings, false);
1151
1152 _this.chartData = google.visualization.arrayToDataTable(dataTypes);
1153
1154 _this.chartObj.draw(_this.chartData, _this.chartOptions);
1155 }
1156 });
1157 }
1158
1159 ChartBuilderGoogleCharts.prototype.toggleQuizSelect = function (e) {
1160 var _this = this;
1161
1162 var select = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query');
1163 var option = $(select).find('option:selected').val();
1164 var selectQuizSelect = $(document).find('.'+_this.htmlClassPrefix+'select-quiz-maker-quiz-container');
1165
1166 if (option == 'q1' || option == 'q3' || option == 'q6') {
1167 selectQuizSelect.slideDown();
1168 } else {
1169 selectQuizSelect.slideUp();
1170 }
1171 }
1172
1173 ChartBuilderGoogleCharts.prototype.quizMakerIntegrationConfig = function (e) {
1174 var _this = this;
1175
1176 var input = $(document).find('input[name="ays_source_type"]');
1177 if (input.val() !== 'quiz_maker') input.val('quiz_maker');
1178
1179 _this.$el.find('#ays-chart-quiz-maker-success').empty();
1180 _this.$el.find('#ays-chart-quiz-maker-error').empty();
1181 }
1182
1183 ChartBuilderGoogleCharts.prototype.detectManualChange = function (e) {
1184 var input = $(document).find('input[name="ays_source_type"]');
1185 if (input.val() !== 'manual') input.val('manual');
1186 }
1187
1188 ChartBuilderGoogleCharts.prototype.keyBoardConfig = function(e) {
1189 if (e.which == 13) {
1190 if ($(document).find("#ays-charts-form-google-charts").length !== 0 || $(document).find("#ays-settings-form").length !== 0) {
1191 var parent = $(e.target).parents('.ays-chart-chart-source-data-edit-block');
1192 var index = $(e.target).parents('.ays-chart-chart-source-data-input-box').index();
1193 index = parent.index() == 0 ? index - 1 : index - 2;
1194
1195 if (e.shiftKey) {
1196 var prevRow;
1197 if (parent.prev('.ays-chart-chart-source-data-edit-block').length === 0) {
1198 return false;
1199 }
1200 prevRow = parent.prev('.ays-chart-chart-source-data-edit-block');
1201
1202 prevRow.children('.ays-chart-chart-source-data-input-box').eq(index).find('.ays-text-input').focus();
1203 } else {
1204 var nextRow;
1205 if (parent.next('.ays-chart-chart-source-data-edit-block').length === 0) {
1206 this.addChartDataRow();
1207 }
1208 nextRow = parent.next('.ays-chart-chart-source-data-edit-block');
1209
1210 nextRow.children('.ays-chart-chart-source-data-input-box').eq(index).find('.ays-text-input').focus();
1211 }
1212
1213 return false;
1214 }
1215 }
1216 }
1217
1218 ChartBuilderGoogleCharts.prototype.changeTabs = function(e){
1219 if(! $(this).hasClass('no-js')){
1220 var elemenetID = $(this).attr('href');
1221 var active_tab = $(this).attr('data-tab');
1222 $(document).find('.nav-tab-wrapper a.nav-tab').each(function () {
1223 if ($(this).hasClass('nav-tab-active')) {
1224 $(this).removeClass('nav-tab-active');
1225 }
1226 });
1227 $(this).addClass('nav-tab-active');
1228 $(document).find('.ays-tab-content').each(function () {
1229 $(this).removeClass('ays-tab-content-active');
1230 });
1231 $(document).find("[name='ays_chart_tab']").val(active_tab);
1232 $('.ays-tab-content' + elemenetID).addClass('ays-tab-content-active');
1233 e.preventDefault();
1234 }
1235 }
1236
1237 ChartBuilderGoogleCharts.prototype.changeCurrentUrl = function(key){
1238 var linkModified = location.href.split('?')[1].split('&');
1239 for(var i = 0; i < linkModified.length; i++){
1240 if(linkModified[i].split("=")[0] == key){
1241 linkModified.splice(i, 1);
1242 }
1243 }
1244 linkModified = linkModified.join('&');
1245 window.history.replaceState({}, document.title, '?'+linkModified);
1246 }
1247
1248 ChartBuilderGoogleCharts.prototype.toggleDDmenu = function(e){
1249 var ddmenu = $(this).next();
1250 var state = ddmenu.attr('data-expanded');
1251 switch (state) {
1252 case 'true':
1253 $(this).find('.ays_fa').css({
1254 transform: 'rotate(0deg)'
1255 });
1256 ddmenu.attr('data-expanded', 'false');
1257 break;
1258 case 'false':
1259 $(this).find('.ays_fa').css({
1260 transform: 'rotate(90deg)'
1261 });
1262 ddmenu.attr('data-expanded', 'true');
1263 break;
1264 }
1265 }
1266
1267 ChartBuilderGoogleCharts.prototype.submitOnce = function(el) {
1268 setTimeout(function() {
1269 $(document).find('.ays-chart-loader-banner').attr('disabled', true);
1270 }, 50);
1271
1272 setTimeout(function() {
1273 $(document).find('.ays-chart-loader-banner').attr('disabled', false);
1274 }, 5000);
1275 }
1276
1277 // Load charts by given type main function
1278 ChartBuilderGoogleCharts.prototype.initLibraries = function (){
1279 var _this = this;
1280
1281 var googleSelect = _this.$el.find('.' + _this.htmlClassPrefix + 'google-sheet-select');
1282 googleSelect.select2();
1283 var fileTypeSelect = _this.$el.find('#' + _this.htmlClassPrefix + 'import-files-file-type');
1284 fileTypeSelect.select2();
1285 var quizQuerySelect = _this.$el.find('#' + _this.htmlClassPrefix + 'select-quiz-maker-data-query');
1286 quizQuerySelect.select2();
1287 var quizQuizSelect = _this.$el.find('#' + _this.htmlClassPrefix + 'select-quiz-maker-quiz');
1288 quizQuizSelect.select2();
1289 var woocommerceSelect = _this.$el.find('#' + _this.htmlClassPrefix + 'woocommerce-datas-select');
1290 woocommerceSelect.select2();
1291
1292 _this.$el.find('#ays-chart-option-create-author').select2({
1293 placeholder: aysChartBuilderAdmin.selectUser,
1294 minimumInputLength: 1,
1295 allowClear: true,
1296 language: {
1297 searching: function() {
1298 return aysChartBuilderAdmin.searching;
1299 },
1300 inputTooShort: function () {
1301 return aysChartBuilderAdmin.pleaseEnterMore;
1302 }
1303 },
1304 ajax: {
1305 url: ajaxurl,
1306 dataType: 'json',
1307 data: function (response) {
1308 var checkedUsers = _this.$el.find('#ays-chart-option-create-author').val();
1309 return {
1310 action: _this.ajaxAction,
1311 function: window.aysChartBuilderChartSettings.ajax['actions']['author_user_search'],
1312 security: window.aysChartBuilderChartSettings.ajax['nonces']['author_user_search'],
1313 params: {
1314 search: response.term,
1315 val: checkedUsers
1316 }
1317 };
1318 }
1319 }
1320 });
1321
1322 _this.$el.find('.' + _this.htmlClassPrefix + 'chart-source-data-content').sortable({
1323 items: "> div." + _this.htmlClassPrefix + "chart-source-data-edit-block:not(:first)",
1324 handle: "." + _this.htmlClassPrefix + "chart-source-data-move-row",
1325 update: function (event, ui) {
1326 _this.$el.find('div.' + _this.htmlClassPrefix + 'chart-source-data-edit-block:not(:first)').each(function (index) {
1327 $(this).attr('data-source-id', index + 1);
1328 $(this).find("input.ays-text-input").attr('name', 'ays_chart_source_data[' + (index + 1) + '][]')
1329 });
1330 }
1331 });
1332 }
1333
1334 // Load charts by given type main function
1335 ChartBuilderGoogleCharts.prototype.loadChartBySource = function(isChangedType = false){
1336 var _this = this;
1337
1338 if( ! _this.chartType ){
1339 _this.chartType = _this.chartSourceData.chartType;
1340 }
1341
1342 if(typeof _this.chartType !== undefined && _this.chartType){
1343 switch (_this.chartType) {
1344 case 'pie_chart':
1345 _this.pieChartView(isChangedType);
1346 break;
1347 case 'bar_chart':
1348 _this.barChartView(isChangedType);
1349 break;
1350 case 'column_chart':
1351 _this.columnChartView(isChangedType);
1352 break;
1353 case 'line_chart':
1354 _this.lineChartView(isChangedType);
1355 break;
1356 case 'org_chart':
1357 _this.orgChartView(isChangedType);
1358 break;
1359 case 'donut_chart':
1360 _this.donutChartView(isChangedType);
1361 break;
1362 default:
1363 _this.pieChartView(isChangedType);
1364 break;
1365 }
1366 }
1367 }
1368
1369 // Load chart by pie chart
1370 ChartBuilderGoogleCharts.prototype.pieChartView = function(isChangedType){
1371 var _this = this;
1372 var getChartSource = _this.chartSourceData.source;
1373
1374 var dataTypes = _this.chartConvertData( getChartSource );
1375
1376 var settings = _this.chartSourceData.settings;
1377 var nSettings = _this.configOptionsForCharts(settings);
1378
1379 /* == Google part == */
1380 google.charts.load('current', {'packages':['corechart']});
1381 google.charts.setOnLoadCallback(drawChart);
1382
1383 function drawChart() {
1384 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable( dataTypes );
1385
1386 _this.chartOptions = {
1387 fontSize: nSettings.chartFontSize,
1388 chartArea: {
1389 left: nSettings.chartLeftMargin,
1390 right: nSettings.chartRightMargin,
1391 top: nSettings.chartTopMargin,
1392 bottom: nSettings.chartBottomMargin,
1393 },
1394 backgroundColor: {
1395 fill: nSettings.backgroundColor,
1396 // strokeWidth: nSettings.borderWidth,
1397 // stroke: nSettings.borderColor
1398 },
1399 enableInteractivity: nSettings.enableInteractivity,
1400 legend: {
1401 position: nSettings.legendPosition,
1402 alignment: nSettings.legendAlignment,
1403 textStyle: {
1404 color: nSettings.legendColor,
1405 fontSize: nSettings.legendFontSize,
1406 italic: nSettings.legendItalicText,
1407 bold: nSettings.legendBoldText,
1408 }
1409 },
1410 tooltip: {
1411 trigger: nSettings.tooltipTrigger,
1412 showColorCode: nSettings.showColorCode,
1413 text: nSettings.tooltipText,
1414 textStyle: {
1415 color: nSettings.tooltipTextColor,
1416 fontSize: nSettings.tooltipFontSize,
1417 italic: nSettings.tooltipItalicText,
1418 bold: nSettings.tooltipBoldText,
1419 }
1420 },
1421 pieStartAngle: nSettings.rotationDegree,
1422 pieSliceBorderColor: nSettings.sliceBorderColor,
1423 reverseCategories: nSettings.reverseCategories,
1424 pieSliceText: nSettings.sliceText,
1425 sliceVisibilityThreshold: nSettings.dataGroupingLimit,
1426 pieResidueSliceLabel: nSettings.dataGroupingLabel,
1427 pieResidueSliceColor: nSettings.dataGroupingColor,
1428 slices: {}
1429 };
1430
1431 for (var i = 0; i < dataTypes.length - 1; i++) {
1432 _this.chartOptions.slices[i] = {
1433 color: nSettings.sliceColor[i],
1434 offset: typeof nSettings.sliceOffset[i] !== 'undefined' ? nSettings.sliceOffset[i] : 0,
1435 textStyle: {
1436 color: nSettings.sliceTextColor[i],
1437 },
1438 }
1439 }
1440
1441 _this.chartObj = new google.visualization.PieChart( document.getElementById(_this.htmlClassPrefix + _this.chartType) );
1442
1443 _this.chartObj.draw( _this.chartData, _this.chartOptions );
1444 _this.resizeChart();
1445 }
1446 /* */
1447 }
1448
1449 // Load chart by bar chart
1450 ChartBuilderGoogleCharts.prototype.barChartView = function(isChangedType){
1451 var _this = this;
1452 var getChartSource = _this.chartSourceData.source;
1453 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1454
1455 var settings = _this.chartSourceData.settings;
1456 var nSettings = _this.configOptionsForCharts(settings);
1457
1458 /* == Google part == */
1459 google.charts.load('current', {'packages':['corechart']});
1460 google.charts.setOnLoadCallback(drawChart);
1461
1462 function drawChart() {
1463 dataTypes = nSettings.enableRowSettings ? _this.setRowOptions(dataTypes, nSettings, true) : dataTypes;
1464
1465 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable(dataTypes);
1466
1467 _this.chartOptions = {
1468 fontSize: nSettings.chartFontSize,
1469 backgroundColor: {
1470 fill: nSettings.backgroundColor,
1471 // strokeWidth: nSettings.borderWidth,
1472 // stroke: nSettings.borderColor
1473 },
1474 chartArea: {
1475 backgroundColor: {
1476 fill: nSettings.chartBackgroundColor,
1477 stroke: nSettings.chartBorderColor,
1478 strokeWidth: nSettings.chartBorderWidth
1479 },
1480 left: nSettings.chartLeftMargin,
1481 right: nSettings.chartRightMargin,
1482 top: nSettings.chartTopMargin,
1483 bottom: nSettings.chartBottomMargin,
1484 },
1485 enableInteractivity: nSettings.enableInteractivity,
1486 theme: nSettings.maximizedView,
1487 legend: {
1488 position: nSettings.legendPosition,
1489 alignment: nSettings.legendAlignment,
1490 textStyle: {
1491 color: nSettings.legendColor,
1492 fontSize: nSettings.legendFontSize,
1493 italic: nSettings.legendItalicText,
1494 bold: nSettings.legendBoldText,
1495 }
1496 },
1497 tooltip: {
1498 trigger: nSettings.tooltipTrigger,
1499 showColorCode: nSettings.showColorCode,
1500 textStyle: {
1501 color: nSettings.tooltipTextColor,
1502 fontSize: nSettings.tooltipFontSize,
1503 italic: nSettings.tooltipItalicText,
1504 bold: nSettings.tooltipBoldText,
1505 }
1506 },
1507 hAxis: {
1508 title: nSettings.hAxisTitle,
1509 textPosition: nSettings.hAxisTextPosition,
1510 direction: nSettings.hAxisDirection,
1511 baselineColor: nSettings.hAxisBaselineColor,
1512 textStyle: {
1513 color: nSettings.hAxisTextColor,
1514 fontSize: nSettings.hAxisTextFontSize,
1515 italic: nSettings.hAxisItalicText,
1516 bold: nSettings.hAxisBoldText,
1517 },
1518 slantedText: nSettings.hAxisSlantedText,
1519 slantedTextAngle: nSettings.hAxisSlantedTextAngle,
1520 format: nSettings.hAxisFormat,
1521 titleTextStyle: {
1522 fontSize: nSettings.hAxisLabelFontSize,
1523 color: nSettings.hAxisLabelColor,
1524 italic: nSettings.hAxisItalicTitle,
1525 bold: nSettings.hAxisBoldTitle,
1526 },
1527 viewWindow: {
1528 min: nSettings.hAxisMinValue,
1529 max: nSettings.hAxisMaxValue,
1530 },
1531 gridlines: {
1532 count: nSettings.hAxisGridlinesCount,
1533 color: nSettings.hAxisGridlinesColor,
1534 },
1535 minorGridlines: {
1536 color: nSettings.hAxisMinorGridlinesColor,
1537 },
1538 },
1539 vAxis: {
1540 title: nSettings.vAxisTitle,
1541 textPosition: nSettings.vAxisTextPosition,
1542 direction: nSettings.vAxisDirection,
1543 baselineColor: nSettings.vAxisBaselineColor,
1544 textStyle: {
1545 color: nSettings.vAxisTextColor,
1546 fontSize: nSettings.vAxisTextFontSize,
1547 italic: nSettings.vAxisItalicText,
1548 bold: nSettings.vAxisBoldText,
1549 },
1550 format: nSettings.vAxisFormat,
1551 titleTextStyle: {
1552 fontSize: nSettings.vAxisLabelFontSize,
1553 color: nSettings.vAxisLabelColor,
1554 italic: nSettings.vAxisItalicTitle,
1555 bold: nSettings.vAxisBoldTitle,
1556 },
1557 viewWindow: {
1558 min: nSettings.vAxisMinValue,
1559 max: nSettings.vAxisMaxValue,
1560 },
1561 gridlines: {
1562 count: nSettings.vAxisGridlinesCount,
1563 color: nSettings.vAxisGridlinesColor,
1564 },
1565 minorGridlines: {
1566 color: nSettings.vAxisMinorGridlinesColor,
1567 },
1568 },
1569 focusTarget: nSettings.focusTarget,
1570 isStacked: nSettings.isStacked,
1571 dataOpacity: nSettings.opacity,
1572 bar: {
1573 groupWidth: nSettings.groupWidth
1574 },
1575 series: {},
1576 };
1577
1578 var seriesRows = dataTypes[0].filter(item => typeof item === 'string');
1579 for (var i = 0; i < seriesRows.length - 1; i++) {
1580 _this.chartOptions.series[i] = {
1581 color: nSettings.seriesColor[i],
1582 visibleInLegend: nSettings.seriesVisibleInLegend[i] == 'on' ? true : (typeof nSettings.seriesColor[i] !== 'undefined' ? false : true),
1583 }
1584 }
1585
1586 if (nSettings.enableAnimation) {
1587 _this.chartOptions.animation = {
1588 startup: nSettings.animationStartup,
1589 duration: nSettings.animationDuration,
1590 easing: nSettings.animationEasing,
1591 }
1592 }
1593
1594 _this.chartObj = new google.visualization.BarChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
1595
1596 _this.chartObj.draw( _this.chartData, _this.chartOptions );
1597 _this.resizeChart();
1598 }
1599 /* */
1600 }
1601
1602 // Load chart by column chart
1603 ChartBuilderGoogleCharts.prototype.columnChartView = function(isChangedType){
1604 var _this = this;
1605 var getChartSource = _this.chartSourceData.source;
1606
1607 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1608
1609 var settings = _this.chartSourceData.settings;
1610 var nSettings = _this.configOptionsForCharts(settings);
1611
1612 /* == Google part == */
1613 google.charts.load('current', {'packages':['corechart']});
1614 google.charts.setOnLoadCallback(drawChart);
1615
1616 function drawChart() {
1617 dataTypes = nSettings.enableRowSettings ? _this.setRowOptions(dataTypes, nSettings, true) : dataTypes;
1618
1619 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable(dataTypes);
1620
1621 _this.chartOptions = {
1622 fontSize: nSettings.chartFontSize,
1623 backgroundColor: {
1624 fill: nSettings.backgroundColor,
1625 // strokeWidth: nSettings.borderWidth,
1626 // stroke: nSettings.borderColor
1627 },
1628 chartArea: {
1629 backgroundColor: {
1630 fill: nSettings.chartBackgroundColor,
1631 stroke: nSettings.chartBorderColor,
1632 strokeWidth: nSettings.chartBorderWidth
1633 },
1634 left: nSettings.chartLeftMargin,
1635 right: nSettings.chartRightMargin,
1636 top: nSettings.chartTopMargin,
1637 bottom: nSettings.chartBottomMargin,
1638 },
1639 enableInteractivity: nSettings.enableInteractivity,
1640 theme: nSettings.maximizedView,
1641 legend: {
1642 position: nSettings.legendPosition,
1643 alignment: nSettings.legendAlignment,
1644 textStyle: {
1645 color: nSettings.legendColor,
1646 fontSize: nSettings.legendFontSize,
1647 italic: nSettings.legendItalicText,
1648 bold: nSettings.legendBoldText,
1649 }
1650 },
1651 tooltip: {
1652 trigger: nSettings.tooltipTrigger,
1653 showColorCode: nSettings.showColorCode,
1654 textStyle: {
1655 color: nSettings.tooltipTextColor,
1656 fontSize: nSettings.tooltipFontSize,
1657 italic: nSettings.tooltipItalicText,
1658 bold: nSettings.tooltipBoldText,
1659 }
1660 },
1661 hAxis: {
1662 title: nSettings.hAxisTitle,
1663 textPosition: nSettings.hAxisTextPosition,
1664 direction: nSettings.hAxisDirection,
1665 baselineColor: nSettings.hAxisBaselineColor,
1666 textStyle: {
1667 color: nSettings.hAxisTextColor,
1668 fontSize: nSettings.hAxisTextFontSize,
1669 italic: nSettings.hAxisItalicText,
1670 bold: nSettings.hAxisBoldText,
1671 },
1672 slantedText: nSettings.hAxisSlantedText,
1673 slantedTextAngle: nSettings.hAxisSlantedTextAngle,
1674 format: nSettings.hAxisFormat,
1675 titleTextStyle: {
1676 fontSize: nSettings.hAxisLabelFontSize,
1677 color: nSettings.hAxisLabelColor,
1678 italic: nSettings.hAxisItalicTitle,
1679 bold: nSettings.hAxisBoldTitle,
1680 },
1681 viewWindow: {
1682 min: nSettings.hAxisMinValue,
1683 max: nSettings.hAxisMaxValue,
1684 },
1685 gridlines: {
1686 count: nSettings.hAxisGridlinesCount,
1687 color: nSettings.hAxisGridlinesColor,
1688 },
1689 minorGridlines: {
1690 color: nSettings.hAxisMinorGridlinesColor,
1691 },
1692 showTextEvery: nSettings.hAxisShowTextEvery
1693 },
1694 vAxis: {
1695 title: nSettings.vAxisTitle,
1696 textPosition: nSettings.vAxisTextPosition,
1697 direction: nSettings.vAxisDirection,
1698 baselineColor: nSettings.vAxisBaselineColor,
1699 textStyle: {
1700 color: nSettings.vAxisTextColor,
1701 fontSize: nSettings.vAxisTextFontSize,
1702 italic: nSettings.vAxisItalicText,
1703 bold: nSettings.vAxisBoldText,
1704 },
1705 format: nSettings.vAxisFormat,
1706 titleTextStyle: {
1707 fontSize: nSettings.vAxisLabelFontSize,
1708 color: nSettings.vAxisLabelColor,
1709 italic: nSettings.vAxisItalicTitle,
1710 bold: nSettings.vAxisBoldTitle,
1711 },
1712 viewWindow: {
1713 min: nSettings.vAxisMinValue,
1714 max: nSettings.vAxisMaxValue,
1715 },
1716 gridlines: {
1717 count: nSettings.vAxisGridlinesCount,
1718 color: nSettings.vAxisGridlinesColor,
1719 },
1720 minorGridlines: {
1721 color: nSettings.vAxisMinorGridlinesColor,
1722 },
1723 },
1724 focusTarget: nSettings.focusTarget,
1725 isStacked: nSettings.isStacked,
1726 dataOpacity: nSettings.opacity,
1727 bar: {
1728 groupWidth: nSettings.groupWidth
1729 },
1730 series: {},
1731 };
1732
1733 var seriesRows = dataTypes[0].filter(item => typeof item === 'string');
1734 for (var i = 0; i < seriesRows.length - 1; i++) {
1735 _this.chartOptions.series[i] = {
1736 color: nSettings.seriesColor[i],
1737 visibleInLegend: nSettings.seriesVisibleInLegend[i] == 'on' ? true : (typeof nSettings.seriesColor[i] !== 'undefined' ? false : true),
1738 }
1739 }
1740
1741 if (nSettings.enableAnimation) {
1742 _this.chartOptions.animation = {
1743 startup: nSettings.animationStartup,
1744 duration: nSettings.animationDuration,
1745 easing: nSettings.animationEasing,
1746 }
1747 }
1748
1749 _this.chartObj = new google.visualization.ColumnChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
1750
1751 _this.chartObj.draw( _this.chartData, _this.chartOptions );
1752 _this.resizeChart();
1753 }
1754 /* */
1755 }
1756
1757 // Load chart by line chart
1758 ChartBuilderGoogleCharts.prototype.lineChartView = function(isChangedType){
1759 var _this = this;
1760 var getChartSource = _this.chartSourceData.source;
1761 var dataTypes = _this.multiColumnChartConvertData(getChartSource);
1762
1763 var settings = _this.chartSourceData.settings;
1764 var nSettings = _this.configOptionsForCharts(settings);
1765
1766 /* == Google part == */
1767 google.charts.load('current', {'packages':['corechart']});
1768 google.charts.setOnLoadCallback(drawChart);
1769
1770 function drawChart() {
1771 dataTypes = nSettings.enableRowSettings ? _this.setRowOptions(dataTypes, nSettings, true) : dataTypes;
1772
1773 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable(dataTypes);
1774
1775 _this.chartOptions = {
1776 fontSize: nSettings.chartFontSize,
1777 backgroundColor: {
1778 fill: nSettings.backgroundColor,
1779 // strokeWidth: nSettings.borderWidth,
1780 // stroke: nSettings.borderColor
1781 },
1782 chartArea: {
1783 backgroundColor: {
1784 fill: nSettings.chartBackgroundColor,
1785 stroke: nSettings.chartBorderColor,
1786 strokeWidth: nSettings.chartBorderWidth
1787 },
1788 left: nSettings.chartLeftMargin,
1789 right: nSettings.chartRightMargin,
1790 top: nSettings.chartTopMargin,
1791 bottom: nSettings.chartBottomMargin,
1792 },
1793 enableInteractivity: nSettings.enableInteractivity,
1794 theme: nSettings.maximizedView,
1795 legend: {
1796 position: nSettings.legendPosition,
1797 alignment: nSettings.legendAlignment,
1798 textStyle: {
1799 color: nSettings.legendColor,
1800 fontSize: nSettings.legendFontSize,
1801 italic: nSettings.legendItalicText,
1802 bold: nSettings.legendBoldText,
1803 }
1804 },
1805 tooltip: {
1806 trigger: nSettings.tooltipTrigger,
1807 showColorCode: nSettings.showColorCode,
1808 textStyle: {
1809 color: nSettings.tooltipTextColor,
1810 fontSize: nSettings.tooltipFontSize,
1811 italic: nSettings.tooltipItalicText,
1812 bold: nSettings.tooltipBoldText,
1813 }
1814 },
1815 hAxis: {
1816 title: nSettings.hAxisTitle,
1817 textPosition: nSettings.hAxisTextPosition,
1818 direction: nSettings.hAxisDirection,
1819 baselineColor: nSettings.hAxisBaselineColor,
1820 textStyle: {
1821 color: nSettings.hAxisTextColor,
1822 fontSize: nSettings.hAxisTextFontSize,
1823 italic: nSettings.hAxisItalicText,
1824 bold: nSettings.hAxisBoldText,
1825 },
1826 slantedText: nSettings.hAxisSlantedText,
1827 slantedTextAngle: nSettings.hAxisSlantedTextAngle,
1828 format: nSettings.hAxisFormat,
1829 titleTextStyle: {
1830 fontSize: nSettings.hAxisLabelFontSize,
1831 color: nSettings.hAxisLabelColor,
1832 italic: nSettings.hAxisItalicTitle,
1833 bold: nSettings.hAxisBoldTitle,
1834 },
1835 viewWindow: {
1836 min: nSettings.hAxisMinValue,
1837 max: nSettings.hAxisMaxValue,
1838 },
1839 gridlines: {
1840 count: nSettings.hAxisGridlinesCount,
1841 color: nSettings.hAxisGridlinesColor,
1842 },
1843 minorGridlines: {
1844 color: nSettings.hAxisMinorGridlinesColor,
1845 },
1846 showTextEvery: nSettings.hAxisShowTextEvery
1847 },
1848 vAxis: {
1849 title: nSettings.vAxisTitle,
1850 textPosition: nSettings.vAxisTextPosition,
1851 direction: nSettings.vAxisDirection,
1852 baselineColor: nSettings.vAxisBaselineColor,
1853 textStyle: {
1854 color: nSettings.vAxisTextColor,
1855 fontSize: nSettings.vAxisTextFontSize,
1856 italic: nSettings.vAxisItalicText,
1857 bold: nSettings.vAxisBoldText,
1858 },
1859 format: nSettings.vAxisFormat,
1860 titleTextStyle: {
1861 fontSize: nSettings.vAxisLabelFontSize,
1862 color: nSettings.vAxisLabelColor,
1863 italic: nSettings.vAxisItalicTitle,
1864 bold: nSettings.vAxisBoldTitle,
1865 },
1866 viewWindow: {
1867 min: nSettings.vAxisMinValue,
1868 max: nSettings.vAxisMaxValue,
1869 },
1870 gridlines: {
1871 count: nSettings.vAxisGridlinesCount,
1872 color: nSettings.vAxisGridlinesColor,
1873 },
1874 minorGridlines: {
1875 color: nSettings.vAxisMinorGridlinesColor,
1876 },
1877 },
1878 crosshair: {
1879 opacity: nSettings.crosshairOpacity,
1880 orientation: nSettings.crosshairOrientation,
1881 trigger: nSettings.crosshairTrigger,
1882 },
1883 focusTarget: nSettings.focusTarget,
1884 dataOpacity: nSettings.opacity,
1885 lineWidth: nSettings.lineWidth,
1886 selectionMode: nSettings.multipleSelection,
1887 aggregationTarget: nSettings.multipleDataFormat,
1888 pointShape: nSettings.pointShape,
1889 pointSize: nSettings.pointSize,
1890 orientation: nSettings.orientation,
1891 interpolateNulls: nSettings.fillNulls,
1892 lineDashStyle: nSettings.dashStyle,
1893 series: {},
1894 };
1895
1896 var seriesRows = dataTypes[0].filter(item => typeof item === 'string');
1897 for (var i = 0; i < seriesRows.length - 1; i++) {
1898 _this.chartOptions.series[i] = {
1899 color: nSettings.seriesColor[i],
1900 visibleInLegend: nSettings.seriesVisibleInLegend[i] == 'on' ? true : (typeof nSettings.seriesColor[i] !== 'undefined' ? false : true),
1901 lineWidth: nSettings.seriesLineWidth[i],
1902 pointSize: nSettings.seriesPointSize[i],
1903 pointShape: nSettings.seriesPointShape[i],
1904 }
1905 }
1906
1907 if (nSettings.enableAnimation) {
1908 _this.chartOptions.animation = {
1909 startup: nSettings.animationStartup,
1910 duration: nSettings.animationDuration,
1911 easing: nSettings.animationEasing,
1912 }
1913 }
1914
1915 _this.chartObj = new google.visualization.LineChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
1916
1917 _this.chartObj.draw( _this.chartData, _this.chartOptions );
1918 _this.resizeChart();
1919 }
1920 /* */
1921 }
1922
1923 // Load chart by donut chart
1924 ChartBuilderGoogleCharts.prototype.donutChartView = function(isChangedType){
1925 var _this = this;
1926 var getChartSource = _this.chartSourceData.source;
1927 var dataTypes = _this.chartConvertData( getChartSource );
1928
1929 var settings = _this.chartSourceData.settings;
1930 var nSettings = _this.configOptionsForCharts(settings);
1931
1932 /* == Google part == */
1933 google.charts.load('current', {'packages':['corechart']});
1934 google.charts.setOnLoadCallback(drawChart);
1935
1936 function drawChart() {
1937 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable( dataTypes );
1938
1939 _this.chartOptions = {
1940 fontSize: nSettings.chartFontSize,
1941 chartArea: {
1942 left: nSettings.chartLeftMargin,
1943 right: nSettings.chartRightMargin,
1944 top: nSettings.chartTopMargin,
1945 bottom: nSettings.chartBottomMargin,
1946 },
1947 backgroundColor: {
1948 fill: nSettings.backgroundColor,
1949 // strokeWidth: nSettings.borderWidth,
1950 // stroke: nSettings.borderColor
1951 },
1952 enableInteractivity: nSettings.enableInteractivity,
1953 legend: {
1954 position: nSettings.legendPosition,
1955 alignment: nSettings.legendAlignment,
1956 textStyle: {
1957 color: nSettings.legendColor,
1958 fontSize: nSettings.legendFontSize,
1959 italic: nSettings.legendItalicText,
1960 bold: nSettings.legendBoldText,
1961 }
1962 },
1963 tooltip: {
1964 trigger: nSettings.tooltipTrigger,
1965 showColorCode: nSettings.showColorCode,
1966 text: nSettings.tooltipText,
1967 textStyle: {
1968 color: nSettings.tooltipTextColor,
1969 fontSize: nSettings.tooltipFontSize,
1970 italic: nSettings.tooltipItalicText,
1971 bold: nSettings.tooltipBoldText,
1972 }
1973 },
1974 pieStartAngle: nSettings.rotationDegree,
1975 pieSliceBorderColor: nSettings.sliceBorderColor,
1976 reverseCategories: nSettings.reverseCategories,
1977 pieSliceText: nSettings.sliceText,
1978 sliceVisibilityThreshold: nSettings.dataGroupingLimit,
1979 pieResidueSliceLabel: nSettings.dataGroupingLabel,
1980 pieResidueSliceColor: nSettings.dataGroupingColor,
1981 pieHole: nSettings.holeSize,
1982 slices: {}
1983 };
1984
1985 for (var i = 0; i < dataTypes.length - 1; i++) {
1986 _this.chartOptions.slices[i] = {
1987 color: nSettings.sliceColor[i],
1988 offset: typeof nSettings.sliceOffset[i] !== 'undefined' ? nSettings.sliceOffset[i] : 0,
1989 textStyle: {
1990 color: nSettings.sliceTextColor[i],
1991 },
1992 }
1993 }
1994
1995 _this.chartObj = new google.visualization.PieChart( document.getElementById(_this.htmlClassPrefix + _this.chartType) );
1996
1997 _this.chartObj.draw( _this.chartData, _this.chartOptions );
1998 _this.resizeChart();
1999 }
2000 /* */
2001 }
2002
2003 // Load chart by org chart
2004 ChartBuilderGoogleCharts.prototype.orgChartView = function(isChangedType){
2005 var _this = this;
2006 var getChartSource = _this.chartSourceData.source;
2007 var dataTypes = _this.orgChartConvertData(getChartSource);
2008 var treeData = _this.orgChartConvertDataForTreeManual(getChartSource);
2009
2010 var settings = _this.chartSourceData.settings;
2011 var nSettings = _this.configOptionsForCharts(settings);
2012
2013 /* == Google part == */
2014 google.charts.load('current', {'packages':['orgchart']});
2015 google.charts.setOnLoadCallback(drawChart);
2016
2017 function drawChart() {
2018 _this.chartDataArray = isChangedType ? _this.chartDataArray : dataTypes;
2019 _this.chartData = google.visualization.arrayToDataTable(_this.chartDataArray);
2020
2021 var view = new google.visualization.DataView(_this.chartData);
2022 view.setColumns([0, 1, 2]);
2023
2024 _this.chartOptions = {
2025 allowHtml: true,
2026 size: nSettings.orgChartFontSize,
2027 allowCollapse: nSettings.allowCollapse,
2028 compactRows: true,
2029 nodeClass: nSettings.orgClassname,
2030 selectedNodeClass: nSettings.orgSelectedClassname,
2031 };
2032
2033 _this.chartObj = new google.visualization.OrgChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
2034
2035 google.visualization.events.addListener(_this.chartObj, 'select', function () {
2036 var selection = _this.chartObj.getSelection();
2037 if (selection.length > 0) {
2038 if (_this.chartData.getValue(selection[0].row, 3) != '') {
2039 window.open(_this.chartData.getValue(selection[0].row, 3), '_blank');
2040 }
2041 }
2042 });
2043
2044 google.visualization.events.addListener(_this.chartObj, 'collapse', function () {
2045 _this.setOrgChartCustomStyles();
2046 });
2047
2048 _this.chartObj.draw( view, _this.chartOptions );
2049 _this.resizeChart();
2050 _this.setOrgChartCustomStyles();
2051 }
2052
2053 _this.$el.on('click', '.google-visualization-orgchart-node-small, .google-visualization-orgchart-node-medium, .google-visualization-orgchart-node-large', function(e) {
2054 if (nSettings.orgSelectedClassname !== '') {
2055 _this.setOrgChartCustomStyles();
2056 }
2057 });
2058
2059 var treeManualId = '#ays-chart-chart-source-data-edit-tree-content';
2060 var sortable = new TreeSortable({
2061 treeSelector: treeManualId,
2062 });
2063 var $treeManual = $(treeManualId);
2064 var $content = treeData.map(sortable.createBranch);
2065 $treeManual.html($content);
2066 sortable.run();
2067
2068 sortable.addListener('click', '.add-child', function (event, instance) {
2069 instance.addChildBranch($(event.target), treeData);
2070 });
2071 sortable.addListener('click', '.add-sibling', function (event, instance) {
2072 instance.addSiblingBranch($(event.target), treeData);
2073 });
2074
2075 sortable.addListener('click', '.remove-branch', function (event, instance) {
2076 event.preventDefault();
2077 var confirm = window.confirm('Are you sure you want to delete this branch?');
2078 if (!confirm) {
2079 return;
2080 }
2081 instance.removeBranch($(event.target));
2082 });
2083
2084 sortable.addListener('click', '.open-branch-options', function (event, instance) {
2085 instance.openBranchOptions($(event.target));
2086 })
2087
2088 sortable.addListener('click', '.close-branch-options', function (event, instance) {
2089 instance.closeBranchOptions($(event.target));
2090 })
2091
2092 sortable.addListener('click', '.change-branch-options', function (event, instance) {
2093 instance.changeBranchOptions($(event.target));
2094 })
2095
2096 tippy('[data-tippy-content]');
2097 }
2098
2099 /*
2100 Configure all settings for all chart types
2101 Getting settings for each chart type in respective function
2102 */
2103 ChartBuilderGoogleCharts.prototype.configOptionsForCharts = function (settings) {
2104 var newSettings = {};
2105
2106 newSettings.chartFontSize = settings['font_size'];
2107 newSettings.backgroundColor = settings['transparent_background'] && settings['transparent_background'] === 'checked' ? 'transparent' : settings['background_color'];
2108 // newSettings.borderWidth = settings['border_width'];
2109 // newSettings.borderColor = settings['border_color'];
2110 newSettings.tooltipTrigger = settings['tooltip_trigger'];
2111 newSettings.tooltipText = settings['tooltip_text'];
2112 newSettings.showColorCode = (settings['show_color_code'] == 'checked') ? true : false;
2113 newSettings.tooltipItalicText = (settings['tooltip_italic'] == 'checked') ? true : false;
2114 newSettings.tooltipBoldText = settings['tooltip_bold'];
2115 newSettings.legendItalicText = (settings['legend_italic'] == 'checked') ? true : false;
2116 newSettings.legendBoldText = (settings['legend_bold'] == 'checked') ? true : false;
2117 newSettings.tooltipTextColor = settings['tooltip_text_color'];
2118 newSettings.tooltipFontSize = settings['tooltip_font_size'];
2119 newSettings.legendPosition = settings['legend_position'];
2120 newSettings.legendAlignment = settings['legend_alignment'];
2121 newSettings.legendFontSize = settings['legend_font_size'];
2122 newSettings.rotationDegree = settings['rotation_degree'];
2123 newSettings.sliceBorderColor = settings['slice_border_color'];
2124 newSettings.reverseCategories = (settings['reverse_categories'] == 'checked') ? true : false;
2125 newSettings.sliceText = settings['slice_text'];
2126 newSettings.legendColor = settings['legend_color'];
2127 newSettings.dataGroupingLimit = settings['data_grouping_limit']/100;
2128 newSettings.dataGroupingLabel = settings['data_grouping_label'];
2129 newSettings.dataGroupingColor = settings['data_grouping_color'];
2130 newSettings.sliceColor = settings['slice_color'];
2131 newSettings.sliceOffset = settings['slice_offset'];
2132 newSettings.sliceTextColor = settings['slice_text_color'];
2133 newSettings.chartBackgroundColor = settings['transparent_background'] && settings['transparent_background'] === 'checked' ? 'transparent' : settings['chart_background_color'];
2134 newSettings.chartBorderWidth = settings['chart_border_width'];
2135 newSettings.chartBorderColor = settings['chart_border_color'];
2136 newSettings.chartLeftMargin = settings['chart_left_margin_for_js'];
2137 newSettings.chartRightMargin = settings['chart_right_margin_for_js'];
2138 newSettings.chartTopMargin = settings['chart_top_margin_for_js'];
2139 newSettings.chartBottomMargin = settings['chart_bottom_margin_for_js'];
2140 newSettings.isStacked = (settings['is_stacked'] == 'checked') ? true : false;
2141 newSettings.focusTarget = settings['focus_target'];
2142 newSettings.groupWidthFormat = settings['group_width_format'] == '%' ? '%' : '';
2143 newSettings.groupWidth = settings['group_width'] + newSettings.groupWidthFormat;
2144 newSettings.hAxisTitle = settings['haxis_title'];
2145 newSettings.vAxisTitle = settings['vaxis_title'];
2146 newSettings.hAxisLabelFontSize = settings['haxis_label_font_size'];
2147 newSettings.vAxisLabelFontSize = settings['vaxis_label_font_size'];
2148 newSettings.hAxisLabelColor = settings['haxis_label_color'];
2149 newSettings.vAxisLabelColor = settings['vaxis_label_color'];
2150 newSettings.hAxisTextPosition = settings['haxis_text_position'];
2151 newSettings.vAxisTextPosition = settings['vaxis_text_position'];
2152 newSettings.vAxisDirection = (settings['vaxis_direction'] == 'checked') ? -1 : 1;
2153 newSettings.hAxisDirection = (settings['haxis_direction'] == 'checked') ? -1 : 1;
2154 newSettings.hAxisTextColor = settings['haxis_text_color'];
2155 newSettings.vAxisTextColor = settings['vaxis_text_color'];
2156 newSettings.hAxisBaselineColor = settings['haxis_baseline_color'];
2157 newSettings.vAxisBaselineColor = settings['vaxis_baseline_color'];
2158 newSettings.hAxisTextFontSize = settings['haxis_text_font_size'];
2159 newSettings.vAxisTextFontSize = settings['vaxis_text_font_size'];
2160 newSettings.hAxisSlantedText = settings['haxis_slanted'];
2161 newSettings.hAxisSlantedTextAngle = settings['haxis_slanted_text_angle'];
2162 newSettings.hAxisShowTextEvery = settings['haxis_show_text_every'];
2163 newSettings.vAxisFormat = settings['vaxis_format'];
2164 newSettings.hAxisFormat = settings['haxis_format'];
2165 newSettings.hAxisMinValue = settings['haxis_min_value'];
2166 newSettings.hAxisMaxValue = settings['haxis_max_value'];
2167 newSettings.vAxisMinValue = settings['vaxis_min_value'];
2168 newSettings.vAxisMaxValue = settings['vaxis_max_value'];
2169 newSettings.hAxisGridlinesCount = settings['haxis_gridlines_count'];
2170 newSettings.hAxisGridlinesColor = settings['haxis_gridlines_color'];
2171 newSettings.hAxisMinorGridlinesColor = settings['haxis_minor_gridlines_color'];
2172 newSettings.vAxisGridlinesCount = settings['vaxis_gridlines_count'];
2173 newSettings.vAxisGridlinesColor = settings['vaxis_gridlines_color'];
2174 newSettings.vAxisMinorGridlinesColor = settings['vaxis_minor_gridlines_color'];
2175 newSettings.hAxisItalicText = (settings['haxis_italic'] == 'checked') ? true : false;
2176 newSettings.hAxisBoldText = (settings['haxis_bold'] == 'checked') ? true : false;
2177 newSettings.vAxisItalicText = (settings['vaxis_italic'] == 'checked') ? true : false;
2178 newSettings.vAxisBoldText = (settings['vaxis_bold'] == 'checked') ? true : false;
2179 newSettings.hAxisItalicTitle = (settings['haxis_title_italic'] == 'checked') ? true : false;
2180 newSettings.hAxisBoldTitle = (settings['haxis_title_bold'] == 'checked') ? true : false;
2181 newSettings.vAxisItalicTitle = (settings['vaxis_title_italic'] == 'checked') ? true : false;
2182 newSettings.vAxisBoldTitle = (settings['vaxis_title_bold'] == 'checked') ? true : false;
2183 newSettings.opacity = settings['opacity'];
2184 newSettings.enableInteractivity = (settings['enable_interactivity'] == 'checked') ? true : false;
2185 newSettings.maximizedView = (settings['maximized_view'] == 'checked') ? 'maximized' : null;
2186 newSettings.enableAnimation = (settings['enable_animation'] == 'checked') ? true : false;
2187 newSettings.animationDuration = settings['animation_duration'];
2188 newSettings.animationStartup = (settings['animation_startup'] == 'checked') ? true : false;
2189 newSettings.animationEasing = settings['animation_easing'];
2190 newSettings.seriesColor = settings['series_color'];
2191 newSettings.seriesVisibleInLegend = settings['series_visible_in_legend'];
2192 newSettings.seriesLineWidth = settings['series_line_width'];
2193 newSettings.seriesPointSize = settings['series_point_size'];
2194 newSettings.seriesPointShape = settings['series_point_shape'];
2195 newSettings.enableRowSettings = (settings['enable_row_settings'] == 'checked') ? true : false;
2196 newSettings.rowsColor = settings['rows_color'];
2197 newSettings.rowsOpacity = settings['rows_opacity'];
2198 newSettings.multipleSelection = (settings['multiple_selection'] == 'checked') ? 'multiple' : 'single';
2199 newSettings.multipleDataFormat = settings['multiple_data_format'];
2200 newSettings.pointShape = settings['point_shape'];
2201 newSettings.pointSize = settings['point_size'];
2202 newSettings.lineWidth = settings['line_width'];
2203 newSettings.crosshairTrigger = settings['crosshair_trigger'];
2204 newSettings.crosshairOrientation = settings['crosshair_orientation'];
2205 newSettings.crosshairOpacity = settings['crosshair_opacity'];
2206 newSettings.dashStyle = settings['dash_style'] ? settings['dash_style'].split(',') : null;
2207 newSettings.orientation = (settings['orientation'] == 'checked') ? 'vertical' : 'horizontal';
2208 newSettings.fillNulls = (settings['fill_nulls'] == 'checked') ? true : false;
2209 newSettings.holeSize = settings['donut_hole_size'];
2210 newSettings.orgChartFontSize = settings['org_chart_font_size'];
2211 newSettings.allowCollapse = (settings['allow_collapse'] == 'checked') ? true : false;
2212 newSettings.orgClassname = settings['org_classname'];
2213 newSettings.orgSelectedClassname = settings['org_selected_classname'];
2214
2215 return newSettings;
2216 }
2217
2218 ChartBuilderGoogleCharts.prototype.setRowOptions = function (data, options, isJS = true) {
2219 var _this = this;
2220
2221 if (data && data.length > 0) {
2222 if (data[0] && data[0].length == 2) {
2223 data[0].push({ role: 'style' });
2224 for (var i = 1; i < data.length; i++) {
2225 var opts = [];
2226
2227 var color = isJS ? options.rowsColor[i - 1] : options.rows_color[i - 1];
2228 opts.push(color ? 'color:'+color : '');
2229
2230 var opacity = isJS ? options.rowsOpacity[i - 1] : options.rows_opacity[i - 1];
2231 opts.push(opacity ? 'opacity:'+opacity : '');
2232
2233
2234 data[i].push(opts.join(';'));
2235 }
2236 }
2237 }
2238
2239 return data;
2240 }
2241
2242 ChartBuilderGoogleCharts.prototype.removeRowOptions = function (data) {
2243 var _this = this;
2244
2245 if (data && data.length > 0) {
2246 if (data[0] && data[0].length == 2) {
2247 for (var i = 0; i < data.length; i++) {
2248 data[i].splice(2, 1);
2249 }
2250 }
2251 }
2252
2253 return data;
2254 }
2255
2256 // Detect window resize moment to draw charts responsively
2257 ChartBuilderGoogleCharts.prototype.resizeChart = function(){
2258 var _this = this;
2259
2260 //create trigger to resizeEnd event
2261 $(window).resize(function() {
2262 if(this.resizeTO) clearTimeout(this.resizeTO);
2263 this.resizeTO = setTimeout(function() {
2264 $(this).trigger('resizeEnd');
2265 }, 100);
2266 });
2267
2268 //redraw graph when window resize is completed
2269 $(window).on('resizeEnd', function() {
2270 _this.drawChartFunction( _this.chartData, _this.chartOptions );
2271 });
2272
2273 }
2274
2275 ChartBuilderGoogleCharts.prototype.setOrgChartCustomStyles = function () {
2276 var _this = this;
2277
2278 var orgClassname = _this.chartSourceData.settings.org_classname;
2279 var bgColor = _this.chartSourceData.settings.org_node_background_color;
2280 var padding = _this.chartSourceData.settings.org_node_padding;
2281 var borderRadius = _this.chartSourceData.settings.org_node_border_radius;
2282 var borderWidth = _this.chartSourceData.settings.org_node_border_width;
2283 var borderColor = _this.chartSourceData.settings.org_node_border_color;
2284 var textColor = _this.chartSourceData.settings.org_node_text_color;
2285 var textSize = _this.chartSourceData.settings.org_node_text_font_size;
2286 var descriptionColor = _this.chartSourceData.settings.org_node_description_font_color;
2287 var descriptionSize = _this.chartSourceData.settings.org_node_description_font_size;
2288
2289 var orgSelectedClassname = _this.chartSourceData.settings.org_selected_classname;
2290 var selectedBgColor = _this.chartSourceData.settings.org_selected_node_background_color;
2291 var selectedTextColor = _this.chartSourceData.settings.org_selected_node_text_color;
2292
2293 if (orgClassname != '') {
2294 var node = _this.$el.find('.' + orgClassname);
2295 node.css({
2296 'background-color' : bgColor,
2297 'padding' : padding + 'px',
2298 'border-radius' : borderRadius + 'px',
2299 'color' : textColor,
2300 'font-size' : textSize + 'px',
2301 'border' : 'none',
2302 'outline' : borderWidth + 'px solid ' + borderColor,
2303 });
2304 }
2305
2306 if (orgSelectedClassname != '') {
2307 var selectedNode = _this.$el.find('.' + orgSelectedClassname);
2308 selectedNode.css({
2309 'background-color' : selectedBgColor,
2310 // 'padding' : padding + 'px',
2311 // 'border-radius' : borderRadius + 'px',
2312 'color' : selectedTextColor,
2313 // 'font-size' : textSize + 'px',
2314 // 'border' : 'none',
2315 // 'outline' : borderWidth + 'px solid ' + borderColor,
2316 });
2317 }
2318
2319 var description = _this.$el.find('.' + _this.htmlClassPrefix + 'org-chart-tree-description');
2320 description.css({
2321 'color' : descriptionColor,
2322 'font-size' : descriptionSize + 'px',
2323 });
2324
2325 // var image = _this.$el.find('.' + _this.htmlClassPrefix + 'org-chart-tree-image');
2326 }
2327
2328 ChartBuilderGoogleCharts.prototype.chartConvertData = function( data ){
2329 var _this = this;
2330 var dataTypes = [];
2331
2332 // Collect data in new array for chart rendering
2333 for ( var key in data ) {
2334 if ( data.hasOwnProperty( key ) ) {
2335 if (key == 0) {
2336 if (data[key][0] != '' && data[key][1] != '') {
2337 dataTypes.push([
2338 _this.htmlDecode(data[key][0]), _this.htmlDecode(data[key][1])
2339 ]);
2340 }
2341 } else {
2342 if (data[key][0] != '' && data[key][1] != '') {
2343 dataTypes.push([
2344 _this.htmlDecode(data[key][0]), +(data[key][1])
2345 ]);
2346 }
2347 }
2348 }
2349 }
2350
2351 return dataTypes;
2352 }
2353
2354 // Converting chart data for multicolumn chart
2355 ChartBuilderGoogleCharts.prototype.multiColumnChartConvertData = function( data ){
2356 var _this = this;
2357 var dataTypes = [];
2358 var titleRow = [];
2359
2360 for (var key in data) {
2361 var dataRow = [];
2362 if (data.hasOwnProperty(key)) {
2363 if (key == 0) {
2364 for (var index in data[key]) {
2365 if (data[key][index] != '') {
2366 titleRow.push(_this.htmlDecode(data[key][index]));
2367 }
2368 }
2369 dataTypes.push(titleRow);
2370 } else {
2371 for (var index in data[key]) {
2372 if (data[key][index] != '') {
2373 if (index == 0) {
2374 dataRow.push(_this.htmlDecode(data[key][index]));
2375 } else {
2376 dataRow.push(+data[key][index]);
2377 }
2378 }
2379 }
2380 dataTypes.push(dataRow);
2381 }
2382 }
2383 }
2384
2385 return dataTypes;
2386 }
2387
2388 // Converting chart data for org chart type
2389 ChartBuilderGoogleCharts.prototype.orgChartConvertData = function( data ){
2390 var _this = this;
2391 var dataTypes = [['Name', 'Manager', 'Tooltip', 'Url']];
2392 // var name = "";
2393 // Collect data in new array for chart rendering
2394 for ( var key in data ) {
2395 if ( data.hasOwnProperty( key ) ) {
2396 if (key != 0) {
2397 var name = data[key][0];
2398 var description = data[key][1];
2399 var image = (data[key].length > 6) ? data[key][2] : '';
2400 var parent_name = (data[key].length > 6) ? data[key][3] : data[key][2];
2401 var tooltip = (data[key].length > 6) ? data[key][4] : data[key][3];
2402 var url = (data[key].length > 6) ? data[key][5] : '';
2403
2404 if (description) {
2405 name += _this.orgChartFormatName(description);
2406 }
2407 if (image && image != '') {
2408 name = _this.orgChartFormatImage(image) + name;
2409 }
2410 name = {'v': data[key][0], 'f': name};
2411 dataTypes.push([
2412 name, parent_name, tooltip, url
2413 ]);
2414 }
2415 }
2416 }
2417
2418 return dataTypes;
2419 }
2420
2421 ChartBuilderGoogleCharts.prototype.orgChartFormatName = function( description ){
2422 return `<div class="${this.htmlClassPrefix}org-chart-tree-description">${description}</div>`;
2423 }
2424
2425 ChartBuilderGoogleCharts.prototype.orgChartFormatImage = function( image ){
2426 return `<div class="${this.htmlClassPrefix}org-chart-tree-image"><img width="128px" src="${image}"></div>`;
2427 }
2428
2429 ChartBuilderGoogleCharts.prototype.orgChartConvertDataForTreeManual = function( source ){
2430 var _this = this;
2431 var treeDataArr = [];
2432 var ordering = _this.chartSourceData.source_ordering;
2433 source = Object.assign({}, source);
2434 if ( !$.isArray(source) ) {
2435 for (var index in ordering) {
2436 var key = (ordering[index]);
2437
2438 var id = key;
2439 var title = source[key][0];
2440 var description = source[key][1];
2441 var image = (source[key].length > 6) ? source[key][2] : '';
2442 var parent_name = (source[key].length > 6) ? source[key][3] : source[key][2];
2443 var tooltip = (source[key].length > 6) ? source[key][4] : source[key][3];
2444 var url = (source[key].length > 6) ? source[key][5] : '';
2445 var parent_id = (source[key].length > 6) ? source[key][6].toString() : source[key][4].toString();
2446 var level = (source[key].length > 6) ? source[key][7].toString() : source[key][5].toString();
2447
2448 // var ID = (source[0] == undefined) ? key : key + 1;
2449 treeDataArr[index] = {
2450 id: id,
2451 parent_id: parent_id,
2452 title: title,
2453 level: level,
2454 description: description,
2455 image: image,
2456 tooltip: tooltip,
2457 url: url,
2458 parent_name: parent_name
2459 }
2460 }
2461 }
2462
2463 return treeDataArr;
2464 }
2465
2466 // Update chart data and display immediately
2467 ChartBuilderGoogleCharts.prototype.updateChartData = function( newData ){
2468 var _this = this;
2469 _this.drawChartFunction( newData, _this.chartOptions );
2470 }
2471
2472 ChartBuilderGoogleCharts.prototype.addChartDataRow = function (element){
2473 var _this = this;
2474 // var deleteImageUrl = ChartBuilderSourceData.removeManualDataRow;
2475 var content = '';
2476
2477 var addedTermsandConds = this.$el.find("."+this.htmlClassPrefix+"chart-source-data-edit-block");
2478 var addedTermsandCondsId = this.$el.find("."+this.htmlClassPrefix+"chart-source-data-edit-block:last-child");
2479 var dataId = addedTermsandConds.length >= 1 ? addedTermsandCondsId.data("sourceId") + 1 : 1;
2480 var colCount = addedTermsandConds.first().children().length - 1;
2481
2482 var termsCondsMessageAttrName = this.newTermsCondsMessageAttrName( this.htmlNamePrefix + 'chart_source_data' , dataId );
2483
2484 content += '<div class = "'+this.htmlClassPrefix+'chart-source-data-edit-block" data-source-id="' + dataId + '" >';
2485 content += '<div class="'+this.htmlClassPrefix+'chart-source-data-move-block '+this.htmlClassPrefix+'chart-source-data-move-row">';
2486 content += '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"><path d="M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4V224H109.3l9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4H224V402.7l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4V288H402.7l-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4H288V109.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z" style="fill: #b8b8b8;" /></svg>';
2487 content += '</div>';
2488 content += '<div class="'+this.htmlClassPrefix+'icons-box '+this.htmlClassPrefix+'icons-remove-box">';
2489 content += '<svg class="'+this.htmlClassPrefix+'chart-source-data-remove-block '+this.htmlClassPrefix+'chart-source-data-remove-row" data-trigger="hover" data-bs-toggle="tooltip" title="Delete row" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z" style="fill: #b8b8b8;" /></svg>';
2490 content += '</div>';
2491 for (var i = 0; i < colCount; i++) {
2492 if (i == 0) {
2493 content += '<div class="'+this.htmlClassPrefix+'chart-source-data-input-box '+this.htmlClassPrefix+'chart-source-data-name-input-box" data-cell-id="'+i+'">';
2494 content += '<input type="text" class="ays-text-input form-control" name="' + termsCondsMessageAttrName + '">';
2495 content += '</div>';
2496 } else {
2497 content += '<div class="'+this.htmlClassPrefix+'chart-source-data-input-box '+this.htmlClassPrefix+'chart-source-data-input-number" data-cell-id="'+i+'">';
2498 content += '<input type="number" class="ays-text-input form-control" name="' + termsCondsMessageAttrName + '" step="any">';
2499 content += '</div>';
2500 }
2501 }
2502 content += '</div>';
2503
2504 this.$el.find('.'+this.htmlClassPrefix+'chart-source-data-content').append(content);
2505 $('[data-bs-toggle="tooltip"]').tooltip();
2506 }
2507
2508 ChartBuilderGoogleCharts.prototype.addChartDataColumn = function (e){
2509 var _this = this;
2510
2511 var rows = _this.$el.find("."+_this.htmlClassPrefix+"chart-source-data-content").children();
2512 var lastColId = +$(rows[0]).find('.'+_this.htmlClassPrefix+'chart-source-data-input-box:last-child').attr('data-cell-id');
2513 rows.each(function(key, row){
2514 var dataIDEach = row.getAttribute('data-source-id');
2515 var content = '';
2516
2517 if (key === 0) {
2518 content += '<div class="'+_this.htmlClassPrefix+'chart-source-data-input-box ' +_this.htmlClassPrefix+'chart-source-title-box" data-cell-id="'+(lastColId+1)+'">';
2519 content += '<svg class="'+_this.htmlClassPrefix+'chart-source-data-remove-block '+_this.htmlClassPrefix+'chart-source-data-remove-col" data-trigger="hover" data-bs-toggle="tooltip" title="Delete column" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" width="10px">';
2520 content += '<path d="M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z" style="fill: #b8b8b8;" />';
2521 content += '</svg>';
2522
2523 content += '<div class="' + _this.htmlClassPrefix + 'chart-source-data-titles-box-item">';
2524 content += '<input type="text" class="ays-text-input form-control ' + _this.htmlClassPrefix+'chart-source-title-input" name="' + _this.newTermsCondsMessageAttrName( _this.htmlNamePrefix + 'chart_source_data' , dataIDEach ) + '">';
2525 content += '<svg class="' + _this.htmlClassPrefix + 'chart-source-data-sort" data-sort-order="asc" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 320 512">';
2526 content += '<path d="M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z" style="fill: #b8b8b8;" />';
2527 content += '</svg>';
2528 content += '</div>'
2529 content += '</div>';
2530 } else {
2531 content += '<div class="'+_this.htmlClassPrefix+'chart-source-data-input-box ' +_this.htmlClassPrefix+'chart-source-data-input-number" data-cell-id="'+(lastColId+1)+'">';
2532 content += '<input type="number" class="ays-text-input form-control" name="' + _this.newTermsCondsMessageAttrName( _this.htmlNamePrefix + 'chart_source_data' , dataIDEach ) + '" step="any">';
2533 content += '</div>';
2534 }
2535
2536 $(row).append(content);
2537 $('[data-bs-toggle="tooltip"]').tooltip();
2538 });
2539 }
2540
2541 ChartBuilderGoogleCharts.prototype.deleteChartDataRow = function (element){
2542 var _this = this;
2543
2544 var rows = _this.$el.find("."+_this.htmlClassPrefix+"chart-source-data-content").children();
2545 if ((rows.length - 1) >= 2) {
2546 var confirm = window.confirm(aysChartBuilderAdmin.confirmRowDelete);
2547 if (confirm) {
2548 var thisMainParent = element.parent().parent();
2549 thisMainParent.remove();
2550 }
2551 } else {
2552 alert(aysChartBuilderAdmin.minRowNotice);
2553 }
2554
2555 element.blur();
2556 element.tooltip('hide');
2557 }
2558
2559 ChartBuilderGoogleCharts.prototype.deleteChartDataColumn = function (element){
2560 var _this = this;
2561
2562 var rows = _this.$el.find("."+_this.htmlClassPrefix+"chart-source-data-content").children();
2563 if (rows.eq(1).children('.ays-chart-chart-source-data-input-number').length >= 2) {
2564 var confirm = window.confirm(aysChartBuilderAdmin.confirmColDelete);
2565 if (confirm) {
2566 var parent = element.parents('.ays-chart-chart-source-title-box');
2567 var index = _this.returnIndexOfEl(parent);
2568 rows.each(function(key, row){
2569 var dataRow = $(row).find('.ays-chart-chart-source-data-input-box:not("ays-chart-chart-source-data-name-input-box")');
2570 $(dataRow).each(function(ind, cell){
2571 if (ind == index) {
2572 $(cell).remove();
2573 }
2574 });
2575 });
2576 }
2577 } else {
2578 alert(aysChartBuilderAdmin.minColNotice);
2579 }
2580
2581 element.blur();
2582 element.tooltip('hide');
2583 }
2584
2585 ChartBuilderGoogleCharts.prototype.sortDataByColumn = function (el) {
2586 var _this = this;
2587
2588 var sortingOrder = el.attr('data-sort-order');
2589 var colFirst = el.parents('.'+_this.htmlClassPrefix+'chart-source-data-input-box');
2590 var colIndex = colFirst.attr('data-cell-id');
2591 var colList = colFirst.parents('.'+_this.htmlClassPrefix+'chart-source-data-content').find('.'+_this.htmlClassPrefix+'chart-source-data-input-box[data-cell-id="'+colIndex+'"] input.ays-text-input');
2592
2593 var sorted = {};
2594 colList.each(function(key, input){
2595 if (key !== 0) {
2596 var rowIndex = $(input).parents('.'+_this.htmlClassPrefix+'chart-source-data-edit-block').attr('data-source-id');
2597 sorted[rowIndex] = +input.value
2598 }
2599 });
2600
2601 if (sortingOrder === 'asc') {
2602 sorted = _this.sortDataAsc(sorted);
2603 el.attr('data-sort-order', 'desc');
2604 } else if (sortingOrder === 'desc') {
2605 sorted = _this.sortDataDesc(sorted);
2606 el.attr('data-sort-order', 'asc');
2607 } else {
2608 sorted = _this.sortDataAsc(sorted);
2609 el.attr('data-sort-order', 'desc');
2610 }
2611
2612 var container = _this.$el.find('.'+_this.htmlClassPrefix+'chart-source-data-content');
2613 var newContainer = [];
2614 sorted.forEach((index, newIndex) => {
2615 var row = container.find("."+_this.htmlClassPrefix+"chart-source-data-edit-block[data-source-id='"+index+"']");
2616 var inputs = row.find('input.ays-text-input');
2617 var inputName = _this.newTermsCondsMessageAttrName(_this.htmlNamePrefix + 'chart_source_data', newIndex + 1);
2618
2619 $(inputs).each(function (inputIndex, input) {
2620 input.setAttribute('name', inputName);
2621 });
2622
2623 newContainer.push(row);
2624 });
2625 sorted.forEach((index, newIndex) => {
2626 var row = container.find("."+_this.htmlClassPrefix+"chart-source-data-edit-block[data-source-id='"+index+"']");
2627 newContainer.push(row);
2628 });
2629
2630 container.innerHTML = '';
2631 newContainer.forEach(row => {
2632 container.append(row);
2633 });
2634
2635 var rows = container.find("."+_this.htmlClassPrefix+"chart-source-data-edit-block");
2636 for (var i = 0; i < rows.length; i++) {
2637 $(rows[i]).attr('data-source-id', i);
2638 }
2639 }
2640
2641 ChartBuilderGoogleCharts.prototype.sortDataAsc = function (data) {
2642 return Object.keys(data).sort(function (a, b) {return data[a] - data[b]});
2643 }
2644
2645 ChartBuilderGoogleCharts.prototype.sortDataDesc = function (data) {
2646 return Object.keys(data).sort(function (a, b) {return data[b] - data[a]});
2647 }
2648
2649 ChartBuilderGoogleCharts.prototype.returnIndexOfEl = function (element){
2650 var i = 0;
2651 var elements = element.parent().find('.ays-chart-chart-source-title-box');
2652 elements.each(function(key, cell){
2653 if ($(cell).is(element)) {
2654 i = key;
2655 }
2656 });
2657 return i;
2658 }
2659
2660 ChartBuilderGoogleCharts.prototype.configureOptions = function() {
2661 var _this = this;
2662
2663 _this.$el.find('.ays-chart-chart-source-title-box').eq(0).find('.ays-chart-chart-source-data-remove-block').css('visibility', 'hidden');
2664
2665 var removeCols = _this.$el.find('.ays-chart-chart-source-title-box').find('.ays-chart-chart-source-data-remove-block');
2666 if (_this.chartType === 'pie_chart') {
2667 removeCols.css('visibility', 'hidden');
2668 }
2669
2670 var options = _this.$el.find('.cb-changable-opt');
2671 var typeOptions = _this.$el.find('.cb-'+_this.chartType+'-opt');
2672 options.addClass('display_none');
2673 typeOptions.removeClass('display_none');
2674
2675 var manualTabs = _this.$el.find('.cb-changable-manual:not(.cb-'+_this.chartType+'-manual)');
2676 var typeManualTab = _this.$el.find('.cb-'+_this.chartType+'-manual');
2677 manualTabs.remove();
2678 typeManualTab.removeClass('display_none');
2679
2680 var tabs = _this.$el.find('.cb-changable-tab:not(.cb-'+_this.chartType+'-tab)').parents('fieldset.ays-accordion-options-container');
2681 var currentTabs = _this.$el.find('.cb-'+_this.chartType+'-tab').parents('fieldset.ays-accordion-options-container');
2682 tabs.addClass('display_none');
2683 currentTabs.removeClass('display_none');
2684 }
2685
2686 ChartBuilderGoogleCharts.prototype.changeChartType = function () {
2687 var _this = this;
2688
2689 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-type').val(_this.chartType);
2690 _this.$el.find('.'+_this.htmlClassPrefix+'type-info-box-text-changeable').text(_this.chartSources[_this.chartType]);
2691 _this.$el.find('.'+_this.htmlClassPrefix+'nav-tab-chart.nav-tab[data-tab="tab4"]').text(_this.chartSourceData.chartTypesNames[_this.chartType]+" settings");
2692 _this.$el.find('.'+_this.htmlClassPrefix+'advanced-settings .ays-accordion-options-container:first-child legend.ays-accordion-options-header span').text(_this.chartSourceData.chartTypesNames[_this.chartType]+" settings");
2693 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').attr('id' , _this.htmlClassPrefix+_this.chartType);
2694
2695 _this.configureOptions();
2696 _this.loadChartBySource(true);
2697 }
2698
2699 ChartBuilderGoogleCharts.prototype.newTermsCondsMessageAttrName = function (termCondName, termCondId){
2700 var _this = this;
2701 return termCondName + '['+ termCondId +'][]';
2702 }
2703
2704 ChartBuilderGoogleCharts.prototype.setAccordionEvents = function(e){
2705 var _this = this;
2706
2707 _this.$el.on('click', '.ays-accordion-options-header', function(e){
2708 _this.openCloseAccordion(e, _this);
2709 });
2710
2711 _this.$el.on('click', '.ays-slices-accordion-options-header', function(e){
2712 _this.openCloseAccordion(e, _this, '-slices');
2713 });
2714
2715 _this.$el.on('click', '.ays-series-accordion-options-header', function(e){
2716 _this.openCloseAccordion(e, _this, '-series');
2717 });
2718
2719 _this.$el.on('click', '.ays-rows-accordion-options-header', function(e){
2720 _this.openCloseAccordion(e, _this, '-rows');
2721 });
2722 }
2723
2724 ChartBuilderGoogleCharts.prototype.openCloseAccordion = function(e, _this, contType = ""){
2725 var container = $(e.target).parents('.ays' + contType + '-accordion-options-container');
2726 var parent = (contType != "") ? container.parents('.ays-chart' + contType + '-settings') : _this.$el.find('#' + container.parents('.ays-tab-content').attr('id') + ' .ays-accordions-container').eq(0);
2727 var index = (contType != "") ? container.index() : -1;
2728
2729 if( container.attr('data-collapsed') === 'true' ){
2730 _this.closeAllAccordions( parent, contType, index );
2731 setTimeout(() => {
2732 container.find('.ays' + contType + '-accordion-options-content').slideDown();
2733 container.attr('data-collapsed', 'false');
2734 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').find('path').css('fill', '#008cff');
2735 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').removeClass('ays' + contType + '-accordion-arrow-right').addClass('ays' + contType + '-accordion-arrow-down');
2736 }, 150);
2737 }else{
2738 setTimeout(() => {
2739 container.find('.ays' + contType + '-accordion-options-content').slideUp();
2740 container.attr('data-collapsed', 'true');
2741 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').find('path').css('fill', '#c4c4c4');
2742 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').removeClass('ays' + contType + '-accordion-arrow-down').addClass('ays' + contType + '-accordion-arrow-right');
2743 }, 150);
2744 }
2745 }
2746
2747 ChartBuilderGoogleCharts.prototype.closeAllAccordions = function( container, contType, index ){
2748 var _this = this;
2749
2750 container.find('.ays' + contType + '-accordion-options-container').each(function (i){
2751 var $this = $(this);
2752 if (i != index) {
2753 setTimeout(() => {
2754 $this.find('.ays' + contType + '-accordion-options-content').slideUp();
2755 $this.attr('data-collapsed', 'true');
2756 $this.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').find('path').css('fill', '#c4c4c4');
2757 $this.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').removeClass('ays' + contType + '-accordion-arrow-down').addClass('ays' + contType + '-accordion-arrow-right');
2758 }, 150);
2759 }
2760 });
2761 }
2762
2763 ChartBuilderGoogleCharts.prototype.initDbImportComponent = function(){
2764 var _this = this;
2765 var table_columns = window.aysChartBuilderChartSettings.db_query.tables;
2766 var code_mirror = wp.CodeMirror || CodeMirror;
2767 var cm = code_mirror.fromTextArea(_this.$el.find('.ays-chart-db-query').get(0), {
2768 value: _this.$el.find('.ays-chart-db-query').val(),
2769 autofocus: false,
2770 mode: 'text/x-mysql',
2771 lineWrapping: true,
2772 dragDrop: false,
2773 matchBrackets: true,
2774 autoCloseBrackets: true,
2775 extraKeys: {"Ctrl-Space": "autocomplete"},
2776 hintOptions: { tables: table_columns }
2777 });
2778 cm = code_mirror.fromTextArea(_this.$el.find('.ays-chart-external-db-query').get(0), {
2779 value: _this.$el.find('.ays-chart-external-db-query').val(),
2780 autofocus: false,
2781 mode: 'text/x-mysql',
2782 lineWrapping: true,
2783 dragDrop: false,
2784 matchBrackets: true,
2785 autoCloseBrackets: true,
2786 extraKeys: {"Ctrl-Space": "autocomplete"}
2787 });
2788
2789
2790 // force refresh so that the query shows on first time load. Otherwise you have to click on the editor for it to show.
2791 _this.$el.on('ays-chart:db:query:focus', function(event, data){
2792 cm.refresh();
2793 });
2794
2795 // cm.focus();
2796
2797 // update text area.
2798 cm.on('inputRead', function(x, y){
2799 cm.save();
2800 });
2801
2802 // backspace and delete do not register so the text box does not get empty if the entire query is deleted
2803 // from the editor. Let's force this.
2804 _this.$el.on('ays-chart:db:query:update', function(event, data){
2805 cm.save();
2806 });
2807
2808 // clear the editor.
2809 _this.$el.on('ays-chart:db:query:setvalue', function(event, data){
2810 cm.setValue(data.value);
2811 cm.clearHistory();
2812 cm.refresh();
2813 });
2814
2815 // set an option at runtime?
2816 _this.$el.on('ays-chart:db:query:changeoption', function(event, data){
2817 cm.setOption(data.name, data.value);
2818 });
2819 }
2820
2821 ChartBuilderGoogleCharts.prototype.initDbImport = function(){
2822 var _this = this;
2823 _this.initDbImportComponent();
2824 }
2825
2826 ChartBuilderGoogleCharts.prototype.initQuizDBImport = function(){
2827 var _this = this;
2828
2829 _this.$el.find('#ays-chart-quiz-maker-fetch').on('click', function(e){
2830 e.preventDefault();
2831
2832 var select_query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').val();
2833 if (select_query == "") {
2834 return;
2835 }
2836
2837 _this.fetchQuizData( true );
2838 });
2839
2840 _this.$el.find('#ays-chart-quiz-maker-show-on-chart').on( 'click', function(e){
2841 e.preventDefault();
2842
2843 var select_query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').val();
2844 if (select_query == "") {
2845 return;
2846 }
2847
2848 if( _this.chartTempData ){
2849 _this.$el.find('#ays-chart-quiz-maker-success').empty();
2850 _this.$el.find('#ays-chart-quiz-maker-error').empty();
2851 if (_this.chartType == 'line_chart' || _this.chartType == 'bar_chart' || _this.chartType == 'column_chart') {
2852 _this.chartTempData = _this.multiColumnChartConvertData( _this.chartTempData );
2853 } else if (_this.chartType == 'org_chart') {
2854 _this.chartTempData = _this.orgChartConvertData( _this.chartTempData );
2855 } else {
2856 _this.chartTempData = _this.chartConvertData( _this.chartTempData );
2857 }
2858 _this.chartData = window.google.visualization.arrayToDataTable( _this.chartTempData );
2859
2860 _this.updateChartData( _this.chartData );
2861
2862 _this.chartTempData = null;
2863 }else{
2864 _this.fetchQuizData( false, true );
2865 }
2866
2867 });
2868
2869 _this.$el.find('#ays-chart-quiz-maker-save').on( 'click', function(e){
2870 e.preventDefault();
2871
2872 var select_query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').val();
2873 if (select_query == "") {
2874 return;
2875 }
2876
2877 _this.$el.find('#ays-chart-quiz-maker-success').empty();
2878 _this.$el.find('#ays-chart-quiz-maker-error').empty();
2879
2880 var chart_id = $(document).find('.' + _this.htmlClassPrefix + 'chart-id').val();
2881 var query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').find('option:selected').val();
2882 var selectQuizSelectDisplay = $(document).find('.'+_this.htmlClassPrefix+'select-quiz-maker-quiz-container').css('display');
2883 var quizID = null;
2884 if (selectQuizSelectDisplay != 'none') {
2885 quizID = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-quiz').find('option:selected').val();
2886 if (quizID == 0) {
2887 _this.$el.find('#ays-chart-quiz-maker-error').html( 'Please select a quiz.' );
2888 return;
2889 }
2890 }
2891
2892 // submit only if a query has been provided.
2893 if( query.length > 0 ){
2894 _this.startAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
2895
2896 $.ajax({
2897 url: ajaxurl,
2898 method: 'post',
2899 dataType: 'json',
2900 data: {
2901 'action': _this.ajaxAction,
2902 'function': window.aysChartBuilderChartSettings.ajax['actions']['quiz_maker_save_data'],
2903 'security': window.aysChartBuilderChartSettings.ajax['nonces']['quiz_maker_save_data'],
2904 'params': {
2905 query: query,
2906 quizID: quizID,
2907 chart_id: chart_id,
2908 }
2909 },
2910 success: function( response ){
2911 if( response.success ){
2912 _this.$el.find('#ays-chart-quiz-maker-success').html( response.data.msg );
2913 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('quiz_maker');
2914 }else{
2915 _this.$el.find('#ays-chart-quiz-maker-error').html( response.data.msg );
2916 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('manual');
2917 }
2918 },
2919 complete: function(){
2920 _this.endAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
2921 }
2922 });
2923 }else{
2924 _this.$el.find('#ays-chart-quiz-maker-form').unlock();
2925 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('manual');
2926 }
2927 });
2928
2929 $(document).on('ays-chart:modal:close', function (){
2930 _this.chartTempData = null;
2931 });
2932 }
2933
2934 ChartBuilderGoogleCharts.prototype.fetchQuizData = function( openModal = false, showOnChart = false ){
2935 var _this = this;
2936 _this.$el.trigger('ays-chart:db:query:update', {});
2937
2938 var chart_id = $(document).find('.' + _this.htmlClassPrefix + 'chart-id').val();
2939 var query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').find('option:selected').val();
2940 var selectQuizSelectDisplay = $(document).find('.'+_this.htmlClassPrefix+'select-quiz-maker-quiz-container').css('display');
2941 var quizID = null;
2942 if (selectQuizSelectDisplay != 'none') {
2943 quizID = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-quiz').find('option:selected').val();
2944 if (quizID == 0) {
2945 _this.$el.find('#ays-chart-quiz-maker-error').html( 'Please select a quiz.' );
2946 return;
2947 }
2948 }
2949
2950 if (query.length == 0) {
2951 return;
2952 }
2953
2954 _this.startAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
2955
2956 var modal = $(document).find('#ays-chart-db-query-results');
2957
2958 _this.$el.find('.db-wizard-results').empty();
2959 _this.$el.find('#ays-chart-quiz-maker-success').empty();
2960 _this.$el.find('#ays-chart-quiz-maker-error').empty();
2961
2962 $.ajax({
2963 url: ajaxurl,
2964 method: 'post',
2965 dataType: 'json',
2966 data: {
2967 'action': _this.ajaxAction,
2968 'function': window.aysChartBuilderChartSettings.ajax['actions']['quiz_maker_get_data'],
2969 'security': window.aysChartBuilderChartSettings.ajax['nonces']['quiz_maker_get_data'],
2970 'params': {
2971 query: query,
2972 quizID: quizID,
2973 chart_id: chart_id,
2974 }
2975 },
2976 success: function( response ){
2977 if( response.success ){
2978 modal.find('.db-wizard-results').html( response.data.table );
2979 modal.find('#results').DataTable({
2980 "paging": true
2981 });
2982 modal.find('#results').parent().addClass('ays-db-results-wrap');
2983
2984 if( openModal === true ) {
2985 modal.aysModal('show');
2986 }
2987
2988 _this.chartTempData = response.data.data ? response.data.data : null;
2989
2990 if( showOnChart === true ) {
2991 if (_this.chartType == 'line_chart' || _this.chartType == 'bar_chart' || _this.chartType == 'column_chart') {
2992 _this.chartTempData = _this.multiColumnChartConvertData( _this.chartTempData );
2993 } else if (_this.chartType == 'org_chart') {
2994 _this.chartTempData = _this.orgChartConvertData( _this.chartTempData );
2995 } else {
2996 _this.chartTempData = _this.chartConvertData( _this.chartTempData );
2997 }
2998 _this.chartData = window.google.visualization.arrayToDataTable(_this.chartTempData);
2999
3000 _this.updateChartData(_this.chartData);
3001
3002 _this.chartTempData = null;
3003 }
3004 }else{
3005 modal.find('ays-close').trigger('click');
3006 _this.$el.find('#ays-chart-quiz-maker-error').html( response.data.msg );
3007 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('manual');
3008 }
3009 },
3010 complete: function(){
3011 _this.endAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
3012 }
3013 });
3014 }
3015
3016 ChartBuilderGoogleCharts.prototype.startAjax = function( element ){
3017 element.lock();
3018 }
3019
3020 ChartBuilderGoogleCharts.prototype.endAjax = function( element ){
3021 element.unlock();
3022 }
3023
3024 ChartBuilderGoogleCharts.prototype.quickSaveHotKeys = function() {
3025 $(document).on('keydown', function(e){
3026 var saveButton = $(document).find('input#ays-button-apply');
3027 if ( saveButton.length > 0 ) {
3028 if (!(e.which == 83 && e.ctrlKey) && !(e.which == 19)){
3029 return true;
3030 }
3031 saveButton.trigger("click");
3032 e.preventDefault();
3033 return false;
3034 }
3035 });
3036 }
3037
3038 // Manual data preview button
3039 ChartBuilderGoogleCharts.prototype.showOnChart = function () {
3040 var _this = this;
3041
3042 var lastId = $(document).find(".ays-chart-chart-source-data-edit-block:last-child").attr('data-source-id');
3043 var chartData = [];
3044
3045 var rowTitles = $(document).find('.ays-chart-chart-source-data-name-input-box');
3046 rowTitles.each(function(key, el) {
3047 var value = $(el).find('input').val();
3048 if ( value == '' ) {
3049 $(el).find('input').val('Option');
3050 }
3051 });
3052
3053 var form = $(document).find("#ays-charts-form-google-charts");
3054 var data = form.serializeFormJSON();
3055
3056 for (var i = 0; i <= lastId; i++) {
3057 if (data['ays_chart_source_data['+i+'][]'] !== undefined) {
3058 var dataRow = data['ays_chart_source_data['+i+'][]'];
3059 var filteredRow = [];
3060 for (var key = 0; key < dataRow.length; key++) {
3061 var value = dataRow[key];
3062 if (value != '') {
3063 filteredRow.push(value);
3064 } else {
3065 if (i == 0) {
3066 filteredRow.push('Title'+key);
3067 } else {
3068 filteredRow.push('0');
3069 }
3070 }
3071 }
3072 if (filteredRow.length != 0) {
3073 chartData.push(filteredRow);
3074 }
3075 }
3076 }
3077 if (_this.chartType == 'line_chart' || _this.chartType == 'bar_chart' || _this.chartType == 'column_chart') {
3078 _this.chartTempData = _this.multiColumnChartConvertData( chartData );
3079 } else {
3080 _this.chartTempData = _this.chartConvertData( chartData );
3081 }
3082
3083 _this.chartTempData = _this.chartSourceData.settings.enableRowSettings ? _this.setRowOptions(_this.chartTempData, _this.chartSourceData.settings, false) : _this.chartTempData;
3084
3085 _this.chartData = window.google.visualization.arrayToDataTable( _this.chartTempData );
3086
3087 _this.updateChartData( _this.chartData );
3088
3089 _this.chartTempData = null;
3090 }
3091
3092 ChartBuilderGoogleCharts.prototype.orgTypeShowOnChart = function () {
3093 var _this = this;
3094
3095 var form = _this.$el.find("#ays-charts-form-google-charts");
3096 var data = form.serializeFormJSON();
3097 var allBranches = _this.$el.find(".tree-branch");
3098 var treeManual = _this.$el.find("#ays-chart-chart-source-data-edit-tree-content");
3099
3100 var chartData = {};
3101 allBranches.each(function() {
3102 var branchId = $(this).attr("data-id")
3103 var changedName = $(this).find(".ays-chart-org-chart-name-" + branchId).val();
3104 var changedDescription = $(this).find(".ays-chart-org-chart-description-" + branchId).val();
3105 var changedImage = $(this).find(".ays-chart-org-chart-image-" + branchId).val();
3106 var changedParentName = $(this).find(".ays-chart-org-chart-parent-name").val();
3107 var changedTooltip = $(this).find(".ays-chart-org-chart-tooltip-" + branchId).val();
3108 var changedUrl = $(this).find(".ays-chart-org-chart-url-" + branchId).val();
3109 var changedParentId = $(this).find(".ays-chart-org-chart-parent").val();
3110
3111 var changedLevel = $(this).find(".ays-chart-org-chart-level").val();
3112
3113 chartData[branchId] = [changedName, changedDescription, changedImage, changedParentName, changedTooltip, changedUrl, changedParentId, changedLevel]
3114 })
3115
3116 _this.chartData = _this.orgChartConvertData( chartData );
3117 _this.chartTempData = _this.chartData;
3118 _this.chartData = window.google.visualization.arrayToDataTable( _this.chartData );
3119 _this.updateChartData( _this.chartData );
3120 chartData = null;
3121 }
3122
3123 ChartBuilderGoogleCharts.prototype.htmlDecode = function (input) {
3124 if (!input) return input;
3125
3126 var e = document.createElement('div');
3127 e.innerHTML = input;
3128 return e.childNodes[0].nodeValue;
3129 }
3130
3131 ChartBuilderGoogleCharts.prototype.drawChartFunction = function (source, options) {
3132 var _this = this;
3133
3134 var view = new google.visualization.DataView(source);
3135 _this.chartData = source;
3136
3137 if (_this.chartType == 'org_chart') {
3138 view.setColumns([0, 1, 2]);
3139 }
3140
3141 _this.chartObj.draw(view, options);
3142
3143 if (_this.chartType == 'org_chart') {
3144 _this.setOrgChartCustomStyles();
3145 }
3146 }
3147
3148 $.fn.ChartBuilderGoogleChartsMain = function(options) {
3149 return this.each(function() {
3150 if (!$.data(this, 'ChartBuilderGoogleChartsMain')) {
3151 $.data(this, 'ChartBuilderGoogleChartsMain', new ChartBuilderGoogleCharts(this, options));
3152 } else {
3153 try {
3154 $(this).data('ChartBuilderGoogleChartsMain').init();
3155 } catch (err) {
3156 console.error('ChartBuilderGoogleChartsMain has not initiated properly');
3157 }
3158 }
3159 });
3160 };
3161 $(document).find('#ays-charts-form-google-charts').ChartBuilderGoogleChartsMain();
3162
3163 })(jQuery);
3164
3165 (function ($) {
3166
3167 $.fn.serializeFormJSON = function () {
3168 let o = {},
3169 a = this.serializeArray();
3170 $.each(a, function () {
3171 if (o[this.name]) {
3172 if (!o[this.name].push) {
3173 o[this.name] = [o[this.name]];
3174 }
3175 o[this.name].push(this.value || '');
3176 } else {
3177 o[this.name] = this.value || '';
3178 }
3179 });
3180 return o;
3181 };
3182
3183 $.fn.lock = function () {
3184 $(this).each(function () {
3185 var $this = $(this);
3186 var position = $this.css('position');
3187
3188 if (!position) {
3189 position = 'static';
3190 }
3191
3192 switch (position) {
3193 case 'absolute':
3194 case 'relative':
3195 break;
3196 default:
3197 $this.css('position', 'relative');
3198 break;
3199 }
3200 $this.data('position', position);
3201
3202 var width = $this.width(),
3203 height = $this.height();
3204
3205 var locker = $('<div class="locker"></div>');
3206 locker.width(width).height(height);
3207
3208 var loader = $('<div class="locker-loader"></div>');
3209 loader.width(width).height(height);
3210
3211 locker.append(loader);
3212 $this.append(locker);
3213 $(window).resize(function () {
3214 $this.find('.locker,.locker-loader').width($this.width()).height($this.height());
3215 });
3216 });
3217
3218 return $(this);
3219 };
3220
3221 $.fn.unlock = function () {
3222 $(this).each(function () {
3223 $(this).find('.locker').remove();
3224 $(this).css('position', $(this).data('position'));
3225 });
3226
3227 return $(this);
3228 };
3229 })(jQuery);