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

752 lines 26.7 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 * Constructor.
96 *
97 * @since 1.0.0
98 *
99 * @access public
100 * @param array $data The data what has to be associated with this render.
101 */
102 public function __construct( $data = array() ) {
103 parent::__construct( $data );
104
105 $this->_legendPositions = array(
106 '' => '',
107 'left' => esc_html__( 'Left of the chart', 'visualizer' ),
108 'right' => esc_html__( 'Right of the chart', 'visualizer' ),
109 'top' => esc_html__( 'Above the chart', 'visualizer' ),
110 'bottom' => esc_html__( 'Below the chart', 'visualizer' ),
111 'in' => esc_html__( 'Inside the chart', 'visualizer' ),
112 'none' => esc_html__( 'Omit the legend', 'visualizer' ),
113 );
114
115 $this->_alignments = array(
116 '' => '',
117 'start' => esc_html__( 'Aligned to the start of the allocated area', 'visualizer' ),
118 'center' => esc_html__( 'Centered in the allocated area', 'visualizer' ),
119 'end' => esc_html__( 'Aligned to the end of the allocated area', 'visualizer' ),
120 );
121
122 $this->_yesno = array(
123 '' => '',
124 '1' => esc_html__( 'Yes', 'visualizer' ),
125 '0' => esc_html__( 'No', 'visualizer' ),
126 );
127 }
128
129 /**
130 * Renders chart title settings.
131 *
132 * @since 1.0.0
133 *
134 * @access protected
135 */
136 protected function _renderChartTitleSettings() {
137 self::_renderTextItem(
138 esc_html__( 'Chart Title', 'visualizer' ),
139 'title',
140 $this->title,
141 esc_html__( 'Text to display above the chart.', 'visualizer' )
142 );
143
144 self::_renderColorPickerItem(
145 esc_html__( 'Chart Title Color', 'visualizer' ),
146 'titleTextStyle[color]',
147 isset( $this->titleTextStyle['color'] ) ? $this->titleTextStyle['color'] : null,
148 '#000'
149 );
150 }
151
152 /**
153 * Renders chart advanced settings group.
154 *
155 * @access protected
156 */
157 protected function _renderAdvancedSettings() {
158 self::_renderGroupStart( esc_html__( 'Frontend Actions', 'visualizer' ) );
159 self::_renderSectionStart();
160 self::_renderSectionDescription( esc_html__( 'Configure frontend actions here.', 'visualizer' ) );
161 self::_renderSectionEnd();
162
163 $this->_renderActionSettings();
164 self::_renderGroupEnd();
165
166 self::_renderGroupStart( esc_html__( 'Manual Configuration', 'visualizer' ) );
167 self::_renderSectionStart();
168 self::_renderSectionDescription( __( 'Configure the graph by providing configuration variables right from the', 'visualizer' ) . ' <a href="https://developers.google.com/chart/interactive/docs/reference" target="_blank">Google Visualization</a> API.' );
169
170 $example = '
171 {
172 "vAxis": {
173 "ticks": [5, 10, 15, 20],
174 "titleTextStyle": {
175 "color": "red"
176 },
177 "textPosition": "in"
178 }
179 }';
180
181 self::_renderTextAreaItem(
182 esc_html__( 'Configuration', 'visualizer' ),
183 'manual',
184 $this->manual,
185 sprintf(
186 esc_html__( 'One per line in valid JSON (key:value) format e.g. %s', 'visualizer' ), '<br><code>' . $example . '</code>'
187 ),
188 '',
189 array( 'rows' => 5 )
190 );
191
192 self::_renderSectionEnd();
193 self::_renderGroupEnd();
194
195 }
196
197 /**
198 * Renders chart action buttons group.
199 *
200 * @access protected
201 */
202 protected function _renderActionSettings() {
203 global $wp_version;
204 $disable_actions = version_compare( $wp_version, '4.7.0', '<' );
205 self::_renderSectionStart( esc_html__( 'Actions', 'visualizer' ), false );
206 self::_renderCheckboxItem(
207 esc_html__( 'Print', 'visualizer' ),
208 'actions[]',
209 isset( $this->actions ) && in_array( 'print', $this->actions ) ? true : false,
210 'print',
211 $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' ),
212 $disable_actions
213 );
214 self::_renderCheckboxItem(
215 esc_html__( 'CSV', 'visualizer' ),
216 'actions[]',
217 isset( $this->actions ) && in_array( 'csv;application/csv', $this->actions ) ? true : false,
218 'csv;application/csv',
219 $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' ),
220 $disable_actions
221 );
222
223 $disabled = ! ( class_exists( 'PHPExcel' ) && extension_loaded( 'zip' ) && extension_loaded( 'xml' ) && version_compare( PHP_VERSION, '5.2.0', '>' ) );
224 self::_renderCheckboxItem(
225 esc_html__( 'Excel', 'visualizer' ),
226 'actions[]',
227 isset( $this->actions ) && in_array( 'xls;application/vnd.ms-excel', $this->actions ) ? true : false,
228 'xls;application/vnd.ms-excel',
229 $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' ) ),
230 $disable_actions || $disabled
231 );
232 self::_renderCheckboxItem(
233 esc_html__( 'Copy', 'visualizer' ),
234 'actions[]',
235 isset( $this->actions ) && in_array( 'copy', $this->actions ) ? true : false,
236 'copy',
237 $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' ),
238 $disable_actions
239 );
240 self::_renderSectionEnd();
241 }
242
243 /**
244 * Renders chart general settings group.
245 *
246 * @since 1.0.0
247 *
248 * @access protected
249 */
250 protected function _renderGeneralSettings() {
251 self::_renderGroupStart( esc_html__( 'General Settings', 'visualizer' ) );
252 self::_renderSectionStart();
253 self::_renderSectionDescription( esc_html__( 'Configure title, font styles, tooltip, legend and else settings for the chart.', 'visualizer' ) );
254 self::_renderSectionEnd();
255
256 self::_renderSectionStart( esc_html__( 'Title', 'visualizer' ), false );
257 $this->_renderChartTitleSettings();
258 self::_renderSectionEnd();
259
260 self::_renderSectionStart( esc_html__( 'Font Styles', 'visualizer' ), false );
261 echo '<div class="viz-section-item">';
262 echo '<a class="more-info" href="javascript:;">[?]</a>';
263 echo '<b>', esc_html__( 'Family And Size', 'visualizer' ), '</b>';
264
265 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
266 echo '<tr>';
267 echo '<td class="viz-section-table-column">';
268 echo '<select name="fontName" class="control-select">';
269 echo '<option></option>';
270 foreach ( self::$_fontFamilies as $font => $label ) {
271 echo '<option value="', $font, '"', selected( $font, $this->fontName, false ), '>';
272 echo $label;
273 echo '</option>';
274 }
275 echo '</select>';
276 echo '</td>';
277 echo '<td class="viz-section-table-column">';
278 echo '<select name="fontSize" class="control-select">';
279 echo '<option></option>';
280 for ( $i = 7; $i <= 20; $i++ ) {
281 echo '<option value="', $i, '"', selected( $i, $this->fontSize, false ), '>', $i, '</option>';
282 }
283 echo '</select>';
284 echo '</td>';
285 echo '</tr>';
286 echo '</table>';
287
288 echo '<p class="viz-section-description">';
289 esc_html_e( 'The default font family and size for all text in the chart.', 'visualizer' );
290 echo '</p>';
291 echo '</div>';
292 self::_renderSectionEnd();
293
294 self::_renderSectionStart( esc_html__( 'Legend', 'visualizer' ), false );
295 self::_renderSelectItem(
296 esc_html__( 'Position', 'visualizer' ),
297 'legend[position]',
298 $this->legend['position'],
299 $this->_legendPositions,
300 esc_html__( 'Determines where to place the legend, compared to the chart area.', 'visualizer' )
301 );
302
303 self::_renderSelectItem(
304 esc_html__( 'Alignment', 'visualizer' ),
305 'legend[alignment]',
306 $this->legend['alignment'],
307 $this->_alignments,
308 esc_html__( 'Determines the alignment of the legend.', 'visualizer' )
309 );
310
311 self::_renderColorPickerItem(
312 esc_html__( 'Font Color', 'visualizer' ),
313 'legend[textStyle][color]',
314 isset( $this->legend['textStyle']['color'] ) ? $this->legend['textStyle']['color'] : null,
315 '#000'
316 );
317 self::_renderSectionEnd();
318
319 self::_renderSectionStart( esc_html__( 'Tooltip', 'visualizer' ), false );
320 $this->_renderTooltipSettigns();
321 self::_renderSectionEnd();
322
323 $this->_renderAnimationSettings();
324
325 self::_renderGroupEnd();
326 }
327
328 /**
329 * Renders animation settings section.
330 *
331 * @access protected
332 */
333 protected function _renderAnimationSettings() {
334 if ( ! $this->_supportsAnimation ) {
335 return;
336 }
337
338 self::_renderSectionStart( esc_html__( 'Animation', 'visualizer' ), false );
339
340 self::_renderCheckboxItem(
341 esc_html__( 'Animate on startup', 'visualizer' ),
342 'animation[startup]',
343 $this->animation['startup'],
344 true,
345 esc_html__( 'Determines if the chart will animate on the initial draw.', 'visualizer' )
346 );
347
348 self::_renderTextItem(
349 esc_html__( 'Duration', 'visualizer' ),
350 'animation[duration]',
351 isset( $this->animation['duration'] ) ? $this->animation['duration'] : 0,
352 esc_html__( 'The duration of the animation, in milliseconds', 'visualizer' ),
353 0,
354 'number'
355 );
356
357 self::_renderSelectItem(
358 esc_html__( 'Easing', 'visualizer' ),
359 'animation[easing]',
360 isset( $this->animation['easing'] ) ? $this->animation['easing'] : null,
361 array(
362 'linear' => esc_html__( 'Constant speed', 'visualizer' ),
363 'in' => esc_html__( 'Start slow and speed up', 'visualizer' ),
364 'out' => esc_html__( 'Start fast and slow down', 'visualizer' ),
365 'inAndOut' => esc_html__( 'Start slow, speed up, then slow down', 'visualizer' ),
366 ),
367 esc_html__( 'The easing function applied to the animation.', 'visualizer' )
368 );
369
370 self::_renderSectionEnd();
371
372 }
373
374 /**
375 * Renders tooltip settings section.
376 *
377 * @since 1.4.0
378 *
379 * @access protected
380 */
381 protected function _renderTooltipSettigns() {
382 self::_renderSelectItem(
383 esc_html__( 'Trigger', 'visualizer' ),
384 'tooltip[trigger]',
385 isset( $this->tooltip['trigger'] ) ? $this->tooltip['trigger'] : null,
386 array(
387 '' => '',
388 'focus' => esc_html__( 'The tooltip will be displayed when the user hovers over an element', 'visualizer' ),
389 'selection' => esc_html__( 'The tooltip will be displayed when the user selects an element', 'visualizer' ),
390 'none' => esc_html__( 'The tooltip will not be displayed', 'visualizer' ),
391 ),
392 esc_html__( 'Determines the user interaction that causes the tooltip to be displayed.', 'visualizer' )
393 );
394
395 self::_renderSelectItem(
396 esc_html__( 'Show Color Code', 'visualizer' ),
397 'tooltip[showColorCode]',
398 isset( $this->tooltip['showColorCode'] ) ? $this->tooltip['showColorCode'] : null,
399 $this->_yesno,
400 esc_html__( 'If set to yes, will show colored squares next to the slice information in the tooltip.', 'visualizer' )
401 );
402 }
403
404 /**
405 * Renders chart view settings group.
406 *
407 * @since 1.0.0
408 *
409 * @access protected
410 */
411 protected function _renderViewSettings() {
412 self::_renderGroupStart( esc_html__( 'Layout & Chart Area', 'visualizer' ) );
413 self::_renderSectionStart( esc_html__( 'Layout', 'visualizer' ), false );
414 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' ) );
415
416 echo '<div class="viz-section-item">';
417 echo '<a class="more-info" href="javascript:;">[?]</a>';
418 echo '<b>', esc_html__( 'Width And Height Of Chart', 'visualizer' ), '</b>';
419
420 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
421 echo '<tr>';
422 echo '<td class="viz-section-table-column">';
423 echo '<input type="text" name="width" class="control-text" value="', esc_attr( $this->width ), '" placeholder="100%">';
424 echo '</td>';
425 echo '<td class="viz-section-table-column">';
426 echo '<input type="text" name="height" class="control-text" value="', esc_attr( $this->height ), '" placeholder="400">';
427 echo '</td>';
428 echo '</tr>';
429 echo '</table>';
430
431 echo '<p class="viz-section-description">';
432 esc_html_e( 'Determines the total width and height of the chart.', 'visualizer' );
433 echo '</p>';
434 echo '</div>';
435
436 echo '<div class="viz-section-delimiter"></div>';
437
438 self::_renderSectionDescription( esc_html__( 'Configure the background color for the main area of the chart and the chart border width and color.', 'visualizer' ) );
439
440 self::_renderTextItem(
441 esc_html__( 'Stroke Width', 'visualizer' ),
442 'backgroundColor[strokeWidth]',
443 isset( $this->backgroundColor['strokeWidth'] ) ? $this->backgroundColor['strokeWidth'] : null,
444 esc_html__( 'The chart border width in pixels.', 'visualizer' ),
445 '0'
446 );
447
448 self::_renderColorPickerItem(
449 esc_html__( 'Stroke Color', 'visualizer' ),
450 'backgroundColor[stroke]',
451 ! empty( $this->backgroundColor['stroke'] ) ? $this->backgroundColor['stroke'] : null,
452 '#666'
453 );
454
455 $background_color = ! empty( $this->backgroundColor['fill'] ) ? $this->backgroundColor['fill'] : null;
456 self::_renderColorPickerItem(
457 esc_html__( 'Background Color', 'visualizer' ),
458 'backgroundColor[fill]',
459 $background_color,
460 '#fff'
461 );
462
463 echo '<div class="viz-section-item">';
464 echo '<label>';
465 echo '<input type="checkbox" class="control-checkbox" name="backgroundColor[fill]" value="transparent"', checked( $background_color, 'transparent', false ), '> ';
466 esc_html_e( 'Transparent background', 'visualizer' );
467 echo '</label>';
468 echo '</div>';
469 self::_renderSectionEnd();
470
471 self::_renderSectionStart( esc_html__( 'Chart Area', 'visualizer' ), false );
472 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' ) );
473
474 echo '<div class="viz-section-item">';
475 echo '<a class="more-info" href="javascript:;">[?]</a>';
476 echo '<b>', esc_html__( 'Left And Top Margins', 'visualizer' ), '</b>';
477
478 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
479 echo '<tr>';
480 echo '<td class="viz-section-table-column">';
481 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%">';
482 echo '</td>';
483 echo '<td class="viz-section-table-column">';
484 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%">';
485 echo '</td>';
486 echo '</tr>';
487 echo '</table>';
488
489 echo '<p class="viz-section-description">';
490 esc_html_e( 'Determines how far to draw the chart from the left and top borders.', 'visualizer' );
491 echo '</p>';
492 echo '</div>';
493
494 echo '<div class="viz-section-item">';
495 echo '<a class="more-info" href="javascript:;">[?]</a>';
496 echo '<b>', esc_html__( 'Width And Height Of Chart Area', 'visualizer' ), '</b>';
497
498 echo '<table class="viz-section-table" cellspacing="0" cellpadding="0" border="0">';
499 echo '<tr>';
500 echo '<td class="viz-section-table-column">';
501 echo '<input type="text" name="chartArea[width]" class="control-text" value="', ! empty( $this->chartArea['width'] ) ? esc_attr( $this->chartArea['width'] ) : '', '" placeholder="60%">';
502 echo '</td>';
503 echo '<td class="viz-section-table-column">';
504 echo '<input type="text" name="chartArea[height]" class="control-text" value="', ! empty( $this->chartArea['height'] ) ? esc_attr( $this->chartArea['height'] ) : '', '" placeholder="60%">';
505 echo '</td>';
506 echo '</tr>';
507 echo '</table>';
508
509 echo '<p class="viz-section-description">';
510 esc_html_e( 'Determines the width and hight of the chart area.', 'visualizer' );
511 echo '</p>';
512 echo '</div>';
513 self::_renderSectionEnd();
514 self::_renderGroupEnd();
515 }
516
517 /**
518 * Renders select item.
519 *
520 * @since 1.0.0
521 *
522 * @static
523 * @access public
524 * @param string $title The title of the select item.
525 * @param string $name The name of the select item.
526 * @param string $value The actual value of the select item.
527 * @param array $options The array of select options.
528 * @param string $desc The description of the select item.
529 * @param bool $multiple Is this a multiple select box.
530 * @param array $classes Any additional classes.
531 * @param array $attributes Custom attributes.
532 */
533 public static function _renderSelectItem( $title, $name, $value, array $options, $desc, $multiple = false, $classes = array(), $attributes = array() ) {
534 $atts = '';
535 if ( $attributes ) {
536 foreach ( $attributes as $k => $v ) {
537 $atts .= ' data-visualizer-' . $k . '=' . esc_attr( $v );
538 }
539 }
540 echo '<div class="viz-section-item">';
541 echo '<a class="more-info" href="javascript:;">[?]</a>';
542 echo '<b>', $title, '</b>';
543 echo '<select class="control-select ', implode( ' ', $classes ) , '" name="', $name, '" ', ( $multiple ? 'multiple' : '' ), ' ' , $atts, '>';
544 foreach ( $options as $key => $label ) {
545 $extra = $multiple && is_array( $value ) ? ( in_array( $key, $value ) ? 'selected' : '' ) : selected( $key, $value, false );
546 echo '<option value="', $key, '"', $extra, '>';
547 echo $label;
548 echo '</option>';
549 }
550 echo '</select>';
551 echo '<p class="viz-section-description">', $desc, '</p>';
552 echo '</div>';
553 }
554
555 /**
556 * Renders color picker item.
557 *
558 * @since 1.0.0
559 *
560 * @static
561 * @access protected
562 * @param string $title The title of the select item.
563 * @param string $name The name of the select item.
564 * @param string $value The actual value of the select item.
565 * @param string $default The default value of the color picker.
566 */
567 protected static function _renderColorPickerItem( $title, $name, $value, $default ) {
568 echo '<div class="viz-section-item">';
569 echo '<b>', $title, '</b>';
570 echo '<div>';
571 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, '">';
572 echo '</div>';
573 echo '</div>';
574 }
575
576 /**
577 * Renders text item.
578 *
579 * @since 1.0.0
580 *
581 * @static
582 * @access protected
583 * @param string $title The title of the select item.
584 * @param string $name The name of the select item.
585 * @param string $value The actual value of the select item.
586 * @param string $desc The description of the select item.
587 * @param string $placeholder The placeholder for the input.
588 * @param string $type The type for the input (out of number, email, tel etc., default is text).
589 * @param array $custom_attributes The custom attributes.
590 */
591 protected static function _renderTextItem( $title, $name, $value, $desc, $placeholder = '', $type = 'text', $custom_attributes = array() ) {
592 $attributes = '';
593 if ( $custom_attributes ) {
594 foreach ( $custom_attributes as $k => $v ) {
595 $attributes .= ' ' . $k . '="' . esc_attr( $v ) . '"';
596 }
597 }
598 echo '<div class="viz-section-item">';
599 echo '<a class="more-info" href="javascript:;">[?]</a>';
600 echo '<b>', $title, '</b>';
601 echo '<input type="', $type, '" class="control-text" ', $attributes, ' name="', $name, '" value="', esc_attr( $value ), '" placeholder="', $placeholder, '">';
602 echo '<p class="viz-section-description">', $desc, '</p>';
603 echo '</div>';
604 }
605
606 /**
607 * Renders the beginning of a group.
608 *
609 * @since 1.0.0
610 *
611 * @static
612 * @access public
613 * @param string $title The title of this group.
614 * @param string $html Any additional HTML.
615 * @param string $class Any additional classes.
616 */
617 public static function _renderGroupStart( $title, $html = '', $class = '' ) {
618 echo '<li class="viz-group ' . $class . '">';
619 echo '<h3 class="viz-group-title">', $title, '</h3>';
620 echo $html;
621 echo '<ul class="viz-group-content">';
622 }
623
624 /**
625 * Renders the ending of a group.
626 *
627 * @since 1.0.0
628 *
629 * @static
630 * @access public
631 */
632 public static function _renderGroupEnd() {
633 echo '</ul>';
634 echo '</li>';
635 }
636
637 /**
638 * Renders the beginning of a section.
639 *
640 * @since 1.0.0
641 *
642 * @static
643 * @access public
644 * @param string $title The title of this section. If the title is empty, no title will be displayed.
645 * @param boolean $open Determines whether the section items block has to be expanded or collapsed.
646 */
647 public static function _renderSectionStart( $title = false, $open = true ) {
648
649 if ( ! empty( $title ) ) {
650 echo '<li class="viz-subsection">';
651 echo '<span class="viz-section-title">', $title, '</span>';
652 } else {
653 echo '<li class=" ">';
654 }
655 echo '<div class="viz-section-items section-items', $open ? ' open' : '', '">';
656 }
657
658 /**
659 * Renders the ending of a section.
660 *
661 * @since 1.0.0
662 *
663 * @public
664 * @access protected
665 * @param string $html Any addition HTML to add.
666 */
667 public static function _renderSectionEnd( $html = '' ) {
668 echo '</div>';
669 echo $html;
670 echo '</li>';
671 }
672
673 /**
674 * Renders section description block.
675 *
676 * @since 1.0.0
677 *
678 * @static
679 * @access public
680 * @param string $description The description text.
681 */
682 public static function _renderSectionDescription( $description ) {
683 echo '<div class="viz-section-item">';
684 echo '<div class="viz-section-description">', $description, '</div>';
685 echo '</div>';
686 }
687
688 /**
689 * Renders format field according to series type.
690 *
691 * @since 1.3.0
692 *
693 * @access protected
694 * @param int $index The index of the series.
695 */
696 protected function _renderFormatField( $index = 0 ) {
697 switch ( $this->__series[ $index + 1 ]['type'] ) {
698 case 'number':
699 self::_renderTextItem(
700 esc_html__( 'Number Format', 'visualizer' ),
701 'series[' . $index . '][format]',
702 isset( $this->series[ $index ]['format'] ) ? $this->series[ $index ]['format'] : '',
703 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>' ),
704 '#,###.##'
705 );
706 break;
707 case 'date':
708 case 'datetime':
709 case 'timeofday':
710 self::_renderTextItem(
711 esc_html__( 'Date 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 date and time format%2$s.', 'visualizer' ), '<a href="http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax" target="_blank">', '</a>' ),
715 'eeee, dd LLLL yyyy'
716 );
717 break;
718 }
719 }
720
721 /**
722 * Render a checkbox item
723 */
724 protected static function _renderCheckboxItem( $title, $name, $value, $default, $desc, $disabled = false ) {
725 echo '<div class="viz-section-item">';
726 echo '<a class="more-info" href="javascript:;">[?]</a>';
727 echo '<b>', $title, '</b>';
728 echo '<input type="checkbox" class="control-check" value="', $default, '" name="', $name, '" ', ( $value == $default ? 'checked' : '' ), ' ', ( $disabled ? 'disabled=disabled' : '' ), '>';
729 echo '<p class="viz-section-description">', $desc, '</p>';
730 echo '</div>';
731 }
732
733 /**
734 * Render a textarea item.
735 */
736 protected static function _renderTextAreaItem( $title, $name, $value, $desc, $placeholder = '', $custom_attributes = array() ) {
737 $attributes = '';
738 if ( $custom_attributes ) {
739 foreach ( $custom_attributes as $k => $v ) {
740 $attributes .= ' ' . $k . '="' . esc_attr( $v ) . '"';
741 }
742 }
743 echo '<div class="viz-section-item">';
744 echo '<a class="more-info" href="javascript:;">[?]</a>';
745 echo '<b>', $title, '</b>';
746 echo '<textarea class="control-text" ', $attributes, ' name="', $name, '" placeholder="', $placeholder, '">', $value, '</textarea>';
747 echo '<p class="viz-section-description">', $desc, '</p>';
748 echo '</div>';
749 }
750
751 }
752