OSDN Git Service

Version 0.6.182, fix X.UA.
[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;\r
44         \r
45         if( X_Type_isString( v ) ){\r
46                 switch( v ){\r
47                         case ''          : return v;\r
48                         //case '{}'        : return {};\r
49                         //case '[]'        : return [];\r
50                         case 'NaN'       : return NaN;\r
51                         case 'null'      : return null;\r
52                         case 'true'      : return true;\r
53                         case 'false'     : return false;\r
54                         case 'Infinity'  : return  1 / 0;//Number.POSITIVE_INFINITY;\r
55                         case '-Infinity' : return -1 / 0;//Number.NEGATIVE_INFINITY;\r
56                         //case 'void(0)'   :\r
57                         //case 'void 0'    :\r
58                         case 'undefined' : return;\r
59                 };\r
60                 _v = v.split( ' ' ).join( '' );\r
61                 if( X_String_isNumberString( _v ) ) return _v - 0;\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  * <p>undefined, null が与えられた場合は '' を返します。\r
70  * <p>数値,Object が与えられた場合は toString します。\r
71  * @alias X.String.cleanupWhiteSpace\r
72  * @param {string}\r
73  * @return {string}\r
74  */\r
75 function X_String_cleanupWhiteSpace( text ){\r
76         var _ = ' ', __ = '  '; //, CRLF = X_String_CRLF;\r
77         \r
78         if( text == null || text === '' ) return '';\r
79         \r
80         //text.indexOf( CRLF )   !== -1 && ( text = text.split( CRLF ).join( _ ) );\r
81         /*text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );\r
82         text.indexOf( '\t' )   !== -1 && ( text = text.split( '\t' ).join( _ ) );\r
83         text.indexOf( '\r' )   !== -1 && ( text = text.split( '\r' ).join( _ ) );\r
84         text.indexOf( '\n' )   !== -1 && ( text = text.split( '\n' ).join( _ ) );\r
85         text.indexOf( '\f' )   !== -1 && ( text = text.split( '\f' ).join( _ ) );\r
86         text.indexOf( '\b' )   !== -1 && ( text = text.split( '\b' ).join( _ ) ); */\r
87         \r
88         text = text.toString()\r
89                         .split( X_String_CRLF ).join( _ )\r
90                         .split( '\r' ).join( _ )\r
91                         .split( '\n' ).join( _ )\r
92                         .split( '\t' ).join( _ )\r
93                         .split( '\f' ).join( _ )\r
94                         .split( '\b' ).join( _ );\r
95 \r
96         while( true ){\r
97                 text = text.split( __ );\r
98                 if( text.length < 2 ) return text[ 0 ];\r
99                 text = text.join( _ );\r
100         };\r
101 };\r
102 \r
103 /**\r
104  * 空白文字列を &lt;br&gt; に変換します。タブを &amp;nbsp; 4つに変換します。\r
105  * <p>undefined, null が与えられた場合は '' を返します。\r
106  * <p>数値,Object が与えられた場合は toString します。\r
107  * @alias X.String.whiteSpaceToTag\r
108  * @param {string}\r
109  * @return {string} html文字列\r
110  */\r
111 function X_String_whiteSpaceToTag( text ){\r
112     if( text == null || text === '' ) return '';\r
113     return text.toString()\r
114         //.split( '\r\n\r\n' ).join( '<br>' )\r
115         //.split( '\n\r\n\r' ).join( '<br>' )\r
116         //.split( '\r\n' ).join( '<br>' )\r
117         .split( X_String_CRLF ).join( '<br>' )\r
118         .split( '\r' ).join( '<br>' )\r
119         .split( '\n' ).join( '<br>' )\r
120         .split( '\t' ).join( '&nbsp;&nbsp;&nbsp;&nbsp;' )\r
121         .split( '\f' ).join( '' )\r
122         .split( '\b' ).join( '' );\r
123 };\r
124 \r
125 /**\r
126  * 一部の文字実体参照をデコードします。&quot;, &amp;, &lt;, &gt;, &nbsp;\r
127  * <p>undefined, null が与えられた場合は '' を返します。\r
128  * <p>数値,Object が与えられた場合は toString します。\r
129  * @alias X.String.chrReferanceTo\r
130  * @param {string}\r
131  * @return {string} html文字列\r
132  */\r
133 function X_String_chrReferanceTo( str ){\r
134     if( str == null || str === '' ) return '';\r
135     return str.toString()\r
136         .split( '&quot;' ).join( '"' )\r
137         .split( '&apos;' ).join( "'" )\r
138         .split( '&lt;'   ).join( '<' )\r
139         .split( '&gt;'   ).join( '>' )\r
140         .split( '&nbsp;' ).join( ' ' )\r
141         .split( '&amp;'  ).join( '&' ); // last!\r
142 };\r
143 \r
144 /**\r
145  * htmlタグで使われる文字を文字実体参照に変換します。&quot;, &amp;, &lt;, &gt;, &nbsp;\r
146  * <p>undefined, null が与えられた場合は '' を返します。\r
147  * <p>数値,Object が与えられた場合は toString します。\r
148  * @alias X.String.chrReferanceTo\r
149  * @param {string}\r
150  * @return {string}\r
151  */\r
152 function X_String_toChrReferance( str ){\r
153     if( str == null || str === '' ) return '';\r
154     return str.toString()\r
155         .split( '&' ).join( '&amp;' ) // first!\r
156         .split( '"' ).join( '&quot;' )\r
157         .split( "'" ).join( '&apos;' )\r
158         .split( '<' ).join( '&lt;' )\r
159         .split( '>' ).join( '&gt;' )\r
160         .split( ' ' ).join( '&nbsp;' );\r
161 };\r
162 \r
163 /**\r
164  * 文字列化した数値か?調べます。\r
165  * @alias X.String.isNumberString\r
166  * @param {string}\r
167  * @return {boolean}\r
168  */\r
169 function X_String_isNumberString( v ){\r
170         var n = v - 0;\r
171         return '' + n === v || '' + n === '0' + v;\r
172 };\r
173 \r
174 /**\r
175  * postdata のために object を文字列に変換します。\r
176  * https://github.com/jquery/jquery/blob/master/src/serialize.js\r
177  * @alias X.String.serialize\r
178  * @param {object}\r
179  * @param {boolean} [traditional=]\r
180  * @return {string}\r
181  */\r
182 function X_String_serialize( a, traditional ) {\r
183         var prefix,\r
184                 list = [];\r
185 \r
186         // If an array was passed in, assume that it is an array of form elements.\r
187         //if ( X_Type_isArray( a ) && false ) {\r
188                 // Serialize the form elements\r
189                 //jQuery.each( a, function() {\r
190                 //      X_String_serialize_addParam( list, this.name, this.value );\r
191                 //});\r
192 \r
193         //} else {\r
194                 // If traditional, encode the 'old' way (the way 1.3.2 or older\r
195                 // did it), otherwise encode params recursively.\r
196                 for ( prefix in a ) {\r
197                         X_String_serialize_buildParams( list, prefix, a[ prefix ], !!traditional );\r
198                 }\r
199         //}\r
200 \r
201         // Return the resulting serialization\r
202         return list.join( '&' ).split( '%20' ).join( '+' );\r
203 };\r
204 \r
205 function X_String_serialize_addParam( list, key, value ){\r
206         // If value is a function, invoke it and return its value\r
207         value = X_Type_isFunction( value ) ? value() : ( value == null ? '' : value );\r
208         list[ list.length ] = encodeURIComponent( key ) + '=' + encodeURIComponent( value );\r
209 };\r
210 \r
211 function X_String_serialize_buildParams( list, prefix, obj, traditional ) {\r
212         var name, i, l, v;\r
213 \r
214         if ( X_Type_isArray( obj ) ) {\r
215                 // Serialize array item.\r
216                 for( i = 0, l = obj.length; i < l; ++i ){\r
217                         v = obj[ i ];\r
218                         if ( traditional || prefix === '[]' ) {\r
219                                 // Treat each array item as a scalar.\r
220                                 X_String_serialize_addParam( list, prefix, v );\r
221 \r
222                         } else {\r
223                                 // Item is non-scalar (array or object), encode its numeric index.\r
224                                 X_String_serialize_buildParams(\r
225                                         list,\r
226                                         prefix + '[' + ( X_Type_isObject( v ) ? i : '' ) + ']',\r
227                                         v,\r
228                                         traditional\r
229                                 );\r
230                         };              \r
231                 };\r
232 \r
233         } else\r
234         if ( !traditional && X_Type_isObject( obj ) ) {\r
235                 // Serialize object item.\r
236                 for ( name in obj ) {\r
237                         X_String_serialize_buildParams( list, prefix + '[' + name + ']', obj[ name ], traditional );\r
238                 };\r
239 \r
240         } else {\r
241                 // Serialize scalar item.\r
242                 X_String_serialize_addParam( list, prefix, obj );\r
243         };\r
244 };\r
245 \r