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
11 return parts.join( '/' );
\r
12 })( X_URL_cleanup( location.href ).split( '/' ) ),
\r
14 X_URL_IS_FILE = location.protocol === 'file:',
\r
16 X_URL_IS_LOCAL = X_URL_IS_FILE || location.hostname === 'localhost' || location.hostname === '127.0.0.1',
\r
18 X_URL_PARAMS = X_URL_ParamToObj( location.search.slice( 1 ) );
\r
20 // ------------------------------------------------------------------------- //
\r
21 // --- interface ----------------------------------------------------------- //
\r
22 // ------------------------------------------------------------------------- //
\r
30 'BASE_URL' : X_URL_BASE_URL,
\r
32 'IS_FILE' : X_URL_IS_FILE,
\r
34 'IS_LOCAL' : X_URL_IS_LOCAL,
\r
36 'PARAMS' : X_URL_PARAMS,
\r
38 'toAbsolutePath' : X_URL_toAbsolutePath,
\r
40 'isSameDomain' : X_URL_isSameDomain,
\r
42 'cleanup' : X_URL_cleanup,
\r
44 'getEXT' : X_URL_getEXT
\r
47 // ------------------------------------------------------------------------- //
\r
48 // --- implements ---------------------------------------------------------- //
\r
49 // ------------------------------------------------------------------------- //
\r
52 * AS3で相対パスを絶対パスに変換する
\r
53 * http://www.shin-go.net/motionlab/?p=449
\r
55 function X_URL_toAbsolutePath( path ){
\r
60 if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;
\r
62 _ary = X_URL_BASE_URL.split( ss );
\r
63 ary = _ary[ 1 ].split( s );
\r
65 if( path.charAt( 0 ) === s ) return [ _ary[ 0 ], ss, ary[ 0 ], path ].join( '' );
\r
67 if( path.substr( 0, 2 ) === './' ){
\r
68 path = path.substr( 2 );
\r
70 while( path.substr( i, 3 ) === '../' ){
\r
74 if( i ) path = path.substr( i );
\r
76 return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );
\r
79 function X_URL_isSameDomain( path ){
\r
80 path = X_URL_cleanup( X_URL_toAbsolutePath( path ) );
\r
81 return path === X_URL_BASE_URL || path.indexOf( X_URL_BASE_URL + '/' ) === 0;
\r
84 function X_URL_cleanup( path ){
\r
85 return path.split( '?' )[ 0 ].split( '#' )[ 0 ];
\r
88 function X_URL_getEXT( path ){
\r
89 path = X_URL_cleanup( path ).split( '.' );
\r
90 return path.length ? path.pop() : '';
\r
93 function X_URL_objToParam( data ){
\r
94 var result = [], k, n = -1;
\r
96 if( n !== -1 ) result[ ++n ] = '&';
\r
98 result[ ++n ] = '=';
\r
99 result[ ++n ] = encodeURIComponent( data[ k ] );
\r
101 return result.join( '' );
\r
104 function X_URL_ParamToObj( str ){
\r
105 var parts = str.split( '&' ),
\r
111 if( !str ) return obj;
\r
113 for( ; i < l; ++i ){
\r
115 p = pair.indexOf( '=' );
\r
117 obj[ decodeURIComponent( pair ) ] = true;
\r
119 obj[ decodeURIComponent( pair.substr( 0, p ) ) ] = X_String_parse( decodeURIComponent( pair.substr( p + 1 ) ) );
\r