OSDN Git Service

Version 0.6.134, add comments for closure compiler.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 06_XURL.js
1 \r
2 // ------------------------------------------------------------------------- //\r
3 // ------------ local variables -------------------------------------------- //\r
4 // ------------------------------------------------------------------------- //\r
5 var X_URL_BASE_URL = ( function( parts ){\r
6                 var last = 1 < parts.length && parts[ parts.length - 1 ];\r
7                 if( last !== false && ( last === '' || //末尾が/で終わるとき\r
8                         last.indexOf( '.' ) !== -1 ) ){    //末尾がファイル名で終わる時\r
9                         --parts.length;\r
10                 };\r
11                 return parts.join( '/' );\r
12         })( X_URL_cleanup( location.href ).split( '/' ) ),\r
13         \r
14         X_URL_IS_FILE  = location.protocol === 'file:',\r
15         \r
16         X_URL_IS_LOCAL = X_URL_IS_FILE || location.hostname === 'localhost' || location.hostname === '127.0.0.1',\r
17         \r
18         X_URL_PARAMS = ( function( search ){\r
19                 var str   = search.slice( 1 ),\r
20                         parts = str.split( '&' ),\r
21                         i     = 0,\r
22                         l     = parts.length,\r
23                         obj   = {},\r
24                         pair, p;\r
25 \r
26                 if( !str ) return obj;\r
27                 \r
28                 for( ; i < l; ++i ){\r
29                         pair = parts[ i ];\r
30                         p    = pair.indexOf( '=' );\r
31                         if( p === -1 ){\r
32                                 obj[ decodeURIComponent( pair ) ] = true;\r
33                         } else {\r
34                                 obj[ decodeURIComponent( pair.substr( 0, p ) ) ] = X_String_parse( decodeURIComponent( pair.substr( p + 1 ) ) );\r
35                         };\r
36                 };\r
37 \r
38                 return obj;\r
39         } )( location.search );\r
40 \r
41 // ------------------------------------------------------------------------- //\r
42 // --- interface ----------------------------------------------------------- //\r
43 // ------------------------------------------------------------------------- //\r
44 \r
45 /**\r
46  * @namespace X.URL\r
47  * @alias X.URL\r
48  */\r
49 X[ 'URL' ] = {\r
50 \r
51         'BASE_URL' : X_URL_BASE_URL,\r
52         \r
53         'IS_FILE'  : X_URL_IS_FILE,\r
54         \r
55         'IS_LOCAL' : X_URL_IS_LOCAL,\r
56         \r
57         'PARAMS'   : X_URL_PARAMS,\r
58         \r
59         'toAbsolutePath' : X_URL_toAbsolutePath,\r
60         \r
61         'isSameDomain'   : X_URL_isSameDomain,\r
62         \r
63         'cleanup'        : X_URL_cleanup,\r
64         \r
65         'getEXT'         : X_URL_getEXT\r
66 };\r
67 \r
68 // ------------------------------------------------------------------------- //\r
69 // --- implements ---------------------------------------------------------- //\r
70 // ------------------------------------------------------------------------- //\r
71 /*\r
72  * original\r
73  * AS3で相対パスを絶対パスに変換する\r
74  * http://www.shin-go.net/motionlab/?p=449\r
75  */\r
76 function X_URL_toAbsolutePath( path ){\r
77         var s  = '/',\r
78                 ss = '//',\r
79                 _ary, ary, i = 0;\r
80 \r
81         if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;\r
82         \r
83         _ary = X_URL_BASE_URL.split( ss );\r
84         ary  = _ary[ 1 ].split( s );\r
85 \r
86         if( path.charAt( 0 ) === s ) return [ _ary[ 0 ], ss, ary[ 0 ], path ].join( '' );\r
87                 \r
88         if( path.substr( 0, 2 ) === './' ){\r
89                 path = path.substr( 2 );\r
90         } else {\r
91                 while( path.substr( i, 3 ) === '../' ){\r
92                         --ary.length;\r
93                         i += 3;\r
94                 };\r
95                 if( i ) path = path.substr( i );\r
96         };\r
97         return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );\r
98 };\r
99 \r
100 function X_URL_isSameDomain( path ){\r
101         path = X_URL_cleanup( X_URL_toAbsolutePath( path ) );\r
102         return path === X_URL_BASE_URL || path.indexOf( X_URL_BASE_URL + '/' ) === 0;\r
103 };\r
104 \r
105 function X_URL_cleanup( path ){\r
106         return path.split( '?' )[ 0 ].split( '#' )[ 0 ];\r
107 };\r
108 \r
109 function X_URL_getEXT( path ){\r
110         path = X_URL_cleanup( path ).split( '.' );\r
111         return path.length ? path.pop() : '';\r
112 };\r
113 \r