File tree Expand file tree Collapse file tree 4 files changed +56
-2
lines changed
Expand file tree Collapse file tree 4 files changed +56
-2
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ Please also have a look at our
1414
1515### Changed
1616
17+ - Cleanup extra whitespace in css selector (#1398 )
1718- The array keys passed to ` DeclarationBlock::setSelectors() ` are no longer
1819 preserved (#1407 )
1920
Original file line number Diff line number Diff line change 99use Sabberworm \CSS \Renderable ;
1010
1111use function Safe \preg_match ;
12+ use function Safe \preg_replace ;
1213
1314/**
1415 * Class representing a single CSS selector. Selectors have to be split by the comma prior to being passed into this
@@ -74,7 +75,12 @@ public function getSelector(): string
7475
7576 public function setSelector (string $ selector ): void
7677 {
77- $ this ->selector = \trim ($ selector );
78+ $ selector = \trim ($ selector );
79+
80+ $ hasAttribute = \strpos ($ selector , '[ ' ) !== false ;
81+
82+ // Whitespace can't be adjusted within an attribute selector, as it would change its meaning
83+ $ this ->selector = !$ hasAttribute ? preg_replace ('/ \\s++/ ' , ' ' , $ selector ) : $ selector ;
7884 }
7985
8086 /**
Original file line number Diff line number Diff line change @@ -770,7 +770,7 @@ public function selectorIgnoresInFile(): void
770770 $ document = self ::parsedStructureForFile ('selector-ignores ' , Settings::create ()->withMultibyteSupport (true ));
771771 $ expected = '.some[selectors-may= \'contain-a-{ \'] {} '
772772 . "\n"
773- . '.this-selector .valid {width: 100px;} '
773+ . '.this-selector .valid {width: 100px;} '
774774 . "\n"
775775 . '@media only screen and (min-width: 200px) {.test {prop: val;}} ' ;
776776 self ::assertSame ($ expected , $ document ->render ());
Original file line number Diff line number Diff line change @@ -141,4 +141,51 @@ public function isValidForInvalidSelectorReturnsFalse(string $selector): void
141141 {
142142 self ::assertFalse (Selector::isValid ($ selector ));
143143 }
144+
145+ /**
146+ * @test
147+ */
148+ public function cleansUpSpacesWithinSelector (): void
149+ {
150+ $ selector = 'p > small ' ;
151+
152+ $ subject = new Selector ($ selector );
153+
154+ self ::assertSame ('p > small ' , $ subject ->getSelector ());
155+ }
156+
157+ /**
158+ * @test
159+ */
160+ public function cleansUpTabsWithinSelector (): void
161+ {
162+ $ selector = "p \t> \tsmall " ;
163+
164+ $ subject = new Selector ($ selector );
165+
166+ self ::assertSame ('p > small ' , $ subject ->getSelector ());
167+ }
168+
169+ /**
170+ * @test
171+ */
172+ public function cleansUpNewLineWithinSelector (): void
173+ {
174+ $ selector = "p \n> \nsmall " ;
175+
176+ $ subject = new Selector ($ selector );
177+
178+ self ::assertSame ('p > small ' , $ subject ->getSelector ());
179+ }
180+
181+
182+ /**
183+ * @test
184+ */
185+ public function doesNotCleanupSpacesWithinAttributeSelector (): void
186+ {
187+ $ subject = new Selector ('a[title="extra space"] ' );
188+
189+ self ::assertSame ('a[title="extra space"] ' , $ subject ->getSelector ());
190+ }
144191}
You can’t perform that action at this time.
0 commit comments