You are here

public function Manipulator::prepend in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/behat/mink/src/Selector/Xpath/Manipulator.php \Behat\Mink\Selector\Xpath\Manipulator::prepend()

Prepends the XPath prefix to the given XPath.

The returned XPath will match elements matching the XPath inside an element matching the prefix.

Parameters

string $xpath:

string $prefix:

Return value

string

File

vendor/behat/mink/src/Selector/Xpath/Manipulator.php, line 37

Class

Manipulator
XPath manipulation utility.

Namespace

Behat\Mink\Selector\Xpath

Code

public function prepend($xpath, $prefix) {
  $expressions = array();

  // If the xpath prefix contains a union we need to wrap it in parentheses.
  if (preg_match(self::UNION_PATTERN, $prefix)) {
    $prefix = '(' . $prefix . ')';
  }

  // Split any unions into individual expressions.
  foreach (preg_split(self::UNION_PATTERN, $xpath) as $expression) {
    $expression = trim($expression);
    $parenthesis = '';

    // If the union is inside some braces, we need to preserve the opening braces and apply
    // the prefix only inside it.
    if (preg_match('/^[\\(\\s*]+/', $expression, $matches)) {
      $parenthesis = $matches[0];
      $expression = substr($expression, strlen($parenthesis));
    }

    // add prefix before element selector
    if (0 === strpos($expression, '/')) {
      $expression = $prefix . $expression;
    }
    else {
      $expression = $prefix . '/' . $expression;
    }
    $expressions[] = $parenthesis . $expression;
  }
  return implode(' | ', $expressions);
}