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
8 if( last !== false && ( last === '' || //末尾が/で終わるとき
\r
9 last.indexOf( '.' ) !== -1 ) ){ //末尾がファイル名で終わる時
\r
12 return parts.join( '/' );
\r
13 })( X_URL_cleanup( location.href ).split( '/' ) ),
\r
15 X_URL_HOST = location.protocol + '//' + location.hostname,
\r
17 X_URL_IS_FILE = location.protocol === 'file:',
\r
19 X_URL_IS_LOCAL = X_URL_IS_FILE || location.hostname === 'localhost' || location.hostname === '127.0.0.1',
\r
21 X_URL_PARAMS = X_URL_paramToObj( location.search.slice( 1 ) );
\r
23 // ------------------------------------------------------------------------- //
\r
24 // --- interface ----------------------------------------------------------- //
\r
25 // ------------------------------------------------------------------------- //
\r
34 * @alias X.URL.BASE_URL
\r
37 'BASE_URL' : X_URL_BASE_URL,
\r
40 * @alias X.URL.IS_FILE
\r
43 'IS_FILE' : X_URL_IS_FILE,
\r
46 * @alias X.URL.IS_LOCAL
\r
49 'IS_LOCAL' : X_URL_IS_LOCAL,
\r
51 * url パラメータを object に格納したもの。
\r
52 * @alias X.URL.PARAMS
\r
55 'PARAMS' : X_URL_PARAMS,
\r
57 'create' : X_URL_create,
\r
59 'toAbsolutePath' : X_URL_toAbsolutePath,
\r
61 'objToParam' : X_URL_objToParam,
\r
63 'isSameDomain' : X_URL_isSameDomain,
\r
65 'isSameProtocol' : X_URL_isSameProtocol,
\r
67 'isLocal' : X_URL_isLocal,
\r
69 'cleanup' : X_URL_cleanup,
\r
71 'getEXT' : X_URL_getEXT,
\r
73 'getSearch' : X_URL_getSearch,
\r
75 'getHash' : X_URL_getHash
\r
78 // ------------------------------------------------------------------------- //
\r
79 // --- implements ---------------------------------------------------------- //
\r
80 // ------------------------------------------------------------------------- //
\r
82 * <p>絶対 url にして返します。
\r
83 * <p>original AS3で相対パスを絶対パスに変換する http://www.shin-go.net/motionlab/?p=449
\r
84 * @alias X.URL.toAbsolutePath
\r
86 * @return {string} url
\r
88 function X_URL_toAbsolutePath( path ){
\r
93 if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;
\r
95 _ary = X_URL_BASE_URL.split( ss );
\r
96 ary = _ary[ 1 ].split( s );
\r
98 if( path.charAt( 0 ) === s ) return [ _ary[ 0 ], ss, ary[ 0 ], path ].join( '' );
\r
100 if( path.substr( 0, 2 ) === './' ){
\r
101 path = path.substr( 2 );
\r
103 while( path.substr( i, 3 ) === '../' ){
\r
107 if( i ) path = path.substr( i );
\r
109 return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );
\r
113 * @alias X.URL.isSameDomain
\r
115 * @return {boolean}
\r
117 function X_URL_isSameDomain( path ){
\r
118 path = X_URL_cleanup( X_URL_toAbsolutePath( path ) );
\r
119 return path === X_URL_HOST || path.indexOf( X_URL_HOST + '/' ) === 0;
\r
123 * @alias X.URL.isSameProtocol
\r
125 * @return {boolean}
\r
127 function X_URL_isSameProtocol( path ){
\r
128 return X_URL_toAbsolutePath( path ).indexOf( location.protocol ) === 0;
\r
132 * @alias X.URL.isLocal
\r
134 * @return {boolean}
\r
136 function X_URL_isLocal( path ){
\r
137 return X_URL_toAbsolutePath( path ).indexOf( 'file:' ) === 0;
\r
140 * url パラメータとハッシュフラグメントを削除します。
\r
141 * @alias X.URL.cleanup
\r
143 * @return {boolean}
\r
145 function X_URL_cleanup( path ){
\r
146 return path.split( '?' )[ 0 ].split( '#' )[ 0 ];
\r
150 * @alias X.URL.getEXT
\r
154 function X_URL_getEXT( path ){
\r
155 path = X_URL_cleanup( path ).split( '.' );
\r
156 return path.length ? path.pop() : '';
\r
160 * @alias X.URL.getSearch
\r
164 function X_URL_getSearch( path ){
\r
165 path = path.split( '#' )[ 0 ].split( '?' );
\r
166 path.splice( 0, 1 );
\r
167 return path.join( '?' );
\r
171 * @alias X.URL.getHash
\r
175 function X_URL_getHash( path ){
\r
176 path = path.split( '#' );
\r
177 path.splice( 0, 1 );
\r
178 return path.join( '#' );
\r
182 * object を url パラメータにします。値が object の場合、データは失われます。
\r
183 * @alias X.URL.objToParam
\r
187 function X_URL_objToParam( data ){
\r
188 var result = [], k, n = -1;
\r
190 if( n !== -1 ) result[ ++n ] = '&';
\r
192 result[ ++n ] = '=';
\r
193 result[ ++n ] = encodeURIComponent( data[ k ] );
\r
195 return result.join( '' );
\r
198 * url にパラメータを加えた url を返します。
\r
199 * @alias X.URL.create
\r
204 function X_URL_create( url, params ){
\r
205 if( !X_Type_isObject( params ) || !( params = X_URL_objToParam( params ) ) ) return url;
\r
207 return url + ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) + params;
\r
210 function X_URL_paramToObj( str ){
\r
215 if( !str ) return obj;
\r
217 for( parts = str.split( '&' ), l = parts.length; i < l; ++i ){
\r
219 p = pair.indexOf( '=' );
\r
221 obj[ decodeURIComponent( pair ) ] = true;
\r
223 obj[ decodeURIComponent( pair.substr( 0, p ) ) ] = X_String_parse( decodeURIComponent( pair.substr( p + 1 ) ) );
\r