mirror of
https://ghproxy.net/https://github.com/AlxMedia/magaziner.git
synced 2025-08-28 22:22:34 +08:00
Initial commit
This commit is contained in:
commit
b0607606ae
369 changed files with 85494 additions and 0 deletions
|
@ -0,0 +1,270 @@
|
|||
<?php
|
||||
/**
|
||||
* Generates the styles for the frontend.
|
||||
* Handles the 'output' argument of fields
|
||||
*
|
||||
* @package Kirki
|
||||
* @category Core
|
||||
* @author Ari Stathopoulos (@aristath)
|
||||
* @copyright Copyright (c) 2019, Ari Stathopoulos (@aristath)
|
||||
* @license https://opensource.org/licenses/MIT
|
||||
* @since 1.0
|
||||
*/
|
||||
|
||||
// Exit if accessed directly.
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles CSS output.
|
||||
*/
|
||||
final class Kirki_Modules_CSS_Generator {
|
||||
|
||||
/**
|
||||
* The instance of this class (singleton pattern).
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var null|object
|
||||
*/
|
||||
public static $instance = null;
|
||||
|
||||
/**
|
||||
* Settings.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var null|string|array
|
||||
*/
|
||||
public static $settings = null;
|
||||
|
||||
/**
|
||||
* Output.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var array
|
||||
*/
|
||||
public static $output = array();
|
||||
|
||||
/**
|
||||
* Callback.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var null|string|array
|
||||
*/
|
||||
public static $callback = null;
|
||||
|
||||
/**
|
||||
* Option Name.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var null|string
|
||||
*/
|
||||
public static $option_name = null;
|
||||
|
||||
/**
|
||||
* Field Type.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
public static $field_type = null;
|
||||
|
||||
/**
|
||||
* Google Fonts
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var array
|
||||
*/
|
||||
public static $google_fonts = null;
|
||||
|
||||
/**
|
||||
* CSS
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
public static $css;
|
||||
|
||||
/**
|
||||
* Value
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @var mixed
|
||||
*/
|
||||
public static $value = null;
|
||||
|
||||
/**
|
||||
* The class constructor.
|
||||
*/
|
||||
private function __construct() {
|
||||
if ( is_null( self::$google_fonts ) ) {
|
||||
self::$google_fonts = Kirki_Fonts::get_google_fonts();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single instance of this class
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public static function get_instance() {
|
||||
if ( null === self::$instance ) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the CSS for a field.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param array $field The field.
|
||||
* @return array
|
||||
*/
|
||||
public static function css( $field ) {
|
||||
|
||||
// Set class vars.
|
||||
self::$settings = $field['settings'];
|
||||
self::$callback = $field['sanitize_callback'];
|
||||
self::$field_type = $field['type'];
|
||||
self::$output = $field['output'];
|
||||
if ( ! is_array( self::$output ) ) {
|
||||
self::$output = array(
|
||||
array(
|
||||
'element' => self::$output,
|
||||
'sanitize_callback' => null,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Get the value of this field.
|
||||
self::$value = Kirki_Values::get_sanitized_field_value( $field );
|
||||
|
||||
// Find the class that will handle the outpout for this field.
|
||||
$classname = 'Kirki_Output';
|
||||
$default_classnames = array(
|
||||
'kirki-background' => 'Kirki_Output_Field_Background',
|
||||
'kirki-dimensions' => 'Kirki_Output_Field_Dimensions',
|
||||
'kirki-image' => 'Kirki_Output_Field_Image',
|
||||
'kirki-typography' => 'Kirki_Output_Field_Typography',
|
||||
'kirki-multicolor' => 'Kirki_Output_Field_Multicolor',
|
||||
);
|
||||
$field_output_classes = apply_filters( 'kirki_output_control_classnames', $default_classnames );
|
||||
$field_output_classes = apply_filters( "kirki_{$field['kirki_config']}_output_control_classnames", $field_output_classes );
|
||||
if ( array_key_exists( self::$field_type, $field_output_classes ) ) {
|
||||
$classname = $field_output_classes[ self::$field_type ];
|
||||
}
|
||||
$obj = new $classname( $field['kirki_config'], self::$output, self::$value, $field );
|
||||
return $obj->get_styles();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the array of generated styles and creates the minimized, inline CSS.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param array $css The CSS definitions array.
|
||||
* @return string The generated CSS.
|
||||
*/
|
||||
public static function styles_parse( $css = array() ) {
|
||||
|
||||
// Pass our styles from the kirki_styles_array filter.
|
||||
$css = apply_filters( 'kirki_styles_array', $css );
|
||||
|
||||
// Process the array of CSS properties and produce the final CSS.
|
||||
$final_css = '';
|
||||
if ( ! is_array( $css ) || empty( $css ) ) {
|
||||
return '';
|
||||
}
|
||||
foreach ( $css as $media_query => $styles ) {
|
||||
$final_css .= ( 'global' !== $media_query ) ? $media_query . '{' : '';
|
||||
foreach ( $styles as $style => $style_array ) {
|
||||
$css_for_style = '';
|
||||
|
||||
foreach ( $style_array as $property => $value ) {
|
||||
if ( is_string( $value ) && '' !== $value ) {
|
||||
$css_for_style .= $property . ':' . $value . ';';
|
||||
} elseif ( is_array( $value ) ) {
|
||||
foreach ( $value as $subvalue ) {
|
||||
if ( is_string( $subvalue ) && '' !== $subvalue ) {
|
||||
$css_for_style .= $property . ':' . $subvalue . ';';
|
||||
}
|
||||
}
|
||||
}
|
||||
$value = ( is_string( $value ) ) ? $value : '';
|
||||
}
|
||||
if ( '' !== $css_for_style ) {
|
||||
$final_css .= $style . '{' . $css_for_style . '}';
|
||||
}
|
||||
}
|
||||
$final_css .= ( 'global' !== $media_query ) ? '}' : '';
|
||||
}
|
||||
return $final_css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add prefixes if necessary.
|
||||
*
|
||||
* @param array $css The CSS definitions array.
|
||||
* @return array
|
||||
*/
|
||||
public static function add_prefixes( $css ) {
|
||||
if ( is_array( $css ) ) {
|
||||
foreach ( $css as $media_query => $elements ) {
|
||||
foreach ( $elements as $element => $style_array ) {
|
||||
foreach ( $style_array as $property => $value ) {
|
||||
|
||||
// Add -webkit-* and -moz-*.
|
||||
if ( is_string( $property ) && in_array(
|
||||
$property,
|
||||
array(
|
||||
'border-radius',
|
||||
'box-shadow',
|
||||
'box-sizing',
|
||||
'text-shadow',
|
||||
'transform',
|
||||
'background-size',
|
||||
'transition',
|
||||
'transition-property',
|
||||
),
|
||||
true
|
||||
) ) {
|
||||
unset( $css[ $media_query ][ $element ][ $property ] );
|
||||
$css[ $media_query ][ $element ][ '-webkit-' . $property ] = $value;
|
||||
$css[ $media_query ][ $element ][ '-moz-' . $property ] = $value;
|
||||
$css[ $media_query ][ $element ][ $property ] = $value;
|
||||
}
|
||||
|
||||
// Add -ms-* and -o-*.
|
||||
if ( is_string( $property ) && in_array(
|
||||
$property,
|
||||
array(
|
||||
'transform',
|
||||
'background-size',
|
||||
'transition',
|
||||
'transition-property',
|
||||
),
|
||||
true
|
||||
) ) {
|
||||
unset( $css[ $media_query ][ $element ][ $property ] );
|
||||
$css[ $media_query ][ $element ][ '-ms-' . $property ] = $value;
|
||||
$css[ $media_query ][ $element ][ '-o-' . $property ] = $value;
|
||||
$css[ $media_query ][ $element ][ $property ] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $css;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue