PluginProbe
Booking Calendar / 11.2.1
Booking Calendar v11.2.1
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-form-builder / field-packs / select / _src / field-select-wptpl.js

field-select-wptpl.js in Booking Calendar 11.2.1, at includes/page-form-builder/field-packs/select/_src/field-select-wptpl.js

200 lines 7.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 // File: /includes/page-form-builder/field-packs/select/_out/field-select-wptpl.js
2 (function (w) {
3 'use strict';
4 var Core = w.WPBC_BFB_Core || {};
5 var Registry = Core.WPBC_BFB_Field_Renderer_Registry;
6 var Select_Base = Core.WPBC_BFB_Select_Base;
7
8 if ( ! Registry?.register || ! Select_Base ) {
9 w._wpbc?.dev?.error?.( 'WPBC_BFB_Field_Select', 'Registry or Select_Base missing' );
10 return;
11 }
12
13 class WPBC_BFB_Field_Select extends Select_Base {
14
15 static template_id = 'wpbc-bfb-field-select';
16 static kind = 'select';
17
18 static get_defaults() {
19 const d = super.get_defaults();
20 return {
21 ...d,
22 type : 'select',
23 label : 'Select',
24 placeholder: '--- Select ---',
25 options : [
26 { label: 'Option 1', value: 'Option 1', selected: false },
27 { label: 'Option 2', value: 'Option 2', selected: false },
28 { label: 'Option 3', value: 'Option 3', selected: false },
29 { label: 'Option 4', value: 'Option 4', selected: false }
30 ]
31 };
32 }
33 }
34
35 try {
36 Registry.register( 'select', WPBC_BFB_Field_Select );
37 } catch ( e ) {
38 w._wpbc?.dev?.error?.( 'WPBC_BFB_Field_Select.register', e );
39 }
40
41 // Optional: used by templates to fetch JS defaults if server data is empty.
42 w.WPBC_BFB_Field_Select = WPBC_BFB_Field_Select;
43
44
45
46 // -----------------------------------------------------------------------------------------------------------------
47 // Export for "Booking Form" (Advanced Form shortcode)
48 // -----------------------------------------------------------------------------------------------------------------
49 /**
50 * Booking Form exporter callback (Advanced Form shortcode) for "select".
51 *
52 * This callback is registered per field type via:
53 * WPBC_BFB_Exporter.register( 'select', callback )
54 * (and also as a legacy alias: 'selectbox')
55 *
56 * Core call site (builder-exporter.js):
57 * WPBC_BFB_Exporter.run_registered_exporter( field, io, cfg, once, ctx )
58 * -> callback( field, emit, { io, cfg, once, ctx, core } );
59 *
60 * @callback WPBC_BFB_ExporterCallback
61 * @param {Object} field
62 * Normalized field data coming from the Builder structure.
63 * - field.type {string} Field type, usually "select".
64 * - field.label {string} Visible label in the form (may be empty).
65 * - field.name {string} Name as stored on the canvas (already validated).
66 * - field.html_id {string} Optional HTML id / user-visible id.
67 * - field.cssclass {string} Extra CSS classes entered in Inspector.
68 * - field.options {Array} Options for select (label/value/selected).
69 * - field.label_first {boolean} Optional flag to render label before current value.
70 * - field.use_label_element {boolean} Optional flag to force `use_label_element`.
71 * - ... (Any other pack-specific props are also present.)
72 *
73 * @param {function(string):void} emit
74 * Emits one line/fragment into the export buffer.
75 *
76 * @param {Object} [extras]
77 * Extra context passed by the core exporter.
78 */
79 function register_select_booking_form_exporter() {
80
81 var Exp = w.WPBC_BFB_Exporter;
82 if ( ! Exp || typeof Exp.register !== 'function' ) { return; }
83 // If some other script already registered a "select" exporter, do nothing.
84 if ( typeof Exp.has_exporter === 'function' && Exp.has_exporter( 'select' ) ) { return; }
85
86 var S = Core.WPBC_BFB_Sanitize || ( w.WPBC_BFB_Core && w.WPBC_BFB_Core.WPBC_BFB_Sanitize ) || {};
87 var esc_html = S.escape_html || function ( v ) { return String( v ); };
88
89 /**
90 * @type {WPBC_BFB_ExporterCallback}
91 */
92 var exporter_callback = function ( field, emit, extras ) {
93
94 extras = extras || {};
95
96 var cfg = extras.cfg || {};
97 var ctx = extras.ctx;
98 var add_labels = cfg.addLabels !== false;
99
100 // Required marker (same semantics as other text-like fields).
101 var is_req = Exp.is_required( field );
102 var req_mark = is_req ? '*' : '';
103
104 // Name / id / classes come from shared helpers so they stay in sync with other packs.
105 var name = Exp.compute_name( 'select', field );
106 var id_opt = Exp.id_option( field, ctx );
107 var cls_opts = Exp.class_options( field );
108
109 // Use shared choice_tag helper:
110 // - Proper order of tokens
111 // - Optional use_label_element / label_first support
112 // - Options + default handling identical to legacy exporter.
113 var body = Exp.choice_tag( 'selectbox', req_mark, name, field, id_opt, cls_opts );
114
115 // Label behavior mirrors text/checkbox/radio exporters.
116 var raw_label = ( field && typeof field.label === 'string' ) ? field.label : '';
117 var label = raw_label.trim();
118
119 if ( label && add_labels ) {
120 emit( '<l>' + esc_html( label ) + req_mark + '</l>' );
121 emit( '<br>' + body );
122 } else {
123 emit( body );
124 }
125 // Help text is appended centrally by WPBC_BFB_Exporter.render_field_node().
126 };
127
128 // Main type used by the Builder.
129 Exp.register( 'select', exporter_callback );
130
131 // Legacy alias: some older structures may use "selectbox" as type.
132 if ( typeof Exp.has_exporter !== 'function' || ! Exp.has_exporter( 'selectbox' ) ) {
133 Exp.register( 'selectbox', exporter_callback );
134 }
135 }
136
137 // Try immediate registration; if core isn’t ready, wait for the event.
138 if ( w.WPBC_BFB_Exporter && typeof w.WPBC_BFB_Exporter.register === 'function' ) {
139 register_select_booking_form_exporter();
140 } else {
141 document.addEventListener( 'wpbc:bfb:exporter-ready', register_select_booking_form_exporter, { once: true } );
142 }
143
144
145 // -----------------------------------------------------------------------------------------------------------------
146 // Export for "Booking Data" (Content of booking fields data)
147 // -----------------------------------------------------------------------------------------------------------------
148 /**
149 * Booking Data exporter callback ("Content of booking fields data") for "select".
150 *
151 * Default behavior:
152 * <b>Label</b>: <f>[field_name]</f><br>
153 *
154 * Registered per field type via:
155 * WPBC_BFB_ContentExporter.register( 'select', callback )
156 * (and also as a legacy alias: 'selectbox')
157 */
158 function register_select_booking_data_exporter() {
159
160 var C = w.WPBC_BFB_ContentExporter;
161 if ( ! C || typeof C.register !== 'function' ) { return; }
162 if ( typeof C.has_exporter === 'function' && C.has_exporter( 'select' ) ) { return; }
163
164 var exporter_callback = function ( field, emit, extras ) {
165
166 extras = extras || {};
167 var cfg = extras.cfg || {};
168
169 var Exp = w.WPBC_BFB_Exporter;
170 if ( ! Exp || typeof Exp.compute_name !== 'function' ) { return; }
171
172 // Keep the exact exported name in sync with the Booking Form exporter.
173 var name = Exp.compute_name( 'select', field );
174 if ( ! name ) { return; }
175
176 var raw_label = ( typeof field.label === 'string' ) ? field.label : '';
177 var label = raw_label.trim() || name;
178
179 // Shared formatter keeps all packs consistent:
180 // <b>Label</b>: <f>[name]</f><br>
181 C.emit_line_bold_field( emit, label, name, cfg );
182 };
183
184 // Main type
185 C.register( 'select', exporter_callback );
186
187 // Legacy alias, if needed.
188 if ( typeof C.has_exporter !== 'function' || ! C.has_exporter( 'selectbox' ) ) {
189 C.register( 'selectbox', exporter_callback );
190 }
191 }
192
193 if ( w.WPBC_BFB_ContentExporter && typeof w.WPBC_BFB_ContentExporter.register === 'function' ) {
194 register_select_booking_data_exporter();
195 } else {
196 document.addEventListener( 'wpbc:bfb:content-exporter-ready', register_select_booking_data_exporter, { once: true } );
197 }
198
199 })( window );
200