6 CREATION_COMPLETE : 3,
\r
9 VIEW_RESIZED : 5, // リサイズイベントのバブルアップは要素のレイアウトマネジャーでキャンセルされることも
\r
10 IN_VIEW : 6, // 要素が視界に入った
\r
20 /* -- Pointing Device Event -- */
\r
21 _START_POINTER : 10,
\r
23 CONTEXT_MENU : 10, // rightclick or longtouch or menukey
\r
25 /* -- ここよりあとははノード上をバブルアップ -- */
\r
26 _NO_BUBLEUP : 10.5,
\r
32 SELECT : 14, // click or tap or enterkey
\r
35 /* -- Pointing Device Event -- */
\r
51 if( window.navigator.msPointerEnabled ){
\r
52 X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'MSPointerDown';
\r
53 X.View.Event.IdToName[ X.View.Event.POINTER_END ] = 'MSPointerUp';
\r
54 X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ] = 'MSPointerMove';
\r
55 X.View.Event.NameToID[ 'MSPointerDown' ] = X.View.Event.POINTER_START;
\r
56 X.View.Event.NameToID[ 'MSPointerUp' ] = X.View.Event.POINTER_END;
\r
57 X.View.Event.NameToID[ 'MSPointerMove' ] = X.View.Event.POINTER_MOVE;
\r
59 if( 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch ){
\r
60 X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'touchstart';
\r
61 X.View.Event.IdToName[ X.View.Event.POINTER_END ] = 'touchend';
\r
62 X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ] = 'touchmove';
\r
63 X.View.Event.NameToID[ 'touchstart' ] = X.View.Event.POINTER_START;
\r
64 X.View.Event.NameToID[ 'touchend' ] = X.View.Event.POINTER_END;
\r
65 X.View.Event.NameToID[ 'touchmove' ] = X.View.Event.POINTER_MOVE;
\r
67 X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'mousedown';
\r
68 X.View.Event.IdToName[ X.View.Event.POINTER_END ] = 'mouseup';
\r
69 X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ] = 'mousemove';
\r
70 X.View.Event.NameToID[ 'mousedown' ] = X.View.Event.POINTER_START;
\r
71 X.View.Event.NameToID[ 'mouseup' ] = X.View.Event.POINTER_END;
\r
72 X.View.Event.NameToID[ 'mousemove' ] = X.View.Event.POINTER_MOVE;
\r
75 X.View = (function( window, document ){
\r
76 var view = X.UA.IE ?
\r
77 ( document.compatMode !== "CSS1Compat" ? document.body : document.documentElement ) : window,
\r
78 lock = 0, w = 0, h = 0,
\r
79 resize, delayResize;
\r
81 /* -----------------------------------------------
\r
85 function unlock(){ lock = 0; };
\r
88 resize = function(){
\r
91 size = X.View.getSize();
\r
92 if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED
\r
95 X.View.dispatch( { type : X.View.Event.VIEW_RESIZED, w : w, h : h } );
\r
97 X.Timer.once( 1, unlock );// delay unlock
\r
101 resize = function(){
\r
102 !lock++ && X.Timer.once( 40, delayResize );
\r
104 delayResize = function(){
\r
105 var size = X.View.getSize(),
\r
107 if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED
\r
110 X.View.dispatch( { type : X.View.Event.VIEW_RESIZED, w : w, h : h } );
\r
112 X.Timer.once( 1, unlock );
\r
116 X.View = X.Class._override( new X.EventDispatcher(),
\r
120 getSize : ( view.innerWidth ?
\r
122 return [ view.innerWidth, view.innerHeight ];
\r
125 return [ view.clientWidth, view.clientHeight ];
\r
128 getPointerPosition : function(){
\r
131 /* 要素が視界に入った http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */
\r
132 inView : function( elm ){
\r
135 _init : function(){
\r
137 if( X.View.ready ) return X.Callback.UN_LISTEN;
\r
138 if( s = X.View._script ){
\r
139 s.parentNode.removeChild( s );
\r
140 s.onreadystatechange = new Function();
\r
141 s.onreadystatechange = null;
\r
142 delete X.View._script;
\r
144 delete X.View._init;
\r
145 X.View.ready = true;
\r
146 X.View.dispatch( { type : X.View.Event.SYS_READY } );
\r
147 return X.Callback.UN_LISTEN;
\r
149 Event : X.View.Event
\r
153 X.View.listenOnce( X.View.Event.SYS_READY, function(){
\r
155 if( X.UA.IE && X.UA.IE < 9 ){
\r
156 X.Timer.add( 100, resize );
\r
158 b.appendChild( x = document.createElement( 'div' ) );
\r
159 x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';
\r
160 b.className += [ b.className === '' ? '' : ' ', 'ActiveX-', 1 < x.offsetHeight ? 'enabled' : 'disabled' ].join( '' );
\r
161 b.removeChild( x );
\r
163 X.DomEvent.add( window, 'resize', resize );
\r
168 })( window, document );
\r
171 /* -----------------------------------------------
\r
173 * Dean Edwards/Matthias Miller/John Resig
\r
175 /* for ie9+/Mozilla/Opera9 */
\r
176 if( document.addEventListener ){
\r
177 X.DomEvent.add( document, 'DOMContentLoaded', X.View._init );
\r
180 // if this script in Head
\r
181 document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );
\r
182 X.View._script = document.getElementById( "__ie_onload" );
\r
183 X.View._script.onreadystatechange = function(){
\r
184 this.readyState === 'complete' && X.View._init();
\r
187 if( X.UA.WebKit ){ // sniff
\r
188 X.Timer.add( 10, function(){
\r
189 if( !X.View._init ) return X.Callback.UN_LISTEN;
\r
190 if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return X.View._init();
\r
194 /* for other browsers */
\r
195 X.DomEvent.add( window, 'load', X.View._init );
\r
198 X.View.listen( X.View.Event.SYS_READY, function(e){ console.log( 'X.View DomReady ' + X.View.ready ) } );
\r
200 X.View.listen( X.View.Event.VIEW_RESIZED, function(e){ console.log( 'X.View VIEW_RESIZED ' + e.w + 'x' + e.h ) } );
\r