Add nodes query cache for CSS inlining

[MAILPOET-1797]
This commit is contained in:
Rostislav Wolny
2019-03-05 10:37:39 +01:00
committed by M. Shull
parent 4e27152c93
commit 59d960b42f

View File

@ -62,11 +62,15 @@ class CSS {
// This is an array with, amongst other things, the keys 'properties', which hold the CSS properties // This is an array with, amongst other things, the keys 'properties', which hold the CSS properties
// and the 'selector', which holds the CSS selector // and the 'selector', which holds the CSS selector
$rules = $this->parseCSS($raw_css); $rules = $this->parseCSS($raw_css);
$nodes_map = [];
// We loop over each rule by increasing order of specificity, find the nodes matching the selector // We loop over each rule by increasing order of specificity, find the nodes matching the selector
// and apply the CSS properties // and apply the CSS properties
foreach ($rules as $rule) { foreach ($rules as $rule) {
foreach ($html->query($rule['selector']) as $node) { if (!isset($nodes_map[$rule['selector']])) {
$nodes_map[$rule['selector']] = $html->query($rule['selector']);
}
foreach ($nodes_map[$rule['selector']] as $node) {
// I'm leaving this for debug purposes, it has proved useful. // I'm leaving this for debug purposes, it has proved useful.
/* /*
if ($node->already_styled === 'yes') if ($node->already_styled === 'yes')
@ -109,7 +113,7 @@ class CSS {
if (strpos($value, '!important') === false) { if (strpos($value, '!important') === false) {
continue; continue;
} }
foreach ($html->query($rule['selector']) as $node) { foreach ($nodes_map[$rule['selector']] as $node) {
$style = $this->styleToArray($node->style); $style = $this->styleToArray($node->style);
$style[$key] = $value; $style[$key] = $value;
$node->style = $this->arrayToStyle($style); $node->style = $this->arrayToStyle($style);