OSDN Git Service

Version 0.6.178, fix X.KB for IE5-, X.HTMLAudio for ChromeWV & AOSP.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 06_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  * 文字列に関する関数を集めたものです。\r
13  * @namespace X.String\r
14  * @alias X.String\r
15  */\r
16 X[ 'String' ] = {\r
17         \r
18         'parse'             : X_String_parse,\r
19         \r
20         'cleanupWhiteSpace' : X_String_cleanupWhiteSpace,\r
21         \r
22         'whiteSpaceToTag'   : X_String_whiteSpaceToTag,\r
23         \r
24         'chrReferanceTo'    : X_String_chrReferanceTo,\r
25         \r
26         'toChrReferance'    : X_String_toChrReferance,\r
27         \r
28         'isNumberString'    : X_String_isNumberString,\r
29         \r
30         'serialize'         : X_String_serialize\r
31 };\r
32 \r
33 // ------------------------------------------------------------------------- //\r
34 // --- implements ---------------------------------------------------------- //\r
35 // ------------------------------------------------------------------------- //\r
36 /**\r
37  * 文字列を数値、NaN,Infinity,-Infinity,bool値、null,undefinedに変換します。1e3等には未対応です。\r
38  * @alias X.String.parse\r
39  * @param {string}\r
40  * @return {*}\r
41  */\r
42 function X_String_parse( v ){\r
43         var _v, n;\r
44         if( X_Type_isString( v ) ){\r
45                 switch( v ){\r
46                         case ''          : return v;\r
47                         //case '{}'        : return {};\r
48                         //case '[]'        : return [];\r
49                         case 'NaN'       : return NaN;\r
50                         case 'null'      : return null;\r
51                         case 'true'      : return true;\r
52                         case 'false'     : return false;\r
53                         case 'Infinity'  : return  1 / 0;//Number.POSITIVE_INFINITY;\r
54                         case '-Infinity' : return -1 / 0;//Number.NEGATIVE_INFINITY;\r
55                         //case 'void(0)'   :\r
56                         //case 'void 0'    :\r
57                         case 'undefined' : return;\r
58                 };\r
59                 _v = v.split( ' ' ).join( '' );\r
60                 n  = _v - 0;\r
61                 if( '' + n === _v || '' + n === '0' + _v  ) return n;\r
62         };\r
63         return v;\r
64 };\r
65 \r
66 /**\r
67  * <p>空白文字を半角スペースに変換します。\n\r,\t,\r,\n,\f,\b\r
68  * <p>2つ以上の連続する半角スペースを一つの半角スペースにします。\r
69  * @alias X.String.cleanupWhiteSpace\r
70  * @param {string}\r
71  * @return {string}\r
72  */\r
73 function X_String_cleanupWhiteSpace( text ){\r
74         var _ = ' ', __ = '  ', CRLF = X_String_CRLF;\r
75         \r
76         if( !text ) return '';\r
77         \r
78         //text.indexOf( CRLF )   !== -1 && ( text = text.split( CRLF ).join( _ ) );\r
79         text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );\r
80         text.indexOf( '\t' )   !== -1 && ( text = text.split( '\t' ).join( _ ) );\r
81         text.indexOf( '\r' )   !== -1 && ( text = text.split( '\r' ).join( _ ) );\r
82         text.indexOf( '\n' )   !== -1 && ( text = text.split( '\n' ).join( _ ) );\r
83         text.indexOf( '\f' )   !== -1 && ( text = text.split( '\f' ).join( _ ) );\r
84         text.indexOf( '\b' )   !== -1 && ( text = text.split( '\b' ).join( _ ) );\r
85 \r
86         while( true ){\r
87                 text = text.split( __ );\r
88                 if( text.length < 2 ) return text[ 0 ];\r
89                 text = text.join( _ );\r
90         };\r
91 };\r
92 \r
93 /**\r
94  * 空白文字列を &lt;br&gt; に変換します。タブを &amp;nbsp; 4つに変換します。\r
95  * @alias X.String.whiteSpaceToTag\r
96  * @param {string}\r
97  * @return {string} html文字列\r
98  */\r
99 function X_String_whiteSpaceToTag( text ){\r
100     if( text == null ) return '';\r
101     return text.toString()\r
102         //.split( '\r\n\r\n' ).join( '<br>' )\r
103         //.split( '\n\r\n\r' ).join( '<br>' )\r
104         //.split( '\r\n' ).join( '<br>' )\r
105         .split( '\n\r' ).join( '<br>' )\r
106         .split( '\r' ).join( '<br>' )\r
107         .split( '\n' ).join( '<br>' )\r
108         .split( '\t' ).join( '&nbsp;&nbsp;&nbsp;&nbsp;' )\r
109         .split( '\f' ).join( '' )\r
110         .split( '\b' ).join( '' );\r
111 };\r
112 \r
113 /**\r
114  * 一部の文字実体参照をデコードします。&quot;, &amp;, &lt;, &gt;, &nbsp;\r
115  * @alias X.String.chrReferanceTo\r
116  * @param {string}\r
117  * @return {string} html文字列\r
118  */\r
119 function X_String_chrReferanceTo( str ){\r
120     if( str == null ) return '';\r
121     return str.toString()\r
122         .split( '&quot;' ).join( '"' ) // first!\r
123         .split( '&amp;' ).join( '&' )\r
124         .split( '&lt;' ).join( '<' )\r
125         .split( '&gt;' ).join( '>' )\r
126         .split( '&nbsp;' ).join( ' ' );\r
127 };\r
128 \r
129 /**\r
130  * htmlタグで使われる文字を文字実体参照に変換します。&quot;, &amp;, &lt;, &gt;, &nbsp;\r
131  * @alias X.String.chrReferanceTo\r
132  * @param {string}\r
133  * @return {string}\r
134  */\r
135 function X_String_toChrReferance( str ){\r
136     if( str == null ) return '';\r
137     str += '';\r
138     return str.toString()\r
139         .split( '&' ).join( '&amp;' )\r
140         .split( '"' ).join( '&quot;' )\r
141         .split( '"' ).join( '&apos;' )\r
142         .split( '<' ).join( '&lt;' )\r
143         .split( '>' ).join( '&gt;' )\r
144         .split( ' ' ).join( '&nbsp;' );\r
145 };\r
146 \r
147 /**\r
148  * htmlタグで使われる文字を文字実体参照に変換します。&quot;, &amp;, &lt;, &gt;, &nbsp;\r
149  * @alias X.String.isNumberString\r
150  * @param {string}\r
151  * @return {boolean}\r
152  */\r
153 function X_String_isNumberString( v ){\r
154         var n = v - 0;\r
155         return '' + n === v || '' + n === '0' + v;\r
156 };\r
157 \r
158 /**\r
159  * postdata のために object を文字列に変換します。\r
160  * https://github.com/jquery/jquery/blob/master/src/serialize.js\r
161  * @alias X.String.serialize\r
162  * @param {object}\r
163  * @param {boolean} [traditional=]\r
164  * @return {string}\r
165  */\r
166 function X_String_serialize( a, traditional ) {\r
167         var prefix,\r
168                 list = [];\r
169 \r
170         // If an array was passed in, assume that it is an array of form elements.\r
171         //if ( X_Type_isArray( a ) && false ) {\r
172                 // Serialize the form elements\r
173                 //jQuery.each( a, function() {\r
174                 //      X_String_serialize_addParam( list, this.name, this.value );\r
175                 //});\r
176 \r
177         //} else {\r
178                 // If traditional, encode the 'old' way (the way 1.3.2 or older\r
179                 // did it), otherwise encode params recursively.\r
180                 for ( prefix in a ) {\r
181                         X_String_serialize_buildParams( list, prefix, a[ prefix ], !!traditional );\r
182                 }\r
183         //}\r
184 \r
185         // Return the resulting serialization\r
186         return list.join( '&' ).split( '%20' ).join( '+' );\r
187 };\r
188 \r
189 function X_String_serialize_addParam( list, key, value ){\r
190         // If value is a function, invoke it and return its value\r
191         value = X_Type_isFunction( value ) ? value() : ( value == null ? '' : value );\r
192         list[ list.length ] = encodeURIComponent( key ) + '=' + encodeURIComponent( value );\r
193 };\r
194 \r
195 function X_String_serialize_buildParams( list, prefix, obj, traditional ) {\r
196         var name, i, l, v;\r
197 \r
198         if ( X_Type_isArray( obj ) ) {\r
199                 // Serialize array item.\r
200                 for( i = 0, l = obj.length; i < l; ++i ){\r
201                         v = obj[ i ];\r
202                         if ( traditional || prefix === '[]' ) {\r
203                                 // Treat each array item as a scalar.\r
204                                 X_String_serialize_addParam( list, prefix, v );\r
205 \r
206                         } else {\r
207                                 // Item is non-scalar (array or object), encode its numeric index.\r
208                                 X_String_serialize_buildParams(\r
209                                         list,\r
210                                         prefix + '[' + ( X_Type_isObject( v ) ? i : '' ) + ']',\r
211                                         v,\r
212                                         traditional\r
213                                 );\r
214                         };              \r
215                 };\r
216 \r
217         } else\r
218         if ( !traditional && X_Type_isObject( obj ) ) {\r
219                 // Serialize object item.\r
220                 for ( name in obj ) {\r
221                         X_String_serialize_buildParams( list, prefix + '[' + name + ']', obj[ name ], traditional );\r
222                 };\r
223 \r
224         } else {\r
225                 // Serialize scalar item.\r
226                 X_String_serialize_addParam( list, prefix, obj );\r
227         };\r
228 };\r
229 \r