OSDN Git Service

Version 0.6.43, bugfix.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 27 May 2014 22:30:54 +0000 (07:30 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 27 May 2014 22:30:54 +0000 (07:30 +0900)
0.6.x/js/core/01_XUa.js
0.6.x/js/core/04_XClass.js
0.6.x/js/core/06_XEventDispatcher.js
0.6.x/js/dom/10_XDom.js
0.6.x/js/dom/11_XDomNode.js
0.6.x/js/dom/12_XDomEvent.js
0.6.x/js/dom/14_XDomAttr.js
0.6.x/js/dom/22_XDomBuilder.js

index 60eea65..ed483b6 100644 (file)
@@ -30,7 +30,7 @@ X.UA = (function( n, undefined ){
                return acme;\r
        };\r
        \r
-       if( i = dua.indexOf( 'NetFront\/' ) ){\r
+       if( ( i = dua.indexOf( 'NetFront\/' ) !== -1 ) ){\r
                acme.NetFront = parseFloat( dua.substr( i + 9 ) ) || 0;\r
                return acme;\r
        };\r
@@ -51,8 +51,6 @@ X.UA = (function( n, undefined ){
        acme.Khtml  = ( dav.indexOf("Konqueror") >= 0 ) ? tv : undefined;\r
        acme.WebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
        acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
-       // replace( reg, ) don't work for Sigmarion2 pocketIE\r
-       acme.Gecko  = eval( '(navigator.userAgent.indexOf("Gecko\/") >= 0) ? parseFloat(navigator.userAgent.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, "$1$2" )) : undefined' );\r
        i = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
        if( i && !acme.Chrome ){\r
                acme.Safari = parseFloat( dav.split("Version/")[1] );\r
@@ -96,7 +94,7 @@ X.UA = (function( n, undefined ){
        return acme;\r
 })( navigator );\r
 \r
-X.inObject = X.UA.IE && X.UA.IE < 5 ?\r
+X.inObject = X.UA.IE && X.UA.IE < 5 ? // TODO JScript で判定\r
        (function( name, obj ){\r
                var p;\r
                if( obj[ name ] ) return true;\r
@@ -111,6 +109,7 @@ X.inObject = X.UA.IE && X.UA.IE < 5 ?
 \r
 // Safari 3.1 未満は開発コンソールがない!\r
 // http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
+/*@+debug[*/\r
 if( X.UA.Safari && X.UA.WebKit < 525.13 ){     \r
        window.onerror = function( x, y, z ){\r
                var n = String.fromCharCode( 10 );\r
@@ -118,6 +117,7 @@ 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
index be5f431..4e3b5f8 100644 (file)
@@ -241,6 +241,8 @@ X.Class = ( function(){
                        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
+                               // 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
                        } else {\r
index a4a1338..cf00404 100644 (file)
@@ -145,11 +145,13 @@ X.EventDispatcher =
                                        type  = e.type,\r
                                        unlistens, i, l, f, r, sysOnly;\r
                                \r
+                               if( !list ) return ret;\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
+                               if( !( list = list[ type ] ) ) return ret;\r
                                \r
                                ++this._dispatching;\r
                                \r
@@ -160,14 +162,19 @@ X.EventDispatcher =
                                \r
                                for( i = 0; i < list.length; ++i ){\r
                                        f = list[ i ];\r
+                                       if( !unlistens ){\r
+                                               unlistens = this._unlistens[ type ];\r
+                                       };\r
                                        if( unlistens && unlistens.indexOf( f ) !== -1 ) continue;\r
 \r
-                                       r = typeof f === 'function' ? f( e ) : f.handleEvent( e );\r
+                                       r = typeof f === 'function' ? f( e ) : f.handleEvent( e ); // dispatch 中に unlisten が作られることがある\r
                                        \r
-                                       if( f.once === true || r & X.Callback.UN_LISTEN ){\r
-                                               unlistens ?\r
-                                                       ( unlistens[ unlistens.length ] = f ) :\r
-                                                       ( unlistens = this._unlistens[ type ] = [ f ] );\r
+                                       if( f.once || r & X.Callback.UN_LISTEN ){\r
+                                               if( !unlistens ){\r
+                                                       unlistens = this._unlistens || ( this._unlistens = {} );\r
+                                                       unlistens = unlistens[ type ] || ( unlistens[ type ] = [] );\r
+                                               };\r
+                                               unlistens.indexOf( f ) === -1 && ( unlistens[ unlistens.length ] = f );\r
                                        };\r
 \r
                                        if( r & X.Callback.STOP_NOW ){\r
@@ -187,7 +194,8 @@ X.EventDispatcher =
                                                for( i = list.length; i; ){\r
                                                        this.unlisten( type, list[ --i ] );\r
                                                };\r
-                                               unlistens.length = 0;\r
+                                               list.length = 0;\r
+                                               delete unlistens[ type ];\r
                                        };\r
                                        \r
                                        if( this._killReserved ){\r
index 4407b05..7ed9121 100644 (file)
@@ -62,12 +62,6 @@ X.Dom = X.Class._override(
                _init : function(){\r
                        var s, size, h, r;\r
                        if( X.Dom.Event.DOM_PRE_INIT <= X.Dom.readyState ) return X.Callback.UN_LISTEN;\r
-                       if( s = X.Dom._script ){\r
-                               s.parentNode.removeChild( s );\r
-                               s.onreadystatechange = X.emptyFunction;\r
-                               s.onreadystatechange = null;\r
-                               delete X.Dom._script;\r
-                       };\r
                        delete X.Dom._init;\r
                        X.Dom.readyState = X.Dom.Event.DOM_PRE_INIT;\r
                        \r
@@ -206,6 +200,7 @@ X.Dom = X.Class._override(
                _getSize :\r
                        X.UA.IE ?\r
                                new Function( 'return[X.Dom._root.clientWidth,X.Dom._root.clientHeight]' ) :\r
+\r
                                new Function( 'return[window.innerWidth,window.innerHeight]' ),\r
                \r
                getSize : function(){\r
@@ -223,7 +218,11 @@ X.Dom = X.Class._override(
                // Safari2.0.4では標準・互換どちらも document.body\r
                        \r
                        Node.root._updateTimerID && Node.root._startUpdate();\r
-                       \r
+                       /*X.UA.Opera ?\r
+                               ( document.documentElement && document.documentElement.clientWidth ?\r
+                                       new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :\r
+                                       new Function( 'return[document.body.clientWidth,document.body.clientHeight]' )\r
+                               ) :*/                   \r
                        return [\r
                                X.Dom._root.scrollWidth  || X.Dom._root.offsetWidth,\r
                                X.Dom._root.scrollHeight || X.Dom._root.offsetHeight\r
index cbc5bf4..ae2901f 100644 (file)
@@ -58,7 +58,7 @@ X.Dom.Node = X.EventDispatcher.inherits(
 \r
                _attrs     : null, // X.Dom.Attr\r
                _newAttrs  : null,\r
-               _attrText  : '',\r
+               _attrText  : ' ', // X.Dom.Attr.objToAttrText が必要な場合は false が入っている\r
                \r
                _css       : null, // X.Dom.Style\r
                _cssText   : null,\r
index 20f1385..2fc5817 100644 (file)
@@ -361,7 +361,14 @@ if( 5 <= X.UA.IE && X.inHead ){
        document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
        X.Dom._script = document.getElementById( "__ie_onload" );\r
        X.Dom._script.onreadystatechange = function(){\r
-               this.readyState === 'complete' && X.Dom._init();\r
+               var s = X.Dom._script;\r
+               if( s && this.readyState === 'complete' ){\r
+                       s.onreadystatechange = X.emptyFunction;\r
+                       s.onreadystatechange = null;\r
+                       s.parentNode.removeChild( s );\r
+                       delete X.Dom._script;\r
+                       X.Dom._init && X.Dom._init();\r
+               };\r
        };\r
 } else\r
 // Re: onLoad doesn't work with Safari?\r
index fe3d625..175eedf 100644 (file)
@@ -1,134 +1,4 @@
 X.Dom.Attr = {\r
-       toName  : [],\r
-       toIndex : {\r
-               id           : 0,\r
-               className    : 1,\r
-               'class'      : 1, //\r
-               name         : 2,\r
-               title        : 3,\r
-               accessKey    : 4,\r
-               accesskey    : 4, //\r
-               tabIndex     : 5,\r
-               tabindex     : 5, //\r
-               dir          : 6,\r
-               lang         : 7,\r
-               'xml:lang'   : 8,\r
-               'xml:space'  : 9,\r
-               abbr         : 10,\r
-               accept       : 11,\r
-               acceptCharset : 12,\r
-               'accept-charset' : 12,\r
-               action       : 13,\r
-               align        : 14,\r
-               alink        : 15,\r
-               alt          : 16,\r
-               archive      : 17,\r
-               axis         : 18,\r
-               background   : 19,\r
-               bgColor      : 20,\r
-               bgcolor      : 20, //\r
-               border       : 21,\r
-               cellPadding  : 22,\r
-               cellpadding  : 22, //\r
-               cellSpacing  : 23,\r
-               cellspacing  : 23, //\r
-               ch           : 24,\r
-               'char'       : 24, //\r
-               chOff        : 25,\r
-               charoff      : 25, //\r
-               charset      : 26,\r
-               checked      : 27,\r
-               cite         : 28,\r
-               classid      : 29,\r
-               clear        : 30,\r
-               code         : 31,\r
-               codeBase     : 32,\r
-               codebase     : 32, //\r
-               codeType     : 33,\r
-               codetype     : 33, //\r
-               color        : 34,\r
-               cols         : 35,\r
-               colspan      : 36,\r
-               colSpan      : 36,\r
-               compact      : 37,\r
-               content      : 38,\r
-               coords       : 39,\r
-               data         : 40,\r
-               dateTime     : 41,\r
-               datetime     : 41, //\r
-               declare      : 42,\r
-               defer        : 43,\r
-               disabled     : 44,\r
-               enctype      : 45,\r
-               face         : 46,\r
-               htmlFor      : 47,\r
-               'for'        : 47, //\r
-               frame        : 48,\r
-               frameBorder  : 49,\r
-               frameborder  : 49, //\r
-               headers      : 50,\r
-               height       : 51,\r
-               href         : 52,\r
-               hreflang     : 53,\r
-               hspace       : 54,\r
-               httpEquiv    : 55,\r
-               'http-equiv' : 55, //\r
-               ismap        : 56,\r
-               isMap        : 56,\r
-               label        : 57,\r
-               language     : 58,\r
-               longDesc     : 59,\r
-               longdesc     : 59, //\r
-               marginheight : 60,\r
-               marginwidth  : 61,\r
-               maxLength    : 62,\r
-               maxlength    : 62, //\r
-               media        : 63,\r
-               method       : 64,\r
-               multiple     : 65,\r
-               noHref       : 66,\r
-               nohref       : 66,\r
-               noresize     : 67,\r
-               noshade      : 68,\r
-               nowrap       : 69,\r
-               object       : 71,\r
-               profile      : 72,\r
-               prompt       : 73,\r
-               readOnly     : 74,\r
-               readonly     : 74,\r
-               rel          : 75,\r
-               rev          : 76,\r
-               rows         : 77,\r
-               rowspan      : 78,\r
-               rowSpan      : 78,\r
-               rules        : 79,\r
-               scheme       : 80,\r
-               scope        : 81,\r
-               scrolling    : 82,\r
-               selected     : 83,\r
-               shape        : 84,\r
-               size         : 85,\r
-               span         : 86,\r
-               src          : 87,\r
-               standby      : 88,\r
-               start        : 89,\r
-               summary      : 90,\r
-               target       : 91,\r
-               text         : 92,\r
-               type         : 93,\r
-               useMap       : 94,\r
-               usemap       : 94,\r
-               valign       : 95,\r
-               value        : 96,\r
-               valueType    : 97,\r
-               valuetype    : 97,\r
-               version      : 98,\r
-               vlink        : 99,\r
-               vspace       : 100,\r
-               width        : 101,\r
-               wrap         : 102,\r
-               xmlns        : 103\r
-       },\r
        noValue : {\r
                checked  : 1,\r
                compact  : 1,\r
@@ -193,21 +63,16 @@ X.Dom.Attr = {
                        };\r
                        attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', v, '"' ].join( '' );\r
                };\r
-               return 0 < n ? attrs.join( ' ' ) : '';\r
+               return 0 < n ? attrs.join( ' ' ) : ' ';\r
        }\r
 };\r
 \r
-(function( toIndex, toName, renameForDOM, renameForTag ){\r
+(function( renameForDOM, renameForTag ){\r
        var name, i;\r
-       for( name in toIndex ){\r
-               if( typeof ( i = toIndex[ name ] ) === 'number' ){\r
-                       toName[ i ] = name;\r
-               };\r
-       };\r
        for( name in renameForDOM ){\r
                renameForTag[ renameForDOM[ name ] ] = name;\r
        };\r
-})( X.Dom.Attr.toIndex, X.Dom.Attr.toName, X.Dom.Attr.renameForDOM, X.Dom.Attr.renameForTag );\r
+})( X.Dom.Attr.renameForDOM, X.Dom.Attr.renameForTag );\r
 \r
 \r
 \r
@@ -232,7 +97,7 @@ X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
                        if( this._setAttr( attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;\r
                };\r
                if( f ){\r
-                       delete this._attrText;\r
+                       this._attrText = false;\r
                        this._dirty |= X.Dom.Dirty.ATTR;\r
                        this._root && this._reserveUpdate();                    \r
                };\r
@@ -241,7 +106,7 @@ X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
        if( 1 < arguments.length ){\r
                // setter\r
                if( this._setAttr( attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
-                       delete this._attrText;\r
+                       this._attrText = false;\r
                        this._dirty |= X.Dom.Dirty.ATTR;\r
                        this._root && this._reserveUpdate();\r
                };\r
index 5525535..7e1257f 100644 (file)
@@ -363,7 +363,7 @@ X.Dom._bindElementToXnode =
                                        tag === 'INPUT' && (\r
                                                !xnode._attrs ?\r
                                                        ( xnode._attrs = { type : 'text' } ) :\r
-                                                       !xnode._attrs.type || ( xnode._attrs.type = 'text' )\r
+                                                       xnode._attrs.type || ( xnode._attrs.type = 'text' )\r
                                        );\r
                                        current.flag |= 3;\r
                                        current.xtext = null;\r