QueryList/src/Dom/Elements.php
2020-03-10 21:03:25 +08:00

228 lines
7.6 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: Jaeger <JaegerCode@gmail.com>
* Date: 2017/9/19
*/
namespace QL\Dom;
use phpQueryObject;
/**
* Class Elements
* @package QL\Dom
*
* @method Elements toReference(&$var)
* @method Elements documentFragment($state=null)
* @method Elements toRoot()
* @method Elements getDocumentIDRef(&$documentID)
* @method Elements getDocument()
* @method \DOMDocument getDOMDocument()
* @method Elements getDocumentID()
* @method Elements unloadDocument()
* @method bool isHTML()
* @method bool isXHTML()
* @method bool isXML()
* @method string serialize()
* @method array serializeArray($submit=null)
* @method \DOMElement|\DOMElement[] get($index=null,$callback1=null,$callback2=null,$callback3=null)
* @method string|array getString($index=null,$callback1=null,$callback2=null,$callback3=null)
* @method string|array getStrings($index=null,$callback1=null,$callback2=null,$callback3=null)
* @method Elements newInstance($newStack=null)
* @method Elements find($selectors,$context=null,$noHistory=false)
* @method Elements|bool is($selector,$nodes=null)
* @method Elements filterCallback($callback,$_skipHistory=false)
* @method Elements filter($selectors,$_skipHistory=false)
* @method Elements load($url,$data=null,$callback=null)
* @method Elements trigger($type,$data=[])
* @method Elements triggerHandler($type,$data=[])
* @method Elements bind($type,$data,$callback=null)
* @method Elements unbind($type=null,$callback=null)
* @method Elements change($callback=null)
* @method Elements submit($callback=null)
* @method Elements click($callback=null)
* @method Elements wrapAllOld($wrapper)
* @method Elements wrapAll($wrapper)
* @method Elements wrapAllPHP($codeBefore,$codeAfter)
* @method Elements wrap($wrapper)
* @method Elements wrapPHP($codeBefore,$codeAfter)
* @method Elements wrapInner($wrapper)
* @method Elements wrapInnerPHP($codeBefore,$codeAfter)
* @method Elements contents()
* @method Elements contentsUnwrap()
* @method Elements switchWith($markup)
* @method Elements eq($num)
* @method Elements size()
* @method Elements length()
* @method int count()
* @method Elements end($level=1)
* @method Elements _clone()
* @method Elements replaceWithPHP($code)
* @method Elements replaceWith($content)
* @method Elements replaceAll($selector)
* @method Elements remove($selector=null)
* @method Elements|string markup($markup=null,$callback1=null,$callback2=null,$callback3=null)
* @method string markupOuter($callback1=null,$callback2=null,$callback3=null)
* @method Elements|string html($html,$callback1,$callback2,$callback3)
* @method Elements|string xml($xml,$callback1,$callback2,$callback3)
* @method string htmlOuter($callback1,$callback2,$callback3)
* @method string xmlOuter($callback1,$callback2,$callback3)
* @method Elements php($code)
* @method string markupPHP($code)
* @method string markupOuterPHP()
* @method Elements children($selector)
* @method Elements ancestors($selector)
* @method Elements append($content)
* @method Elements appendPHP($content)
* @method Elements appendTo($seletor)
* @method Elements prepend($content)
* @method Elements prependPHP($content)
* @method Elements prependTo($seletor)
* @method Elements before($content)
* @method Elements beforePHP($content)
* @method Elements insertBefore($seletor)
* @method Elements after($content)
* @method Elements afterPHP($content)
* @method Elements insertAfter($seletor)
* @method Elements insert($target,$type)
* @method int index($subject)
* @method Elements slice($start,$end=null)
* @method Elements reverse()
* @method Elements|string text($text=null,$callback1=null,$callback2=null,$callback3=null)
* @method Elements plugin($class,$file=null)
* @method Elements _next($selector=null)
* @method Elements _prev($selector=null)
* @method Elements prev($selector=null)
* @method Elements prevAll($selector=null)
* @method Elements nextAll($selector=null)
* @method Elements siblings($selector=null)
* @method Elements not($selector=null)
* @method Elements add($selector=null)
* @method Elements parent($selector=null)
* @method Elements parents($selector=null)
* @method Elements stack($nodeTypes=null)
* @method Elements|string attr($attr=null,$value=null)
* @method Elements attrPHP($attr,$code)
* @method Elements removeAttr($attr)
* @method Elements|string val($val=null)
* @method Elements andSelf()
* @method Elements addClass($className)
* @method Elements addClassPHP($className)
* @method bool hasClass($className)
* @method Elements removeClass($className)
* @method Elements toggleClass($className)
* @method Elements _empty()
* @method Elements each($callback,$param1=null,$param2=null,$param3=null)
* @method Elements callback($callback,$param1=null,$param2=null,$param3=null)
* @method string data($key,$value=null)
* @method Elements removeData($key)
* @method void rewind()
* @method Elements current()
* @method int key()
* @method Elements next($cssSelector=null)
* @method bool valid()
* @method bool offsetExists($offset)
* @method Elements offsetGet($offset)
* @method void offsetSet($offset,$value)
* @method string whois($oneNode)
* @method Elements dump()
* @method Elements dumpWhois()
* @method Elements dumpLength()
* @method Elements dumpTree($html,$title)
* @method dumpDie()
*/
class Elements
{
/**
* @var phpQueryObject
*/
protected $elements;
/**
* Elements constructor.
* @param $elements
*/
public function __construct(phpQueryObject $elements)
{
$this->elements = $elements;
}
public function __get($name)
{
return property_exists($this->elements,$name)?$this->elements->$name:$this->elements->attr($name);
}
public function __call($name, $arguments)
{
$obj = call_user_func_array([$this->elements,$name],$arguments);
if($obj instanceof phpQueryObject){
$obj = new self($obj);
}else if(is_string($obj)){
$obj = trim($obj);
}
return $obj;
}
/**
* Iterating elements
*
* @param $callback
* @return \Illuminate\Support\Collection|\Tightenco\Collect\Support\Collection
*/
public function map($callback)
{
$collection = collect();
$this->elements->each(function($dom) use(& $collection,$callback){
$collection->push($callback(new self(pq($dom))));
});
return $collection;
}
/**
* Gets the attributes of all the elements
*
* @param $attr HTML attribute name
* @return \Illuminate\Support\Collection|\Tightenco\Collect\Support\Collection
*/
public function attrs($attr)
{
return $this->map(function($item) use($attr){
return $item->attr($attr);
});
}
/**
* Gets the text of all the elements
*
* @return \Illuminate\Support\Collection|\Tightenco\Collect\Support\Collection
*/
public function texts()
{
return $this->map(function($item){
return trim($item->text());
});
}
/**
* Gets the html of all the elements
*
* @return \Illuminate\Support\Collection|\Tightenco\Collect\Support\Collection
*/
public function htmls()
{
return $this->map(function($item){
return trim($item->html());
});
}
/**
* @return phpQueryObject
*/
public function getElements(): phpQueryObject
{
return $this->elements;
}
}