felixarntz/theme-boilerplate

View on GitHub
assets/src/js/navbar.customize-controls.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * File navbar.customize-controls.js.
 *
 * Theme Customizer handling for the navbar.
 */

import CustomizeControlsUtil from './customize/customize-controls-util';
import getCustomizeAction from './customize/get-customize-action';

( ( wp, data ) => {
    const api    = wp.customize;
    const util   = new CustomizeControlsUtil( api );
    const { __ } = wp.i18n;

    api.bind( 'ready', () => {
        api.when( 'navbar_position', 'navbar_justify_content', ( navbarPosition, navbarJustifyContent ) => {
            navbarPosition.transport       = 'postMessage';
            navbarJustifyContent.transport = 'postMessage';
        });

        api.panel.instance( 'layout', () => {
            api.section.add( new api.Section( 'navbar', {
                panel:           'layout',
                title:           __( 'Navbar', 'super-awesome-theme' ),
                customizeAction: getCustomizeAction( 'layout' ),
            }) );

            api.control.add( new api.Control( 'navbar_position', {
                setting: 'navbar_position',
                section: 'navbar',
                label:   __( 'Navbar Position', 'super-awesome-theme' ),
                type:    'radio',
                choices: data.navbarPositionChoices,
            }) );

            api.control.add( new api.Control( 'navbar_justify_content', {
                setting:     'navbar_justify_content',
                section:     'navbar',
                label:       __( 'Navbar Justify Content', 'super-awesome-theme' ),
                description: __( 'Specify how the content in the navbar is aligned.', 'super-awesome-theme' ),
                type:        'radio',
                choices:     data.navbarJustifyContentChoices,
            }) );
        });

        // Handle visibility of the sticky navbar control.
        util.bindSettingToControls( 'navbar_position', [ 'sticky_navbar' ], ( value, control ) => {
            const isSide = [ 'left', 'right' ].includes( value );

            control.active.set( ! isSide );

            // If navbar is displayed on the side, also force the sticky navbar setting to change.
            if ( isSide ) {
                api.instance( 'sticky_navbar', setting => {
                    setting.set( false );
                });
            }
        });
    });

} )( window.wp, window.themeNavbarControlsData );