PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / css-selector / XPath / Extension / NodeExtension.php
mailpoet / vendor-prefixed / symfony / css-selector / XPath / Extension Last commit date
AbstractExtension.php 2 years ago AttributeMatchingExtension.php 2 years ago CombinationExtension.php 2 years ago ExtensionInterface.php 2 years ago FunctionExtension.php 2 years ago HtmlExtension.php 2 years ago NodeExtension.php 2 years ago PseudoClassExtension.php 2 years ago index.php 2 years ago
NodeExtension.php
123 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\CssSelector\XPath\Extension;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\CssSelector\Node;
5 use MailPoetVendor\Symfony\Component\CssSelector\XPath\Translator;
6 use MailPoetVendor\Symfony\Component\CssSelector\XPath\XPathExpr;
7 class NodeExtension extends AbstractExtension
8 {
9 public const ELEMENT_NAME_IN_LOWER_CASE = 1;
10 public const ATTRIBUTE_NAME_IN_LOWER_CASE = 2;
11 public const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
12 private $flags;
13 public function __construct(int $flags = 0)
14 {
15 $this->flags = $flags;
16 }
17 public function setFlag(int $flag, bool $on) : self
18 {
19 if ($on && !$this->hasFlag($flag)) {
20 $this->flags += $flag;
21 }
22 if (!$on && $this->hasFlag($flag)) {
23 $this->flags -= $flag;
24 }
25 return $this;
26 }
27 public function hasFlag(int $flag) : bool
28 {
29 return (bool) ($this->flags & $flag);
30 }
31 public function getNodeTranslators() : array
32 {
33 return ['Selector' => [$this, 'translateSelector'], 'CombinedSelector' => [$this, 'translateCombinedSelector'], 'Negation' => [$this, 'translateNegation'], 'Function' => [$this, 'translateFunction'], 'Pseudo' => [$this, 'translatePseudo'], 'Attribute' => [$this, 'translateAttribute'], 'Class' => [$this, 'translateClass'], 'Hash' => [$this, 'translateHash'], 'Element' => [$this, 'translateElement']];
34 }
35 public function translateSelector(Node\SelectorNode $node, Translator $translator) : XPathExpr
36 {
37 return $translator->nodeToXPath($node->getTree());
38 }
39 public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator) : XPathExpr
40 {
41 return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector());
42 }
43 public function translateNegation(Node\NegationNode $node, Translator $translator) : XPathExpr
44 {
45 $xpath = $translator->nodeToXPath($node->getSelector());
46 $subXpath = $translator->nodeToXPath($node->getSubSelector());
47 $subXpath->addNameTest();
48 if ($subXpath->getCondition()) {
49 return $xpath->addCondition(\sprintf('not(%s)', $subXpath->getCondition()));
50 }
51 return $xpath->addCondition('0');
52 }
53 public function translateFunction(Node\FunctionNode $node, Translator $translator) : XPathExpr
54 {
55 $xpath = $translator->nodeToXPath($node->getSelector());
56 return $translator->addFunction($xpath, $node);
57 }
58 public function translatePseudo(Node\PseudoNode $node, Translator $translator) : XPathExpr
59 {
60 $xpath = $translator->nodeToXPath($node->getSelector());
61 return $translator->addPseudoClass($xpath, $node->getIdentifier());
62 }
63 public function translateAttribute(Node\AttributeNode $node, Translator $translator) : XPathExpr
64 {
65 $name = $node->getAttribute();
66 $safe = $this->isSafeName($name);
67 if ($this->hasFlag(self::ATTRIBUTE_NAME_IN_LOWER_CASE)) {
68 $name = \strtolower($name);
69 }
70 if ($node->getNamespace()) {
71 $name = \sprintf('%s:%s', $node->getNamespace(), $name);
72 $safe = $safe && $this->isSafeName($node->getNamespace());
73 }
74 $attribute = $safe ? '@' . $name : \sprintf('attribute::*[name() = %s]', Translator::getXpathLiteral($name));
75 $value = $node->getValue();
76 $xpath = $translator->nodeToXPath($node->getSelector());
77 if ($this->hasFlag(self::ATTRIBUTE_VALUE_IN_LOWER_CASE)) {
78 $value = \strtolower($value);
79 }
80 return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value);
81 }
82 public function translateClass(Node\ClassNode $node, Translator $translator) : XPathExpr
83 {
84 $xpath = $translator->nodeToXPath($node->getSelector());
85 return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName());
86 }
87 public function translateHash(Node\HashNode $node, Translator $translator) : XPathExpr
88 {
89 $xpath = $translator->nodeToXPath($node->getSelector());
90 return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId());
91 }
92 public function translateElement(Node\ElementNode $node) : XPathExpr
93 {
94 $element = $node->getElement();
95 if ($element && $this->hasFlag(self::ELEMENT_NAME_IN_LOWER_CASE)) {
96 $element = \strtolower($element);
97 }
98 if ($element) {
99 $safe = $this->isSafeName($element);
100 } else {
101 $element = '*';
102 $safe = \true;
103 }
104 if ($node->getNamespace()) {
105 $element = \sprintf('%s:%s', $node->getNamespace(), $element);
106 $safe = $safe && $this->isSafeName($node->getNamespace());
107 }
108 $xpath = new XPathExpr('', $element);
109 if (!$safe) {
110 $xpath->addNameTest();
111 }
112 return $xpath;
113 }
114 public function getName() : string
115 {
116 return 'node';
117 }
118 private function isSafeName(string $name) : bool
119 {
120 return 0 < \preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name);
121 }
122 }
123