OSDN Git Service

Version 0.6.44, fixed X.Class for safari1.
authoritozyun <itozyun@user.sourceforge.jp>
Wed, 4 Jun 2014 04:21:37 +0000 (13:21 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Wed, 4 Jun 2014 04:21:37 +0000 (13:21 +0900)
0.6.x/js/core/00_X.js
0.6.x/js/core/00_builtin.js
0.6.x/js/core/01_XUa.js
0.6.x/js/core/02_XType.js
0.6.x/js/core/04_XClass.js
0.6.x/js/core/05_XTimer.js
0.6.x/js/dom/11_XDomNode.js
0.6.x/js/dom/12_XDomEvent.js
0.6.x/js/dom/18_XDomQuery.js
0.6.x/js/dom/22_XDomBuilder.js

index eba12b0..72023b5 100644 (file)
@@ -13,7 +13,7 @@ X.getTime = Date.now ? new Function( 'return Date.now()' ) : new Function( 'retu
                \r
 X.emptyFunction = new Function;\r
 \r
-               // defer の場合もあるので、document.readyState を見る\r
+               // defer の場合もあるので、document.readyState を見る MacIE で false\r
 X.inHead = (function( s ){\r
        if( !s ) return false;\r
        if( !s.length ) return false; // Safari1.3 312.8 でerror\r
index 6d4b1a1..da90d1a 100644 (file)
@@ -215,4 +215,57 @@ if (window.ActiveXObject ? !Number.prototype.toFixed : (!navigator.taintEnabled
                };\r
        })(); */\r
        \r
+/*\r
+ * Safari の JavaScript の不備 \r
+ * http://nanto.asablo.jp/blog/2006/01/13/209495\r
+ * \r
+ * web.paulownia.jp - JavaScriptとクロージャ\r
+ * https://web.archive.org/web/20070526063400/http://web.paulownia.jp/script/oop/closure.html\r
+ * MacOSX 10.3のsafariにはhasOwnPropertyが実装されていないので、独自に追加する必要があります。\r
+ */\r
+/*-----------------\r
+result  |  1  |  2  |  3  |\r
+this    | NaN |     |     | NaN | NaN | NaN |\r
+_proto_ |     | NaN |     | NaN |     | NaN |\r
+_super_ |     |     | NaN |     | NaN | NaN |\r
+*/\r
 \r
+/*\r
+Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){\r
+               var _proto_ = this.constructor && this.constructor.prototype,\r
+                       v       = this[ p ],\r
+                       nan     = v !== v; // isNaN\r
+                       save, r = false;\r
+               if( nan ){\r
+                       // NaN の判定は完全に chain を辿る必要がある\r
+                       save = _proto_[ p ];\r
+                       _proto_[ p ] = true;\r
+                       r = this[ p ] !== this[ p ]; // isNaN\r
+                       \r
+                       delete _proto_[ p ];\r
+                       // もっと深い chain で定義されていた.\r
+                       if( this[ p ] !== this[ p ] ) return r; // 1\r
+                       // __proto__ で定義されていた.\r
+                       _proto_[ p ] = save;\r
+               } else\r
+               if( p in this ){\r
+                       if(\r
+                               !_proto_ ||\r
+                               !( p in _proto_ ) ||\r
+                               ( _proto_[ p ] !== v )\r
+                       ) return true;\r
+                       \r
+                       // this と __proto__ に同名で同値が書かれている可能性あり\r
+\r
+                       save = _proto_[ p ];\r
+                       _proto_[ p ] = v + ' ';\r
+                       r = v === this[ p ];\r
+                       \r
+                       delete _proto_[ p ];\r
+                       // もっと深い chain で定義されていた.\r
+                       if( _proto_[ p ] === v ) return r;\r
+                       // __proto__ で定義されていた.\r
+                       _proto_[ p ] = save;\r
+               };\r
+               return r;\r
+  }); */
\ No newline at end of file
index ed483b6..4d7e44b 100644 (file)
@@ -25,6 +25,7 @@ X.UA = (function( n, undefined ){
        if( document.all ){\r
                acme.ActiveX = !!window[ 'ActiveXObject' ];\r
                acme.IE = parseFloat(dav.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || 0;\r
+               acme.MacIE = !!dav.indexOf( 'Mac_PowerPC' ) || !!dav.indexOf( 'Mac_PPC' ) || !!dav.indexOf( 'Mac_68K' );\r
                acme.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 ||\r
                                                dua.toLowerCase().indexOf( 'windows phone' ) !== -1;            \r
                return acme;\r
@@ -93,7 +94,7 @@ X.UA = (function( n, undefined ){
        \r
        return acme;\r
 })( navigator );\r
-\r
+/* ie5 でerror...\r
 X.inObject = X.UA.IE && X.UA.IE < 5 ? // TODO JScript で判定\r
        (function( name, obj ){\r
                var p;\r
@@ -104,12 +105,11 @@ X.inObject = X.UA.IE && X.UA.IE < 5 ? // TODO JScript で判定
                };\r
                return false;\r
        }) :\r
-       new Function( 'a,b', 'return a in b' );\r
-       \r
+       new Function( 'a,b', 'return a in b' ); \r
 \r
 // Safari 3.1 未満は開発コンソールがない!\r
 // http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
-/*@+debug[*/\r
+\r
 if( X.UA.Safari && X.UA.WebKit < 525.13 ){     \r
        window.onerror = function( x, y, z ){\r
                var n = String.fromCharCode( 10 );\r
@@ -117,9 +117,8 @@ if( X.UA.Safari && X.UA.WebKit < 525.13 ){
            return true;\r
        };\r
 };\r
-/*]@+debug*/\r
 \r
 if( X.UA.IE && X.UA.IE < 7 ){ // error @ NN7.2\r
        // bonus: hotfix for IE6 SP1 (bug KB823727)\r
        document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
-};\r
+};*/\r
index 7af1026..ecd16e6 100644 (file)
@@ -13,9 +13,10 @@ X.Type = {
                return typeof v === 'function';\r
        },\r
        isArray :\r
-               X.UA.IE && X.UA.IE < 5 ? (function(v){ return v && typeof v.length === 'number';}) :\r
+               X.UA.IE && ( X.UA.IE < 5 || X.UA.MacIE ) ? (function(v){ return v && typeof v.length === 'number';}) :\r
                window['Array'] ? (new Function('v', 'return v instanceof Array;')) :\r
                (function(v){ return Object.prototype.toString.call(v) === '[object Array]';}),\r
+               \r
        isBoolean : function(v) {\r
                return typeof v === 'boolean';\r
        },\r
@@ -26,11 +27,11 @@ X.Type = {
                return typeof v === 'number';\r
        },\r
        isFinite : function(v){\r
-               return X.Type.isNumber(v) === true && isFinite(v);\r
+               return X.Type.isNumber(v) && isFinite(v);\r
        },\r
        isHTMLElement :\r
-               // ie4\r
-               X.UA.IE && X.UA.IE < 5 ? (function(v){ return v && v.tagName && v.all;}) :\r
+               // ie4 or MacIE5.23\r
+               X.UA.IE && ( X.UA.IE < 5 || X.UA.MacIE ) ? (function(v){ return v && v.tagName && v.all;}) :\r
                window['HTMLElement'] ? (new Function('v', 'return v instanceof HTMLElement')) :\r
                (function(v){ return v && v.nodeType === 1 && v.appendChild;}),\r
        /*\r
index 4e3b5f8..7f2eeb9 100644 (file)
@@ -240,11 +240,17 @@ X.Class = ( function(){
 \r
                        klass = new Function( 'var a=arguments,f=a.callee;if(f.__new)return f.__new(a)' );\r
                        klass.__new = C;\r
-                       if( X.UA.Safari && X.UA.Safari < 2 ){\r
+                       klass.superClassOf = X.Class._superClassOf;\r
+                       klass.subClassOf   = X.Class._subClassOf;\r
+                       \r
+                       if( X.UA.Safari && X.UA.Safari < 2 ){ // Webkit で判定、Gecko もこちら\r
                                // Safari では、prototype の差し替えができない, 1.3 で確認\r
                                // あとから super class にプロパティを足しても、sub に伝播しない、、、\r
-                               traits && X.Class._override( klass.prototype, traits, false );\r
-                               X.Class._override( X.Class._override( klass.prototype, CommonProps, false ), props, true );\r
+                               //traits && X.Class._override( klass.prototype, traits, false );\r
+                               //X.Class._override( X.Class._override( klass.prototype, CommonProps, false ), props, true );\r
+                               // F = new Function; F.prototype = traits; traits.constructor = klass; klass.prototype = new F;\r
+                               X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
+                               if( traits ) klass.prototype.__proto__ = traits;\r
                        } else {\r
                                klass.prototype = X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
                                klass.prototype.constructor = klass;\r
@@ -352,6 +358,12 @@ X.Class = ( function(){
                                };\r
                        };\r
                        return target;\r
+               },\r
+               _superClassOf : function(){\r
+                       \r
+               },\r
+               _subClassOf : function(){\r
+                       \r
                }\r
        };\r
 })();
\ No newline at end of file
index 058b8c4..1dc1673 100644 (file)
@@ -193,7 +193,7 @@ if( X.UA.iOS ){
         } );\r
 };\r
 \r
-if( X.UA.IE && X.UA.IE < 5 ){\r
-       X.Timer[ '_ie4_loop' ] = X.Timer._loop;\r
-       X.Timer._loop = 'X.Timer._ie4_loop()';\r
+if( X.UA.IE && ( X.UA.IE < 5 || X.UA.MacIE ) ){\r
+       X.Timer[ '_ie_loop' ] = X.Timer._loop;\r
+       X.Timer._loop = 'X.Timer._ie_loop()';\r
 };\r
index ae2901f..86c75db 100644 (file)
@@ -1,4 +1,3 @@
-\r
 X.Dom.Dirty = {\r
        CLEAN            :  0,\r
        CHILD_IS_DIRTY   :  1,\r
@@ -12,8 +11,6 @@ X.Dom.Dirty = {
        IE4_TEXTNODE_FIX : 256\r
 };\r
 \r
-ie55 = 7;\r
-\r
 X.Dom.State = {\r
        DESTROYED          : 0,\r
        EXIST              : 1,\r
@@ -28,9 +25,11 @@ X.Dom.State = {
        HAS_HEIGHT_LENGTH  : 512,\r
        HAS_HEIGHT_PERCENT : 1024,\r
        IE4_ONLY_TEXT      : 2048,\r
-       IE5_DISPLAY_NONE_FIX : 5 <= X.UA.IE && X.UA.IE < ie55 ? 4096 : 0\r
+       IE5_DISPLAY_NONE_FIX : 5 <= X.UA.IE && X.UA.IE < 5.5 ? 4096 : 0 // MacIE5.2- は ?\r
 };\r
 \r
+X.Dom._strictElmCreation = X.UA.IE && X.UA.IE < 9;// && !X.UA.MacIE;\r
+\r
 /*\r
  * Node( rawElement | rawTextnode | htmlString | textString )\r
  */\r
@@ -856,7 +855,6 @@ Node.prototype._startUpdate = function(){
        \r
        Node._html._dirty ? Node._html._commitUpdate() : this._commitUpdate();\r
        \r
-       //X.Dom._listeners && X.Dom._listeners[ X.Dom.Event.AFTER_UPDATE ] && X.Dom.dispatch( { type : X.Dom.Event.AFTER_UPDATE } );\r
        X.Dom._listeners && X.Dom._listeners[ X.Dom.Event.AFTER_UPDATE ] && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.AFTER_UPDATE } );\r
        //this._rawNode.style.visibility = tmp;\r
 };\r
@@ -1111,7 +1109,7 @@ Node.prototype._actualCreate =
                        };\r
                        this._isNew = true;\r
                        this._rawNode = elm =\r
-                               ie55 <= X.UA.IE && X.UA.IE < 9 ?\r
+                               X.Dom._strictElmCreation ?\r
                                        document.createElement( [\r
                                                '<', this._tag,\r
                                                        ' UID="', this._uid, '"',\r
@@ -1202,7 +1200,7 @@ Node.prototype._afterActualCreate =
                        //      this._dirty = X.Dom.Dirty.CSS | X.Dom.Dirty.IE_FILTER;\r
                        //      this._updateRawNode( elm );\r
                        //} else\r
-                       if( !X.UA.IE || X.UA.IE < ie55 || 9 <= X.UA.IE ){\r
+                       if( !X.Dom._strictElmCreation ){\r
                                elm.UID = this._uid;\r
                                this._newAttrs = this._attrs;\r
                                this._dirty = X.Dom.Dirty.ID | X.Dom.Dirty.CLASSNAME | X.Dom.Dirty.CSS | X.Dom.Dirty.ATTR | X.Dom.Dirty.IE_FILTER;\r
index 2fc5817..b29f3f8 100644 (file)
@@ -228,7 +228,7 @@ X.Dom.Node.prototype._addEvent =
                        this._rawNode.attachEvent( 'on' + type, this._handleEvent );\r
                }) :\r
                (function( type ){\r
-                       var elm = this._ie4getRawNode();\r
+                       var elm = this._rawNode || this._ie4getRawNode && this._ie4getRawNode();\r
                        if( !elm ) return;\r
                        this._handleEvent = elm[ 'on' + type ] = this._handleEvent || X.Callback.create( this );\r
                });\r
@@ -278,7 +278,7 @@ X.Dom.Node.prototype._removeEvent =
                        };\r
                }) :\r
                (function( type ){\r
-                       var elm = this._rawNode || this._ie4getRawNode();\r
+                       var elm = this._rawNode || this._ie4getRawNode && this._ie4getRawNode();\r
                        if( !elm ) return;\r
                        elm[ 'on' + type ] = X.emptyFunction;\r
                        elm[ 'on' + type ] = '';\r
index eece774..12d3d75 100644 (file)
@@ -239,7 +239,7 @@ X.Dom.Query._parse = function( query, last ){
                \r
                // 以下、パースと探索\r
                for( ; queryString.length; ){\r
-                       console.log( 'queryString[' + queryString + ']' );\r
+                       //console.log( 'queryString[' + queryString + ']' );\r
                        \r
                        // 初期化処理\r
                        if( !parsed ){\r
@@ -253,7 +253,7 @@ X.Dom.Query._parse = function( query, last ){
                                queryString = queryString.substr( parsed[ 0 ] );\r
                                parsed      = parsed[ 1 ];\r
                                \r
-                               console.log( 'X.Dom.Query._parse ' + parsed );\r
+                               //console.log( 'X.Dom.Query._parse ' + parsed );\r
                                \r
                                if( parsed === 5 ){\r
                                        isMulti = true;\r
@@ -280,7 +280,7 @@ X.Dom.Query._parse = function( query, last ){
                                if( combinator !== 0 ){\r
                                        parents = xnodes;\r
                                        xnodes  = [];\r
-                                       console.log( 'cobinator !== 0 ' + parents.length + ' : ' + xnodes.length );\r
+                                       //console.log( 'cobinator !== 0 ' + parents.length + ' : ' + xnodes.length );\r
                                };\r
                        };\r
                        \r
@@ -331,12 +331,12 @@ X.Dom.Query._parse = function( query, last ){
                                        \r
                                default :\r
                                        if( combinator === 1 || ( isStart && selector < 7 ) ){\r
-                                               console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
+                                               //console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
                                                for( ; i < l; ++i ){\r
                                                        xnode = parents[ i ];\r
                                                        xnode._xnodes && xnode._xnodes.length && X.Dom.Query._fetchElements( xnodes, xnode, isAll ? null : tagName );\r
                                                };\r
-                                               console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
+                                               //console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
                                        };\r
                        };\r
                        \r
@@ -477,9 +477,9 @@ X.Dom.Query._parse = function( query, last ){
                        isNot   = false;\r
                        parsed  = null;\r
                        \r
-                       console.log( '//end :' + ( xnodes && xnodes.length ) );\r
+                       //console.log( '//end :' + ( xnodes && xnodes.length ) );\r
                };\r
-               console.log( 'multi:' + ( xnodes && xnodes.length ) );\r
+               //console.log( 'multi:' + ( xnodes && xnodes.length ) );\r
                \r
                // tree 順に並び替え、同一要素の排除\r
                if( isMulti ){\r
index 7e1257f..b33b2ec 100644 (file)
@@ -21,7 +21,7 @@ X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT,
        // textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける\r
        \r
        // cleanup tree \r
-       (function/*cleanUpTree*/( elm, skip, head ){\r
+       X.UA.MacIE || (function/*cleanUpTree*/( elm, skip, head ){\r
                var nodes      = X.copyArray( elm.childNodes ),\r
                        i          = 0,\r
                        l          = nodes.length,\r