PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.1.2
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.1.2
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.1.2, at classes/Visualizer/Render/Sidebar.php

770 lines 27.1 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', 'visualizer' ), '<a href="https://developers.google.com/chart/interactive/docs/gallery/?#configuration-options" 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 : 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 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 : 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 = ! ( class_exists( 'PHPExcel' ) && extension_loaded( 'zip' ) && extension_loaded( 'xml' ) && version_compare( PHP_VERSION, '5.2.0', '>' ) );
235 self::_renderCheckboxItem(
236 esc_html__( 'Excel', 'visualizer' ),
237 'actions[]',
238 isset( $this->actions ) && in_array( 'xls;application/vnd.ms-excel', $this->actions ) ? 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 : 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 * Renders chart general settings group.
256 *
257 * @since 1.0.0
258 *
259 * @access protected
260 */
261 protected function _renderGeneralSettings() {
262 self::_renderGroupStart( esc_html__( 'General Settings', 'visualizer' ) );
263 self::_renderSectionStart();
264 self::_renderSectionDescription( esc_html__( 'Configure title, font styles, tooltip, legend and else settings for the chart.', 'visualizer' ) );
265 self::_renderSectionEnd();
266
267 self::_renderSectionStart( esc_html__( 'Title', 'visualizer' ), false );
268 $this->_renderChartTitleSettings();
269 self::_renderSectionEnd();
270
271 self::_renderSectionStart( esc_html__( 'Font Styles', 'visualizer' ), false );
272 echo '<div class="viz-section-item">';
273 echo '<a class="more-info" href="javascript:;">[?]</a>';
274 echo '<b>', esc_html__( 'Family And Size', 'visualizer' ), '</b>';
275
276 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
277 echo '<tr>';
278 echo '<td class="viz-section-table-column">';
279 echo '<select name="fontName" class="control-select">';
280 echo '<option></option>';
281 foreach ( self::$_fontFamilies as $font => $label ) {
282 echo '<option value="', $font, '"', selected( $font, $this->fontName, false ), '>';
283 echo $label;
284 echo '</option>';
285 }
286 echo '</select>';
287 echo '</td>';
288 echo '<td class="viz-section-table-column">';
289 echo '<select name="fontSize" class="control-select">';
290 echo '<option></option>';
291 for ( $i = 7; $i <= 20; $i++ ) {
292 echo '<option value="', $i, '"', selected( $i, $this->fontSize, false ), '>', $i, '</option>';
293 }
294 echo '</select>';
295 echo '</td>';
296 echo '</tr>';
297 echo '</table>';
298
299 echo '<p class="viz-section-description">';
300 esc_html_e( 'The default font family and size for all text in the chart.', 'visualizer' );
301 echo '</p>';
302 echo '</div>';
303 self::_renderSectionEnd();
304
305 self::_renderSectionStart( esc_html__( 'Legend', 'visualizer' ), false );
306 self::_renderSelectItem(
307 esc_html__( 'Position', 'visualizer' ),
308 'legend[position]',
309 $this->legend['position'],
310 $this->_legendPositions,
311 esc_html__( 'Determines where to place the legend, compared to the chart area.', 'visualizer' )
312 );
313
314 self::_renderSelectItem(
315 esc_html__( 'Alignment', 'visualizer' ),
316 'legend[alignment]',
317 $this->legend['alignment'],
318 $this->_alignments,
319 esc_html__( 'Determines the alignment of the legend.', 'visualizer' )
320 );
321
322 self::_renderColorPickerItem(
323 esc_html__( 'Font Color', 'visualizer' ),
324 'legend[textStyle][color]',
325 isset( $this->legend['textStyle']['color'] ) ? $this->legend['textStyle']['color'] : null,
326 '#000'
327 );
328 self::_renderSectionEnd();
329
330 self::_renderSectionStart( esc_html__( 'Tooltip', 'visualizer' ), false );
331 $this->_renderTooltipSettigns();
332 self::_renderSectionEnd();
333
334 $this->_renderAnimationSettings();
335
336 self::_renderGroupEnd();
337 }
338
339 /**
340 * Renders animation settings section.
341 *
342 * @access protected
343 */
344 protected function _renderAnimationSettings() {
345 if ( ! $this->_supportsAnimation ) {
346 return;
347 }
348
349 self::_renderSectionStart( esc_html__( 'Animation', 'visualizer' ), false );
350
351 self::_renderCheckboxItem(
352 esc_html__( 'Animate on startup', 'visualizer' ),
353 'animation[startup]',
354 $this->animation['startup'],
355 true,
356 esc_html__( 'Determines if the chart will animate on the initial draw.', 'visualizer' )
357 );
358
359 self::_renderTextItem(
360 esc_html__( 'Duration', 'visualizer' ),
361 'animation[duration]',
362 isset( $this->animation['duration'] ) ? $this->animation['duration'] : 0,
363 esc_html__( 'The duration of the animation, in milliseconds', 'visualizer' ),
364 0,
365 'number'
366 );
367
368 self::_renderSelectItem(
369 esc_html__( 'Easing', 'visualizer' ),
370 'animation[easing]',
371 isset( $this->animation['easing'] ) ? $this->animation['easing'] : null,
372 array(
373 'linear' => esc_html__( 'Constant speed', 'visualizer' ),
374 'in' => esc_html__( 'Start slow and speed up', 'visualizer' ),
375 'out' => esc_html__( 'Start fast and slow down', 'visualizer' ),
376 'inAndOut' => esc_html__( 'Start slow, speed up, then slow down', 'visualizer' ),
377 ),
378 esc_html__( 'The easing function applied to the animation.', 'visualizer' )
379 );
380
381 self::_renderSectionEnd();
382
383 }
384
385 /**
386 * Renders tooltip settings section.
387 *
388 * @since 1.4.0
389 *
390 * @access protected
391 */
392 protected function _renderTooltipSettigns() {
393 self::_renderSelectItem(
394 esc_html__( 'Trigger', 'visualizer' ),
395 'tooltip[trigger]',
396 isset( $this->tooltip['trigger'] ) ? $this->tooltip['trigger'] : null,
397 array(
398 '' => '',
399 'focus' => esc_html__( 'The tooltip will be displayed when the user hovers over an element', 'visualizer' ),
400 'selection' => esc_html__( 'The tooltip will be displayed when the user selects an element', 'visualizer' ),
401 'none' => esc_html__( 'The tooltip will not be displayed', 'visualizer' ),
402 ),
403 esc_html__( 'Determines the user interaction that causes the tooltip to be displayed.', 'visualizer' )
404 );
405
406 self::_renderSelectItem(
407 esc_html__( 'Show Color Code', 'visualizer' ),
408 'tooltip[showColorCode]',
409 isset( $this->tooltip['showColorCode'] ) ? $this->tooltip['showColorCode'] : null,
410 $this->_yesno,
411 esc_html__( 'If set to yes, will show colored squares next to the slice information in the tooltip.', 'visualizer' )
412 );
413 }
414
415 /**
416 * Renders chart view settings group.
417 *
418 * @since 1.0.0
419 *
420 * @access protected
421 */
422 protected function _renderViewSettings() {
423 self::_renderGroupStart( esc_html__( 'Layout & Chart Area', 'visualizer' ) );
424 self::_renderSectionStart( esc_html__( 'Layout', 'visualizer' ), false );
425 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' ) );
426
427 echo '<div class="viz-section-item">';
428 echo '<a class="more-info" href="javascript:;">[?]</a>';
429 echo '<b>', esc_html__( 'Width And Height Of Chart', 'visualizer' ), '</b>';
430
431 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
432 echo '<tr>';
433 echo '<td class="viz-section-table-column">';
434 echo '<input type="text" name="width" class="control-text" value="', esc_attr( $this->width ), '" placeholder="100%">';
435 echo '</td>';
436 echo '<td class="viz-section-table-column">';
437 echo '<input type="text" name="height" class="control-text" value="', esc_attr( $this->height ), '" placeholder="400">';
438 echo '</td>';
439 echo '</tr>';
440 echo '</table>';
441
442 echo '<p class="viz-section-description">';
443 esc_html_e( 'Determines the total width and height of the chart.', 'visualizer' );
444 echo '</p>';
445 echo '</div>';
446
447 echo '<div class="viz-section-delimiter"></div>';
448
449 self::_renderSectionDescription( esc_html__( 'Configure the background color for the main area of the chart and the chart border width and color.', 'visualizer' ) );
450
451 self::_renderTextItem(
452 esc_html__( 'Stroke Width', 'visualizer' ),
453 'backgroundColor[strokeWidth]',
454 isset( $this->backgroundColor['strokeWidth'] ) ? $this->backgroundColor['strokeWidth'] : null,
455 esc_html__( 'The chart border width in pixels.', 'visualizer' ),
456 '0'
457 );
458
459 self::_renderColorPickerItem(
460 esc_html__( 'Stroke Color', 'visualizer' ),
461 'backgroundColor[stroke]',
462 ! empty( $this->backgroundColor['stroke'] ) ? $this->backgroundColor['stroke'] : null,
463 '#666'
464 );
465
466 $background_color = ! empty( $this->backgroundColor['fill'] ) ? $this->backgroundColor['fill'] : null;
467 self::_renderColorPickerItem(
468 esc_html__( 'Background Color', 'visualizer' ),
469 'backgroundColor[fill]',
470 $background_color,
471 '#fff'
472 );
473
474 echo '<div class="viz-section-item">';
475 echo '<label>';
476 echo '<input type="checkbox" class="control-checkbox" name="backgroundColor[fill]" value="transparent"', checked( $background_color, 'transparent', false ), '> ';
477 esc_html_e( 'Transparent background', 'visualizer' );
478 echo '</label>';
479 echo '</div>';
480 self::_renderSectionEnd();
481
482 self::_renderSectionStart( esc_html__( 'Chart Area', 'visualizer' ), false );
483 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' ) );
484
485 echo '<div class="viz-section-item">';
486 echo '<a class="more-info" href="javascript:;">[?]</a>';
487 echo '<b>', esc_html__( 'Left And Top Margins', 'visualizer' ), '</b>';
488
489 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
490 echo '<tr>';
491 echo '<td class="viz-section-table-column">';
492 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%">';
493 echo '</td>';
494 echo '<td class="viz-section-table-column">';
495 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%">';
496 echo '</td>';
497 echo '</tr>';
498 echo '</table>';
499
500 echo '<p class="viz-section-description">';
501 esc_html_e( 'Determines how far to draw the chart from the left and top borders.', 'visualizer' );
502 echo '</p>';
503 echo '</div>';
504
505 echo '<div class="viz-section-item">';
506 echo '<a class="more-info" href="javascript:;">[?]</a>';
507 echo '<b>', esc_html__( 'Width And Height Of Chart Area', 'visualizer' ), '</b>';
508
509 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
510 echo '<tr>';
511 echo '<td class="viz-section-table-column">';
512 echo '<input type="text" name="chartArea[width]" class="control-text" value="', ! empty( $this->chartArea['width'] ) ? esc_attr( $this->chartArea['width'] ) : '', '" placeholder="60%">';
513 echo '</td>';
514 echo '<td class="viz-section-table-column">';
515 echo '<input type="text" name="chartArea[height]" class="control-text" value="', ! empty( $this->chartArea['height'] ) ? esc_attr( $this->chartArea['height'] ) : '', '" placeholder="60%">';
516 echo '</td>';
517 echo '</tr>';
518 echo '</table>';
519
520 echo '<p class="viz-section-description">';
521 esc_html_e( 'Determines the width and hight of the chart area.', 'visualizer' );
522 echo '</p>';
523 echo '</div>';
524 self::_renderSectionEnd();
525 self::_renderGroupEnd();
526 }
527
528 /**
529 * Renders select item.
530 *
531 * @since 1.0.0
532 *
533 * @static
534 * @access public
535 * @param string $title The title of the select item.
536 * @param string $name The name of the select item.
537 * @param string $value The actual value of the select item.
538 * @param array $options The array of select options.
539 * @param string $desc The description of the select item.
540 * @param bool $multiple Is this a multiple select box.
541 * @param array $classes Any additional classes.
542 * @param array $attributes Custom attributes.
543 */
544 public static function _renderSelectItem( $title, $name, $value, array $options, $desc, $multiple = false, $classes = array(), $attributes = array() ) {
545 $atts = '';
546 if ( $attributes ) {
547 foreach ( $attributes as $k => $v ) {
548 $atts .= ' data-visualizer-' . $k . '=' . esc_attr( $v );
549 }
550 }
551 echo '<div class="viz-section-item">';
552 echo '<a class="more-info" href="javascript:;">[?]</a>';
553 echo '<b>', $title, '</b>';
554 echo '<select class="control-select ', implode( ' ', $classes ) , '" name="', $name, '" ', ( $multiple ? 'multiple' : '' ), ' ' , $atts, '>';
555 foreach ( $options as $key => $label ) {
556 $extra = $multiple && is_array( $value ) ? ( in_array( $key, $value ) ? 'selected' : '' ) : selected( $key, $value, false );
557 echo '<option value="', $key, '"', $extra, '>';
558 echo $label;
559 echo '</option>';
560 }
561 echo '</select>';
562 echo '<p class="viz-section-description">', $desc, '</p>';
563 echo '</div>';
564 }
565
566 /**
567 * Renders color picker item.
568 *
569 * @since 1.0.0
570 *
571 * @static
572 * @access protected
573 * @param string $title The title of the select item.
574 * @param string $name The name of the select item.
575 * @param string $value The actual value of the select item.
576 * @param string $default The default value of the color picker.
577 */
578 protected static function _renderColorPickerItem( $title, $name, $value, $default ) {
579 echo '<div class="viz-section-item">';
580 echo '<b>', $title, '</b>';
581 echo '<div>';
582 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, '">';
583 echo '</div>';
584 echo '</div>';
585 }
586
587 /**
588 * Renders text item.
589 *
590 * @since 1.0.0
591 *
592 * @static
593 * @access protected
594 * @param string $title The title of the select item.
595 * @param string $name The name of the select item.
596 * @param string $value The actual value of the select item.
597 * @param string $desc The description of the select item.
598 * @param string $placeholder The placeholder for the input.
599 * @param string $type The type for the input (out of number, email, tel etc., default is text).
600 * @param array $custom_attributes The custom attributes.
601 */
602 protected static function _renderTextItem( $title, $name, $value, $desc, $placeholder = '', $type = 'text', $custom_attributes = array() ) {
603 $attributes = '';
604 if ( $custom_attributes ) {
605 foreach ( $custom_attributes as $k => $v ) {
606 $attributes .= ' ' . $k . '="' . esc_attr( $v ) . '"';
607 }
608 }
609 echo '<div class="viz-section-item">';
610 echo '<a class="more-info" href="javascript:;">[?]</a>';
611 echo '<b>', $title, '</b>';
612 echo '<input type="', $type, '" class="control-text" ', $attributes, ' name="', $name, '" value="', esc_attr( $value ), '" placeholder="', $placeholder, '">';
613 echo '<p class="viz-section-description">', $desc, '</p>';
614 echo '</div>';
615 }
616
617 /**
618 * Renders the beginning of a group.
619 *
620 * @since 1.0.0
621 *
622 * @static
623 * @access public
624 * @param string $title The title of this group.
625 * @param string $html Any additional HTML.
626 * @param string $class Any additional classes.
627 */
628 public static function _renderGroupStart( $title, $html = '', $class = '' ) {
629 echo '<li class="viz-group ' . $class . '">';
630 echo '<h3 class="viz-group-title">', $title, '</h3>';
631 echo $html;
632 echo '<ul class="viz-group-content">';
633 }
634
635 /**
636 * Renders the ending of a group.
637 *
638 * @since 1.0.0
639 *
640 * @static
641 * @access public
642 */
643 public static function _renderGroupEnd() {
644 echo '</ul>';
645 echo '</li>';
646 }
647
648 /**
649 * Renders the beginning of a section.
650 *
651 * @since 1.0.0
652 *
653 * @static
654 * @access public
655 * @param string $title The title of this section. If the title is empty, no title will be displayed.
656 * @param boolean $open Determines whether the section items block has to be expanded or collapsed.
657 */
658 public static function _renderSectionStart( $title = false, $open = true ) {
659
660 if ( ! empty( $title ) ) {
661 echo '<li class="viz-subsection">';
662 echo '<span class="viz-section-title">', $title, '</span>';
663 } else {
664 echo '<li class=" ">';
665 }
666 echo '<div class="viz-section-items section-items', $open ? ' open' : '', '">';
667 }
668
669 /**
670 * Renders the ending of a section.
671 *
672 * @since 1.0.0
673 *
674 * @public
675 * @access protected
676 * @param string $html Any addition HTML to add.
677 */
678 public static function _renderSectionEnd( $html = '' ) {
679 echo '</div>';
680 echo $html;
681 echo '</li>';
682 }
683
684 /**
685 * Renders section description block.
686 *
687 * @since 1.0.0
688 *
689 * @static
690 * @access public
691 * @param string $description The description text.
692 */
693 public static function _renderSectionDescription( $description ) {
694 echo '<div class="viz-section-item">';
695 echo '<div class="viz-section-description">', $description, '</div>';
696 echo '</div>';
697 }
698
699 /**
700 * Renders format field according to series type.
701 *
702 * @since 1.3.0
703 *
704 * @access protected
705 * @param int $index The index of the series.
706 */
707 protected function _renderFormatField( $index = 0 ) {
708 switch ( $this->__series[ $index + 1 ]['type'] ) {
709 case 'number':
710 self::_renderTextItem(
711 esc_html__( 'Number Format', 'visualizer' ),
712 'series[' . $index . '][format]',
713 isset( $this->series[ $index ]['format'] ) ? $this->series[ $index ]['format'] : '',
714 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>' ),
715 '#,###.##'
716 );
717 break;
718 case 'date':
719 case 'datetime':
720 case 'timeofday':
721 self::_renderTextItem(
722 esc_html__( 'Date Format', 'visualizer' ),
723 'series[' . $index . '][format]',
724 isset( $this->series[ $index ]['format'] ) ? $this->series[ $index ]['format'] : '',
725 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>' ),
726 'eeee, dd LLLL yyyy'
727 );
728 break;
729 }
730 }
731
732 /**
733 * Render a checkbox item
734 */
735 protected static function _renderCheckboxItem( $title, $name, $value, $default, $desc, $disabled = false ) {
736 echo '<div class="viz-section-item">';
737 echo '<a class="more-info" href="javascript:;">[?]</a>';
738 echo '<b>', $title, '</b>';
739 echo '<input type="checkbox" class="control-check" value="', $default, '" name="', $name, '" ', ( $value == $default ? 'checked' : '' ), ' ', ( $disabled ? 'disabled=disabled' : '' ), '>';
740 echo '<p class="viz-section-description">', $desc, '</p>';
741 echo '</div>';
742 }
743
744 /**
745 * Render a textarea item.
746 */
747 protected static function _renderTextAreaItem( $title, $name, $value, $desc, $placeholder = '', $custom_attributes = array() ) {
748 $attributes = '';
749 if ( $custom_attributes ) {
750 foreach ( $custom_attributes as $k => $v ) {
751 $attributes .= ' ' . $k . '="' . esc_attr( $v ) . '"';
752 }
753 }
754 echo '<div class="viz-section-item">';
755 echo '<a class="more-info" href="javascript:;">[?]</a>';
756 echo '<b>', $title, '</b>';
757 echo '<textarea class="control-text" ', $attributes, ' name="', $name, '" placeholder="', $placeholder, '">', $value, '</textarea>';
758 echo '<p class="viz-section-description">', $desc, '</p>';
759 echo '</div>';
760 }
761
762 /**
763 * Returns the library this chart implements.
764 */
765 public function getLibrary() {
766 return $this->_library;
767 }
768
769 }
770