Plugin Directory

Changeset 3377715


Ignore:
Timestamp:
10/13/2025 07:23:40 PM (6 months ago)
Author:
nikitahl
Message:

Add version 2.3.1

Location:
sidebar-navigation-for-wpbakery
Files:
16 added
7 edited

Legend:

Unmodified
Added
Removed
  • sidebar-navigation-for-wpbakery/trunk/assets/dist/css/editor.min.css

    r3336131 r3377715  
    1 @media screen and (min-width:961px){:root{--vc-navbar-width:50px;--vc-min-panel-width:440px}#wpbody,#wpcontent{height:0;padding:0}#vc_navbar{bottom:0;box-shadow:1px 1px 4px rgba(0,0,0,.25);left:0;position:fixed;right:auto;top:0;width:var(--vc-navbar-width);z-index:99999}#vc_navbar .vc_navbar-header,#vc_navbar li{float:none!important;height:auto}#vc_navbar .vc_navbar-brand{padding:25px}#vc_navbar .vc_save-buttons{flex-direction:column;gap:4px;margin:0 2px}#vc_navbar .vc_save-buttons .vc_btn{margin:2px;width:70%}#vc_navbar .vc_save-buttons .vc_btn p{font-size:10px}#vc_navbar a.vc_icon-btn{font-size:20px;height:45px;padding:24px;width:var(--vc-navbar-width)}#vc_navbar .vc_navbar-nav{align-items:center;bottom:0;display:flex;flex-direction:column;left:0;position:absolute;top:56px;width:100%}#vc_navbar .vc_navbar-nav>li:not(.vc_save-buttons){height:48px}#vc_navbar .vc_dropdown-list{left:100%;right:auto;top:-75px;z-index:999999}#vc_navbar #vc_screen-size-control .vc_dropdown-list{top:-145px}#vc_navbar .vc_icon-btn.vc_active{background-color:#00447f}.ui-resizable-handle,.vc_hide-description .vc_element-description{display:none!important}.vc_resizable-handle{cursor:ew-resize;height:100%;position:absolute;top:0;width:10px;z-index:9999}.vc_resizable-handle--left{right:-5px}.vc_resizable-handle--right{left:-5px}#vc_inline-frame-wrapper{height:100vh!important;left:var(--vc-navbar-width);right:0;top:0!important;width:auto!important}#vc_inline-frame{height:100%!important}.vc_ui-panel.vc_ui-panel-window{bottom:0!important;height:100%!important;left:var(--vc-navbar-width)!important;margin:0!important;max-height:100%!important;padding:0!important;top:0!important;width:var(--vc-min-panel-width)!important}.vc_ui-minimize-button{display:none!important}.vc_ui-panel-header-actions,.vc_ui-search-box{width:100%}.vc_message{top:0!important;z-index:99999!important}.vc_add-element-container .wpb-content-layouts{gap:1px}.vc_ui-panel-content{margin-top:0!important}.vc_ui-panel-content.vc_properties-list-init{margin:auto!important}.sidebar-position-right #vc_inline-frame-wrapper{left:0;right:var(--vc-navbar-width)}.sidebar-position-right #vc_navbar{left:auto;right:0}.sidebar-position-right .vc_ui-panel.vc_ui-panel-window{left:auto!important;right:var(--vc-navbar-width)!important}.sidebar-position-right #vc_navbar .vc_dropdown-list{left:auto;right:100%}}@media screen and (min-width:961px)and (max-height:625px){.vc_pull-right.vc_show-mobile{display:block!important;margin-top:auto!important}.vc_pull-right.vc_show-mobile .vc_dropdown-list{bottom:0!important;top:auto!important;width:270px}.vc_hide-mobile{display:none!important}.vc_save-buttons{margin:0!important}.vc_show-mobile .vc_dropdown-list .vc_hide-desktop,.vc_show-mobile .vc_dropdown-list .vc_hide-desktop-more,.vc_show-mobile .vc_dropdown-list .vc_hide-desktop-more .vc_hide-mobile{display:block!important}#vc_navbar-redo.vc_icon-btn,#vc_navbar-undo.vc_icon-btn,.vc_dropdown-list .vc_dropdown-list-item a,.vc_dropdown-list .vc_hide-mobile a.vc_icon-btn,.vc_save-buttons a.vc_icon-btn{align-items:center;display:flex!important;height:56px!important;justify-content:flex-start;padding:18px!important;width:100%!important}.vc_dropdown-list .vc_dropdown-list-item .vc-composer-icon,.vc_dropdown-list a.vc_icon-btn .vc-composer-icon{font-size:24px;left:unset;position:relative;top:unset;transform:unset}.vc_dropdown-list .vc_dropdown-list-item p,.vc_dropdown-list a.vc_icon-btn p{margin:0 0 0 18px!important}}@media screen and (min-width:961px){.vc_frame-size-helper{height:auto;position:absolute;top:10px;width:100%}.vc_frame-size-helper--left{left:calc(100% + 10px)}.vc_frame-size-helper--right{right:calc(100% + 10px);text-align:right}.vc_frame-size-helper-text{align-items:center;background:rgba(0,68,127,.9);border-radius:3px;color:#fff;display:inline-flex;font-size:12px;height:auto;justify-content:center;min-width:70px;padding:1px 6px;width:auto}}.vc_compact-view .wpb-content-layouts-container h4{margin:0 0 10px!important}.vc_compact-view .wpb-content-layouts{grid-template-columns:repeat(auto-fit,96px)!important;margin:0!important}.vc_compact-view .vc_element-description{font-size:12px!important}.vc_compact-view .vc_shortcode-link{font-size:13px}.vc_compact-view .vc_element-icon{margin-bottom:10px}.vc_compact-view .vc_css-editor .vc_settings label,.vc_compact-view .wpb_element_label{font-size:13px;font-weight:500}.vc_compact-view .vc_description{font-size:12px;margin-top:5px}.vc_compact-view .wpb-param-heading{margin-bottom:3px}.vc_compact-view .vc_edit_form_elements input,.vc_compact-view .vc_edit_form_elements select{font-size:13px;height:34px;line-height:1}.vc_compact-view .vc_checkbox input[type=checkbox]:checked:before,.vc_compact-view .vc_edit_form_elements input[type=checkbox],.vc_compact-view .vc_edit_form_elements input[type=radio]{height:16px;width:16px}.vc_compact-view .vc_edit_form_elements .vc_ui-button.vc_param-animation-style-trigger{height:34px;line-height:34px;margin-top:8px}.vc_compact-view .vc_css-editor input{font-size:10px;height:20px;line-height:1;width:30px}.vc_compact-view .gallery_widget_add_images,.vc_compact-view .gallery_widget_attached_images_list .added,.vc_compact-view .gallery_widget_attached_images_list .inner,.vc_compact-view .vc_css-editor .vc_settings .vc_background-image .vc_add-image{height:60px!important;width:60px!important}.vc_compact-view .gallery_widget_attached_images_list li img{max-height:60px!important;vertical-align:initial}.vc_compact-view .wpb_el_type_attach_image .vc_icon-remove{right:12px;width:12px}.vc_compact-view .title-label,.vc_compact-view .url-label,.vc_compact-view .vc_link_label,.vc_compact-view .wpb_el_type_attach_image .vc_icon-remove .vc-c-icon-close,.vc_compact-view .wpb_el_type_attach_images .vc_icon-remove .vc-composer-icon{font-size:12px}.vc_compact-view .vc-icons-selector .selector{height:30px;width:90px}.vc_compact-view .vc-icons-selector .selected-icon{width:50px}.vc_compact-view .vc-icons-selector .selected-icon i,.vc_compact-view .vc-icons-selector .selector-button i,.vc_compact-view .vc_shortcode-param[data-param_type=iconpicker] .vc-icons-selector .selected-icon{font-size:16px;line-height:32px}.vc_compact-view .vc-icons-selector .selector-button i{font-size:12px}.vc_compact-view .vc_simplified .vc_layout-onion label{left:38px}.vc_compact-view .vc_css-editor .vc_layout-onion .vc_border,.vc_compact-view .vc_css-editor .vc_layout-onion .vc_content,.vc_compact-view .vc_css-editor .vc_layout-onion .vc_padding{margin:36px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_bottom{bottom:3px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_top{top:3px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_left{left:3px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_right{right:3px}.vc_compact-view .pickr .pcr-button{height:26px;width:26px}.vc_navbar.vc_navbar-frontend:not(.vc_post-custom-layout-selected) #vc_page-structure{opacity:.2;pointer-events:none}#vc_ui-panel-page-structure{height:auto;left:0;margin-left:auto;margin-right:auto;max-height:90vh;right:0;top:5vh;width:80%}.page-structure-list{margin:0}.page-structure-item{background:#fff;border-radius:3px;padding:5px 12px 12px 5px}#page-structure-container>.page-structure-list>.page-structure-item{margin:0 0 10px}.page-structure-item--section{background:#f8f8f8}.page-structure-item--inner-row,.page-structure-item--row{background:#eee}.page-structure-item--column,.page-structure-item--inner-column{background:#e7e7e7}.page-structure-children{margin:10px 0 0 10px}.element-controls{margin-left:auto;opacity:0;transition:opacity .2s ease-in-out;visibility:hidden}.element-controls .vc_btn-content{padding:3px}.element-controls .vc_control-btn .vc-composer-icon{color:#5e5e5e}.element-controls .vc_control-btn .vc_btn-content:hover{background:transparent}.element-controls .vc-c-icon-search{font-size:18px}.page-structure-label{align-items:center;cursor:default;display:flex;font-size:14px;font-weight:500;padding:7px 5px 0}.page-structure-label:before{content:"";display:inline-block;font-family:vcpb-plugin-icons,sans-serif!important;width:16px;speak:never;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:5px}.page-structure-label:hover .element-controls{opacity:1;visibility:visible}.page-structure-label>span{display:-webkit-box;overflow:hidden;-webkit-line-clamp:1;-webkit-box-orient:vertical}.page-structure-children:hover{position:relative}.page-structure-label--children{cursor:pointer}.page-structure-label--children:before{content:""}.page-structure-label--children.expanded:before{content:""}.vc_message-close{align-items:center;background-color:transparent;border:none;border-radius:30px;cursor:pointer;display:inline-flex;font-size:12px;height:8px;justify-content:center;margin:0;padding:5px;position:absolute;right:6px;top:9px;width:8px}
     1@media screen and (min-width:961px){:root{--vc-navbar-width:50px;--vc-min-panel-width:440px}#wpbody,#wpcontent{height:0;padding:0}#vc_navbar{bottom:0;box-shadow:1px 1px 4px rgba(0,0,0,.25);left:0;position:fixed;right:auto;top:0;width:var(--vc-navbar-width);z-index:99999}#vc_navbar .vc_navbar-header,#vc_navbar li{float:none!important;height:auto}#vc_navbar .vc_navbar-brand{padding:25px}#vc_navbar .vc_save-buttons{flex-direction:column;gap:4px;margin:0 2px}#vc_navbar .vc_save-buttons .vc_btn{margin:2px;width:70%}#vc_navbar .vc_save-buttons .vc_btn p{font-size:10px}#vc_navbar a.vc_icon-btn{font-size:20px;height:45px;padding:24px;width:var(--vc-navbar-width)}#vc_navbar .vc_navbar-nav{align-items:center;bottom:0;display:flex;flex-direction:column;left:0;position:absolute;top:56px;width:100%}#vc_navbar .vc_navbar-nav>li:not(.vc_save-buttons){height:48px}#vc_navbar .vc_dropdown-list{left:100%;right:auto;top:-75px;z-index:999999}#vc_navbar #vc_screen-size-control .vc_dropdown-list{top:-145px}#vc_navbar .vc_icon-btn.vc_active{background-color:#00447f}.ui-resizable-handle,.vc_hide-description .vc_element-description{display:none!important}.vc_resizable-handle{cursor:ew-resize;height:100%;position:absolute;top:0;width:10px;z-index:9999}.vc_resizable-handle--left{right:-5px}.vc_resizable-handle--right{left:-5px}#vc_inline-frame-wrapper{height:100vh!important;left:var(--vc-navbar-width);right:0;top:0!important;width:auto!important}#vc_inline-frame{height:100%!important}.vc_ui-panel.vc_ui-panel-window{bottom:0!important;height:100%!important;left:var(--vc-navbar-width)!important;margin:0!important;max-height:100%!important;padding:0!important;top:0!important;width:var(--vc-min-panel-width)!important}.vc_ui-minimize-button{display:none!important}.vc_ui-panel-header-actions,.vc_ui-search-box{width:100%}.vc_message{top:0!important;z-index:99999!important}.vc_add-element-container .wpb-content-layouts{gap:1px}.vc_ui-panel-content{margin-top:0!important}.vc_ui-panel-content.vc_properties-list-init{margin:auto!important}.sidebar-position-right #vc_inline-frame-wrapper{left:0;right:var(--vc-navbar-width)}.sidebar-position-right #vc_navbar{left:auto;right:0}.sidebar-position-right .vc_ui-panel.vc_ui-panel-window{left:auto!important;right:var(--vc-navbar-width)!important}.sidebar-position-right #vc_navbar .vc_dropdown-list{left:auto;right:100%}}@media screen and (min-width:961px)and (max-height:625px){.vc_pull-right.vc_show-mobile{display:block!important;margin-top:auto!important}.vc_pull-right.vc_show-mobile .vc_dropdown-list{bottom:0!important;top:auto!important;width:270px}.vc_hide-mobile{display:none!important}.vc_save-buttons{margin:0!important}.vc_show-mobile .vc_dropdown-list .vc_hide-desktop,.vc_show-mobile .vc_dropdown-list .vc_hide-desktop-more,.vc_show-mobile .vc_dropdown-list .vc_hide-desktop-more .vc_hide-mobile{display:block!important}#vc_navbar-redo.vc_icon-btn,#vc_navbar-undo.vc_icon-btn,.vc_dropdown-list .vc_dropdown-list-item a,.vc_dropdown-list .vc_hide-mobile a.vc_icon-btn,.vc_save-buttons a.vc_icon-btn{align-items:center;display:flex!important;height:56px!important;justify-content:flex-start;padding:18px!important;width:100%!important}.vc_dropdown-list .vc_dropdown-list-item .vc-composer-icon,.vc_dropdown-list a.vc_icon-btn .vc-composer-icon{font-size:24px;left:unset;position:relative;top:unset;transform:unset}.vc_dropdown-list .vc_dropdown-list-item p,.vc_dropdown-list a.vc_icon-btn p{margin:0 0 0 18px!important}}@media screen and (min-width:961px){.vc_frame-size-helper{height:auto;position:absolute;top:10px;width:100%}.vc_frame-size-helper--left{left:calc(100% + 10px)}.vc_frame-size-helper--right{right:calc(100% + 10px);text-align:right}.vc_frame-size-helper-text{align-items:center;background:rgba(0,68,127,.9);border-radius:3px;color:#fff;display:inline-flex;font-size:12px;height:auto;justify-content:center;min-width:70px;padding:1px 6px;width:auto}}.vc_compact-view .wpb-content-layouts-container h4{margin:0 0 10px!important}.vc_compact-view .wpb-content-layouts{grid-template-columns:repeat(auto-fit,96px)!important;margin:0!important}.vc_compact-view .vc_element-description{font-size:12px!important}.vc_compact-view .vc_shortcode-link{font-size:13px}.vc_compact-view .vc_element-icon{margin-bottom:10px}.vc_compact-view .vc_css-editor .vc_settings label,.vc_compact-view .wpb_element_label{font-size:13px;font-weight:500}.vc_compact-view .vc_description{font-size:12px;margin-top:5px}.vc_compact-view .wpb-param-heading{margin-bottom:3px}.vc_compact-view .vc_edit_form_elements input,.vc_compact-view .vc_edit_form_elements select{font-size:13px;height:34px;line-height:1}.vc_compact-view .vc_checkbox input[type=checkbox]:checked:before,.vc_compact-view .vc_edit_form_elements input[type=checkbox],.vc_compact-view .vc_edit_form_elements input[type=radio]{height:16px;width:16px}.vc_compact-view .vc_edit_form_elements .vc_ui-button.vc_param-animation-style-trigger{height:34px;line-height:34px;margin-top:8px}.vc_compact-view .vc_css-editor input{font-size:10px;height:20px;line-height:1;width:30px}.vc_compact-view .gallery_widget_add_images,.vc_compact-view .gallery_widget_attached_images_list .added,.vc_compact-view .gallery_widget_attached_images_list .inner,.vc_compact-view .vc_css-editor .vc_settings .vc_background-image .vc_add-image{height:60px!important;width:60px!important}.vc_compact-view .gallery_widget_attached_images_list li img{max-height:60px!important;vertical-align:initial}.vc_compact-view .wpb_el_type_attach_image .vc_icon-remove{right:12px;width:12px}.vc_compact-view .title-label,.vc_compact-view .url-label,.vc_compact-view .vc_link_label,.vc_compact-view .wpb_el_type_attach_image .vc_icon-remove .vc-c-icon-close,.vc_compact-view .wpb_el_type_attach_images .vc_icon-remove .vc-composer-icon{font-size:12px}.vc_compact-view .vc-icons-selector .selector{height:30px;width:90px}.vc_compact-view .vc-icons-selector .selected-icon{width:50px}.vc_compact-view .vc-icons-selector .selected-icon i,.vc_compact-view .vc-icons-selector .selector-button i,.vc_compact-view .vc_shortcode-param[data-param_type=iconpicker] .vc-icons-selector .selected-icon{font-size:16px;line-height:32px}.vc_compact-view .vc-icons-selector .selector-button i{font-size:12px}.vc_compact-view .vc_simplified .vc_layout-onion label{left:38px}.vc_compact-view .vc_css-editor .vc_layout-onion .vc_border,.vc_compact-view .vc_css-editor .vc_layout-onion .vc_content,.vc_compact-view .vc_css-editor .vc_layout-onion .vc_padding{margin:36px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_bottom{bottom:3px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_top{top:3px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_left{left:3px}.vc_compact-view .vc_css-editor .vc_layout-onion input.vc_right{right:3px}.vc_compact-view .pickr .pcr-button{height:26px;width:26px}.vc_navbar.vc_navbar-frontend:not(.vc_post-custom-layout-selected) #vc_page-structure{opacity:.2;pointer-events:none}#vc_ui-panel-page-structure{height:auto;left:0;margin-left:auto;margin-right:auto;max-height:90vh;right:0;top:5vh;width:80%}.page-structure-list{margin:0}.page-structure-item{background:#fff;border-radius:3px;padding:5px 12px 12px 5px}#page-structure-container>.page-structure-list>.page-structure-item{margin:0 0 10px}.page-structure-item--section{background:#f8f8f8}.page-structure-item--flexbox-container,.page-structure-item--grid-container,.page-structure-item--inner-row,.page-structure-item--row{background:#eee}.page-structure-item--column,.page-structure-item--flexbox-item,.page-structure-item--grid-item,.page-structure-item--inner-column{background:#e7e7e7}.page-structure-children{margin:10px 0 0 10px}.element-controls{margin-left:auto;opacity:0;transition:opacity .2s ease-in-out;visibility:hidden}.element-controls .vc_btn-content{padding:3px}.element-controls .vc_control-btn .vc-composer-icon{color:#5e5e5e}.element-controls .vc_control-btn .vc_btn-content:hover{background:transparent}.element-controls .vc-c-icon-search{font-size:18px}.page-structure-label{align-items:center;cursor:default;display:flex;font-size:14px;font-weight:500;padding:7px 5px 0}.page-structure-label:before{content:"";display:inline-block;font-family:vcpb-plugin-icons,sans-serif!important;width:16px;speak:never;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:5px}.page-structure-label:hover .element-controls{opacity:1;visibility:visible}.page-structure-label>span{display:-webkit-box;overflow:hidden;-webkit-line-clamp:1;-webkit-box-orient:vertical}.page-structure-children:hover{position:relative}.page-structure-label--children{cursor:pointer}.page-structure-label--children:before{content:""}.page-structure-label--children.expanded:before{content:""}.vc_message-close{align-items:center;background-color:transparent;border:none;border-radius:30px;cursor:pointer;display:inline-flex;font-size:12px;height:8px;justify-content:center;margin:0;padding:5px;position:absolute;right:6px;top:9px;width:8px}
  • sidebar-navigation-for-wpbakery/trunk/assets/dist/js/editor.min.js

    r3336131 r3377715  
    1 (()=>{"use strict";const{vc:e}=window;const t=jQuery,{vc:i}=window;let s=null;function n(e){const t=i.$frame_body.find(`[data-model-id="${e}"]`);t.length&&function(e,t){if(!e)return;new IntersectionObserver(((e,i)=>{e.forEach((e=>{e.isIntersecting&&(i.unobserve(e.target),t(e.target))}))}),{threshold:.1}).observe(e),e.scrollIntoView({behavior:"smooth",block:"start"})}(t[0],(()=>{!function(e){e.append(s),s.css({zIndex:9999,opacity:"1",visibility:"visible",top:0,left:0,width:"100%",height:"100%"}),setTimeout((()=>s.css({opacity:"0",visibility:"hidden",zIndex:-1})),1800)}(t)}))}t(document).ready((()=>{i.events.on("app.render",(()=>{!s&&i.$frame_body&&function(){const e=t('<div class="sfw-element-helper"><div>');e.css({position:"absolute",opacity:"0",visibility:"hidden",zIndex:-1,boxShadow:"0 0 4px 2px rgb(10, 130, 240, 0.5)",background:"rgba(10, 130, 240, 0.2)",pointerEvents:"none",transition:"box-shadow 0.8s ease-in-out, background 0.8s ease-in-out"}),i.$frame_body.append(e),s=i.$frame_body.find(".sfw-element-helper")}()}))}));const a=window.jQuery,{vc:r}=window;class o{constructor(){this.panelMinWidth=440,this.navbarWidth=50,this.currentPanelWidth=this.panelMinWidth,this.pluginUrl=window.sidebar_for_wpb_js.pluginUrl,this.disableDescription=window.sidebar_for_wpb_js.disableDescription,this.compactView=window.sidebar_for_wpb_js.compactView,this.compactViewEditForm=window.sidebar_for_wpb_js.compactViewEditForm,this.responsiveView=window.sidebar_for_wpb_js.responsiveView,this.sidebarPostion=window.sidebar_for_wpb_js.sidebarPostion,this.pageStructureFind=window.sidebar_for_wpb_js.pageStructureFind,this.$window=a(window),this.$body=a("body"),this.$screenSizeControls=a("#vc_screen-size-control .vc_screen-width"),this.$addElementPanel=a("#vc_ui-panel-add-element"),this.$editElementPanel=a("#vc_ui-panel-edit-element"),this.$settingsPanel=a("#vc_ui-panel-post-settings"),this.$navbar=a("#vc_navbar"),this.$frameWrapper=a("#vc_inline-frame-wrapper"),this.$iframe=a("#vc_inline-frame"),this.$navbarItems=this.$navbar.find(".vc_navbar-nav li"),this.$panelWindow=a(".vc_ui-panel-window"),this.$navbarBtns=this.$navbar.find(".vc_icon-btn"),this.$frameSizeHelper=null,this.isPanelResizing=!1,this.panelsSettings=[{panelId:"panel-add-element",navbarBtnId:"vc_add-new-element"},{panelId:"panel-templates",navbarBtnId:"vc_templates-editor-button"},{panelId:"panel-post-seo",navbarBtnId:"vc_seo-button"},{panelId:"panel-post-settings",navbarBtnId:"vc_post-settings-button"},{panelId:"panel-page-structure",navbarBtnId:"vc_page-structure"},{panelId:"panel-custom-code",navbarBtnId:"vc_custom-code-button"}],this.init()}init(){this.$body.addClass(`sidebar-position-${this.sidebarPostion}`),a.each(this.$navbarItems,this.setNavbarItems.bind(this)),this.$body.append(`<link rel="stylesheet" href="${this.pluginUrl}/assets/dist/css/editor.min.css" type="text/css" />`);const e=new MutationObserver(this.mutationHandler.bind(this)),t={attributes:!0};this.$panelWindow.append(`<div class="vc_resizable-handle vc_resizable-handle--${this.sidebarPostion}"></div>`),this.$panelWindow.each((function(){e.observe(this,t)})),this.setActiveBtn(this.$panelWindow.filter(".vc_active")),this.handleWindowResize(),this.setSettings(),this.addLocateIconToEditForm(),this.$window.on("resize",this.handleWindowResize.bind(this)),this.$panelWindow.on("mousedown",".vc_resizable-handle",this.handlePanelResize.bind(this))}mutationHandler(e){e.forEach((e=>{window.innerWidth>960&&"attributes"===e.type&&"class"===e.attributeName&&(this.setFrameWrapperPosition(),this.setActiveBtn(a(e.target)))}))}handleWindowResize(e){!this.isPanelResizing&&e&&e.target&&e.target===window&&this.setFrameWrapperPosition()}setFrameWrapperPosition(){const e=this.getCurrentView();if(window.innerWidth>960){const t=this.$panelWindow.filter(".vc_active");t.length?(this.$frameWrapper.css(this.sidebarPostion,`${this.currentPanelWidth+this.navbarWidth}px`),this.setIframeWidth(e,`${window.innerWidth}px`,"auto"),t.attr("style",`width: ${this.currentPanelWidth}px !important;`),t.is("#vc_ui-panel-templates")&&t.hasClass("vc_media-xs")&&(t.removeClass("vc_media-xs"),t.addClass("vc_media-sm"))):(this.$frameWrapper.css(this.sidebarPostion,this.navbarWidth),this.setIframeWidth(e,"100%","none"))}else this.$frameWrapper.css(this.sidebarPostion,"0"),this.setIframeWidth(e,"100%","none"),this.$panelWindow.attr("style","")}setIframeWidth(e,t,i){"0"===this.responsiveView&&(100===e?(this.$frameWrapper.css("overflow-x",i),this.$iframe.css("width",t)):(this.$frameWrapper.css("overflow-x","auto"),this.$iframe.css("width",`${e}px`)))}getCurrentView(){return parseInt(this.$screenSizeControls.filter(".active").attr("data-size"))}setActiveBtn(e){if(this.$navbarBtns.removeClass("vc_active"),e.hasClass("vc_active")){const t=e.attr("data-vc-ui-element"),i=this.panelsSettings.find((e=>e.panelId===t));if(i){const e=i.navbarBtnId;this.$navbar.find(`.vc_navbar-nav > li > #${e}`).addClass("vc_active")}}}setSettings(){"1"===this.disableDescription&&this.$addElementPanel.find(".wpb-elements-list").addClass("vc_hide-description"),"1"===this.compactView&&this.$addElementPanel.find(".wpb-elements-list").addClass("vc_compact-view"),"1"===this.compactViewEditForm&&(this.$editElementPanel.find(".vc_ui-panel-content").addClass("vc_compact-view"),this.$settingsPanel.find(".vc_ui-panel-content-container").addClass("vc_compact-view"))}setNavbarItems(e,t){const i=a(t),s=i.children();s.hasClass("vc_back-button")?i.css("order","11"):s.hasClass("vc_dropdown-more")?i.css("order","10"):s.hasClass("vc_btn-save")?i.css("order","9"):"vc_screen-size-control"===s.attr("id")?i.css("order","8"):s.hasClass("vc_post-settings")?i.css("order","7"):"vc_custom-code-button"===s.attr("id")?i.css("order","6"):s.hasClass("vc_seo-button")&&i.css({order:"5","margin-top":"auto"})}handlePanelResize(e){const t=a(e.target).closest(".vc_ui-panel-window"),i=this.panelMinWidth;let s="";s="left"===this.sidebarPostion?t.position().left:t.position().left+t.width(),this.$iframe.css("pointer-events","none"),this.$body.css({cursor:"ew-resize","user-select":"none"}),this.$body.on("mousemove",(e=>{const n=e.pageX;this.isPanelResizing=!0;const a=this.getCurrentView();if("left"===this.sidebarPostion&&n>s+i){const e=n-s,i=n;this.setFrameSizeOnPanelResize(e,a,t,i)}else if("right"===this.sidebarPostion&&n<s-i){const e=s-n,i=e+this.navbarWidth+"px";this.setFrameSizeOnPanelResize(e,a,t,i)}})),this.$body.on("mouseup",(()=>{this.isPanelResizing=!1,this.$frameSizeHelper.hide(),this.$body.off("mousemove"),this.$body.css({cursor:"auto","user-select":"auto"}),this.$iframe.css("pointer-events","auto")}))}showFrameSizeHelper(e){let t=e.find(".vc_frame-size-helper");0===t.length?(t=a(`<div class="vc_frame-size-helper vc_frame-size-helper--${this.sidebarPostion}"></div>`),t.append('<span class="vc_frame-size-helper-text"></span>'),this.$frameSizeHelper=t,e.append(t)):t.show(),this.$frameSizeHelper=t;const i=this.$frameSizeHelper.find(".vc_frame-size-helper-text"),s=this.$iframe[0].contentWindow.innerWidth,n=this.$iframe[0].contentWindow.innerHeight;i.text(`${s}px × ${n}px`)}setFrameSizeOnPanelResize(e,t,i){this.currentPanelWidth=e,this.$panelWindow.attr("style",`width: ${e}px !important;`),this.$frameWrapper.css(this.sidebarPostion,e+this.navbarWidth+"px"),this.showFrameSizeHelper(i),"0"===this.responsiveView?this.setIframeWidth(t,`${window.innerWidth}px`,"auto"):this.$window.trigger("resize")}addLocateIconToEditForm(){if(this.$editElementPanel.length>0){const e=a(`<button class="vc_general vc_ui-control-button" title="${this.pageStructureFind} element on page"><i class="vc-composer-icon vc-c-icon-search"></i></button>`);this.$editElementPanel.find(".vc_ui-panel-header-controls").prepend(e),e.on("click",(()=>{n(r.active_panel.model.get("id"))}))}}}const{vc:c,_:d,jQuery:l}=window,h=l;class p{constructor(){this.$wpbodyContent=h("#wpbody-content"),this.$navbar=h("#vc_navbar"),this.$navbarItems=this.$navbar.find(".vc_navbar-nav li"),this.structureIconHtml='\n      <svg width="27" height="27" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">\n        <rect x="10" y="40" width="44" height="12" rx="2" stroke="white" stroke-width="2" fill="transparent"/>\n        <rect x="10" y="26" width="44" height="12" rx="2" stroke="white" stroke-width="2" fill="transparent"/>\n        <rect x="10" y="12" width="44" height="12" rx="2" stroke="white" stroke-width="2" fill="transparent"/>\n      </svg>\n    ',this.pageStructureHtml=window.sidebar_for_wpb_js.pageStructureHtml,this.pageStructureTitle=window.sidebar_for_wpb_js.pageStructureTitle,this.pageStructureFind=window.sidebar_for_wpb_js.pageStructureFind,this.$pageStructurePanel=null,this.pageStructurePanel=null,this.$pageStructureContainer=null,this.structuredData=[],this.expandedNodes={},this.debouncedRender=d.debounce(this.renderPageStructure.bind(this),500),this.init()}init(){this.addPageStructurePanel(),this.addNavbarIcon()}addNavbarIcon(){const e=h("<li></li>");e.html(`\n      <a class="vc_icon-btn" id="vc_page-structure" title="Page Structure">\n        <i class="vc-composer-icon vc-icon-structure">${this.structureIconHtml}</i>\n      </a>\n    `),this.$navbarItems.eq(1).after(e);const t=h("#vc_page-structure");t.length&&t.on("click",this.handlePageStructureClick.bind(this))}addPageStructurePanel(){this.$wpbodyContent.append(this.pageStructureHtml),this.$pageStructurePanel=h("#vc_ui-panel-page-structure"),this.$pageStructureContainer=this.$pageStructurePanel.find("#page-structure-container"),this.$pageStructurePanel.length&&this.$pageStructurePanel.find("h3").text(this.pageStructureTitle),this.createPanelView()}handlePageStructureClick(){this.pageStructurePanel.render()}createPanelView(){c.PageStructurePanel||(c.PageStructurePanelView=c.PanelView.extend({}),c.PageStructurePanel=c.PageStructurePanelView.vcExtendUI(c.HelperPanelViewHeaderFooter).extend({panelName:"page_structure",isRendered:!1,initialize:()=>{this.isRendered||(this.isRendered=!0,this.renderPageStructure(),c.events.on("afterLoadShortcode",this.debouncedRender),c.events.on("afterRemoveShortcode",this.debouncedRender))},render:function(){this.$el.is(":hidden")&&c.closeActivePanel(),c.active_panel=this,this.show()},show:function(){this.$el.hasClass("vc_active")||(this.$el.addClass("vc_active"),this.trigger("show"))}}),this.pageStructurePanel=new c.PageStructurePanel({el:"#vc_ui-panel-page-structure"}))}buildTree(e){const t=new Map,i=[];return e.forEach((e=>t.set(e.id,{...e,children:[]}))),e.forEach((e=>{if(e.attributes.parent_id){const i=t.get(e.attributes.parent_id);i&&i.children.push(t.get(e.id))}else i.push(t.get(e.id))})),i}renderPageStructure(){this.structuredData=this.buildTree(c.shortcodes.models),this.$pageStructureContainer.empty(),this.$pageStructureContainer.append(this.createTreeHTML(this.structuredData)),this.$pageStructureContainer.off("click mouseenter mouseleave",".page-structure-label"),this.$pageStructureContainer.off("click",".vc_control-btn"),this.$pageStructureContainer.on("click",".page-structure-label",(e=>{if(h(e.target).closest(".element-controls").length)return;const t=h(e.currentTarget),i=`node-${t.attr("id")}`;this.expandedNodes[i]=!Object.prototype.hasOwnProperty.call(this.expandedNodes,i)||!this.expandedNodes[i],t.toggleClass("expanded"),t.next().slideToggle(200)})),this.$pageStructurePanel.on("click",".vc_control-btn",(e=>{e.preventDefault(),e.stopPropagation();const t=h(e.currentTarget),i=t.closest(".page-structure-label").attr("id");switch(t.data("control")){case"inspect":n(i);break;case"edit":this.editElement(i)}}))}createTreeHTML(e){if(!e?.length)return"";const t=h('<ul class="page-structure-list"></ul>');return e.forEach((e=>{const i=e?.id||"",s=`node-${i}`,n=this.expandedNodes[s]||!1;let a=e?.settings?.name;if("Row"===a){const t=e?.attributes?.params?.row_title;a+=t?` (${t})`:""}a=a||"Unnamed Element";const r=h(`\n        <li class="page-structure-item ${this.createNodeClasses(e)||""}">\n          <div class="page-structure-label" title="${a}" id="${i}">\n            <span>\n              ${a}\n            </span>\n            <div class="element-controls">\n              <a class="vc_control-btn vc_control-btn-inspect" data-control="inspect" href="#" title="${this.pageStructureFind} ${a}" target="_blank"><span class="vc_btn-content"><i class="vc-composer-icon vc-c-icon-search"></i></span></a>\n              <a class="vc_control-btn vc_control-btn-edit" data-control="edit" href="#" title="${window.i18nLocale.edit} ${a}" target="_blank"><span class="vc_btn-content"><i class="vc-composer-icon vc-c-icon-mode_edit"></i></span></a>\n            </div>\n          </div>\n        </li>\n      `);if(e?.children?.length){const t=h('<div class="page-structure-children"></div>').append(this.createTreeHTML(e.children));n||t.hide(),r.find(".page-structure-label").addClass("page-structure-label--children"),r.append(t)}t.append(r)})),t}createNodeClasses(e){switch(e?.settings?.name){case"Section":return"page-structure-item--section";case"Row":return"page-structure-item--row";case"Column":return"page-structure-item--column";case"Inner Row":return"page-structure-item--inner-row";case"Inner Column":return"page-structure-item--inner-column";default:return}}editElement(e){if("edit_element"!==c.activePanelName()||!c.active_panel.model||c.active_panel.model.get("id")!==e){const t=c.shortcodes.get(e);c.closeActivePanel(),c.edit_element_block_view.render(t)}}}const u=jQuery,{vc:v}=window;class w{constructor(){this.$message=null,this.showNotification=this.showNotification.bind(this),this.hideNotification=this.hideNotification.bind(this),this.init()}init(){v.showMessage=this.showNotification,window.vc_user_access&&!window.vc_user_access().partAccess("unfiltered_html")&&v.showMessage(window.i18nLocale.unfiltered_html_access,"type-error",15e3)}hideNotification(){this.$message.slideUp(500,(function(){u(this).remove()})),v.message_timeout&&this.$message&&(window.clearTimeout(v.message_timeout),v.message_timeout=!1)}showNotification(e,t,i,s){v.message_timeout&&(u(".vc_message").remove(),window.clearTimeout(v.message_timeout)),t||(t="success"),i||(i=1e4);const n=window.vc_mode&&"admin_page"===window.vc_mode?".metabox-composer-content":"body",a=s||n,r=u('<span class="vc_message-close"><i class="vc-composer-icon vc-c-icon-close"></i></span>');this.$message=u('<div class="vc_message '+t+'" style="z-index: 999;">'+e+"</div>"),r.on("click",this.hideNotification),this.$message.append(r),this.$message.prependTo(u(a)),this.$message.fadeIn(500),v.message_timeout=window.setTimeout(this.hideNotification,i)}}const m=jQuery;m(document).ready((()=>{!function(){const t=window.InlineShortcodeView.prototype.removeView;window.InlineShortcodeView.prototype.removeView=function(i){t.call(this,i),e.events.trigger("afterRemoveShortcode")}}(),m(window).on("vc_build",(()=>{"1"===window.sidebar_for_wpb_js.pageStructure&&new p,new w,new o}))}))})();
     1(()=>{"use strict";const{vc:e}=window;const{vc:t,jQuery:i}=window,s=i;let n=null;function a(e){const i=t.$frame_body.find(`[data-model-id="${e}"]`);i.length&&function(e,t){if(!e)return;new IntersectionObserver(((e,i)=>{e.forEach((e=>{e.isIntersecting&&(i.unobserve(e.target),t(e.target))}))}),{threshold:.1}).observe(e),e.scrollIntoView({behavior:"smooth",block:"start"})}(i[0],(()=>{!function(e){e.append(n),n.css({zIndex:9999,opacity:"1",visibility:"visible",top:0,left:0,width:"100%",height:"100%"}),setTimeout((()=>n.css({opacity:"0",visibility:"hidden",zIndex:-1})),1800)}(i)}))}s(document).ready((()=>{t.events.on("app.render",(()=>{!n&&t.$frame_body&&function(){const e=s('<div class="sfw-element-helper"><div>');e.css({position:"absolute",opacity:"0",visibility:"hidden",zIndex:-1,boxShadow:"0 0 4px 2px rgb(10, 130, 240, 0.5)",background:"rgba(10, 130, 240, 0.2)",pointerEvents:"none",transition:"box-shadow 0.8s ease-in-out, background 0.8s ease-in-out"}),t.$frame_body.append(e),n=t.$frame_body.find(".sfw-element-helper")}()}))}));const r=window.jQuery,{vc:o}=window;class c{constructor(){this.panelMinWidth=440,this.navbarWidth=50,this.currentPanelWidth=this.panelMinWidth,this.pluginUrl=window.sidebar_for_wpb_js.pluginUrl,this.disableDescription=window.sidebar_for_wpb_js.disableDescription,this.compactView=window.sidebar_for_wpb_js.compactView,this.compactViewEditForm=window.sidebar_for_wpb_js.compactViewEditForm,this.responsiveView=window.sidebar_for_wpb_js.responsiveView,this.sidebarPostion=window.sidebar_for_wpb_js.sidebarPostion,this.pageStructureFind=window.sidebar_for_wpb_js.pageStructureFind,this.$window=r(window),this.$body=r("body"),this.$screenSizeControls=r("#vc_screen-size-control .vc_screen-width"),this.$addElementPanel=r("#vc_ui-panel-add-element"),this.$editElementPanel=r("#vc_ui-panel-edit-element"),this.$settingsPanel=r("#vc_ui-panel-post-settings"),this.$navbar=r("#vc_navbar"),this.$frameWrapper=r("#vc_inline-frame-wrapper"),this.$iframe=r("#vc_inline-frame"),this.$navbarItems=this.$navbar.find(".vc_navbar-nav li"),this.$panelWindow=r(".vc_ui-panel-window"),this.$navbarBtns=this.$navbar.find(".vc_icon-btn"),this.$frameSizeHelper=null,this.isPanelResizing=!1,this.isPanelAsSidebar=!1,this.panelsSettings=[{panelId:"panel-add-element",navbarBtnId:"vc_add-new-element"},{panelId:"panel-templates",navbarBtnId:"vc_templates-editor-button"},{panelId:"panel-post-seo",navbarBtnId:"vc_seo-button"},{panelId:"panel-post-settings",navbarBtnId:"vc_post-settings-button"},{panelId:"panel-page-structure",navbarBtnId:"vc_page-structure"},{panelId:"panel-custom-code",navbarBtnId:"vc_custom-code-button"}],this.init()}init(){this.$body.addClass(`sidebar-position-${this.sidebarPostion}`),r.each(this.$navbarItems,this.setNavbarItems.bind(this)),this.$body.append(`<link rel="stylesheet" href="${this.pluginUrl}/assets/dist/css/editor.min.css" type="text/css" />`);const e=new MutationObserver(this.mutationHandler.bind(this)),t={attributes:!0};this.$panelWindow.append(`<div class="vc_resizable-handle vc_resizable-handle--${this.sidebarPostion}"></div>`),this.$panelWindow.each((function(){e.observe(this,t)})),this.setActiveBtn(this.$panelWindow.filter(".vc_active")),this.handleWindowResize(),this.setSettings(),this.addLocateIconToEditForm(),this.$window.on("resize",this.handleWindowResize.bind(this)),this.$panelWindow.on("mousedown",".vc_resizable-handle",this.handlePanelResize.bind(this))}mutationHandler(e){e.forEach((e=>{const t="attributes"===e.type&&"style"===e.attributeName&&""!==e.target.style.visibility,i="attributes"===e.type&&"class"===e.attributeName;window.innerWidth>960&&(t||i)&&(this.setFrameWrapperPosition(),this.setActiveBtn(r(e.target)))}))}handleWindowResize(e){const t=e&&e.target&&e.target===window,i=this.isActivePanelVisible()&&window.innerWidth>960;this.isPanelResizing||!t&&!i||this.setFrameWrapperPosition()}setFrameWrapperPosition(){const e=this.getCurrentView();if(window.innerWidth>960){const t=this.$panelWindow.filter(".vc_active");t.length&&this.isActivePanelVisible()?(this.$frameWrapper.css(this.sidebarPostion,`${this.currentPanelWidth+this.navbarWidth}px`),this.setIframeWidth(e,`${window.innerWidth}px`,"auto"),t.attr("style",`width: ${this.currentPanelWidth}px !important;`),t.is("#vc_ui-panel-templates")&&t.hasClass("vc_media-xs")&&(t.removeClass("vc_media-xs"),t.addClass("vc_media-sm"))):(this.$frameWrapper.css(this.sidebarPostion,this.navbarWidth),this.setIframeWidth(e,"100%","none")),this.isPanelAsSidebar=!0}else this.isPanelAsSidebar&&(this.isPanelAsSidebar=!1,this.$frameWrapper.css(this.sidebarPostion,"0"),this.setIframeWidth(e,"100%","none"),this.$panelWindow.attr("style",""))}setIframeWidth(e,t,i){"0"===this.responsiveView&&(100===e?(this.$frameWrapper.css("overflow-x",i),this.$iframe.css("width",t)):(this.$frameWrapper.css("overflow-x","auto"),this.$iframe.css("width",`${e}px`)))}getCurrentView(){return parseInt(this.$screenSizeControls.filter(".active").attr("data-size"))}setActiveBtn(e){if(this.$navbarBtns.removeClass("vc_active"),e.hasClass("vc_active")){const t=e.attr("data-vc-ui-element"),i=this.panelsSettings.find((e=>e.panelId===t));if(i){const e=i.navbarBtnId;this.$navbar.find(`.vc_navbar-nav > li > #${e}`).addClass("vc_active")}}}setSettings(){"1"===this.disableDescription&&this.$addElementPanel.find(".wpb-elements-list").addClass("vc_hide-description"),"1"===this.compactView&&this.$addElementPanel.find(".wpb-elements-list").addClass("vc_compact-view"),"1"===this.compactViewEditForm&&(this.$editElementPanel.find(".vc_ui-panel-content").addClass("vc_compact-view"),this.$settingsPanel.find(".vc_ui-panel-content-container").addClass("vc_compact-view"))}setNavbarItems(e,t){const i=r(t),s=i.children();s.hasClass("vc_back-button")?i.css("order","11"):s.hasClass("vc_dropdown-more")?i.css("order","10"):s.hasClass("vc_btn-save")?i.css("order","9"):"vc_screen-size-control"===s.attr("id")?i.css("order","8"):s.hasClass("vc_post-settings")?i.css("order","7"):"vc_custom-code-button"===s.attr("id")?i.css("order","6"):s.hasClass("vc_seo-button")&&i.css({order:"5","margin-top":"auto"})}handlePanelResize(e){const t=r(e.target).closest(".vc_ui-panel-window"),i=this.panelMinWidth;let s="";s="left"===this.sidebarPostion?t.position().left:t.position().left+t.width(),this.$iframe.css("pointer-events","none"),this.$body.css({cursor:"ew-resize","user-select":"none"}),this.$body.on("mousemove",(e=>{const n=e.pageX;this.isPanelResizing=!0;const a=this.getCurrentView();if("left"===this.sidebarPostion&&n>s+i){const e=n-s,i=n;this.setFrameSizeOnPanelResize(e,a,t,i)}else if("right"===this.sidebarPostion&&n<s-i){const e=s-n,i=e+this.navbarWidth+"px";this.setFrameSizeOnPanelResize(e,a,t,i)}})),this.$body.on("mouseup",(()=>{this.isPanelResizing=!1,this.$frameSizeHelper.hide(),this.$body.off("mousemove"),this.$body.css({cursor:"auto","user-select":"auto"}),this.$iframe.css("pointer-events","auto")}))}showFrameSizeHelper(e){let t=e.find(".vc_frame-size-helper");0===t.length?(t=r(`<div class="vc_frame-size-helper vc_frame-size-helper--${this.sidebarPostion}"></div>`),t.append('<span class="vc_frame-size-helper-text"></span>'),this.$frameSizeHelper=t,e.append(t)):t.show(),this.$frameSizeHelper=t;const i=this.$frameSizeHelper.find(".vc_frame-size-helper-text"),s=this.$iframe[0].contentWindow.innerWidth,n=this.$iframe[0].contentWindow.innerHeight;i.text(`${s}px × ${n}px`)}setFrameSizeOnPanelResize(e,t,i){this.currentPanelWidth=e,this.$panelWindow.attr("style",`width: ${e}px !important;`),this.$frameWrapper.css(this.sidebarPostion,e+this.navbarWidth+"px"),this.showFrameSizeHelper(i),"0"===this.responsiveView?this.setIframeWidth(t,`${window.innerWidth}px`,"auto"):this.$window.trigger("resize")}addLocateIconToEditForm(){if(this.$editElementPanel.length>0){const e=r(`<button class="vc_general vc_ui-control-button" title="${this.pageStructureFind} element on page"><i class="vc-composer-icon vc-c-icon-search"></i></button>`);this.$editElementPanel.find(".vc_ui-panel-header-controls").prepend(e),e.on("click",(()=>{a(o.active_panel.model.get("id"))}))}}isActivePanelVisible(){const e=this.$panelWindow.filter(".vc_active");return e.length&&"hidden"!==e.css("visibility")&&"none"!==e.css("display")}}const{vc:d,_:l,jQuery:h}=window,u=h;class p{constructor(){this.$wpbodyContent=u("#wpbody-content"),this.$navbar=u("#vc_navbar"),this.$navbarItems=this.$navbar.find(".vc_navbar-nav li"),this.structureIconHtml='\n      <svg width="27" height="27" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">\n        <rect x="10" y="40" width="44" height="12" rx="2" stroke="white" stroke-width="2" fill="transparent"/>\n        <rect x="10" y="26" width="44" height="12" rx="2" stroke="white" stroke-width="2" fill="transparent"/>\n        <rect x="10" y="12" width="44" height="12" rx="2" stroke="white" stroke-width="2" fill="transparent"/>\n      </svg>\n    ',this.pageStructureHtml=window.sidebar_for_wpb_js.pageStructureHtml,this.pageStructureTitle=window.sidebar_for_wpb_js.pageStructureTitle,this.pageStructureFind=window.sidebar_for_wpb_js.pageStructureFind,this.$pageStructurePanel=null,this.pageStructurePanel=null,this.$pageStructureContainer=null,this.structuredData=[],this.expandedNodes={},this.debouncedRender=l.debounce(this.renderPageStructure.bind(this),500),this.init()}init(){this.addPageStructurePanel(),this.addNavbarIcon()}addNavbarIcon(){const e=u("<li></li>");e.html(`\n      <a class="vc_icon-btn" id="vc_page-structure" title="Page Structure">\n        <i class="vc-composer-icon vc-icon-structure">${this.structureIconHtml}</i>\n      </a>\n    `),this.$navbarItems.eq(1).after(e);const t=u("#vc_page-structure");t.length&&t.on("click",this.handlePageStructureClick.bind(this))}addPageStructurePanel(){this.$wpbodyContent.append(this.pageStructureHtml),this.$pageStructurePanel=u("#vc_ui-panel-page-structure"),this.$pageStructureContainer=this.$pageStructurePanel.find("#page-structure-container"),this.$pageStructurePanel.length&&this.$pageStructurePanel.find("h3").text(this.pageStructureTitle),this.createPanelView()}handlePageStructureClick(){this.pageStructurePanel.render()}createPanelView(){d.PageStructurePanel||(d.PageStructurePanelView=d.PanelView.extend({}),d.PageStructurePanel=d.PageStructurePanelView.vcExtendUI(d.HelperPanelViewHeaderFooter).extend({panelName:"page_structure",isRendered:!1,initialize:()=>{this.isRendered||(this.isRendered=!0,this.renderPageStructure(),d.events.on("afterLoadShortcode",this.debouncedRender),d.events.on("afterRemoveShortcode",this.debouncedRender))},render:function(){this.$el.is(":hidden")&&d.closeActivePanel(),d.active_panel=this,this.show()},show:function(){this.$el.hasClass("vc_active")||(this.$el.addClass("vc_active"),this.trigger("show"))}}),this.pageStructurePanel=new d.PageStructurePanel({el:"#vc_ui-panel-page-structure"}))}buildTree(e){const t=new Map,i=[];return e.forEach((e=>t.set(e.id,{...e,children:[]}))),e.forEach((e=>{if(e.attributes.parent_id){const i=t.get(e.attributes.parent_id);i&&i.children.push(t.get(e.id))}else i.push(t.get(e.id))})),i}renderPageStructure(){this.structuredData=this.buildTree(d.shortcodes.models),this.$pageStructureContainer.empty(),this.$pageStructureContainer.append(this.createTreeHTML(this.structuredData)),this.$pageStructureContainer.off("click mouseenter mouseleave",".page-structure-label"),this.$pageStructureContainer.off("click",".vc_control-btn"),this.$pageStructureContainer.on("click",".page-structure-label",(e=>{if(u(e.target).closest(".element-controls").length)return;const t=u(e.currentTarget),i=`node-${t.attr("id")}`;this.expandedNodes[i]=!Object.prototype.hasOwnProperty.call(this.expandedNodes,i)||!this.expandedNodes[i],t.toggleClass("expanded"),t.next().slideToggle(200)})),this.$pageStructurePanel.on("click",".vc_control-btn",(e=>{e.preventDefault(),e.stopPropagation();const t=u(e.currentTarget),i=t.closest(".page-structure-label").attr("id");switch(t.data("control")){case"inspect":a(i);break;case"edit":this.editElement(i)}}))}createTreeHTML(e){if(!e?.length)return"";const t=u('<ul class="page-structure-list"></ul>');return e.forEach((e=>{const i=e?.id||"",s=`node-${i}`,n=this.expandedNodes[s]||!1;let a=e?.settings?.name;if("Row"===a){const t=e?.attributes?.params?.row_title;a+=t?` (${t})`:""}a=a||"Unnamed Element";const r=u(`\n        <li class="page-structure-item ${this.createNodeClasses(e)||""}">\n          <div class="page-structure-label" title="${a}" id="${i}">\n            <span>\n              ${a}\n            </span>\n            <div class="element-controls">\n              <a class="vc_control-btn vc_control-btn-inspect" data-control="inspect" href="#" title="${this.pageStructureFind} ${a}" target="_blank"><span class="vc_btn-content"><i class="vc-composer-icon vc-c-icon-search"></i></span></a>\n              <a class="vc_control-btn vc_control-btn-edit" data-control="edit" href="#" title="${window.i18nLocale.edit} ${a}" target="_blank"><span class="vc_btn-content"><i class="vc-composer-icon vc-c-icon-mode_edit"></i></span></a>\n            </div>\n          </div>\n        </li>\n      `);if(e?.children?.length){const t=u('<div class="page-structure-children"></div>').append(this.createTreeHTML(e.children)),i=r.find(".page-structure-label");n?i.addClass("expanded"):t.hide(),i.addClass("page-structure-label--children"),r.append(t)}t.append(r)})),t}createNodeClasses(e){switch(e?.settings?.name){case"Section":return"page-structure-item--section";case"Row":return"page-structure-item--row";case"Column":return"page-structure-item--column";case"Inner Row":return"page-structure-item--inner-row";case"Inner Column":return"page-structure-item--inner-column";case"Grid container":return"page-structure-item--grid-container";case"Grid item":return"page-structure-item--grid-item";case"Flexbox container":return"page-structure-item--flexbox-container";case"Flexbox item":return"page-structure-item--flexbox-item";default:return}}editElement(e){if("edit_element"!==d.activePanelName()||!d.active_panel.model||d.active_panel.model.get("id")!==e){const t=d.shortcodes.get(e);d.closeActivePanel(),d.edit_element_block_view.render(t)}}}const{vc:v,jQuery:w}=window,m=w;class b{constructor(){this.$message=null,this.showNotification=this.showNotification.bind(this),this.hideNotification=this.hideNotification.bind(this),this.init()}init(){v.showMessage=this.showNotification,window.vc_user_access&&!window.vc_user_access().partAccess("unfiltered_html")&&v.showMessage(window.i18nLocale.unfiltered_html_access,"type-error",15e3)}hideNotification(){this.$message.slideUp(500,(function(){m(this).remove()})),v.message_timeout&&this.$message&&(window.clearTimeout(v.message_timeout),v.message_timeout=!1)}showNotification(e,t,i,s){v.message_timeout&&(m(".vc_message").remove(),window.clearTimeout(v.message_timeout)),t||(t="success"),i||(i=1e4);const n=window.vc_mode&&"admin_page"===window.vc_mode?".metabox-composer-content":"body",a=s||n,r=m('<span class="vc_message-close"><i class="vc-composer-icon vc-c-icon-close"></i></span>');this.$message=m('<div class="vc_message '+t+'" style="z-index: 999;">'+e+"</div>"),r.on("click",this.hideNotification),this.$message.append(r),this.$message.prependTo(m(a)),this.$message.fadeIn(500),v.message_timeout=window.setTimeout(this.hideNotification,i)}}const g=window.jQuery;g(document).ready((()=>{!function(){const t=window.InlineShortcodeView.prototype.removeView;window.InlineShortcodeView.prototype.removeView=function(i){t.call(this,i),e.events.trigger("afterRemoveShortcode")}}(),g(window).on("vc_build",(()=>{"1"===window?.sidebar_for_wpb_js?.pageStructure&&new p,new b,new c}))}))})();
  • sidebar-navigation-for-wpbakery/trunk/includes/page-structure-panel.php

    r3263404 r3377715  
     1<?php
     2// Silence is golden.
     3?>
    14<div class="vc_ui-font-open-sans vc_ui-panel-window vc_media-xs vc_ui-panel" data-vc-panel=".vc_ui-panel-header-header" data-vc-ui-element="panel-page-structure" id="vc_ui-panel-page-structure">
    25    <div class="vc_ui-panel-window-inner">
  • sidebar-navigation-for-wpbakery/trunk/includes/settings.php

    r3263404 r3377715  
    6262function sidebar_nav_for_wpbakery_settings_init() {
    6363    // Register settings
    64     register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_disable_description' );
    65     register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_compact_view' );
    66     register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_compact_view_edit_form' );
    67     register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_responsive_view', [
     64    register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_disable_description', [
     65        'sanitize_callback' => 'absint',
     66    ] );
     67    register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_compact_view', [
     68        'sanitize_callback' => 'absint',
     69    ] );
     70    register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_compact_view_edit_form', [
     71        'sanitize_callback' => 'absint',
     72    ] );
     73    register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_responsive_view', [
    6874        'sanitize_callback' => function( $value ) {
    6975            return $value === '1' ? '1' : '0'; // Ensures checkbox properly saves '1' or '0'
    7076        },
    7177    ] );
    72     register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_page_structure' );
    73     register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_sidebar_position' );
    74 
     78    register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_page_structure', [
     79        'sanitize_callback' => 'absint',
     80    ] );
     81    register_setting( 'sidebar_nav_for_wpbakery_options_group', 'sidebar_nav_for_wpbakery_sidebar_position', [
     82        'sanitize_callback' => function( $value ) {
     83            return in_array( $value, [ 'left', 'right' ], true ) ? $value : 'left';
     84        },
     85    ] );
    7586    // Add settings section
    7687    add_settings_section(
     
    210221    <input type="checkbox" name="sidebar_nav_for_wpbakery_responsive_view"
    211222            id="sidebar_nav_for_wpbakery_responsive_view" value="1"
    212         <?php echo $checked; ?> />
     223        <?php echo esc_attr( $checked ); ?> />
    213224    <?php
    214225}
  • sidebar-navigation-for-wpbakery/trunk/languages/sidebar-navigation-for-wpbakery.pot

    r3315281 r3377715  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Sidebar for WPBakery Page Builder 2.2.1\n"
     5"Project-Id-Version: Sidebar for WPBakery Page Builder 2.3.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/sidebar-navigation-for-wpbakery\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-06-12T13:57:23+00:00\n"
     12"POT-Creation-Date: 2025-09-05T19:53:00+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.4.0\n"
     
    4040msgstr ""
    4141
    42 #: includes/settings.php:87
     42#: includes/settings.php:98
    4343msgid "Disable elements' description"
    4444msgstr ""
    4545
    46 #: includes/settings.php:88
     46#: includes/settings.php:99
    4747msgid "Hides the descriptions under WPBakery elements in the Add Element panel."
    4848msgstr ""
    4949
    50 #: includes/settings.php:99
     50#: includes/settings.php:110
    5151msgid "Elements compact view"
    5252msgstr ""
    5353
    54 #: includes/settings.php:100
     54#: includes/settings.php:111
    5555msgid "Reduces spacing between elements in the Add Element panel for a more compact view."
    5656msgstr ""
    5757
    58 #: includes/settings.php:111
     58#: includes/settings.php:122
    5959msgid "Edit Form compact view"
    6060msgstr ""
    6161
    62 #: includes/settings.php:112
     62#: includes/settings.php:123
    6363msgid "Reduces fields size and spacing in the Edit Element panel for a more compact view."
    6464msgstr ""
    6565
    66 #: includes/settings.php:123
     66#: includes/settings.php:134
    6767msgid "Responsive view"
    6868msgstr ""
    6969
    70 #: includes/settings.php:124
     70#: includes/settings.php:135
    7171msgid "Makes the page view area shrink when the sidebar is opened."
    7272msgstr ""
    7373
    74 #: includes/settings.php:135
     74#: includes/settings.php:146
    7575msgid "Page Structure icon"
    7676msgstr ""
    7777
    78 #: includes/settings.php:136
     78#: includes/settings.php:147
    7979msgid "Adds a Page Structure icon to the navbar. Displays a Page Structure in a panel."
    8080msgstr ""
    8181
    82 #: includes/settings.php:147
     82#: includes/settings.php:158
    8383msgid "Sidebar Position"
    8484msgstr ""
    8585
    86 #: includes/settings.php:148
     86#: includes/settings.php:159
    8787msgid "Choose the position of the sidebar."
    8888msgstr ""
    8989
    90 #: includes/settings.php:242
     90#: includes/settings.php:253
    9191msgid "Left"
    9292msgstr ""
    9393
    94 #: includes/settings.php:247
     94#: includes/settings.php:258
    9595msgid "Right"
    9696msgstr ""
    9797
    98 #: sidebar-navigation-for-wpbakery.php:38
     98#: sidebar-navigation-for-wpbakery.php:44
    9999msgid "Page Structure"
    100100msgstr ""
    101101
    102 #: sidebar-navigation-for-wpbakery.php:39
     102#: sidebar-navigation-for-wpbakery.php:45
    103103msgid "Find"
    104104msgstr ""
    105105
    106 #: sidebar-navigation-for-wpbakery.php:68
     106#: sidebar-navigation-for-wpbakery.php:74
    107107msgid "Settings"
    108108msgstr ""
     109
     110#: sidebar-navigation-for-wpbakery.php:90
     111msgid "Sidebar for WPBakery requires WPBakery Page Builder to be installed and active."
     112msgstr ""
  • sidebar-navigation-for-wpbakery/trunk/readme.txt

    r3336131 r3377715  
    55Requires at least: 6.4
    66Tested up to: 6.8.1
    7 Stable tag: 2.3
     7Stable tag: 2.3.1
    88Requires PHP: 7.0
    99License: GPLv3 or later
    1010License URI: http://www.gnu.org/licenses/gpl-3.0.html
    1111
    12 Customizable UI for WPBakery Page Builder with sidebar navigation and panels.
     12Enhance WPBakery Page Builder experience with user-friendly sidebar for navigation, page structure and customizable settings.
    1313
    1414== Description ==
    1515
    16 Enhance your WPBakery Page Builder experience with a sleek, customizable sidebar for effortless navigation and improved workflow.
     16Take your WPBakery Page Builder workflow to the next level with a modern, customizable sidebar designed for faster navigation and smoother editing.
    1717
    18 This lightweight and user-friendly plugin adds a persistent navigation bar and panels as a sidebar, ensuring quick access to essential WPBakery features without obstructing your content. No more dragging or resizing panels—just a seamless editing experience.
     18This lightweight plugin adds a persistent sidebar with navigation and panels, giving you instant access to WPBakery elements, settings, and page structure—without blocking your content or cluttering the editor. No more dragging, resizing, or hunting for options—everything you need stays neatly organized in one place.
    1919
    20 With intuitive controls, the sidebar streamlines access to elements, settings, and the page structure, making the Frontend Editor more efficient. Plus, a dedicated settings page lets you tailor the sidebar’s appearance and behavior to suit your preferences.
     20With simple controls and flexible settings, you can tailor the sidebar to match your workflow. Whether you want a compact layout, resizable panels, or a cleaner editor interface, this plugin makes WPBakery easier and more efficient to use.
    2121
    22 Boost your productivity and enjoy a cleaner, more efficient WPBakery Page Builder interface.
     22Perfect for designers, developers, and content creators who want to boost productivity and enjoy a cleaner WPBakery editing experience.
    2323
    2424== Features ==
    2525
    26 * Sidebar navigation bar for quick access to panels.
    27 * Panels as a sidebar for easy access to settings.
    28 * Resizable sidebar panels width for a personalized experience.
    29 * Ability to close notification messages for a cleaner interface.
    30 * Ability to scroll to the element in the Edit Form panel for quick navigation.
    31 * Settings page for customizing the sidebar's appearance and behavior.
    32  * Hide the description under elements in the Add Element panel.
    33  * Reduce spacing between elements in the Add Element panel for a more compact view.
    34  * Reduce fields size and spacing in the Edit Form/Settings panel for a more compact view.
    35  * Make the page view area shrink or stay the same width when the sidebar is opened.
    36  * Set sidebar position to the right.
    37  * Page Structure panel for a quick overview of the page's structure.
     26* Persistent sidebar navigation bar for quick access to WPBakery panels
     27* Panels displayed as a sidebar for easy access to settings and tools
     28* Resizable sidebar width for a personalized layout
     29* Dismissible notifications for a distraction-free interface
     30* Scroll directly to selected elements in the Edit Form panel
     31* Customizable settings page to adjust sidebar appearance and behavior:
     32  * Hide element descriptions in the Add Element panel
     33  * Reduce spacing between elements for a compact view
     34  * Optimize field size and spacing in the Edit Form/Settings panel
     35  * Choose whether the page view area shrinks when the sidebar is open
     36  * Option to position the sidebar on the right side
     37  * Page Structure panel for a clear overview of your page layout
    3838
    3939== Requirements ==
     
    8888== Changelog ==
    8989
     90= 2.3.1 =
     91* Fix: Fixed issue with the sidebar opening on edit control hover.
     92* Fix: Fixed issue with the opened sidebar panel and iframe resize on page load.
     93* Fix: Fixed Grid container appearance in the Page Structure panel.
     94* Fix: Fixed Flexbox container appearance in the Page Structure panel.
     95* Fix: Fixed issue with sidebar structure item expand state.
     96* Fix: Fixed issue with panel resize on smaller screen widths.
     97
    9098= 2.3 =
    9199* Update: Added the ability to close notification messages.
  • sidebar-navigation-for-wpbakery/trunk/sidebar-navigation-for-wpbakery.php

    r3336131 r3377715  
    33 * Plugin Name: Sidebar for WPBakery Page Builder
    44 * Description: Customizable UI for WPBakery Page Builder with sidebar navigation and panels.
    5  * Version: 2.3
     5 * Version: 2.3.1
    66 * Author: Nikita Hlopov
    77 * Author URI: https://nikitahl.com
     
    1010 * License: GPLv3
    1111 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
    12 */
     12 */
    1313
    1414if ( ! defined( 'ABSPATH' ) ) {
     
    1616}
    1717
    18 define('SIDEBAR_NAVIGATION_FOR_WPBAKERY_VERSION', '2.2.1');
     18define('SIDEBAR_NAVIGATION_FOR_WPBAKERY_VERSION', '2.3.1');
     19define('SIDEBAR_NAVIGATION_FOR_WPBAKERY_TD', 'sidebar-navigation-for-wpbakery');
    1920
    2021require_once plugin_dir_path(__FILE__) . 'includes/settings.php';
    2122
    2223add_action( 'vc_frontend_editor_enqueue_js_css', 'sidebar_for_wpb_enqueue_frontend', 999 );
    23 add_action( 'plugins_loaded', 'sidebar_nav_for_wpbakery_load_textdomain' );
    2424
    2525// Add "Settings" link on the Plugins page
    2626add_filter('plugin_action_links_sidebar-navigation-for-wpbakery/sidebar-navigation-for-wpbakery.php', 'sidebar_nav_for_wpbakery_settings_link');
     27
     28// Admin dependency notice if WPBakery is missing.
     29if ( ! function_exists( 'vc_map' ) ) {
     30    add_action( 'admin_notices', 'sidebar_nav_for_wpbakery_missing_wpbakery_notice' );
     31    return; // Do not proceed without WPBakery.
     32}
    2733
    2834/**
     
    3238    // Check if we are in inline editor mode and only then load the script
    3339    if ( vc_is_inline() ) {
    34         wp_register_script( 'sidebar-for-wpb-js', plugins_url( '/assets/dist/js/editor.min.js', __FILE__ ), array(), WPB_VC_VERSION, true  );
     40        wp_register_script( 'sidebar-for-wpb-js', plugins_url( '/assets/dist/js/editor.min.js', __FILE__ ), array(), SIDEBAR_NAVIGATION_FOR_WPBAKERY_VERSION, true  );
    3541        wp_enqueue_script( 'sidebar-for-wpb-js' );
    3642
     
    7581
    7682/**
    77  * Load the plugin's text domain for localization.
     83 * Shows admin notice if WPBakery Page Builder is not active.
     84 *
     85 * @since 2.3.1
     86 * @return void
    7887 */
    79 function sidebar_nav_for_wpbakery_load_textdomain() {
    80     load_plugin_textdomain( 'sidebar-navigation-for-wpbakery', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
     88function sidebar_nav_for_wpbakery_missing_wpbakery_notice() {
     89    if ( current_user_can( 'activate_plugins' ) ) {
     90        echo '<div class="notice notice-error"><p>' . esc_html__('Sidebar for WPBakery requires WPBakery Page Builder to be installed and active.', 'sidebar-navigation-for-wpbakery') . '</p></div>';
     91    }
    8192}
Note: See TracChangeset for help on using the changeset viewer.