123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- /**
- * WP_Style_Engine_CSS_Declarations
- *
- * Holds, sanitizes and prints CSS rules declarations
- *
- * @package WordPress
- * @subpackage StyleEngine
- * @since 6.1.0
- */
- /**
- * Class WP_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 array
- */
- 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 An associative array of CSS definitions, e.g., array( "$property" => "$value", "$property" => "$value" ).
- */
- 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 array $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 array $properties An array of properties.
- *
- * @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 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 The spacer between the colon and the value. Defaults to an 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 Whether to add spacing, new lines and indents.
- * @param number $indent_count The number of tab indents to apply to the rule. Applies if `prettify` is `true`.
- *
- * @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 );
- }
- }
|