OSDN Git Service

Version 0.6.157, add X.Net.Form & fix X.EventDispatcher.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 05_XString.js
1 \r
2 // ------------------------------------------------------------------------- //\r
3 // ------------ local variables -------------------------------------------- //\r
4 // ------------------------------------------------------------------------- //\r
5 var X_String_CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 );\r
6 \r
7 // ------------------------------------------------------------------------- //\r
8 // --- interface ----------------------------------------------------------- //\r
9 // ------------------------------------------------------------------------- //\r
10 \r
11 /**\r
12  * @namespace X.String\r
13  * @alias X.String\r
14  */\r
15 X[ 'String' ] = {\r
16         \r
17         'parse'             : X_String_parse,\r
18         \r
19         'cleanupWhiteSpace' : X_String_cleanupWhiteSpace,\r
20         \r
21         'whiteSpaceToTag'   : X_String_whiteSpaceToTag,\r
22         \r
23         'chrReferanceTo'    : X_String_chrReferanceTo,\r
24         \r
25         'toChrReferance'    : X_String_toChrReferance,\r
26         \r
27         'isNumberString'    : X_String_isNumberString,\r
28         \r
29         'serialize'         : X_String_serialize\r
30 };\r
31 \r
32 // ------------------------------------------------------------------------- //\r
33 // --- implements ---------------------------------------------------------- //\r
34 // ------------------------------------------------------------------------- //\r
35 function X_String_parse( v ){\r
36         var _v, n;\r
37         if( X_Type_isString( v ) ){\r
38                 switch( v ){\r
39                         case ''          : return v;\r
40                         //case '{}'        : return {};\r
41                         //case '[]'        : return [];\r
42                         case 'NaN'       : return NaN;\r
43                         case 'null'      : return null;\r
44                         case 'true'      : return true;\r
45                         case 'false'     : return false;\r
46                         case 'Infinity'  : return  1 / 0;//Number.POSITIVE_INFINITY;\r
47                         case '-Infinity' : return -1 / 0;//Number.NEGATIVE_INFINITY;\r
48                         //case 'void(0)'   :\r
49                         //case 'void 0'    :\r
50                         case 'undefined' : return;\r
51                 };\r
52                 _v = v.split( ' ' ).join( '' );\r
53                 n  = _v - 0;\r
54                 if( '' + n === _v || '' + n === '0' + _v  ) return n;\r
55         };\r
56         return v;\r
57 };\r
58         \r
59 function X_String_cleanupWhiteSpace( text ){\r
60         var _ = ' ', __ = '  ', CRLF = X_String_CRLF;\r
61         //text.indexOf( CRLF )   !== -1 && ( text = text.split( CRLF ).join( _ ) );\r
62         text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );\r
63         text.indexOf( '\t' )   !== -1 && ( text = text.split( '\t' ).join( _ ) );\r
64         text.indexOf( '\r' )   !== -1 && ( text = text.split( '\r' ).join( _ ) );\r
65         text.indexOf( '\n' )   !== -1 && ( text = text.split( '\n' ).join( _ ) );\r
66         text.indexOf( '\f' )   !== -1 && ( text = text.split( '\f' ).join( _ ) );\r
67         text.indexOf( '\b' )   !== -1 && ( text = text.split( '\b' ).join( _ ) );\r
68         while( text.indexOf( __ ) !== -1 ){\r
69                 text = text.split( __ ).join( _ );\r
70         };\r
71         return text;\r
72 };\r
73 \r
74 function X_String_whiteSpaceToTag( text ){\r
75     if( text == null ) return '';\r
76     return text.toString()\r
77         //.split( '\r\n\r\n' ).join( '<br>' )\r
78         //.split( '\n\r\n\r' ).join( '<br>' )\r
79         //.split( '\r\n' ).join( '<br>' )\r
80         .split( '\n\r' ).join( '<br>' )\r
81         .split( '\r' ).join( '<br>' )\r
82         .split( '\n' ).join( '<br>' )\r
83         .split( '\t' ).join( '&nbsp;&nbsp;&nbsp;&nbsp;' )\r
84         .split( '\f' ).join( '' )\r
85         .split( '\b' ).join( '' );\r
86 };\r
87 \r
88 function X_String_chrReferanceTo( str ){\r
89     if( str == null ) return '';\r
90     return str.toString()\r
91         .split( '&quot;' ).join( '"' ) // first!\r
92         .split( '&amp;' ).join( '&' )\r
93         .split( '&lt;' ).join( '<' )\r
94         .split( '&gt;' ).join( '>' )\r
95         .split( '&nbsp;' ).join( ' ' );\r
96 };\r
97 \r
98 function X_String_toChrReferance( str ){\r
99     if( str == null ) return '';\r
100     str += '';\r
101     return str.toString()\r
102         .split( '&' ).join( '&amp;' )\r
103         .split( '"' ).join( '&quot;' )\r
104         .split( '<' ).join( '&lt;' )\r
105         .split( '>' ).join( '&gt;' )\r
106         .split( ' ' ).join( '&nbsp;' );\r
107 };\r
108 \r
109 function X_String_isNumberString( v ){\r
110         var n = v - 0;\r
111         return '' + n === v || '' + n === '0' + v;\r
112 };\r
113 \r
114 // https://github.com/jquery/jquery/blob/master/src/serialize.js\r
115 function X_String_serialize( a, traditional ) {\r
116         var prefix,\r
117                 list = [];\r
118 \r
119         // If an array was passed in, assume that it is an array of form elements.\r
120         if ( X_Type_isArray( a ) && false ) {\r
121                 // Serialize the form elements\r
122                 //jQuery.each( a, function() {\r
123                 //      X_String_serialize_addParam( list, this.name, this.value );\r
124                 //});\r
125 \r
126         } else {\r
127                 // If traditional, encode the 'old' way (the way 1.3.2 or older\r
128                 // did it), otherwise encode params recursively.\r
129                 for ( prefix in a ) {\r
130                         X_String_serialize_buildParams( list, prefix, a[ prefix ], traditional );\r
131                 }\r
132         }\r
133 \r
134         // Return the resulting serialization\r
135         return list.join( '&' ).split( '%20' ).join( '+' );\r
136 };\r
137 \r
138 function X_String_serialize_addParam( list, key, value ){\r
139         // If value is a function, invoke it and return its value\r
140         value = X_Type_isFunction( value ) ? value() : ( value == null ? '' : value );\r
141         list[ list.length ] = encodeURIComponent( key ) + '=' + encodeURIComponent( value );\r
142 };\r
143 \r
144 function X_String_serialize_buildParams( list, prefix, obj, traditional ) {\r
145         var name;\r
146 \r
147         if ( X_Type_isArray( obj ) ) {\r
148                 // Serialize array item.\r
149                 for( i = 0, l = obj.length; i < l; ++i ){\r
150                         v = obj[ i ];\r
151                         if ( traditional || prefix === '[]' ) {\r
152                                 // Treat each array item as a scalar.\r
153                                 X_String_serialize_addParam( list, prefix, v );\r
154 \r
155                         } else {\r
156                                 // Item is non-scalar (array or object), encode its numeric index.\r
157                                 X_String_serialize_buildParams(\r
158                                         list,\r
159                                         prefix + '[' + ( X_Type_isObject( v ) ? i : '' ) + ']',\r
160                                         v,\r
161                                         traditional\r
162                                 );\r
163                         };              \r
164                 };\r
165 \r
166         } else\r
167         if ( !traditional && X_Type_isObject( obj ) ) {\r
168                 // Serialize object item.\r
169                 for ( name in obj ) {\r
170                         X_String_serialize_buildParams( list, prefix + '[' + name + ']', obj[ name ], traditional );\r
171                 };\r
172 \r
173         } else {\r
174                 // Serialize scalar item.\r
175                 X_String_serialize_addParam( list, prefix, obj );\r
176         };\r
177 };\r
178 \r
179 /*\r
180  * 信頼できる文字列だけに対して json 文字列のパースを行います\r
181  */\r
182 function X_String_parseTrustedJsonString( jsonString ){\r
183         return window.JSON ? JSON.parse( jsonString ) : eval( '(' + jsonString + ')' );\r
184 };\r