public function getSelectorCallback($selector)
{
if (NULL === $selector || Constraints::isCallable($selector)) {
return $selector;
} elseif ($selector instanceof \DOMNode) {
return function (\DOMNode $node) use($selector) {
return $node->isSameNode($selector);
};
} elseif (is_string($selector) && $selector !== '') {
return function (\DOMNode $node) use($selector) {
return $this->matches($selector, $node);
};
} elseif ($selector instanceof \Traversable || is_array($selector)) {
return function (\DOMNode $node) use($selector) {
foreach ($selector as $compareWith) {
if ($compareWith instanceof \DOMNode && $node->isSameNode($compareWith)) {
return TRUE;
}
}
return FALSE;
};
}
throw new \InvalidArgumentException('Invalid selector argument.');
}