OSDN Git Service

828db90cb83f28866d97470176251169f3298ca0
[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         //text.indexOf( CRLF )   !== -1 && ( text = text.split( CRLF ).join( _ ) );\r
76         text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );\r
77         text.indexOf( '\t' )   !== -1 && ( text = text.split( '\t' ).join( _ ) );\r
78         text.indexOf( '\r' )   !== -1 && ( text = text.split( '\r' ).join( _ ) );\r
79         text.indexOf( '\n' )   !== -1 && ( text = text.split( '\n' ).join( _ ) );\r
80         text.indexOf( '\f' )   !== -1 && ( text = text.split( '\f' ).join( _ ) );\r
81         text.indexOf( '\b' )   !== -1 && ( text = text.split( '\b' ).join( _ ) );\r
82         //while( text.indexOf( __ ) !== -1 ){\r
83         //      text = text.split( __ ).join( _ );\r
84         //};\r
85         //return text;\r
86         while( true ){\r
87                 text = text.split( __ );\r
88                 if( text.length < 2 ) return text.join( _ );\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( '&lt;' )\r
142         .split( '>' ).join( '&gt;' )\r
143         .split( ' ' ).join( '&nbsp;' );\r
144 };\r
145 \r
146 /**\r
147  * htmlタグで使われる文字を文字実体参照に変換します。&quot;, &amp;, &lt;, &gt;, &nbsp;\r
148  * @alias X.String.isNumberString\r
149  * @param {string}\r
150  * @return {boolean}\r
151  */\r
152 function X_String_isNumberString( v ){\r
153         var n = v - 0;\r
154         return '' + n === v || '' + n === '0' + v;\r
155 };\r
156 \r
157 /**\r
158  * postdata のために object を文字列に変換します。\r
159  * https://github.com/jquery/jquery/blob/master/src/serialize.js\r
160  * @alias X.String.serialize\r
161  * @param {object}\r
162  * @param {boolean} [traditional=]\r
163  * @return {string}\r
164  */\r
165 function X_String_serialize( a, traditional ) {\r
166         var prefix,\r
167                 list = [];\r
168 \r
169         // If an array was passed in, assume that it is an array of form elements.\r
170         //if ( X_Type_isArray( a ) && false ) {\r
171                 // Serialize the form elements\r
172                 //jQuery.each( a, function() {\r
173                 //      X_String_serialize_addParam( list, this.name, this.value );\r
174                 //});\r
175 \r
176         //} else {\r
177                 // If traditional, encode the 'old' way (the way 1.3.2 or older\r
178                 // did it), otherwise encode params recursively.\r
179                 for ( prefix in a ) {\r
180                         X_String_serialize_buildParams( list, prefix, a[ prefix ], !!traditional );\r
181                 }\r
182         //}\r
183 \r
184         // Return the resulting serialization\r
185         return list.join( '&' ).split( '%20' ).join( '+' );\r
186 };\r
187 \r
188 function X_String_serialize_addParam( list, key, value ){\r
189         // If value is a function, invoke it and return its value\r
190         value = X_Type_isFunction( value ) ? value() : ( value == null ? '' : value );\r
191         list[ list.length ] = encodeURIComponent( key ) + '=' + encodeURIComponent( value );\r
192 };\r
193 \r
194 function X_String_serialize_buildParams( list, prefix, obj, traditional ) {\r
195         var name, i, l, v;\r
196 \r
197         if ( X_Type_isArray( obj ) ) {\r
198                 // Serialize array item.\r
199                 for( i = 0, l = obj.length; i < l; ++i ){\r
200                         v = obj[ i ];\r
201                         if ( traditional || prefix === '[]' ) {\r
202                                 // Treat each array item as a scalar.\r
203                                 X_String_serialize_addParam( list, prefix, v );\r
204 \r
205                         } else {\r
206                                 // Item is non-scalar (array or object), encode its numeric index.\r
207                                 X_String_serialize_buildParams(\r
208                                         list,\r
209                                         prefix + '[' + ( X_Type_isObject( v ) ? i : '' ) + ']',\r
210                                         v,\r
211                                         traditional\r
212                                 );\r
213                         };              \r
214                 };\r
215 \r
216         } else\r
217         if ( !traditional && X_Type_isObject( obj ) ) {\r
218                 // Serialize object item.\r
219                 for ( name in obj ) {\r
220                         X_String_serialize_buildParams( list, prefix + '[' + name + ']', obj[ name ], traditional );\r
221                 };\r
222 \r
223         } else {\r
224                 // Serialize scalar item.\r
225                 X_String_serialize_addParam( list, prefix, obj );\r
226         };\r
227 };\r
228 \r