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

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