OSDN Git Service

Version 0.6.115, fix X.Class & X.Node.Selector for Opera Mobile 12, fix X.Audio.
[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 // ------------------------------------------------------------------------- //\r
19 // --- interface ----------------------------------------------------------- //\r
20 // ------------------------------------------------------------------------- //\r
21 X.URL = {\r
22 \r
23         BASE_URL : X_URL_BASE_URL,\r
24         \r
25         IS_FILE  : X_URL_IS_FILE,\r
26         \r
27         IS_LOCAL : X_URL_IS_LOCAL,\r
28         \r
29         toAbsolutePath : X_URL_toAbsolutePath,\r
30         \r
31         isSameDomain   : X_URL_isSameDomain,\r
32         \r
33         cleanup        : X_URL_cleanup\r
34 };\r
35 \r
36 // ------------------------------------------------------------------------- //\r
37 // --- implements ---------------------------------------------------------- //\r
38 // ------------------------------------------------------------------------- //\r
39 /*\r
40  * original\r
41  * AS3で相対パスを絶対パスに変換する\r
42  * http://www.shin-go.net/motionlab/?p=449\r
43  */\r
44 function X_URL_toAbsolutePath( path ){\r
45         var s  = '/',\r
46                 ss = '//',\r
47                 _ary, ary, i = 0;\r
48 \r
49         if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;\r
50         \r
51         _ary = X_URL_BASE_URL.split( ss );\r
52         ary  = _ary[ 1 ].split( s );\r
53 \r
54         if( path.charAt( 0 ) === s ) return [ _ary[ 0 ], ss, ary[ 0 ], path ].join( '' );\r
55                 \r
56         if( path.substr( 0, 2 ) === './' ){\r
57                 path = path.substr( 2 );\r
58         } else {\r
59                 while( path.substr( i, 3 ) === '../' ){\r
60                         --ary.length;\r
61                         i += 3;\r
62                 };\r
63                 if( i ) path = path.substr( i );\r
64         };\r
65         return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );\r
66 };\r
67 \r
68 function X_URL_isSameDomain( path ){\r
69         path = X_URL_cleanup( X_URL_toAbsolutePath( path ) );\r
70         return path === X_URL_BASE_URL || path.indexOf( X_URL_BASE_URL + '/' ) === 0;\r
71 };\r
72 \r
73 function X_URL_cleanup( path ){\r
74         return path.split( '?' )[ 0 ].split( '#' )[ 0 ];\r
75 };\r
76 \r