PluginProbe
Chartify – WordPress Chart Plugin / 3.3.9
Chartify – WordPress Chart Plugin v3.3.9
3.8.0 3.7.9 3.7.8 3.7.7 3.7.6 3.7.5 trunk 1.0.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 All 83 releases
chart-builder / admin / js / chart-builder-admin-google.js

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

3,534 lines 145.2 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 }
1636 /* */
1637 }
1638
1639 // Load chart by bar chart
1640 ChartBuilderGoogleCharts.prototype.barChartView = function(isChangedType){
1641 var _this = this;
1642 var getChartSource = _this.chartSourceData.source;
1643 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1644
1645 var settings = _this.chartSourceData.settings;
1646 var nSettings = _this.configOptionsForCharts(settings);
1647
1648 var userLocale = navigator.language || navigator.userLanguage || 'en';
1649
1650 /* == Google part == */
1651 google.charts.load('current', {'packages':['corechart'], 'language': userLocale});
1652 google.charts.setOnLoadCallback(drawChart);
1653
1654 function drawChart() {
1655 dataTypes = nSettings.enableRowSettings ? _this.setRowOptions(dataTypes, nSettings, true) : dataTypes;
1656
1657 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable(dataTypes);
1658
1659 _this.chartOptions = {
1660 fontSize: nSettings.chartFontSize,
1661 backgroundColor: {
1662 fill: nSettings.backgroundColor,
1663 // strokeWidth: nSettings.borderWidth,
1664 // stroke: nSettings.borderColor
1665 },
1666 chartArea: {
1667 backgroundColor: {
1668 fill: nSettings.chartBackgroundColor,
1669 stroke: nSettings.chartBorderColor,
1670 strokeWidth: nSettings.chartBorderWidth
1671 },
1672 left: nSettings.chartLeftMargin,
1673 right: nSettings.chartRightMargin,
1674 top: nSettings.chartTopMargin,
1675 bottom: nSettings.chartBottomMargin,
1676 },
1677 enableInteractivity: nSettings.enableInteractivity,
1678 theme: nSettings.maximizedView,
1679 legend: {
1680 position: nSettings.legendPosition,
1681 alignment: nSettings.legendAlignment,
1682 textStyle: {
1683 color: nSettings.legendColor,
1684 fontSize: nSettings.legendFontSize,
1685 italic: nSettings.legendItalicText,
1686 bold: nSettings.legendBoldText,
1687 }
1688 },
1689 tooltip: {
1690 trigger: nSettings.tooltipTrigger,
1691 showColorCode: nSettings.showColorCode,
1692 textStyle: {
1693 color: nSettings.tooltipTextColor,
1694 fontSize: nSettings.tooltipFontSize,
1695 italic: nSettings.tooltipItalicText,
1696 bold: nSettings.tooltipBoldText,
1697 }
1698 },
1699 hAxis: {
1700 title: nSettings.hAxisTitle,
1701 textPosition: nSettings.hAxisTextPosition,
1702 direction: nSettings.hAxisDirection,
1703 baselineColor: nSettings.hAxisBaselineColor,
1704 textStyle: {
1705 color: nSettings.hAxisTextColor,
1706 fontSize: nSettings.hAxisTextFontSize,
1707 italic: nSettings.hAxisItalicText,
1708 bold: nSettings.hAxisBoldText,
1709 },
1710 slantedText: nSettings.hAxisSlantedText,
1711 slantedTextAngle: nSettings.hAxisSlantedTextAngle,
1712 format: nSettings.hAxisFormat,
1713 titleTextStyle: {
1714 fontSize: nSettings.hAxisLabelFontSize,
1715 color: nSettings.hAxisLabelColor,
1716 italic: nSettings.hAxisItalicTitle,
1717 bold: nSettings.hAxisBoldTitle,
1718 },
1719 viewWindow: {
1720 min: nSettings.hAxisMinValue,
1721 max: nSettings.hAxisMaxValue,
1722 },
1723 gridlines: {
1724 count: nSettings.hAxisGridlinesCount,
1725 color: nSettings.hAxisGridlinesColor,
1726 },
1727 minorGridlines: {
1728 color: nSettings.hAxisMinorGridlinesColor,
1729 },
1730 },
1731 vAxis: {
1732 title: nSettings.vAxisTitle,
1733 textPosition: nSettings.vAxisTextPosition,
1734 direction: nSettings.vAxisDirection,
1735 baselineColor: nSettings.vAxisBaselineColor,
1736 textStyle: {
1737 color: nSettings.vAxisTextColor,
1738 fontSize: nSettings.vAxisTextFontSize,
1739 italic: nSettings.vAxisItalicText,
1740 bold: nSettings.vAxisBoldText,
1741 },
1742 format: nSettings.vAxisFormat,
1743 titleTextStyle: {
1744 fontSize: nSettings.vAxisLabelFontSize,
1745 color: nSettings.vAxisLabelColor,
1746 italic: nSettings.vAxisItalicTitle,
1747 bold: nSettings.vAxisBoldTitle,
1748 },
1749 viewWindow: {
1750 min: nSettings.vAxisMinValue,
1751 max: nSettings.vAxisMaxValue,
1752 },
1753 gridlines: {
1754 count: nSettings.vAxisGridlinesCount,
1755 color: nSettings.vAxisGridlinesColor,
1756 },
1757 minorGridlines: {
1758 color: nSettings.vAxisMinorGridlinesColor,
1759 },
1760 },
1761 focusTarget: nSettings.focusTarget,
1762 isStacked: nSettings.isStacked,
1763 dataOpacity: nSettings.opacity,
1764 bar: {
1765 groupWidth: nSettings.groupWidth
1766 },
1767 series: {},
1768 };
1769
1770 var seriesRows = dataTypes[0].filter(item => typeof item === 'string');
1771 for (var i = 0; i < seriesRows.length - 1; i++) {
1772 _this.chartOptions.series[i] = {
1773 color: nSettings.seriesColor[i],
1774 visibleInLegend: nSettings.seriesVisibleInLegend[i] == 'on' ? true : (typeof nSettings.seriesColor[i] !== 'undefined' ? false : true),
1775 }
1776 }
1777
1778 if (nSettings.enableAnimation) {
1779 _this.chartOptions.animation = {
1780 startup: nSettings.animationStartup,
1781 duration: nSettings.animationDuration,
1782 easing: nSettings.animationEasing,
1783 }
1784 }
1785 if(!isChangedType){
1786 if(_this.chartOptions.hAxis.format == 'percent' && nSettings.hAxisEnableDividePercent){
1787 for (var i = 0; i < dataTypes[0].length - 1; i++) {
1788 nSettings.seriesFormat[i] = '#%';
1789 }
1790
1791 for (var row = 0; row < _this.chartData.getNumberOfRows(); row++) {
1792 for (var col = 0; col < _this.chartData.getNumberOfColumns(); col++) {
1793 var value = _this.chartData.getValue(row, col);
1794 if (typeof value === 'number' && !isNaN(value)) {
1795
1796 var updatedValue = value / 100;
1797 _this.chartData.setValue(row, col, updatedValue);
1798 }
1799 }
1800 }
1801
1802 }else {
1803 for (var i = 0; i < dataTypes[0].length - 1; i++) {
1804 if (nSettings.seriesFormat[i] === '#%') {
1805 nSettings.seriesFormat[i] = '';
1806 }
1807 }
1808 }
1809 }
1810
1811 for (var i = 1; i < dataTypes[0].length; i++) {
1812
1813 if (nSettings.seriesFormat[i - 1]) {
1814 var formatter = new google.visualization.NumberFormat({
1815 pattern: nSettings.seriesFormat[i - 1]
1816 });
1817 formatter.format(_this.chartData, i);
1818 }
1819
1820
1821 }
1822 _this.chartObj = new google.visualization.BarChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
1823
1824 _this.chartObj.draw( _this.chartData, _this.chartOptions );
1825 _this.resizeChart();
1826 }
1827 /* */
1828 }
1829
1830 // Load chart by column chart
1831 ChartBuilderGoogleCharts.prototype.columnChartView = function(isChangedType){
1832 var _this = this;
1833 var getChartSource = _this.chartSourceData.source;
1834
1835 var dataTypes = _this.multiColumnChartConvertData( getChartSource );
1836
1837 var settings = _this.chartSourceData.settings;
1838 var nSettings = _this.configOptionsForCharts(settings);
1839
1840 var userLocale = navigator.language || navigator.userLanguage || 'en';
1841
1842 /* == Google part == */
1843 google.charts.load('current', {'packages':['corechart'], 'language': userLocale});
1844 google.charts.setOnLoadCallback(drawChart);
1845
1846 function drawChart() {
1847 dataTypes = nSettings.enableRowSettings ? _this.setRowOptions(dataTypes, nSettings, true) : dataTypes;
1848
1849 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable(dataTypes);
1850
1851 _this.chartOptions = {
1852 fontSize: nSettings.chartFontSize,
1853 backgroundColor: {
1854 fill: nSettings.backgroundColor,
1855 // strokeWidth: nSettings.borderWidth,
1856 // stroke: nSettings.borderColor
1857 },
1858 chartArea: {
1859 backgroundColor: {
1860 fill: nSettings.chartBackgroundColor,
1861 stroke: nSettings.chartBorderColor,
1862 strokeWidth: nSettings.chartBorderWidth
1863 },
1864 left: nSettings.chartLeftMargin,
1865 right: nSettings.chartRightMargin,
1866 top: nSettings.chartTopMargin,
1867 bottom: nSettings.chartBottomMargin,
1868 },
1869 enableInteractivity: nSettings.enableInteractivity,
1870 theme: nSettings.maximizedView,
1871 legend: {
1872 position: nSettings.legendPosition,
1873 alignment: nSettings.legendAlignment,
1874 textStyle: {
1875 color: nSettings.legendColor,
1876 fontSize: nSettings.legendFontSize,
1877 italic: nSettings.legendItalicText,
1878 bold: nSettings.legendBoldText,
1879 }
1880 },
1881 tooltip: {
1882 trigger: nSettings.tooltipTrigger,
1883 showColorCode: nSettings.showColorCode,
1884 textStyle: {
1885 color: nSettings.tooltipTextColor,
1886 fontSize: nSettings.tooltipFontSize,
1887 italic: nSettings.tooltipItalicText,
1888 bold: nSettings.tooltipBoldText,
1889 }
1890 },
1891 hAxis: {
1892 title: nSettings.hAxisTitle,
1893 textPosition: nSettings.hAxisTextPosition,
1894 direction: nSettings.hAxisDirection,
1895 baselineColor: nSettings.hAxisBaselineColor,
1896 textStyle: {
1897 color: nSettings.hAxisTextColor,
1898 fontSize: nSettings.hAxisTextFontSize,
1899 italic: nSettings.hAxisItalicText,
1900 bold: nSettings.hAxisBoldText,
1901 },
1902 slantedText: nSettings.hAxisSlantedText,
1903 slantedTextAngle: nSettings.hAxisSlantedTextAngle,
1904 format: nSettings.hAxisFormat,
1905 titleTextStyle: {
1906 fontSize: nSettings.hAxisLabelFontSize,
1907 color: nSettings.hAxisLabelColor,
1908 italic: nSettings.hAxisItalicTitle,
1909 bold: nSettings.hAxisBoldTitle,
1910 },
1911 viewWindow: {
1912 min: nSettings.hAxisMinValue,
1913 max: nSettings.hAxisMaxValue,
1914 },
1915 gridlines: {
1916 count: nSettings.hAxisGridlinesCount,
1917 color: nSettings.hAxisGridlinesColor,
1918 },
1919 minorGridlines: {
1920 color: nSettings.hAxisMinorGridlinesColor,
1921 },
1922 showTextEvery: nSettings.hAxisShowTextEvery
1923 },
1924 vAxis: {
1925 title: nSettings.vAxisTitle,
1926 textPosition: nSettings.vAxisTextPosition,
1927 direction: nSettings.vAxisDirection,
1928 baselineColor: nSettings.vAxisBaselineColor,
1929 textStyle: {
1930 color: nSettings.vAxisTextColor,
1931 fontSize: nSettings.vAxisTextFontSize,
1932 italic: nSettings.vAxisItalicText,
1933 bold: nSettings.vAxisBoldText,
1934 },
1935 format: nSettings.vAxisFormat,
1936 titleTextStyle: {
1937 fontSize: nSettings.vAxisLabelFontSize,
1938 color: nSettings.vAxisLabelColor,
1939 italic: nSettings.vAxisItalicTitle,
1940 bold: nSettings.vAxisBoldTitle,
1941 },
1942 viewWindow: {
1943 min: nSettings.vAxisMinValue,
1944 max: nSettings.vAxisMaxValue,
1945 },
1946 gridlines: {
1947 count: nSettings.vAxisGridlinesCount,
1948 color: nSettings.vAxisGridlinesColor,
1949 },
1950 minorGridlines: {
1951 color: nSettings.vAxisMinorGridlinesColor,
1952 },
1953 },
1954 focusTarget: nSettings.focusTarget,
1955 isStacked: nSettings.isStacked,
1956 dataOpacity: nSettings.opacity,
1957 bar: {
1958 groupWidth: nSettings.groupWidth
1959 },
1960 series: {},
1961 };
1962
1963 var seriesRows = dataTypes[0].filter(item => typeof item === 'string');
1964 for (var i = 0; i < seriesRows.length - 1; i++) {
1965 _this.chartOptions.series[i] = {
1966 color: nSettings.seriesColor[i],
1967 visibleInLegend: nSettings.seriesVisibleInLegend[i] == 'on' ? true : (typeof nSettings.seriesColor[i] !== 'undefined' ? false : true),
1968 }
1969 }
1970
1971 if (nSettings.enableAnimation) {
1972 _this.chartOptions.animation = {
1973 startup: nSettings.animationStartup,
1974 duration: nSettings.animationDuration,
1975 easing: nSettings.animationEasing,
1976 }
1977 }
1978 if(!isChangedType){
1979 if(_this.chartOptions.vAxis.format == 'percent' && nSettings.vAxisEnableDividePercent){
1980 for (var i = 0; i < dataTypes[0].length - 1; i++) {
1981 nSettings.seriesFormat[i] = '#%';
1982 }
1983
1984
1985 for (var row = 0; row < _this.chartData.getNumberOfRows(); row++) {
1986 for (var col = 0; col < _this.chartData.getNumberOfColumns(); col++) {
1987 var value = _this.chartData.getValue(row, col);
1988 if (typeof value === 'number' && !isNaN(value)) {
1989 var updatedValue = value / 100;
1990 _this.chartData.setValue(row, col, updatedValue);
1991 }
1992 }
1993 }
1994 }else {
1995 for (var i = 0; i < dataTypes[0].length - 1; i++) {
1996 if (nSettings.seriesFormat[i] === '#%') {
1997 nSettings.seriesFormat[i] = '';
1998 }
1999 }
2000 }
2001 }
2002 for (var i = 1; i < dataTypes[0].length; i++) {
2003 if (nSettings.seriesFormat[i - 1]) {
2004 var formatter = new google.visualization.NumberFormat({
2005 pattern: nSettings.seriesFormat[i - 1]
2006 });
2007 formatter.format(_this.chartData, i);
2008 }
2009 }
2010 _this.chartObj = new google.visualization.ColumnChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
2011
2012 _this.chartObj.draw( _this.chartData, _this.chartOptions );
2013 _this.resizeChart();
2014 }
2015 /* */
2016 }
2017
2018 // Load chart by line chart
2019 ChartBuilderGoogleCharts.prototype.lineChartView = function(isChangedType){
2020 var _this = this;
2021 var getChartSource = _this.chartSourceData.source;
2022 var dataTypes = _this.multiColumnChartConvertData(getChartSource);
2023
2024 var settings = _this.chartSourceData.settings;
2025 var nSettings = _this.configOptionsForCharts(settings);
2026
2027 var userLocale = navigator.language || navigator.userLanguage || 'en';
2028
2029 /* == Google part == */
2030 google.charts.load('current', {'packages':['corechart'], 'language': userLocale});
2031 google.charts.setOnLoadCallback(drawChart);
2032
2033 function drawChart() {
2034 dataTypes = nSettings.enableRowSettings ? _this.setRowOptions(dataTypes, nSettings, true) : dataTypes;
2035
2036 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable(dataTypes);
2037
2038 _this.chartOptions = {
2039 fontSize: nSettings.chartFontSize,
2040 backgroundColor: {
2041 fill: nSettings.backgroundColor,
2042 // strokeWidth: nSettings.borderWidth,
2043 // stroke: nSettings.borderColor
2044 },
2045 chartArea: {
2046 backgroundColor: {
2047 fill: nSettings.chartBackgroundColor,
2048 stroke: nSettings.chartBorderColor,
2049 strokeWidth: nSettings.chartBorderWidth
2050 },
2051 left: nSettings.chartLeftMargin,
2052 right: nSettings.chartRightMargin,
2053 top: nSettings.chartTopMargin,
2054 bottom: nSettings.chartBottomMargin,
2055 },
2056 enableInteractivity: nSettings.enableInteractivity,
2057 theme: nSettings.maximizedView,
2058 legend: {
2059 position: nSettings.legendPosition,
2060 alignment: nSettings.legendAlignment,
2061 textStyle: {
2062 color: nSettings.legendColor,
2063 fontSize: nSettings.legendFontSize,
2064 italic: nSettings.legendItalicText,
2065 bold: nSettings.legendBoldText,
2066 }
2067 },
2068 tooltip: {
2069 trigger: nSettings.tooltipTrigger,
2070 showColorCode: nSettings.showColorCode,
2071 textStyle: {
2072 color: nSettings.tooltipTextColor,
2073 fontSize: nSettings.tooltipFontSize,
2074 italic: nSettings.tooltipItalicText,
2075 bold: nSettings.tooltipBoldText,
2076 }
2077 },
2078 hAxis: {
2079 title: nSettings.hAxisTitle,
2080 textPosition: nSettings.hAxisTextPosition,
2081 direction: nSettings.hAxisDirection,
2082 baselineColor: nSettings.hAxisBaselineColor,
2083 textStyle: {
2084 color: nSettings.hAxisTextColor,
2085 fontSize: nSettings.hAxisTextFontSize,
2086 italic: nSettings.hAxisItalicText,
2087 bold: nSettings.hAxisBoldText,
2088 },
2089 slantedText: nSettings.hAxisSlantedText,
2090 slantedTextAngle: nSettings.hAxisSlantedTextAngle,
2091 format: nSettings.hAxisFormat,
2092 titleTextStyle: {
2093 fontSize: nSettings.hAxisLabelFontSize,
2094 color: nSettings.hAxisLabelColor,
2095 italic: nSettings.hAxisItalicTitle,
2096 bold: nSettings.hAxisBoldTitle,
2097 },
2098 viewWindow: {
2099 min: nSettings.hAxisMinValue,
2100 max: nSettings.hAxisMaxValue,
2101 },
2102 gridlines: {
2103 count: nSettings.hAxisGridlinesCount,
2104 color: nSettings.hAxisGridlinesColor,
2105 },
2106 minorGridlines: {
2107 color: nSettings.hAxisMinorGridlinesColor,
2108 },
2109 showTextEvery: nSettings.hAxisShowTextEvery
2110 },
2111 vAxis: {
2112 title: nSettings.vAxisTitle,
2113 textPosition: nSettings.vAxisTextPosition,
2114 direction: nSettings.vAxisDirection,
2115 baselineColor: nSettings.vAxisBaselineColor,
2116 textStyle: {
2117 color: nSettings.vAxisTextColor,
2118 fontSize: nSettings.vAxisTextFontSize,
2119 italic: nSettings.vAxisItalicText,
2120 bold: nSettings.vAxisBoldText,
2121 },
2122 format: nSettings.vAxisFormat,
2123 titleTextStyle: {
2124 fontSize: nSettings.vAxisLabelFontSize,
2125 color: nSettings.vAxisLabelColor,
2126 italic: nSettings.vAxisItalicTitle,
2127 bold: nSettings.vAxisBoldTitle,
2128 },
2129 viewWindow: {
2130 min: nSettings.vAxisMinValue,
2131 max: nSettings.vAxisMaxValue,
2132 },
2133 gridlines: {
2134 count: nSettings.vAxisGridlinesCount,
2135 color: nSettings.vAxisGridlinesColor,
2136 },
2137 minorGridlines: {
2138 color: nSettings.vAxisMinorGridlinesColor,
2139 },
2140 },
2141 crosshair: {
2142 opacity: nSettings.crosshairOpacity,
2143 orientation: nSettings.crosshairOrientation,
2144 trigger: nSettings.crosshairTrigger,
2145 },
2146 focusTarget: nSettings.focusTarget,
2147 dataOpacity: nSettings.opacity,
2148 lineWidth: nSettings.lineWidth,
2149 selectionMode: nSettings.multipleSelection,
2150 aggregationTarget: nSettings.multipleDataFormat,
2151 pointShape: nSettings.pointShape,
2152 pointSize: nSettings.pointSize,
2153 orientation: nSettings.orientation,
2154 interpolateNulls: nSettings.fillNulls,
2155 lineDashStyle: nSettings.dashStyle,
2156 series: {},
2157 };
2158
2159 var seriesRows = dataTypes[0].filter(item => typeof item === 'string');
2160 for (var i = 0; i < seriesRows.length - 1; i++) {
2161 _this.chartOptions.series[i] = {
2162 color: nSettings.seriesColor[i],
2163 visibleInLegend: nSettings.seriesVisibleInLegend[i] == 'on' ? true : (typeof nSettings.seriesColor[i] !== 'undefined' ? false : true),
2164 lineWidth: nSettings.seriesLineWidth[i],
2165 pointSize: nSettings.seriesPointSize[i],
2166 pointShape: nSettings.seriesPointShape[i],
2167 }
2168 }
2169
2170 if (nSettings.enableAnimation) {
2171 _this.chartOptions.animation = {
2172 startup: nSettings.animationStartup,
2173 duration: nSettings.animationDuration,
2174 easing: nSettings.animationEasing,
2175 }
2176 }
2177
2178 if(!isChangedType){
2179 if(_this.chartOptions.vAxis.format == 'percent' && nSettings.vAxisEnableDividePercent){
2180 for (var i = 0; i < dataTypes[0].length - 1; i++) {
2181 nSettings.seriesFormat[i] = '#%';
2182
2183 }
2184 for (var row = 0; row < _this.chartData.getNumberOfRows(); row++) {
2185 for (var col = 0; col < _this.chartData.getNumberOfColumns(); col++) {
2186 var value = _this.chartData.getValue(row, col);
2187 if (typeof value === 'number' && !isNaN(value)) {
2188 var updatedValue = value / 100;
2189 _this.chartData.setValue(row, col, updatedValue);
2190 }
2191 }
2192 }
2193
2194 }else {
2195 for (var i = 0; i < dataTypes[0].length - 1; i++) {
2196 if (nSettings.seriesFormat[i] === '#%') {
2197 nSettings.seriesFormat[i] = '';
2198 }
2199 }
2200 }
2201 }
2202
2203 for (var i = 1; i < dataTypes[0].length; i++) {
2204 if (nSettings.seriesFormat[i - 1]) {
2205 var formatter = new google.visualization.NumberFormat({
2206 pattern: nSettings.seriesFormat[i - 1]
2207 });
2208 formatter.format(_this.chartData, i);
2209 }
2210 }
2211
2212
2213 _this.chartObj = new google.visualization.LineChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
2214
2215 _this.chartObj.draw( _this.chartData, _this.chartOptions );
2216 _this.resizeChart();
2217 }
2218 /* */
2219 }
2220
2221 // Load chart by donut chart
2222 ChartBuilderGoogleCharts.prototype.donutChartView = function(isChangedType){
2223 var _this = this;
2224 var getChartSource = _this.chartSourceData.source;
2225 var dataTypes = _this.chartConvertData( getChartSource );
2226
2227 var settings = _this.chartSourceData.settings;
2228 var nSettings = _this.configOptionsForCharts(settings);
2229
2230 var userLocale = navigator.language || navigator.userLanguage || 'en';
2231
2232 /* == Google part == */
2233 google.charts.load('current', {'packages':['corechart'], 'language': userLocale});
2234 google.charts.setOnLoadCallback(drawChart);
2235
2236 function drawChart() {
2237 _this.chartData = isChangedType ? _this.chartData : google.visualization.arrayToDataTable( dataTypes );
2238
2239 _this.chartOptions = {
2240 fontSize: nSettings.chartFontSize,
2241 chartArea: {
2242 left: nSettings.chartLeftMargin,
2243 right: nSettings.chartRightMargin,
2244 top: nSettings.chartTopMargin,
2245 bottom: nSettings.chartBottomMargin,
2246 },
2247 backgroundColor: {
2248 fill: nSettings.backgroundColor,
2249 // strokeWidth: nSettings.borderWidth,
2250 // stroke: nSettings.borderColor
2251 },
2252 enableInteractivity: nSettings.enableInteractivity,
2253 legend: {
2254 position: nSettings.legendPosition,
2255 alignment: nSettings.legendAlignment,
2256 textStyle: {
2257 color: nSettings.legendColor,
2258 fontSize: nSettings.legendFontSize,
2259 italic: nSettings.legendItalicText,
2260 bold: nSettings.legendBoldText,
2261 }
2262 },
2263 tooltip: {
2264 trigger: nSettings.tooltipTrigger,
2265 showColorCode: nSettings.showColorCode,
2266 text: nSettings.tooltipText,
2267 textStyle: {
2268 color: nSettings.tooltipTextColor,
2269 fontSize: nSettings.tooltipFontSize,
2270 italic: nSettings.tooltipItalicText,
2271 bold: nSettings.tooltipBoldText,
2272 }
2273 },
2274 pieStartAngle: nSettings.rotationDegree,
2275 pieSliceBorderColor: nSettings.sliceBorderColor,
2276 reverseCategories: nSettings.reverseCategories,
2277 pieSliceText: nSettings.sliceText,
2278 sliceVisibilityThreshold: nSettings.dataGroupingLimit,
2279 pieResidueSliceLabel: nSettings.dataGroupingLabel,
2280 pieResidueSliceColor: nSettings.dataGroupingColor,
2281 pieHole: nSettings.holeSize,
2282 slices: {}
2283 };
2284
2285 for (var i = 0; i < dataTypes.length - 1; i++) {
2286 _this.chartOptions.slices[i] = {
2287 color: nSettings.sliceColor[i],
2288 offset: typeof nSettings.sliceOffset[i] !== 'undefined' ? nSettings.sliceOffset[i] : 0,
2289 textStyle: {
2290 color: nSettings.sliceTextColor[i],
2291 },
2292 }
2293 }
2294
2295 _this.chartObj = new google.visualization.PieChart( document.getElementById(_this.htmlClassPrefix + _this.chartType) );
2296
2297 _this.chartObj.draw( _this.chartData, _this.chartOptions );
2298 _this.resizeChart();
2299 }
2300 /* */
2301 }
2302
2303 // Load chart by org chart
2304 ChartBuilderGoogleCharts.prototype.orgChartView = function(isChangedType){
2305 var _this = this;
2306 var getChartSource = _this.chartSourceData.source;
2307 var dataTypes = _this.orgChartConvertData(getChartSource);
2308 var treeData = _this.orgChartConvertDataForTreeManual(getChartSource);
2309
2310 var settings = _this.chartSourceData.settings;
2311 var nSettings = _this.configOptionsForCharts(settings);
2312
2313 var userLocale = navigator.language || navigator.userLanguage || 'en';
2314
2315 /* == Google part == */
2316 google.charts.load('current', {'packages':['orgchart'], 'language': userLocale});
2317 google.charts.setOnLoadCallback(drawChart);
2318
2319 function drawChart() {
2320 _this.chartDataArray = isChangedType ? _this.chartDataArray : dataTypes;
2321 _this.chartData = google.visualization.arrayToDataTable(_this.chartDataArray);
2322
2323 var view = new google.visualization.DataView(_this.chartData);
2324 view.setColumns([0, 1, 2]);
2325
2326 _this.chartOptions = {
2327 allowHtml: true,
2328 size: nSettings.orgChartFontSize,
2329 allowCollapse: nSettings.allowCollapse,
2330 compactRows: true,
2331 nodeClass: nSettings.orgClassname,
2332 selectedNodeClass: nSettings.orgSelectedClassname,
2333 };
2334
2335 _this.chartObj = new google.visualization.OrgChart(document.getElementById(_this.htmlClassPrefix + _this.chartType));
2336
2337 google.visualization.events.addListener(_this.chartObj, 'select', function () {
2338 var selection = _this.chartObj.getSelection();
2339 if (selection.length > 0) {
2340 if (_this.chartData.getValue(selection[0].row, 3) != '') {
2341 window.open(_this.chartData.getValue(selection[0].row, 3), '_blank');
2342 }
2343 }
2344 });
2345
2346 google.visualization.events.addListener(_this.chartObj, 'collapse', function () {
2347 _this.setOrgChartCustomStyles();
2348 });
2349
2350 _this.chartObj.draw( view, _this.chartOptions );
2351 _this.resizeChart();
2352 _this.setOrgChartCustomStyles();
2353 }
2354
2355 _this.$el.on('click', '.google-visualization-orgchart-node-small, .google-visualization-orgchart-node-medium, .google-visualization-orgchart-node-large', function(e) {
2356 if (nSettings.orgSelectedClassname !== '') {
2357 _this.setOrgChartCustomStyles();
2358 }
2359 });
2360
2361 var treeManualId = '#ays-chart-chart-source-data-edit-tree-content';
2362 var sortable = new TreeSortable({
2363 treeSelector: treeManualId,
2364 });
2365 var $treeManual = $(treeManualId);
2366 var $content = treeData.map(sortable.createBranch);
2367 $treeManual.html($content);
2368 sortable.run();
2369
2370 sortable.addListener('click', '.add-child', function (event, instance) {
2371 instance.addChildBranch($(event.target), treeData);
2372 });
2373 sortable.addListener('click', '.add-sibling', function (event, instance) {
2374 instance.addSiblingBranch($(event.target), treeData);
2375 });
2376
2377 sortable.addListener('click', '.remove-branch', function (event, instance) {
2378 event.preventDefault();
2379 var confirm = window.confirm('Are you sure you want to delete this branch?');
2380 if (!confirm) {
2381 return;
2382 }
2383 instance.removeBranch($(event.target));
2384 });
2385
2386 sortable.addListener('click', '.open-branch-options', function (event, instance) {
2387 instance.openBranchOptions($(event.target));
2388 })
2389
2390 sortable.addListener('click', '.close-branch-options', function (event, instance) {
2391 instance.closeBranchOptions($(event.target));
2392 })
2393
2394 sortable.addListener('click', '.change-branch-options', function (event, instance) {
2395 instance.changeBranchOptions($(event.target));
2396 })
2397
2398 tippy('[data-tippy-content]');
2399 }
2400
2401 /*
2402 Configure all settings for all chart types
2403 Getting settings for each chart type in respective function
2404 */
2405 ChartBuilderGoogleCharts.prototype.configOptionsForCharts = function (settings) {
2406 var newSettings = {};
2407
2408 newSettings.chartFontSize = settings['font_size'];
2409 newSettings.backgroundColor = settings['transparent_background'] && settings['transparent_background'] === 'checked' ? 'transparent' : settings['background_color'];
2410 // newSettings.borderWidth = settings['border_width'];
2411 // newSettings.borderColor = settings['border_color'];
2412 newSettings.tooltipTrigger = settings['tooltip_trigger'];
2413 newSettings.tooltipText = settings['tooltip_text'];
2414 newSettings.showColorCode = (settings['show_color_code'] == 'checked') ? true : false;
2415 newSettings.tooltipItalicText = (settings['tooltip_italic'] == 'checked') ? true : false;
2416 newSettings.tooltipBoldText = settings['tooltip_bold'];
2417 newSettings.legendItalicText = (settings['legend_italic'] == 'checked') ? true : false;
2418 newSettings.legendBoldText = (settings['legend_bold'] == 'checked') ? true : false;
2419 newSettings.tooltipTextColor = settings['tooltip_text_color'];
2420 newSettings.tooltipFontSize = settings['tooltip_font_size'];
2421 newSettings.legendPosition = settings['legend_position'];
2422 newSettings.legendAlignment = settings['legend_alignment'];
2423 newSettings.legendFontSize = settings['legend_font_size'];
2424 newSettings.rotationDegree = settings['rotation_degree'];
2425 newSettings.sliceBorderColor = settings['slice_border_color'];
2426 newSettings.reverseCategories = (settings['reverse_categories'] == 'checked') ? true : false;
2427 newSettings.sliceText = settings['slice_text'];
2428 newSettings.legendColor = settings['legend_color'];
2429 newSettings.dataGroupingLimit = settings['data_grouping_limit']/100;
2430 newSettings.dataGroupingLabel = settings['data_grouping_label'];
2431 newSettings.dataGroupingColor = settings['data_grouping_color'];
2432 newSettings.sliceColor = settings['slice_color'];
2433 newSettings.sliceOffset = settings['slice_offset'];
2434 newSettings.sliceTextColor = settings['slice_text_color'];
2435 newSettings.chartBackgroundColor = settings['transparent_background'] && settings['transparent_background'] === 'checked' ? 'transparent' : settings['chart_background_color'];
2436 newSettings.chartBorderWidth = settings['chart_border_width'];
2437 newSettings.chartBorderColor = settings['chart_border_color'];
2438 newSettings.chartLeftMargin = settings['chart_left_margin_for_js'];
2439 newSettings.chartRightMargin = settings['chart_right_margin_for_js'];
2440 newSettings.chartTopMargin = settings['chart_top_margin_for_js'];
2441 newSettings.chartBottomMargin = settings['chart_bottom_margin_for_js'];
2442 newSettings.isStacked = (settings['is_stacked'] == 'checked') ? true : false;
2443 newSettings.focusTarget = settings['focus_target'];
2444 newSettings.groupWidthFormat = settings['group_width_format'] == '%' ? '%' : '';
2445 newSettings.groupWidth = settings['group_width'] + newSettings.groupWidthFormat;
2446 newSettings.hAxisTitle = settings['haxis_title'];
2447 newSettings.vAxisTitle = settings['vaxis_title'];
2448 newSettings.hAxisLabelFontSize = settings['haxis_label_font_size'];
2449 newSettings.vAxisLabelFontSize = settings['vaxis_label_font_size'];
2450 newSettings.hAxisLabelColor = settings['haxis_label_color'];
2451 newSettings.vAxisLabelColor = settings['vaxis_label_color'];
2452 newSettings.hAxisTextPosition = settings['haxis_text_position'];
2453 newSettings.vAxisTextPosition = settings['vaxis_text_position'];
2454 newSettings.vAxisDirection = (settings['vaxis_direction'] == 'checked') ? -1 : 1;
2455 newSettings.hAxisDirection = (settings['haxis_direction'] == 'checked') ? -1 : 1;
2456 newSettings.hAxisTextColor = settings['haxis_text_color'];
2457 newSettings.vAxisTextColor = settings['vaxis_text_color'];
2458 newSettings.hAxisBaselineColor = settings['haxis_baseline_color'];
2459 newSettings.vAxisBaselineColor = settings['vaxis_baseline_color'];
2460 newSettings.hAxisTextFontSize = settings['haxis_text_font_size'];
2461 newSettings.vAxisTextFontSize = settings['vaxis_text_font_size'];
2462 newSettings.hAxisSlantedText = settings['haxis_slanted'];
2463 newSettings.hAxisSlantedTextAngle = settings['haxis_slanted_text_angle'];
2464 newSettings.hAxisShowTextEvery = settings['haxis_show_text_every'];
2465 newSettings.vAxisFormat = settings['vaxis_format'];
2466 newSettings.hAxisFormat = settings['haxis_format'];
2467 newSettings.hAxisEnableDividePercent = (settings['haxis_enable_divide_percent'] == 'checked' && settings['haxis_format'] == 'percent') ? true : false;
2468 newSettings.vAxisEnableDividePercent = (settings['vaxis_enable_divide_percent'] == 'checked' && settings['vaxis_format'] == 'percent') ? true : false;
2469 newSettings.hAxisMinValue = settings['haxis_min_value'];
2470 newSettings.hAxisMaxValue = settings['haxis_max_value'];
2471 newSettings.vAxisMinValue = settings['vaxis_min_value'];
2472 newSettings.vAxisMaxValue = settings['vaxis_max_value'];
2473 newSettings.hAxisGridlinesCount = settings['haxis_gridlines_count'];
2474 newSettings.hAxisGridlinesColor = settings['haxis_gridlines_color'];
2475 newSettings.hAxisMinorGridlinesColor = settings['haxis_minor_gridlines_color'];
2476 newSettings.vAxisGridlinesCount = settings['vaxis_gridlines_count'];
2477 newSettings.vAxisGridlinesColor = settings['vaxis_gridlines_color'];
2478 newSettings.vAxisMinorGridlinesColor = settings['vaxis_minor_gridlines_color'];
2479 newSettings.hAxisItalicText = (settings['haxis_italic'] == 'checked') ? true : false;
2480 newSettings.hAxisBoldText = (settings['haxis_bold'] == 'checked') ? true : false;
2481 newSettings.vAxisItalicText = (settings['vaxis_italic'] == 'checked') ? true : false;
2482 newSettings.vAxisBoldText = (settings['vaxis_bold'] == 'checked') ? true : false;
2483 newSettings.hAxisItalicTitle = (settings['haxis_title_italic'] == 'checked') ? true : false;
2484 newSettings.hAxisBoldTitle = (settings['haxis_title_bold'] == 'checked') ? true : false;
2485 newSettings.vAxisItalicTitle = (settings['vaxis_title_italic'] == 'checked') ? true : false;
2486 newSettings.vAxisBoldTitle = (settings['vaxis_title_bold'] == 'checked') ? true : false;
2487 newSettings.opacity = settings['opacity'];
2488 newSettings.enableInteractivity = (settings['enable_interactivity'] == 'checked') ? true : false;
2489 newSettings.maximizedView = (settings['maximized_view'] == 'checked') ? 'maximized' : null;
2490 newSettings.enableAnimation = (settings['enable_animation'] == 'checked') ? true : false;
2491 newSettings.animationDuration = settings['animation_duration'];
2492 newSettings.animationStartup = (settings['animation_startup'] == 'checked') ? true : false;
2493 newSettings.animationEasing = settings['animation_easing'];
2494 newSettings.seriesColor = settings['series_color'];
2495 newSettings.seriesFormat = settings['series_format'];
2496 newSettings.seriesVisibleInLegend = settings['series_visible_in_legend'];
2497 newSettings.seriesLineWidth = settings['series_line_width'];
2498 newSettings.seriesPointSize = settings['series_point_size'];
2499 newSettings.seriesPointShape = settings['series_point_shape'];
2500 newSettings.enableRowSettings = (settings['enable_row_settings'] == 'checked') ? true : false;
2501 newSettings.rowsColor = settings['rows_color'];
2502 newSettings.rowsOpacity = settings['rows_opacity'];
2503 newSettings.multipleSelection = (settings['multiple_selection'] == 'checked') ? 'multiple' : 'single';
2504 newSettings.multipleDataFormat = settings['multiple_data_format'];
2505 newSettings.pointShape = settings['point_shape'];
2506 newSettings.pointSize = settings['point_size'];
2507 newSettings.lineWidth = settings['line_width'];
2508 newSettings.crosshairTrigger = settings['crosshair_trigger'];
2509 newSettings.crosshairOrientation = settings['crosshair_orientation'];
2510 newSettings.crosshairOpacity = settings['crosshair_opacity'];
2511 newSettings.dashStyle = settings['dash_style'] ? settings['dash_style'].split(',') : null;
2512 newSettings.orientation = (settings['orientation'] == 'checked') ? 'vertical' : 'horizontal';
2513 newSettings.fillNulls = (settings['fill_nulls'] == 'checked') ? true : false;
2514 newSettings.holeSize = settings['donut_hole_size'];
2515 newSettings.orgChartFontSize = settings['org_chart_font_size'];
2516 newSettings.allowCollapse = (settings['allow_collapse'] == 'checked') ? true : false;
2517 newSettings.orgClassname = settings['org_classname'];
2518 newSettings.orgSelectedClassname = settings['org_selected_classname'];
2519
2520 return newSettings;
2521 }
2522
2523 ChartBuilderGoogleCharts.prototype.setRowOptions = function (data, options, isJS = true) {
2524 var _this = this;
2525
2526 if (data && data.length > 0) {
2527 if (data[0] && data[0].length == 2) {
2528 data[0].push({ role: 'style' });
2529 for (var i = 1; i < data.length; i++) {
2530 var opts = [];
2531
2532 var color = isJS ? options.rowsColor[i - 1] : options.rows_color[i - 1];
2533 opts.push(color ? 'color:'+color : '');
2534
2535 var opacity = isJS ? options.rowsOpacity[i - 1] : options.rows_opacity[i - 1];
2536 opts.push(opacity ? 'opacity:'+opacity : '');
2537
2538
2539 data[i].push(opts.join(';'));
2540 }
2541 }
2542 }
2543
2544 return data;
2545 }
2546
2547 ChartBuilderGoogleCharts.prototype.removeRowOptions = function (data) {
2548 var _this = this;
2549
2550 if (data && data.length > 0) {
2551 if (data[0] && data[0].length == 2) {
2552 for (var i = 0; i < data.length; i++) {
2553 data[i].splice(2, 1);
2554 }
2555 }
2556 }
2557
2558 return data;
2559 }
2560
2561 // Detect window resize moment to draw charts responsively
2562 ChartBuilderGoogleCharts.prototype.resizeChart = function(){
2563 var _this = this;
2564
2565 //create trigger to resizeEnd event
2566 $(window).resize(function() {
2567 if(this.resizeTO) clearTimeout(this.resizeTO);
2568 this.resizeTO = setTimeout(function() {
2569 $(this).trigger('resizeEnd');
2570 }, 100);
2571 });
2572
2573 //redraw graph when window resize is completed
2574 $(window).on('resizeEnd', function() {
2575 _this.drawChartFunction( _this.chartData, _this.chartOptions );
2576 });
2577
2578 }
2579
2580 ChartBuilderGoogleCharts.prototype.setOrgChartCustomStyles = function () {
2581 var _this = this;
2582
2583 var orgClassname = _this.chartSourceData.settings.org_classname;
2584 var bgColor = _this.chartSourceData.settings.org_node_background_color;
2585 var padding = _this.chartSourceData.settings.org_node_padding;
2586 var borderRadius = _this.chartSourceData.settings.org_node_border_radius;
2587 var borderWidth = _this.chartSourceData.settings.org_node_border_width;
2588 var borderColor = _this.chartSourceData.settings.org_node_border_color;
2589 var textColor = _this.chartSourceData.settings.org_node_text_color;
2590 var textSize = _this.chartSourceData.settings.org_node_text_font_size;
2591 var descriptionColor = _this.chartSourceData.settings.org_node_description_font_color;
2592 var descriptionSize = _this.chartSourceData.settings.org_node_description_font_size;
2593
2594 var orgSelectedClassname = _this.chartSourceData.settings.org_selected_classname;
2595 var selectedBgColor = _this.chartSourceData.settings.org_selected_node_background_color;
2596 var selectedTextColor = _this.chartSourceData.settings.org_selected_node_text_color;
2597
2598 if (orgClassname != '') {
2599 var node = _this.$el.find('.' + orgClassname);
2600 node.css({
2601 'background-color' : bgColor,
2602 'padding' : padding + 'px',
2603 'border-radius' : borderRadius + 'px',
2604 'color' : textColor,
2605 'font-size' : textSize + 'px',
2606 'border' : 'none',
2607 'outline' : borderWidth + 'px solid ' + borderColor,
2608 });
2609 }
2610
2611 if (orgSelectedClassname != '') {
2612 var selectedNode = _this.$el.find('.' + orgSelectedClassname);
2613 selectedNode.css({
2614 'background-color' : selectedBgColor,
2615 // 'padding' : padding + 'px',
2616 // 'border-radius' : borderRadius + 'px',
2617 'color' : selectedTextColor,
2618 // 'font-size' : textSize + 'px',
2619 // 'border' : 'none',
2620 // 'outline' : borderWidth + 'px solid ' + borderColor,
2621 });
2622 }
2623
2624 var description = _this.$el.find('.' + _this.htmlClassPrefix + 'org-chart-tree-description');
2625 description.css({
2626 'color' : descriptionColor,
2627 'font-size' : descriptionSize + 'px',
2628 });
2629
2630 // var image = _this.$el.find('.' + _this.htmlClassPrefix + 'org-chart-tree-image');
2631 }
2632
2633 ChartBuilderGoogleCharts.prototype.chartConvertData = function( data ){
2634 var _this = this;
2635 var dataTypes = [];
2636
2637 // Collect data in new array for chart rendering
2638 for ( var key in data ) {
2639 if ( data.hasOwnProperty( key ) ) {
2640 if (key == 0) {
2641 if (data[key][0] != '' && data[key][1] != '') {
2642 dataTypes.push([
2643 _this.htmlDecode(data[key][0]), _this.htmlDecode(data[key][1])
2644 ]);
2645 }
2646 } else {
2647 if (data[key][0] != '' && data[key][1] != '') {
2648 dataTypes.push([
2649 _this.htmlDecode(data[key][0]), +(data[key][1])
2650 ]);
2651 }
2652 }
2653 }
2654 }
2655
2656 return dataTypes;
2657 }
2658
2659 // Converting chart data for multicolumn chart
2660 ChartBuilderGoogleCharts.prototype.multiColumnChartConvertData = function( data ){
2661 var _this = this;
2662 var dataTypes = [];
2663 var titleRow = [];
2664
2665 for (var key in data) {
2666 var dataRow = [];
2667 if (data.hasOwnProperty(key)) {
2668 if (key == 0) {
2669 for (var index in data[key]) {
2670 if (data[key][index] != '') {
2671 titleRow.push(_this.htmlDecode(data[key][index]));
2672 }
2673 }
2674 dataTypes.push(titleRow);
2675 } else {
2676 for (var index in data[key]) {
2677 if (data[key][index] != '') {
2678 if (index == 0) {
2679 dataRow.push(_this.htmlDecode(data[key][index]));
2680 } else {
2681 dataRow.push(+data[key][index]);
2682 }
2683 }
2684 }
2685 dataTypes.push(dataRow);
2686 }
2687 }
2688 }
2689
2690 return dataTypes;
2691 }
2692
2693 // Converting chart data for org chart type
2694 ChartBuilderGoogleCharts.prototype.orgChartConvertData = function( data ){
2695 var _this = this;
2696 var dataTypes = [['Name', 'Manager', 'Tooltip', 'Url']];
2697 // var name = "";
2698 // Collect data in new array for chart rendering
2699 for ( var key in data ) {
2700 if ( data.hasOwnProperty( key ) ) {
2701 if (key != 0) {
2702 var name = data[key][0];
2703 var description = data[key][1];
2704 var image = (data[key].length > 6) ? data[key][2] : '';
2705 var parent_name = (data[key].length > 6) ? data[key][3] : data[key][2];
2706 var tooltip = (data[key].length > 6) ? data[key][4] : data[key][3];
2707 var url = (data[key].length > 6) ? data[key][5] : '';
2708
2709 if (description) {
2710 name += _this.orgChartFormatName(description);
2711 }
2712 if (image && image != '') {
2713 name = _this.orgChartFormatImage(image) + name;
2714 }
2715 name = {'v': data[key][0], 'f': name};
2716 dataTypes.push([
2717 name, parent_name, tooltip, url
2718 ]);
2719 }
2720 }
2721 }
2722
2723 return dataTypes;
2724 }
2725
2726 ChartBuilderGoogleCharts.prototype.orgChartFormatName = function( description ){
2727 return `<div class="${this.htmlClassPrefix}org-chart-tree-description">${description}</div>`;
2728 }
2729
2730 ChartBuilderGoogleCharts.prototype.orgChartFormatImage = function( image ){
2731 return `<div class="${this.htmlClassPrefix}org-chart-tree-image"><img width="128px" src="${image}"></div>`;
2732 }
2733
2734 ChartBuilderGoogleCharts.prototype.orgChartConvertDataForTreeManual = function( source ){
2735 var _this = this;
2736 var treeDataArr = [];
2737 var ordering = _this.chartSourceData.source_ordering;
2738 source = Object.assign({}, source);
2739 if ( !$.isArray(source) ) {
2740 for (var index in ordering) {
2741 var key = (ordering[index]);
2742
2743 var id = key;
2744 var title = source[key][0];
2745 var description = source[key][1];
2746 var image = (source[key].length > 6) ? source[key][2] : '';
2747 var parent_name = (source[key].length > 6) ? source[key][3] : source[key][2];
2748 var tooltip = (source[key].length > 6) ? source[key][4] : source[key][3];
2749 var url = (source[key].length > 6) ? source[key][5] : '';
2750 var parent_id = (source[key].length > 6) ? source[key][6].toString() : source[key][4].toString();
2751 var level = (source[key].length > 6) ? source[key][7].toString() : source[key][5].toString();
2752
2753 // var ID = (source[0] == undefined) ? key : key + 1;
2754 treeDataArr[index] = {
2755 id: id,
2756 parent_id: parent_id,
2757 title: title,
2758 level: level,
2759 description: description,
2760 image: image,
2761 tooltip: tooltip,
2762 url: url,
2763 parent_name: parent_name
2764 }
2765 }
2766 }
2767
2768 return treeDataArr;
2769 }
2770
2771 // Update chart data and display immediately
2772 ChartBuilderGoogleCharts.prototype.updateChartData = function( newData ){
2773 var _this = this;
2774 _this.drawChartFunction( newData, _this.chartOptions );
2775 }
2776
2777 ChartBuilderGoogleCharts.prototype.addChartDataRow = function (element){
2778 var _this = this;
2779 // var deleteImageUrl = ChartBuilderSourceData.removeManualDataRow;
2780 var content = '';
2781
2782 var addedTermsandConds = this.$el.find("."+this.htmlClassPrefix+"chart-source-data-edit-block");
2783 var addedTermsandCondsId = this.$el.find("."+this.htmlClassPrefix+"chart-source-data-edit-block:last-child");
2784 var dataId = addedTermsandConds.length >= 1 ? addedTermsandCondsId.data("sourceId") + 1 : 1;
2785 var colCount = addedTermsandConds.first().children().length - 1;
2786
2787 var termsCondsMessageAttrName = this.newTermsCondsMessageAttrName( this.htmlNamePrefix + 'chart_source_data' , dataId );
2788
2789 content += '<div class = "'+this.htmlClassPrefix+'chart-source-data-edit-block" data-source-id="' + dataId + '" >';
2790 content += '<div class="'+this.htmlClassPrefix+'chart-source-data-move-block '+this.htmlClassPrefix+'chart-source-data-move-row">';
2791 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>';
2792 content += '</div>';
2793 content += '<div class="'+this.htmlClassPrefix+'icons-box '+this.htmlClassPrefix+'icons-remove-box">';
2794 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>';
2795 content += '</div>';
2796 for (var i = 0; i < colCount; i++) {
2797 if (i == 0) {
2798 content += '<div class="'+this.htmlClassPrefix+'chart-source-data-input-box '+this.htmlClassPrefix+'chart-source-data-name-input-box" data-cell-id="'+i+'">';
2799 content += '<input type="text" class="ays-text-input form-control" name="' + termsCondsMessageAttrName + '">';
2800 content += '</div>';
2801 } else {
2802 content += '<div class="'+this.htmlClassPrefix+'chart-source-data-input-box '+this.htmlClassPrefix+'chart-source-data-input-number" data-cell-id="'+i+'">';
2803 content += '<input type="number" class="ays-text-input form-control" name="' + termsCondsMessageAttrName + '" step="any">';
2804 content += '</div>';
2805 }
2806 }
2807 content += '</div>';
2808
2809 this.$el.find('.'+this.htmlClassPrefix+'chart-source-data-content').append(content);
2810 $('[data-bs-toggle="tooltip"]').tooltip();
2811 }
2812
2813 ChartBuilderGoogleCharts.prototype.addChartDataColumn = function (e){
2814 var _this = this;
2815
2816 var rows = _this.$el.find("."+_this.htmlClassPrefix+"chart-source-data-content").children();
2817 var lastColId = +$(rows[0]).find('.'+_this.htmlClassPrefix+'chart-source-data-input-box:last-child').attr('data-cell-id');
2818 rows.each(function(key, row){
2819 var dataIDEach = row.getAttribute('data-source-id');
2820 var content = '';
2821
2822 if (key === 0) {
2823 content += '<div class="'+_this.htmlClassPrefix+'chart-source-data-input-box ' +_this.htmlClassPrefix+'chart-source-title-box" data-cell-id="'+(lastColId+1)+'">';
2824 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">';
2825 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;" />';
2826 content += '</svg>';
2827
2828 content += '<div class="' + _this.htmlClassPrefix + 'chart-source-data-titles-box-item">';
2829 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 ) + '">';
2830 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">';
2831 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;" />';
2832 content += '</svg>';
2833 content += '</div>'
2834 content += '</div>';
2835 } else {
2836 content += '<div class="'+_this.htmlClassPrefix+'chart-source-data-input-box ' +_this.htmlClassPrefix+'chart-source-data-input-number" data-cell-id="'+(lastColId+1)+'">';
2837 content += '<input type="number" class="ays-text-input form-control" name="' + _this.newTermsCondsMessageAttrName( _this.htmlNamePrefix + 'chart_source_data' , dataIDEach ) + '" step="any">';
2838 content += '</div>';
2839 }
2840
2841 $(row).append(content);
2842 $('[data-bs-toggle="tooltip"]').tooltip();
2843 });
2844 }
2845
2846 ChartBuilderGoogleCharts.prototype.deleteChartDataRow = function (element){
2847 var _this = this;
2848
2849 var rows = _this.$el.find("."+_this.htmlClassPrefix+"chart-source-data-content").children();
2850 if ((rows.length - 1) >= 2) {
2851 var confirm = window.confirm(aysChartBuilderAdmin.confirmRowDelete);
2852 if (confirm) {
2853 var thisMainParent = element.parent().parent();
2854 thisMainParent.remove();
2855 }
2856 } else {
2857 alert(aysChartBuilderAdmin.minRowNotice);
2858 }
2859
2860 element.blur();
2861 element.tooltip('hide');
2862 }
2863
2864 ChartBuilderGoogleCharts.prototype.deleteChartDataColumn = function (element){
2865 var _this = this;
2866
2867 var rows = _this.$el.find("."+_this.htmlClassPrefix+"chart-source-data-content").children();
2868 if (rows.eq(1).children('.ays-chart-chart-source-data-input-number').length >= 2) {
2869 var confirm = window.confirm(aysChartBuilderAdmin.confirmColDelete);
2870 if (confirm) {
2871 var parent = element.parents('.ays-chart-chart-source-title-box');
2872 var index = _this.returnIndexOfEl(parent);
2873 rows.each(function(key, row){
2874 var dataRow = $(row).find('.ays-chart-chart-source-data-input-box:not("ays-chart-chart-source-data-name-input-box")');
2875 $(dataRow).each(function(ind, cell){
2876 if (ind == index) {
2877 $(cell).remove();
2878 }
2879 });
2880 });
2881 }
2882 } else {
2883 alert(aysChartBuilderAdmin.minColNotice);
2884 }
2885
2886 element.blur();
2887 element.tooltip('hide');
2888 }
2889
2890 ChartBuilderGoogleCharts.prototype.sortDataByColumn = function (el) {
2891 var _this = this;
2892
2893 var sortingOrder = el.attr('data-sort-order');
2894 var colFirst = el.parents('.'+_this.htmlClassPrefix+'chart-source-data-input-box');
2895 var colIndex = colFirst.attr('data-cell-id');
2896 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');
2897
2898 var sorted = {};
2899 colList.each(function(key, input){
2900 if (key !== 0) {
2901 var rowIndex = $(input).parents('.'+_this.htmlClassPrefix+'chart-source-data-edit-block').attr('data-source-id');
2902 sorted[rowIndex] = +input.value
2903 }
2904 });
2905
2906 if (sortingOrder === 'asc') {
2907 sorted = _this.sortDataAsc(sorted);
2908 el.attr('data-sort-order', 'desc');
2909 } else if (sortingOrder === 'desc') {
2910 sorted = _this.sortDataDesc(sorted);
2911 el.attr('data-sort-order', 'asc');
2912 } else {
2913 sorted = _this.sortDataAsc(sorted);
2914 el.attr('data-sort-order', 'desc');
2915 }
2916
2917 var container = _this.$el.find('.'+_this.htmlClassPrefix+'chart-source-data-content');
2918 var newContainer = [];
2919 sorted.forEach((index, newIndex) => {
2920 var row = container.find("."+_this.htmlClassPrefix+"chart-source-data-edit-block[data-source-id='"+index+"']");
2921 var inputs = row.find('input.ays-text-input');
2922 var inputName = _this.newTermsCondsMessageAttrName(_this.htmlNamePrefix + 'chart_source_data', newIndex + 1);
2923
2924 $(inputs).each(function (inputIndex, input) {
2925 input.setAttribute('name', inputName);
2926 });
2927
2928 newContainer.push(row);
2929 });
2930 sorted.forEach((index, newIndex) => {
2931 var row = container.find("."+_this.htmlClassPrefix+"chart-source-data-edit-block[data-source-id='"+index+"']");
2932 newContainer.push(row);
2933 });
2934
2935 container.innerHTML = '';
2936 newContainer.forEach(row => {
2937 container.append(row);
2938 });
2939
2940 var rows = container.find("."+_this.htmlClassPrefix+"chart-source-data-edit-block");
2941 for (var i = 0; i < rows.length; i++) {
2942 $(rows[i]).attr('data-source-id', i);
2943 }
2944 }
2945
2946 ChartBuilderGoogleCharts.prototype.sortDataAsc = function (data) {
2947 return Object.keys(data).sort(function (a, b) {return data[a] - data[b]});
2948 }
2949
2950 ChartBuilderGoogleCharts.prototype.sortDataDesc = function (data) {
2951 return Object.keys(data).sort(function (a, b) {return data[b] - data[a]});
2952 }
2953
2954 ChartBuilderGoogleCharts.prototype.returnIndexOfEl = function (element){
2955 var i = 0;
2956 var elements = element.parent().find('.ays-chart-chart-source-title-box');
2957 elements.each(function(key, cell){
2958 if ($(cell).is(element)) {
2959 i = key;
2960 }
2961 });
2962 return i;
2963 }
2964
2965 ChartBuilderGoogleCharts.prototype.configureOptions = function() {
2966 var _this = this;
2967
2968 _this.$el.find('.ays-chart-chart-source-title-box').eq(0).find('.ays-chart-chart-source-data-remove-block').css('visibility', 'hidden');
2969
2970 var removeCols = _this.$el.find('.ays-chart-chart-source-title-box').find('.ays-chart-chart-source-data-remove-block');
2971 if (_this.chartType === 'pie_chart') {
2972 removeCols.css('visibility', 'hidden');
2973 }
2974
2975 var options = _this.$el.find('.cb-changable-opt');
2976 var typeOptions = _this.$el.find('.cb-'+_this.chartType+'-opt');
2977 options.addClass('display_none');
2978 typeOptions.removeClass('display_none');
2979
2980 var manualTabs = _this.$el.find('.cb-changable-manual:not(.cb-'+_this.chartType+'-manual)');
2981 var typeManualTab = _this.$el.find('.cb-'+_this.chartType+'-manual');
2982 manualTabs.remove();
2983 typeManualTab.removeClass('display_none');
2984
2985 var tabs = _this.$el.find('.cb-changable-tab:not(.cb-'+_this.chartType+'-tab)').parents('fieldset.ays-accordion-options-container');
2986 var currentTabs = _this.$el.find('.cb-'+_this.chartType+'-tab').parents('fieldset.ays-accordion-options-container');
2987 tabs.addClass('display_none');
2988 currentTabs.removeClass('display_none');
2989 }
2990
2991 ChartBuilderGoogleCharts.prototype.changeChartType = function () {
2992 var _this = this;
2993
2994 _this.$el.find('#'+_this.htmlClassPrefix+'option-chart-type').val(_this.chartType);
2995 _this.$el.find('.'+_this.htmlClassPrefix+'type-info-box-text-changeable').text(_this.chartSources[_this.chartType]);
2996 _this.$el.find('.'+_this.htmlClassPrefix+'nav-tab-chart.nav-tab[data-tab="tab4"]').text(_this.chartSourceData.chartTypesNames[_this.chartType]+" settings");
2997 _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");
2998 _this.$el.find('.'+_this.htmlClassPrefix+'charts-main-container').attr('id' , _this.htmlClassPrefix+_this.chartType);
2999
3000 _this.configureOptions();
3001 _this.loadChartBySource(true);
3002 }
3003
3004 ChartBuilderGoogleCharts.prototype.newTermsCondsMessageAttrName = function (termCondName, termCondId){
3005 var _this = this;
3006 return termCondName + '['+ termCondId +'][]';
3007 }
3008
3009 ChartBuilderGoogleCharts.prototype.setAccordionEvents = function(e){
3010 var _this = this;
3011
3012 _this.$el.on('click', '.ays-accordion-options-header', function(e){
3013 _this.openCloseAccordion(e, _this);
3014 });
3015
3016 _this.$el.on('click', '.ays-slices-accordion-options-header', function(e){
3017 _this.openCloseAccordion(e, _this, '-slices');
3018 });
3019
3020 _this.$el.on('click', '.ays-series-accordion-options-header', function(e){
3021 _this.openCloseAccordion(e, _this, '-series');
3022 });
3023
3024 _this.$el.on('click', '.ays-rows-accordion-options-header', function(e){
3025 _this.openCloseAccordion(e, _this, '-rows');
3026 });
3027 }
3028
3029 ChartBuilderGoogleCharts.prototype.openCloseAccordion = function(e, _this, contType = ""){
3030 var container = $(e.target).parents('.ays' + contType + '-accordion-options-container');
3031 var parent = (contType != "") ? container.parents('.ays-chart' + contType + '-settings') : _this.$el.find('#' + container.parents('.ays-tab-content').attr('id') + ' .ays-accordions-container').eq(0);
3032 var index = (contType != "") ? container.index() : -1;
3033
3034 if( container.attr('data-collapsed') === 'true' ){
3035 _this.closeAllAccordions( parent, contType, index );
3036 setTimeout(() => {
3037 container.find('.ays' + contType + '-accordion-options-content').slideDown();
3038 container.attr('data-collapsed', 'false');
3039 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').find('path').css('fill', '#008cff');
3040 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').removeClass('ays' + contType + '-accordion-arrow-right').addClass('ays' + contType + '-accordion-arrow-down');
3041 }, 150);
3042 }else{
3043 setTimeout(() => {
3044 container.find('.ays' + contType + '-accordion-options-content').slideUp();
3045 container.attr('data-collapsed', 'true');
3046 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').find('path').css('fill', '#c4c4c4');
3047 container.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').removeClass('ays' + contType + '-accordion-arrow-down').addClass('ays' + contType + '-accordion-arrow-right');
3048 }, 150);
3049 }
3050 }
3051
3052 ChartBuilderGoogleCharts.prototype.closeAllAccordions = function( container, contType, index ){
3053 var _this = this;
3054
3055 container.find('.ays' + contType + '-accordion-options-container').each(function (i){
3056 var $this = $(this);
3057 if (i != index) {
3058 setTimeout(() => {
3059 $this.find('.ays' + contType + '-accordion-options-content').slideUp();
3060 $this.attr('data-collapsed', 'true');
3061 $this.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').find('path').css('fill', '#c4c4c4');
3062 $this.find('.ays' + contType + '-accordion-options-header .ays' + contType + '-accordion-arrow').removeClass('ays' + contType + '-accordion-arrow-down').addClass('ays' + contType + '-accordion-arrow-right');
3063 }, 150);
3064 }
3065 });
3066 }
3067
3068 ChartBuilderGoogleCharts.prototype.initDbImportComponent = function(){
3069 var _this = this;
3070 var table_columns = window.aysChartBuilderChartSettings.db_query.tables;
3071 var code_mirror = wp.CodeMirror || CodeMirror;
3072 var cm = code_mirror.fromTextArea(_this.$el.find('.ays-chart-db-query').get(0), {
3073 value: _this.$el.find('.ays-chart-db-query').val(),
3074 autofocus: false,
3075 mode: 'text/x-mysql',
3076 lineWrapping: true,
3077 dragDrop: false,
3078 matchBrackets: true,
3079 autoCloseBrackets: true,
3080 extraKeys: {"Ctrl-Space": "autocomplete"},
3081 hintOptions: { tables: table_columns }
3082 });
3083 cm = code_mirror.fromTextArea(_this.$el.find('.ays-chart-external-db-query').get(0), {
3084 value: _this.$el.find('.ays-chart-external-db-query').val(),
3085 autofocus: false,
3086 mode: 'text/x-mysql',
3087 lineWrapping: true,
3088 dragDrop: false,
3089 matchBrackets: true,
3090 autoCloseBrackets: true,
3091 extraKeys: {"Ctrl-Space": "autocomplete"}
3092 });
3093
3094
3095 // force refresh so that the query shows on first time load. Otherwise you have to click on the editor for it to show.
3096 _this.$el.on('ays-chart:db:query:focus', function(event, data){
3097 cm.refresh();
3098 });
3099
3100 // cm.focus();
3101
3102 // update text area.
3103 cm.on('inputRead', function(x, y){
3104 cm.save();
3105 });
3106
3107 // backspace and delete do not register so the text box does not get empty if the entire query is deleted
3108 // from the editor. Let's force this.
3109 _this.$el.on('ays-chart:db:query:update', function(event, data){
3110 cm.save();
3111 });
3112
3113 // clear the editor.
3114 _this.$el.on('ays-chart:db:query:setvalue', function(event, data){
3115 cm.setValue(data.value);
3116 cm.clearHistory();
3117 cm.refresh();
3118 });
3119
3120 // set an option at runtime?
3121 _this.$el.on('ays-chart:db:query:changeoption', function(event, data){
3122 cm.setOption(data.name, data.value);
3123 });
3124 }
3125
3126 ChartBuilderGoogleCharts.prototype.initDbImport = function(){
3127 var _this = this;
3128 _this.initDbImportComponent();
3129 }
3130
3131 ChartBuilderGoogleCharts.prototype.initQuizDBImport = function(){
3132 var _this = this;
3133
3134 _this.$el.find('#ays-chart-quiz-maker-fetch').on('click', function(e){
3135 e.preventDefault();
3136
3137 var select_query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').val();
3138 if (select_query == "") {
3139 return;
3140 }
3141
3142 _this.fetchQuizData( true );
3143 });
3144
3145 _this.$el.find('#ays-chart-quiz-maker-show-on-chart').on( 'click', function(e){
3146 e.preventDefault();
3147
3148 var select_query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').val();
3149 if (select_query == "") {
3150 return;
3151 }
3152
3153 if( _this.chartTempData ){
3154 _this.$el.find('#ays-chart-quiz-maker-success').empty();
3155 _this.$el.find('#ays-chart-quiz-maker-error').empty();
3156 if (_this.chartType == 'line_chart' || _this.chartType == 'bar_chart' || _this.chartType == 'column_chart') {
3157 _this.chartTempData = _this.multiColumnChartConvertData( _this.chartTempData );
3158 } else if (_this.chartType == 'org_chart') {
3159 _this.chartTempData = _this.orgChartConvertData( _this.chartTempData );
3160 } else {
3161 _this.chartTempData = _this.chartConvertData( _this.chartTempData );
3162 }
3163 _this.chartData = window.google.visualization.arrayToDataTable( _this.chartTempData );
3164
3165 _this.updateChartData( _this.chartData );
3166
3167 _this.chartTempData = null;
3168 }else{
3169 _this.fetchQuizData( false, true );
3170 }
3171
3172 });
3173
3174 _this.$el.find('#ays-chart-quiz-maker-save').on( 'click', function(e){
3175 e.preventDefault();
3176
3177 var select_query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').val();
3178 if (select_query == "") {
3179 return;
3180 }
3181
3182 _this.$el.find('#ays-chart-quiz-maker-success').empty();
3183 _this.$el.find('#ays-chart-quiz-maker-error').empty();
3184
3185 var chart_id = $(document).find('.' + _this.htmlClassPrefix + 'chart-id').val();
3186 var query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').find('option:selected').val();
3187 var selectQuizSelectDisplay = $(document).find('.'+_this.htmlClassPrefix+'select-quiz-maker-quiz-container').css('display');
3188 var quizID = null;
3189 if (selectQuizSelectDisplay != 'none') {
3190 quizID = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-quiz').find('option:selected').val();
3191 if (quizID == 0) {
3192 _this.$el.find('#ays-chart-quiz-maker-error').html( 'Please select a quiz.' );
3193 return;
3194 }
3195 }
3196
3197 // submit only if a query has been provided.
3198 if( query.length > 0 ){
3199 _this.startAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
3200
3201 $.ajax({
3202 url: ajaxurl,
3203 method: 'post',
3204 dataType: 'json',
3205 data: {
3206 'action': _this.ajaxAction,
3207 'function': window.aysChartBuilderChartSettings.ajax['actions']['quiz_maker_save_data'],
3208 'security': window.aysChartBuilderChartSettings.ajax['nonces']['quiz_maker_save_data'],
3209 'params': {
3210 query: query,
3211 quizID: quizID,
3212 chart_id: chart_id,
3213 }
3214 },
3215 success: function( response ){
3216 if( response.success ){
3217 _this.$el.find('#ays-chart-quiz-maker-success').html( response.data.msg );
3218 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('quiz_maker');
3219 }else{
3220 _this.$el.find('#ays-chart-quiz-maker-error').html( response.data.msg );
3221 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('manual');
3222 }
3223 },
3224 complete: function(){
3225 _this.endAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
3226 }
3227 });
3228 }else{
3229 _this.$el.find('#ays-chart-quiz-maker-form').unlock();
3230 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('manual');
3231 }
3232 });
3233
3234 $(document).on('ays-chart:modal:close', function (){
3235 _this.chartTempData = null;
3236 });
3237 }
3238
3239 ChartBuilderGoogleCharts.prototype.fetchQuizData = function( openModal = false, showOnChart = false ){
3240 var _this = this;
3241 _this.$el.trigger('ays-chart:db:query:update', {});
3242
3243 var chart_id = $(document).find('.' + _this.htmlClassPrefix + 'chart-id').val();
3244 var query = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-data-query').find('option:selected').val();
3245 var selectQuizSelectDisplay = $(document).find('.'+_this.htmlClassPrefix+'select-quiz-maker-quiz-container').css('display');
3246 var quizID = null;
3247 if (selectQuizSelectDisplay != 'none') {
3248 quizID = $(document).find('#'+_this.htmlClassPrefix+'select-quiz-maker-quiz').find('option:selected').val();
3249 if (quizID == 0) {
3250 _this.$el.find('#ays-chart-quiz-maker-error').html( 'Please select a quiz.' );
3251 return;
3252 }
3253 }
3254
3255 if (query.length == 0) {
3256 return;
3257 }
3258
3259 _this.startAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
3260
3261 var modal = $(document).find('#ays-chart-db-query-results');
3262
3263 _this.$el.find('.db-wizard-results').empty();
3264 _this.$el.find('#ays-chart-quiz-maker-success').empty();
3265 _this.$el.find('#ays-chart-quiz-maker-error').empty();
3266
3267 $.ajax({
3268 url: ajaxurl,
3269 method: 'post',
3270 dataType: 'json',
3271 data: {
3272 'action': _this.ajaxAction,
3273 'function': window.aysChartBuilderChartSettings.ajax['actions']['quiz_maker_get_data'],
3274 'security': window.aysChartBuilderChartSettings.ajax['nonces']['quiz_maker_get_data'],
3275 'params': {
3276 query: query,
3277 quizID: quizID,
3278 chart_id: chart_id,
3279 }
3280 },
3281 success: function( response ){
3282 if( response.success ){
3283 modal.find('.db-wizard-results').html( response.data.table );
3284 modal.find('#results').DataTable({
3285 "paging": true
3286 });
3287 modal.find('#results').parent().addClass('ays-db-results-wrap');
3288
3289 if( openModal === true ) {
3290 modal.aysModal('show');
3291 }
3292
3293 _this.chartTempData = response.data.data ? response.data.data : null;
3294
3295 if( showOnChart === true ) {
3296 if (_this.chartType == 'line_chart' || _this.chartType == 'bar_chart' || _this.chartType == 'column_chart') {
3297 _this.chartTempData = _this.multiColumnChartConvertData( _this.chartTempData );
3298 } else if (_this.chartType == 'org_chart') {
3299 _this.chartTempData = _this.orgChartConvertData( _this.chartTempData );
3300 } else {
3301 _this.chartTempData = _this.chartConvertData( _this.chartTempData );
3302 }
3303 _this.chartData = window.google.visualization.arrayToDataTable(_this.chartTempData);
3304
3305 _this.updateChartData(_this.chartData);
3306
3307 _this.chartTempData = null;
3308 }
3309 }else{
3310 modal.find('ays-close').trigger('click');
3311 _this.$el.find('#ays-chart-quiz-maker-error').html( response.data.msg );
3312 _this.$el.find('input[name="' + _this.htmlNamePrefix + 'source_type"]').val('manual');
3313 }
3314 },
3315 complete: function(){
3316 _this.endAjax( _this.$el.find('#ays-chart-quiz-maker-form') );
3317 }
3318 });
3319 }
3320
3321 ChartBuilderGoogleCharts.prototype.startAjax = function( element ){
3322 element.lock();
3323 }
3324
3325 ChartBuilderGoogleCharts.prototype.endAjax = function( element ){
3326 element.unlock();
3327 }
3328
3329 ChartBuilderGoogleCharts.prototype.quickSaveHotKeys = function() {
3330 $(document).on('keydown', function(e){
3331 var saveButton = $(document).find('input#ays-button-apply');
3332 if ( saveButton.length > 0 ) {
3333 if (!(e.which == 83 && e.ctrlKey) && !(e.which == 19)){
3334 return true;
3335 }
3336 saveButton.trigger("click");
3337 e.preventDefault();
3338 return false;
3339 }
3340 });
3341 }
3342
3343 // Manual data preview button
3344 ChartBuilderGoogleCharts.prototype.showOnChart = function () {
3345 var _this = this;
3346
3347 var lastId = $(document).find(".ays-chart-chart-source-data-edit-block:last-child").attr('data-source-id');
3348 var chartData = [];
3349
3350 var rowTitles = $(document).find('.ays-chart-chart-source-data-name-input-box');
3351 rowTitles.each(function(key, el) {
3352 var value = $(el).find('input').val();
3353 if ( value == '' ) {
3354 $(el).find('input').val('Option');
3355 }
3356 });
3357
3358 var form = $(document).find("#ays-charts-form-google-charts");
3359 var data = form.serializeFormJSON();
3360
3361 for (var i = 0; i <= lastId; i++) {
3362 if (data['ays_chart_source_data['+i+'][]'] !== undefined) {
3363 var dataRow = data['ays_chart_source_data['+i+'][]'];
3364 var filteredRow = [];
3365 for (var key = 0; key < dataRow.length; key++) {
3366 var value = dataRow[key];
3367 if (value != '') {
3368 filteredRow.push(value);
3369 } else {
3370 if (i == 0) {
3371 filteredRow.push('Title'+key);
3372 } else {
3373 filteredRow.push('0');
3374 }
3375 }
3376 }
3377 if (filteredRow.length != 0) {
3378 chartData.push(filteredRow);
3379 }
3380 }
3381 }
3382 if (_this.chartType == 'line_chart' || _this.chartType == 'bar_chart' || _this.chartType == 'column_chart') {
3383 _this.chartTempData = _this.multiColumnChartConvertData( chartData );
3384 } else {
3385 _this.chartTempData = _this.chartConvertData( chartData );
3386 }
3387
3388 _this.chartTempData = _this.chartSourceData.settings.enableRowSettings ? _this.setRowOptions(_this.chartTempData, _this.chartSourceData.settings, false) : _this.chartTempData;
3389
3390 _this.chartData = window.google.visualization.arrayToDataTable( _this.chartTempData );
3391
3392 _this.updateChartData( _this.chartData );
3393
3394 _this.chartTempData = null;
3395 }
3396
3397 ChartBuilderGoogleCharts.prototype.orgTypeShowOnChart = function () {
3398 var _this = this;
3399
3400 var form = _this.$el.find("#ays-charts-form-google-charts");
3401 var data = form.serializeFormJSON();
3402 var allBranches = _this.$el.find(".tree-branch");
3403 var treeManual = _this.$el.find("#ays-chart-chart-source-data-edit-tree-content");
3404
3405 var chartData = {};
3406 allBranches.each(function() {
3407 var branchId = $(this).attr("data-id")
3408 var changedName = $(this).find(".ays-chart-org-chart-name-" + branchId).val();
3409 var changedDescription = $(this).find(".ays-chart-org-chart-description-" + branchId).val();
3410 var changedImage = $(this).find(".ays-chart-org-chart-image-" + branchId).val();
3411 var changedParentName = $(this).find(".ays-chart-org-chart-parent-name").val();
3412 var changedTooltip = $(this).find(".ays-chart-org-chart-tooltip-" + branchId).val();
3413 var changedUrl = $(this).find(".ays-chart-org-chart-url-" + branchId).val();
3414 var changedParentId = $(this).find(".ays-chart-org-chart-parent").val();
3415
3416 var changedLevel = $(this).find(".ays-chart-org-chart-level").val();
3417
3418 chartData[branchId] = [changedName, changedDescription, changedImage, changedParentName, changedTooltip, changedUrl, changedParentId, changedLevel]
3419 })
3420
3421 _this.chartData = _this.orgChartConvertData( chartData );
3422 _this.chartTempData = _this.chartData;
3423 _this.chartData = window.google.visualization.arrayToDataTable( _this.chartData );
3424 _this.updateChartData( _this.chartData );
3425 chartData = null;
3426 }
3427
3428 ChartBuilderGoogleCharts.prototype.htmlDecode = function (input) {
3429 if (!input) return input;
3430
3431 var e = document.createElement('div');
3432 e.innerHTML = input;
3433 return e.childNodes[0].nodeValue;
3434 }
3435
3436 ChartBuilderGoogleCharts.prototype.drawChartFunction = function (source, options) {
3437 var _this = this;
3438
3439 var view = new google.visualization.DataView(source);
3440 _this.chartData = source;
3441
3442 if (_this.chartType == 'org_chart') {
3443 view.setColumns([0, 1, 2]);
3444 }
3445
3446 _this.chartObj.draw(view, options);
3447
3448 if (_this.chartType == 'org_chart') {
3449 _this.setOrgChartCustomStyles();
3450 }
3451 }
3452
3453 $.fn.ChartBuilderGoogleChartsMain = function(options) {
3454 return this.each(function() {
3455 if (!$.data(this, 'ChartBuilderGoogleChartsMain')) {
3456 $.data(this, 'ChartBuilderGoogleChartsMain', new ChartBuilderGoogleCharts(this, options));
3457 } else {
3458 try {
3459 $(this).data('ChartBuilderGoogleChartsMain').init();
3460 } catch (err) {
3461 console.error('ChartBuilderGoogleChartsMain has not initiated properly');
3462 }
3463 }
3464 });
3465 };
3466 $(document).find('#ays-charts-form-google-charts').ChartBuilderGoogleChartsMain();
3467
3468 })(jQuery);
3469
3470 (function ($) {
3471
3472 $.fn.serializeFormJSON = function () {
3473 let o = {},
3474 a = this.serializeArray();
3475 $.each(a, function () {
3476 if (o[this.name]) {
3477 if (!o[this.name].push) {
3478 o[this.name] = [o[this.name]];
3479 }
3480 o[this.name].push(this.value || '');
3481 } else {
3482 o[this.name] = this.value || '';
3483 }
3484 });
3485 return o;
3486 };
3487
3488 $.fn.lock = function () {
3489 $(this).each(function () {
3490 var $this = $(this);
3491 var position = $this.css('position');
3492
3493 if (!position) {
3494 position = 'static';
3495 }
3496
3497 switch (position) {
3498 case 'absolute':
3499 case 'relative':
3500 break;
3501 default:
3502 $this.css('position', 'relative');
3503 break;
3504 }
3505 $this.data('position', position);
3506
3507 var width = $this.width(),
3508 height = $this.height();
3509
3510 var locker = $('<div class="locker"></div>');
3511 locker.width(width).height(height);
3512
3513 var loader = $('<div class="locker-loader"></div>');
3514 loader.width(width).height(height);
3515
3516 locker.append(loader);
3517 $this.append(locker);
3518 $(window).resize(function () {
3519 $this.find('.locker,.locker-loader').width($this.width()).height($this.height());
3520 });
3521 });
3522
3523 return $(this);
3524 };
3525
3526 $.fn.unlock = function () {
3527 $(this).each(function () {
3528 $(this).find('.locker').remove();
3529 $(this).css('position', $(this).data('position'));
3530 });
3531
3532 return $(this);
3533 };
3534 })(jQuery);