From 8596bdd6af99ab57824d91685175f044cb8dbaa5 Mon Sep 17 00:00:00 2001 From: Lars Moelleken Date: Mon, 25 Jul 2016 15:37:21 +0200 Subject: [PATCH] [~]: "Refactor the storage of the computed properties" | thx @stof -> https://github.com/stof/CssToInlineStyles/commit/c8dad9f67866ddc5c68938c08082c115b5ad35a4 --- src/CssToInlineStyles.php | 17 ++++++----------- tests/CssToInlineStylesTest.php | 6 +++++- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/CssToInlineStyles.php b/src/CssToInlineStyles.php index ec72520..3ae3890 100644 --- a/src/CssToInlineStyles.php +++ b/src/CssToInlineStyles.php @@ -536,6 +536,7 @@ private function splitIntoProperties($styles) */ private function createXPath(\DOMDocument $document, array $cssRules) { + $propertyStorage = new \SplObjectStorage(); $xPath = new \DOMXPath($document); // any rules? @@ -593,7 +594,7 @@ private function createXPath(\DOMDocument $document, array $cssRules) } // no styles stored? - if (null === $element->attributes->getNamedItem('data-css-to-inline-styles-original-styles')) { + if (!isset($propertyStorage[$element])) { // init var $originalStyle = $element->attributes->getNamedItem('style'); @@ -605,7 +606,7 @@ private function createXPath(\DOMDocument $document, array $cssRules) } // store original styles - $element->setAttribute('data-css-to-inline-styles-original-styles', $originalStyle); + $propertyStorage->attach($element, $originalStyle); // clear the styles $element->setAttribute('style', ''); @@ -619,13 +620,10 @@ private function createXPath(\DOMDocument $document, array $cssRules) } } - // reapply original styles (search elements) - $elements = $xPath->query('//*[@data-css-to-inline-styles-original-styles]'); + //var_dump($propertyStorage); - // loop found elements - foreach ($elements as $element) { - // get the original styles - $originalStyle = $element->attributes->getNamedItem('data-css-to-inline-styles-original-styles')->value; + foreach ($propertyStorage as $element) { + $originalStyle = $propertyStorage->getInfo(); if ($originalStyle) { $originalStyles = $this->splitIntoProperties($originalStyle); @@ -638,9 +636,6 @@ private function createXPath(\DOMDocument $document, array $cssRules) $element->setAttribute('style', $propertiesString); } } - - // remove placeholder - $element->removeAttribute('data-css-to-inline-styles-original-styles'); } } diff --git a/tests/CssToInlineStylesTest.php b/tests/CssToInlineStylesTest.php index 0b34bd9..2e3c186 100644 --- a/tests/CssToInlineStylesTest.php +++ b/tests/CssToInlineStylesTest.php @@ -56,7 +56,11 @@ public function testSimpleElementSelectorWithUtf8() #東とう京{ color: black !important} '; $expected = ''; - $this->runHTMLToCSS($html, $css, $expected); + + for ($i = 1; $i <= 2; $i++) { // keep this loop for quick&dirty performance tests + $this->runHTMLToCSS($html, $css, $expected); + } + } /**