( function( $ ) { /** * JS to manage the sticky heading of an open section on scroll up. */ jQuery( document ).ready(function() { var last_scroll_top = 0; var parentSection = jQuery( '.wp-full-overlay-sidebar-content' ); jQuery('#customize-controls .wp-full-overlay-sidebar-content .control-section').on( 'scroll', function (event) { var $this = jQuery(this); // Run sticky js for only open section. if ( $this.hasClass( 'open' ) ) { var section_title = $this.find( '.customize-section-title' ); var scroll_top = $this.scrollTop(); if ( scroll_top > last_scroll_top ) { // On scroll down, remove sticky section title. section_title.removeClass( 'maybe-sticky' ).removeClass( 'is-in-view' ).removeClass( 'is-sticky' ); $this.css( 'padding-top', '' ); } else { // On scroll up, add sticky section title. var parent_width = $this.outerWidth(); section_title.addClass( 'maybe-sticky' ).addClass( 'is-in-view' ).addClass( 'is-sticky' ).width( parent_width - 6 ).css( 'top', parentSection.css( 'top' ) ); $this.css( 'padding-top', section_title.height() ); if( scroll_top === 0 ) { // Remove sticky section heading when scrolled to the top. section_title.removeClass( 'maybe-sticky' ).removeClass( 'is-in-view' ).removeClass( 'is-sticky' ); $this.css( 'padding-top', '' ); } } last_scroll_top = scroll_top; } }); }); wp.customize.controlConstructor['ast-settings-group'] = wp.customize.Control.extend({ ready : function() { 'use strict'; var control = this, value = control.setting._value; control.registerToggleEvents(); this.container.on( 'ast_settings_changed', control.onOptionChange ); }, registerToggleEvents: function() { var control = this; /* Close popup when click outside anywhere outside of popup */ $( '.wp-full-overlay-sidebar-content, .wp-picker-container' ).click( function( e ) { if ( ! $( e.target ).closest( '.ast-field-settings-modal' ).length ) { $( '.ast-adv-toggle-icon.open' ).trigger( 'click' ); } }); control.container.on( 'click', '.ast-toggle-desc-wrap .ast-adv-toggle-icon', function( e ) { e.preventDefault(); e.stopPropagation(); var $this = jQuery(this); var parent_wrap = $this.closest( '.customize-control-ast-settings-group' ); var is_loaded = parent_wrap.find( '.ast-field-settings-modal' ).data('loaded'); var parent_section = parent_wrap.parents('.control-section'); if( $this.hasClass('open') ) { parent_wrap.find( '.ast-field-settings-modal' ).hide(); } else { /* Close popup when another popup is clicked to open */ var get_open_popup = parent_section.find('.ast-adv-toggle-icon.open'); if( get_open_popup.length > 0 ) { get_open_popup.trigger('click'); } if( is_loaded ) { parent_wrap.find( '.ast-field-settings-modal' ).show(); } else { var fields = control.params.ast_fields; var $modal_wrap = $( astra.customizer.group_modal_tmpl ); parent_wrap.find( '.ast-field-settings-wrap' ).append( $modal_wrap ); parent_wrap.find( '.ast-fields-wrap' ).attr( 'data-control', control.params.name ); control.ast_render_field( parent_wrap, fields, control ); parent_wrap.find( '.ast-field-settings-modal' ).show(); device = jQuery("#customize-footer-actions .active").attr('data-device'); if( 'mobile' == device ) { jQuery('.ast-responsive-btns .mobile, .ast-responsive-slider-btns .mobile').addClass('active'); jQuery('.ast-responsive-btns .preview-mobile, .ast-responsive-slider-btns .preview-mobile').addClass('active'); } else if( 'tablet' == device ) { jQuery('.ast-responsive-btns .tablet, .ast-responsive-slider-btns .tablet').addClass('active'); jQuery('.ast-responsive-btns .preview-tablet, .ast-responsive-slider-btns .preview-tablet').addClass('active'); } else { jQuery('.ast-responsive-btns .desktop, .ast-responsive-slider-btns .desktop').addClass('active'); jQuery('.ast-responsive-btns .preview-desktop, .ast-responsive-slider-btns .preview-desktop').addClass('active'); } } } $this.toggleClass('open'); }); control.container.on( "click", ".ast-toggle-desc-wrap > .customizer-text", function( e ) { e.preventDefault(); e.stopPropagation(); jQuery(this).find( '.ast-adv-toggle-icon' ).trigger('click'); }); }, ast_render_field: function( wrap, fields, control_elem ) { var control = this; var ast_field_wrap = wrap.find( '.ast-fields-wrap' ); var fields_html = ''; var control_types = []; var field_values = control.isJsonString( control_elem.params.value ) ? JSON.parse( control_elem.params.value ) : {}; if( 'undefined' != typeof fields.tabs ) { var clean_param_name = control_elem.params.name.replace( '[', '-' ), clean_param_name = clean_param_name.replace( ']', '' ); fields_html += '