OSDN Git Service

Version 0.6.3
[pettanr/clientJs.git] / 0.6.x / js / core / 14_XView.js
1 \r
2 X.View = (function( window, document ){\r
3         var view = X.UA.IE ?\r
4                 ( document.compatMode !== "CSS1Compat" ? document.body : document.documentElement ) : window,\r
5                 lock = 0, w = 0, h = 0,\r
6                 resize, delayResize;\r
7 \r
8 /* -----------------------------------------------\r
9  * Document Ready\r
10  *  Dean Edwards/Matthias Miller/John Resig\r
11  */\r
12         function init(){\r
13                 var s;\r
14                 if( X.View.ready ) return X.Cancel.UN_LISTEN;\r
15                 if( s = init.script ){\r
16                         s.parentNode.removeChild( s );\r
17                         s.onreadystatechange = new Function();\r
18                         s.onreadystatechange = null;\r
19                         delete init.script;\r
20                 };\r
21                 init = void 0;\r
22                 X.View.ready = true;\r
23                 X.View.dispatch( { type : X.ViewEvent.SYS_READY, w : w, h : h } );\r
24                 return X.Cancel.UN_LISTEN;\r
25         };\r
26         /* for ie9+/Mozilla/Opera9 */\r
27         if( document.addEventListener ){\r
28                 X.DomEvent.add( document, 'DOMContentLoaded', init );\r
29         } else\r
30         if( 4 < X.UA.IE ){\r
31                 // if this script in Head\r
32                 document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
33                 init.script = document.getElementById( "__ie_onload" );\r
34                 init.script.onreadystatechange = function(){\r
35                         this.readyState === 'complete' && init();\r
36                 };\r
37         } else\r
38         if( X.UA.WebKit ){ // sniff\r
39                 X.Timer.add( 10, function(){\r
40                         if( !init ) return X.Cancel.UN_LISTEN;\r
41                         if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return init();\r
42                 });\r
43         };\r
44         \r
45         /* for other browsers */\r
46         X.DomEvent.add( window, 'load', init );\r
47 \r
48 /* -----------------------------------------------\r
49  * Resize\r
50  *  uupaa.js\r
51  */\r
52         function unlock(){ lock = 0; };\r
53         \r
54         if( X.UA.IE ){\r
55                 resize = function(){\r
56                         var size, i, l;\r
57                         if( !lock++ ){\r
58                                 size = X.View.getSize();\r
59                                 if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
60                                         w = size[ 0 ];\r
61                                         h = size[ 1 ];\r
62                                         X.View.dispatch( { type : X.ViewEvent.VIEW_RESIZED, w : w, h : h } );\r
63                                 };\r
64                                 X.Timer.once( 1, unlock );// delay unlock\r
65                         };\r
66                 };\r
67         } else {\r
68                 resize = function(){\r
69                         !lock++ && X.Timer.once( 40, delayResize );\r
70                 };\r
71                 delayResize = function(){\r
72                         var size = X.View.getSize(),\r
73                                 i, l;\r
74                         if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
75                                 w = size[ 0 ];\r
76                                 h = size[ 1 ];\r
77                                 X.View.dispatch( { type : X.ViewEvent.VIEW_RESIZED, w : w, h : h } );\r
78                         };\r
79                         X.Timer.once( 1, unlock );\r
80                 };\r
81         };\r
82         \r
83         X.View = X.Class._override( new X.EventDispatcher(),\r
84                 {\r
85                         ready : false,\r
86                         getSize : ( view.innerWidth ?\r
87                                 ( function(){\r
88                                         return [ view.innerWidth, view.innerHeight ];\r
89                                 }) :\r
90                                 ( function(){\r
91                                         return [ view.clientWidth, view.clientHeight ];\r
92                                 })\r
93                         ),\r
94                         /* 要素が視界に入った  http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */\r
95                         inView : function( elm ){\r
96                                 \r
97                         }\r
98                 }\r
99         );\r
100                 \r
101         X.View.listenOnce( X.ViewEvent.SYS_READY, function(){\r
102                 var b, x;\r
103                 if( X.UA.IE ){\r
104                         X.Timer.add( 100, resize );\r
105                         if( X.UA.IE < 9 ){\r
106                                 b = document.body;\r
107                                 b.appendChild( x = document.createElement( 'div' ) );\r
108                                 x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
109                                 b.className += [ b.className === '' ? '' : ' ', 'ActiveX-', 1 < x.offsetHeight ? 'enabled' : 'disabled' ].join( '' );\r
110                                 b.removeChild( x );\r
111                         };\r
112                 } else {\r
113                         X.DomEvent.add( window, 'resize', resize );\r
114                 };\r
115         });\r
116                 \r
117         return X.View;\r
118 })( window, document );\r
119 \r
120 //\r
121 X.View.listen( X.ViewEvent.SYS_READY, function(e){ console.log( 'X.View DomReady ' + X.View.ready ) } );\r
122 \r
123 X.View.listen( X.ViewEvent.VIEW_RESIZED, function(e){ console.log( 'X.View VIEW_RESIZED ' + e.w + 'x' + e.h ) } );\r