PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
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
← All changes | includes/ui_settings/parts/ui__nav_vert.php +253 -86 11.0 → 11.9 View file →
@@ -29,13 +29,21 @@
29 29 ),
30 30 'wpbc-divider-1' => array(
31 31 'type' => 'divider',
32 32 ),
33 - 'wpbc-availability' => array(
33 + );
34 +
35 + $pages_arr['wpbc-resources'] = array(
36 + 'type' => 'menu',
37 + 'title' => __( 'Resources', 'booking' ),
38 + 'font_icon' => 'wpbc-bi-list',
39 + );
40 +
41 +
42 + $pages_arr['wpbc-availability'] = array(
34 43 'type' => 'menu',
35 44 'title' => __( 'Availability', 'booking' ),
36 45 'font_icon' => 'wpbc-bi-calendar-week',
37 - ),
38 46 );
39 47
40 48 if ( class_exists('wpdev_bk_biz_m') ) {
41 49 $pages_arr['wpbc-prices'] = array(
@@ -44,21 +52,9 @@
44 52 'font_icon' => 'wpbc-bi-cash-stack',
45 53 );
46 54 }
47 55
48 - if ( class_exists('wpdev_bk_personal') ) {
49 - $pages_arr['wpbc-resources'] = array(
50 - 'type' => 'menu',
51 - 'title' => __( 'Resources', 'booking' ) . ' / ' . __( 'unique calendars', 'booking' ),
52 - 'font_icon' => 'wpbc-bi-list',
53 - );
54 - } else {
55 - $pages_arr['wpbc-resources'] = array(
56 - 'type' => 'menu',
57 - 'title' => __( 'Resource', 'booking' ) . ' / ' . __( 'Publish', 'booking' ),
58 - 'font_icon' => 'wpbc-bi-list',
59 - );
60 - }
56 +
61 57 $pages_arr['wpbc-divider-2'] = array(
62 58 'type' => 'divider',
63 59 );
64 60 $pages_arr['wpbc-settings'] = array(
@@ -84,9 +80,9 @@
84 80 );
85 81 $params = wp_parse_args( $args, $defaults );
86 82
87 83 // Ability to click on panel, only if there 'min' class - panel minimized!
88 - echo '<div class="wpbc_ui_el__vert_left_bar__wrapper" onclick0="javascript:if (( jQuery( this ).parent(\'.wpbc_settings_page_wrapper\').hasClass(\'min\') ) && ( ! wpbc_admin_ui__is_in_mobile_screen_size())) { wpbc_admin_ui__sidebar_left__do_max(); }" >';
84 + echo '<div class="wpbc_ui_el__vert_left_bar__wrapper" onclick="javascript:if (( jQuery( this ).parent(\'.wpbc_settings_page_wrapper\').hasClass(\'min\') ) && ( ! wpbc_admin_ui__is_in_mobile_screen_size())) { wpbc_admin_ui__sidebar_left__do_max( true ); }" >';
89 85
90 86 // FixIn: 10.12.1.7.
91 87 wpbc_ui__vert_left_bar__side_button__do_compact();
92 88 wpbc_ui__vert_left_bar__side_button__do_max();
@@ -96,11 +92,33 @@
96 92 'active_tab' => $args ['active_tab'], // calendar_appearance.
97 93 'active_subtab' => $args['active_subtab'], // calendar_appearance_skin.
98 94 );
99 95
96 + if ( function_exists( 'wpbc_booking_modes_v3_compile_sidebar_navigation' ) ) {
97 + $args['page_nav_tabs'] = wpbc_booking_modes_v3_compile_sidebar_navigation( $args['page_nav_tabs'] );
98 + }
99 +
100 100 // Available Main Menu - slug => titles.
101 101 $root_menu_arr = wpbc_ui__get_root_menu_arr();
102 102
103 + if ( function_exists( 'wpbc_booking_modes_v3_compile_root_navigation' ) ) {
104 + $root_menu_arr = wpbc_booking_modes_v3_compile_root_navigation( $root_menu_arr, $args['page_nav_tabs'] );
105 + }
106 +
107 + // A mode may display an existing controller route below a different presentation group.
108 + foreach ( $args['page_nav_tabs'] as $presentation_page_slug => $presentation_tabs ) {
109 + if ( ! is_array( $presentation_tabs ) ) {
110 + continue;
111 + }
112 +
113 + foreach ( $presentation_tabs as $presentation_tab ) {
114 + if ( is_array( $presentation_tab ) && ! empty( $presentation_tab['is_active'] ) ) {
115 + $active_page_arr['active_page'] = $presentation_page_slug;
116 + break 2;
117 + }
118 + }
119 + }
120 +
103 121 echo ' <div class="wpbc_ui_el__vert_left_bar__content">';
104 122
105 123 $is_show_all_menus = true;
106 124
@@ -109,10 +127,11 @@
109 127 } else {
110 128
111 129 // wpbc_ui_el__divider_horizontal();
112 130 echo '<div class="wpbc_ui_el__row100 wpbc_ui_el__expand_colapse_btns">';
113 - wpbc_ui__vert_left_bar__do_compact();
114 - wpbc_ui__vert_left_bar__do_max();
131 + wpbc_ui__vert_left_bar__do_min();
132 + //wpbc_ui__vert_left_bar__do_compact();
133 + //wpbc_ui__vert_left_bar__do_max();
115 134 echo '</div>';
116 135
117 136 echo ' <div class="wpbc_ui_el__vert_left_bar__root_sections_container" role="tablist">';
118 137 }
@@ -124,14 +143,32 @@
124 143 continue;
125 144 }
126 145
127 146 $page_title = $root_menu_options_arr['title'];
128 - $is_expanded = ( $main_page_slug === $active_page_arr['active_page'] );
147 + $is_v3_standalone = ! empty( $root_menu_options_arr['mode_standalone'] );
148 + // Respect a V3 root's explicit initial state while retaining the original Settings behavior for V1.
149 + if ( $is_v3_standalone ) {
150 + $is_expanded = true;
151 + } elseif ( isset( $root_menu_options_arr['mode_expanded'] ) ) {
152 + $is_expanded = 'On' === $root_menu_options_arr['mode_expanded']
153 + || ( 'when_active' === $root_menu_options_arr['mode_expanded'] && $main_page_slug === $active_page_arr['active_page'] );
154 + } else {
155 + $is_expanded = ( 'wpbc-settings' !== $main_page_slug ) || ( $main_page_slug === $active_page_arr['active_page'] );
156 + }
129 157
130 158 if ( $is_show_all_menus ) {
131 159 echo ' <div class="wpbc_ui_el__vert_left_bar__root_section_element root_section_element_' . esc_attr( $main_page_slug ) . ' ' . ( ( $is_expanded ) ? 'section_expanded' : '' ) . '">';
132 160
133 - wpbc_ui__vert_menu__show_root_section_header( $main_page_slug, $page_title );
161 + $mode_font_icon = isset( $root_menu_options_arr['mode_font_icon'] ) ? $root_menu_options_arr['mode_font_icon'] : '';
162 + if ( ! $is_v3_standalone ) {
163 + wpbc_ui__vert_menu__show_root_section_header(
164 + $main_page_slug,
165 + $page_title,
166 + $mode_font_icon,
167 + isset( $root_menu_options_arr['mode_expanded'] ),
168 + $is_expanded
169 + );
170 + }
134 171 }
135 172
136 173 echo ' <div class="wpbc_ui_el__vert_left_bar__section wpbc_ui_el__vert_left_bar__section_' .
137 174 esc_attr( $main_page_slug ) .
@@ -155,63 +192,74 @@
155 192 echo '</div>';
156 193 wpbc_ui_el__divider_horizontal();
157 194 }
158 195
159 - foreach ( $page_item_arr as $main_menu_slug => $menu_item_arr ) {
196 + if ( function_exists( 'wpbc_booking_modes_v3_compile_sidebar_navigation' ) ) {
197 + wpbc_ui__vert_menu__render_v3_nodes( $page_item_arr );
198 + } else {
199 + foreach ( $page_item_arr as $main_menu_slug => $menu_item_arr ) {
200 + $folder_style = ( ! empty( $menu_item_arr['folder_style'] ) ) ? esc_attr( $menu_item_arr['folder_style'] ) : '';
160 201
161 - $folder_style = ( ! empty( $menu_item_arr['folder_style'] ) ) ? esc_attr( $menu_item_arr['folder_style'] ) : '';
202 + $folder_css = '';
203 + $is_folder_expanded = ! empty( $menu_item_arr['subtabs'] ) && ! empty( $menu_item_arr['is_active'] );
204 + if ( isset( $menu_item_arr['_wpbc_v3_expanded'] ) ) {
205 + $is_folder_expanded = 'On' === $menu_item_arr['_wpbc_v3_expanded']
206 + || ( 'when_active' === $menu_item_arr['_wpbc_v3_expanded'] && $is_folder_expanded );
207 + }
208 + if ( $is_folder_expanded ) {
209 + $folder_css .= ' expanded';
210 + }
211 + if ( ! empty( $menu_item_arr['_wpbc_v3_branch_css_classes'] ) ) {
212 + $folder_css .= ' ' . $menu_item_arr['_wpbc_v3_branch_css_classes'];
213 + }
162 214
163 - $folder_css = '';
164 - if ( ( ! empty( $menu_item_arr['subtabs'] ) ) && ( ! empty( $menu_item_arr['is_active'] ) ) ) {
165 - $folder_css .= ' expanded';
166 - }
215 + echo '<div class="wpbc_ui_el__level__folder ' . esc_attr( $folder_css ) . '" style="' . esc_attr( $folder_style ) . '">';
167 216
168 - echo '<div class="wpbc_ui_el__level__folder ' . esc_attr( $folder_css ) . '" style="' . esc_attr( $folder_style ) . '">';
169 217
218 + if ( empty( $menu_item_arr['type'] ) ) {
219 + $menu_item_arr['type'] = 'main';
220 + }
170 221
171 - if ( empty( $menu_item_arr['type'] ) ) {
172 - $menu_item_arr['type'] = 'main';
173 - }
222 + switch ( $menu_item_arr['type'] ) {
174 223
175 - switch ( $menu_item_arr['type'] ) {
224 + case 'separator':
225 + wpbc_ui_el__divider_horizontal();
226 + break;
176 227
177 - case 'separator':
178 - wpbc_ui_el__divider_horizontal();
179 - break;
228 + case 'html':
229 + wpbc_ui__vert_menu__item_html( $main_menu_slug, $menu_item_arr );
230 + break;
180 231
181 - case 'html':
182 - wpbc_ui__vert_menu__item_html( $main_menu_slug, $menu_item_arr );
183 - break;
232 + default:
233 + wpbc_ui__vert_menu__item_main( $main_menu_slug, $menu_item_arr );
234 + }
184 235
185 - default:
186 - wpbc_ui__vert_menu__item_main( $main_menu_slug, $menu_item_arr );
187 - }
188 236
237 + foreach ( $menu_item_arr['subtabs'] as $main_submenu_slug => $submenu_item_arr ) {
189 238
190 - foreach ( $menu_item_arr['subtabs'] as $main_submenu_slug => $submenu_item_arr ) {
239 + if ( empty( $submenu_item_arr['type'] ) ) {
240 + $submenu_item_arr['type'] = 'subtab';
241 + }
191 242
192 - if ( empty( $submenu_item_arr['type'] ) ) {
193 - $submenu_item_arr['type'] = 'subtab';
194 - }
243 + switch ( $submenu_item_arr['type'] ) {
195 244
196 - switch ( $submenu_item_arr['type'] ) {
245 + case 'subtab':
246 + wpbc_ui__vert_menu__item_sub( $main_submenu_slug, $submenu_item_arr );
247 + break;
197 248
198 - case 'subtab':
199 - wpbc_ui__vert_menu__item_sub( $main_submenu_slug, $submenu_item_arr );
200 - break;
249 + case 'separator':
250 + wpbc_ui__vert_menu__item_separtor( $main_submenu_slug, $submenu_item_arr );
251 + break;
201 252
202 - case 'separator':
203 - wpbc_ui__vert_menu__item_separtor( $main_submenu_slug, $submenu_item_arr );
204 - break;
253 + case 'html':
254 + wpbc_ui__vert_menu__item_html( $main_submenu_slug, $submenu_item_arr );
255 + break;
205 256
206 - case 'html':
207 - wpbc_ui__vert_menu__item_html( $main_submenu_slug, $submenu_item_arr );
208 - break;
209 -
210 - default:
257 + default:
258 + }
211 259 }
260 + echo '</div><!-- wpbc_ui_el__level__folder -->';
212 261 }
213 - echo '</div><!-- wpbc_ui_el__level__folder -->';
214 262 }
215 263
216 264 if ( $is_show_all_menus ) {
217 265 echo ' </div><!-- wpbc_ui_el__vert_left_bar__root_section_element -->';
@@ -224,11 +272,9 @@
224 272 echo ' </div><!-- wpbc_ui_el__vert_left_bar__root_sections_container -->';
225 273 }
226 274
227 275
228 - $is_show_up = wpbc_is_show_up();
229 - // Show upgrade icon only for the Free version here.
230 - $is_show_up = ( $is_show_up && ( ! class_exists( 'wpdev_bk_personal' ) ) );
276 + $is_show_up = wpbc_is_show_free_upgrade();
231 277 if ( $is_show_up ) {
232 278 ?><div class="wpbc_ui_el__vert_left_bar__footer_compensator"></div><?php
233 279 }
234 280
@@ -235,9 +281,9 @@
235 281 echo ' </div><!-- wpbc_ui_el__vert_left_bar__content -->';
236 282 if ( $is_show_up ) {
237 283 $url = wpbc_up_link();
238 284 ?>
239 - <div class="wpbc_ui_el__vert_left_bar__footer_section">
285 + <div class="wpbc_ui_el__vert_left_bar__footer_section" style="visibility: hidden;">
240 286 <a class="wpbc_ui_el_upgrade_button wpbc_button_light wpbc_button_green" href="<?php echo esc_url( $url ); ?>">
241 287 <span class="hide_in_compact_mode"><?php esc_html_e( 'Upgrade to Pro', 'booking' ); ?></span>
242 288 <span class="hide_in_max_mode"><?php esc_html_e( 'Pro', 'booking' ); ?></span>
243 289 </a>
@@ -249,8 +295,80 @@
249 295 wpbc_start_element_scrollable__with_simplebar( '.wpbc_ui_el__vert_left_bar__content' );
250 296 }
251 297
252 298 /**
299 + * Render an arbitrarily nested V3 sidebar through the existing row functions.
300 + *
301 + * Top-level and disclosure nodes retain the existing main-row markup. Nested
302 + * leaves retain the existing subrow markup, so the recursive traversal adds no
303 + * new visual system or navigation-only asset.
304 + *
305 + * @param array $navigation_nodes Prepared V3 navigation nodes.
306 + * @param int $depth Zero-based sidebar depth.
307 + *
308 + * @return void
309 + */
310 +function wpbc_ui__vert_menu__render_v3_nodes( $navigation_nodes, $depth = 0 ) {
311 + foreach ( $navigation_nodes as $menu_slug => $menu_item_arr ) {
312 + if ( ! is_array( $menu_item_arr ) ) {
313 + continue;
314 + }
315 +
316 + $subtabs = isset( $menu_item_arr['subtabs'] ) && is_array( $menu_item_arr['subtabs'] ) ? $menu_item_arr['subtabs'] : array();
317 + $has_children = ! empty( $subtabs );
318 + $item_type = empty( $menu_item_arr['type'] ) ? ( 0 === $depth || $has_children ? 'main' : 'subtab' ) : $menu_item_arr['type'];
319 +
320 + if ( 0 < $depth && ! $has_children ) {
321 + switch ( $item_type ) {
322 + case 'separator':
323 + wpbc_ui__vert_menu__item_separtor( $menu_slug, $menu_item_arr );
324 + break;
325 +
326 + case 'html':
327 + wpbc_ui__vert_menu__item_html( $menu_slug, $menu_item_arr );
328 + break;
329 +
330 + default:
331 + wpbc_ui__vert_menu__item_sub( $menu_slug, $menu_item_arr );
332 + }
333 + continue;
334 + }
335 +
336 + $folder_style = ! empty( $menu_item_arr['folder_style'] ) ? $menu_item_arr['folder_style'] : '';
337 + $folder_css = '';
338 + $is_expanded = $has_children && ! empty( $menu_item_arr['is_active'] );
339 + if ( isset( $menu_item_arr['_wpbc_v3_expanded'] ) ) {
340 + $is_expanded = 'On' === $menu_item_arr['_wpbc_v3_expanded']
341 + || ( 'when_active' === $menu_item_arr['_wpbc_v3_expanded'] && $is_expanded );
342 + }
343 + if ( $is_expanded ) {
344 + $folder_css .= ' expanded';
345 + }
346 + if ( ! empty( $menu_item_arr['_wpbc_v3_branch_css_classes'] ) ) {
347 + $folder_css .= ' ' . $menu_item_arr['_wpbc_v3_branch_css_classes'];
348 + }
349 +
350 + echo '<div class="wpbc_ui_el__level__folder ' . esc_attr( $folder_css ) . '" style="' . esc_attr( $folder_style ) . '">';
351 + switch ( $item_type ) {
352 + case 'separator':
353 + wpbc_ui_el__divider_horizontal();
354 + break;
355 +
356 + case 'html':
357 + wpbc_ui__vert_menu__item_html( $menu_slug, $menu_item_arr );
358 + break;
359 +
360 + default:
361 + wpbc_ui__vert_menu__item_main( $menu_slug, $menu_item_arr );
362 + }
363 + if ( $has_children ) {
364 + wpbc_ui__vert_menu__render_v3_nodes( $subtabs, $depth + 1 );
365 + }
366 + echo '</div><!-- wpbc_ui_el__level__folder -->';
367 + }
368 +}
369 +
370 +/**
253 371 * Set Scrolable Element with Simplebar js library.
254 372 *
255 373 * @param string $jq_element - e.g. '.wpbc_ui_el__vert_left_bar__content'
256 374 * @param string $options - e.g. 'autoHide: false, scrollbarMinSize: 10' - options for the Simplebar. See more: https://www.npmjs.com/package/simplebar#1-documentation
@@ -265,9 +383,17 @@
265 383 ?>
266 384 <script type="text/javascript">
267 385 (function() { var a = setInterval( function() { if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function () {
268 386 jQuery( '.wpbc_ui_el__vert_left_bar__section' ).css( { "animation-duration": "1ms" } ); // Set animation of showing left siebar from left to right imediate to prevent flipping.
269 - new SimpleBar( jQuery( '<?php echo esc_attr( $jq_element ); ?>' )[0], { <?php echo esc_attr( $options ); ?> } );
387 + if ( 'undefined' !== typeof SimpleBar ) {
388 + var simplebar_element = jQuery( '<?php echo esc_attr( $jq_element ); ?>' )[0];
389 + if ( simplebar_element ) {
390 + var simplebar_instance = new SimpleBar( simplebar_element, { <?php echo esc_attr( $options ); ?> } );
391 + if ( 'function' === typeof wpbc_admin_ui__sidebar_left__scroll_to_active_item ) {
392 + wpbc_admin_ui__sidebar_left__scroll_to_active_item( simplebar_instance );
393 + }
394 + }
395 + }
270 396 var wait_timer = setTimeout( function (){
271 397 jQuery( '.wpbc_ui_el__vert_left_bar__section' ).css( { "animation-duration": "200ms" } ); // Set animation to normal value.
272 398 }, 300 );
273 399 } ); }, 400 ); })();
@@ -284,15 +410,17 @@
284 410 */
285 411 function wpbc_ui__vert_left_bar__do_toggle() {
286 412
287 413 $el_arr = array();
288 - $el_arr['font_icon'] = 'wpbc_icn_menu';
414 + $el_arr['font_icon'] = 'wpbc-bi-layout-sidebar-inset'; // 'wpbc_icn_menu';
289 415 $el_arr['container_style'] = 'padding:0 8px;';
290 416 $el_arr['container_class'] = 'wpbc_ui__top_nav__btn_show_left_vertical_nav';
291 - $el_arr['onclick'] = "if ( jQuery( '.wpbc_ui_el__vert_left_bar__content' ).is( ':visible' ) ) {";
292 - $el_arr['onclick'] .= ' wpbc_admin_ui__sidebar_left__do_min(); ';
417 + $el_arr['onclick'] = "if ( jQuery( '.wpbc_page_wrapper_left_max' ).length ) {";
418 + // $el_arr['onclick'] = "if ( jQuery( '.wpbc_ui_el__vert_left_bar__content' ).is( ':visible' ) ) {";
419 + // $el_arr['onclick'] .= ' wpbc_admin_ui__sidebar_left__do_min( true ); ';
420 + $el_arr['onclick'] .= ' wpbc_admin_ui__sidebar_left__do_compact( true ); ';
293 421 $el_arr['onclick'] .= '} else {';
294 - $el_arr['onclick'] .= ' wpbc_admin_ui__sidebar_left__do_max(); ';
422 + $el_arr['onclick'] .= ' wpbc_admin_ui__sidebar_left__do_max( true ); ';
295 423 $el_arr['onclick'] .= '}';
296 424 $el_arr['hint'] = array(
297 425 'title' => __( 'Toggle side menu', 'booking' ),
298 426 'position' => 'right',
@@ -309,9 +437,9 @@
309 437
310 438 $el_arr = array();
311 439 $el_arr['container_style'] = '';
312 440 $el_arr['container_class'] = 'wpbc_ui__top_nav__btn_open_left_vertical_nav wpbc_ui__hide hide_in_compact_mode0';
313 - $el_arr['onclick'] = ' wpbc_admin_ui__sidebar_left__do_max(); ';
441 + $el_arr['onclick'] = ' wpbc_admin_ui__sidebar_left__do_max( true ); ';
314 442 $el_arr['font_icon'] = 'wpbc-bi-box-arrow-right';
315 443 $el_arr['hint'] = array(
316 444 'title' => __( 'Open side menu', 'booking' ),
317 445 'position' => 'top',
@@ -328,9 +456,9 @@
328 456
329 457 $el_arr = array();
330 458 $el_arr['container_style'] = '';
331 459 $el_arr['container_class'] = 'wpbc_ui__top_nav__btn_hide_left_vertical_nav';
332 - $el_arr['onclick'] = ' wpbc_admin_ui__sidebar_left__do_compact(); ';
460 + $el_arr['onclick'] = ' wpbc_admin_ui__sidebar_left__do_compact( true ); ';
333 461 $el_arr['font_icon'] = 'wpbc-bi-box-arrow-left';
334 462 $el_arr['hint'] = array(
335 463 'title' => __( 'Set side menu compact', 'booking' ),
336 464 'position' => 'top',
@@ -365,14 +493,17 @@
365 493 function wpbc_ui__vert_left_bar__do_min() {
366 494
367 495 $el_arr = array();
368 496 $el_arr['container_style'] = '';
369 - $el_arr['container_class'] = 'wpbc_ui__top_nav__btn_hide_left_vertical_nav';
370 - $el_arr['onclick'] = ' wpbc_admin_ui__sidebar_left__do_min(); ';
371 - $el_arr['font_icon'] = 'wpbc_icn_minimize';
497 + $el_arr['container_class'] = '';// 'wpbc_ui__top_nav__btn_hide_left_vertical_nav';
498 + // User Save Preferences of other pages (saved collapsed left menu).
499 + // $el_arr['onclick'] = 'event.stopPropagation(); wpbc_admin_ui__sidebar_left__do_min( true ); ';
500 + // Do NOT - Save User Preferences of other pages (not save collapsed left menu).
501 + $el_arr['onclick'] = 'event.stopPropagation(); wpbc_admin_ui__sidebar_left__do_min(); ';
502 + $el_arr['font_icon'] = 'wpbc_icn_close'; //'wpbc_icn_minimize';
372 503 $el_arr['hint'] = array(
373 - 'title' => __( 'Minimize side menu', 'booking' ),
374 - 'position' => 'bottom',
504 + 'title' => __( 'Hide', 'booking' ),
505 + 'position' => 'right',
375 506 );
376 507 wpbc_ui_el__a( $el_arr );
377 508 }
378 509
@@ -456,24 +587,38 @@
456 587
457 588 /**
458 589 * Show Root Header
459 590 *
460 - * @param string $main_page_slug - slug of all sub menu section.
461 - * @param string $page_title - title of header.
462 - * @param bool $is_expanded - Is expanded or not.
591 + * @param string $main_page_slug Slug of the submenu section.
592 + * @param string $page_title Section title.
593 + * @param string $font_icon Optional sanitized font-icon CSS classes supplied by the selected mode.
594 + * @param bool $is_v3_scoped Whether to use V3's nearest-branch disclosure behavior.
595 + * @param bool $is_expanded Whether the V3 branch is initially expanded.
463 596 *
464 597 * @return void
465 598 */
466 -function wpbc_ui__vert_menu__show_root_section_header( $main_page_slug, $page_title) {
599 +function wpbc_ui__vert_menu__show_root_section_header( $main_page_slug, $page_title, $font_icon = '', $is_v3_scoped = false, $is_expanded = false ) {
467 600
468 601 $css_section = '.root_section_element_' . $main_page_slug;
469 602
470 603 // Section Header.
471 - ?><a class="wpbc_ui_el__row100 wpbc_ui_el__root_section_header_a" href="javascript:void(0)"
472 - onclick="javascript:var is_has_class = jQuery( '<?php echo esc_attr( $css_section ); ?>' ).hasClass('section_expanded'); jQuery( '.wpbc_ui_el__vert_left_bar__root_section_element' ).removeClass('section_expanded'); if (is_has_class) { jQuery( '<?php echo esc_attr( $css_section ); ?>' ).removeClass('section_expanded'); } else {jQuery( '<?php echo esc_attr( $css_section ); ?>' ).addClass('section_expanded');}"
473 - ><?php
604 + ?><a class="wpbc_ui_el__row100 wpbc_ui_el__root_section_header_a"
605 + href="javascript:void(0)"
606 + <?php if ( $is_v3_scoped ) { ?>
607 + aria-expanded="<?php echo $is_expanded ? 'true' : 'false'; ?>"
608 + onkeydown="if ( ' ' === event.key ) { event.preventDefault(); this.click(); }"
609 + onclick="javascript:var wpbc_root=jQuery(this).closest('.wpbc_ui_el__vert_left_bar__root_section_element');var wpbc_open=wpbc_root.hasClass('section_expanded');wpbc_root.toggleClass('section_expanded',!wpbc_open);jQuery(this).attr('aria-expanded',wpbc_open?'false':'true');"
610 + <?php } else { ?>
611 + onclick="javascript:var is_has_class = jQuery( '<?php echo esc_attr( $css_section ); ?>' ).hasClass('section_expanded'); <?php
612 + /* ?> jQuery( '.wpbc_ui_el__vert_left_bar__root_section_element' ).removeClass('section_expanded'); <?php */
613 + ?>if (is_has_class) { jQuery( '<?php echo esc_attr( $css_section ); ?>' ).removeClass('section_expanded'); } else {jQuery( '<?php echo esc_attr( $css_section ); ?>' ).addClass('section_expanded');}"
614 + <?php } ?>
615 + >
616 + <i class="wpbc_ui_el__vert_menu_root_section_icon menu_icon icon-1x wpbc-bi-chevron-right"></i><?php
474 617
475 - ?><i class="wpbc_ui_el__vert_menu_root_section_icon menu_icon icon-1x wpbc-bi-chevron-right"></i><?php
618 + if ( '' !== $font_icon ) {
619 + ?><i class="wpbc_ui_el__vert_menu_root_section_font_icon menu_icon icon-1x <?php echo esc_attr( $font_icon ); ?>" aria-hidden="true"></i><?php
620 + }
476 621
477 622 wpbc_ui__vert_menu__show_section_header( $page_title );
478 623
479 624 ?></a><?php
@@ -556,9 +701,15 @@
556 701 if ( ! empty( $menu_item_arr['subtabs'] ) ) {
557 702 // Folder Item - expand / colapse. Previously: here was : wpbc_admin_ui__sidebar_left__do_max();
558 703 ?>
559 704 <a href="javascript:void(0)"
560 - onclick="javascript: if( ! jQuery( this ).parents('.wpbc_ui_el__level__folder').hasClass('expanded') ) { jQuery( '.wpbc_ui_el__level__folder' ).removeClass('expanded');jQuery( this ).parents('.wpbc_ui_el__level__folder').addClass('expanded'); } else {jQuery( '.wpbc_ui_el__level__folder' ).removeClass('expanded');} "
705 + <?php if ( isset( $menu_item_arr['_wpbc_v3_expanded'] ) ) { ?>
706 + aria-expanded="<?php echo ( 'On' === $menu_item_arr['_wpbc_v3_expanded'] || ( 'when_active' === $menu_item_arr['_wpbc_v3_expanded'] && ! empty( $menu_item_arr['is_active'] ) ) ) ? 'true' : 'false'; ?>"
707 + onkeydown="if ( ' ' === event.key ) { event.preventDefault(); this.click(); }"
708 + onclick="javascript:var wpbc_folder=jQuery(this).closest('.wpbc_ui_el__level__folder');var wpbc_open=wpbc_folder.hasClass('expanded');wpbc_folder.toggleClass('expanded',!wpbc_open);jQuery(this).attr('aria-expanded',wpbc_open?'false':'true');"
709 + <?php } else { ?>
710 + onclick="javascript: if( ! jQuery( this ).parents('.wpbc_ui_el__level__folder').hasClass('expanded') ) { jQuery( '.wpbc_ui_el__level__folder' ).removeClass('expanded');jQuery( this ).parents('.wpbc_ui_el__level__folder').addClass('expanded'); } else {jQuery( '.wpbc_ui_el__level__folder' ).removeClass('expanded');} "
711 + <?php } ?>
561 712 class="wpbc_ui_el__vert_nav_item__a wpbc_ui_el__vert_nav_item__folder">
562 713 <?php if ( ! empty( $menu_item_arr['font_icon'] ) ) { ?>
563 714 <?php // Show icon in max mode, without right tooltip, thanks to '.hide_in_compact_mode'. // FixIn: 10.11.5.8. ?>
564 715 <i class="wpbc_ui_el__vert_nav_icon hide_in_compact_mode menu_icon icon-1x <?php echo esc_attr( $menu_item_arr['font_icon'] ); ?>"
@@ -748,10 +899,15 @@
748 899 */
749 900 function wpbc_ui__vert_left_bar__side_button__do_compact() {
750 901
751 902 ?>
752 - <button class="wpbc_ui__left_sidebar__side_button wpbc_ui__top_nav__btn_hide_left_vertical_nav"
753 - onclick="javascript:wpbc_admin_ui__sidebar_left__do_min();" title="<?php esc_attr_e( 'Set side menu compact', 'booking' ); ?>">
903 + <button type="button" class="wpbc_ui__left_sidebar__side_button wpbc_ui__top_nav__btn_hide_left_vertical_nav"
904 + <?php /* Save user preferences ?>
905 + onclick="event.stopPropagation(); wpbc_admin_ui__sidebar_left__do_min( true ); return false;"
906 + <?php /**/ ?>
907 + <?php /* Not Save user preferences - collpased left menu */ ?>
908 + onclick="event.stopPropagation(); wpbc_admin_ui__sidebar_left__do_min(); return false;"
909 + title="<?php esc_attr_e( 'Minimize side menu', 'booking' ); ?>">
754 910 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
755 911 <path fill="#6B6B6B" d="M16.5 22a1.003 1.003 0 0 1-.71-.29l-9-9a1 1 0 0 1 0-1.42l9-9a1.004 1.004 0 1 1 1.42 1.42L8.91 12l8.3 8.29A.999.999 0 0 1 16.5 22Z"></path>
756 912 </svg>
757 913 </button>
@@ -764,10 +920,10 @@
764 920 * @return void
765 921 */
766 922 function wpbc_ui__vert_left_bar__side_button__do_max() {
767 923 ?>
768 - <button class="wpbc_ui__left_sidebar__side_button wpbc_ui__hide wpbc_ui__top_nav__btn_open_left_vertical_nav"
769 - onclick="javascript:wpbc_admin_ui__sidebar_left__do_max();" title="<?php esc_attr_e( 'Open side menu', 'booking' ); ?>">
924 + <button type="button" class="wpbc_ui__left_sidebar__side_button wpbc_ui__hide wpbc_ui__top_nav__btn_open_left_vertical_nav"
925 + onclick="event.stopPropagation(); wpbc_admin_ui__sidebar_left__do_max( true ); return false;" title="<?php esc_attr_e( 'Open side menu', 'booking' ); ?>">
770 926 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
771 927 <path fill="#6B6B6B" d="M16.5 22a1.003 1.003 0 0 1-.71-.29l-9-9a1 1 0 0 1 0-1.42l9-9a1.004 1.004 0 1 1 1.42 1.42L8.91 12l8.3 8.29A.999.999 0 0 1 16.5 22Z"></path>
772 928 </svg>
773 929 </button>
@@ -861,8 +1017,19 @@
861 1017 do_action( 'wpbc_ui__right_vertical_sidebar_content', $active_page_arr );
862 1018
863 1019 echo ' </div><!-- wpbc_ui_el__vert_right_bar__root_sections_container -->';
864 1020 echo ' </div><!-- wpbc_ui_el__vert_right_bar__content -->';
1021 +
1022 + /**
1023 + * Render an optional page-specific footer outside the scrollable inspector.
1024 + *
1025 + * Callbacks should render the complete footer element and use the native
1026 + * `wpbc_ui_el__vert_right_bar__footer_section` class for positioning.
1027 + *
1028 + * @param array $active_page_arr Active page, tab, and subtab identifiers.
1029 + */
1030 + do_action( 'wpbc_ui__right_vertical_sidebar_footer', $active_page_arr );
1031 +
865 1032 echo '</div><!-- wpbc_ui_el__vert_right_bar__wrapper -->';
866 1033
867 1034 wpbc_start_element_scrollable__with_simplebar( '.wpbc_ui_el__vert_right_bar__wrapper .wpbc_ui_el__vert_right_bar__content' );
868 1035 }