Skip to content

Commit 2ebc23d

Browse files
committed
Fixed bug in htmldoc::parseSelector() where it couldn't handle quoted attribute values.
1 parent 8247718 commit 2ebc23d

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "minify",
3-
"version": "0.8.3",
3+
"version": "0.8.5",
44
"description": "A token based HTML Document parser and minifier written in PHP",
55
"main": "index.js",
66
"directories": {

src/htmldoc/htmldoc.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,10 @@ protected static function parseSelector(string $selector) {
336336
while (($token = next($tokens)) !== false) {
337337
if ($token['type'] == 'squareclose') {
338338
break;
339-
} elseif ($token['type'] == 'string') {
339+
} elseif (in_array($token['type'], ['string', 'quotes'])) {
340+
if ($token['type'] == 'quotes') {
341+
$token['value'] = stripslashes(mb_substr($token['value'], 1, -1));
342+
}
340343
$item[isset($item['attribute']) ? 'value' : 'attribute'] = $token['value'];
341344
} elseif ($token['type'] == 'comparison') {
342345
$item['comparison'] = $token['value'];

tests/findHtmldocTest.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ public function testCanFindElements() {
1919
$this->assertEquals($doc->length, 4, 'Can count elements');
2020
// var_dump($doc->find('title'));
2121
$this->assertEquals('<title>Find</title>', $doc->find('title')->html());
22-
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p></div>', $doc->find('.find')->html());
22+
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a></div>', $doc->find('.find')->html());
2323
$this->assertEquals('<div id="first" class="first">First</div>', $doc->find('#first')->html());
2424
$this->assertEquals('<div id="first" class="first">First</div>', $doc->find('[class=first]')->html());
25-
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p></div><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p>', $doc->find('[class^=find]')->html());
26-
$this->assertEquals('<h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p>', $doc->find('[class*=__]')->html());
25+
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a></div><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a>', $doc->find('[class^=find]')->html());
26+
$this->assertEquals('<h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a>', $doc->find('[class*=__]')->html());
2727
$this->assertEquals('<h1 class="find__heading">Heading</h1>', $doc->find('[class$=heading]')->html());
2828
$this->assertEquals('<h1 class="find__heading">Heading</h1>', $doc->find('h1[class$=heading]')->html());
2929
$this->assertEquals('<h1 class="find__heading">Heading</h1>', $doc->find('html h1[class$=heading]')->html());
30+
$this->assertEquals('<a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a>', $doc->find('a[href$="://github.com/hexydec/htmldoc/"]')->html());
31+
$this->assertEquals(null, $doc->find('a[href$="://github.com/hexydec/htmldoc"]')->html());
3032
$this->assertEquals('<div id="first" class="first">First</div>', $doc->find('div:first-child')->html());
3133
$this->assertEquals('<div class="last">Last</div>', $doc->find('div:last-child')->html());
3234
$this->assertEquals('<div id="first" class="first">First</div><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p>', $doc->find('.first, .find__heading, .find__paragraph')->html());
@@ -51,9 +53,9 @@ public function testCanTraverseElements() {
5153

5254
$this->assertEquals('<div id="first" class="first">First</div>', $doc->find('body > *')->first()->html(), 'Can find first element');
5355
$this->assertEquals('<div class="last">Last</div>', $doc->find('body > *')->last()->html(), 'Can find last element');
54-
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p></div>', $doc->find('body > *')->eq(1)->html(), 'Can specific element');
55-
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p></div>', $doc->find('body > *')->eq(-2)->html(), 'Can specific element');
56-
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p></div>', $doc->find('.find')->children()->html(), 'Can specific element');
56+
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a></div>', $doc->find('body > *')->eq(1)->html(), 'Can specific element');
57+
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a></div>', $doc->find('body > *')->eq(-2)->html(), 'Can specific element');
58+
$this->assertEquals('<div class="find"><h1 class="find__heading">Heading</h1><p class="find__paragraph" title="This is a paragraph">Paragraph</p><a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a></div>', $doc->find('.find')->children()->html(), 'Can specific element');
5759

5860
$this->assertEquals(3, count($doc->find('body > *')->get()));
5961
$this->assertEquals('<div class="last">Last</div>', $doc->find('body > *')->get(2)->html());

tests/templates/find.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<div class="find">
99
<h1 class="find__heading">Heading</h1>
1010
<p class="find__paragraph" title="This is a paragraph">Paragraph</p>
11+
<a class="find__anchor" href="https://github.com/hexydec/htmldoc/">Anchor</a>
1112
</div>
1213
<div class="last">Last</div>
1314
</body>

0 commit comments

Comments
 (0)