Skip to content
This repository has been archived by the owner on Mar 19, 2020. It is now read-only.

Commit

Permalink
Fixed: selector matcher definitions
Browse files Browse the repository at this point in the history
  • Loading branch information
TonyBogdanov committed Apr 1, 2018
1 parent 60a2fcd commit 78c26bf
Show file tree
Hide file tree
Showing 43 changed files with 1,811 additions and 1,789 deletions.
4 changes: 3 additions & 1 deletion classes/Dom.php
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,9 @@ public function __construct($content = null)
* @var Tokens\Token $child
*/
foreach ($content->getChildren() as $child) {
$node->insertAfter((new static($child))->get(0));
/** @var NodeInterface $childNode */
$childNode = (new static($child))->get(0);
$node->insertAfter($childNode);
}

$this->nodes = [$node];
Expand Down
1 change: 1 addition & 0 deletions classes/Node/Element.php
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,7 @@ public function insertBefore(NodeInterface $node, NodeInterface $before = null):
if (false === $index) {
throw new \InvalidArgumentException('Only immediate child nodes can be used as insertBefore anchor.');
}
$index = (int) $index;
}

array_splice($this->children, $index, 0, [$node->attach($this)]);
Expand Down
31 changes: 17 additions & 14 deletions classes/SelectorMatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

namespace SDom;

use SDom\Node as Dom;
use SDom\Node as DomNode;
use SDom\SelectorMatcher\AttributeNodeTrait;
use SDom\SelectorMatcher\ClassNodeTrait;
use SDom\SelectorMatcher\CombinedSelectorNodeTrait;
use SDom\SelectorMatcher\ElementNodeTrait;
use SDom\SelectorMatcher\HashNodeTrait;
use Symfony\Component\CssSelector\Node as Css;
use Symfony\Component\CssSelector\Node as CssNode;

/**
* A class for matching nodes against selector tokens.
Expand Down Expand Up @@ -38,7 +38,7 @@ class SelectorMatcher
*/
public static function containsWord(string $word, string $sentence): bool
{
return in_array($word, preg_split('/\s+/', $sentence));
return in_array($word, preg_split('/\s+/', $sentence) ?: []);
}

/**
Expand All @@ -47,30 +47,33 @@ public static function containsWord(string $word, string $sentence): bool
* The $effectiveRoot specifies an Element node part of the hierarchy that is to be considered as root of the tree.
* Immediate child nodes will be treated as if they don't have a parent.
*
* @param Css\NodeInterface $token
* @param Dom\Element $node
* @param Dom\Element|null $effectiveRoot
* @param CssNode\NodeInterface $token
* @param DomNode\Element $node
* @param DomNode\Element|null $effectiveRoot
* @return bool
*/
public function match(Css\NodeInterface $token, Dom\Element $node, Dom\Element $effectiveRoot = null): bool
{
public function match(
CssNode\NodeInterface $token,
DomNode\Element $node,
DomNode\Element $effectiveRoot = null
): bool {
switch (true) {
case $token instanceof Css\SelectorNode:
case $token instanceof CssNode\SelectorNode:
return $this->match($token->getTree(), $node, $effectiveRoot);

case $token instanceof Css\ElementNode:
case $token instanceof CssNode\ElementNode:
return $this->matchElementNode($token, $node);

case $token instanceof Css\AttributeNode:
case $token instanceof CssNode\AttributeNode:
return $this->matchAttributeNode($token, $node, $effectiveRoot);

case $token instanceof Css\ClassNode:
case $token instanceof CssNode\ClassNode:
return $this->matchClassNode($token, $node, $effectiveRoot);

case $token instanceof Css\HashNode:
case $token instanceof CssNode\HashNode:
return $this->matchHashNode($token, $node, $effectiveRoot);

case $token instanceof Css\CombinedSelectorNode:
case $token instanceof CssNode\CombinedSelectorNode:
return $this->matchCombinedSelectorNode($token, $node, $effectiveRoot);

default:
Expand Down
2 changes: 1 addition & 1 deletion classes/SelectorMatcher/AttributeNodeTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
namespace SDom\SelectorMatcher;

use SDom\Node\Element;
use SDom\Node\NodeInterface;
use SDom\SelectorMatcher;
use Symfony\Component\CssSelector\Node\AttributeNode;
use Symfony\Component\CssSelector\Node\NodeInterface;

/**
* @pattern E[foo]
Expand Down
2 changes: 1 addition & 1 deletion classes/SelectorMatcher/ClassNodeTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
namespace SDom\SelectorMatcher;

use SDom\Node\Element;
use SDom\Node\NodeInterface;
use SDom\SelectorMatcher;
use Symfony\Component\CssSelector\Node\ClassNode;
use Symfony\Component\CssSelector\Node\NodeInterface;

/**
* @pattern E.warning
Expand Down
2 changes: 1 addition & 1 deletion classes/SelectorMatcher/CombinedSelectorNodeTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
namespace SDom\SelectorMatcher;

use SDom\Node\Element;
use SDom\Node\NodeInterface;
use Symfony\Component\CssSelector\Node\CombinedSelectorNode;
use Symfony\Component\CssSelector\Node\NodeInterface;

/**
* @pattern E F
Expand Down
2 changes: 1 addition & 1 deletion classes/SelectorMatcher/ElementNodeTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
namespace SDom\SelectorMatcher;

use SDom\Node\Element;
use SDom\Node\NodeInterface;
use Symfony\Component\CssSelector\Node\ElementNode;
use Symfony\Component\CssSelector\Node\NodeInterface;

/**
* @pattern *
Expand Down
2 changes: 1 addition & 1 deletion classes/SelectorMatcher/HashNodeTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
namespace SDom\SelectorMatcher;

use SDom\Node\Element;
use SDom\Node\NodeInterface;
use Symfony\Component\CssSelector\Node\HashNode;
use Symfony\Component\CssSelector\Node\NodeInterface;

/**
* @pattern E#myid
Expand Down

0 comments on commit 78c26bf

Please sign in to comment.