OSDN Git Service

Version 0.6.75, add node.offset().
authoritozyun <itozyun@user.sourceforge.jp>
Sun, 7 Sep 2014 22:20:11 +0000 (07:20 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Sun, 7 Sep 2014 22:20:11 +0000 (07:20 +0900)
0.6.x/js/00_core/01_XUa.js
0.6.x/js/00_core/06_XEventDispatcher.js
0.6.x/js/01_dom/10_XDom.js
0.6.x/js/01_dom/12_XDomEvent.js
0.6.x/js/01_dom/13_XDomBoxModel.js

index a9e659b..0f06a35 100644 (file)
@@ -135,6 +135,10 @@ X.UA = (function( n, undefined ){
                console.log( '>>Khtml : ' + acme.Khtml );\r
                \r
        } else\r
+       if( ( i = dua.indexOf( 'Android ' ) ) !== -1 ){\r
+               acme.AndroidBrowser = parseFloat( dua.substr( i + 8 ) ) || 0;\r
+               console.log( '>> AndroidBrowser : ' + acme.Android );\r
+       } else\r
        if( i = parseFloat(dua.split('WebKit\/')[1]) ){\r
                acme.WebKit = i;\r
                \r
@@ -192,7 +196,15 @@ X.UA = (function( n, undefined ){
                console.log( '>> Android : ' + acme.Android );\r
        } else\r
        if( dua.indexOf( 'iPhone;' ) !== -1 || dua.indexOf( 'iPad;' ) !== -1 || dua.indexOf( 'iPod;' ) !== -1 ){\r
-               acme.iOS = parseFloat( dua.split( 'OS ' )[ 1 ].split( '_' ).join( '' ) ) || 1;\r
+               \r
+               v = dua.split( 'OS ' )[ 1 ].split( '_' );\r
+               \r
+               acme.iOSMajor = parseFloat( v[ 0 ] ) || 0;\r
+               acme.iOSMinor = parseFloat( v[ 1 ] ) || 0;\r
+               acme.iOSPatch = parseFloat( v[ 2 ] ) || 0;\r
+               \r
+               acme.iOS = acme.iOSMajor + acme.iOSMinor / 10;\r
+               \r
                console.log( '>> iOS : ' + acme.iOS );\r
        } else\r
        if( dua.indexOf( 'hp-tablet' ) !== -1 || dua.indexOf( 'webOS' ) !== -1 ){\r
index b1134d7..72f1f73 100644 (file)
@@ -177,7 +177,10 @@ X.EventDispatcher =
                                if( !list ) return ret;\r
                                \r
                                // 数値, 文字が渡された場合\r
-                               if( !type ) e = { type : type = e };\r
+                               if( !type ){\r
+                                       type = e;\r
+                                       e = { type : type };\r
+                               };\r
                                e.target = e.target || this;\r
                                \r
                                if( !( list = list[ type ] ) ) return ret;\r
@@ -196,6 +199,7 @@ X.EventDispatcher =
                                        };\r
                                        if( unlistens && unlistens.indexOf( f ) !== -1 ) continue;\r
                                        \r
+                                       r = X.Callback.NONE;\r
                                        if( f.k ){\r
                                                f.a = [ e ];\r
                                                r = X.Callback._proxyCallback( f );\r
@@ -354,7 +358,7 @@ function x_eventdispatcher_off( type, arg1, arg2, arg3 ){
                        ( this._unlistens[ type ] = [ f ] );\r
        } else {\r
                delete f.once;\r
-               f.kill === X.Callback._kill && f.kill();\r
+               // f.kill === X.Callback._kill && f.kill();\r
                _list.splice( i, 1 );\r
                if( !_list.length ){\r
                        delete this._listeners[ type ];\r
index 9ab72de..b888971 100644 (file)
@@ -1,4 +1,6 @@
-       \r
+\r
+\r
+\r
 X.Dom = X.Class._override(\r
        new X.EventDispatcher(),\r
        {\r
@@ -19,6 +21,9 @@ X.Dom = X.Class._override(
  *  https://w3g.jp/blog/studies/ios7_1_minimal-ui_warning\r
  *  iOS7.0からあったiPad Safariの高さ100%コンテンツでlandscape(横向き)時に起きる不具合\r
  * \r
+ * http://looxu.blogspot.jp/2013/11/ios7mobile-safariwindowinnerheight.html\r
+ * iOS7にて、Mobile Safariのwindow.innerHeightを正しく取得する方法\r
+ * \r
  *  http://tenderfeel.xsrv.jp/javascript/1182/\r
  *  アドレスバーの高さの算出\r
  * \r
@@ -34,7 +39,8 @@ X.Dom = X.Class._override(
  * getBoundingClientRect で fontsize の調査\r
  */\r
                _resize :\r
-                       X.UA.IE < 9 ?\r
+                       // iOS もループで回す,,,iOS3.1.3, iOS6 で確認\r
+                       X.UA.IE < 9 || X.UA.iOS ?\r
                                (function(){\r
                                        var size;\r
                                        if( !X.Dom._lock ){\r
@@ -232,6 +238,8 @@ X.Dom = X.Class._override(
                _getSize :\r
                        X.UA.IE ?\r
                                new Function( 'return[X.Dom._root.clientWidth,X.Dom._root.clientHeight]' ) :\r
+                       4 <= X.UA.iOS ?\r
+                               new Function( 'return[window.innerWidth,window.innerHeight]' ) :\r
                                new Function( 'return[window.innerWidth,window.innerHeight]' ),\r
                \r
                getSize : function(){\r
@@ -279,11 +287,19 @@ X.Dom = X.Class._override(
 \r
                getScrollbarSize : function(){\r
                        return [ X.Dom.BoxModel.vScrollbarSize, X.Dom.BoxModel.hScrollbarSize ];        \r
-               }               \r
+               },\r
+               \r
+               getBaseFontSize : function(){\r
+                       if( Node._body._updateTimerID ){\r
+                               Node._body._startUpdate();\r
+                               return Node._fontSizeNode._rawNode.offsetHeight;\r
+                       };\r
+                       return X.Dom.baseFontSize;\r
+               }\r
        }\r
 );\r
 \r
-if( !( X.UA.IE < 9 ) ){\r
+if( !( X.UA.IE < 9 || X.UA.iOS ) ){\r
        X.Dom._detectFontSize = function(){\r
                var size = Node._fontSizeNode._rawNode.offsetHeight;\r
                if( X.Dom.baseFontSize !== size ){\r
@@ -442,7 +458,7 @@ if( window[ 'orientation' ] !== undefined ){
        X.Dom._orientationchange = function( e ){\r
                X.Dom._orientationFlag = true;\r
                !X.UA.Android && X.Dom._resize();\r
-               console.log( '-- orientationchange : ' + X.getTime() );\r
+               console.log( '-- orientationchange : ' + X.Dom.getSize[ 0 ] + ' ' + X.Dom.getSize[ 1 ] );\r
        };\r
 };\r
 \r
index 0615482..c0eb02e 100644 (file)
@@ -2,6 +2,7 @@
  * use X.Callback\r
  * \r
  * http://d.hatena.ne.jp/uupaa/20100430/1272561922\r
+ * event.offsetX と offsetY の互換性について\r
  * \r
  */\r
 \r
@@ -28,8 +29,8 @@ if( !X.UA.IE || 9 <= X.UA.IE ){
                //this.screenY       = e.screenY;\r
                this.pageX         = e.pageX;\r
                this.pageY         = e.pageY;\r
-               this.offsetX       = e.offsetX || e.layerX;\r
-               this.offsetY       = e.offsetY || e.layerY;\r
+               this.offsetX       = e.offsetX || e.layerX || 0; // 要素上の座標を取得 \r
+               this.offsetY       = e.offsetY || e.layerY || 0;\r
                \r
                this.keyCode       = e.keyCode;\r
                this.altKey        = e.altKey;\r
@@ -411,5 +412,5 @@ if( X.UA.WebKit < 525.13 ){ // Safari3-
                };\r
 };\r
 \r
-X.Dom.listen( X.Dom.Event.VIEW_RESIZED, function(e){ console.log( 'X.Dom VIEW_RESIZED ' + e.w + 'x' + e.h ); } );\r
+X.Dom.listen( X.Dom.Event.VIEW_RESIZED, function(e){ console.log( 'X.Dom VIEW_RESIZED ' + e.w + ' x ' + e.h ); } );\r
 \r
index c3c0bf5..9076194 100644 (file)
@@ -307,3 +307,37 @@ Node.prototype.y = function(){
        };\r
 };\r
 \r
+Node.prototype.offset = function( /* xnodeParent */ ){\r
+       var x = 0, y = 0, elm;\r
+       \r
+       if( !this.parent ){\r
+               console.log( 'xnode.offset() : no parent' );\r
+               return { x : 0, y : 0 };\r
+       };\r
+       Node._body._updateTimerID && Node._body._startUpdate();\r
+       if( !this._root ){\r
+               console.log( 'xnode.offset() : not belong tree.' );\r
+               return { x : 0, y : 0 };\r
+       };\r
+       if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+       \r
+       if( X.Dom.Node._body === this || X.Dom.Node._html === this ){\r
+               return { x : 0, y : 0 };\r
+       };\r
+       \r
+       if( X.Dom.DOM_W3C ){\r
+               elm = this._rawNode;\r
+       } else\r
+       if( X.Dom.DOM_IE4 ){\r
+               elm = this._rawNode || this._ie4getRawNode();           \r
+       } else {\r
+               \r
+       };\r
+       \r
+       while( elm && elm !== document.body ){\r
+               x += elm.offsetLeft;\r
+               y += elm.offsetTop;\r
+               elm = elm.offsetParent || elm.parentNode || elm.parentElement;\r
+       };\r
+       return { x : x, y : y };\r
+};\r