Inheritance: implements Iterator, implements Countable, implements ArrayAccess
Esempio n. 1
0
 /**
  * Query the response for a JQuery compatible CSS selector
  *
  * @link https://code.google.com/p/phpquery/wiki/Selectors
  * @param $selector string
  * @return phpQueryObject
  */
 public function queryHTML($selector)
 {
     if (is_null($this->pq)) {
         $this->pq = phpQuery::newDocument($this->content);
     }
     return $this->pq->find($selector);
 }
Esempio n. 2
0
 /**
  * Enter description here...
  *
  * @param phpQueryObject $self
  */
 public static function example($self, $arg1)
 {
     // this method can be called on any phpQuery object, like this:
     // pq('div')->example('$arg1 Value')
     // do something
     $self->append('Im just an example !');
     // change stack of result object
     return $self->find('div');
 }
 public function processForImages()
 {
     if ($this->options->convert_page_images) {
         $this->document = phpQuery::newDocumentHTML(JResponse::getBody());
         $this->identifyImageSources();
         $this->processImages();
         $this->populateImages();
         $markup = $this->document->getDocument()->htmlOuter();
         //TODO fix so that regex works with data uris?
         $markup = preg_replace('/(<(base|img|br|meta|area|input|link|col|hr|param|frame|isindex)+([\\s]+[\\S]+[\\s]*=[\\s]*("([^"]*)"|\'([^\']*)\'))*[\\s]*)>/imx', '$1/>', $markup);
         JResponse::setBody($markup);
     }
 }
Esempio n. 4
0
 public function toArray()
 {
     foreach ($this->dom->find($this->rowSelector) as $rowKey => $row) {
         foreach (pq($row)->find($this->cellSelector) as $colKey => $cell) {
             $this->addEl(pq($cell), $rowKey, $colKey);
         }
     }
     foreach ($this->data as $key => $values) {
         ksort($values);
         $this->data[$key] = $values;
     }
     return $this;
 }
 /**
  * @return mixed
  */
 public function populate()
 {
     $this->populateInlineScripts();
     $this->populateScriptFiles();
     $this->populateInlineStyles();
     $this->populateStyleFiles();
     $markup = $this->document->getDocument()->htmlOuter();
     $markup = preg_replace('/(<(base|img|br|meta|area|input|link|col|hr|param|frame|isindex)+([\\s]+[\\S]+[\\s]*=[\\s]*("([^"]*)"|\'([^\']*)\'))*[\\s]*)>/imx', '$1/>', $markup);
     JResponse::setBody($markup);
 }
Esempio n. 6
0
/**
 * Utilize RegEx to find the values of attributes given a specific element.
 * Bug libxml2 2.6.28 and previous with regards to selecting attributes with colons in their name
 *
 * @param phpQueryObject $element Element to preform the search on
 * @param string $element_name Name of the element to search for
 * @param string $attribute_name Name of the attribute to search for
 * @return string Value of the attribute for a given element, empty string otherwise
 *
 */
function anno_get_attribute_value_regex($element, $element_name, $attribute_name)
{
    $outer_html = $element->markupOuter();
    // We only want to match everything in the media tag. Non greedy RegEx.
    if (preg_match('/<' . $element_name . ' .*?>/', $outer_html, $element_match)) {
        // $media_match[0] should now just contain the opening media tag and its attribute
        // Match on attribute name where wrapping quotes can be any combination of ', ", or lack there of
        if (preg_match('/ ' . $attribute_name . '=["\']?((?:.(?!["\']?\\s+(?:\\S+)=|[>"\']))+.)["\']?/', $element_match[0], $attribute_match)) {
            // $matches[1] should match data contained in parenthesis above
            if (isset($attribute_match[1])) {
                return $attribute_match[1];
            }
        }
    }
    return '';
}
 /**
  * Multi-purpose function.
  * Use pq() as shortcut.
  *
  * In below examples, $pq is any result of pq(); function.
  *
  * 1. Import markup into existing document (without any attaching):
  * - Import into selected document:
  *   pq('<div/>')				// DOESNT accept text nodes at beginning of input string !
  * - Import into document with ID from $pq->getDocumentID():
  *   pq('<div/>', $pq->getDocumentID())
  * - Import into same document as DOMNode belongs to:
  *   pq('<div/>', DOMNode)
  * - Import into document from phpQuery object:
  *   pq('<div/>', $pq)
  *
  * 2. Run query:
  * - Run query on last selected document:
  *   pq('div.myClass')
  * - Run query on document with ID from $pq->getDocumentID():
  *   pq('div.myClass', $pq->getDocumentID())
  * - Run query on same document as DOMNode belongs to and use node(s)as root for query:
  *   pq('div.myClass', DOMNode)
  * - Run query on document from phpQuery object
  *   and use object's stack as root node(s) for query:
  *   pq('div.myClass', $pq)
  *
  * @param string|DOMNode|DOMNodeList|array	$arg1	HTML markup, CSS Selector, DOMNode or array of DOMNodes
  * @param string|phpQueryObject|DOMNode	$context	DOM ID from $pq->getDocumentID(), phpQuery object (determines also query root) or DOMNode (determines also query root)
  *
  * @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery|QueryTemplatesPhpQuery|false
  * phpQuery object or false in case of error.
  */
 public static function pq($arg1, $context = null)
 {
     if ($arg1 instanceof DOMNODE && !isset($context)) {
         foreach (phpQuery::$documents as $documentWrapper) {
             $compare = $arg1 instanceof DOMDocument ? $arg1 : $arg1->ownerDocument;
             if ($documentWrapper->document->isSameNode($compare)) {
                 $context = $documentWrapper->id;
             }
         }
     }
     if (!$context) {
         $domId = self::$defaultDocumentID;
         if (!$domId) {
             throw new Exception("Can't use last created DOM, because there isn't any. Use phpQuery::newDocument() first.");
         }
         //		} else if (is_object($context) && ($context instanceof PHPQUERY || is_subclass_of($context, 'phpQueryObject')))
     } else {
         if (is_object($context) && $context instanceof phpQueryObject) {
             $domId = $context->getDocumentID();
         } else {
             if ($context instanceof DOMDOCUMENT) {
                 $domId = self::getDocumentID($context);
                 if (!$domId) {
                     //throw new Exception('Orphaned DOMDocument');
                     $domId = self::newDocument($context)->getDocumentID();
                 }
             } else {
                 if ($context instanceof DOMNODE) {
                     $domId = self::getDocumentID($context);
                     if (!$domId) {
                         throw new Exception('Orphaned DOMNode');
                         //				$domId = self::newDocument($context->ownerDocument);
                     }
                 } else {
                     $domId = $context;
                 }
             }
         }
     }
     if ($arg1 instanceof phpQueryObject) {
         //		if (is_object($arg1) && (get_class($arg1) == 'phpQueryObject' || $arg1 instanceof PHPQUERY || is_subclass_of($arg1, 'phpQueryObject'))) {
         /**
          * Return $arg1 or import $arg1 stack if document differs:
          * pq(pq('<div/>'))
          */
         if ($arg1->getDocumentID() == $domId) {
             return $arg1;
         }
         $class = get_class($arg1);
         // support inheritance by passing old object to overloaded constructor
         $phpQuery = $class != 'phpQuery' ? new $class($arg1, $domId) : new phpQueryObject($domId);
         $phpQuery->elements = array();
         foreach ($arg1->elements as $node) {
             $phpQuery->elements[] = $phpQuery->document->importNode($node, true);
         }
         return $phpQuery;
     } else {
         if ($arg1 instanceof DOMNODE || is_array($arg1) && isset($arg1[0]) && $arg1[0] instanceof DOMNODE) {
             /*
              * Wrap DOM nodes with phpQuery object, import into document when needed:
              * pq(array($domNode1, $domNode2))
              */
             $phpQuery = new phpQueryObject($domId);
             if (!$arg1 instanceof DOMNODELIST && !is_array($arg1)) {
                 $arg1 = array($arg1);
             }
             $phpQuery->elements = array();
             foreach ($arg1 as $node) {
                 $sameDocument = $node->ownerDocument instanceof DOMDOCUMENT && !$node->ownerDocument->isSameNode($phpQuery->document);
                 $phpQuery->elements[] = $sameDocument ? $phpQuery->document->importNode($node, true) : $node;
             }
             return $phpQuery;
         } else {
             if (self::isMarkup($arg1)) {
                 /**
                  * Import HTML:
                  * pq('<div/>')
                  */
                 $phpQuery = new phpQueryObject($domId);
                 return $phpQuery->newInstance($phpQuery->documentWrapper->import($arg1));
             } else {
                 /**
                  * Run CSS query:
                  * pq('div.myClass')
                  */
                 $phpQuery = new phpQueryObject($domId);
                 //			if ($context && ($context instanceof PHPQUERY || is_subclass_of($context, 'phpQueryObject')))
                 if ($context && $context instanceof phpQueryObject) {
                     $phpQuery->elements = $context->elements;
                 } else {
                     if ($context && $context instanceof DOMNODELIST) {
                         $phpQuery->elements = array();
                         foreach ($context as $node) {
                             $phpQuery->elements[] = $node;
                         }
                     } else {
                         if ($context && $context instanceof DOMNODE) {
                             $phpQuery->elements = array($context);
                         }
                     }
                 }
                 return $phpQuery->find($arg1);
             }
         }
     }
 }
 public function getPageVars(\phpQueryObject $doc)
 {
     return ['__BasketState' => $doc['#__BasketState']->val(), 'flightSearchSession' => $doc['#flightSearchSession']->val(), 'flightToAddState' => NULL, 'flightOptionsState' => 'Visible', 'basketOptions' => $this->getBasketOptions($doc->html())];
 }
Esempio n. 9
0
    /**
     * @param phpQueryObject $pq
     * @dataProvider provider
     * @return void
     */
    function testSimpleDataInsertion($pq)
    {
        $testName = 'Simple data insertion';
        $testResult = <<<EOF
<div class="articles">
        div.articles text node
        <ul>

        <li>
                <p>This is paragraph of first LI</p>
                <p class="title">News 1 title</p>
                <p class="body">News 1 body</p>
            </li>

<li>
                <p>This is paragraph of first LI</p>
                <p class="title">News 2 title</p>
                <p class="body">News 2 body</p>
            </li>
<li>
                <p>This is paragraph of first LI</p>
                <p class="title">News 3</p>
                <p class="body">News 3 body</p>
            </li>
</ul>
<p>paragraph after UL</p>
    </div>
EOF;
        $rows = array(array('title' => 'News 1 title', 'body' => 'News 1 body'), array('title' => 'News 2 title', 'body' => 'News 2 body'), array('title' => 'News 3', 'body' => 'News 3 body'));
        $articles = $pq->find('.articles ul');
        $rowSrc = $articles->find('li')->remove()->eq(0);
        foreach ($rows as $r) {
            $row = $rowSrc->_clone();
            foreach ($r as $field => $value) {
                $row->find(".{$field}")->html($value);
                //		die($row->htmlOuter());
            }
            $row->appendTo($articles);
        }
        $result = $pq->find('.articles')->htmlOuter();
        //print htmlspecialchars("<pre>{$result}</pre>").'<br />';
        $similarity = 0.0;
        similar_text($testResult, $result, $similarity);
        $this->assertGreaterThan(90, $similarity);
    }
 protected function checkField(\phpQueryObject $pq, $schema, $name, $value)
 {
     $this->assertEquals(1, $pq->find("span.label:contains('{$name}')")->length, "Field {$schema}.{$name} not found");
     $this->assertEquals($value, $pq->find("input[name='struct_schema_data[{$schema}][{$name}]']")->val(), "Field {$schema}.{$name} has wrong value");
 }
Esempio n. 11
0
 /**
  * @param \phpQueryObject $phpQuery
  *
  * @return string
  */
 private static function extractFound($phpQuery)
 {
     foreach ($phpQuery->find('div.noMargin') as $node) {
         $node = pq($node);
         if (mb_stripos($node->html(), "Уставный капитал", null, 'utf-8')) {
             $arr = explode(":", current(array_filter(explode("\r\n", $node->html()))));
             return trim($arr[1]);
         }
     }
     return '';
 }
Esempio n. 12
0
 private function addTextarea(\phpQueryObject $input, &$data, $value = null)
 {
     $data[$input->attr('name')] = "Any text";
 }
Esempio n. 13
0
    /**
     * @param phpQueryObject $pq
     * @dataProvider provider
     * @return void
     */
    function testSimpleDataInsertion($pq)
    {
        $testName = 'Simple data insertion';
        $testResult = <<<EOF
<div class="articles">
        div.articles text node
        <ul>

        <li>
                <p>This is paragraph of first LI</p>
                <p class="title">News 1 title</p>
                <p class="body">News 1 body</p>
            </li>

<li>
                <p>This is paragraph of first LI</p>
                <p class="title">News 2 title</p>
                <p class="body">News 2 body</p>
            </li>
<li>
                <p>This is paragraph of first LI</p>
                <p class="title">News 3</p>
                <p class="body">News 3 body</p>
            </li>
</ul>
<p class="after">paragraph after UL</p>
    </div>
EOF;
        $expected_pq = phpQuery::newDocumentHTML($testResult);
        $rows = array(array('title' => 'News 1 title', 'body' => 'News 1 body'), array('title' => 'News 2 title', 'body' => 'News 2 body'), array('title' => 'News 3', 'body' => 'News 3 body'));
        $articles = $pq->find('.articles ul');
        $rowSrc = $articles->find('li')->remove()->eq(0);
        foreach ($rows as $r) {
            $row = $rowSrc->_clone();
            foreach ($r as $field => $value) {
                $row->find(".{$field}")->html($value);
                //		die($row->htmlOuter());
            }
            $row->appendTo($articles);
        }
        $result = $pq->find('.articles')->htmlOuter();
        //         print htmlspecialchars("<pre>{$result}</pre>").'<br />';
        $this->assertEqualXMLStructure($expected_pq->find('.articles')->elements[0], $pq->find('.articles')->elements[0]);
        //         $this->assertEqualXMLStructure(DOMDocument::loadHTML($testResult)->documentElement, DOMDocument::loadHTML($result)->documentElement);
    }