aristath/kirki

View on GitHub
packages/kirki-framework/field-background/src/script.js

Summary

Maintainability
A
1 hr
Test Coverage
/* global kirkiPostMessage */

/**
 * Hook in the kirkiPostMessageStylesOutput filter.
 *
 * Handles postMessage styles for typography controls.
 */
jQuery( document ).ready( function() {
    wp.hooks.addFilter(
        'kirkiPostMessageStylesOutput',
        'kirki',

        /**
         * Append styles for this control.
         *
         * @param {string} styles      - The styles.
         * @param {Object} value       - The control value.
         * @param {Object} output      - The control's "output" argument.
         * @param {string} controlType - The control type.
         * @returns {string} - Returns CSS styles as a string.
         */
        function( styles, value, output, controlType ) {
            var processedValue;
            if ( 'kirki-background' === controlType ) {
                styles += output.element + '{';
                _.each( value, function( val, key ) {
                    if ( output.choice && key !== output.choice ) {
                        return;
                    }
                    if ( 'background-image' === key ) {
                        val = -1 === val.indexOf( 'url(' ) ? 'url(' + val + ')' : val;
                    }

                    processedValue = kirkiPostMessage.util.processValue( output, val );

                    if ( '' === processedValue ) {
                        if ( 'background-color' === output.property ) {
                            processedValue = 'unset';
                        } else if ( 'background-image' === output.property ) {
                            processedValue = 'none';
                        }
                    }

                    if ( false !== processedValue ) {
                        styles += output.property ? output.property + ':' + processedValue + ';' : key + ':' + processedValue + ';';
                    }
                } );
                styles += '}';
            }
            return styles;
        }
    );
} );