PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.24
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.24
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
← All changes | classes/helpers/FrmHtmlHelper.php +91 -2 6.36.24 View file →
@@ -16,9 +16,11 @@
16 16 *
17 17 * @param string $id
18 18 * @param string $name
19 19 * @param array $args {
20 - * @param bool|null $echo True if you want the toggle to echo. False if you want it to return an HTML string.
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.
21 23 * }
22 24 *
23 25 * @return string|void
24 26 */
@@ -25,11 +27,98 @@
25 27 public static function toggle( $id, $name, $args ) {
26 28 wp_enqueue_script( 'formidable_settings' );
27 29 return FrmAppHelper::clip(
28 30 // @phpstan-ignore-next-line
29 - function() use ( $id, $name, $args ) {
31 + function () use ( $id, $name, $args ) {
30 32 require FrmAppHelper::plugin_path() . '/classes/views/shared/toggle.php';
31 33 },
32 34 isset( $args['echo'] ) ? $args['echo'] : false
33 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
34 123 }
35 124 }