OSDN Git Service

Added Global.jsh
[dvibrowser/jdisp.git] / src / js / include / jdisp / Global.jsh
1 #ifndef _JDISP_GLOBAL_JSH\r
2 #define _JDISP_GLOBAL_JSH\r
3 \r
4 OOP_CLASS(Global) = function() {};\r
5 \r
6 OOP_METHOD(Global, eval) = function (txt)\r
7 {\r
8   EVAL_RAW(txt);\r
9 };\r
10 \r
11 OOP_METHOD(Global, random) = function (bound)\r
12 {\r
13   if (+bound === bound) {\r
14     return Math.floor(Math.random() * bound);\r
15   } else {\r
16     return Math.random();\r
17   }\r
18 };\r
19 \r
20 OOP_METHOD(Global, gettimeofday) = function ()\r
21 {\r
22   return (new Date()).getTime();\r
23 };\r
24 \r
25 OOP_METHOD(Global, time) = function ()\r
26 {\r
27   var t1000 = this.gettimeofday();\r
28   return Math.floor(t1000 / 1000);\r
29 };\r
30 \r
31 OOP_METHOD(Global, escapeHtml) = function (str)\r
32 {\r
33   var d = document.createElement('div');\r
34   var text = document.createTextNode(str);\r
35   d.appendChild(text);\r
36   var ret = d.innerHTML;\r
37   d = null;\r
38   text = null;\r
39   return ret;\r
40 };\r
41 \r
42 OOP_METHOD(Global, zeroPrefix) = function (value, digits)\r
43 {\r
44   if (+value === value) {\r
45     var s = '';\r
46     for (var i=0; i<digits; i++) s += '0';\r
47     s += String(Number(value));\r
48     return s.slice(s.length - digits);\r
49   } else {\r
50     return Number(value);\r
51   }\r
52 };\r
53 \r
54 OOP_METHOD(Global, encodeURIComponent) = function(str)\r
55 {\r
56   return window.encodeURIComponent.apply(this, arguments);\r
57 };\r
58 \r
59 OOP_METHOD(Global, decodeURIComponent) = function(str)\r
60 {\r
61   var s = window.decodeURIComponent.apply(this, arguments);\r
62   s = s.replace(/\+/g, ' ');\r
63   return s;\r
64 };\r
65 \r
66 OOP_METHOD(Global, arrayLength) = function (a)\r
67 {\r
68   var count = 0;\r
69   for (var i in a) {\r
70     count++;\r
71   }\r
72   return count;\r
73 };\r
74 \r
75 OOP_METHOD(Global, assignValues) = function (dst, src, fields)\r
76 {\r
77   if (IS_OBJECT(fields)) {\r
78     for (var i in fields) {\r
79       var k = fields[i];\r
80       if (IS_DEFINED(typeof src[k])) {\r
81         dst[k] = src[k];\r
82       }\r
83     }\r
84   } else {\r
85     for (var j in src) {\r
86       dst[j] = src[j];\r
87     }\r
88   }\r
89 };\r
90 \r
91 OOP_METHOD(Global, quoteString) = function (str, q)\r
92 {\r
93   if (str === null) return null;\r
94   var s = String(str);\r
95   s = s.replace(/\\/g,"\\\\");\r
96   switch (q) {\r
97   case "'":\r
98     s = s.replace(/'/g,"\\'");\r
99     break;\r
100   case '"':\r
101     s = s.replace(/"/g,'\\"');\r
102     break;\r
103   default:\r
104     break;\r
105   }\r
106   s = s.replace(/\n/g,"\\n");\r
107   s = s.replace(/\t/g,"\\t");\r
108   s = s.replace(/\f/g,"\\f");\r
109 // FIXME: make the following line work\r
110 //    s = s.replace(/\b/g,"\\b");\r
111   return q + s + q;\r
112 };\r
113 \r
114 OOP_METHOD(Global, dumpVar) = function (obj, wantFunction, maxRecursion)\r
115 {\r
116   var me = this;\r
117   var maxLv = 64;\r
118   var qq = '"';\r
119   if (IS_DEFINED(maxRecursion)) maxLv = Number(maxRecursion);\r
120 \r
121   var f = function (o, lv) {\r
122     if (lv > maxLv) {\r
123       return {value:'(error)', error: 'Too many levels of recursion.'};\r
124     }\r
125     var t = typeof o;\r
126     var v = new Object();\r
127     var k;\r
128     switch (t) {\r
129     case 'number' :\r
130     case 'boolean':\r
131       v.value = String(o);\r
132       break;\r
133     case 'string' :\r
134       v.value = me.quoteString(o, qq);\r
135       break;\r
136     case 'function':\r
137       v.value = "/* function " + o + " */";\r
138       v.isFunction = true;\r
139       break;\r
140     case 'undefined':\r
141       v.value = "undefined";\r
142       break;\r
143     case 'object':\r
144       // FIXME: Make it possible to dump arrays.\r
145       if (o === null) {\r
146         v.value = 'null';\r
147       } else if (IS_ARRAY(o)) {\r
148         // FIXME: handle the case where o is a pseudo hash.\r
149         var lp1 = new jdisp.text.ListPrinter('[', ',', ']');\r
150         for (k in o) {\r
151           var ret1 = f(o[k], lv + 1);\r
152           if (!ret1.isFunction || wantFunction) {\r
153             lp1.append(ret1.value);\r
154           }\r
155         }\r
156         v.value = lp1.toString();\r
157       } else {\r
158         var lp2 = new jdisp.text.ListPrinter('{', ',', '}');\r
159         for (k in o) {\r
160           var ret2 = f(o[k], lv + 1);\r
161           if (!ret2.isFunction || wantFunction) {\r
162             lp2.append(me.quoteString(k, qq) + ":" + ret2.value);\r
163           }\r
164         }\r
165         v.value = lp2.toString();\r
166       }\r
167       break;\r
168     default:\r
169       FATAL('invalid data type: ' + t);\r
170       v.value = null;\r
171       break;\r
172     }\r
173     return v;\r
174   };\r
175   var r = f(obj, 0);\r
176   return r.value;\r
177 };\r
178 \r
179 OOP_METHOD(Global, invokeLater) = function (func, timeout)\r
180 {\r
181   var t = (IS_DEFINED(timeout)) ? timeout : 0;\r
182   if (IS_FUNCTION(func)) {\r
183     setTimeout(func, t);\r
184   }\r
185 };\r
186 \r
187 #endif /* _JDISP_GLOBAL_JSH */\r