1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
<?php
/**
* TJavascript class file. Javascript utilties, converts basic PHP types into
* appropriate javascript types.
*
* Example:
* <code>
* $options['onLoading'] = "doit";
* $options['onComplete'] = "more";
* $js = new TJavascriptSerializer($options);
* echo $js->toMap();
* //expects the following javascript code
* // {'onLoading':'doit','onComplete':'more'}
* </code>
*
* For higher complexity data structures use TJSON to serialize and unserialize.
*
* Namespace: System.Web.UI
*
* @author Wei Zhuo<weizhuo[at]gmail[dot]com>
* @version $Revision: 1.3 $ $Date: 2005/11/10 23:43:26 $
* @package System.Web.UI
*/
class TJavaScript
{
public static function quoteJavaScriptString($js,$forUrl=false)
{
if($forUrl)
return strtr($js,array('%'=>'%25',"\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\'));
else
return strtr($js,array("\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\'));
}
public static function trimJavaScriptString($js)
{
if($js!=='' && $js!==null)
{
$js=trim($js);
if(($pos=strpos($js,'javascript:'))===0)
$js=substr($js,11);
$js=rtrim($js,';').';';
}
return $js;
}
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;
}
return "'".self::quoteJavaScriptString($value)."'";
}
else if(is_bool($value))
return $value?'true':'false';
else if(is_array($value))
{
$results=array();
if($toMap)
{
foreach($value as $k=>$v)
$results[]="'{$k}':".self::encode($v,$toMap);
return '{'.implode(',',$results).'}';
}
else
{
foreach($value as $k=>$v)
$results[]=self::encode($v,$toMap);
return '['.implode(',',$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';
else
return "$value";
}
else if(is_object($value))
return self::encode(get_object_vars($this->data),$toMap);
else if($value===null)
return 'null';
else
return '';
}
public static function encodeJSON($value)
{
Prado::using('System.Web.Javascripts.TJSON');
return TJSON::encode($value);
}
public static function decodeJSON($value)
{
Prado::using('System.Web.Javascripts.TJSON');
return TJSON::decode($value);
}
}
?>
|