OSDN Git Service

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