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

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

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