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

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

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