diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
commit | a415c29efee45520ae252d2aa28f1083a521cd7b (patch) | |
tree | f4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/style-engine/class-wp-style-engine-css-declarations.php | |
parent | Initial commit. (diff) | |
download | wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip |
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/style-engine/class-wp-style-engine-css-declarations.php')
-rw-r--r-- | wp-includes/style-engine/class-wp-style-engine-css-declarations.php | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/wp-includes/style-engine/class-wp-style-engine-css-declarations.php b/wp-includes/style-engine/class-wp-style-engine-css-declarations.php new file mode 100644 index 0000000..fbcb54b --- /dev/null +++ b/wp-includes/style-engine/class-wp-style-engine-css-declarations.php @@ -0,0 +1,187 @@ +<?php +/** + * Style Engine: WP_Style_Engine_CSS_Declarations class + * + * @package WordPress + * @subpackage StyleEngine + * @since 6.1.0 + */ + +/** + * Core class used for style engine CSS declarations. + * + * Holds, sanitizes, processes, and prints CSS declarations for the style engine. + * + * @since 6.1.0 + */ +#[AllowDynamicProperties] +class WP_Style_Engine_CSS_Declarations { + + /** + * An array of CSS declarations (property => value pairs). + * + * @since 6.1.0 + * + * @var string[] + */ + protected $declarations = array(); + + /** + * Constructor for this object. + * + * If a `$declarations` array is passed, it will be used to populate + * the initial `$declarations` prop of the object by calling add_declarations(). + * + * @since 6.1.0 + * + * @param string[] $declarations Optional. An associative array of CSS definitions, + * e.g. `array( "$property" => "$value", "$property" => "$value" )`. + * Default empty array. + */ + public function __construct( $declarations = array() ) { + $this->add_declarations( $declarations ); + } + + /** + * Adds a single declaration. + * + * @since 6.1.0 + * + * @param string $property The CSS property. + * @param string $value The CSS value. + * @return WP_Style_Engine_CSS_Declarations Returns the object to allow chaining methods. + */ + public function add_declaration( $property, $value ) { + // Sanitizes the property. + $property = $this->sanitize_property( $property ); + // Bails early if the property is empty. + if ( empty( $property ) ) { + return $this; + } + + // Trims the value. If empty, bail early. + $value = trim( $value ); + if ( '' === $value ) { + return $this; + } + + // Adds the declaration property/value pair. + $this->declarations[ $property ] = $value; + + return $this; + } + + /** + * Removes a single declaration. + * + * @since 6.1.0 + * + * @param string $property The CSS property. + * @return WP_Style_Engine_CSS_Declarations Returns the object to allow chaining methods. + */ + public function remove_declaration( $property ) { + unset( $this->declarations[ $property ] ); + return $this; + } + + /** + * Adds multiple declarations. + * + * @since 6.1.0 + * + * @param string[] $declarations An array of declarations. + * @return WP_Style_Engine_CSS_Declarations Returns the object to allow chaining methods. + */ + public function add_declarations( $declarations ) { + foreach ( $declarations as $property => $value ) { + $this->add_declaration( $property, $value ); + } + return $this; + } + + /** + * Removes multiple declarations. + * + * @since 6.1.0 + * + * @param string[] $properties Optional. An array of properties. Default empty array. + * @return WP_Style_Engine_CSS_Declarations Returns the object to allow chaining methods. + */ + public function remove_declarations( $properties = array() ) { + foreach ( $properties as $property ) { + $this->remove_declaration( $property ); + } + return $this; + } + + /** + * Gets the declarations array. + * + * @since 6.1.0 + * + * @return string[] The declarations array. + */ + public function get_declarations() { + return $this->declarations; + } + + /** + * Filters a CSS property + value pair. + * + * @since 6.1.0 + * + * @param string $property The CSS property. + * @param string $value The value to be filtered. + * @param string $spacer Optional. The spacer between the colon and the value. + * Default empty string. + * @return string The filtered declaration or an empty string. + */ + protected static function filter_declaration( $property, $value, $spacer = '' ) { + $filtered_value = wp_strip_all_tags( $value, true ); + if ( '' !== $filtered_value ) { + return safecss_filter_attr( "{$property}:{$spacer}{$filtered_value}" ); + } + return ''; + } + + /** + * Filters and compiles the CSS declarations. + * + * @since 6.1.0 + * + * @param bool $should_prettify Optional. Whether to add spacing, new lines and indents. + * Default false. + * @param int $indent_count Optional. The number of tab indents to apply to the rule. + * Applies if `prettify` is `true`. Default 0. + * @return string The CSS declarations. + */ + public function get_declarations_string( $should_prettify = false, $indent_count = 0 ) { + $declarations_array = $this->get_declarations(); + $declarations_output = ''; + $indent = $should_prettify ? str_repeat( "\t", $indent_count ) : ''; + $suffix = $should_prettify ? ' ' : ''; + $suffix = $should_prettify && $indent_count > 0 ? "\n" : $suffix; + $spacer = $should_prettify ? ' ' : ''; + + foreach ( $declarations_array as $property => $value ) { + $filtered_declaration = static::filter_declaration( $property, $value, $spacer ); + if ( $filtered_declaration ) { + $declarations_output .= "{$indent}{$filtered_declaration};$suffix"; + } + } + + return rtrim( $declarations_output ); + } + + /** + * Sanitizes property names. + * + * @since 6.1.0 + * + * @param string $property The CSS property. + * @return string The sanitized property name. + */ + protected function sanitize_property( $property ) { + return sanitize_key( $property ); + } +} |