Automattic\WooCommerce\Vendor\Symfony\Component\CssSelector\XPath\Extension

CombinationExtension{}WC 1.0└─ AbstractExtension

XPath expression translator combination extension.

This component is a port of the Python cssselect library, which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.

No Hooks.

Usage

$CombinationExtension = new CombinationExtension();
// use class methods

Methods

  1. public getCombinationTranslators()
  2. public getName()
  3. public translateChild(XPathExpr $xpath, XPathExpr $combinedXpath)
  4. public translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath)
  5. public translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
  6. public translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)

CombinationExtension{} code WC 10.4.3

class CombinationExtension extends AbstractExtension
{
    /**
     * {@inheritdoc}
     */
    public function getCombinationTranslators(): array
    {
        return [
            ' ' => [$this, 'translateDescendant'],
            '>' => [$this, 'translateChild'],
            '+' => [$this, 'translateDirectAdjacent'],
            '~' => [$this, 'translateIndirectAdjacent'],
        ];
    }

    public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
    {
        return $xpath->join('/descendant-or-self::*/', $combinedXpath);
    }

    public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
    {
        return $xpath->join('/', $combinedXpath);
    }

    public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
    {
        return $xpath
            ->join('/following-sibling::', $combinedXpath)
            ->addNameTest()
            ->addCondition('position() = 1');
    }

    public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
    {
        return $xpath->join('/following-sibling::', $combinedXpath);
    }

    /**
     * {@inheritdoc}
     */
    public function getName(): string
    {
        return 'combination';
    }
}