WooCommerce Code Reference

CssToAttributeConverter extends AbstractHtmlProcessor
in package

This HtmlProcessor can convert style HTML attributes to the corresponding other visual HTML attributes, e.g. it converts style="width: 100px" to width="100".

It will only add attributes, but leaves the style attribute untouched.

To trigger the conversion, call the convertCssToVisualAttributes method.

Table of Contents

CONTENT_TYPE_META_TAG  = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'
DEFAULT_DOCUMENT_TYPE  = '<!DOCTYPE html>'
HTML_COMMENT_PATTERN  = '/<!--[^-]*+(?:-(?!->)[^-]*+)*+(?:-->|$)/'
regular expression pattern to match an HTML comment, including delimiters and modifiers
HTML_TEMPLATE_ELEMENT_PATTERN  = '%<template[\s>][^<]*+(?:<(?!/template>)[^<]*+)*+(?:</template>|$)%i'
regular expression pattern to match an HTML `<template>` element, including delimiters and modifiers
PHP_UNRECOGNIZED_VOID_TAGNAME_MATCHER  = '(?:command|embed|keygen|source|track|wbr)'
TAGNAME_ALLOWED_BEFORE_BODY_MATCHER  = '(?:html|head|base|command|link|meta|noscript|script|style|template|title)'
Regular expression part to match tag names that may appear before the start of the `<body>` element. A start tag for any other element would implicitly start the `<body>` element due to tag omission rules.
$domDocument  : DOMDocument|null
$cssToHtmlMap  : array<string, array{attribute: string, nodes?: array, values?: array}>
This multi-level array contains simple mappings of CSS properties to HTML attributes. If a mapping only applies to certain HTML nodes or only for certain values, the mapping is an object with an allowlist of nodes and values.
$xPath  : DOMXPath|null
convertCssToVisualAttributes()  : $this
Maps the CSS from the style nodes to visual HTML attributes.
fromDomDocument()  : static
Builds a new instance from the given DOM document.
fromHtml()  : static
Builds a new instance from the given HTML.
getDomDocument()  : DOMDocument
Provides access to the internal DOMDocument representation of the HTML in its current state.
render()  : string
Renders the normalized and processed HTML.
renderBodyContent()  : string
Renders the content of the BODY element of the normalized and processed HTML.
getHtmlElement()  : DOMElement
Returns the HTML element.
getXPath()  : DOMXPath
__construct()  : mixed
The constructor.
addContentTypeMetaTag()  : string
Adds a Content-Type meta tag for the charset.
createRawDomDocument()  : void
Creates a DOMDocument instance from the given HTML and stores it in $this->domDocument.
createUnifiedDomDocument()  : void
Creates a DOM document from the given HTML and stores it in $this->domDocument.
ensureDocumentType()  : string
Makes sure that the passed HTML has a document type, with lowercase "html".
ensureExistenceOfBodyElement()  : void
Checks that $this->domDocument has a BODY element and adds it if it is missing.
ensurePhpUnrecognizedSelfClosingTagsAreXml()  : string
Makes sure that any self-closing tags not recognized as such by PHP's DOMDocument implementation have a self-closing slash.
getAllNodesWithStyleAttribute()  : DOMNodeList
Returns a list with all DOM nodes that have a style attribute.
getBodyElement()  : DOMElement
Returns the BODY element.
hasContentTypeMetaTagInHead()  : bool
Tests whether the given HTML has a valid `Content-Type` metadata element within the `<head>` element. Due to tag omission rules, HTML parsers are expected to end the `<head>` element and start the `<body>` element upon encountering a start tag for any element which is permitted only within the `<body>`.
hasEndOfHeadElement()  : bool
Tests whether the `<head>` element ends within the given HTML. Due to tag omission rules, HTML parsers are expected to end the `<head>` element and start the `<body>` element upon encountering a start tag for any element which is permitted only within the `<body>`.
isTableOrImageNode()  : bool
mapBackgroundProperty()  : void
mapBorderProperty()  : void
mapComplexCssProperty()  : void
Maps CSS properties that need special transformation to an HTML attribute.
mapCssToHtmlAttribute()  : void
Tries to apply the CSS style to $node as an attribute.
mapCssToHtmlAttributes()  : void
Applies $styles to $node.
mapMarginProperty()  : void
mapSimpleCssProperty()  : bool
Looks up the CSS property in the mapping table and maps it if it matches the conditions.
mapWidthOrHeightProperty()  : void
normalizeDocumentType()  : string
Makes sure the document type in the passed HTML has lowercase "html".
parseCssShorthandValue()  : array<string, string>
Parses a shorthand CSS value and splits it into individual values. For example: `padding: 0 auto;` - `0 auto` is split into top: 0, left: auto, bottom: 0, right: auto.
prepareHtmlForDomConversion()  : string
Returns the HTML with added document type, Content-Type meta tag, and self-closing slashes, if needed, ensuring that the HTML will be good for creating a DOM document from it.
removeHtmlComments()  : string
Removes comments from the given HTML, including any which are unterminated, for which the remainder of the string is removed.
removeHtmlTemplateElements()  : string
Removes `<template>` elements from the given HTML, including any without an end tag, for which the remainder of the string is removed.
removeSelfClosingTagsClosingTags()  : string
Eliminates any invalid closing tags for void elements from the given HTML.
setDomDocument()  : void
setHtml()  : void
Sets the HTML to process.

Constants

Properties

$cssToHtmlMap

This multi-level array contains simple mappings of CSS properties to HTML attributes. If a mapping only applies to certain HTML nodes or only for certain values, the mapping is an object with an allowlist of nodes and values.

private array<string, array{attribute: string, nodes?: array, values?: array}> $cssToHtmlMap = ['background-color' => ['attribute' => 'bgcolor'], 'text-align' => ['attribute' => 'align', 'nodes' => ['p', 'div', 'td', 'th'], 'values' => ['left', 'right', 'center', 'justify']], 'float' => ['attribute' => 'align', 'nodes' => ['table', 'img'], 'values' => ['left', 'right']], 'border-spacing' => ['attribute' => 'cellspacing', 'nodes' => ['table']]]

Methods

hasContentTypeMetaTagInHead()

Tests whether the given HTML has a valid `Content-Type` metadata element within the `<head>` element. Due to tag omission rules, HTML parsers are expected to end the `<head>` element and start the `<body>` element upon encountering a start tag for any element which is permitted only within the `<body>`.

private hasContentTypeMetaTagInHead(string $html) : bool
Parameters
$html : string
Return values
bool

hasEndOfHeadElement()

Tests whether the `<head>` element ends within the given HTML. Due to tag omission rules, HTML parsers are expected to end the `<head>` element and start the `<body>` element upon encountering a start tag for any element which is permitted only within the `<body>`.

private hasEndOfHeadElement(string $html) : bool
Parameters
$html : string
Tags
throws
RuntimeException
Return values
bool

mapCssToHtmlAttribute()

Tries to apply the CSS style to $node as an attribute.

private mapCssToHtmlAttribute(string $property, string $value, DOMElement $node) : void

This method maps a CSS rule to HTML attributes and adds those to the node.

Parameters
$property : string

the name of the CSS property to map

$value : string

the value of the style rule to map

$node : DOMElement

node to apply styles to

Return values
void

mapCssToHtmlAttributes()

Applies $styles to $node.

private mapCssToHtmlAttributes(array<string, string> $styles, DOMElement $node) : void

This method maps CSS styles to HTML attributes and adds those to the node.

Parameters
$styles : array<string, string>

the new CSS styles taken from the global styles to be applied to this node

$node : DOMElement

node to apply styles to

Return values
void

mapSimpleCssProperty()

Looks up the CSS property in the mapping table and maps it if it matches the conditions.

private mapSimpleCssProperty(string $property, string $value, DOMElement $node) : bool
Parameters
$property : string

the name of the CSS property to map

$value : string

the value of the style rule to map

$node : DOMElement

node to apply styles to

Return values
booltrue if the property can be mapped using the simple mapping table

parseCssShorthandValue()

Parses a shorthand CSS value and splits it into individual values. For example: `padding: 0 auto;` - `0 auto` is split into top: 0, left: auto, bottom: 0, right: auto.

private parseCssShorthandValue(string $value) : array<string, string>
Parameters
$value : string

a CSS property value with 1, 2, 3 or 4 sizes

Return values
array<string, string>an array of values for top, right, bottom and left (using these as associative array keys)