PluginProbe
Chartify – WordPress Chart Plugin / 3.1.5
Chartify – WordPress Chart Plugin v3.1.5
3.8.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 All 84 releases
chart-builder / admin / js / chart-builder-admin-google.js

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

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