PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.2.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.2.1
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 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.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 3.10.4 All 148 releases
visualizer / classes / Visualizer / Render / Sidebar.php

Sidebar.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.2.1, at classes/Visualizer/Render/Sidebar.php

782 lines 27.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // +----------------------------------------------------------------------+
4 // | Copyright 2013 Madpixels (email : visualizer@madpixels.net) |
5 // +----------------------------------------------------------------------+
6 // | This program is free software; you can redistribute it and/or modify |
7 // | it under the terms of the GNU General Public License, version 2, as |
8 // | published by the Free Software Foundation. |
9 // | |
10 // | This program is distributed in the hope that it will be useful, |
11 // | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 // | GNU General Public License for more details. |
14 // | |
15 // | You should have received a copy of the GNU General Public License |
16 // | along with this program; if not, write to the Free Software |
17 // | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, |
18 // | MA 02110-1301 USA |
19 // +----------------------------------------------------------------------+
20 // | Author: Eugene Manuilov <eugene@manuilov.org> |
21 // +----------------------------------------------------------------------+
22 /**
23 * Base class for all chart sidebar groups.
24 *
25 * @category Visualizer
26 * @package Render
27 *
28 * @since 1.0.0
29 * @abstract
30 */
31 abstract class Visualizer_Render_Sidebar extends Visualizer_Render {
32
33 /**
34 * The array of font families accepted by visualization API.
35 *
36 * @since 1.0.0
37 *
38 * @static
39 * @access protected
40 * @var array
41 */
42 protected static $_fontFamilies = array(
43 'Arial' => 'Arial',
44 'Sans Serif' => 'Sans Serif',
45 'serif' => 'Serif',
46 'Arial black' => 'Wide',
47 'Arial Narrow' => 'Narrow',
48 'Comic Sans MS' => 'Comic Sans MS',
49 'Courier New' => 'Courier New',
50 'Garamond' => 'Garamond',
51 'Georgia' => 'Georgia',
52 'Tahoma' => 'Tahoma',
53 'Verdana' => 'Verdana',
54 );
55
56 /**
57 * The Yes/No array.
58 *
59 * @since 1.0.0
60 *
61 * @access protected
62 * @var array
63 */
64 protected $_yesno;
65
66 /**
67 * The array of available legend positions.
68 *
69 * @since 1.0.0
70 *
71 * @access protected
72 * @var array
73 */
74 protected $_legendPositions;
75
76 /**
77 * The array of available alignments.
78 *
79 * @since 1.0.0
80 *
81 * @access protected
82 * @var array
83 */
84 protected $_alignments;
85
86 /**
87 * Whether this chart supports animation or not.
88 *
89 * @access protected
90 * @var bool
91 */
92 protected $_supportsAnimation = true;
93
94 /**
95 * Which library does this this chart implement?
96 *
97 * @access protected
98 * @var string
99 */
100 protected $_library = null;
101
102 /**
103 * Constructor.
104 *
105 * @since 1.0.0
106 *
107 * @access public
108 * @param array $data The data what has to be associated with this render.
109 */
110 public function __construct( $data = array() ) {
111 parent::__construct( $data );
112
113 $this->_legendPositions = array(
114 '' => '',
115 'left' => esc_html__( 'Left of the chart', 'visualizer' ),
116 'right' => esc_html__( 'Right of the chart', 'visualizer' ),
117 'top' => esc_html__( 'Above the chart', 'visualizer' ),
118 'bottom' => esc_html__( 'Below the chart', 'visualizer' ),
119 'in' => esc_html__( 'Inside the chart', 'visualizer' ),
120 'none' => esc_html__( 'Omit the legend', 'visualizer' ),
121 );
122
123 $this->_alignments = array(
124 '' => '',
125 'start' => esc_html__( 'Aligned to the start of the allocated area', 'visualizer' ),
126 'center' => esc_html__( 'Centered in the allocated area', 'visualizer' ),
127 'end' => esc_html__( 'Aligned to the end of the allocated area', 'visualizer' ),
128 );
129
130 $this->_yesno = array(
131 '' => '',
132 '1' => esc_html__( 'Yes', 'visualizer' ),
133 '0' => esc_html__( 'No', 'visualizer' ),
134 );
135
136 $this->hooks();
137 }
138
139 /**
140 * Renders chart title settings.
141 *
142 * @since 1.0.0
143 *
144 * @access protected
145 */
146 protected function _renderChartTitleSettings() {
147 self::_renderTextItem(
148 esc_html__( 'Chart Title', 'visualizer' ),
149 'title',
150 $this->title,
151 esc_html__( 'Text to display above the chart.', 'visualizer' )
152 );
153
154 self::_renderColorPickerItem(
155 esc_html__( 'Chart Title Color', 'visualizer' ),
156 'titleTextStyle[color]',
157 isset( $this->titleTextStyle['color'] ) ? $this->titleTextStyle['color'] : null,
158 '#000'
159 );
160 }
161
162 /**
163 * Renders chart advanced settings group.
164 *
165 * @access protected
166 */
167 protected function _renderAdvancedSettings() {
168 self::_renderGroupStart( esc_html__( 'Frontend Actions', 'visualizer' ) );
169 self::_renderSectionStart();
170 self::_renderSectionDescription( esc_html__( 'Configure frontend actions here.', 'visualizer' ) );
171 self::_renderSectionEnd();
172
173 $this->_renderActionSettings();
174 self::_renderGroupEnd();
175
176 self::_renderGroupStart( esc_html__( 'Manual Configuration', 'visualizer' ) );
177 self::_renderSectionStart();
178 self::_renderSectionDescription( '<span class="viz-gvlink">' . sprintf( __( 'Configure the graph by providing configuration variables right from the %1$sGoogle Visualization API%2$s. You can refer to to some examples %3$shere%4$s.', 'visualizer' ), '<a href="https://developers.google.com/chart/interactive/docs/gallery/?#configuration-options" target="_blank">', '</a>', '<a href="https://docs.themeisle.com/article/728-manual-configuration" target="_blank">', '</a>' ) . '</span>' );
179
180 $example = '
181 {
182 "vAxis": {
183 "ticks": [5, 10, 15, 20],
184 "titleTextStyle": {
185 "color": "red"
186 },
187 "textPosition": "in"
188 }
189 }';
190
191 self::_renderTextAreaItem(
192 esc_html__( 'Configuration', 'visualizer' ),
193 'manual',
194 $this->manual,
195 sprintf(
196 esc_html__( 'One per line in valid JSON (key:value) format e.g. %s', 'visualizer' ),
197 '<br><code>' . $example . '</code>'
198 ),
199 '',
200 array( 'rows' => 5 )
201 );
202
203 self::_renderSectionEnd();
204 self::_renderGroupEnd();
205
206 }
207
208 /**
209 * Renders chart action buttons group.
210 *
211 * @access protected
212 */
213 protected function _renderActionSettings() {
214 global $wp_version;
215 $disable_actions = version_compare( $wp_version, '4.7.0', '<' );
216 self::_renderSectionStart( esc_html__( 'Actions', 'visualizer' ), false );
217 self::_renderCheckboxItem(
218 esc_html__( 'Print', 'visualizer' ),
219 'actions[]',
220 isset( $this->actions ) && in_array( 'print', $this->actions, true ) ? true : false,
221 'print',
222 $disable_actions ? '<span class="viz-section-error">' . esc_html__( 'Upgrade to at least WordPress 4.7 to use this.', 'visualizer' ) . '</span>' : esc_html__( 'To enable printing the chart/data.', 'visualizer' ),
223 $disable_actions
224 );
225 self::_renderCheckboxItem(
226 esc_html__( 'CSV', 'visualizer' ),
227 'actions[]',
228 isset( $this->actions ) && in_array( 'csv;application/csv', $this->actions, true ) ? true : false,
229 'csv;application/csv',
230 $disable_actions ? '<span class="viz-section-error">' . esc_html__( 'Upgrade to at least WordPress 4.7 to use this.', 'visualizer' ) . '</span>' : esc_html__( 'To enable downloading the data as a CSV.', 'visualizer' ),
231 $disable_actions
232 );
233
234 $disabled = ! self::is_excel_enabled();
235 self::_renderCheckboxItem(
236 esc_html__( 'Excel', 'visualizer' ),
237 'actions[]',
238 isset( $this->actions ) && in_array( 'xls;application/vnd.ms-excel', $this->actions, true ) ? true : false,
239 'xls;application/vnd.ms-excel',
240 $disable_actions ? '<span class="viz-section-error">' . esc_html__( 'Upgrade to at least WordPress 4.7 to use this.', 'visualizer' ) . '</span>' : ( $disabled ? '<span class="viz-section-error">' . esc_html__( 'Enable the ZIP and XML extensions to use this setting.', 'visualizer' ) . '</span>' : esc_html__( 'To enable downloading the data as an Excel spreadsheet.', 'visualizer' ) ),
241 $disable_actions || $disabled
242 );
243 self::_renderCheckboxItem(
244 esc_html__( 'Copy', 'visualizer' ),
245 'actions[]',
246 isset( $this->actions ) && in_array( 'copy', $this->actions, true ) ? true : false,
247 'copy',
248 $disable_actions ? '<span class="viz-section-error">' . esc_html__( 'Upgrade to at least WordPress 4.7 to use this.', 'visualizer' ) . '</span>' : esc_html__( 'To enable copying the data to the clipboard.', 'visualizer' ),
249 $disable_actions
250 );
251 self::_renderSectionEnd();
252 }
253
254 /**
255 * Checks if the Excel module can be enabled.
256 */
257 private static function is_excel_enabled() {
258 $vendor_file = VISUALIZER_ABSPATH . '/vendor/autoload.php';
259 if ( is_readable( $vendor_file ) ) {
260 include_once( $vendor_file );
261 }
262
263 return class_exists( 'PhpOffice\PhpSpreadsheet\Spreadsheet' ) && extension_loaded( 'zip' ) && extension_loaded( 'xml' ) && extension_loaded( 'fileinfo' ) && version_compare( PHP_VERSION, '5.6.0', '>' );
264 }
265
266 /**
267 * Renders chart general settings group.
268 *
269 * @since 1.0.0
270 *
271 * @access protected
272 */
273 protected function _renderGeneralSettings() {
274 self::_renderGroupStart( esc_html__( 'General Settings', 'visualizer' ) );
275 self::_renderSectionStart();
276 self::_renderSectionDescription( esc_html__( 'Configure title, font styles, tooltip, legend and else settings for the chart.', 'visualizer' ) );
277 self::_renderSectionEnd();
278
279 self::_renderSectionStart( esc_html__( 'Title', 'visualizer' ), false );
280 $this->_renderChartTitleSettings();
281 self::_renderSectionEnd();
282
283 self::_renderSectionStart( esc_html__( 'Font Styles', 'visualizer' ), false );
284 echo '<div class="viz-section-item">';
285 echo '<a class="more-info" href="javascript:;">[?]</a>';
286 echo '<b>', esc_html__( 'Family And Size', 'visualizer' ), '</b>';
287
288 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
289 echo '<tr>';
290 echo '<td class="viz-section-table-column">';
291 echo '<select name="fontName" class="control-select">';
292 echo '<option></option>';
293 foreach ( self::$_fontFamilies as $font => $label ) {
294 echo '<option value="', $font, '"', selected( $font, $this->fontName, false ), '>';
295 echo $label;
296 echo '</option>';
297 }
298 echo '</select>';
299 echo '</td>';
300 echo '<td class="viz-section-table-column">';
301 echo '<select name="fontSize" class="control-select">';
302 echo '<option></option>';
303 for ( $i = 7; $i <= 20; $i++ ) {
304 echo '<option value="', $i, '"', selected( $i, $this->fontSize, false ), '>', $i, '</option>';
305 }
306 echo '</select>';
307 echo '</td>';
308 echo '</tr>';
309 echo '</table>';
310
311 echo '<p class="viz-section-description">';
312 esc_html_e( 'The default font family and size for all text in the chart.', 'visualizer' );
313 echo '</p>';
314 echo '</div>';
315 self::_renderSectionEnd();
316
317 self::_renderSectionStart( esc_html__( 'Legend', 'visualizer' ), false );
318 self::_renderSelectItem(
319 esc_html__( 'Position', 'visualizer' ),
320 'legend[position]',
321 $this->legend['position'],
322 $this->_legendPositions,
323 esc_html__( 'Determines where to place the legend, compared to the chart area.', 'visualizer' )
324 );
325
326 self::_renderSelectItem(
327 esc_html__( 'Alignment', 'visualizer' ),
328 'legend[alignment]',
329 $this->legend['alignment'],
330 $this->_alignments,
331 esc_html__( 'Determines the alignment of the legend.', 'visualizer' )
332 );
333
334 self::_renderColorPickerItem(
335 esc_html__( 'Font Color', 'visualizer' ),
336 'legend[textStyle][color]',
337 isset( $this->legend['textStyle']['color'] ) ? $this->legend['textStyle']['color'] : null,
338 '#000'
339 );
340 self::_renderSectionEnd();
341
342 self::_renderSectionStart( esc_html__( 'Tooltip', 'visualizer' ), false );
343 $this->_renderTooltipSettigns();
344 self::_renderSectionEnd();
345
346 $this->_renderAnimationSettings();
347
348 self::_renderGroupEnd();
349 }
350
351 /**
352 * Renders animation settings section.
353 *
354 * @access protected
355 */
356 protected function _renderAnimationSettings() {
357 if ( ! $this->_supportsAnimation ) {
358 return;
359 }
360
361 self::_renderSectionStart( esc_html__( 'Animation', 'visualizer' ), false );
362
363 self::_renderCheckboxItem(
364 esc_html__( 'Animate on startup', 'visualizer' ),
365 'animation[startup]',
366 isset( $this->animation['startup'] ) ? $this->animation['startup'] : 0,
367 true,
368 esc_html__( 'Determines if the chart will animate on the initial draw.', 'visualizer' )
369 );
370
371 self::_renderTextItem(
372 esc_html__( 'Duration', 'visualizer' ),
373 'animation[duration]',
374 isset( $this->animation['duration'] ) ? $this->animation['duration'] : 0,
375 esc_html__( 'The duration of the animation, in milliseconds', 'visualizer' ),
376 0,
377 'number'
378 );
379
380 self::_renderSelectItem(
381 esc_html__( 'Easing', 'visualizer' ),
382 'animation[easing]',
383 isset( $this->animation['easing'] ) ? $this->animation['easing'] : null,
384 array(
385 'linear' => esc_html__( 'Constant speed', 'visualizer' ),
386 'in' => esc_html__( 'Start slow and speed up', 'visualizer' ),
387 'out' => esc_html__( 'Start fast and slow down', 'visualizer' ),
388 'inAndOut' => esc_html__( 'Start slow, speed up, then slow down', 'visualizer' ),
389 ),
390 esc_html__( 'The easing function applied to the animation.', 'visualizer' )
391 );
392
393 self::_renderSectionEnd();
394
395 }
396
397 /**
398 * Renders tooltip settings section.
399 *
400 * @since 1.4.0
401 *
402 * @access protected
403 */
404 protected function _renderTooltipSettigns() {
405 self::_renderSelectItem(
406 esc_html__( 'Trigger', 'visualizer' ),
407 'tooltip[trigger]',
408 isset( $this->tooltip['trigger'] ) ? $this->tooltip['trigger'] : null,
409 array(
410 '' => '',
411 'focus' => esc_html__( 'The tooltip will be displayed when the user hovers over an element', 'visualizer' ),
412 'selection' => esc_html__( 'The tooltip will be displayed when the user selects an element', 'visualizer' ),
413 'none' => esc_html__( 'The tooltip will not be displayed', 'visualizer' ),
414 ),
415 esc_html__( 'Determines the user interaction that causes the tooltip to be displayed.', 'visualizer' )
416 );
417
418 self::_renderSelectItem(
419 esc_html__( 'Show Color Code', 'visualizer' ),
420 'tooltip[showColorCode]',
421 isset( $this->tooltip['showColorCode'] ) ? $this->tooltip['showColorCode'] : null,
422 $this->_yesno,
423 esc_html__( 'If set to yes, will show colored squares next to the slice information in the tooltip.', 'visualizer' )
424 );
425 }
426
427 /**
428 * Renders chart view settings group.
429 *
430 * @since 1.0.0
431 *
432 * @access protected
433 */
434 protected function _renderViewSettings() {
435 self::_renderGroupStart( esc_html__( 'Layout & Chart Area', 'visualizer' ) );
436 self::_renderSectionStart( esc_html__( 'Layout', 'visualizer' ), false );
437 self::_renderSectionDescription( esc_html__( 'Configure the total size of the chart. Two formats are supported: a number, or a number followed by %. A simple number is a value in pixels; a number followed by % is a percentage.', 'visualizer' ) );
438
439 echo '<div class="viz-section-item">';
440 echo '<a class="more-info" href="javascript:;">[?]</a>';
441 echo '<b>', esc_html__( 'Width And Height Of Chart', 'visualizer' ), '</b>';
442
443 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
444 echo '<tr>';
445 echo '<td class="viz-section-table-column">';
446 echo '<input type="text" name="width" class="control-text" value="', esc_attr( $this->width ), '" placeholder="100%">';
447 echo '</td>';
448 echo '<td class="viz-section-table-column">';
449 echo '<input type="text" name="height" class="control-text" value="', esc_attr( $this->height ), '" placeholder="400">';
450 echo '</td>';
451 echo '</tr>';
452 echo '</table>';
453
454 echo '<p class="viz-section-description">';
455 esc_html_e( 'Determines the total width and height of the chart.', 'visualizer' );
456 echo '</p>';
457 echo '</div>';
458
459 echo '<div class="viz-section-delimiter"></div>';
460
461 self::_renderSectionDescription( esc_html__( 'Configure the background color for the main area of the chart and the chart border width and color.', 'visualizer' ) );
462
463 self::_renderTextItem(
464 esc_html__( 'Stroke Width', 'visualizer' ),
465 'backgroundColor[strokeWidth]',
466 isset( $this->backgroundColor['strokeWidth'] ) ? $this->backgroundColor['strokeWidth'] : null,
467 esc_html__( 'The chart border width in pixels.', 'visualizer' ),
468 '0'
469 );
470
471 self::_renderColorPickerItem(
472 esc_html__( 'Stroke Color', 'visualizer' ),
473 'backgroundColor[stroke]',
474 ! empty( $this->backgroundColor['stroke'] ) ? $this->backgroundColor['stroke'] : null,
475 '#666'
476 );
477
478 $background_color = ! empty( $this->backgroundColor['fill'] ) ? $this->backgroundColor['fill'] : null;
479 self::_renderColorPickerItem(
480 esc_html__( 'Background Color', 'visualizer' ),
481 'backgroundColor[fill]',
482 $background_color,
483 '#fff'
484 );
485
486 echo '<div class="viz-section-item">';
487 echo '<label>';
488 echo '<input type="checkbox" class="control-checkbox" name="backgroundColor[fill]" value="transparent"', checked( $background_color, 'transparent', false ), '> ';
489 esc_html_e( 'Transparent background', 'visualizer' );
490 echo '</label>';
491 echo '</div>';
492 self::_renderSectionEnd();
493
494 self::_renderSectionStart( esc_html__( 'Chart Area', 'visualizer' ), false );
495 self::_renderSectionDescription( esc_html__( 'Configure the placement and size of the chart area (where the chart itself is drawn, excluding axis and legends). Two formats are supported: a number, or a number followed by %. A simple number is a value in pixels; a number followed by % is a percentage.', 'visualizer' ) );
496
497 echo '<div class="viz-section-item">';
498 echo '<a class="more-info" href="javascript:;">[?]</a>';
499 echo '<b>', esc_html__( 'Left And Top Margins', 'visualizer' ), '</b>';
500
501 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
502 echo '<tr>';
503 echo '<td class="viz-section-table-column">';
504 echo '<input type="text" name="chartArea[left]" class="control-text" value="', $this->chartArea['left'] || $this->chartArea['left'] === '0' ? esc_attr( $this->chartArea['left'] ) : '', '" placeholder="20%">';
505 echo '</td>';
506 echo '<td class="viz-section-table-column">';
507 echo '<input type="text" name="chartArea[top]" class="control-text" value="', $this->chartArea['top'] || $this->chartArea['top'] === '0' ? esc_attr( $this->chartArea['top'] ) : '', '" placeholder="20%">';
508 echo '</td>';
509 echo '</tr>';
510 echo '</table>';
511
512 echo '<p class="viz-section-description">';
513 esc_html_e( 'Determines how far to draw the chart from the left and top borders.', 'visualizer' );
514 echo '</p>';
515 echo '</div>';
516
517 echo '<div class="viz-section-item">';
518 echo '<a class="more-info" href="javascript:;">[?]</a>';
519 echo '<b>', esc_html__( 'Width And Height Of Chart Area', 'visualizer' ), '</b>';
520
521 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
522 echo '<tr>';
523 echo '<td class="viz-section-table-column">';
524 echo '<input type="text" name="chartArea[width]" class="control-text" value="', ! empty( $this->chartArea['width'] ) ? esc_attr( $this->chartArea['width'] ) : '', '" placeholder="60%">';
525 echo '</td>';
526 echo '<td class="viz-section-table-column">';
527 echo '<input type="text" name="chartArea[height]" class="control-text" value="', ! empty( $this->chartArea['height'] ) ? esc_attr( $this->chartArea['height'] ) : '', '" placeholder="60%">';
528 echo '</td>';
529 echo '</tr>';
530 echo '</table>';
531
532 echo '<p class="viz-section-description">';
533 esc_html_e( 'Determines the width and hight of the chart area.', 'visualizer' );
534 echo '</p>';
535 echo '</div>';
536 self::_renderSectionEnd();
537 self::_renderGroupEnd();
538 }
539
540 /**
541 * Renders select item.
542 *
543 * @since 1.0.0
544 *
545 * @static
546 * @access public
547 * @param string $title The title of the select item.
548 * @param string $name The name of the select item.
549 * @param string $value The actual value of the select item.
550 * @param array $options The array of select options.
551 * @param string $desc The description of the select item.
552 * @param bool $multiple Is this a multiple select box.
553 * @param array $classes Any additional classes.
554 * @param array $attributes Custom attributes.
555 */
556 public static function _renderSelectItem( $title, $name, $value, array $options, $desc, $multiple = false, $classes = array(), $attributes = array() ) {
557 $atts = '';
558 if ( $attributes ) {
559 foreach ( $attributes as $k => $v ) {
560 $atts .= ' data-visualizer-' . $k . '=' . esc_attr( $v );
561 }
562 }
563 echo '<div class="viz-section-item">';
564 echo '<a class="more-info" href="javascript:;">[?]</a>';
565 echo '<b>', $title, '</b>';
566 echo '<select class="control-select ', implode( ' ', $classes ) , '" name="', $name, '" ', ( $multiple ? 'multiple' : '' ), ' ' , $atts, '>';
567 foreach ( $options as $key => $label ) {
568 $extra = $multiple && is_array( $value ) ? ( in_array( $key, $value, true ) ? 'selected' : '' ) : selected( $key, $value, false );
569 echo '<option value="', $key, '"', $extra, '>';
570 echo $label;
571 echo '</option>';
572 }
573 echo '</select>';
574 echo '<p class="viz-section-description">', $desc, '</p>';
575 echo '</div>';
576 }
577
578 /**
579 * Renders color picker item.
580 *
581 * @since 1.0.0
582 *
583 * @static
584 * @access protected
585 * @param string $title The title of the select item.
586 * @param string $name The name of the select item.
587 * @param string $value The actual value of the select item.
588 * @param string $default The default value of the color picker.
589 */
590 protected static function _renderColorPickerItem( $title, $name, $value, $default ) {
591 echo '<div class="viz-section-item">';
592 echo '<b>', $title, '</b>';
593 echo '<div>';
594 echo '<input type="text" class="color-picker-hex" name="', $name, '" maxlength="7" placeholder="', esc_attr__( 'Hex Value', 'visualizer' ), '" value="', is_null( $value ) ? $default : esc_attr( $value ), '" data-default-color="', $default, '">';
595 echo '</div>';
596 echo '</div>';
597 }
598
599 /**
600 * Renders text item.
601 *
602 * @since 1.0.0
603 *
604 * @static
605 * @access protected
606 * @param string $title The title of the select item.
607 * @param string $name The name of the select item.
608 * @param string $value The actual value of the select item.
609 * @param string $desc The description of the select item.
610 * @param string $placeholder The placeholder for the input.
611 * @param string $type The type for the input (out of number, email, tel etc., default is text).
612 * @param array $custom_attributes The custom attributes.
613 */
614 protected static function _renderTextItem( $title, $name, $value, $desc, $placeholder = '', $type = 'text', $custom_attributes = array() ) {
615 $attributes = '';
616 if ( $custom_attributes ) {
617 foreach ( $custom_attributes as $k => $v ) {
618 $attributes .= ' ' . $k . '="' . esc_attr( $v ) . '"';
619 }
620 }
621 echo '<div class="viz-section-item">';
622 echo '<a class="more-info" href="javascript:;">[?]</a>';
623 echo '<b>', $title, '</b>';
624 echo '<input type="', $type, '" class="control-text" ', $attributes, ' name="', $name, '" value="', esc_attr( $value ), '" placeholder="', $placeholder, '">';
625 echo '<p class="viz-section-description">', $desc, '</p>';
626 echo '</div>';
627 }
628
629 /**
630 * Renders the beginning of a group.
631 *
632 * @since 1.0.0
633 *
634 * @static
635 * @access public
636 * @param string $title The title of this group.
637 * @param string $html Any additional HTML.
638 * @param string $class Any additional classes.
639 */
640 public static function _renderGroupStart( $title, $html = '', $class = '' ) {
641 echo '<li class="viz-group ' . $class . '">';
642 echo '<h3 class="viz-group-title">', $title, '</h3>';
643 echo $html;
644 echo '<ul class="viz-group-content">';
645 }
646
647 /**
648 * Renders the ending of a group.
649 *
650 * @since 1.0.0
651 *
652 * @static
653 * @access public
654 */
655 public static function _renderGroupEnd() {
656 echo '</ul>';
657 echo '</li>';
658 }
659
660 /**
661 * Renders the beginning of a section.
662 *
663 * @since 1.0.0
664 *
665 * @static
666 * @access public
667 * @param string $title The title of this section. If the title is empty, no title will be displayed.
668 * @param boolean $open Determines whether the section items block has to be expanded or collapsed.
669 */
670 public static function _renderSectionStart( $title = false, $open = true ) {
671
672 if ( ! empty( $title ) ) {
673 echo '<li class="viz-subsection">';
674 echo '<span class="viz-section-title">', $title, '</span>';
675 } else {
676 echo '<li class=" ">';
677 }
678 echo '<div class="viz-section-items section-items', $open ? ' open' : '', '">';
679 }
680
681 /**
682 * Renders the ending of a section.
683 *
684 * @since 1.0.0
685 *
686 * @public
687 * @access protected
688 * @param string $html Any addition HTML to add.
689 */
690 public static function _renderSectionEnd( $html = '' ) {
691 echo '</div>';
692 echo $html;
693 echo '</li>';
694 }
695
696 /**
697 * Renders section description block.
698 *
699 * @since 1.0.0
700 *
701 * @static
702 * @access public
703 * @param string $description The description text.
704 */
705 public static function _renderSectionDescription( $description ) {
706 echo '<div class="viz-section-item">';
707 echo '<div class="viz-section-description">', $description, '</div>';
708 echo '</div>';
709 }
710
711 /**
712 * Renders format field according to series type.
713 *
714 * @since 1.3.0
715 *
716 * @access protected
717 * @param int $index The index of the series.
718 */
719 protected function _renderFormatField( $index = 0 ) {
720 switch ( $this->__series[ $index + 1 ]['type'] ) {
721 case 'number':
722 self::_renderTextItem(
723 esc_html__( 'Number Format', 'visualizer' ),
724 'series[' . $index . '][format]',
725 isset( $this->series[ $index ]['format'] ) ? $this->series[ $index ]['format'] : '',
726 sprintf( esc_html__( 'Enter custom format pattern to apply to this series value, similar to the %1$sICU pattern set%2$s. Use something like #,### to get 1,234 as output, or $# to add dollar sign before digits. Pay attention that if you use &#37; percentage format then your values will be multiplied by 100.', 'visualizer' ), '<a href="http://icu-project.org/apiref/icu4c/classDecimalFormat.html#_details" target="_blank">', '</a>' ),
727 '#,###.##'
728 );
729 break;
730 case 'date':
731 case 'datetime':
732 case 'timeofday':
733 self::_renderTextItem(
734 esc_html__( 'Date Format', 'visualizer' ),
735 'series[' . $index . '][format]',
736 isset( $this->series[ $index ]['format'] ) ? $this->series[ $index ]['format'] : '',
737 sprintf( esc_html__( 'Enter custom format pattern to apply to this series value, similar to the %1$sICU date and time format%2$s.', 'visualizer' ), '<a href="http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax" target="_blank">', '</a>' ),
738 'eeee, dd LLLL yyyy'
739 );
740 break;
741 }
742 }
743
744 /**
745 * Render a checkbox item
746 */
747 protected static function _renderCheckboxItem( $title, $name, $value, $default, $desc, $disabled = false ) {
748 echo '<div class="viz-section-item">';
749 echo '<a class="more-info" href="javascript:;">[?]</a>';
750 echo '<b>', $title, '</b>';
751 echo '<input type="checkbox" class="control-check" value="', $default, '" name="', $name, '" ', ( $value === $default ? 'checked' : '' ), ' ', ( $disabled ? 'disabled=disabled' : '' ), '>';
752 echo '<p class="viz-section-description">', $desc, '</p>';
753 echo '</div>';
754 }
755
756 /**
757 * Render a textarea item.
758 */
759 protected static function _renderTextAreaItem( $title, $name, $value, $desc, $placeholder = '', $custom_attributes = array() ) {
760 $attributes = '';
761 if ( $custom_attributes ) {
762 foreach ( $custom_attributes as $k => $v ) {
763 $attributes .= ' ' . $k . '="' . esc_attr( $v ) . '"';
764 }
765 }
766 echo '<div class="viz-section-item">';
767 echo '<a class="more-info" href="javascript:;">[?]</a>';
768 echo '<b>', $title, '</b>';
769 echo '<textarea class="control-text" ', $attributes, ' name="', $name, '" placeholder="', $placeholder, '">', $value, '</textarea>';
770 echo '<p class="viz-section-description">', $desc, '</p>';
771 echo '</div>';
772 }
773
774 /**
775 * Returns the library this chart implements.
776 */
777 public function getLibrary() {
778 return $this->_library;
779 }
780
781 }
782