PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.24.1
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.24.1
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / helpers / FrmHtmlHelper.php

FrmHtmlHelper.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.24.1, at classes/helpers/FrmHtmlHelper.php

125 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 /**
7 * @since 6.0
8 */
9 class FrmHtmlHelper {
10
11 /**
12 * Create a toggle and either echo or return the string.
13 * This is intended for use on admin pages only. The CSS is included in frm_admin.css.
14 *
15 * @since 6.0
16 *
17 * @param string $id
18 * @param string $name
19 * @param array $args {
20 * Any extra arguments.
21 *
22 * @type bool|null $echo True if you want the toggle to echo. False if you want it to return an HTML string.
23 * }
24 *
25 * @return string|void
26 */
27 public static function toggle( $id, $name, $args ) {
28 wp_enqueue_script( 'formidable_settings' );
29 return FrmAppHelper::clip(
30 // @phpstan-ignore-next-line
31 function () use ( $id, $name, $args ) {
32 require FrmAppHelper::plugin_path() . '/classes/views/shared/toggle.php';
33 },
34 isset( $args['echo'] ) ? $args['echo'] : false
35 );
36 }
37
38 /**
39 * Echo a dropdown option.
40 * This is useful to avoid closing and opening PHP to echo <option> tags which leads to extra whitespace.
41 * Avoiding whitespace saves 5KB of HTML for an international address field with a country dropdown with 252 options.
42 *
43 * @since 6.3.1
44 *
45 * @param string $option The string used as the option label.
46 * @param bool $selected True if the option should be selected.
47 * @param array $params Other HTML params for the option.
48 * @return void
49 */
50 public static function echo_dropdown_option( $option, $selected, $params = array() ) {
51 echo '<option ';
52 FrmAppHelper::array_to_html_params( $params, true );
53 selected( $selected );
54 echo '>';
55 echo esc_html( $option === '' ? ' ' : $option );
56 echo '</option>';
57 }
58
59 /**
60 * Renders a number input with unit selector.
61 *
62 * @since 6.24
63 *
64 * @param array $args {
65 * Optional. Arguments to customize the unit input.
66 *
67 * @type array $field_attrs Attributes for the hidden input storing the field value.
68 * @type array $input_number_attrs Attributes for the visible number input.
69 * @type array $units Available units for selection. Default is ['px', '%', 'em'].
70 * @type string $value Initial value with optional unit (e.g. '10px', '50%').
71 * }
72 *
73 * @return void
74 */
75 public static function echo_unit_input( $args = array() ) {
76 $args = wp_parse_args(
77 $args,
78 array(
79 'field_attrs' => array(),
80 'input_number_attrs' => array(),
81 'units' => array( '', 'px', '%', 'em' ),
82 'default_unit' => 'px',
83 'value' => '',
84 )
85 );
86
87 $units = $args['units'];
88 $value = $args['value'];
89
90 // Extract unit and number value if value is a string
91 if ( '' !== $value && ! is_numeric( $value ) ) {
92 $pattern = '/^([0-9.]*)(' . implode( '|', array_map( 'preg_quote', $units ) ) . ')?$/';
93 preg_match( $pattern, $value, $matches );
94 $selected_unit = $matches[2] ?? '';
95 if ( ! empty( $matches[1] ) ) {
96 $value = $matches[1];
97 }
98 }
99
100 $input_number_attrs = array_merge(
101 $args['input_number_attrs'],
102 array(
103 'type' => ! empty( $selected_unit ) ? 'number' : 'text',
104 'value' => $value,
105 'class' => trim( 'frm-unit-input-control ' . ( $args['input_number_attrs']['class'] ?? '' ) ),
106 )
107 );
108 ?>
109 <span class="frm-unit-input">
110 <input type="hidden" value="<?php echo esc_attr( $value ); ?>" <?php FrmAppHelper::array_to_html_params( $args['field_attrs'], true ); ?> />
111 <input <?php FrmAppHelper::array_to_html_params( $input_number_attrs, true ); ?> />
112 <span class="frm-input-group-suffix">
113 <select aria-label="<?php echo esc_attr__( 'Select unit', 'formidable' ); ?>" tabindex="0">
114 <?php
115 foreach ( $units as $unit ) {
116 self::echo_dropdown_option( $unit, $unit === ( $selected_unit ?? $args['default_unit'] ), array( 'value' => $unit ) );
117 }
118 ?>
119 </select>
120 </span>
121 </span>
122 <?php
123 }
124 }
125