OSDN Git Service

version 0.6.2
[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                 // document.addEventListener( "DOMContentLoaded", init, false );\r
30         } else\r
31         if( 4 < X.UA.IE ){\r
32                 // if this script in Head\r
33                 document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
34                 init.script = document.getElementById( "__ie_onload" );\r
35                 init.script.onreadystatechange = function(){\r
36                         this.readyState === 'complete' && init();\r
37                 };\r
38         } else\r
39         if( X.UA.WebKit ){ // sniff\r
40                 X.Timer.add( 10, function(){\r
41                         if( !init ) return X.Cancel.UN_LISTEN;\r
42                         if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return init();\r
43                 });\r
44         };\r
45         \r
46         /* for other browsers */\r
47         X.DomEvent.add( window, 'load', init );\r
48 \r
49 /* -----------------------------------------------\r
50  * Resize\r
51  *  uupaa.js\r
52  */\r
53         function unlock(){ lock = 0; };\r
54         \r
55         if( X.UA.IE ){\r
56                 resize = function(){\r
57                         var size, i, l;\r
58                         if( !lock++ ){\r
59                                 size = X.View.getSize();\r
60                                 if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
61                                         w = size[ 0 ];\r
62                                         h = size[ 1 ];\r
63                                         X.View.dispatch( { type : X.ViewEvent.VIEW_RESIZED, w : w, h : h } );\r
64                                 };\r
65                                 X.Timer.once( 1, unlock );// delay unlock\r
66                         };\r
67                 };\r
68         } else {\r
69                 resize = function(){\r
70                         !lock++ && X.Timer.once( 40, delayResize );\r
71                 };\r
72                 delayResize = function(){\r
73                         var size = X.View.getSize(),\r
74                                 i, l;\r
75                         if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
76                                 w = size[ 0 ];\r
77                                 h = size[ 1 ];\r
78                                 X.View.dispatch( { type : X.ViewEvent.VIEW_RESIZED, w : w, h : h } );\r
79                         };\r
80                         X.Timer.once( 1, unlock );\r
81                 };\r
82         };\r
83         \r
84         X.View = X.Class._override( new X.EventDispatcher(),\r
85                 {\r
86                         ready : false,\r
87                         getSize : ( view.innerWidth ?\r
88                                 ( function(){\r
89                                         return [ view.innerWidth, view.innerHeight ];\r
90                                 }) :\r
91                                 ( function(){\r
92                                         return [ view.clientWidth, view.clientHeight ];\r
93                                 })\r
94                         ),\r
95                         /* 要素が視界に入った  http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */\r
96                         inView : function( elm ){\r
97                                 \r
98                         }\r
99                 }\r
100         );\r
101                 \r
102         X.View.listenOnce( X.ViewEvent.SYS_READY, function(){\r
103                 if( X.UA.IE ){\r
104                         X.Timer.add( 100, resize );\r
105                 } else {\r
106                         X.DomEvent.add( window, 'resize', resize );\r
107                 };\r
108         });\r
109                 \r
110         return X.View;\r
111 })( window, document );\r
112 \r
113 //\r
114 X.View.listen( X.ViewEvent.SYS_READY, function(e){ console.log( 'X.View DomReady ' + X.View.ready ) } );\r
115 \r
116 X.View.listen( X.ViewEvent.VIEW_RESIZED, function(e){ console.log( 'X.View VIEW_RESIZED ' + e.w + 'x' + e.h ) } );\r