OSDN Git Service

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