From 714d9a512e8d9e09001183ebf15f549ea51e48ad Mon Sep 17 00:00:00 2001 From: itozyun Date: Tue, 7 Oct 2014 22:27:51 +0900 Subject: [PATCH] Version 0.6.94... --- 0.6.x/js/01_core/04_XObject.js | 92 ++++++++++++++++++++++++++++++++++++++++++ 0.6.x/js/01_core/05_XString.js | 86 +++++++++++++++++++++++++++++++++++++++ 0.6.x/js/01_core/06_XURL.js | 53 ++++++++++++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 0.6.x/js/01_core/04_XObject.js create mode 100644 0.6.x/js/01_core/05_XString.js create mode 100644 0.6.x/js/01_core/06_XURL.js diff --git a/0.6.x/js/01_core/04_XObject.js b/0.6.x/js/01_core/04_XObject.js new file mode 100644 index 0000000..3e57b52 --- /dev/null +++ b/0.6.x/js/01_core/04_XObject.js @@ -0,0 +1,92 @@ + +var X_Object_inObject = X.UA.IE < 5.5 ? // TODO JScript で判定 + (function( name, obj ){ + var p; + if( obj[ name ] ) return true; + name += ''; // 数値も許可 + for( p in obj ){ + if( p === name ) return true; + }; + return false; + }) : + new Function( 'a,b', 'return a in b' );// なぜか ie5 でもerror + + +X.Object = { + + clone : X_Object_clone, + + deepCopy : X_Object_deepCopy, + + cloneArray : X_Object_cloneArray, + + isEmpty : X_Object_isEmpty, + + inObject : X_Object_inObject +}; + +function X_Object_clone( src ){ + var ret, k; + if( typeof src !== 'object' ) return src; + ret = {}; + for( k in src ){ + ret[ k ] = src[ k ]; + }; + return ret; +}; + +function X_Object_deepCopy( src ){ + return X_Object_deepCopy_( src, [], [], -1 ); +}; + +function X_Object_deepCopy_( src, objSrc, objCopy, n ) { + var ret, i, key; + if( !src ){ // 0, "", null, undefined, NaN, false + return src; + } else + if( X.Type.isArray( src ) ){ + i = objSrc.indexOf( src ); + if( i !== -1 ) return objCopy[ i ]; + objSrc[ ++n ] = src; + objCopy[ n ] = ret = []; + } else + if( X.Type.isObject( src ) ){ + i = objSrc.indexOf( src ); + if( i !== -1 ) return objCopy[ i ]; + objSrc[ ++n ] = src; + objCopy[ n ] = ret = {}; + } else { + // string, number, true + return src; + }; + for( key in src ){ + ret[ key ] = clone( src[ key ], objSrc, objCopy, n ); + }; + return ret; +}; + +function X_Object_cloneArray( ary ){ + var ret = [], i = ary.length; + if( !i ) return ret; + for( ; i; ){ + ret[ --i ] = ary[ i ]; + }; + return ret; +}; + +function X_Object_isEmpty( v ){ + var p; + for( p in v ){ + return false;//if( v.hasOwnProperty && v.hasOwnProperty( p ) ) return false; ie4 で動かない、、、 + }; + return true; +}; + +/* +X.matchTest = function( array1, array2 ){ + var i = array2.length; + for( ; i; ){ + if( array1.indexOf( array2[ --i ] ) === -1 ) return false; + }; + return true; +}; */ diff --git a/0.6.x/js/01_core/05_XString.js b/0.6.x/js/01_core/05_XString.js new file mode 100644 index 0000000..86a2043 --- /dev/null +++ b/0.6.x/js/01_core/05_XString.js @@ -0,0 +1,86 @@ + +// ------------------------------------------------------------------------- // +// ------------ local variables -------------------------------------------- // +// ------------------------------------------------------------------------- // +var X_String_CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 ); + +// ------------------------------------------------------------------------- // +// --- interface ----------------------------------------------------------- // +// ------------------------------------------------------------------------- // +X.String = { + + parse : X_String_parse, + + cleanupWhiteSpace : X_String_cleanupWhiteSpace, + + whiteSpaceToTag : X_String_whiteSpaceToTag, + + chrReferanceTo : X_String_chrReferanceTo + +}; + +// ------------------------------------------------------------------------- // +// --- implements ---------------------------------------------------------- // +// ------------------------------------------------------------------------- // +function X_String_parse( v ){ + var _v, n; + if( X.Type.isString( v ) ){ + switch( v ){ + case '' : return v; + //case '{}' : return {}; + //case '[]' : return []; + case 'NaN' : return NaN; + case 'null' : return null; + case 'true' : return true; + case 'false' : return false; + case 'Infinity' : return 1 / 0;//Number.POSITIVE_INFINITY; + case '-Infinity' : return -1 / 0;//Number.NEGATIVE_INFINITY; + //case 'void(0)' : + //case 'void 0' : + case 'undefined' : return; + }; + _v = v.split( ' ' ).join( '' ); + n = _v - 0; + if( '' + n === _v || '' + n === '0' + _v ) return n; + }; + return v; +}; + +function X_String_cleanupWhiteSpace( text ){ + var _ = ' ', __ = ' ', CRLF = X_String_CRLF; + //text.indexOf( CRLF ) !== -1 && ( text = text.split( CRLF ).join( _ ) ); + text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) ); + text.indexOf( '\t' ) !== -1 && ( text = text.split( '\t' ).join( _ ) ); + text.indexOf( '\r' ) !== -1 && ( text = text.split( '\r' ).join( _ ) ); + text.indexOf( '\n' ) !== -1 && ( text = text.split( '\n' ).join( _ ) ); + text.indexOf( '\f' ) !== -1 && ( text = text.split( '\f' ).join( _ ) ); + text.indexOf( '\b' ) !== -1 && ( text = text.split( '\b' ).join( _ ) ); + while( text.indexOf( __ ) !== -1 ){ + text = text.split( __ ).join( _ ); + }; + return text; +}; + +function X_String_whiteSpaceToTag( text ){ + if( text == null ) return ''; + return text.toString() + //.split( '\r\n\r\n' ).join( '
' ) + //.split( '\n\r\n\r' ).join( '
' ) + //.split( '\r\n' ).join( '
' ) + .split( '\n\r' ).join( '
' ) + .split( '\r' ).join( '
' ) + .split( '\n' ).join( '
' ) + .split( '\t' ).join( '    ' ) + .split( '\f' ).join( '' ) + .split( '\b' ).join( '' ); +}; + +function X_String_chrReferanceTo( str ){ + if( str == null ) return ''; + return str.toString() + .split( '&' ).join( '&' ) + .split( '<' ).join( '<' ) + .split( '>' ).join( '>' ) + .split( ' ' ).join( ' ' ); +}; + diff --git a/0.6.x/js/01_core/06_XURL.js b/0.6.x/js/01_core/06_XURL.js new file mode 100644 index 0000000..96be643 --- /dev/null +++ b/0.6.x/js/01_core/06_XURL.js @@ -0,0 +1,53 @@ + +var X_URL_BASE_URL = ( function( parts ){ + var last = 1 < parts.length && parts[ parts.length - 1 ]; + if( last !== false && ( last === '' || //末尾が/で終わるとき + last.indexOf( '.' ) !== -1 ) ){//末尾がファイル名で終わる時 + + --parts.length; + }; + return parts.join( '/' ); + })( location.href.split( '?' )[ 0 ].split( '#' )[ 0 ].split( '/' ) ), + + X_URL_IS_LOCAL = location.protocol === 'file:' || location.hostname === 'localhost' || location.hostname === '127.0.0.1'; + + +X.URL = { + + BASE_URL : X_URL_BASE_URL, + + IS_LOCAL : X_URL_IS_LOCAL, + + toAbsolutePath : X_URL_toAbsolutePath +}; + + + + /* + * original + * AS3で相対パスを絶対パスに変換する + * http://www.shin-go.net/motionlab/?p=449 + */ +function X_URL_toAbsolutePath( path ){ + var s = '/', + ss = '//', + _ary, ary, i = 0; + + if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path; + + _ary = X_URL_BASE_URL.split( ss ); + ary = _ary[ 1 ].split( s ); + + if( path.charAt( 0 ) === s ) return [ _ary[ 0 ], ss, ary[ 0 ], path ].join( '' ); + + if( path.substr( 0, 2 ) === './' ){ + path = path.substr( 2 ); + } else { + while( path.substr( i, 3 ) === '../' ){ + --ary.length; + i += 3; + }; + if( i ) path = path.substr( i ); + }; + return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' ); +}; \ No newline at end of file -- 2.11.0