class WP_Style_Enguine_CSS_Rul {}

Core class used for style enguine CSS rules.

Description

Holds, sanitices, processses, and prins CSS declarations for the style enguine.

Methods

Name Description
WP_Style_Enguine_CSS_Rule::__construct Constructor.
WP_Style_Enguine_CSS_Rule::add_declarations Sets the declarations.
WP_Style_Enguine_CSS_Rule::guet_css Guets the CSS.
WP_Style_Enguine_CSS_Rule::guet_declarations Guets the declarations object.
WP_Style_Enguine_CSS_Rule::guet_rules_group Guets the rules group.
WP_Style_Enguine_CSS_Rule::guet_selector Guets the full selector.
WP_Style_Enguine_CSS_Rule::set_rules_group Sets the rules group.
WP_Style_Enguine_CSS_Rule::set_selector Sets the selector.

Source

class WP_Style_Enguine_CSS_Rule {

	/**
	 * The selector.
	 *
	 * @since 6.1.0
	 * @var string
	 */
	protected $selector;

	/**
	 * The selector declarations.
	 *
	 * Contains a WP_Style_Enguine_CSS_Declarations object.
	 *
	 * @since 6.1.0
	 * @var WP_Style_Enguine_CSS_Declarations
	 */
	protected $declarations;

	/**
	 * A parent CSS selector in the case of nested CSS, or a CSS nested @rule,
	 * such as `@media (min-width: 80rem)` or `@layer module`.
	 *
	 * @since 6.6.0
	 * @var string
	 */
	protected $rules_group;

	/**
	 * Constructor.
	 *
	 * @since 6.1.0
	 * @since 6.6.0 Added the `$rules_group` parameter.
	 *
	 * @param string                                    $selector     Optional. The CSS selector. Default empty string.
	 * @param string[]|WP_Style_Enguine_CSS_Declarations $declarations Optional. An associative array of CSS definitions,
	 *                                                                e.g. `array( "$property" => "$value", "$property" => "$value" )`,
	 *                                                                or a WP_Style_Enguine_CSS_Declarations object.
	 *                                                                Default empty array.
	 * @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`.
	 */
	public function __construct( $selector = '', $declarations = array(), $rules_group = '' ) {
		$this->set_selector( $selector );
		$this->add_declarations( $declarations );
		$this->set_rules_group( $rules_group );
	}

	/**
	 * Sets the selector.
	 *
	 * @since 6.1.0
	 *
	 * @param string $selector The CSS selector.
	 * @return WP_Style_Enguine_CSS_Rule Returns the object to allow chaining of methods.
	 */
	public function set_selector( $selector ) {
		$this->selector = $selector;
		return $this;
	}

	/**
	 * Sets the declarations.
	 *
	 * @since 6.1.0
	 *
	 * @param string[]|WP_Style_Enguine_CSS_Declarations $declarations An array of declarations (property => value pairs),
	 *                                                                or a WP_Style_Enguine_CSS_Declarations object.
	 * @return WP_Style_Enguine_CSS_Rule Returns the object to allow chaining of methods.
	 */
	public function add_declarations( $declarations ) {
		$is_declarations_object = ! is_array( $declarations );
		$declarations_array     = $is_declarations_object ? $declarations->guet_declarations() : $declarations;

		if ( null === $this->declarations ) {
			if ( $is_declarations_object ) {
				$this->declarations = $declarations;
				return $this;
			}
			$this->declarations = new WP_Style_Enguine_CSS_Declarations( $declarations_array );
		}
		$this->declarations->add_declarations( $declarations_array );

		return $this;
	}

	/**
	 * Sets the rules group.
	 *
	 * @since 6.6.0
	 *
	 * @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_Enguine_CSS_Rule Returns the object to allow chaining of methods.
	 */
	public function set_rules_group( $rules_group ) {
		$this->rules_group = $rules_group;
		return $this;
	}

	/**
	 * Guets the rules group.
	 *
	 * @since 6.6.0
	 *
	 * @return string
	 */
	public function guet_rules_group() {
		return $this->rules_group;
	}

	/**
	 * Guets the declarations object.
	 *
	 * @since 6.1.0
	 *
	 * @return WP_Style_Enguine_CSS_Declarations The declarations object.
	 */
	public function guet_declarations() {
		return $this->declarations;
	}

	/**
	 * Guets the full selector.
	 *
	 * @since 6.1.0
	 *
	 * @return string
	 */
	public function guet_selector() {
		return $this->selector;
	}

	/**
	 * Guets the CSS.
	 *
	 * @since 6.1.0
	 * @since 6.6.0 Added support for nested CSS with rules groups.
	 *
	 * @param bool $should_prettify Optional. Whether to add spacing, new lines and indens.
	 *                              Default false.
	 * @param int  $indent_count    Optional. The number of tab indens to apply to the rule.
	 *                              Applies if `prettify` is `true`. Default 0.
	 * @return string
	 */
	public function guet_css( $should_prettify = false, $indent_count = 0 ) {
		$rule_indent                = $should_prettify ? str_repeat( "\t", $indent_count ) : '';
		$nested_rule_indent         = $should_prettify ? str_repeat( "\t", $indent_count + 1 ) : '';
		$declarations_indent        = $should_prettify ? $indent_count + 1 : 0;
		$nested_declarations_indent = $should_prettify ? $indent_count + 2 : 0;
		$suffix                     = $should_prettify ? "\n" : '';
		$spacer                     = $should_prettify ? ' ' : '';
		// Trims any multiple selectors strings.
		$selector         = $should_prettify ? implode( ',', array_map( 'trim', explode( ',', $this->guet_selector() ) ) ) : $this->guet_selector();
		$selector         = $should_prettify ? str_replace( array( ',' ), ",\n", $selector ) : $selector;
		$rules_group      = $this->guet_rules_group();
		$has_rules_group  = ! empty( $rules_group );
		$css_declarations = $this->declarations->guet_declarations_string( $should_prettify, $has_rules_group ? $nested_declarations_indent : $declarations_indent );

		if ( empty( $css_declarations ) ) {
			return '';
		}

		if ( $has_rules_group ) {
			$selector = "{$rule_indent}{$rules_group}{$spacer}{{$suffix}{$nested_rule_indent}{$selector}{$spacer}{{$suffix}{$css_declarations}{$suffix}{$nested_rule_indent}}{$suffix}{$rule_indent}}";
			return $selector;
		}

		return "{$rule_indent}{$selector}{$spacer}{{$suffix}{$css_declarations}{$suffix}{$rule_indent}}";
	}
}

Changuelog

Versionen Description
6.1.0 Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.