同步操作将从 叶子/generateIP 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
<?php/*** phpQuery is a server-side, chainable, CSS3 selector driven* Document Object Model (DOM) API based on jQuery JavaScript Library.** @version 0.9.5* @link http://code.google.com/p/phpquery/* @link http://phpquery-library.blogspot.com/* @link http://jquery.com/* @author Tobiasz Cudnik <tobiasz.cudnik/gmail.com>* @license http://www.opensource.org/licenses/mit-license.php MIT License* @package phpQuery*/// class names for instanceof// TODO move them as class constants into phpQuerydefine('DOMDOCUMENT', 'DOMDocument');define('DOMELEMENT', 'DOMElement');define('DOMNODELIST', 'DOMNodeList');define('DOMNODE', 'DOMNode');require_once(dirname(__FILE__) . '/phpQuery/DOMEvent.php');require_once(dirname(__FILE__) . '/phpQuery/DOMDocumentWrapper.php');require_once(dirname(__FILE__) . '/phpQuery/phpQueryEvents.php');require_once(dirname(__FILE__) . '/phpQuery/Callback.php');require_once(dirname(__FILE__) . '/phpQuery/phpQueryObject.php');require_once(dirname(__FILE__) . '/phpQuery/compat/mbstring.php');/*** Static namespace for phpQuery functions.** @author Tobiasz Cudnik <tobiasz.cudnik/gmail.com>* @package phpQuery*/abstract class phpQuery {/*** XXX: Workaround for mbstring problems** @var bool*/public static $mbstringSupport = true;public static $debug = false;public static $documents = array();public static $defaultDocumentID = null;// public static $defaultDoctype = 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"';/*** Applies only to HTML.** @var unknown_type*/public static $defaultDoctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">';public static $defaultCharset = 'UTF-8';/*** Static namespace for plugins.** @var object*/public static $plugins = array();/*** List of loaded plugins.** @var unknown_type*/public static $pluginsLoaded = array();public static $pluginsMethods = array();public static $pluginsStaticMethods = array();public static $extendMethods = array();/*** @TODO implement*/public static $extendStaticMethods = array();/*** Hosts allowed for AJAX connections.* Dot '.' means $_SERVER['HTTP_HOST'] (if any).** @var array*/public static $ajaxAllowedHosts = array('.');/*** AJAX settings.** @var array* XXX should it be static or not ?*/public static $ajaxSettings = array('url' => '',//TODO'global' => true,'type' => "GET",'timeout' => null,'contentType' => "application/x-www-form-urlencoded",'processData' => true,// 'async' => true,'data' => null,'username' => null,'password' => null,'accepts' => array('xml' => "application/xml, text/xml",'html' => "text/html",'script' => "text/javascript, application/javascript",'json' => "application/json, text/javascript",'text' => "text/plain",'_default' => "*/*"));public static $lastModified = null;public static $active = 0;public static $dumpCount = 0;/*** 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);}}/*** Sets default document to $id. Document has to be loaded prior* to using this method.* $id can be retrived via getDocumentID() or getDocumentIDRef().** @param unknown_type $id*/public static function selectDocument($id) {$id = self::getDocumentID($id);self::debug("Selecting document '$id' as default one");self::$defaultDocumentID = self::getDocumentID($id);}/*** Returns document with id $id or last used as phpQueryObject.* $id can be retrived via getDocumentID() or getDocumentIDRef().* Chainable.** @see phpQuery::selectDocument()* @param unknown_type $id* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function getDocument($id = null) {if ($id)phpQuery::selectDocument($id);else$id = phpQuery::$defaultDocumentID;return new phpQueryObject($id);}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocument($markup = null, $contentType = null) {if (! $markup)$markup = '';$documentID = phpQuery::createDocumentWrapper($markup, $contentType);return new phpQueryObject($documentID);}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentHTML($markup = null, $charset = null) {$contentType = $charset? ";charset=$charset": '';return self::newDocument($markup, "text/html{$contentType}");}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentXML($markup = null, $charset = null) {$contentType = $charset? ";charset=$charset": '';return self::newDocument($markup, "text/xml{$contentType}");}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentXHTML($markup = null, $charset = null) {$contentType = $charset? ";charset=$charset": '';return self::newDocument($markup, "application/xhtml+xml{$contentType}");}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentPHP($markup = null, $contentType = "text/html") {// TODO pass charset to phpToMarkup if possible (use DOMDocumentWrapper function)$markup = phpQuery::phpToMarkup($markup, self::$defaultCharset);return self::newDocument($markup, $contentType);}public static function phpToMarkup($php, $charset = 'utf-8') {$regexes = array('@(<(?!\\?)(?:[^>]|\\?>)+\\w+\\s*=\\s*)(\')([^\']*)<'.'?php?(.*?)(?:\\?>)([^\']*)\'@s','@(<(?!\\?)(?:[^>]|\\?>)+\\w+\\s*=\\s*)(")([^"]*)<'.'?php?(.*?)(?:\\?>)([^"]*)"@s',);foreach($regexes as $regex)while (preg_match($regex, $php, $matches)) {$php = preg_replace_callback($regex,// create_function('$m, $charset = "'.$charset.'"',// 'return $m[1].$m[2]// .htmlspecialchars("<"."?php".$m[4]."?".">", ENT_QUOTES|ENT_NOQUOTES, $charset)// .$m[5].$m[2];'// ),array('phpQuery', '_phpToMarkupCallback'),$php);}$regex = '@(^|>[^<]*)+?(<\?php(.*?)(\?>))@s';//preg_match_all($regex, $php, $matches);//var_dump($matches);$php = preg_replace($regex, '\1円<php><!-- \3円 --></php>', $php);return $php;}public static function _phpToMarkupCallback($php, $charset = 'utf-8') {return $m[1].$m[2].htmlspecialchars("<"."?php".$m[4]."?".">", ENT_QUOTES|ENT_NOQUOTES, $charset).$m[5].$m[2];}public static function _markupToPHPCallback($m) {return "<"."?php ".htmlspecialchars_decode($m[1])." ?".">";}/*** Converts document markup containing PHP code generated by phpQuery::php()* into valid (executable) PHP code syntax.** @param string|phpQueryObject $content* @return string PHP code.*/public static function markupToPHP($content) {if ($content instanceof phpQueryObject)$content = $content->markupOuter();/* <php>...</php> to <?php...? > */$content = preg_replace_callback('@<php>\s*<!--(.*?)-->\s*</php>@s',// create_function('$m',// 'return "<'.'?php ".htmlspecialchars_decode($m[1])." ?'.'>";'// ),array('phpQuery', '_markupToPHPCallback'),$content);/* <node attr='< ?php ? >'> extra space added to save highlighters */$regexes = array('@(<(?!\\?)(?:[^>]|\\?>)+\\w+\\s*=\\s*)(\')([^\']*)(?:<|%3C)\\?(?:php)?(.*?)(?:\\?(?:>|%3E))([^\']*)\'@s','@(<(?!\\?)(?:[^>]|\\?>)+\\w+\\s*=\\s*)(")([^"]*)(?:<|%3C)\\?(?:php)?(.*?)(?:\\?(?:>|%3E))([^"]*)"@s',);foreach($regexes as $regex)while (preg_match($regex, $content))$content = preg_replace_callback($regex,create_function('$m','return $m[1].$m[2].$m[3]."<?php ".str_replace(array("%20", "%3E", "%09", " ", "	", "%7B", "%24", "%7D", "%22", "%5B", "%5D"),array(" ", ">", " ", "\n", " ", "{", "$", "}", \'"\', "[", "]"),htmlspecialchars_decode($m[4]))." ?>".$m[5].$m[2];'),$content);return $content;}/*** Creates new document from file $file.* Chainable.** @param string $file URLs allowed. See File wrapper page at php.net for more supported sources.* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentFile($file, $contentType = null) {$documentID = self::createDocumentWrapper(file_get_contents($file), $contentType);return new phpQueryObject($documentID);}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentFileHTML($file, $charset = null) {$contentType = $charset? ";charset=$charset": '';return self::newDocumentFile($file, "text/html{$contentType}");}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentFileXML($file, $charset = null) {$contentType = $charset? ";charset=$charset": '';return self::newDocumentFile($file, "text/xml{$contentType}");}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentFileXHTML($file, $charset = null) {$contentType = $charset? ";charset=$charset": '';return self::newDocumentFile($file, "application/xhtml+xml{$contentType}");}/*** Creates new document from markup.* Chainable.** @param unknown_type $markup* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery*/public static function newDocumentFilePHP($file, $contentType = null) {return self::newDocumentPHP(file_get_contents($file), $contentType);}/*** Reuses existing DOMDocument object.* Chainable.** @param $document DOMDocument* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery* @TODO support DOMDocument*/public static function loadDocument($document) {// TODOdie('TODO loadDocument');}/*** Enter description here...** @param unknown_type $html* @param unknown_type $domId* @return unknown New DOM ID* @todo support PHP tags in input* @todo support passing DOMDocument object from self::loadDocument*/protected static function createDocumentWrapper($html, $contentType = null, $documentID = null) {if (function_exists('domxml_open_mem'))throw new Exception("Old PHP4 DOM XML extension detected. phpQuery won't work until this extension is enabled.");// $id = $documentID// ? $documentID// : md5(microtime());$document = null;if ($html instanceof DOMDOCUMENT) {if (self::getDocumentID($html)) {// document already exists in phpQuery::$documents, make a copy$document = clone $html;} else {// new document, add it to phpQuery::$documents$wrapper = new DOMDocumentWrapper($html, $contentType, $documentID);}} else {$wrapper = new DOMDocumentWrapper($html, $contentType, $documentID);}// $wrapper->id = $id;// bind documentphpQuery::$documents[$wrapper->id] = $wrapper;// remember last loaded documentphpQuery::selectDocument($wrapper->id);return $wrapper->id;}/*** Extend class namespace.** @param string|array $target* @param array $source* @TODO support string $source* @return unknown_type*/public static function extend($target, $source) {switch($target) {case 'phpQueryObject':$targetRef = &self::$extendMethods;$targetRef2 = &self::$pluginsMethods;break;case 'phpQuery':$targetRef = &self::$extendStaticMethods;$targetRef2 = &self::$pluginsStaticMethods;break;default:throw new Exception("Unsupported \$target type");}if (is_string($source))$source = array($source => $source);foreach($source as $method => $callback) {if (isset($targetRef[$method])) {// throw new Exceptionself::debug("Duplicate method '{$method}', can\'t extend '{$target}'");continue;}if (isset($targetRef2[$method])) {// throw new Exceptionself::debug("Duplicate method '{$method}' from plugin '{$targetRef2[$method]}',"." can\'t extend '{$target}'");continue;}$targetRef[$method] = $callback;}return true;}/*** Extend phpQuery with $class from $file.** @param string $class Extending class name. Real class name can be prepended phpQuery_.* @param string $file Filename to include. Defaults to "{$class}.php".*/public static function plugin($class, $file = null) {// TODO $class checked agains phpQuery_$class// if (strpos($class, 'phpQuery') === 0)// $class = substr($class, 8);if (in_array($class, self::$pluginsLoaded))return true;if (! $file)$file = $class.'.php';$objectClassExists = class_exists('phpQueryObjectPlugin_'.$class);$staticClassExists = class_exists('phpQueryPlugin_'.$class);if (! $objectClassExists && ! $staticClassExists)require_once($file);self::$pluginsLoaded[] = $class;// static methodsif (class_exists('phpQueryPlugin_'.$class)) {$realClass = 'phpQueryPlugin_'.$class;$vars = get_class_vars($realClass);$loop = isset($vars['phpQueryMethods'])&& ! is_null($vars['phpQueryMethods'])? $vars['phpQueryMethods']: get_class_methods($realClass);foreach($loop as $method) {if ($method == '__initialize')continue;if (! is_callable(array($realClass, $method)))continue;if (isset(self::$pluginsStaticMethods[$method])) {throw new Exception("Duplicate method '{$method}' from plugin '{$c}' conflicts with same method from plugin '".self::$pluginsStaticMethods[$method]."'");return;}self::$pluginsStaticMethods[$method] = $class;}if (method_exists($realClass, '__initialize'))call_user_func_array(array($realClass, '__initialize'), array());}// object methodsif (class_exists('phpQueryObjectPlugin_'.$class)) {$realClass = 'phpQueryObjectPlugin_'.$class;$vars = get_class_vars($realClass);$loop = isset($vars['phpQueryMethods'])&& ! is_null($vars['phpQueryMethods'])? $vars['phpQueryMethods']: get_class_methods($realClass);foreach($loop as $method) {if (! is_callable(array($realClass, $method)))continue;if (isset(self::$pluginsMethods[$method])) {throw new Exception("Duplicate method '{$method}' from plugin '{$c}' conflicts with same method from plugin '".self::$pluginsMethods[$method]."'");continue;}self::$pluginsMethods[$method] = $class;}}return true;}/*** Unloades all or specified document from memory.** @param mixed $documentID @see phpQuery::getDocumentID() for supported types.*/public static function unloadDocuments($id = null) {if (isset($id)) {if ($id = self::getDocumentID($id))unset(phpQuery::$documents[$id]);} else {foreach(phpQuery::$documents as $k => $v) {unset(phpQuery::$documents[$k]);}}}/*** Parses phpQuery object or HTML result against PHP tags and makes them active.** @param phpQuery|string $content* @deprecated* @return string*/public static function unsafePHPTags($content) {return self::markupToPHP($content);}public static function DOMNodeListToArray($DOMNodeList) {$array = array();if (! $DOMNodeList)return $array;foreach($DOMNodeList as $node)$array[] = $node;return $array;}/*** Checks if $input is HTML string, which has to start with '<'.** @deprecated* @param String $input* @return Bool* @todo still used ?*/public static function isMarkup($input) {return ! is_array($input) && substr(trim($input), 0, 1) == '<';}public static function debug($text) {if (self::$debug)print var_dump($text);}/*** Make an AJAX request.** @param array See $options http://docs.jquery.com/Ajax/jQuery.ajax#toptions* Additional options are:* 'document' - document for global events, @see phpQuery::getDocumentID()* 'referer' - implemented* 'requested_with' - TODO; not implemented (X-Requested-With)* @return Zend_Http_Client* @link http://docs.jquery.com/Ajax/jQuery.ajax** @TODO $options['cache']* @TODO $options['processData']* @TODO $options['xhr']* @TODO $options['data'] as string* @TODO XHR interface*/public static function ajax($options = array(), $xhr = null) {$options = array_merge(self::$ajaxSettings, $options);$documentID = isset($options['document'])? self::getDocumentID($options['document']): null;if ($xhr) {// reuse existing XHR object, but clean it up$client = $xhr;// $client->setParameterPost(null);// $client->setParameterGet(null);$client->setAuth(false);$client->setHeaders("If-Modified-Since", null);$client->setHeaders("Referer", null);$client->resetParameters();} else {// create new XHR objectrequire_once('Zend/Http/Client.php');$client = new Zend_Http_Client();$client->setCookieJar();}if (isset($options['timeout']))$client->setConfig(array('timeout' => $options['timeout'],));// 'maxredirects' => 0,foreach(self::$ajaxAllowedHosts as $k => $host)if ($host == '.' && isset($_SERVER['HTTP_HOST']))self::$ajaxAllowedHosts[$k] = $_SERVER['HTTP_HOST'];$host = parse_url($options['url'], PHP_URL_HOST);if (! in_array($host, self::$ajaxAllowedHosts)) {throw new Exception("Request not permitted, host '$host' not present in "."phpQuery::\$ajaxAllowedHosts");}// JSONP$jsre = "/=\\?(&|$)/";if (isset($options['dataType']) && $options['dataType'] == 'jsonp') {$jsonpCallbackParam = $options['jsonp']? $options['jsonp'] : 'callback';if (strtolower($options['type']) == 'get') {if (! preg_match($jsre, $options['url'])) {$sep = strpos($options['url'], '?')? '&' : '?';$options['url'] .= "$sep$jsonpCallbackParam=?";}} else if ($options['data']) {$jsonp = false;foreach($options['data'] as $n => $v) {if ($v == '?')$jsonp = true;}if (! $jsonp) {$options['data'][$jsonpCallbackParam] = '?';}}$options['dataType'] = 'json';}if (isset($options['dataType']) && $options['dataType'] == 'json') {$jsonpCallback = 'json_'.md5(microtime());$jsonpData = $jsonpUrl = false;if ($options['data']) {foreach($options['data'] as $n => $v) {if ($v == '?')$jsonpData = $n;}}if (preg_match($jsre, $options['url']))$jsonpUrl = true;if ($jsonpData !== false || $jsonpUrl) {// remember callback name for httpData()$options['_jsonp'] = $jsonpCallback;if ($jsonpData !== false)$options['data'][$jsonpData] = $jsonpCallback;if ($jsonpUrl)$options['url'] = preg_replace($jsre, "=$jsonpCallback\\1", $options['url']);}}$client->setUri($options['url']);$client->setMethod(strtoupper($options['type']));if (isset($options['referer']) && $options['referer'])$client->setHeaders('Referer', $options['referer']);$client->setHeaders(array(// 'content-type' => $options['contentType'],'User-Agent' => 'Mozilla/5.0 (X11; U; Linux x86; en-US; rv:1.9.0.5) Gecko'.'/2008122010 Firefox/3.0.5',// TODO custom charset'Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',// 'Connection' => 'keep-alive',// 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language' => 'en-us,en;q=0.5',));if ($options['username'])$client->setAuth($options['username'], $options['password']);if (isset($options['ifModified']) && $options['ifModified'])$client->setHeaders("If-Modified-Since",self::$lastModified? self::$lastModified: "Thu, 01 Jan 1970 00:00:00 GMT");$client->setHeaders("Accept",isset($options['dataType'])&& isset(self::$ajaxSettings['accepts'][ $options['dataType'] ])? self::$ajaxSettings['accepts'][ $options['dataType'] ].", */*": self::$ajaxSettings['accepts']['_default']);// TODO $options['processData']if ($options['data'] instanceof phpQueryObject) {$serialized = $options['data']->serializeArray($options['data']);$options['data'] = array();foreach($serialized as $r)$options['data'][ $r['name'] ] = $r['value'];}if (strtolower($options['type']) == 'get') {$client->setParameterGet($options['data']);} else if (strtolower($options['type']) == 'post') {$client->setEncType($options['contentType']);$client->setParameterPost($options['data']);}if (self::$active == 0 && $options['global'])phpQueryEvents::trigger($documentID, 'ajaxStart');self::$active++;// beforeSend callbackif (isset($options['beforeSend']) && $options['beforeSend'])phpQuery::callbackRun($options['beforeSend'], array($client));// ajaxSend eventif ($options['global'])phpQueryEvents::trigger($documentID, 'ajaxSend', array($client, $options));if (phpQuery::$debug) {self::debug("{$options['type']}: {$options['url']}\n");self::debug("Options: <pre>".var_export($options, true)."</pre>\n");// if ($client->getCookieJar())// self::debug("Cookies: <pre>".var_export($client->getCookieJar()->getMatchingCookies($options['url']), true)."</pre>\n");}// request$response = $client->request();if (phpQuery::$debug) {self::debug('Status: '.$response->getStatus().' / '.$response->getMessage());self::debug($client->getLastRequest());self::debug($response->getHeaders());}if ($response->isSuccessful()) {// XXX tempolaryself::$lastModified = $response->getHeader('Last-Modified');$data = self::httpData($response->getBody(), $options['dataType'], $options);if (isset($options['success']) && $options['success'])phpQuery::callbackRun($options['success'], array($data, $response->getStatus(), $options));if ($options['global'])phpQueryEvents::trigger($documentID, 'ajaxSuccess', array($client, $options));} else {if (isset($options['error']) && $options['error'])phpQuery::callbackRun($options['error'], array($client, $response->getStatus(), $response->getMessage()));if ($options['global'])phpQueryEvents::trigger($documentID, 'ajaxError', array($client, /*$response->getStatus(),*/$response->getMessage(), $options));}if (isset($options['complete']) && $options['complete'])phpQuery::callbackRun($options['complete'], array($client, $response->getStatus()));if ($options['global'])phpQueryEvents::trigger($documentID, 'ajaxComplete', array($client, $options));if ($options['global'] && ! --self::$active)phpQueryEvents::trigger($documentID, 'ajaxStop');return $client;// if (is_null($domId))// $domId = self::$defaultDocumentID ? self::$defaultDocumentID : false;// return new phpQueryAjaxResponse($response, $domId);}protected static function httpData($data, $type, $options) {if (isset($options['dataFilter']) && $options['dataFilter'])$data = self::callbackRun($options['dataFilter'], array($data, $type));if (is_string($data)) {if ($type == "json") {if (isset($options['_jsonp']) && $options['_jsonp']) {$data = preg_replace('/^\s*\w+\((.*)\)\s*$/s', '1ドル', $data);}$data = self::parseJSON($data);}}return $data;}/*** Enter description here...** @param array|phpQuery $data**/public static function param($data) {return http_build_query($data, null, '&');}public static function get($url, $data = null, $callback = null, $type = null) {if (!is_array($data)) {$callback = $data;$data = null;}// TODO some array_values on this shitreturn phpQuery::ajax(array('type' => 'GET','url' => $url,'data' => $data,'success' => $callback,'dataType' => $type,));}public static function post($url, $data = null, $callback = null, $type = null) {if (!is_array($data)) {$callback = $data;$data = null;}return phpQuery::ajax(array('type' => 'POST','url' => $url,'data' => $data,'success' => $callback,'dataType' => $type,));}public static function getJSON($url, $data = null, $callback = null) {if (!is_array($data)) {$callback = $data;$data = null;}// TODO some array_values on this shitreturn phpQuery::ajax(array('type' => 'GET','url' => $url,'data' => $data,'success' => $callback,'dataType' => 'json',));}public static function ajaxSetup($options) {self::$ajaxSettings = array_merge(self::$ajaxSettings,$options);}public static function ajaxAllowHost($host1, $host2 = null, $host3 = null) {$loop = is_array($host1)? $host1: func_get_args();foreach($loop as $host) {if ($host && ! in_array($host, phpQuery::$ajaxAllowedHosts)) {phpQuery::$ajaxAllowedHosts[] = $host;}}}public static function ajaxAllowURL($url1, $url2 = null, $url3 = null) {$loop = is_array($url1)? $url1: func_get_args();foreach($loop as $url)phpQuery::ajaxAllowHost(parse_url($url, PHP_URL_HOST));}/*** Returns JSON representation of $data.** @static* @param mixed $data* @return string*/public static function toJSON($data) {if (function_exists('json_encode'))return json_encode($data);require_once('Zend/Json/Encoder.php');return Zend_Json_Encoder::encode($data);}/*** Parses JSON into proper PHP type.** @static* @param string $json* @return mixed*/public static function parseJSON($json) {if (function_exists('json_decode')) {$return = json_decode(trim($json), true);// json_decode and UTF8 issuesif (isset($return))return $return;}require_once('Zend/Json/Decoder.php');return Zend_Json_Decoder::decode($json);}/*** Returns source's document ID.** @param $source DOMNode|phpQueryObject* @return string*/public static function getDocumentID($source) {if ($source instanceof DOMDOCUMENT) {foreach(phpQuery::$documents as $id => $document) {if ($source->isSameNode($document->document))return $id;}} else if ($source instanceof DOMNODE) {foreach(phpQuery::$documents as $id => $document) {if ($source->ownerDocument->isSameNode($document->document))return $id;}} else if ($source instanceof phpQueryObject)return $source->getDocumentID();else if (is_string($source) && isset(phpQuery::$documents[$source]))return $source;}/*** Get DOMDocument object related to $source.* Returns null if such document doesn't exist.** @param $source DOMNode|phpQueryObject|string* @return string*/public static function getDOMDocument($source) {if ($source instanceof DOMDOCUMENT)return $source;$source = self::getDocumentID($source);return $source? self::$documents[$id]['document']: null;}// UTILITIES// http://docs.jquery.com/Utilities/**** @return unknown_type* @link http://docs.jquery.com/Utilities/jQuery.makeArray*/public static function makeArray($obj) {$array = array();if (is_object($object) && $object instanceof DOMNODELIST) {foreach($object as $value)$array[] = $value;} else if (is_object($object) && ! ($object instanceof Iterator)) {foreach(get_object_vars($object) as $name => $value)$array[0][$name] = $value;} else {foreach($object as $name => $value)$array[0][$name] = $value;}return $array;}public static function inArray($value, $array) {return in_array($value, $array);}/**** @param $object* @param $callback* @return unknown_type* @link http://docs.jquery.com/Utilities/jQuery.each*/public static function each($object, $callback, $param1 = null, $param2 = null, $param3 = null) {$paramStructure = null;if (func_num_args() > 2) {$paramStructure = func_get_args();$paramStructure = array_slice($paramStructure, 2);}if (is_object($object) && ! ($object instanceof Iterator)) {foreach(get_object_vars($object) as $name => $value)phpQuery::callbackRun($callback, array($name, $value), $paramStructure);} else {foreach($object as $name => $value)phpQuery::callbackRun($callback, array($name, $value), $paramStructure);}}/**** @link http://docs.jquery.com/Utilities/jQuery.map*/public static function map($array, $callback, $param1 = null, $param2 = null, $param3 = null) {$result = array();$paramStructure = null;if (func_num_args() > 2) {$paramStructure = func_get_args();$paramStructure = array_slice($paramStructure, 2);}foreach($array as $v) {$vv = phpQuery::callbackRun($callback, array($v), $paramStructure);// $callbackArgs = $args;// foreach($args as $i => $arg) {// $callbackArgs[$i] = $arg instanceof CallbackParam// ? $v// : $arg;// }// $vv = call_user_func_array($callback, $callbackArgs);if (is_array($vv)) {foreach($vv as $vvv)$result[] = $vvv;} else if ($vv !== null) {$result[] = $vv;}}return $result;}/**** @param $callback Callback* @param $params* @param $paramStructure* @return unknown_type*/public static function callbackRun($callback, $params = array(), $paramStructure = null) {if (! $callback)return;if ($callback instanceof CallbackParameterToReference) {// TODO support ParamStructure to select which $param push to referenceif (isset($params[0]))$callback->callback = $params[0];return true;}if ($callback instanceof Callback) {$paramStructure = $callback->params;$callback = $callback->callback;}if (! $paramStructure)return call_user_func_array($callback, $params);$p = 0;foreach($paramStructure as $i => $v) {$paramStructure[$i] = $v instanceof CallbackParam? $params[$p++]: $v;}return call_user_func_array($callback, $paramStructure);}/*** Merge 2 phpQuery objects.* @param array $one* @param array $two* @protected* @todo node lists, phpQueryObject*/public static function merge($one, $two) {$elements = $one->elements;foreach($two->elements as $node) {$exists = false;foreach($elements as $node2) {if ($node2->isSameNode($node))$exists = true;}if (! $exists)$elements[] = $node;}return $elements;// $one = $one->newInstance();// $one->elements = $elements;// return $one;}/**** @param $array* @param $callback* @param $invert* @return unknown_type* @link http://docs.jquery.com/Utilities/jQuery.grep*/public static function grep($array, $callback, $invert = false) {$result = array();foreach($array as $k => $v) {$r = call_user_func_array($callback, array($v, $k));if ($r === !(bool)$invert)$result[] = $v;}return $result;}public static function unique($array) {return array_unique($array);}/**** @param $function* @return unknown_type* @TODO there are problems with non-static methods, second parameter pass it* but doesnt verify is method is really callable*/public static function isFunction($function) {return is_callable($function);}public static function trim($str) {return trim($str);}/* PLUGINS NAMESPACE *//**** @param $url* @param $callback* @param $param1* @param $param2* @param $param3* @return phpQueryObject*/public static function browserGet($url, $callback, $param1 = null, $param2 = null, $param3 = null) {if (self::plugin('WebBrowser')) {$params = func_get_args();return self::callbackRun(array(self::$plugins, 'browserGet'), $params);} else {self::debug('WebBrowser plugin not available...');}}/**** @param $url* @param $data* @param $callback* @param $param1* @param $param2* @param $param3* @return phpQueryObject*/public static function browserPost($url, $data, $callback, $param1 = null, $param2 = null, $param3 = null) {if (self::plugin('WebBrowser')) {$params = func_get_args();return self::callbackRun(array(self::$plugins, 'browserPost'), $params);} else {self::debug('WebBrowser plugin not available...');}}/**** @param $ajaxSettings* @param $callback* @param $param1* @param $param2* @param $param3* @return phpQueryObject*/public static function browser($ajaxSettings, $callback, $param1 = null, $param2 = null, $param3 = null) {if (self::plugin('WebBrowser')) {$params = func_get_args();return self::callbackRun(array(self::$plugins, 'browser'), $params);} else {self::debug('WebBrowser plugin not available...');}}/**** @param $code* @return string*/public static function php($code) {return self::code('php', $code);}/**** @param $type* @param $code* @return string*/public static function code($type, $code) {return "<$type><!-- ".trim($code)." --></$type>";}public static function __callStatic($method, $params) {return call_user_func_array(array(phpQuery::$plugins, $method),$params);}protected static function dataSetupNode($node, $documentID) {// search are return if alredy existsforeach(phpQuery::$documents[$documentID]->dataNodes as $dataNode) {if ($node->isSameNode($dataNode))return $dataNode;}// if doesn't, add itphpQuery::$documents[$documentID]->dataNodes[] = $node;return $node;}protected static function dataRemoveNode($node, $documentID) {// search are return if alredy existsforeach(phpQuery::$documents[$documentID]->dataNodes as $k => $dataNode) {if ($node->isSameNode($dataNode)) {unset(self::$documents[$documentID]->dataNodes[$k]);unset(self::$documents[$documentID]->data[ $dataNode->dataID ]);}}}public static function data($node, $name, $data, $documentID = null) {if (! $documentID)// TODO check if this works$documentID = self::getDocumentID($node);$document = phpQuery::$documents[$documentID];$node = self::dataSetupNode($node, $documentID);if (! isset($node->dataID))$node->dataID = ++phpQuery::$documents[$documentID]->uuid;$id = $node->dataID;if (! isset($document->data[$id]))$document->data[$id] = array();if (! is_null($data))$document->data[$id][$name] = $data;if ($name) {if (isset($document->data[$id][$name]))return $document->data[$id][$name];} elsereturn $id;}public static function removeData($node, $name, $documentID) {if (! $documentID)// TODO check if this works$documentID = self::getDocumentID($node);$document = phpQuery::$documents[$documentID];$node = self::dataSetupNode($node, $documentID);$id = $node->dataID;if ($name) {if (isset($document->data[$id][$name]))unset($document->data[$id][$name]);$name = null;foreach($document->data[$id] as $name)break;if (! $name)self::removeData($node, $name, $documentID);} else {self::dataRemoveNode($node, $documentID);}}}/*** Plugins static namespace class.** @author Tobiasz Cudnik <tobiasz.cudnik/gmail.com>* @package phpQuery* @todo move plugin methods here (as statics)*/class phpQueryPlugins {public function __call($method, $args) {if (isset(phpQuery::$extendStaticMethods[$method])) {$return = call_user_func_array(phpQuery::$extendStaticMethods[$method],$args);} else if (isset(phpQuery::$pluginsStaticMethods[$method])) {$class = phpQuery::$pluginsStaticMethods[$method];$realClass = "phpQueryPlugin_$class";$return = call_user_func_array(array($realClass, $method),$args);return isset($return)? $return: $this;} elsethrow new Exception("Method '{$method}' doesnt exist");}}/*** Shortcut to phpQuery::pq($arg1, $context)* Chainable.** @see phpQuery::pq()* @return phpQueryObject|QueryTemplatesSource|QueryTemplatesParse|QueryTemplatesSourceQuery* @author Tobiasz Cudnik <tobiasz.cudnik/gmail.com>* @package phpQuery*/function pq($arg1, $context = null) {$args = func_get_args();return call_user_func_array(array('phpQuery', 'pq'),$args);}// add plugins dir and Zend framework to include pathset_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__).'/phpQuery/'.PATH_SEPARATOR.dirname(__FILE__).'/phpQuery/plugins/');// why ? no __call nor __get for statics in php...// XXX __callStatic will be available in PHP 5.3phpQuery::$plugins = new phpQueryPlugins();// include bootstrap file (personal library config)if (file_exists(dirname(__FILE__).'/phpQuery/bootstrap.php'))require_once dirname(__FILE__).'/phpQuery/bootstrap.php';
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。