OSDN Git Service

Version 0.6.12.
[pettanr/clientJs.git] / 0.6.x / js / dom / 10_XDom.js
1 (function( window, document ){\r
2         var view,\r
3                 lock = 0, w = 0, h = 0,\r
4                 resize, delayResize;\r
5 \r
6 /* -----------------------------------------------\r
7  * Resize\r
8  *  uupaa.js\r
9  */\r
10         function unlock(){ lock = 0; };\r
11         \r
12         if( X.UA.IE ){\r
13                 resize = function(){\r
14                         var size, i, l;\r
15                         if( !lock++ ){\r
16                                 size = X.Dom.getSize();\r
17                                 if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
18                                         w = size[ 0 ];\r
19                                         h = size[ 1 ];\r
20                                         X.Dom.dispatch( { type : X.Dom.Event.VIEW_RESIZED, w : w, h : h } );\r
21                                 };\r
22                                 X.Timer.once( 1, unlock );// delay unlock\r
23                         };\r
24                 };\r
25         } else {\r
26                 resize = function( e ){\r
27                         !lock++ && X.Timer.once( 40, delayResize );\r
28                         e.stopPropagation && e.stopPropagation();\r
29                         e.preventDefault && e.preventDefault();\r
30                         return false;\r
31                 };\r
32                 delayResize = function(){\r
33                         var size = X.Dom.getSize(),\r
34                                 i, l;\r
35                         if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
36                                 w = size[ 0 ];\r
37                                 h = size[ 1 ];\r
38                                 X.Dom.dispatch( { type : X.Dom.Event.VIEW_RESIZED, w : w, h : h } );\r
39                         };\r
40                         X.Timer.once( 1, unlock );\r
41                 };\r
42         };\r
43         \r
44         X.Dom = X.Class._override(\r
45                 new X.EventDispatcher(),\r
46                 {\r
47                         ready : false,\r
48                         getPointerPosition : function(){\r
49                                 \r
50                         },\r
51                         /* 要素が視界に入った  http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */\r
52                         inView : function( elm ){\r
53                                 \r
54                         },\r
55                         _init : function(){\r
56                                 var s, size, b, x;\r
57                                 if( X.Dom.ready ) return X.Callback.UN_LISTEN;\r
58                                 if( s = X.Dom._script ){\r
59                                         s.parentNode.removeChild( s );\r
60                                         s.onreadystatechange = X.emptyFunction;\r
61                                         s.onreadystatechange = null;\r
62                                         delete X.Dom._script;\r
63                                 };\r
64                                 delete X.Dom._init;\r
65                                 X.Dom.ready = true;\r
66                                 \r
67                                 /* if( X.UA.IE ) */ X.Dom._view = ( document.compatMode !== "CSS1Compat" ? document.body : document.documentElement );\r
68                                 size = X.Dom.getSize();\r
69                                 \r
70                                 X.Dom.dispatch( { type : X.Dom.Event.DOM_PREINIT, w : size[ 0 ], h : size[ 1 ] } );\r
71                                 \r
72                                 X.Dom.dispatch( { type : X.Dom.Event.INIT, w : size[ 0 ], h : size[ 1 ] } );\r
73                                 \r
74                                 if( X.UA.IE && X.UA.IE < 9 ){\r
75                                         X.Timer.add( 100, resize );\r
76                                         if( 5 <= X.UA.IE ){\r
77                                                 b = document.body;\r
78                                                 b.appendChild( x = document.createElement( 'div' ) );\r
79                                                 x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
80                                                 b.className += [ b.className === '' ? '' : ' ', 'ActiveX-', 1 < x.offsetHeight ? 'enabled' : 'disabled' ].join( '' );\r
81                                                 b.removeChild( x );                             \r
82                                         };\r
83                                 } else {\r
84                                         X.Dom.Event.add( window, 'resize', resize );\r
85                                 };                              \r
86                                 \r
87                                 //X.Timer.once( 0, X.Dom, X.Dom.dispatch, [ { type : X.Dom.Event.XDOM_READY, w : size[ 0 ], h : size[ 1 ] } ] );\r
88                                 X.Dom.dispatch( { type : X.Dom.Event.XDOM_READY, w : size[ 0 ], h : size[ 1 ] } );\r
89                                 return X.Callback.UN_LISTEN;\r
90                         },\r
91                         // _view : null, for ie\r
92                         getSize :\r
93                                 X.UA.IE ?\r
94                                         new Function( 'return [ X.Dom._view.clientWidth, X.Dom._view.clientHeight ]' ) :\r
95                                         new Function( 'return [ window.innerWidth, window.innerHeight ]' ),\r
96                         getScrollPosition :\r
97                                 window.pageXOffset !== undefined ?\r
98                                         new Function( 'return [window.pageXOffset,window.pageYOffset]' ) :\r
99                                 window.scrollLeft  !== undefined ?\r
100                                         new Function( 'return [window.scrollLeft,window.scrollTop]') :\r
101                                         new Function( 'return [X.Dom._view.scrollLeft,X.Dom._view.scrollTop]' ),\r
102                         getDocumentSize : function(){\r
103                                 return [\r
104                                         X.Dom._view.scrollWidth  || X.Dom._view.offsetWidth,\r
105                                         X.Dom._view.scrollHeight || X.Dom._view.offsetHeight\r
106                                 ];\r
107                         }\r
108                 }\r
109         );\r
110 \r
111 })( window, document );\r
112 \r
113 X.Dom.Dirty = {\r
114         CLEAN             :  0,\r
115         PAINT             :  1, // 再描画のみ必要\r
116         LAYOUT            :  2, // レイアウト(ボックスサイズ)の再計算が必要\r
117         UPDATE_FONT       :  4, // フォントサイズが変更された\r
118         UPDATE_CONTENT    :  8, // コンテンツが変更された\r
119         UPDATE_TAG        : 16\r
120 };\r
121 \r
122 \r
123 \r
124 \r