PluginProbe
Chartify – WordPress Chart Plugin / 3.8.1
Chartify – WordPress Chart Plugin v3.8.1
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.8.1, at admin/js/chart-builder-admin-google.js

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