feature #33861 [CssSelector] Support *:only-of-type (jakzal)

This PR was merged into the 4.4 branch.

Discussion
----------

[CssSelector] Support *:only-of-type

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Before, this pseudo class selector only worked when the element was specified, i.e. `p:only-of-type` would select all paragraphs which are the only child of its parent.

Now, `*:only-of-type` is also supported to select any single child.

Commits
-------

eae2ebc0d7 [CssSelector] Support *:only-of-type pseudo class selector
This commit is contained in:
Fabien Potencier 2019-10-05 09:08:54 +02:00
commit 3a66d59326
3 changed files with 7 additions and 7 deletions

View File

@ -1,6 +1,11 @@
CHANGELOG
=========
4.4.0
-----
* Added support for `*:only-of-type`
2.8.0
-----

View File

@ -308,6 +308,8 @@ HTML
['li div:only-child', ['li-div']],
['div *:only-child', ['li-div', 'foobar-span']],
['p:only-of-type', ['paragraph']],
[':only-of-type', ['html', 'li-div', 'foobar-span', 'paragraph']],
['div#foobar-div :only-of-type', ['foobar-span']],
['a:empty', ['name-anchor']],
['a:EMpty', ['name-anchor']],
['li:empty', ['third-li', 'fourth-li', 'fifth-li', 'sixth-li']],

View File

@ -100,17 +100,10 @@ class PseudoClassExtension extends AbstractExtension
->addCondition('last() = 1');
}
/**
* @throws ExpressionErrorException
*/
public function translateOnlyOfType(XPathExpr $xpath): XPathExpr
{
$element = $xpath->getElement();
if ('*' === $element) {
throw new ExpressionErrorException('"*:only-of-type" is not implemented.');
}
return $xpath->addCondition(sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element));
}