aristath/kirki

View on GitHub
packages/kirki-framework/field-dimensions/src/preview.js

Summary

Maintainability
A
0 mins
Test Coverage
/* global kirkiPostMessage */

import "./control.scss";

/**
 * 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 the CSS as a string.
         */
        function( styles, value, output, controlType ) {
            var processedValue;
            if ( 'kirki-dimensions' === controlType ) {
                styles += output.element + '{';
                _.each( value, function( val, key ) {
                    if ( output.choice && key !== output.choice ) {
                        return;
                    }
                    processedValue = kirkiPostMessage.util.processValue( output, val );

                    if ( false !== processedValue ) {

                        // Mostly used for padding, margin & position properties.
                        if ( output.property ) {
                            styles += output.property;
                            if ( '' !== output.property && ( 'top' === key || 'bottom' === key || 'left' === key || 'right' === key ) ) {
                                styles += '-' + key;
                            }
                            styles += ':' + processedValue + ';';
                        } else {
                            styles += key + ':' + processedValue + ';';
                        }
                    }
                } );
                styles += '}';
            }
            return styles;
        }
    );
} );