--- /dev/null
+\r
+var X_Object_inObject = X.UA.IE < 5.5 ? // TODO JScript で判定\r
+ (function( name, obj ){\r
+ var p;\r
+ if( obj[ name ] ) return true;\r
+ name += ''; // 数値も許可\r
+ for( p in obj ){\r
+ if( p === name ) return true;\r
+ };\r
+ return false;\r
+ }) :\r
+ new Function( 'a,b', 'return a in b' );// なぜか ie5 でもerror\r
+\r
+\r
+X.Object = {\r
+ \r
+ clone : X_Object_clone,\r
+ \r
+ deepCopy : X_Object_deepCopy,\r
+ \r
+ cloneArray : X_Object_cloneArray,\r
+ \r
+ isEmpty : X_Object_isEmpty,\r
+ \r
+ inObject : X_Object_inObject\r
+};\r
+ \r
+function X_Object_clone( src ){\r
+ var ret, k;\r
+ if( typeof src !== 'object' ) return src;\r
+ ret = {};\r
+ for( k in src ){\r
+ ret[ k ] = src[ k ];\r
+ };\r
+ return ret;\r
+};\r
+\r
+function X_Object_deepCopy( src ){ \r
+ return X_Object_deepCopy_( src, [], [], -1 );\r
+};\r
+\r
+function X_Object_deepCopy_( src, objSrc, objCopy, n ) {\r
+ var ret, i, key;\r
+ if( !src ){ // 0, "", null, undefined, NaN, false\r
+ return src;\r
+ } else\r
+ if( X.Type.isArray( src ) ){\r
+ i = objSrc.indexOf( src );\r
+ if( i !== -1 ) return objCopy[ i ];\r
+ objSrc[ ++n ] = src;\r
+ objCopy[ n ] = ret = [];\r
+ } else\r
+ if( X.Type.isObject( src ) ){\r
+ i = objSrc.indexOf( src );\r
+ if( i !== -1 ) return objCopy[ i ];\r
+ objSrc[ ++n ] = src;\r
+ objCopy[ n ] = ret = {};\r
+ } else {\r
+ // string, number, true\r
+ return src;\r
+ };\r
+ for( key in src ){\r
+ ret[ key ] = clone( src[ key ], objSrc, objCopy, n );\r
+ };\r
+ return ret;\r
+};\r
+\r
+function X_Object_cloneArray( ary ){\r
+ var ret = [], i = ary.length;\r
+ if( !i ) return ret;\r
+ for( ; i; ){\r
+ ret[ --i ] = ary[ i ];\r
+ };\r
+ return ret;\r
+};\r
+ \r
+function X_Object_isEmpty( v ){\r
+ var p;\r
+ for( p in v ){\r
+ return false;//if( v.hasOwnProperty && v.hasOwnProperty( p ) ) return false; ie4 で動かない、、、\r
+ };\r
+ return true;\r
+};\r
+\r
+/* \r
+X.matchTest = function( array1, array2 ){\r
+ var i = array2.length;\r
+ for( ; i; ){\r
+ if( array1.indexOf( array2[ --i ] ) === -1 ) return false;\r
+ };\r
+ return true;\r
+}; */\r
--- /dev/null
+\r
+// ------------------------------------------------------------------------- //\r
+// ------------ local variables -------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+var X_String_CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 );\r
+\r
+// ------------------------------------------------------------------------- //\r
+// --- interface ----------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+X.String = {\r
+ \r
+ parse : X_String_parse,\r
+ \r
+ cleanupWhiteSpace : X_String_cleanupWhiteSpace,\r
+ \r
+ whiteSpaceToTag : X_String_whiteSpaceToTag,\r
+ \r
+ chrReferanceTo : X_String_chrReferanceTo\r
+ \r
+};\r
+\r
+// ------------------------------------------------------------------------- //\r
+// --- implements ---------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+function X_String_parse( v ){\r
+ var _v, n;\r
+ if( X.Type.isString( v ) ){\r
+ switch( v ){\r
+ case '' : return v;\r
+ //case '{}' : return {};\r
+ //case '[]' : return [];\r
+ case 'NaN' : return NaN;\r
+ case 'null' : return null;\r
+ case 'true' : return true;\r
+ case 'false' : return false;\r
+ case 'Infinity' : return 1 / 0;//Number.POSITIVE_INFINITY;\r
+ case '-Infinity' : return -1 / 0;//Number.NEGATIVE_INFINITY;\r
+ //case 'void(0)' :\r
+ //case 'void 0' :\r
+ case 'undefined' : return;\r
+ };\r
+ _v = v.split( ' ' ).join( '' );\r
+ n = _v - 0;\r
+ if( '' + n === _v || '' + n === '0' + _v ) return n;\r
+ };\r
+ return v;\r
+};\r
+ \r
+function X_String_cleanupWhiteSpace( text ){\r
+ var _ = ' ', __ = ' ', CRLF = X_String_CRLF;\r
+ //text.indexOf( CRLF ) !== -1 && ( text = text.split( CRLF ).join( _ ) );\r
+ text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );\r
+ text.indexOf( '\t' ) !== -1 && ( text = text.split( '\t' ).join( _ ) );\r
+ text.indexOf( '\r' ) !== -1 && ( text = text.split( '\r' ).join( _ ) );\r
+ text.indexOf( '\n' ) !== -1 && ( text = text.split( '\n' ).join( _ ) );\r
+ text.indexOf( '\f' ) !== -1 && ( text = text.split( '\f' ).join( _ ) );\r
+ text.indexOf( '\b' ) !== -1 && ( text = text.split( '\b' ).join( _ ) );\r
+ while( text.indexOf( __ ) !== -1 ){\r
+ text = text.split( __ ).join( _ );\r
+ };\r
+ return text;\r
+};\r
+\r
+function X_String_whiteSpaceToTag( text ){\r
+ if( text == null ) return '';\r
+ return text.toString()\r
+ //.split( '\r\n\r\n' ).join( '<br>' )\r
+ //.split( '\n\r\n\r' ).join( '<br>' )\r
+ //.split( '\r\n' ).join( '<br>' )\r
+ .split( '\n\r' ).join( '<br>' )\r
+ .split( '\r' ).join( '<br>' )\r
+ .split( '\n' ).join( '<br>' )\r
+ .split( '\t' ).join( ' ' )\r
+ .split( '\f' ).join( '' )\r
+ .split( '\b' ).join( '' );\r
+};\r
+\r
+function X_String_chrReferanceTo( str ){\r
+ if( str == null ) return '';\r
+ return str.toString()\r
+ .split( '&' ).join( '&' )\r
+ .split( '<' ).join( '<' )\r
+ .split( '>' ).join( '>' )\r
+ .split( ' ' ).join( ' ' );\r
+};\r
+\r
--- /dev/null
+\r
+var X_URL_BASE_URL = ( function( parts ){\r
+ var last = 1 < parts.length && parts[ parts.length - 1 ];\r
+ if( last !== false && ( last === '' || //末尾が/で終わるとき\r
+ last.indexOf( '.' ) !== -1 ) ){//末尾がファイル名で終わる時\r
+ \r
+ --parts.length;\r
+ };\r
+ return parts.join( '/' );\r
+ })( location.href.split( '?' )[ 0 ].split( '#' )[ 0 ].split( '/' ) ),\r
+ \r
+ X_URL_IS_LOCAL = location.protocol === 'file:' || location.hostname === 'localhost' || location.hostname === '127.0.0.1';\r
+\r
+\r
+X.URL = {\r
+\r
+ BASE_URL : X_URL_BASE_URL,\r
+ \r
+ IS_LOCAL : X_URL_IS_LOCAL,\r
+ \r
+ toAbsolutePath : X_URL_toAbsolutePath\r
+};\r
+\r
+\r
+\r
+ /*\r
+ * original\r
+ * AS3で相対パスを絶対パスに変換する\r
+ * http://www.shin-go.net/motionlab/?p=449\r
+ */\r
+function X_URL_toAbsolutePath( path ){\r
+ var s = '/',\r
+ ss = '//',\r
+ _ary, ary, i = 0;\r
+\r
+ if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;\r
+ \r
+ _ary = X_URL_BASE_URL.split( ss );\r
+ ary = _ary[ 1 ].split( s );\r
+\r
+ if( path.charAt( 0 ) === s ) return [ _ary[ 0 ], ss, ary[ 0 ], path ].join( '' );\r
+ \r
+ if( path.substr( 0, 2 ) === './' ){\r
+ path = path.substr( 2 );\r
+ } else {\r
+ while( path.substr( i, 3 ) === '../' ){\r
+ --ary.length;\r
+ i += 3;\r
+ };\r
+ if( i ) path = path.substr( i );\r
+ };\r
+ return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );\r
+};
\ No newline at end of file