Skip to content

Commit 725b488

Browse files
committed
Merge all html snippets before extracting css rules. This prevents duplicate html/body styles being extracted (due to handling duplicate domdocuments)
1 parent 1116bb6 commit 725b488

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

src/Css/Processor.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ class Processor
1616
*/
1717
public function getRules($css, $existingRules = [])
1818
{
19-
20-
2119
$css = $this->doCleanup($css);
2220
$rulesProcessor = new RuleProcessor();
2321
$rulesByMediaQuery = $rulesProcessor->splitIntoSeparateMediaQueries($css);

src/Css/Rule/Processor.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,32 @@ public function splitIntoSeparateMediaQueries($rulesString)
2525
$mediaQueryMatches = [];
2626
preg_match_all($mediaQuerySelector, $rulesString, $mediaQueryMatches);
2727

28-
$remainingRuleset = $rulesString;
28+
$remainingRuleSet = $rulesString;
2929

3030
$queryParts = [];
3131
foreach (reset($mediaQueryMatches) as $mediaQueryMatch) {
32-
$tokenisedRules = explode($mediaQueryMatch, $remainingRuleset);
32+
$tokenisedRules = explode($mediaQueryMatch, $remainingRuleSet);
33+
3334

3435
$queryParts[] = reset($tokenisedRules);
3536
$queryParts[] = $mediaQueryMatch;
3637

3738
if (count($tokenisedRules) === 2) {
38-
$remainingRuleset = end($tokenisedRules);
39+
$remainingRuleSet = end($tokenisedRules);
40+
} else {
41+
$remainingRuleSet = '';
3942
}
4043
}
4144

45+
if (!empty($remainingRuleSet)) {
46+
$queryParts[] = $remainingRuleSet;
47+
}
4248

4349
$indexedRules = [];
4450

4551
foreach ($queryParts as $part) {
4652

47-
if (strpos($part, '@media') === FALSE) {
53+
if (strpos($part, '@media') === false) {
4854
$indexedRules[][''] = (array)explode('}', $part);
4955
continue;
5056
}
@@ -88,7 +94,7 @@ private function cleanup($string)
8894
* Convert a rule-string into an object
8995
*
9096
* @param string $rule
91-
* @param int $originalOrder
97+
* @param int $originalOrder
9298
* @return array
9399
*/
94100
public function convertToObjects($media, $rule, $originalOrder)

src/PageSpecificCss.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
namespace PageSpecificCss;
44

5+
use DOMNodeList;
56
use Exception;
67
use Symfony\Component\CssSelector\CssSelectorConverter;
78
use Symfony\Component\CssSelector\Exception\ExceptionInterface;
89
use PageSpecificCss\Css\Processor;
9-
use PageSpecificCss\Css\Rule\Processor as RuleProcessor;
1010
use PageSpecificCss\Css\Rule\Rule;
1111
use Symfony\Component\CssSelector\Exception\ExpressionErrorException;
1212

@@ -63,9 +63,7 @@ public function addBaseRules($sourceCss)
6363

6464
public function buildExtractedRuleSet()
6565
{
66-
foreach ($this->htmlStore->getSnippets() as $htmlSnippet) {
67-
$this->processHtmlToStore($htmlSnippet);
68-
}
66+
$this->processHtmlToStore(implode('', $this->htmlStore->getSnippets()));
6967

7068
return $this->cssStore->compileStyles();
7169
}
@@ -104,14 +102,12 @@ public function extractCss($html)
104102

105103
$xPath = new \DOMXPath($document);
106104

105+
107106
$applicable_rules = array_filter(
108107
$this->rules,
109108
function (Rule $rule) use ($xPath) {
110-
try {
111-
if ($rule->getSelector() === "u-color-orange-base") {
112-
error_log("hola!!!");
113-
}
114109

110+
try {
115111
$expression = $this->cssConverter->toXPath($rule->getSelector());
116112
} catch (ExpressionErrorException $expressionErrorException) {
117113

@@ -132,6 +128,7 @@ function (Rule $rule) use ($xPath) {
132128
return false;
133129
}
134130

131+
/** @var DOMNodeList $elements */
135132
$elements = $xPath->query($expression);
136133

137134
if ($elements === false || $elements->length == 0) {

0 commit comments

Comments
 (0)