* _rawObject には HTMLElement, window, document, XHR といったイベントターゲットオブジェクトを設定します。\r
* _rawObject が設定されていると on(), off() 時に addEventListener(DOM Level2) や detachEvent(ie5~8), on~(DOM0) 等を操作します。\r
* _rawObject は最初の on() 前に設定しておかないと addEventListener 等が意図したように行われません。\r
- * X.Dom.Node では非同期に HTMLElement を生成していて、要素生成以前に on, off を呼び出すことができます。これは適宜に migrateEvent, restoreEvent を呼んで解決しているためです。\r
+ * X.Node では非同期に HTMLElement を生成していて、要素生成以前に on, off を呼び出すことができます。これは適宜に migrateEvent, restoreEvent を呼んで解決しているためです。\r
* @private\r
* @type {Object}\r
*/\r
return this;\r
};\r
\r
- raw = this._rawObject || this._ie4getRawNode && this._ie4getRawNode();\r
+ raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
add = raw && ( !list || !list[ type ] ) && X.Type.isString( type );\r
\r
if( this.listening( type, opt_arg1, opt_arg2, opt_arg3 ) ) return this;\r
delete f.once;\r
_list.splice( i, 1 );\r
if( !_list.length ){\r
- raw = this._rawObject || this._ie4getRawNode && this._ie4getRawNode();\r
+ raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
delete list[ opt_type ];\r
if( empty = X_Object_isEmpty( list ) ) delete this._listeners;\r
if( raw && '' + parseFloat( opt_type ) !== '' + opt_type ){ // 数字イベントの除外\r
// 退避したイベントの復帰\r
function X_EventDispatcher_toggleAllEvents( that, add ){\r
var list = that._listeners,\r
- raw = that._rawObject || that._ie4getRawNode && that._ie4getRawNode(),\r
+ raw = that._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( that ),\r
f = add ? X_EventDispatcher_addEvent : X_EventDispatcher_removeEvent,\r
type;\r
if( !list || !raw ) return;\r
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;
+ 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_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_Node_body._updateTimerID && X_Node_startUpdate();
/*X.UA.Opera ?
( document.documentElement && document.documentElement.clientWidth ?
new Function( 'return[document.documentElement.clientWidth,document.documentElement.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;
}
};
};
- 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_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 ] } );
'js/01_core/17_XLogger.js',\r
\r
\r
- //'js/02_dom/00_XDom.js',// XViewport\r
- 'js/02_dom/01_XDomDTD.js',\r
- 'js/02_dom/01_XDomDTD.js',\r
- 'js/02_dom/02_XDomNode.js',\r
+ 'js/02_dom/00_XDoc.js',\r
+ 'js/02_dom/01_XDTD.js',\r
+ 'js/02_dom/02_XNode.js',\r
'js/02_dom/03_XDomEvent.js',\r
- 'js/02_dom/04_XDomBoxModel.js',\r
- 'js/02_dom/05_XDomAttr.js',\r
- 'js/02_dom/06_XDomStyle.js',\r
- 'js/02_dom/07_XDomNodeList.js',\r
- 'js/02_dom/08_XDomSelector.js',\r
- 'js/02_dom/09_XDomParser.js',\r
- 'js/02_dom/22_XDomBuilder.js',\r
+ 'js/02_dom/04_XBoxModel.js',\r
+ 'js/02_dom/05_XNodeAttr.js',\r
+ 'js/02_dom/06_XNodeCSS.js',\r
+ 'js/02_dom/07_XNodeList.js',\r
+ 'js/02_dom/08_XNodeSelector.js',\r
+ 'js/02_dom/09_XHTMLParser.js',\r
+ 'js/02_dom/22_XTreeBuilder.js',\r
\r
'js/03_plugin/00_XPlugin.js',\r
\r