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

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

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