/**
* Accepta Theme Customizer Controls JS
*
* Enhances the customizer controls
*/
( function( $ ) {
'use strict';
wp.customize.bind( 'ready', function() {
// Toggle visibility of dependent controls
function toggle_dependency( control_id, value, dependent_controls ) {
wp.customize( control_id, function( setting ) {
$.each( dependent_controls, function( index, dependent_control ) {
wp.customize.control( dependent_control, function( control ) {
var visibility = function() {
if ( value === setting.get() ) {
control.container.slideDown( 180 );
} else {
control.container.slideUp( 180 );
}
};
// Set initial visibility
visibility();
// Update visibility on setting change
setting.bind( visibility );
});
});
});
}
// Overlay header control visibility (only overlay text color)
wp.customize( 'accepta_transparent_header', function( setting ) {
wp.customize.control( 'accepta_transparent_header_text_color', function( control ) {
var updateVisibility = function() {
if ( setting.get() ) {
control.container.slideDown( 200 );
} else {
control.container.slideUp( 200 );
}
};
// Set initial visibility
updateVisibility();
// Update visibility on setting change
setting.bind( updateVisibility );
});
});
// Add opacity control nested inside scrolled header background color control
wp.customize.control( 'accepta_scrolled_header_bg', function( bgControl ) {
if ( ! bgControl ) {
return;
}
var $bgContainer = bgControl.container;
// Get the current opacity value from the setting
var getOpacityValue = function() {
var value = wp.customize( 'accepta_scrolled_header_bg_opacity' ).get();
// Ensure value is a number between 0 and 1
value = parseFloat( value );
if ( isNaN( value ) || value < 0 ) {
value = 1;
} else if ( value > 1 ) {
value = 1;
}
return value;
};
var opacityValue = getOpacityValue();
// Check if opacity control HTML already exists
if ( $bgContainer.find( '.accepta-scrolled-header-opacity-control' ).length === 0 ) {
// Create opacity control HTML (similar to overlay opacity in background control)
var opacityHtml = '
';
// Append to color control container
$bgContainer.find( '.wp-picker-container' ).after( opacityHtml );
}
// Initialize opacity slider
var $opacitySlider = $bgContainer.find( '.accepta-scrolled-header-opacity-slider' );
var $opacityValue = $bgContainer.find( '.accepta-opacity-value' );
// Set initial value from setting
var initialValue = getOpacityValue();
$opacitySlider.val( initialValue );
$opacityValue.text( initialValue );
$opacitySlider.on( 'input change', function() {
var opacity = parseFloat( $( this ).val() );
if ( isNaN( opacity ) ) {
opacity = 1;
}
$opacityValue.text( opacity );
// Save the value as a string to match WordPress customizer format
wp.customize( 'accepta_scrolled_header_bg_opacity' ).set( String( opacity ) );
} );
// Update opacity value when setting changes (from external sources)
wp.customize( 'accepta_scrolled_header_bg_opacity', function( opacitySetting ) {
opacitySetting.bind( function( newValue ) {
var opacity = parseFloat( newValue );
if ( isNaN( opacity ) ) {
opacity = 1;
}
$opacitySlider.val( opacity );
$opacityValue.text( opacity );
} );
} );
} );
// Sticky header control visibility (scrolled header options)
wp.customize( 'accepta_sticky_header', function( setting ) {
var scrolledControls = [
'accepta_scrolled_header_bg',
'accepta_scrolled_header_text_color'
];
$.each( scrolledControls, function( index, controlId ) {
wp.customize.control( controlId, function( control ) {
if ( ! control ) {
console.warn( '[Customizer] Control not found: ' + controlId );
return;
}
var updateVisibility = function() {
if ( setting.get() ) {
control.container.slideDown( 200 );
control.container.css( 'display', '' ); // Ensure it's visible
} else {
control.container.slideUp( 200 );
}
};
// Set initial visibility immediately
if ( setting.get() ) {
control.container.show();
} else {
control.container.hide();
}
// Update visibility on setting change
setting.bind( updateVisibility );
});
});
});
// Hero height control visibility
wp.customize( 'accepta_hero_height', function( setting ) {
wp.customize.control( 'accepta_hero_min_height', function( control ) {
var visibility = function() {
var height = setting.get();
if ( height === 'min-height' || height === 'custom' ) {
control.container.slideDown( 180 );
} else {
control.container.slideUp( 180 );
}
};
// Set initial visibility
visibility();
// Update visibility on setting change
setting.bind( visibility );
});
});
// Example toggle: if accepta_header_style is 'style-2', show accepta_header_style_2_options
toggle_dependency( 'accepta_header_style', 'style-2', ['accepta_header_style_2_options'] );
// Header Social Icons Visibility Toggle
wp.customize( 'accepta_display_header_social_icons', function( setting ) {
wp.customize.control( 'accepta_header_social_media', function( control ) {
var updateVisibility = function() {
if ( setting.get() ) {
control.container.slideDown( 200 );
} else {
control.container.slideUp( 200 );
}
};
// Set initial visibility
updateVisibility();
// Update visibility on setting change
setting.bind( updateVisibility );
});
});
});
} )( jQuery );