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

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