OSDN Git Service

version 0.6.2
authoritozyun <itozyun@user.sourceforge.jp>
Wed, 24 Jul 2013 22:13:17 +0000 (07:13 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Wed, 24 Jul 2013 22:13:17 +0000 (07:13 +0900)
0.6.x/js/core/03_XCancel.js
0.6.x/js/core/05_XClass.js
0.6.x/js/core/06_XTimer.js
0.6.x/js/core/07_XEventDispatcher.js
0.6.x/js/core/12_XDomEvent.js
0.6.x/js/core/13_XViewEvent.js
0.6.x/js/core/14_XView.js

index be8bc6c..872fb55 100644 (file)
@@ -1,7 +1,26 @@
 X.Cancel = {\r
-       UN_LISTEN       : 1,\r
-       CANCEL_BUBBLEUP : 2, // 上位階層への伝播のキャンセル\r
-       CANCEL_NEXT     : 4, // 同一階層のリスナーのキャンセル\r
-       CANCEL_DEFAULT  : 8,  // 結果動作のキャンセル,\r
-       SYS_CANCEL      : 16\r
+       NONE             :  0,\r
+       UN_LISTEN        :  1,\r
+       STOP_PROPAGATION :  2,  // 上位階層への伝播のキャンセル\r
+       CANCEL_NOW       :  4,  // 同一階層のリスナーのキャンセル\r
+       PREVENT_DEFAULT  :  8,  // 結果動作のキャンセル,\r
+       MONOPOLY         : 16,  // move event を独占する\r
+       SYS_CANCEL       : 32\r
 };\r
+\r
+/*             \r
+isDefaultPrevented():Boolean\r
+イベントで preventDefault() メソッドが呼び出されたかどうかを確認します。\r
+       Event\r
+               \r
+preventDefault():void\r
+イベントのデフォルト動作をキャンセルできる場合に、その動作をキャンセルします。\r
+       Event\r
+               \r
+stopImmediatePropagation():void\r
+イベントフローの現在のノードおよび後続するノードで、イベントリスナーが処理されないようにします。\r
+       Event\r
+               \r
+stopPropagation():void\r
+イベントフローの現在のノードに後続するノードで、イベントリスナーが処理されないようにします。\r
+*/
\ No newline at end of file
index 9dcfbd4..5c149cf 100644 (file)
@@ -67,7 +67,7 @@ X.Class = ( function(){
                Super.__new = null;\r
                traits = new Super();\r
                Super.__new = C;\r
-               klass  = X.Class.create.apply( X.Class, params );\r
+               klass  = X.Class.create.apply( null, params );\r
                traits = null;\r
                if( opt_super === true ){\r
                        def = X.Class._getClassDef( klass );\r
index c8a2185..d685032 100644 (file)
@@ -19,25 +19,21 @@ X.Timer = ( function(){
                var i    = 0,\r
                        c    = next,\r
                        list = TICKET_LIST,\r
-                       queue, callback;\r
-           for( ; i < list.length; ){\r
-               queue = list[ i ];\r
-                       if( 0 < ( queue[ INDEX_LAST ] -= c ) ){\r
-                               ++i;\r
-                               continue;\r
-                       };\r
-                       callback = queue[ INDEX_CALLBACK ];\r
-                       c        = queue[ INDEX_COUNT ];\r
-                       if( callback() === false || c === 1 ){\r
+                       i    = list.length,\r
+                       queue, f, ret;\r
+           for( ; i; ){\r
+               queue = list[ --i ];\r
+                       if( 0 < ( queue[ INDEX_LAST ] -= c ) ) continue;\r
+                       f   = queue[ INDEX_CALLBACK ];\r
+                       c   = queue[ INDEX_COUNT ];\r
+                       ret = f();\r
+                       if( ret === false || ret === X.Cancel.UN_LISTEN || c === 1 ){\r
                                list.splice( i, 1 );\r
-                               callback.kill();\r
+                               f.kill();\r
                                queue.length = 0;\r
                                continue;\r
                        } else\r
-                       if( 1 < c ){\r
-                               --queue[ INDEX_COUNT ];\r
-                       };\r
-                       ++i;\r
+                       if( 1 < c ) --queue[ INDEX_COUNT ];\r
                        queue[ INDEX_LAST ] = queue[ INDEX_TIME ];\r
            };\r
            timerId = -1;\r
@@ -45,16 +41,16 @@ X.Timer = ( function(){
        };\r
        function update(){\r
                var list = TICKET_LIST,\r
-                       l    = list.length,\r
+                       i    = list.length,\r
                        n    = 99999999,\r
                        last;\r
-               if( l === 0 ){\r
+               if( i === 0 ){\r
                        timerId !== -1 && clearTimeout( timerId );\r
                        timerId = -1;\r
                        return;\r
                };\r
-           for( ; l; ){\r
-               last = list[ --l ][ INDEX_LAST ];\r
+           for( ; i; ){\r
+               last = list[ --i ][ INDEX_LAST ];\r
                if( last < n ) n = last;\r
            };\r
            if( n < next || timerId === -1 ){\r
@@ -65,29 +61,17 @@ X.Timer = ( function(){
        };\r
        \r
        return {\r
-               add : function( time, count, args1, args2, args3 ){\r
-                       if( time < INTERVAL_TIME ) time = INTERVAL_TIME;\r
-                       time = Math.floor( time / INTERVAL_TIME );\r
-                       var callback,\r
-                               list     = TICKET_LIST,\r
-                               l        = list.length,\r
-                               i        = l,\r
-                               queue, args;\r
-                       if( typeof count !== 'number' || count < 0 ){\r
-                               count = 0;\r
+               add : function( time, opt_count, args1, args2, args3 ){\r
+                       time = time < INTERVAL_TIME ? 1 : ( time / INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
+\r
+                       if( typeof opt_count !== 'number' ){\r
+                               args3 = args2;\r
+                               args2 = args1;\r
+                               args1 = opt_count;\r
+                               opt_count = 0;\r
                        };\r
-                       /*\r
-                       for( ; i; ){\r
-                               queue = list[ --i ];\r
-                               if( queue[ INDEX_CALLBACK ].same( args1, args2 ) === true ){\r
-                                       queue[ INDEX_TIME  ] = queue[ INDEX_LAST ] = time;\r
-                                       queue[ INDEX_COUNT ] = count;\r
-                                       update();\r
-                                       return;\r
-                               };\r
-                       }; */           \r
 \r
-                       list[ l ] = [ time, time, count, X.Callback.create( args1, args2, args3 ) ];\r
+                       TICKET_LIST[ TICKET_LIST.length ] = [ time, time, opt_count, X.Callback.create( args1, args2, args3 ) ];\r
                    update();\r
                },\r
                once : function( time, args1, args2, args3 ){\r
index 9bcd66b..df04d6f 100644 (file)
@@ -8,6 +8,9 @@ X.EventDispatcher = ( function(){
                        if( !create ) return;\r
                        LIST[ LIST.length ] = instance;\r
                        TEMP[ TEMP.length ] = data = {};\r
+                       if( window[ 'AbstractDisplayNode' ] && instance instanceof window[ 'AbstractDisplayNode' ] ){\r
+                               X.Class._getPrivate( instance ).events = data;\r
+                       };\r
                } else {\r
                        data = TEMP[ i ];\r
                };\r
@@ -30,24 +33,31 @@ X.EventDispatcher = ( function(){
                {\r
                        listen : function( type, arg1, arg2 ){\r
                                var list = getList( this, type, true );\r
-                               if( list.length && exist( list, arg1, arg2 ) !== -1 ) return;\r
+                               if( list.length && exist( list, arg1, arg2 ) !== -1 ) return this;\r
                                list[ list.length ] = X.Callback[ once === true ? 'once' : 'create' ]( arg1, arg2 );\r
+                               return this;\r
                        },\r
                        listenOnce : function( type, arg1, arg2 ){\r
                                once = true;\r
-                               this.listen( type, arg1, arg2 );\r
+                               //this.listen( type, arg1, arg2 );\r
+                               X.EventDispatcher.prototype.listen.call( this, type, arg1, arg2 );\r
                                once = false;\r
+                               return this;\r
                        },\r
                        unlisten : function( type, arg1, arg2 ){\r
                                var list = getList( this, type ),\r
                                        list, i;\r
-                               if( !list ) return;\r
+                               if( !list ) return this;\r
                                i = exist( list, arg1, arg2 );\r
-                               i !== -1 && list.splice( i, 1 );\r
-                               if( list.length === 0 ){\r
-                                       list.data[ e.type ] = void 0;\r
-                                       delete list.data;\r
+                               if( i !== -1 ){\r
+                                       list[ i ].kill();\r
+                                       list.splice( i, 1 );\r
+                                       if( list.length === 0 ){\r
+                                               list.data[ e.type ] = void 0;\r
+                                               delete list.data;\r
+                                       };\r
                                };\r
+                               return this;\r
                        },\r
                        listening : function( type, arg1, arg2 ){\r
                                var list = getList( this, type );\r
@@ -56,29 +66,35 @@ X.EventDispatcher = ( function(){
                        },\r
                        dispatch : function( e ){\r
                                // dispatch 中の listen は?\r
-                               // \r
-                               \r
                                var list = getList( this, e.type ),\r
-                                       i, f;\r
+                                       i, f, ret, sysOnly, _ret;\r
                                if( !list ) return;\r
                                for( i = list.length; i; ){\r
                                        f = list[ --i ];\r
                                        // once の場合リストから削除してからファイア\r
-                                       f.once === true && list.splice( i, 1 );\r
-                                       if( f( e ) === false ){\r
-                                               \r
+                                       if( f.once === true ){\r
+                                               list.splice( i, 1 );\r
+                                               ret = f( e );\r
+                                       } else {\r
+                                               ret = f( e );\r
+                                               if( ret === false || ret & X.Cancel.UN_LISTEN ){\r
+                                                       list.splice( i, 1 );\r
+                                                       f.kill();\r
+                                               };\r
                                        };\r
                                        if( list.length === 0 ){\r
                                                list.data[ e.type ] = void 0;\r
                                                delete list.data;\r
                                        };\r
+                                       if( ret & X.Cancel.STOP_NOW ){\r
+                                               sysOnly = true;\r
+                                       };\r
+                                       _ret |= ret;\r
                                };\r
-                               return;\r
+                               return _ret;\r
                        }\r
                }//, onKillCallback( instance )\r
        );\r
 })();\r
 \r
 \r
-\r
-\r
index 6585f47..7ce6d3d 100644 (file)
@@ -4,9 +4,6 @@
 var X = X || {};
 
 X.DomEvent = {
-       _load   : false,
-       _ready  : false,
-       _unload : false,
        add :
                document.addEventListener ?
                        (function( element, type, arg2, arg3, arg4 /* [ listener || ( context + function ) || function ][ arguments ] */ ){
@@ -32,7 +29,7 @@ X.DomEvent = {
                                element.attachEvent( 'on' + type, callback );
                        }) :
                        (function( element, type, arg2, arg3, arg4 /* [ listener || ( context + function ) || function ][ arguments ] */ ){
-                               var callback;
+                               var callback, dom0, helper, list;
                                if( typeof arg2 === 'function' ){
                                        callback = X.Callback.create( element, arg2, arg3 );
                                } else {
@@ -42,11 +39,13 @@ X.DomEvent = {
                                        callback.c   = X.DomEvent._callback; // override
                                        return;
                                };
-                               helper = X.DomEvent.Dom0.find( element, type, callback );
+                               dom0 = X.DomEvent.Dom0;
+                               helper = dom0.find( element, type );
                                if( helper ){
-                                       if( helper.list.indexOf( callback ) === -1 ) helper.list[ helper.list.length ] = callback;
+                                       list = helper.list;
+                                       if( list.indexOf( callback ) === -1 ) list[ list.length ] = callback;
                                } else {
-                                       new X.DomEvent.Dom0.Helper( element, type, callback );
+                                       dom0.LIST[ dom0.LIST.length ] = new dom0.Helper( element, type, callback );
                                };
                        }),
        remove :
@@ -67,8 +66,9 @@ X.DomEvent = {
                                };
                        }) :
                        (function( element, type, arg2, arg3 ){
-                               var t = X.DomEvent.Dom0.find( element, type ),
-                                       c = X.Callback.find( arg2, arg3 ),
+                               var dom0 = X.DomEvent.Dom0,
+                                       t    = dom0.find( element, type ),
+                                       c    = X.Callback.find( arg2, arg3 ),
                                        i;
                                if( t && c ){
                                        i = t.list.indexOf( c );
@@ -77,11 +77,11 @@ X.DomEvent = {
                                                X.Callback._correct( c );
                                        };
                                        if( t.list.length === 0 ){
-                                               t.elm[ 'on' + t.type ] = X.DomEvent.Dom0.emptyFunc;
+                                               t.elm[ 'on' + t.type ] = dom0.emptyFunc;
                                                t.elm[ 'on' + t.type ] = '';
                                                c = X.Callback.find( t );
                                                X.Callback._correct( c );
-                                               X.DomEvent.Dom0.LIST.splice( X.DomEvent.Dom0.LIST.indexOf( t ), 1 );
+                                               dom0.LIST.splice( dom0.LIST.indexOf( t ), 1 );
                                                delete t.elm;
                                                delete t.type;
                                                delete t.list;
@@ -90,14 +90,26 @@ X.DomEvent = {
                        }),
        _callback :
                window.addEventListener ?
-                       (function( event ){
+                       (function(){
                                var f = this,
-                                       r = f.callback.call( f.context, event );
+                                       e = f.a[ 0 ],
+                                       r = f.callback.call( f.context, new X.DomEvent.xEvent( e ) );
                                if( r !== false ) return r;
-                               event.preventDefault();
-                               event.stopPropagation();
+                               e.preventDefault();
+                               e.stopPropagation();
                                return false;
-                       }) :            
+                       }) :
+               document.attachEvent ?
+                       (function(){
+                               var f = this,
+                                       e = window.event,
+                                       x = f.context,
+                                       r = f.callback.call( x, new X.DomEvent.xEvent( e, f.e ));
+                               if( r !== false ) return r;
+                               e.cancelBubble = true;
+                               e.returnValue  = false;
+                               return r;
+                       }) :
                        (function(){
                                var f = this,
                                        e = window.event,
@@ -109,7 +121,28 @@ X.DomEvent = {
                                return r;
                        })
 };
-if( !window.addEventListener ){
+if( window.addEventListener ){
+       X.DomEvent.xEvent = function( e ){
+               this._event        = e;
+               this.type          = e.type;
+               this.target        = e.target;
+               this.currentTarget = e.currentTarget;
+               this.relatedTarget = e.relatedTarget;
+               this.eventPhase    = e.eventPhase;
+               
+               this.clientX       = e.clientX;
+               this.clientY       = e.clientY;
+               this.screenX       = e.screenX;
+               this.screenY       = e.screenY;
+               
+               this.keyCode       = e.keyCode;
+               this.altKey        = e.altKey;
+               this.ctrlKey       = e.ctrlKey;
+               this.shiftKey      = e.shiftKey;
+               
+               this.wheelDelta    = e.wheelDelta;
+       };
+} else {
        X.DomEvent.xEvent = function( e, element ){
                this._event        = e;
                this.type          = e.type;
@@ -143,16 +176,14 @@ if( !document.addEventListener && !document.attachEvent ){
                                helper = list[ --i ];
                                if( helper.elm === element && helper.type === type ) return helper;
                        };
-                       return null;
                },
                Helper : function( elm, type, callback ){
                        this.elm  = elm;
                        this.type = type;
                        this.list = [ callback ];
                        
-                       var callback = elm[ 'on' + type ] = X.DomEvent.create( this );
-                       callback.c   = X.DomEvent._callback; // override
-                       X.DomEvent.Dom0.LIST[ X.DomEvent.Dom0.LIST.length ] = this;
+                       callback   = elm[ 'on' + type ] = X.Callback.create( this );
+                       callback.c = X.DomEvent._callback; // override
                }
        };
        X.DomEvent.Dom0.Helper.prototype.handleEvent = function(e){
index a71a1fa..46f86bc 100644 (file)
@@ -5,14 +5,68 @@ X.ViewEvent = {
        CREATION_COMPLETE : 3,\r
        REMOVED           : 4,\r
        \r
-       VIEW_RESIZED      : 7, // リサイズイベントのバブルアップは要素のレイアウトマネジャーでキャンセルされることも\r
-       IN_VIEW     : 8, // 要素が視界に入った\r
-       OUT_VIEW    : 9,\r
+       VIEW_RESIZED      : 5, // リサイズイベントのバブルアップは要素のレイアウトマネジャーでキャンセルされることも\r
+       IN_VIEW           : 6, // 要素が視界に入った\r
+       OUT_VIEW          : 7,\r
        \r
-       _NO_BUBLEUP : 10 //-- ここ以上はノード上をバブルアップ\r
+       POINTER_OUT       : 8,\r
+       POINTER_IN        : 9,\r
        \r
-       // USER_CLICK\r
-       // USER_MOVE\r
-       // USER_KEYDOWN\r
-       // USER_KEYUP\r
+       // FOCUS\r
+       // DISABLED\r
+       // ENABLED\r
+\r
+/* -- Pointing Device Event -- */\r
+       _START_POINTER    : 10,\r
+       \r
+       CONTEXT_MENU      : 10, // rightclick or longtouch or menukey\r
+       \r
+/* -- ここよりあとははノード上をバブルアップ        -- */\r
+       _NO_BUBLEUP       : 10.5,               \r
+       //\r
+       POINTER_START     : 11,\r
+       POINTER_END       : 12,\r
+       POINTER_MOVE      : 13,\r
+       \r
+       SELECT            : 14, // click or tap or enterkey\r
+       FILE_DRAG         : 15,\r
+       \r
+/* -- Pointing Device Event -- */\r
+       _END_POINTER      : 15,\r
+       \r
+       KEY_DOWN          : 16,\r
+       KEY_UP            : 17,\r
+       \r
+       SCROLL            : 18,\r
+\r
+       CHANGE            : 19,\r
+       SUBMIT            : 20,\r
+       \r
+       IdToName : {},\r
+       NameToID : {}\r
+};\r
+\r
+if( window.navigator.msPointerEnabled ){\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_START ] = 'MSPointerDown';\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_END   ] = 'MSPointerUp';\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE  ] = 'MSPointerMove';\r
+       X.ViewEvent.NameToID[ 'MSPointerDown' ] = X.ViewEvent.POINTER_START;\r
+       X.ViewEvent.NameToID[ 'MSPointerUp'   ] = X.ViewEvent.POINTER_END;\r
+       X.ViewEvent.NameToID[ 'MSPointerMove' ] = X.ViewEvent.POINTER_MOVE;\r
+} else\r
+if( ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch ){\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_START ] = 'touchstart';\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_END   ] = 'touchend';\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE  ] = 'touchmove';\r
+       X.ViewEvent.NameToID[ 'touchstart' ] = X.ViewEvent.POINTER_START;\r
+       X.ViewEvent.NameToID[ 'touchend'   ] = X.ViewEvent.POINTER_END;\r
+       X.ViewEvent.NameToID[ 'touchmove'  ] = X.ViewEvent.POINTER_MOVE;\r
+} else {\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_START ] = 'mousedown';\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_END   ] = 'mouseup';\r
+       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE  ] = 'mousemove';\r
+       X.ViewEvent.NameToID[ 'mousedown' ] = X.ViewEvent.POINTER_START;\r
+       X.ViewEvent.NameToID[ 'mouseup'   ] = X.ViewEvent.POINTER_END;\r
+       X.ViewEvent.NameToID[ 'mousemove' ] = X.ViewEvent.POINTER_MOVE;\r
 };\r
+\r
index 1d61b79..ce90604 100644 (file)
@@ -3,42 +3,44 @@ X.View = (function( window, document ){
        var view = X.UA.IE ?\r
                ( document.compatMode !== "CSS1Compat" ? document.body : document.documentElement ) : window,\r
                lock = 0, w = 0, h = 0,\r
-               resize, delayResize, _timer;\r
+               resize, delayResize;\r
 \r
 /* -----------------------------------------------\r
  * Document Ready\r
  *  Dean Edwards/Matthias Miller/John Resig\r
  */\r
        function init(){\r
-               if( _timer ){\r
-                       clearInterval( _timer );\r
-                       _timer = void 0;\r
+               var s;\r
+               if( X.View.ready ) return X.Cancel.UN_LISTEN;\r
+               if( s = init.script ){\r
+                       s.parentNode.removeChild( s );\r
+                       s.onreadystatechange = new Function();\r
+                       s.onreadystatechange = null;\r
+                       delete init.script;\r
                };\r
-               if( X.View.ready ) return;\r
+               init = void 0;\r
                X.View.ready = true;\r
                X.View.dispatch( { type : X.ViewEvent.SYS_READY, w : w, h : h } );\r
+               return X.Cancel.UN_LISTEN;\r
        };\r
-       /* for Mozilla/Opera9 */\r
+       /* for ie9+/Mozilla/Opera9 */\r
        if( document.addEventListener ){\r
-               document.addEventListener( "DOMContentLoaded", init, false );\r
-       };\r
+               X.DomEvent.add( document, 'DOMContentLoaded', init );\r
+               // document.addEventListener( "DOMContentLoaded", init, false );\r
+       } else\r
        if( 4 < X.UA.IE ){\r
+               // if this script in Head\r
                document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
-               var _script = document.getElementById( "__ie_onload" );\r
-               _script.onreadystatechange = function(){\r
-                       if( this.readyState == "complete" ){\r
-                               this.parentNode.removeElement( this );\r
-                               this.onreadystatechange = new Function();\r
-                               this.onreadystatechange = null;\r
-                               _script = void 0;\r
-                               init();\r
-                       };\r
-               };      \r
-       };\r
+               init.script = document.getElementById( "__ie_onload" );\r
+               init.script.onreadystatechange = function(){\r
+                       this.readyState === 'complete' && init();\r
+               };\r
+       } else\r
        if( X.UA.WebKit ){ // sniff\r
-               _timer = setInterval( function(){\r
-                       if( /loaded|complete/.test( document.readyState ) ) init();\r
-               }, 10);\r
+               X.Timer.add( 10, function(){\r
+                       if( !init ) return X.Cancel.UN_LISTEN;\r
+                       if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return init();\r
+               });\r
        };\r
        \r
        /* for other browsers */\r
@@ -46,7 +48,7 @@ X.View = (function( window, document ){
 \r
 /* -----------------------------------------------\r
  * Resize\r
- *  uupaa\r
+ *  uupaa.js\r
  */\r
        function unlock(){ lock = 0; };\r
        \r
@@ -99,7 +101,7 @@ X.View = (function( window, document ){
                \r
        X.View.listenOnce( X.ViewEvent.SYS_READY, function(){\r
                if( X.UA.IE ){\r
-                       X.Timer.add( 100, 0, resize );\r
+                       X.Timer.add( 100, resize );\r
                } else {\r
                        X.DomEvent.add( window, 'resize', resize );\r
                };\r