148 lines
3.9 KiB
PHP
148 lines
3.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Parse controls data and generate styles output.
|
||
|
*
|
||
|
* @package visual-portfolio
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Visual_Portfolio_Controls_Dynamic_CSS
|
||
|
*/
|
||
|
class Visual_Portfolio_Controls_Dynamic_CSS {
|
||
|
/**
|
||
|
* Prepare CSS for options.
|
||
|
*
|
||
|
* @param array $options block options.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function get( $options ) {
|
||
|
$result = '';
|
||
|
$selector = '';
|
||
|
|
||
|
if ( isset( $options['block_id'] ) ) {
|
||
|
$selector = $options['block_id'];
|
||
|
} elseif ( isset( $options['id'] ) ) {
|
||
|
$selector = $options['id'];
|
||
|
}
|
||
|
if ( ! $selector ) {
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
$selector = '.vp-id-' . $selector;
|
||
|
$registered = Visual_Portfolio_Controls::get_registered_array();
|
||
|
$control_styles_array = array();
|
||
|
|
||
|
// Controls styles.
|
||
|
foreach ( $registered as $control ) {
|
||
|
$allow = isset( $control['style'] ) && ! empty( $control['style'] );
|
||
|
|
||
|
// Check condition.
|
||
|
if ( $allow && isset( $control['condition'] ) && ! empty( $control['condition'] ) ) {
|
||
|
$allow = Visual_Portfolio_Control_Condition_Check::check( $control['condition'], $options );
|
||
|
}
|
||
|
|
||
|
// Prepare styles.
|
||
|
if ( $allow ) {
|
||
|
foreach ( $control['style'] as $data ) {
|
||
|
$val = $options[ $control['name'] ];
|
||
|
$val = apply_filters( 'vpf_controls_dynamic_css_value', $val, $options, $control, $selector, $data );
|
||
|
|
||
|
// Prepare Aspect Ratio control value.
|
||
|
if ( isset( $control['type'] ) && 'aspect_ratio' === $control['type'] && $val ) {
|
||
|
$ratio_array = explode( ':', $val );
|
||
|
|
||
|
if ( isset( $ratio_array[0] ) && $ratio_array[0] && isset( $ratio_array[1] ) && $ratio_array[1] ) {
|
||
|
$val = ( 100 * $ratio_array[1] / $ratio_array[0] ) . '%';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$styles_array = self::prepare_styles_from_params( $selector, $val, $data );
|
||
|
$styles_array = apply_filters( 'vpf_controls_dynamic_css_styles_array', $styles_array, $selector, $val, $data, $options, $control );
|
||
|
|
||
|
if ( $styles_array ) {
|
||
|
$control_styles_array = array_merge_recursive(
|
||
|
$control_styles_array,
|
||
|
$styles_array
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Prepare CSS of controls.
|
||
|
foreach ( $control_styles_array as $sel => $styles ) {
|
||
|
$result .= $sel . " {\n";
|
||
|
|
||
|
foreach ( $styles as $prop => $val ) {
|
||
|
$result .= " {$prop}: {$val};\n";
|
||
|
}
|
||
|
|
||
|
$result .= "}\n";
|
||
|
}
|
||
|
|
||
|
// Custom CSS.
|
||
|
if ( isset( $options['custom_css'] ) && $options['custom_css'] ) {
|
||
|
// decode.
|
||
|
$custom_css = visual_portfolio_decode( $options['custom_css'] );
|
||
|
|
||
|
// replace 'selector' to actual css selector.
|
||
|
$custom_css = str_replace( 'selector', $selector, $custom_css );
|
||
|
|
||
|
// a little security fix.
|
||
|
$custom_css = str_replace( '</', '</', $custom_css );
|
||
|
|
||
|
if ( isset( $options['id'] ) ) {
|
||
|
$custom_css = str_replace( '>', '>', $custom_css );
|
||
|
$custom_css = str_replace( '\"', '"', $custom_css );
|
||
|
$custom_css = str_replace( "\'", "'", $custom_css );
|
||
|
}
|
||
|
|
||
|
$result .= $custom_css;
|
||
|
}
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prepare styles from params
|
||
|
* Params example:
|
||
|
array(
|
||
|
'element' => '$ .inner-selector',
|
||
|
'property' => 'height',
|
||
|
'mask' => '$px',
|
||
|
)
|
||
|
*
|
||
|
* @param string $selector CSS selector.
|
||
|
* @param mixed $value Property value.
|
||
|
* @param array $params Output params.
|
||
|
*
|
||
|
* @return array|bool
|
||
|
*/
|
||
|
public static function prepare_styles_from_params( $selector, $value, $params ) {
|
||
|
if ( ! $selector || ! isset( $value ) || '' === $value || null === $value || ! isset( $params['property'] ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Value mask.
|
||
|
if ( isset( $params['mask'] ) ) {
|
||
|
$value = str_replace( '$', $value, $params['mask'] );
|
||
|
}
|
||
|
|
||
|
// Custom selector mask.
|
||
|
if ( isset( $params['element'] ) && strpos( $params['element'], '$' ) !== false ) {
|
||
|
$selector = str_replace( '$', $selector, $params['element'] );
|
||
|
} else {
|
||
|
$selector = $selector . ( isset( $params['element'] ) ? ( ' ' . $params['element'] ) : '' );
|
||
|
}
|
||
|
|
||
|
$property = $params['property'];
|
||
|
|
||
|
return array(
|
||
|
$selector => array(
|
||
|
$property => $value,
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|