Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** TJavaScript class file** @author Wei Zhuo<weizhuo[at]gmail[dot]com>* @link http://www.pradosoft.com/* @copyright Copyright © 2005-2008 PradoSoft* @license http://www.pradosoft.com/license/* @version $Id: TJavaScript.php 2541 2008-10-21 15:05:13Z qiang.xue $* @package System.Web.Javascripts*//*** TJavaScript class.** TJavaScript is a utility class containing commonly-used javascript-related* functions.** @author Wei Zhuo<weizhuo[at]gmail[dot]com>* @version $Id: TJavaScript.php 2541 2008-10-21 15:05:13Z qiang.xue $* @package System.Web.Javascripts* @since 3.0*/class TJavaScript{/*** @var TJSON JSON decoder and encoder instance*/private static $_json;/*** Renders a list of javascript files* @param array URLs to the javascript files* @return string rendering result*/public static function renderScriptFiles($files){$str='';foreach($files as $file)$str.= self::renderScriptFile($file);return $str;}/*** Renders a javascript file* @param string URL to the javascript file* @return string rendering result*/public static function renderScriptFile($file){return '<script type="text/javascript" src="'.THttpUtility::htmlEncode($file)."\"></script>\n";}/*** Renders a list of javascript blocks* @param array javascript blocks* @return string rendering result*/public static function renderScriptBlocks($scripts){if(count($scripts))return "<script type=\"text/javascript\">\n/*<![CDATA[*/\n".implode("\n",$scripts)."\n/*]]>*/\n</script>\n";elsereturn '';}/*** Renders javascript block* @param string javascript block* @return string rendering result*/public static function renderScriptBlock($script){return "<script type=\"text/javascript\">\n/*<![CDATA[*/\n{$script}\n/*]]>*/\n</script>\n";}/*** Quotes a javascript string.* After processing, the string can be safely enclosed within a pair of* quotation marks and serve as a javascript string.* @param string string to be quoted* @param boolean whether this string is used as a URL* @return string the quoted string*/public static function quoteString($js,$forUrl=false){if($forUrl)return strtr($js,array('%'=>'%25',"\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\'));elsereturn strtr($js,array("\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\'));}/*** @return string considers the string as raw javascript function code*/public static function quoteFunction($js){if(self::isFunction($js))return $js;elsereturn 'javascript:'.$js;}/*** @return boolean true if string is raw javascript function code, i.e., if* the string begins with <tt>javascript:</tt>*/public static function isFunction($js){return preg_match('/^\s*javascript:/i', $js);}/*** Encodes a PHP variable into javascript representation.** Example:* <code>* $options['onLoading'] = "doit";* $options['onComplete'] = "more";* echo TJavaScript::encode($options);* //expects the following javascript code* // {'onLoading':'doit','onComplete':'more'}* </code>** For higher complexity data structures use {@link jsonEncode} and {@link jsonDecode}* to serialize and unserialize.** Note: strings begining with <tt>javascript:</tt> will be considered as* raw javascript code and no encoding of that string will be enforced.** @param mixed PHP variable to be encoded* @param boolean whether the output is a map or a list.* @return string the encoded string*/public static function encode($value,$toMap=true){if(is_string($value)){if(($n=strlen($value))>2){$first=$value[0];$last=$value[$n-1];if(($first==='[' && $last===']') || ($first==='{' && $last==='}'))return $value;}// if string begins with javascript: return the raw string minus the prefixif(self::isFunction($value))return preg_replace('/^\s*javascript:/', '', $value);elsereturn "'".self::quoteString($value)."'";}else if(is_bool($value))return $value?'true':'false';else if(is_array($value)){$results='';if(($n=count($value))>0 && array_keys($value)!==range(0,$n-1)){foreach($value as $k=>$v){if($v!==''){if($results!=='')$results.=',';$results.="'$k':".self::encode($v,$toMap);}}return '{'.$results.'}';}else{foreach($value as $v){if($v!==''){if($results!=='')$results.=',';$results.=self::encode($v,$toMap);}}return '['.$results.']';}}else if(is_integer($value))return "$value";else if(is_float($value)){if($value===-INF)return 'Number.NEGATIVE_INFINITY';else if($value===INF)return 'Number.POSITIVE_INFINITY';elsereturn "$value";}else if(is_object($value))return self::encode(get_object_vars($value),$toMap);else if($value===null)return 'null';elsereturn '';}/*** Encodes a PHP variable into javascript string.* This method invokes {@TJSON} utility class to perform the encoding.* @param mixed variable to be encoded* @return string encoded string*/public static function jsonEncode($value){if(self::$_json === null)self::$_json = Prado::createComponent('System.Web.Javascripts.TJSON');return self::$_json->encode($value);}/*** Decodes a javascript string into PHP variable.* This method invokes {@TJSON} utility class to perform the decoding.* @param string string to be decoded* @return mixed decoded variable*/public static function jsonDecode($value){if(self::$_json === null)self::$_json = Prado::createComponent('System.Web.Javascripts.TJSON');return self::$_json->decode($value);}}