You are here

private function Form::initialize in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/dom-crawler/Form.php \Symfony\Component\DomCrawler\Form::initialize()

Adds form elements related to this form.

Creates an internal copy of the submitted 'button' element and the form node or the entire document depending on whether we need to find non-descendant elements through HTML5 'form' attribute.

1 call to Form::initialize()
Form::__construct in vendor/symfony/dom-crawler/Form.php
Constructor.

File

vendor/symfony/dom-crawler/Form.php, line 396

Class

Form
Form represents an HTML form.

Namespace

Symfony\Component\DomCrawler

Code

private function initialize() {
  $this->fields = new FormFieldRegistry();
  $xpath = new \DOMXPath($this->node->ownerDocument);

  // add submitted button if it has a valid name
  if ('form' !== $this->button->nodeName && $this->button
    ->hasAttribute('name') && $this->button
    ->getAttribute('name')) {
    if ('input' == $this->button->nodeName && 'image' == strtolower($this->button
      ->getAttribute('type'))) {
      $name = $this->button
        ->getAttribute('name');
      $this->button
        ->setAttribute('value', '0');

      // temporarily change the name of the input node for the x coordinate
      $this->button
        ->setAttribute('name', $name . '.x');
      $this
        ->set(new Field\InputFormField($this->button));

      // temporarily change the name of the input node for the y coordinate
      $this->button
        ->setAttribute('name', $name . '.y');
      $this
        ->set(new Field\InputFormField($this->button));

      // restore the original name of the input node
      $this->button
        ->setAttribute('name', $name);
    }
    else {
      $this
        ->set(new Field\InputFormField($this->button));
    }
  }

  // find form elements corresponding to the current form
  if ($this->node
    ->hasAttribute('id')) {

    // corresponding elements are either descendants or have a matching HTML5 form attribute
    $formId = Crawler::xpathLiteral($this->node
      ->getAttribute('id'));
    $fieldNodes = $xpath
      ->query(sprintf('descendant::input[@form=%s] | descendant::button[@form=%s] | descendant::textarea[@form=%s] | descendant::select[@form=%s] | //form[@id=%s]//input[not(@form)] | //form[@id=%s]//button[not(@form)] | //form[@id=%s]//textarea[not(@form)] | //form[@id=%s]//select[not(@form)]', $formId, $formId, $formId, $formId, $formId, $formId, $formId, $formId));
    foreach ($fieldNodes as $node) {
      $this
        ->addField($node);
    }
  }
  else {

    // do the xpath query with $this->node as the context node, to only find descendant elements
    // however, descendant elements with form attribute are not part of this form
    $fieldNodes = $xpath
      ->query('descendant::input[not(@form)] | descendant::button[not(@form)] | descendant::textarea[not(@form)] | descendant::select[not(@form)]', $this->node);
    foreach ($fieldNodes as $node) {
      $this
        ->addField($node);
    }
  }
  if ($this->baseHref && '' !== $this->node
    ->getAttribute('action')) {
    $this->currentUri = $this->baseHref;
  }
}