X_ViewPort_width,
X_ViewPort_height,
X_ViewPort_baseFontSize,
+ X_ViewPort_vScrollbarSize,
+ X_ViewPort_hScrollbarSize,
- X_Dom_detectFontSize = !( X.UA.IE < 9 || X.UA.iOS ) && function(){
- var size = Node._fontSizeNode._rawObject.offsetHeight;
+ X_Dom_detectFontSize = !( X_UA.IE < 9 || X_UA.iOS ) && function(){
+ var size = X_Node_fontSizeNode._rawObject.offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( { type : X.Event.BASE_FONT_RESIZED, fontSize : size, w : X_ViewPort_width, h : X_ViewPort_height } );
X_ViewPort_baseFontSize = size;
X_ViewPort_orientationFlag,
X_Dom_orientationchange = window[ 'orientation' ] !== undefined && function( e ){
X_ViewPort_orientationFlag = true;
- !X.UA.Android && X_ViewPort_resize();
+ !X_UA.Android && X_ViewPort_resize();
//console.log( '-- orientationchange : ' + X.ViewPort.getSize[ 0 ] + ' ' + X.ViewPort.getSize[ 1 ] );
},
X_ViewPort_document = new X.EventDispatcher( document ),
-X_ViewPort = X.Class._override(
+X_ViewPort = X_Class_override(
new X.EventDispatcher( window ),
{
X_ViewPort.unlisten();
X_ViewPort_document.unlisten();
- Node._html._actualRemove( true );
+ X_Node__actualRemove( X_Node_html, true );
break;
case 'visibilitychange' :
X_ViewPort.dispatch( { type : ( X_ViewPort_active = document[ 'hidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE } );
//http://onozaty.hatenablog.com/entry/20060803/p1
// Safari2.0.4では標準・互換どちらも document.body
- Node._body._updateTimerID && Node._body._startUpdate();
- /*X.UA.Opera ?
+ X_Node_body._updateTimerID && X_Node_startUpdate();
+ /*X_UA.Opera ?
( document.documentElement && document.documentElement.clientWidth ?
new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :
new Function( 'return[document.body.clientWidth,document.body.clientHeight]' )
getScrollPosition :
window.pageXOffset !== undefined ?
( function(){
- Node._body._updateTimerID && Node._body._startUpdate();
+ X_Node_body._updateTimerID && X_Node_startUpdate();
return[ window.pageXOffset, window.pageYOffset ];
} ) :
window.scrollLeft !== undefined ?
( function(){
- Node._body._updateTimerID && Node._body._startUpdate();
+ X_Node_body._updateTimerID && X_Node_startUpdate();
return[ window.scrollLeft, window.scrollTop ];
} ) :
( function(){
- Node._body._updateTimerID && Node._body._startUpdate();
+ X_Node_body._updateTimerID && X_Node_startUpdate();
// body は Safari2-
return[ X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
} ),
getScrollbarSize : function(){
- return [ X.Dom.BoxModel.vScrollbarSize, X.Dom.BoxModel.hScrollbarSize ];
+ return [ X_ViewPort_vScrollbarSize, X_ViewPort_hScrollbarSize ];
},
getBaseFontSize : function(){
- if( Node._body._updateTimerID ){
- Node._body._startUpdate();
- return X_ViewPort_baseFontSize = Node._fontSizeNode._rawObject.offsetHeight;
+ if( X_Node_body._updateTimerID ){
+ X_Node_startUpdate();
+ return X_ViewPort_baseFontSize = X_Node_fontSizeNode._rawObject.offsetHeight;
};
return X_ViewPort_baseFontSize;
}
*/
var X_ViewPort_resize =
// iOS もループで回す,,,iOS3.1.3, iOS6 で確認
- X.UA.IE < 9 || X.UA.iOS ?
+ X_UA.IE < 9 || X_UA.iOS ?
(function(){
var size;
if( !X_ViewPort_lock ){
};
};
- size = Node._fontSizeNode._rawObject.offsetHeight;
+ size = X_Node_fontSizeNode._rawObject.offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( { type : X.Event.BASE_FONT_RESIZED, fontSize : size, w : X_ViewPort_width, h : X_ViewPort_height } );
X_ViewPort_baseFontSize = size;
X_ViewPort_rootElement = document.compatMode !== 'CSS1Compat' ? elmBody : elmHtml || elmBody;
- html = Node._html = elmHtml && new Node( elmHtml );
+ html = X.Doc.html = X_Node_html = elmHtml && new Node( elmHtml );
- head = Node._head = elmHead && new Node( elmHead );
+ head = X.Doc.head = X_Node_head = elmHead && new Node( elmHead );
- body = Node._body = new Node( elmBody );
+ body = X.Doc.body = X_Node_body = new Node( elmBody );
body._root = html._root = head._root = body;// _root は html だろ
body.parent = head.parent = html;
X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_XTREE, function(){
X_ViewPort_readyState = X_TEMP.SYSTEM_EVENT_INIT;
- //X.UA.Opera7 && alert( 'bc' );
- Node._body.appendAt( 0,
- Node._systemNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ),
- Node._fontSizeNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ).cssText( 'line-height:1;height:1em;' ).text( 'X' )
- )._startUpdate();
+ //X_UA.Opera7 && alert( 'bc' );
+ X_Node_body.appendAt( 0,
+ X_Node_systemNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ),
+ X_Node_fontSizeNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ).cssText( 'line-height:1;height:1em;' ).text( 'X' )
+ );
+ X_Node_startUpdate();
X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_INIT );
} );
X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){
- var size = X_ViewPort_getWindowSize();
+ var size = X_ViewPort_getWindowSize(),
+ // http://jsdo.it/imaya/kTYg
+ body = document.body,
+ defaultOverflow = document.body.style.overflow,
+ w, h;
+
+ body.style.overflow = 'hidden';
+ w = body.clientWidth;
+ h = body.clientHeight;
+
+ body.style.overflow = 'scroll';
+ w -= body.clientWidth;
+ h -= body.clientHeight;
+
+ if( !w ) w = body.offsetWidth - body.clientWidth;
+ if( !h ) h = body.offsetHeight - body.clientHeight;
+ body.style.overflow = defaultOverflow;
+
+ X_ViewPort_vScrollbarSize = w;
+ X_ViewPort_hScrollbarSize = h;
+ if( h <= 0 ){ // ie6, ie11, firefox で 負の値が返る
+ console.log( 'invalid hScrollbarSize: ' + h );
+ X_ViewPort_hScrollbarSize = w;
+ };
+
+ //
if( X_Dom_orientationchange ){
X_ViewPort.listen( 'orientationchange', X_Dom_orientationchange );
};
X.Timer.add( 333, X_ViewPort_resize );
};
- X_ViewPort_baseFontSize = Node._fontSizeNode._rawObject.offsetHeight;
+ X_ViewPort_baseFontSize = X_Node_fontSizeNode._rawObject.offsetHeight;
X_ViewPort_readyState = X.Event.XDOM_READY;
X_ViewPort.asyncDispatch( { type : X.Event.XDOM_READY, w : X_ViewPort_width = size[ 0 ], h : X_ViewPort_height = size[ 1 ] } );
if( document[ 'webkitHidden' ] !== undefined ) {
X_ViewPort_document.listen( 'webkitvisibilitychange', X_ViewPort );
} else
- if( X.UA.iOS && window[ 'onpageshow' ] !== undefined ) {
+ if( X_UA.iOS && window[ 'onpageshow' ] !== undefined ) {
X_ViewPort.listen( 'pageshow', X_ViewPort )
.listen( 'pagehide', X_ViewPort );
} else {
};
function X_ViewPort_getWindowSize(){
- return X.UA.IE ?
+ return X_UA.IE ?
[ X_ViewPort_rootElement.clientWidth, X_ViewPort_rootElement.clientHeight ] :
[ window.innerWidth, window.innerHeight ];
};
if( X_UA_EVENT.W3C ){
X_ViewPort_document.listenOnce( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
} else
-if( 6 <= X.UA.IE && X.inHead ){
+if( 6 <= X_UA.IE && X.inHead ){
// if this script in Head
document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );
X_TEMP._script = document.getElementById( "__ie_onload" );
};
// Re: onLoad doesn't work with Safari?
// http://lists.apple.com/archives/web-dev/2003/Oct/msg00036.html
-if( X.UA.WebKit || X.UA.Safari < 3 ){ // sniff
+if( X_UA.WebKit || X_UA.Safari < 3 ){ // sniff
X.Timer.add( 16, function(){
if( !X_TEMP.onDomContentLoaded ) return X_Callback_UN_LISTEN;
if( document.readyState === 'loaded' || document.readyState === 'complete' ) return X_TEMP.onDomContentLoaded();