OSDN Git Service

Version 0.6.41, fix for Opera8 & NN7.2+.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 20 May 2014 13:39:58 +0000 (22:39 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 20 May 2014 13:39:58 +0000 (22:39 +0900)
0.6.x/js/core/00_X.js
0.6.x/js/core/01_XUa.js
0.6.x/js/core/06_XEventDispatcher.js
0.6.x/js/dom/11_XDomNode.js
0.6.x/js/dom/12_XDomEvent.js
0.6.x/js/dom/13_XDomBoxModel.js
0.6.x/js/dom/15_XDomStyle.js

index b758632..eba12b0 100644 (file)
@@ -5,7 +5,7 @@ if( !window['console'] ) console = { log : function(a){
 var undefined,\r
        X = X || new Function( 'return X._shortcut && X._shortcut.apply( X._shortcut, arguments )' );\r
 \r
-X.VERSION = '0.6.18';\r
+X.VERSION = '0.6.39';\r
                \r
 X.bootTime = + new Date;\r
                \r
@@ -78,8 +78,3 @@ X.matchTest = function( array1, array2 ){
        };\r
        return true;\r
 };\r
-       \r
-// bonus: hotfix for IE6 SP1 (bug KB823727)\r
-document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
-//document.execCommand && document.execCommand( 'LiveResize', false, false );\r
-//document.execCommand && document.execCommand( 'SizeToControl', false, false );\r
index 7296b60..48ecc23 100644 (file)
@@ -7,13 +7,23 @@ X.UA = (function( n, undefined ){
                dua  = n.userAgent,\r
                dav  = n.appVersion,\r
                tv   = parseFloat(dav),\r
-               i;\r
-       acme.Opera  = ( 0 < dua.indexOf("Opera") ) ? tv : undefined;\r
-       acme.OperaMobile = ( 0 < dua.indexOf("Opera Mobi") ) ? tv : undefined;\r
+               i, j, v;\r
+       if( window.opera ){\r
+               i = dua.indexOf( 'Opera' ); // Opera/\r
+               j = dua.indexOf( 'Version/' );\r
+               acme.Opera = Math.max(\r
+                       i !== -1 ? parseFloat( dua.substr( i + 6 ) ) : 0,\r
+                       j !== -1 ? parseFloat( dua.substr( j + 8 ) ) : 0,\r
+                       tv );\r
+               acme.OperaMobile = 0 < dua.indexOf("Opera Mobi");\r
+               acme.OperaTablet = 0 < dua.indexOf("Opera Tablet");\r
+               return acme;\r
+       };\r
        \r
-       acme.IE = undefined;\r
-       if( document.all && !acme.Opera ){\r
-               acme.IE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
+       // Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\r
+       if( document.all ){\r
+               acme.ActiveX = !!window[ 'ActiveXObject' ];\r
+               acme.IE = parseFloat(dav.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || 0;\r
                return acme;\r
        };\r
        \r
@@ -67,8 +77,6 @@ X.UA.EInk =
        // Sony Reader Mozilla/5.0 (Linux; U; ja-jp; EBRD1101; EXT) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\r
        navigator.userAgent.indexOf( 'EBRD' ) !== -1;\r
 \r
-if( X.UA.IE && X.UA.IE < 10 ) X.UA.ActiveX = !!window[ 'ActiveXObject' ];\r
-\r
 X.inObject = X.UA.IE && X.UA.IE < 5 ?\r
        (function( name, obj ){\r
                var p;\r
@@ -92,4 +100,7 @@ if( X.UA.Safari && X.UA.WebKit < 525.13 ){
        };\r
 };\r
 \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
index 125208a..a4a1338 100644 (file)
@@ -144,7 +144,11 @@ X.EventDispatcher =
                                        ret   = X.Callback.NONE,\r
                                        type  = e.type,\r
                                        unlistens, i, l, f, r, sysOnly;\r
-\r
+                               \r
+                               // 数値, 文字が渡された場合\r
+                               if( !type ) e = { type : type = e };\r
+                               e.target = e.target || this;\r
+                               \r
                                if( !list || !( list = list[ type ] ) ) return ret;\r
                                \r
                                ++this._dispatching;\r
index 2ad123d..1763121 100644 (file)
@@ -988,8 +988,9 @@ Node.prototype._updateRawNode =
                        // style\r
                        if( this._dirty & X.Dom.Dirty.CSS ){\r
                                if( this._cssText || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
-                                       elm.style.cssText = this._cssText;\r
-                                       //elm.setAttribute( 'style', this._cssText );\r
+                                       X.UA.Opera && X.UA.Opera < 9 ?\r
+                                               elm.setAttribute( 'style', this._cssText ) : // opera8用\r
+                                               ( elm.style.cssText = this._cssText );\r
                                } else {\r
                                        elm.style.cssText = ''; // IE5.5以下 Safari3.2 で必要\r
                                        elm.removeAttribute( 'style' );\r
index 586e33e..b08ade8 100644 (file)
@@ -5,7 +5,7 @@
  * \r
  */\r
 \r
-if( window.addEventListener ){\r
+if( X.Dom.EVENT_W3C ){\r
        X.Dom.Event = function( e, xnode ){\r
                //this._event        = e;\r
                this.type          = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
index ea827c4..0e77c47 100644 (file)
@@ -15,35 +15,36 @@ X.Dom.BoxModel = {
 \r
 X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){\r
 \r
-       var elm = Node._systemNode._rawNode || Node._systemNode._ie4getRawNode();\r
-       elm.style.cssText = 'width:10px;padding:1px;border:2px solid #0;margin:4px;';\r
+       var node = Node._systemNode;\r
+       node.cssText( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' );\r
        \r
-       X.Dom.BoxModel.defaultBoxModel = elm.offsetWidth === 10 ?\r
+       X.Dom.BoxModel.defaultBoxModel = node.width() === 10 ?\r
                X.Dom.BoxModel.BORDER_BOX :\r
                X.Dom.BoxModel.CONTENT_BOX;\r
        \r
        if( X.Dom.BoxModel.defaultBoxModel === X.Dom.BoxModel.CONTENT_BOX ){\r
-               elm.style.cssText += 'box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing: border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;';\r
-               \r
-               X.Dom.BoxModel.boxSizingEnabled = elm.offsetWidth === 10;\r
+               X.Dom.BoxModel.boxSizingEnabled = node.cssText( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' +\r
+                       'box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing: border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;' )\r
+                                                                                       .width() === 10;\r
        };\r
        // padding\r
        // border\r
        // margin\r
        // top\r
 \r
-       elm.style.cssText = 'width:90px;height:90px;overflow:auto;';\r
-       elm.innerHTML = '<div style="width:100px;height:100px;"></div>';\r
+       node.cssText( 'width:90px;height:90px;overflow:auto;' )\r
+               .html( '<div style="width:100px;height:100px;"></div>' )\r
+               ._startUpdate();\r
        \r
-       X.Dom.BoxModel.vScrollbarSize = 90 - elm.clientWidth;\r
-       X.Dom.BoxModel.hScrollbarSize = 90 - elm.clientHeight;\r
-\r
-       elm.style.cssText = 'position:absolute;top:0;left:0;margin:1px;border:2px solid #000;padding:4px;';\r
-       elm.children[ 0 ].style.cssText = 'position:absolute;top:8px;left:8px;margin:16px;border:32px solid #666;padding:64px;';\r
+       X.Dom.BoxModel.vScrollbarSize = 90 - node._rawNode.clientWidth;\r
+       X.Dom.BoxModel.hScrollbarSize = 90 - node._rawNode.clientHeight;\r
 \r
-       X.Dom.BoxModel.absoluteOffset = elm.children[ 0 ].offsetTop;\r
+       X.Dom.BoxModel.absoluteOffset =\r
+               node.cssText( 'position:absolute;top:0;left:0;margin:1px;border:2px solid #000;padding:4px;' )\r
+                       .firstChild().cssText( 'position:absolute;top:8px;left:8px;margin:16px;border:32px solid #666;padding:64px;' )\r
+                       .y();\r
 \r
-       elm.style.cssText = elm.innerHTML = '';\r
+       node.cssText( '' ).empty();\r
 });\r
 \r
 /* --------------------------------------\r
@@ -139,6 +140,49 @@ Node.prototype.scrollHeight = function(){
        };\r
 };\r
 \r
+Node.prototype.scrollLeft = function(){\r
+       if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
+               console.log( 'xnode.scrollLeft() : no parent' );\r
+               return 0;\r
+       };\r
+       Node.root._updateTimerID && Node.root._startUpdate();\r
+       if( !this._root ){\r
+               console.log( 'xnode.scrollLeft() : not belong tree.' );\r
+               return 0;\r
+       };\r
+       if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+       if( X.Dom.DOM_W3C ){\r
+               // this.css( X.Dom.Style.Unit.px, 'width' );\r
+               return this._rawNode.scrollLeft;\r
+       } else\r
+       if( X.Dom.DOM_IE4 ){\r
+               return ( this._rawNode || this._ie4getRawNode() ).scrollLeft;\r
+       } else {\r
+               \r
+       };\r
+};\r
+\r
+Node.prototype.scrollTop = function(){\r
+       if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
+               console.log( 'xnode.scrollTop() : no parent' );\r
+               return 0;\r
+       };\r
+       Node.root._updateTimerID && Node.root._startUpdate();\r
+       if( !this._root ){\r
+               console.log( 'xnode.scrollTop() : not belong tree.' );\r
+               return 0;\r
+       };\r
+       if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+       if( X.Dom.DOM_W3C ){\r
+               // this.css( X.Dom.Style.Unit.px, 'width' );\r
+               return this._rawNode.scrollTop;\r
+       } else\r
+       if( X.Dom.DOM_IE4 ){\r
+               return ( this._rawNode || this._ie4getRawNode() ).scrollTop;\r
+       } else {\r
+               \r
+       };\r
+};\r
 \r
 /* --------------------------------------\r
  *  x, y\r
index ef2fc7e..d67caa4 100644 (file)
@@ -26,13 +26,6 @@ X.Dom.Style = {
                COMBI             : 2 < 13
        },
        
-       SPECIAL_VALUES : {
-               AUTO : Number.POSITIVE_INFINITY,
-               FULL : X.Dom // something unigue value; 100%
-       },
-       
-       PropNo : {},
-       
        UNIT : {
                'px'   : 0,
                'em'   : 1,
@@ -1270,9 +1263,6 @@ X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){
                output[ size ] = xnode.css( 'fontSize', size ).height();// / base;
        };
        
-       // 以下解決、scroll 中に timer が無視される iOS の問題が原因(dom追加で起こったスクロール?)
-       // ipod touch 1st で必要なんですけど、、、
-       //xnode._rawNode.style.cssText = ''; 
-       xnode.cssText( '' ).empty(); //._startUpdate();
+       xnode.cssText( '' ).empty();
 } );