* web.paulownia.jp - JavaScriptとクロージャ\r
* https://web.archive.org/web/20070526063400/http://web.paulownia.jp/script/oop/closure.html\r
* MacOSX 10.3のsafariにはhasOwnPropertyが実装されていないので、独自に追加する必要があります。\r
+ * \r
+ * prototype汚染問題でhasOwnPropertyを使わないクロスブラウザな方法\r
+ * http://os0x.hatenablog.com/entry/20080901/1220272509\r
*/\r
/*\r
Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){\r
X.VERSION = '0.6.89';\r
\r
X.bootTime = + new Date;\r
- \r
-X.getTime = Date.now ? Date.now : new Function( 'return +new Date' );\r
-\r
\r
X.emptyFunction = new Function;\r
\r
\r
+// ------------------------------------------------------------------------- //\r
+// ------------ local variables -------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
var X_URL_BASE_URL = ( function( parts ){\r
var last = 1 < parts.length && parts[ parts.length - 1 ];\r
if( last !== false && ( last === '' || //末尾が/で終わるとき\r
- last.indexOf( '.' ) !== -1 ) ){//末尾がファイル名で終わる時\r
- \r
+ last.indexOf( '.' ) !== -1 ) ){ //末尾がファイル名で終わる時\r
--parts.length;\r
};\r
return parts.join( '/' );\r
})( location.href.split( '?' )[ 0 ].split( '#' )[ 0 ].split( '/' ) ),\r
\r
- X_URL_IS_LOCAL = location.protocol === 'file:' || location.hostname === 'localhost' || location.hostname === '127.0.0.1';\r
-\r
+ X_URL_IS_FILE = location.protocol === 'file:',\r
+ \r
+ X_URL_IS_LOCAL = X_URL_IS_FILE || location.hostname === 'localhost' || location.hostname === '127.0.0.1';\r
\r
+// ------------------------------------------------------------------------- //\r
+// --- interface ----------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
X.URL = {\r
\r
BASE_URL : X_URL_BASE_URL,\r
\r
+ IS_FILE : X_URL_IS_FILE,\r
+ \r
IS_LOCAL : X_URL_IS_LOCAL,\r
\r
toAbsolutePath : X_URL_toAbsolutePath\r
};\r
\r
-\r
-\r
- /*\r
- * original\r
- * AS3で相対パスを絶対パスに変換する\r
- * http://www.shin-go.net/motionlab/?p=449\r
- */\r
+// ------------------------------------------------------------------------- //\r
+// --- implements ---------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+/*\r
+ * original\r
+ * AS3で相対パスを絶対パスに変換する\r
+ * http://www.shin-go.net/motionlab/?p=449\r
+ */\r
function X_URL_toAbsolutePath( path ){\r
var s = '/',\r
ss = '//',\r
\r
X_Callback_THIS_FUNC = 1,\r
X_Callback_HANDLEEVENT = 2,\r
- X_Callback_FUNC_ONLY = 3;\r
+ X_Callback_FUNC_ONLY = 3,\r
\r
X_Callback_NONE = 0,\r
X_Callback_UN_LISTEN = 1,\r
+\r
+X_TEMP.SYSTEM_EVENT_PRE_INIT = 1;\r
+X_TEMP.SYSTEM_EVENT_XTREE = 2;\r
+X_TEMP.SYSTEM_EVENT_INIT = 3;\r
+\r
X.Event = {\r
- COMPLETE : 1,\r
- READY : 2,\r
- SUCCESS : 3,\r
- ERROR : 4,\r
- PROGRESS : 5,\r
- BEFORE_CANCEL : 6,\r
- CANCELED : 7,\r
- TIMEOUT : 8,\r
- BEFORE_KILL_INSTANCE : 9,\r
- KILL_INSTANCE : 10,\r
- KILL_INSTANCE_CANCELED : 11,\r
- _LAST_EVENT : 11\r
+ XDOM_READY : 4,\r
+ \r
+ COMPLETE : 5,\r
+ READY : 6,\r
+ SUCCESS : 7,\r
+ ERROR : 8,\r
+ PROGRESS : 9,\r
+ BEFORE_CANCEL : 10,\r
+ CANCELED : 11,\r
+ TIMEOUT : 12,\r
+ BEFORE_KILL_INSTANCE : 13,\r
+ KILL_INSTANCE_CANCELED : 14, \r
+ KILL_INSTANCE : 15,\r
+\r
+ _LAST_EVENT : 15\r
};
\ No newline at end of file
for( i = type.length; i; ){\r
X_EventDispatcher_actualAddEvent( that, type[ --i ], raw, list );\r
};\r
- } else {\r
+ } else\r
+ if( that._isXHR && X.UA.Opera < 12 ){\r
+ // Opera11- の XHR は event オブジェクトが返らないため, eventType 毎に callback を指定する addEventListener もない\r
+ raw[ 'on' + type ] = X_Callback_create( that, X_EventDispatcher_dispatch, [ type ] );\r
+ } else\r
+ if( that._isSilverlight ){\r
+ list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
+ list.sltoken = raw.AddEventListener( type, list.slcallback );\r
+ } else { \r
that._handleEvent || ( that._handleEvent = X_Callback_create( that, X_EventDispatcher_actualHandleEvent ) );\r
- \r
- if( that._isSilverlight ){\r
- list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
- list.sltoken = raw.AddEventListener( type, list.slcallback );\r
- } else\r
+\r
if( raw.addEventListener ){\r
raw.addEventListener( type, that._handleEvent, false );\r
} else {\r
// Safari は Image, Opera7 は window\r
raw[ 'on' + type ] = that._handleEvent;\r
- }; \r
+ };\r
};\r
}) :\r
X_UA_EVENT.IE ?\r
//if( type === 'load' && that._tag && X.Dom.Event._LOAD_FIX_TAGS[ that._tag ] ){\r
// type = 'readystatechange';\r
//};\r
+\r
+ type = X.Dom.Event.Rename[ type ] || type;\r
+ \r
+ if( X.Type.isArray( type ) ){\r
+ for( i = type.length; i; ){\r
+ X_EventDispatcher_actualAddEvent( that, type[ --i ], raw, list );\r
+ };\r
+ } else\r
if( that._isXHR ){\r
// ie8- の XHR は window.event が更新されないため, eventType 毎に callback を指定する\r
raw[ 'on' + type ] = X_Callback_create( that, X_EventDispatcher_dispatch, [ type ] );\r
- } else {\r
- type = X.Dom.Event.Rename[ type ] || type;\r
+ } else \r
+ if( that._isSilverlight ){\r
+ list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
+ list.sltoken = raw.AddEventListener( type, list.slcallback );\r
+ } else { \r
+ that._handleEvent || ( that._handleEvent = X_Callback_create( that, X_EventDispatcher_actualHandleEvent ) );\r
\r
- if( X.Type.isArray( type ) ){\r
- for( i = type.length; i; ){\r
- X_EventDispatcher_actualAddEvent( that, type[ --i ], raw, list );\r
- };\r
- } else{\r
- that._handleEvent || ( that._handleEvent = X_Callback_create( that, X_EventDispatcher_actualHandleEvent ) );\r
- \r
- if( that._isSilverlight ){\r
- list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
- list.sltoken = raw.AddEventListener( type, list.slcallback );\r
- } else\r
- if( raw.attachEvent ){\r
- raw.attachEvent( 'on' + type, that._handleEvent );\r
- } else {\r
- raw[ 'on' + type ] = that._handleEvent;\r
- };\r
- }; \r
+ if( raw.attachEvent ){\r
+ raw.attachEvent( 'on' + type, that._handleEvent );\r
+ } else {\r
+ raw[ 'on' + type ] = that._handleEvent;\r
+ };\r
};\r
}) :\r
(function( that, type, raw, list ){\r
for( i = type.length; i; ){\r
X_EventDispatcher_actualAddEvent( that, type[ --i ], raw, list );\r
};\r
+ } else\r
+ if( that._isXHR ){\r
+ // ie4 mobile は XHR をサポート!\r
+ raw[ 'on' + type ] = X_Callback_create( that, X_EventDispatcher_dispatch, [ type ] );\r
+ } else\r
+ if( that._isSilverlight ){\r
+ list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
+ list.sltoken = raw.AddEventListener( type, list.slcallback );\r
} else {\r
- that._handleEvent || ( that._handleEvent = X_Callback_create( that, X_EventDispatcher_actualHandleEvent ) );\r
- \r
- if( that._isSilverlight ){\r
- list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
- list.sltoken = raw.AddEventListener( type, list.slcallback );\r
- } else {\r
- raw[ 'on' + type ] = that._handleEvent;\r
- };\r
+ raw[ 'on' + type ] = that._handleEvent || ( that._handleEvent = X_Callback_create( that, X_EventDispatcher_actualHandleEvent ) );\r
};\r
});\r
\r
var X_EventDispatcher_actualRemoveEvent =\r
X_UA_EVENT.W3C /*&& ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 )*/ ? // Safari3-\r
(function( that, type, raw, list, skip ){\r
+ var i;\r
type = X.Dom.Event.Rename[ type ] || type;\r
\r
if( X.Type.isArray( type ) ){\r
for( i = type.length; i; ){\r
X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
};\r
+ } else\r
+ if( that._isXHR && X.UA.Opera < 12 ){\r
+ X_Callback_correct( raw[ 'on' + type ] );\r
+ raw[ 'on' + type ] = '';\r
+ } else \r
+ if( that._isSilverlight ){\r
+ raw.RemoveEventListener( type, list.sltoken ); // token\r
+ X_Callback_correct( list.slcallback );\r
+ delete list.sltoken;\r
+ delete list.slcallback;\r
} else {\r
- \r
- if( that._isSilverlight ){\r
- raw.RemoveEventListener( type, list.sltoken ); // token\r
- X_Callback_correct( list.slcallback );\r
- delete list.sltoken;\r
- delete list.slcallback;\r
+ if( raw.addEventListener ){\r
+ raw.removeEventListener( type, that._handleEvent, false );\r
} else {\r
- if( raw.addEventListener ){\r
- raw.removeEventListener( type, that._handleEvent, false );\r
- } else {\r
- raw[ 'on' + type ] = null;\r
- };\r
- if( !skip ){\r
- X_Callback_correct( that._handleEvent );\r
- delete that._handleEvent;\r
- }; \r
+ raw[ 'on' + type ] = null;\r
+ };\r
+ if( !skip ){\r
+ X_Callback_correct( that._handleEvent );\r
+ delete that._handleEvent;\r
};\r
};\r
}) :\r
//if( type === 'load' && that._tag && X.Dom.Event._LOAD_FIX_TAGS[ that._tag ] ){\r
// type = 'readystatechange';\r
//};\r
+\r
+ type = X.Dom.Event.Rename[ type ] || type;\r
+ \r
+ if( X.Type.isArray( type ) ){\r
+ for( i = type.length; i; ){\r
+ X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
+ };\r
+ } else\r
if( that._isXHR ){\r
X_Callback_correct( raw[ 'on' + type ] );\r
raw[ 'on' + type ] = X.emptyFunction;\r
raw[ 'on' + type ] = '';\r
+ } else \r
+ if( that._isSilverlight ){\r
+ raw.RemoveEventListener( type, list.sltoken ); // token\r
+ X_Callback_correct( list.slcallback );\r
+ delete list.sltoken;\r
+ delete list.slcallback;\r
} else {\r
- type = X.Dom.Event.Rename[ type ] || type;\r
- \r
- if( X.Type.isArray( type ) ){\r
- for( i = type.length; i; ){\r
- X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
- };\r
+ if( raw.attachEvent ){\r
+ raw.detachEvent( 'on' + type, that._handleEvent );\r
} else {\r
- \r
- if( that._isSilverlight ){\r
- raw.RemoveEventListener( type, list.sltoken ); // token\r
- X_Callback_correct( list.slcallback );\r
- delete list.sltoken;\r
- delete list.slcallback;\r
- } else {\r
- if( raw.attachEvent ){\r
- raw.detachEvent( 'on' + type, that._handleEvent );\r
- } else {\r
- raw[ 'on' + type ] = X.emptyFunction;\r
- raw[ 'on' + type ] = '';\r
- };\r
- \r
- if( !skip ){\r
- X_Callback_correct( that._handleEvent );\r
- delete that._handleEvent;\r
- }; \r
- };\r
+ raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = '';\r
+ };\r
+ \r
+ if( !skip ){\r
+ X_Callback_correct( that._handleEvent );\r
+ delete that._handleEvent;\r
};\r
};\r
}) :\r
for( i = type.length; i; ){\r
X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
};\r
+ } else\r
+ if( that._isXHR ){\r
+ X_Callback_correct( raw[ 'on' + type ] );\r
+ raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = '';\r
+ } else\r
+ if( that._isSilverlight ){\r
+ raw.RemoveEventListener( type, list.sltoken ); // token\r
+ X_Callback_correct( list.slcallback );\r
+ delete list.sltoken;\r
+ delete list.slcallback;\r
} else {\r
+ raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = '';\r
\r
- if( that._isSilverlight ){\r
- raw.RemoveEventListener( type, list.sltoken ); // token\r
- X_Callback_correct( list.slcallback );\r
- delete list.sltoken;\r
- delete list.slcallback;\r
- } else {\r
- raw[ 'on' + type ] = X.emptyFunction;\r
- raw[ 'on' + type ] = '';\r
- \r
- if( !skip ){\r
- X_Callback_correct( that._handleEvent );\r
- delete that._handleEvent;\r
- }; \r
+ if( !skip ){\r
+ X_Callback_correct( that._handleEvent );\r
+ delete that._handleEvent;\r
};\r
};\r
});\r
// ------------ local variables -------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
\r
-var X_Timer_SET_TIMEOUT = window.setTimeout,\r
+var X_Timer_now = Date.now || function(){ return +new Date; },\r
+\r
+ X_Timer_SET_TIMEOUT = window.setTimeout,\r
X_Timer_CLEAR_TIMEOUT = window.clearTimeout,\r
\r
X_Timer_REQ_ANIME_FRAME =\r
X_Timer_INTERVAL_TIME = 16,\r
X_Timer_TICKET_LIST = [],\r
X_Timer_removal = null,\r
+ X_Timer_skipUpdate = false,\r
X_Timer_uid = 0,\r
X_Timer_timerId = 0,\r
- X_Timer_next = 0,\r
- X_Timer_busyTimeout = false, \r
- X_Timer_endTime = 0, // iOS\r
+ X_Timer_busyTimeout = false,\r
+ X_Timer_timeStamp = 0, // setTimeout に登録した時間\r
+ X_Timer_waitTime = 0, // 待ち時間\r
\r
X_Timer_REQ_FRAME_LIST = [],\r
X_Timer_requestID = 0,\r
// ------------------------------------------------------------------------- //\r
X.Timer = {\r
\r
+ now : X_Timer_now,\r
+ \r
add : function( time, opt_count, args1, args2, args3 ){\r
var list = X_Timer_TICKET_LIST,\r
hash, obj;\r
X_Timer_removal[ uid ] = true;\r
} else {\r
for( ; i; ){\r
- \r
if( ( q = list[ --i ] ).uid === uid ){\r
list.splice( i, 1 );\r
- ( /* q[ INDEX_COUNT ] <= next || */ l === 1 ) && X_Timer_update();\r
+ !X_Timer_skipUpdate && ( q.last <= X_Timer_waitTime || l === 1 ) && X_Timer_update();\r
break;\r
};\r
}; \r
};\r
\r
function X_Timer_onTimeout(){\r
- var next = X_Timer_next,\r
+ var now = X_Timer_now(),\r
+ minus = ( ( now - X_Timer_timeStamp ) / X_Timer_INTERVAL_TIME | 0 ) || 1,\r
list = X_Timer_TICKET_LIST,\r
i = 0,\r
l = list.length,\r
- limit = X.getTime() + X_Timer_INTERVAL_TIME / 2,\r
+ limit = X_Timer_now() + X_Timer_INTERVAL_TIME / 2,\r
heavy,\r
q, f, c, r, uid;\r
\r
+ console.log( '予定時間と発火時間の差:' + ( now - X_Timer_timeStamp - X_Timer_waitTime * X_Timer_INTERVAL_TIME ) + ' -:' + minus + ' next:' + X_Timer_waitTime );\r
+ \r
if( X_Timer_busyTimeout ){\r
- alert( 'busy!' );\r
+ alert( 'X_Timer_busyTimeout フラグが立ったまま!エラーの可能性' );\r
};\r
\r
X_Timer_busyTimeout = true;\r
\r
for( ; i < l; ++i ){\r
q = list[ i ];\r
- if( X_Timer_removal && X_Timer_removal[ q.uid ] ) continue;\r
- if( 0 < ( q.last -= next ) ) continue;\r
- if( heavy ){\r
- if( q.last <= 0 ) q.last = 1;\r
+ if(\r
+ ( X_Timer_removal && X_Timer_removal[ q.uid ] ) || // timerId は remove 登録されている\r
+ 0 < ( q.last -= minus ) || // 時間が経過していない\r
+ heavy && ( q.last = 1 ) // 時間は経過したが、ヘビーフラグが立っている\r
+ ){\r
continue;\r
};\r
c = q.count;\r
\r
//console.log( 'fire....' );\r
\r
- if( limit <= X.getTime() ){\r
+ if( limit <= X_Timer_now() ){\r
console.log( '******* heavy!' );\r
// 関数の実行に時間がかかる場合、次のタイミングに\r
heavy = true;\r
};\r
X_Timer_timerId = 0;\r
X_Timer_busyTimeout = false;\r
+ \r
if( X_Timer_removal ){\r
+ X_Timer_skipUpdate = true;\r
for( uid in X_Timer_removal ){\r
- X.Timer.remove( X_Timer_removal[ uid ] );\r
+ X.Timer.remove( uid );\r
};\r
+ X_Timer_skipUpdate = false;\r
X_Timer_removal = null;\r
};\r
X_Timer_update();\r
\r
n = list[ i - 1 ].last;\r
\r
- if( n < X_Timer_next || X_Timer_timerId === 0 ){\r
- X_Timer_timerId && X_Timer_CLEAR_TIMEOUT( X_Timer_timerId );\r
- X_Timer_timerId = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, X_Timer_INTERVAL_TIME * n );\r
- X_Timer_endTime = X.getTime() + X_Timer_INTERVAL_TIME * n; // iOS\r
- X_Timer_next = n;\r
+ if( n < X_Timer_waitTime || X_Timer_timerId === 0 ){\r
+ if( X_Timer_timerId ){\r
+ X_Timer_CLEAR_TIMEOUT( X_Timer_timerId );\r
+ n -= ( X_Timer_now() - X_Timer_timeStamp ) / X_Timer_INTERVAL_TIME | 0;\r
+ 0 <= n || ( n = 0 ); // 負の数は 0 に\r
+ };\r
+ X_Timer_timeStamp = X_Timer_now();\r
+ X_Timer_timerId = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, X_Timer_INTERVAL_TIME * n );\r
+ X_Timer_waitTime = n;\r
};\r
};\r
\r
+// 大きい -> 小さい\r
+function X_Timer_compareQueue( a, b ){\r
+ return a.last < b.last ? 1 : a.last === b.last ? 0 : -1;\r
+};\r
+\r
// http://havelog.ayumusato.com/develop/javascript/e528-ios6_scrolling_timer_notcall.html\r
// iOS6 スクロール中のタイマー発火絡みのバグ備忘\r
if( X.UA.iOS ){\r
window.addEventListener( 'scroll', function(){\r
- var last;\r
+ var last, now;\r
if( X_Timer_timerId ){\r
- window.clearTimeout( X_Timer_timerId );\r
- last = X_Timer_endTime - X.getTime();\r
+ X_Timer_CLEAR_TIMEOUT( X_Timer_timerId );\r
+ now = X_Timer_now();\r
+ last = X_Timer_timeStamp + X_Timer_INTERVAL_TIME * X_Timer_waitTime - now;\r
X_Timer_timerId = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, 0 < last ? last : 0 );\r
+ // 更新\r
+ X_Timer_timeStamp = now;\r
+ X_Timer_waitTime = last / X_Timer_INTERVAL_TIME | 0;\r
};\r
});\r
};\r
l = list.length,\r
i = 0, q, uid, args;\r
\r
- time = time || X.getTime();\r
+ time = time || X_Timer_now();\r
X_Timer_busyOnFrame = true;\r
- // console.log( X.getTime() + ' , ' + time );\r
+ // console.log( X_Timer_now() + ' , ' + time );\r
for( ; i < l; ++i ){\r
q = list[ i ];\r
\r
};\r
};\r
\r
-// 大きい -> 小さい\r
-function X_Timer_compareQueue( a, b ){\r
- return a.last < b.last ? 1 : a.last === b.last ? 0 : -1;\r
-};\r
-\r
-\r
console.log( 'X.Core.Timer' );\r
\r
+var X_Dom_readyState,\r
+ X_Dom_active = !!window.parent || !!document.activeElement, // parent は frameに読み込まれた場合のieのerror回避\r
+ X_Dom_rootElement,\r
+ X_Dom_lock,\r
+ X_Dom_width,\r
+ X_Dom_height,\r
+ X_Dom_baseFontSize,\r
+ X_Dom_orientationFlag;\r
+\r
X.Dom = X.Class._override(\r
new X.EventDispatcher(),\r
{\r
- readyState : -1,\r
- active : !!window.parent || !!document.activeElement, // parent は frameに読み込まれた場合のieのerror回避\r
- _root : null,\r
\r
- _lock : false,\r
- w : 0,\r
- h : 0,\r
- baseFontSize : 0,\r
+ handleEvent : function( e ){\r
+ var href;\r
+ switch( e.type ){\r
+ case 'beforeunload' :\r
+ \r
+ // ie では a href="javascript" な要素でも beforeunload が起こる\r
+ href = e.target && e.target.attr && e.target.attr( 'href' );\r
+ if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
+ \r
+ return X.Dom.dispatch( X.Dom.Event.BEFORE_UNLOAD );\r
+ case 'unload' :\r
+ X.Dom.dispatch( X.Dom.Event.UNLOAD );\r
+ \r
+ Node._window.unlisten();\r
+ Node._document.unlisten();\r
+ Node._html._actualRemove( true );\r
+ break;\r
+ case 'visibilitychange' :\r
+ X.Dom.dispatch( { type : ( X_Dom_active = document[ 'hidden' ] ) ? X.Dom.Event.VIEW_DEACTIVATE : X.Dom.Event.VIEW_ACTIVATE } );\r
+ break;\r
+ case 'webkitvisibilitychange' :\r
+ X.Dom.dispatch( { type : ( X_Dom_active = document[ 'webkitHidden' ] ) ? X.Dom.Event.VIEW_DEACTIVATE : X.Dom.Event.VIEW_ACTIVATE } );\r
+ break;\r
+ case 'pageshow' :\r
+ case 'focus' :\r
+ X_Dom_active = true;\r
+ X.Dom.dispatch( X.Dom.Event.VIEW_ACTIVATE );\r
+ break;\r
+ case 'pagehide' :\r
+ case 'blur' :\r
+ X_Dom_active = false;\r
+ X.Dom.dispatch( X.Dom.Event.VIEW_DEACTIVATE );\r
+ break;\r
+ };\r
+ },\r
+\r
+ listen : function( type ){\r
+ if( type <= X_Dom_readyState ){\r
+ /*\r
+ * X.Event.XDOM_READY 以後に listen した場合の対策\r
+ */\r
+ X.Dom.asyncDispatch( 0, { type : type, w : X_Dom_width, h : X_Dom_height } );\r
+ };\r
+ return X_EventDispatcher_listen.apply( X.Dom, arguments );\r
+ },\r
+ \r
+ getPointerPosition : function(){\r
+ \r
+ },\r
+ \r
+ /* 要素が視界に入った http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */\r
+ inView : function( elm ){\r
+ \r
+ },\r
+ \r
+ getSize : function(){\r
+ return [ X_Dom_width, X_Dom_height ];\r
+ },\r
+//https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect\r
+//use window.pageXOffset and window.pageYOffset instead of window.scrollX and window.scrollY\r
+//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollLeft == 'number' ? t : document.body).ScrollLeft;\r
+//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollTop == 'number' ? t : document.body).ScrollTop\r
+ \r
+ getDocumentSize : function(){\r
+ // Opera は互換モードでは document.body.scrollHeight、標準モードでは document.documentElement.scrollHeight でページの高さが取れる。と思ってたんだけど、例外があった。\r
+ // http://orera.g.hatena.ne.jp/edvakf/20100515/1273908051\r
+ //http://onozaty.hatenablog.com/entry/20060803/p1\r
+ // Safari2.0.4では標準・互換どちらも document.body\r
+ \r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ /*X.UA.Opera ?\r
+ ( document.documentElement && document.documentElement.clientWidth ?\r
+ new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :\r
+ new Function( 'return[document.body.clientWidth,document.body.clientHeight]' )\r
+ ) :*/ \r
+ return [\r
+ X_Dom_rootElement.scrollWidth || X_Dom_rootElement.offsetWidth,\r
+ X_Dom_rootElement.scrollHeight || X_Dom_rootElement.offsetHeight\r
+ ];\r
+ },\r
+ \r
+ getScrollPosition :\r
+ window.pageXOffset !== undefined ?\r
+ ( function(){\r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ return[ window.pageXOffset, window.pageYOffset ];\r
+ } ) :\r
+ window.scrollLeft !== undefined ?\r
+ ( function(){\r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ return[ window.scrollLeft, window.scrollTop ];\r
+ } ) :\r
+ ( function(){\r
+ Node._body._updateTimerID && Node._body._startUpdate();\r
+ // body は Safari2-\r
+ return[ X_Dom_rootElement.scrollLeft || document.body.scrollLeft, X_Dom_rootElement.scrollTop || document.body.scrollTop ];\r
+ } ),\r
+\r
+ getScrollbarSize : function(){\r
+ return [ X.Dom.BoxModel.vScrollbarSize, X.Dom.BoxModel.hScrollbarSize ]; \r
+ },\r
+ \r
+ getBaseFontSize : function(){\r
+ if( Node._body._updateTimerID ){\r
+ Node._body._startUpdate();\r
+ return Node._fontSizeNode._rawObject.offsetHeight;\r
+ };\r
+ return X_Dom_baseFontSize;\r
+ }\r
+ }\r
+);\r
+\r
+\r
+\r
+\r
+\r
\r
/* -----------------------------------------------\r
* Resize\r
* \r
* getBoundingClientRect で fontsize の調査\r
*/\r
- _resize :\r
+ var X_Dom_resize =\r
// iOS もループで回す,,,iOS3.1.3, iOS6 で確認\r
X.UA.IE < 9 || X.UA.iOS ?\r
(function(){\r
var size;\r
- if( !X.Dom._lock ){\r
- size = X.Dom._getSize();\r
- if( X.Dom.w !== size[ 0 ] || X.Dom.h !== size[ 1 ] ){\r
- X.Dom.w = size[ 0 ];\r
- X.Dom.h = size[ 1 ];\r
- X.Timer.once( 100, X.Dom._detectFinishResizing );\r
- X.Dom._lock = true;\r
+ if( !X_Dom_lock ){\r
+ size = X_Dom_getWindowSize();\r
+ if( X_Dom_width !== size[ 0 ] || X_Dom_height !== size[ 1 ] ){\r
+ X_Dom_width = size[ 0 ];\r
+ X_Dom_height = size[ 1 ];\r
+ X.Timer.once( 100, X_Dom_detectFinishResizing );\r
+ X_Dom_lock = true;\r
};\r
};\r
\r
size = Node._fontSizeNode._rawObject.offsetHeight;\r
- if( X.Dom.baseFontSize !== size ){\r
- X.Dom.baseFontSize && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X.Dom.w, h : X.Dom.h } );\r
- X.Dom.baseFontSize = size;\r
+ if( X_Dom_baseFontSize !== size ){\r
+ X_Dom_baseFontSize && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
+ X_Dom_baseFontSize = size;\r
};\r
\r
}) :\r
(function( e ){\r
- console.log( '-- resize : ' + X.getTime() );\r
+ console.log( '-- resize : ' + X_Timer_now() );\r
\r
- !X.Dom._lock && ( X.Dom._lock = true ) && X.Timer.once( 100, X.Dom._detectFinishResizing );\r
+ !X_Dom_lock && ( X_Dom_lock = true ) && X.Timer.once( 100, X_Dom_detectFinishResizing );\r
return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
- }),\r
+ });\r
\r
- _detectFinishResizing : function (){\r
- var size = X.Dom._getSize();\r
- if( X.Dom.w !== size[ 0 ] || X.Dom.h !== size[ 1 ] ){\r
- X.Dom.w = size[ 0 ];\r
- X.Dom.h = size[ 1 ];\r
- X.Timer.once( 100, X.Dom._detectFinishResizing );\r
+ function X_Dom_detectFinishResizing(){\r
+ var size = X_Dom_getWindowSize();\r
+ if( X_Dom_width !== size[ 0 ] || X_Dom_height !== size[ 1 ] ){\r
+ X_Dom_width = size[ 0 ];\r
+ X_Dom_height = size[ 1 ];\r
+ X.Timer.once( 100, X_Dom_detectFinishResizing );\r
} else {\r
- console.log( '-- detectFinishResizing : ' + X.getTime() );\r
+ console.log( '-- detectFinishResizing : ' + X_Timer_now() );\r
\r
- X.Dom.asyncDispatch( 0, { type : X.Dom.Event.VIEW_RESIZED, w : X.Dom.w, h : X.Dom.h } );\r
- X.Dom._lock = false;\r
- if( X.Dom._orientationFlag ){\r
- X.Dom._orientationFlag = false;\r
+ X.Dom.asyncDispatch( 0, { type : X.Dom.Event.VIEW_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
+ X_Dom_lock = false;\r
+ if( X_Dom_orientationFlag ){\r
+ X_Dom_orientationFlag = false;\r
X.Dom.asyncDispatch( 100, { type : X.Dom.Event.VIEW_TURNED, orientation : window.orientation } );\r
};\r
};\r
- },\r
+ };\r
\r
- _init : function(){\r
- var s, size, html, head, body;\r
- if( X.Dom.Event.DOM_PRE_INIT <= X.Dom.readyState ) return X_Callback_UN_LISTEN;\r
+ X_TEMP.onDomContentLoaded = function(){\r
+ var s, size, elmHtml, elmHead, elmBody, html, head, body;\r
\r
- console.log( 'X.Dom._init()' );\r
+ if( X_TEMP.SYSTEM_EVENT_PRE_INIT <= X_Dom_readyState ) return X_Callback_UN_LISTEN;\r
+ X_Dom_readyState = X_TEMP.SYSTEM_EVENT_PRE_INIT;\r
\r
- delete X.Dom._init;\r
- // DOMContentLoaded の無いブラウザで X.Dom._init への参照が残り続けるのを回避\r
- Node._document.unlisten( 'DOMContentLoaded', X.Dom._init );\r
+ // DOMContentLoaded の無いブラウザで X_TEMP.onDomContentLoaded への参照が残り続けるのを回避\r
+ Node._document.unlisten( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );\r
+ delete X_TEMP.onDomContentLoaded;\r
\r
- X.Dom.readyState = X.Dom.Event.DOM_PRE_INIT;\r
+ elmHtml = document.documentElement ||\r
+ X_UA_DOM.W3C ? document.getElementsByTagName( 'html' )[ 0 ] :\r
+ X_UA_DOM.IE4 ? document.all.tags( 'html' )[ 0 ] : null;\r
\r
- X.Dom._root = document.compatMode !== 'CSS1Compat' ? document.body : document.documentElement || document.body;\r
+ elmHead = \r
+ X_UA_DOM.W3C ? document.getElementsByTagName( 'head' )[ 0 ] :\r
+ X_UA_DOM.IE4 ? document.all.tags( 'head' )[ 0 ] : null;\r
+\r
+ elmBody = document.body;\r
\r
- html = Node._html =\r
- document.documentElement ?\r
- new Node( document.documentElement ) :\r
- X_UA_DOM.W3C ?\r
- new Node( document.getElementsByTagName( 'html' )[ 0 ] ) :\r
- X_UA_DOM.IE4 ?\r
- new Node( document.all.tags( 'html' )[ 0 ] ) :\r
- null;\r
+ X_Dom_rootElement = document.compatMode !== 'CSS1Compat' ? elmBody : elmHtml || elmBody;\r
+\r
+ html = Node._html = elmHtml && new Node( elmHtml );\r
\r
- head = Node._head =\r
- X_UA_DOM.W3C ?\r
- new Node( document.getElementsByTagName( 'head' )[ 0 ] ) :\r
- X_UA_DOM.IE4 ?\r
- new Node( document.all.tags( 'head' )[ 0 ] ) :\r
- null;\r
+ head = Node._head = elmHead && new Node( elmHead );\r
\r
- body = Node._body = new Node( document.body );\r
+ body = Node._body = new Node( elmBody );\r
+ \r
+ body._root = html._root = head._root = body;// _root は html だろ\r
+ body.parent = head.parent = html;\r
+ html._xnodes = [ head, body ]; \r
\r
Node.root = body; // 後方互換\r
\r
head.appendTo = head.appendToRoot = head.before = head.after = head.clone = head.remove = head.destroy = head.prevNode = head.nextNode =\r
head.empty = head.html = head.text =\r
body.appendTo = body.appendToRoot = body.before = body.after = body.clone = body.remove = body.destroy = body.prevNode = body.nextNode = new Function( 'return this' );\r
- \r
- body._root = html._root = head._root = body;\r
- body.parent = head.parent = html;\r
- html._xnodes = [ head, body ];\r
\r
- X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT, function(){\r
- X.Dom.readyState = X.Dom.Event.DOM_BUILDER_COMPLETE;\r
- !X_TEMP.X_Dom_useBuilder && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.DOM_BUILDER_COMPLETE } );\r
+ X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_PRE_INIT, function(){\r
+ X_Dom_readyState = X_TEMP.SYSTEM_EVENT_XTREE;\r
+ !X_TEMP.X_Dom_useBuilder && X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_XTREE );\r
} );\r
\r
- X.Dom.listenOnce( X.Dom.Event.DOM_BUILDER_COMPLETE, function(){\r
- X.Dom.readyState = X.Dom.Event.DOM_INIT;\r
+ X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_XTREE, function(){\r
+ X_Dom_readyState = X_TEMP.SYSTEM_EVENT_INIT;\r
//X.UA.Opera7 && alert( 'bc' );\r
Node._body.appendAt( 0,\r
Node._systemNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ),\r
Node._fontSizeNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ).cssText( 'line-height:1;height:1em;' ).text( 'X' )\r
)._startUpdate();\r
\r
- X.Dom.asyncDispatch( 0, { type : X.Dom.Event.DOM_INIT } );\r
+ X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_INIT );\r
} );\r
\r
- X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){\r
- var size = X.Dom._getSize();\r
+ X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){\r
+ var size = X_Dom_getWindowSize();\r
\r
- if( X.Dom._orientationchange ){\r
- X.Dom.Node._window.listen( 'orientationchange', X.Dom._orientationchange );\r
+ if( X_Dom_orientationchange ){\r
+ X.Dom.Node._window.listen( 'orientationchange', X_Dom_orientationchange );\r
};\r
\r
- if( X.Dom._detectFontSize ){\r
- X.Dom.Node._window.listen( 'resize', X.Dom._resize );\r
- X.Timer.add( 333, X.Dom._detectFontSize );\r
+ if( X_Dom_detectFontSize ){\r
+ X.Dom.Node._window.listen( 'resize', X_Dom_resize );\r
+ X.Timer.add( 333, X_Dom_detectFontSize );\r
} else {\r
- X.Timer.add( 333, X.Dom._resize );\r
+ X.Timer.add( 333, X_Dom_resize );\r
};\r
\r
- X.Dom.baseFontSize = Node._fontSizeNode._rawObject.offsetHeight;\r
+ X_Dom_baseFontSize = Node._fontSizeNode._rawObject.offsetHeight;\r
\r
- X.Dom.readyState = X.Dom.Event.XDOM_READY;\r
- X.Dom.asyncDispatch( 0, { type : X.Dom.Event.XDOM_READY, w : X.Dom.w = size[ 0 ], h : X.Dom.h = size[ 1 ] } );\r
+ X_Dom_readyState = X.Event.XDOM_READY;\r
+ X.Dom.asyncDispatch( 0, { type : X.Event.XDOM_READY, w : X_Dom_width = size[ 0 ], h : X_Dom_height = size[ 1 ] } );\r
} );\r
\r
- X.Dom.asyncDispatch( 0, { type : X.Dom.Event.DOM_PRE_INIT } ); \r
+ X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_PRE_INIT ); \r
\r
Node._window\r
.listen( 'beforeunload', X.Dom )\r
};\r
\r
return X_Callback_UN_LISTEN;\r
- },\r
-\r
- handleEvent : function( e ){\r
- var href;\r
- switch( e.type ){\r
- case 'beforeunload' :\r
- \r
- // ie では a href="javascript" な要素でも beforeunload が起こる\r
- href = e.target && e.target.attr && e.target.attr( 'href' );\r
- if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
- \r
- return X.Dom.dispatch( { type : X.Dom.Event.BEFORE_UNLOAD } );\r
- case 'unload' :\r
- X.Dom.dispatch( { type : X.Dom.Event.UNLOAD } );\r
- \r
- Node._window.unlisten();\r
- Node._document.unlisten();\r
- Node._html._actualRemove( true );\r
- break;\r
- case 'visibilitychange' :\r
- X.Dom.dispatch( { type : ( X.Dom.activate = document[ 'hidden' ] ) ? X.Dom.Event.VIEW_DEACTIVATE : X.Dom.Event.VIEW_ACTIVATE } );\r
- break;\r
- case 'webkitvisibilitychange' :\r
- X.Dom.dispatch( { type : ( X.Dom.activate = document[ 'webkitHidden' ] ) ? X.Dom.Event.VIEW_DEACTIVATE : X.Dom.Event.VIEW_ACTIVATE } );\r
- break;\r
- case 'pageshow' :\r
- case 'focus' :\r
- X.Dom.activate = true;\r
- X.Dom.dispatch( { type : X.Dom.Event.VIEW_ACTIVATE } );\r
- break;\r
- case 'pagehide' :\r
- case 'blur' :\r
- X.Dom.activate = false;\r
- X.Dom.dispatch( { type : X.Dom.Event.VIEW_DEACTIVATE } );\r
- break;\r
- };\r
- },\r
-\r
- listen : function( type ){\r
- if( type <= X.Dom.readyState ){\r
- /*\r
- * X.Dom.Event.XDOM_READY 以後に listen した場合の対策\r
- */\r
- X.Dom.asyncDispatch( 0, { type : type, w : X.Dom.w, h : X.Dom.h } );\r
- };\r
- return X_EventDispatcher_listen.apply( X.Dom, arguments );\r
- },\r
- \r
- getPointerPosition : function(){\r
- \r
- },\r
- \r
- /* 要素が視界に入った http://remysharp.com/2009/01/26/element-in-view-event-plugin/ */\r
- inView : function( elm ){\r
- \r
- },\r
+ };\r
\r
- _getSize :\r
- X.UA.IE ?\r
- new Function( 'return[X.Dom._root.clientWidth,X.Dom._root.clientHeight]' ) :\r
- new Function( 'return[window.innerWidth,window.innerHeight]' ),\r
- \r
- getSize : function(){\r
- return [ X.Dom.w, X.Dom.h ];\r
- },\r
-//https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect\r
-//use window.pageXOffset and window.pageYOffset instead of window.scrollX and window.scrollY\r
-//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollLeft == 'number' ? t : document.body).ScrollLeft;\r
-//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollTop == 'number' ? t : document.body).ScrollTop\r
- \r
- getDocumentSize : function(){\r
- // Opera は互換モードでは document.body.scrollHeight、標準モードでは document.documentElement.scrollHeight でページの高さが取れる。と思ってたんだけど、例外があった。\r
- // http://orera.g.hatena.ne.jp/edvakf/20100515/1273908051\r
- //http://onozaty.hatenablog.com/entry/20060803/p1\r
- // Safari2.0.4では標準・互換どちらも document.body\r
- \r
- Node._body._updateTimerID && Node._body._startUpdate();\r
- /*X.UA.Opera ?\r
- ( document.documentElement && document.documentElement.clientWidth ?\r
- new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :\r
- new Function( 'return[document.body.clientWidth,document.body.clientHeight]' )\r
- ) :*/ \r
- return [\r
- X.Dom._root.scrollWidth || X.Dom._root.offsetWidth,\r
- X.Dom._root.scrollHeight || X.Dom._root.offsetHeight\r
- ];\r
- },\r
- \r
- getScrollPosition :\r
- window.pageXOffset !== undefined ?\r
- ( function(){\r
- Node._body._updateTimerID && Node._body._startUpdate();\r
- return[ window.pageXOffset, window.pageYOffset ];\r
- } ) :\r
- window.scrollLeft !== undefined ?\r
- ( function(){\r
- Node._body._updateTimerID && Node._body._startUpdate();\r
- return[ window.scrollLeft, window.scrollTop ];\r
- } ) :\r
- ( function(){\r
- Node._body._updateTimerID && Node._body._startUpdate();\r
- // body は Safari2-\r
- return[ X.Dom._root.scrollLeft || document.body.scrollLeft, X.Dom._root.scrollTop || document.body.scrollTop ];\r
- } ),\r
+ function X_Dom_getWindowSize(){\r
+ return X.UA.IE ?\r
+ [ X_Dom_rootElement.clientWidth, X_Dom_rootElement.clientHeight ] :\r
+ [ window.innerWidth, window.innerHeight ];\r
+ };\r
\r
- getScrollbarSize : function(){\r
- return [ X.Dom.BoxModel.vScrollbarSize, X.Dom.BoxModel.hScrollbarSize ]; \r
- },\r
- \r
- getBaseFontSize : function(){\r
- if( Node._body._updateTimerID ){\r
- Node._body._startUpdate();\r
- return Node._fontSizeNode._rawObject.offsetHeight;\r
- };\r
- return X.Dom.baseFontSize;\r
- }\r
- }\r
-);\r
\r
if( !( X.UA.IE < 9 || X.UA.iOS ) ){\r
- X.Dom._detectFontSize = function(){\r
+ var X_Dom_detectFontSize = function(){\r
var size = Node._fontSizeNode._rawObject.offsetHeight;\r
- if( X.Dom.baseFontSize !== size ){\r
- X.Dom.baseFontSize && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X.Dom.w, h : X.Dom.h } );\r
- X.Dom.baseFontSize = size;\r
+ if( X_Dom_baseFontSize !== size ){\r
+ X_Dom_baseFontSize && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
+ X_Dom_baseFontSize = size;\r
};\r
};\r
};\r
\r
if( window[ 'orientation' ] !== undefined ){\r
- X.Dom._orientationchange = function( e ){\r
- X.Dom._orientationFlag = true;\r
- !X.UA.Android && X.Dom._resize();\r
- console.log( '-- orientationchange : ' + X.Dom.getSize[ 0 ] + ' ' + X.Dom.getSize[ 1 ] );\r
- };\r
+ var X_Dom_orientationchange = function( e ){\r
+ X_Dom_orientationFlag = true;\r
+ !X.UA.Android && X_Dom_resize();\r
+ //console.log( '-- orientationchange : ' + X.Dom.getSize[ 0 ] + ' ' + X.Dom.getSize[ 1 ] );\r
+ },\r
+ X_Dom_orientationFlag;\r
};\r
\r
console.log( 'X.Dom dom:w3c=' + X_UA_DOM.W3C + ' ev:w3c=' + X_UA_EVENT.W3C );\r
-X.Dom.Dirty = {\r
- CLEAN : 0,\r
- CHILD_IS_DIRTY : 1,\r
- ID : 2, // width, height, x, y\r
- CONTENT : 4, // width, height, x, y textNode の内容\r
- CLASSNAME : 8, // _getCharSize, width, height, x, y\r
- ATTR : 16, // _getCharSize, width, height, x, y\r
- CSS : 32, // _getCharSize, width, height, x, y\r
- IE_FILTER : X.UA.IE < 9 && !X.UA.MacIE ? 64 : 0,\r
- UNKNOWN_TAG_FIX : 128,\r
- IE4_TEXTNODE_FIX : 256\r
-};\r
-\r
-X.Dom.State = {\r
- DESTROYED : 0,\r
- EXIST : 1,\r
- BELONG_TREE : 2,\r
- DISPLAY_NONE : 4,\r
- DISPLAY_BLOCK : 8,\r
- DISPLAY_INLINE : 16,\r
- POSITION_ABSOLUTE : 32,\r
- OVERFLOW_HIDDEN : 64,\r
- HAS_WIDTH_LENGTH : 128,\r
- HAS_WIDTH_PERCENT : 256,\r
- HAS_HEIGHT_LENGTH : 512,\r
- HAS_HEIGHT_PERCENT : 1024,\r
- IE4_ONLY_TEXT : 2048,\r
- IE5_DISPLAY_NONE_FIX : !X.UA.MacIE && X.UA.IE5 ? 4096 : 0 // filterがかかっていると不可? MacIE5.2- は ?\r
-};\r
-\r
-X.Dom._strictElmCreation = !X.UA.MacIE && X.UA.IE5678;// && !X.UA.MacIE;\r
-\r
-X.Dom._useDocumentFragment = document.createDocumentFragment && ( !X.UA.IE || 5.5 <= X.UA.IE ) && document.createDocumentFragment();\r
+var \r
+ X_Node_Dirty = {\r
+ CLEAN : 0,\r
+ CHILD_IS_DIRTY : 1,\r
+ ID : 2, // width, height, x, y\r
+ CONTENT : 4, // width, height, x, y textNode の内容\r
+ CLASSNAME : 8, // _getCharSize, width, height, x, y\r
+ ATTR : 16, // _getCharSize, width, height, x, y\r
+ CSS : 32, // _getCharSize, width, height, x, y\r
+ IE_FILTER : X.UA.IE < 9 && !X.UA.MacIE ? 64 : 0,\r
+ UNKNOWN_TAG_FIX : 128,\r
+ IE4_TEXTNODE_FIX : 256\r
+ },\r
+ \r
+ X_Node_State = {\r
+ DESTROYED : 0,\r
+ EXIST : 1,\r
+ BELONG_TREE : 2,\r
+ DISPLAY_NONE : 4,\r
+ DISPLAY_BLOCK : 8,\r
+ DISPLAY_INLINE : 16,\r
+ POSITION_ABSOLUTE : 32,\r
+ OVERFLOW_HIDDEN : 64,\r
+ HAS_WIDTH_LENGTH : 128,\r
+ HAS_WIDTH_PERCENT : 256,\r
+ HAS_HEIGHT_LENGTH : 512,\r
+ HAS_HEIGHT_PERCENT : 1024,\r
+ IE4_ONLY_TEXT : 2048,\r
+ IE5_DISPLAY_NONE_FIX : !X.UA.MacIE && X.UA.IE5 ? 4096 : 0 // filterがかかっていると不可? MacIE5.2- は ?\r
+ },\r
+ \r
+ X_Node_TYPE = {\r
+ XNODE : 1,\r
+ RAW_HTML : 2,\r
+ RAW_TEXT : 3,\r
+ HTML_STRING : 4,\r
+ STRING : 5,\r
+ //DOC_FRAG : 6,\r
+ XNODE_LIST : 7,\r
+ WINDOW : 8,\r
+ DOCUMENT : 9,\r
+ IMAGE : 10\r
+ },\r
+ \r
+ X_Node_strictElmCreation = !X.UA.MacIE && X.UA.IE5678,// && !X.UA.MacIE;\r
+ \r
+ X_Node_useDocumentFragment = document.createDocumentFragment && ( !X.UA.IE || 5.5 <= X.UA.IE ) && document.createDocumentFragment(),\r
\r
/*\r
* Node( rawElement | rawTextnode | htmlString | textString )\r
- */\r
-\r
-X.Dom.Node = X.EventDispatcher.inherits(\r
+ */ \r
+ Node = X.Dom.Node = X.EventDispatcher.inherits(\r
'XDomNode',\r
X.Class.POOL_OBJECT,\r
{\r
_state : 0,\r
_dirty : 0,\r
\r
- _isNew : false,\r
+ _isNew : false, // state にまとめる\r
\r
_rawObject : null,\r
_rect : null, // \r
_id : null,\r
_className : '',\r
\r
- _attrs : null, // X.Dom.Attr\r
+ _attrs : null, // X_Node_Attr\r
_newAttrs : null,\r
- _attrText : '', // X.Dom.Attr.objToAttrText が必要な場合は false が入っている\r
+ _attrText : '', // X_Node_Attr.objToAttrText が必要な場合は false が入っている\r
\r
_css : null, // X.Dom.Style\r
_cssText : null,\r
Node._newByTag = false;\r
this._tag = v.toUpperCase();\r
this._xnodeType = 1;\r
- this._state = X.Dom.State.DISPLAY_INLINE; // todo\r
+ this._state = X_Node_State.DISPLAY_INLINE; // todo\r
arguments[ 1 ] && this.attr( arguments[ 1 ] );\r
css = arguments[ 2 ];\r
css && this[ X.Type.isString( css ) ? 'cssText' : 'css' ]( css );\r
Node._newByText = false;\r
this._text = v;\r
this._xnodeType = 3;\r
- this._state = X.Dom.State.DISPLAY_INLINE;\r
+ this._state = X_Node_State.DISPLAY_INLINE;\r
} else {\r
if( 1 < arguments.length ) return new X.Dom.NodeList( arguments );\r
if( X.Type.isArray( v ) && v.length ) return new X.Dom.NodeList( v );\r
//if( !this || this.append !== Node.prototype.append ){\r
// return new Node( v );\r
//};\r
- switch( Node._getType( v ) ){\r
- case Node.IS_XNODE :\r
- case Node.IS_XNODE_LIST :\r
+ switch( X_Node_getType( v ) ){\r
+ case X_Node_TYPE.XNODE :\r
+ case X_Node_TYPE.XNODE_LIST :\r
return v;\r
- case Node.IS_RAW_HTML :\r
- if( xnode = Node._getXNode( v ) ) return xnode;\r
+ case X_Node_TYPE.RAW_HTML :\r
+ if( xnode = X_Node_getXNode( v ) ) return xnode;\r
// v.parentNode || v.parentElement : dom1 || dom0\r
- this.parent = ( parent = v.parentNode || v.parentElement ) && parent.tagName /* ie7- */ && Node._getXNode( parent );\r
+ this.parent = ( parent = v.parentNode || v.parentElement ) && parent.tagName /* ie7- */ && X_Node_getXNode( parent );\r
this._root = this.parent ? this.parent._root : null;\r
this._rawObject = v;\r
this._xnodeType = 1;\r
- this._state = X.Dom.State.DISPLAY_BLOCK; // todo\r
+ this._state = X_Node_State.DISPLAY_BLOCK; // todo\r
this._tag = v.tagName.toUpperCase();\r
this._id = v.id;\r
this._className = v.className;\r
this.cssText( v.style.cssText );\r
- // X.Dom.Dirty.CSS を落とす\r
+ // X_Node_Dirty.CSS を落とす\r
this._dirty = 0;\r
- // attr の回収は不可能、、、\r
+ // TODO attr の回収は不可能、、、\r
if( X_UA_DOM.IE4 ){\r
v.setAttribute( 'UID', '' + uid );\r
} else {\r
};\r
// childNodes...\r
break;\r
- case Node.IS_RAW_TEXT :\r
- if( xnode = Node._getXNode( v ) ) return xnode;\r
- this.parent = Node._getXNode( v.parentNode );\r
+ case X_Node_TYPE.RAW_TEXT :\r
+ if( xnode = X_Node_getXNode( v ) ) return xnode;\r
+ this.parent = X_Node_getXNode( v.parentNode );\r
this._root = this.parent ? this.parent._root : null;\r
this._rawObject = v;\r
this._xnodeType = 3;\r
- this._state = X.Dom.State.DISPLAY_INLINE;\r
+ this._state = X_Node_State.DISPLAY_INLINE;\r
this._text = v.data;\r
v.UID = uid;\r
break;\r
- case Node.IS_HTML_STRING :\r
- case Node.IS_STRING :\r
+ case X_Node_TYPE.HTML_STRING :\r
+ case X_Node_TYPE.STRING :\r
if( xnodes = X.Dom.parse( v, true ) && 1 < xnodes.length ) return new X.Dom.NodeList( xnodes );\r
if( xnodes.length ) return xnodes[ 0 ];\r
return Node.none;\r
- case Node.IS_IMAGE :\r
- if( xnode = Node._getXNode( v ) ) return xnode;\r
+ case X_Node_TYPE.IMAGE :\r
+ if( xnode = X_Node_getXNode( v ) ) return xnode;\r
this._rawObject = v;\r
this._xnodeType = 4;\r
v.UID = uid;\r
- this._state = X.Dom.State.EXIST;\r
+ this._state = X_Node_State.EXIST;\r
break;\r
/*\r
- case Node.IS_WINDOW :\r
- case Node.IS_DOCUMENT :\r
- if( xnode = Node._getXNode( v ) ) return xnode;\r
+ case X_Node_TYPE.WINDOW :\r
+ case X_Node_TYPE.DOCUMENT :\r
+ if( xnode = X_Node_getXNode( v ) ) return xnode;\r
this._rawObject = v;\r
this._xnodeType = 2;\r
- this._state = X.Dom.State.DISPLAY_BLOCK;\r
+ this._state = X_Node_State.DISPLAY_BLOCK;\r
break; */\r
default :\r
if( Node.none ) return Node.none;\r
}\r
);\r
\r
-var Node = X.Dom.Node;\r
-\r
-Node.IS_XNODE = 1;\r
-Node.IS_RAW_HTML = 2;\r
-Node.IS_RAW_TEXT = 3;\r
-Node.IS_HTML_STRING = 4;\r
-Node.IS_STRING = 5;\r
-//Node.IS_DOC_FRAG = 6;\r
-Node.IS_XNODE_LIST = 7;\r
-Node.IS_WINDOW = 8;\r
-Node.IS_DOCUMENT = 9;\r
-Node.IS_IMAGE = 10;\r
-\r
-Node._getType = function( v ){\r
- if( v === '' ) return Node.IS_STRING;\r
+function X_Node_getType( v ){\r
+ if( v === '' ) return X_Node_TYPE.STRING;\r
if( !v ) return 0;\r
- if( v === window ) return Node.IS_WINDOW;\r
- if( v === document ) return Node.IS_DOCUMENT;\r
- if( v.constructor === Node ) return Node.IS_XNODE;\r
- if( v.constructor === X.Dom.NodeList ) return Node.IS_XNODE_LIST;\r
- if( X.Type.isHTMLElement( v ) ) return Node.IS_RAW_HTML;\r
- if( v.nodeType === 3 ) return Node.IS_RAW_TEXT;\r
- if( X.Type.isImage( v ) ) return Node.IS_IMAGE;\r
- if( typeof v === 'string' ){\r
- return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? Node.IS_HTML_STRING : Node.IS_STRING;\r
+ if( v === window ) return X_Node_TYPE.WINDOW;\r
+ if( v === document ) return X_Node_TYPE.DOCUMENT;\r
+ if( v.constructor === Node ) return X_Node_TYPE.XNODE;\r
+ if( v.constructor === X.Dom.NodeList ) return X_Node_TYPE.XNODE_LIST;\r
+ if( X.Type.isHTMLElement( v ) ) return X_Node_TYPE.RAW_HTML;\r
+ if( v.nodeType === 3 ) return X_Node_TYPE.RAW_TEXT;\r
+ if( X.Type.isImage( v ) ) return X_Node_TYPE.IMAGE;\r
+ if( X.Type.isString( v ) ){\r
+ return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? X_Node_TYPE.HTML_STRING : X_Node_TYPE.STRING;\r
};\r
- //if( v.nodeType === 11 ) return Node.IS_DOC_FRAG;\r
+ //if( v.nodeType === 11 ) return X_Node_TYPE.DOC_FRAG;\r
return 0;\r
};\r
-Node._getXNode = function( v ){\r
+function X_Node_getXNode( v ){\r
var uid, i, chashe, xnode;\r
- switch( Node._getType( v ) ){\r
- case Node.IS_XNODE :\r
- case Node.IS_XNODE_LIST :\r
+ switch( X_Node_getType( v ) ){\r
+ case X_Node_TYPE.XNODE :\r
+ case X_Node_TYPE.XNODE_LIST :\r
return v;\r
- case Node.IS_RAW_HTML :\r
- case Node.IS_IMAGE :\r
+ case X_Node_TYPE.RAW_HTML :\r
+ case X_Node_TYPE.IMAGE :\r
// fake TextNode too.\r
if( X_UA_DOM.IE4 ){\r
uid = v.getAttribute( 'UID' );\r
return uid && Node._chashe[ uid ];\r
};\r
return v.UID && Node._chashe[ v.UID ];\r
- case Node.IS_WINDOW :\r
+ case X_Node_TYPE.WINDOW :\r
return Node._window;\r
- case Node.IS_DOCUMENT :\r
+ case X_Node_TYPE.DOCUMENT :\r
return Node._document;\r
- case Node.IS_RAW_TEXT :\r
+ case X_Node_TYPE.RAW_TEXT :\r
if( v.UID ) return Node._chashe[ v.UID ];\r
for( chashe = Node._chashe, i = chashe.length; i; ){\r
if( ( xnode = Node._chashe[ --i ] ) && ( xnode._rawObject === v ) ) return xnode;\r
\r
Node.create = function( tag, opt_attrs, opt_css ){\r
var list, i;\r
- switch( Node._getType( tag ) ){\r
- case Node.IS_STRING :\r
+ switch( X_Node_getType( tag ) ){\r
+ case X_Node_TYPE.STRING :\r
Node._newByTag = true;\r
return new Node( tag, opt_attrs, opt_css );\r
- case Node.IS_HTML_STRING :\r
+ case X_Node_TYPE.HTML_STRING :\r
list = X.Dom.parse( tag, true );\r
for( i = list.length; 1 < i; ){\r
list[ --i ].destroy();\r
\r
if( !( xnodes = this._xnodes ) ) this._xnodes = xnodes = [];\r
\r
- switch( Node._getType( v ) ){\r
- case Node.IS_RAW_HTML :\r
- case Node.IS_RAW_TEXT :\r
+ switch( X_Node_getType( v ) ){\r
+ case X_Node_TYPE.RAW_HTML :\r
+ case X_Node_TYPE.RAW_TEXT :\r
v = new Node( v );\r
break;\r
- case Node.IS_HTML_STRING :\r
- case Node.IS_STRING :\r
+ case X_Node_TYPE.HTML_STRING :\r
+ case X_Node_TYPE.STRING :\r
return this.append.apply( this, X.Dom.parse( v, true ) );\r
- case Node.IS_XNODE :\r
+ case X_Node_TYPE.XNODE :\r
if( v._xnodeType !== 1 && v._xnodeType !== 3 ) return this;\r
// 親の xnodes から v を消す\r
if( v.parent ){\r
return this;\r
};\r
\r
- switch( Node._getType( v ) ){\r
- case Node.IS_RAW_HTML :\r
- case Node.IS_RAW_TEXT :\r
+ switch( X_Node_getType( v ) ){\r
+ case X_Node_TYPE.RAW_HTML :\r
+ case X_Node_TYPE.RAW_TEXT :\r
v = new Node( v );\r
break;\r
- case Node.IS_HTML_STRING :\r
- case Node.IS_STRING :\r
+ case X_Node_TYPE.HTML_STRING :\r
+ case X_Node_TYPE.STRING :\r
v = X.Dom.parse( v, true );\r
for( i = v.length; i; ){\r
this.appendAt( start, v[ --i ] );\r
};\r
return this;\r
- case Node.IS_XNODE :\r
+ case X_Node_TYPE.XNODE :\r
if( v._xnodeType !== 1 && v._xnodeType !== 3 ) return this;\r
// 親の xnodes から v を消す\r
if( v.parent ){\r
};\r
\r
Node.prototype.appendTo = function( parent, opt_index ){\r
- switch( Node._getType( parent ) ){\r
- case Node.IS_RAW_HTML :\r
+ switch( X_Node_getType( parent ) ){\r
+ case X_Node_TYPE.RAW_HTML :\r
parent = new Node( parent );\r
break;\r
- case Node.IS_HTML_STRING :\r
+ case X_Node_TYPE.HTML_STRING :\r
parent = X.Dom.parse( parent, true );\r
parent = parent[ 0 ] || parent;\r
- case Node.IS_XNODE :\r
+ case X_Node_TYPE.XNODE :\r
break;\r
default :\r
return this;\r
var elm, type, xnodes, i;\r
if( !v || this._xnodeType !== 1 ) return false;\r
// contains ie4+\r
- if( ( elm = this._rawObject || this._ie4getRawNode && this._ie4getRawNode() ) && document.contains && ( type = Node._getType( v ) ) && ( type === Node.IS_RAW_HTML || type === Node.IS_RAW_TEXT ) ){\r
+ if( ( elm = this._rawObject || this._ie4getRawNode && this._ie4getRawNode() ) && document.contains && ( type = X_Node_getType( v ) ) && ( type === X_Node_TYPE.RAW_HTML || type === X_Node_TYPE.RAW_TEXT ) ){\r
return elm.contains( v ); \r
};\r
//if( document.compareDocumentPosition ){\r
if( this._className === v ) return this;\r
v ? ( this._className = v ) : delete this._className;\r
};\r
- this._dirty |= X.Dom.Dirty.CLASSNAME;\r
+ this._dirty |= X_Node_Dirty.CLASSNAME;\r
this._root && this._reserveUpdate();\r
return this;\r
};\r
return this._text;\r
};\r
\r
- if( this._dirty & X.Dom.Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
+ if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
delete this._cssText;\r
};\r
html = !Node._outerFlag ? [] : [\r
'<', this._tag,\r
this._id ? ' id="' + this._id + q : _,\r
this._className ? ' class="' + this._className + q : _,\r
- this._attrText === false ? ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
+ this._attrText === false ? ( this._attrText = X_Node_Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
this._cssText ? ' style="' + this._cssText + q : _,\r
'>' ];\r
\r
if( this._text !== text ){\r
text ? ( this._text = text ) : delete this.text;\r
this._root && this._reserveUpdate();\r
- this._dirty |= X.Dom.Dirty.CONTENT;\r
+ this._dirty |= X_Node_Dirty.CONTENT;\r
};\r
return this;\r
};\r
\r
Node.prototype._startUpdate = function(){\r
var removal, i, xnode, tmp;\r
- if( X.Dom.readyState < X.Dom.Event.DOM_INIT ){\r
+ if( X_Dom_readyState < X_TEMP.SYSTEM_EVENT_INIT ){\r
return;\r
};\r
if( this._updateTimerID ){\r
var elm = this._rawObject,\r
xnodes, l, i, frg, next, k, v;\r
\r
- if( this._state & X.Dom.State.IE5_DISPLAY_NONE_FIX ){\r
+ if( this._state & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
//alert( this._tag + ' ' + !!elm );\r
// filter の効いている要素だけdisplay:none が無視される模様。filter を切ればよい?\r
// 親が、display:none の場合は?\r
} else\r
if( ( xnodes = this._xnodes ) && ( l = xnodes.length ) ) {\r
\r
- /*if( elm.childNodes.length !== l && ( frg = X.Dom._useDocumentFragment ) ){\r
+ /*if( elm.childNodes.length !== l && ( frg = X_Node_useDocumentFragment ) ){\r
for( i = 0; i < l; ++i ){\r
frg.appendChild( xnodes[ i ]._actualCreate( true ) );\r
};\r
\r
delete this._fontSize;\r
this._dirty && this._updateRawNode( elm );\r
- if( this._state & X.Dom.State.IE5_DISPLAY_NONE_FIX ){\r
+ if( this._state & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
return nextElement;\r
};\r
return elm;\r
xnodes = this._xnodes;\r
l = xnodes ? xnodes.length : 0;\r
\r
- if( this._dirty & X.Dom.Dirty.IE4_TEXTNODE_FIX || ( this._state & X.Dom.State.IE4_ONLY_TEXT && ( l !== 1 || xnodes[ 0 ]._xnodeType !== 3 ) ) ){ // 1 < l && elm.children.length === 0\r
+ if( this._dirty & X_Node_Dirty.IE4_TEXTNODE_FIX || ( this._state & X_Node_State.IE4_ONLY_TEXT && ( l !== 1 || xnodes[ 0 ]._xnodeType !== 3 ) ) ){ // 1 < l && elm.children.length === 0\r
html = [];\r
for( i = 0; i < l; ++i ){\r
html[ i ] = xnodes[ i ]._actualCreate();\r
for( i = 0; i < l; ++i ){\r
xnodes[ i ]._afterActualCreate();\r
};\r
- this._state &= ~X.Dom.State.IE4_ONLY_TEXT;\r
+ this._state &= ~X_Node_State.IE4_ONLY_TEXT;\r
} else\r
- if( this._state & X.Dom.State.IE4_ONLY_TEXT ){ // textNode が swap した場合の検出は、_root で行う\r
+ if( this._state & X_Node_State.IE4_ONLY_TEXT ){ // textNode が swap した場合の検出は、_root で行う\r
text = xnodes[ 0 ];\r
if( text._dirty || !text._root ){\r
elm.innerHTML = text._text;\r
var attrs, rename, k, v;\r
\r
// textNode\r
- if( this._dirty & X.Dom.Dirty.CONTENT ){\r
+ if( this._dirty & X_Node_Dirty.CONTENT ){\r
elm.data = X_String_chrReferanceTo( this._text );\r
delete this._dirty;\r
return;\r
};\r
// id\r
- if( this._dirty & X.Dom.Dirty.ID ){\r
+ if( this._dirty & X_Node_Dirty.ID ){\r
this._id ? ( elm.id = this._id ) : ( elm.id && elm.removeAttribute( 'id' ) ); \r
};\r
// className\r
- if( this._dirty & X.Dom.Dirty.CLASSNAME ){\r
+ if( this._dirty & X_Node_Dirty.CLASSNAME ){\r
this._className ? ( elm.className = this._className ) : ( elm.className && elm.removeAttribute( X.UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-? \r
\r
// ie5 only\r
- if( X.Dom.State.IE5_DISPLAY_NONE_FIX && elm.currentStyle.display === 'none' ){\r
+ if( X_Node_State.IE5_DISPLAY_NONE_FIX && elm.currentStyle.display === 'none' ){\r
this._actualRemove();\r
- this._state |= X.Dom.State.IE5_DISPLAY_NONE_FIX;\r
+ this._state |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
return;\r
};\r
};\r
// style\r
// TODO display:none の場合、更新をスキップ\r
- if( this._dirty & X.Dom.Dirty.CSS ){\r
+ if( this._dirty & X_Node_Dirty.CSS ){\r
if( this._cssText !== null || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
X.UA.Opera78 || X.UA.NN6 ?\r
elm.setAttribute( 'style', this._cssText ) : // opera8用\r
};\r
};\r
\r
- if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+ if( this._dirty & X_Node_Dirty.IE_FILTER ){\r
elm.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
};\r
\r
// attr\r
// TODO display:none の場合、更新をスキップ\r
- if( this._dirty & X.Dom.Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
- rename = X.Dom.Attr.renameForDOM;\r
+ if( this._dirty & X_Node_Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
+ rename = X_Node_Attr.renameForDOM;\r
for( k in attrs ){\r
if( !X.UA.MacIE && ( X.UA.IE5 || X.UA.IE55 ) ){ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
if( this._tag === 'TEXTAREA' && k === 'value' ){\r
// TODO IE では input, なぜか buttonも、type の変更が出来ない、object も 同値で置き換えようとしても不可\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
- ( elm[ rename[ k ] || k ] = X.Dom.Attr.noValue[ k ] ? k : v ); \r
+ ( elm[ rename[ k ] || k ] = X_Node_Attr.noValue[ k ] ? k : v ); \r
\r
};\r
delete this._newAttrs;\r
var attrs, rename, k, v;\r
\r
// fake textNode\r
- if( this._dirty & X.Dom.Dirty.CONTENT ){\r
+ if( this._dirty & X_Node_Dirty.CONTENT ){\r
elm.innerText = this._text;\r
delete this._dirty;\r
return;\r
* title、className、id、lang、language には setAttribute でなく、element.id で直接読み書きできる\r
*/ \r
// id\r
- if( this._dirty & X.Dom.Dirty.CONTENT ) elm.setAttribute( 'id', this._id || ( 'ie4uid' + xnode._uid ) );\r
+ if( this._dirty & X_Node_Dirty.CONTENT ) elm.setAttribute( 'id', this._id || ( 'ie4uid' + xnode._uid ) );\r
\r
// className\r
- if( this._dirty & X.Dom.Dirty.CLASSNAME ){\r
+ if( this._dirty & X_Node_Dirty.CLASSNAME ){\r
this._className ? ( elm.className = this._className ) : elm.removeAttribute( 'class' );\r
};\r
// style\r
- if( this._dirty & X.Dom.Dirty.CSS ){\r
+ if( this._dirty & X_Node_Dirty.CSS ){\r
if( this._cssText !== null || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
elm.style.cssText = this._cssText;\r
} else {\r
};\r
};\r
\r
- if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+ if( this._dirty & X_Node_Dirty.IE_FILTER ){\r
this._rawObject.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
};\r
\r
// attr\r
- if( this._dirty & X.Dom.Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
- rename = X.Dom.Attr.renameForDOM;\r
+ if( this._dirty & X_Node_Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
+ rename = X_Node_Attr.renameForDOM;\r
for( k in attrs ){\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
this._tag === 'TEXTAREA' && k === 'value' ?\r
( elm.innerText = v ) :\r
- elm.setAttribute( rename[ k ] || k, X.Dom.Attr.noValue[ k ] ? k : v ); // TODO X.Dom.Attr.noValue[ k ] ? k : v\r
+ elm.setAttribute( rename[ k ] || k, X_Node_Attr.noValue[ k ] ? k : v ); // TODO X_Node_Attr.noValue[ k ] ? k : v\r
};\r
delete this._newAttrs;\r
};\r
};\r
\r
if( !elm ){\r
- if( this._dirty & X.Dom.Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
+ if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
delete this._cssText;\r
};\r
this._isNew = true;\r
this._rawObject = elm =\r
- X.Dom._strictElmCreation ?\r
+ X_Node_strictElmCreation ?\r
document.createElement( [\r
'<', this._tag,\r
' UID="', this._uid, '"',\r
this._id ? ' id="' + this._id + '"' : '',\r
this._className ? ' class="' + this._className + '"' : '',\r
- this._attrText === false ? ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
+ this._attrText === false ? ( this._attrText = X_Node_Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
this._cssText ? ' style="' + this._cssText + '"' : '',\r
'>' ].join( '' ) ) :\r
document.createElement( this._tag );\r
};\r
- if( X.Dom._useDocumentFragment ){\r
+ if( X_Node_useDocumentFragment ){\r
if( ( xnodes = this._xnodes ) && ( l = xnodes.length ) ){\r
- !isChild && ( frg = X.Dom._useDocumentFragment ).appendChild( elm );\r
+ !isChild && ( frg = X_Node_useDocumentFragment ).appendChild( elm );\r
for( i = 0; i < l; ++i ){\r
elm.appendChild( xnodes[ i ]._actualCreate( true ) );\r
};\r
} else {\r
if( this._rawObject && !isChild ) this._actualRemove( true );\r
\r
- if( this._dirty & X.Dom.Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
+ if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
delete this._cssText;\r
};\r
\r
html = [\r
'<', this._tag, ' id=', ( this._id || ( 'ie4uid' + uid ) ), ' UID="', uid, '"',\r
this._className ? ' class="' + this._className + '"' : '',\r
- this._attrText === false ? ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
+ this._attrText === false ? ( this._attrText = X_Node_Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
this._cssText ? ' style="' + this._cssText + '"' : '',\r
'>' ];\r
\r
// only textnode\r
html[ n ] = xnodes[ 0 ]._text;\r
++n;\r
- this._state |= X.Dom.State.IE4_ONLY_TEXT;\r
+ this._state |= X_Node_State.IE4_ONLY_TEXT;\r
} else {\r
for( i = 0; i < l; ++i ){\r
html[ n ] = xnodes[ i ]._actualCreate( true );\r
l = xnodes && xnodes.length;\r
\r
if( this._isNew ){\r
- if( !X.Dom._useDocumentFragment && l ){// docFrg が使えない場合、doc 追加後に子を追加\r
+ if( !X_Node_useDocumentFragment && l ){// docFrg が使えない場合、doc 追加後に子を追加\r
for( i = 0; i < l; ++i ){\r
elm.appendChild( xnodes[ i ]._actualCreate( true ) );\r
};\r
};\r
- if( X.Dom._strictElmCreation ){\r
- if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+ if( X_Node_strictElmCreation ){\r
+ if( this._dirty & X_Node_Dirty.IE_FILTER ){\r
elm.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
};\r
delete this._dirty;\r
} else {\r
elm.UID = this._uid;\r
this._newAttrs = this._attrs;\r
- this._dirty = X.Dom.Dirty.ID | X.Dom.Dirty.CLASSNAME | X.Dom.Dirty.CSS | X.Dom.Dirty.ATTR | X.Dom.Dirty.IE_FILTER;\r
+ this._dirty = X_Node_Dirty.ID | X_Node_Dirty.CLASSNAME | X_Node_Dirty.CSS | X_Node_Dirty.ATTR | X_Node_Dirty.IE_FILTER;\r
this._updateRawNode( elm );\r
};\r
\r
};\r
};\r
// textarea への value の適用はここで\r
- if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+ if( this._dirty & X_Node_Dirty.IE_FILTER ){\r
this._ie4getRawNode().style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
};\r
delete this._dirty;\r
if( !elm ) return;\r
this._xnodeType === 1 && X_EventDispatcher_toggleAllEvents( this, false );// イベントの退避\r
\r
- if( X.Dom.Attr.HAS_VALUE[ this._tag ] && ( !this._newAttrs || !X_Object_inObject( 'value', this._newAttrs ) ) ){\r
+ if( X_Node_Attr.HAS_VALUE[ this._tag ] && ( !this._newAttrs || !X_Object_inObject( 'value', this._newAttrs ) ) ){\r
this._attrs.value = elm.value;\r
};\r
elm.removeAttribute( 'id' ); // ?\r
X.Dom.Event = function( e, xnode ){\r
var _type = e.type,\r
type,\r
- changedTouches, targetTouches, targetIDs, changedTargets, isEnd,\r
+ touches, events,\r
altKey, ctrlKey, metaKey, shiftKey, target, related,\r
- i, n, time, touch, ev;\r
+ elm, i, n, time, touch, ev;\r
\r
//this._event = e;\r
this.type = type = X.Dom.Event.RenameTo[ _type ] || _type;\r
this.buttons = e.buttons;\r
\r
this.pointerId = e.pointerId; \r
- this.target = Node._getXNode( e.target );\r
- this.relatedTarget = Node._getXNode( e.relatedTarget ); // xnode\r
+ this.target = X_Node_getXNode( e.target );\r
+ this.relatedTarget = X_Node_getXNode( e.relatedTarget ); // xnode\r
this.isPrimary = e.isPrimary;\r
this.hwTimestamp = e.hwTimestamp;\r
this.timestamp = e.timestamp;\r
ctrlKey = e.ctrlKey;\r
metaKey = e.metaKey;\r
shiftKey = e.shiftKey;\r
- time = X.getTime();\r
+ time = X_Timer_now();\r
for( i = touches.length; i; ){\r
touch = touches[ --i ];\r
target = touch.target;\r
events[ i ] = {\r
type : type,\r
pointerType : 'touch',\r
- target : Node._getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
+ target : X_Node_getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
currentTarget : xnode,\r
- relatedTarget : Node._getXNode( related.nodeType === 3 ? related.parentNode : related ), // xnode\r
+ relatedTarget : X_Node_getXNode( related.nodeType === 3 ? related.parentNode : related ), // xnode\r
isPrimary : true,\r
hwTimestamp : time,\r
timestamp : time,\r
this.pressure = ( this.button !== -1 ? 0.5 : 0 );\r
\r
elm = e.target;\r
- this.target = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnodetouch.target;\r
+ this.target = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnodetouch.target;\r
this.isPrimary = true;\r
- this.hwTimestamp = this.timestamp = X.getTime(); \r
+ this.hwTimestamp = this.timestamp = X_Timer_now(); \r
this.altKey = e.altKey;\r
this.ctrlKey = e.ctrlKey;\r
this.metaKey = e.metaKey;\r
\r
//http://www.quirksmode.org/js/events_properties.html\r
if( elm = e.target ){\r
- this.target = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnode\r
+ this.target = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnode\r
};\r
if( elm = e.relatedTarget ){\r
- this.relatedTarget = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm ); // xnode\r
+ this.relatedTarget = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm ); // xnode\r
};\r
\r
if( type === 'wheel' ){\r
};\r
} else {\r
X.Dom.Event = function( e, xnode, element ){\r
- var btn;\r
+ var _type = e.type, btn, type;\r
\r
- this.type = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
- this.target = Node._getXNode( e.srcElement ); // xnode\r
+ this.type = X.Dom.Event.RenameTo[ _type ] || _type;\r
+ this.target = X_Node_getXNode( e.srcElement ); // xnode\r
if( this.target && this.target._xnodeType === 3 ) this.target = this.target.parent; // ie4 の fake Textnode がヒットしていないか?\r
this.currentTarget = xnode; // xnode\r
- this.relatedTarget = Node._getXNode( e.formElement || e.toElement ); // xnode\r
+ this.relatedTarget = X_Node_getXNode( e.formElement || e.toElement ); // xnode\r
this.eventPhase = e.srcElement === element ? 2: 3;\r
\r
this.keyCode = e.keyCode;\r
this.shiftKey = e.shiftKey; \r
\r
// http://www.programming-magic.com/20090127231544/\r
- switch( this.type ){\r
+ switch( _type ){\r
case 'click' :\r
case 'dblclick' :\r
this.button = 0;\r
};\r
this.buttons = e.button;\r
\r
- if( type = X.Dom.Event.toPointer[ e.type ] ){\r
+ if( type = X.Dom.Event.toPointer[ _type ] ){\r
this.type = type;\r
this.clientX = e.clientX;\r
this.clientY = e.clientY;\r
//this.screenX = e.screenX;\r
//this.screenY = e.screenY;\r
\r
- //if( X.Dom._root ){ // uuu...\r
- this.pageX = e.clientX + X.Dom._root.scrollLeft;\r
- this.pageY = e.clientY + X.Dom._root.scrollTop;\r
+ //if( X_Dom_rootElement ){ // uuu...\r
+ this.pageX = e.clientX + X_Dom_rootElement.scrollLeft;\r
+ this.pageY = e.clientY + X_Dom_rootElement.scrollTop;\r
// DOMAssistant 2.8.1\r
//event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));\r
//event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); \r
};\r
};\r
\r
-X.Dom.Event.DOM_PRE_INIT = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.DOM_BUILDER_COMPLETE= ++X.Event._LAST_EVENT;\r
-X.Dom.Event.DOM_INIT = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.XDOM_READY = ++X.Event._LAST_EVENT;\r
X.Dom.Event.VIEW_ACTIVATE = ++X.Event._LAST_EVENT;\r
X.Dom.Event.VIEW_DEACTIVATE = ++X.Event._LAST_EVENT;\r
X.Dom.Event.VIEW_RESIZED = ++X.Event._LAST_EVENT;\r
X.Dom.Event.Rename[ 'pointerup' ] = [ 'touchup', 'mouseup' ];\r
X.Dom.Event.Rename[ 'pointermove' ] = [ 'touchmove', 'mousemove' ];\r
X.Dom.Event.Rename[ 'pointercancel' ] = 'touchcancel';\r
- X.Dom.Event.Rename[ 'click' ] = [ 'click', 'tap' ];\r
+ //X.Dom.Event.Rename[ 'click' ] = [ 'click', 'tap' ]; // ループになってしまう!\r
} else {\r
X.Dom.Event.Rename[ 'pointerdown' ] = 'mousedown';\r
X.Dom.Event.Rename[ 'pointerup' ] = 'mouseup';\r
\r
/* for ie9+/Mozilla/Opera9 */\r
if( X_UA_EVENT.W3C ){\r
- Node._document.listenOnce( 'DOMContentLoaded', X.Dom._init );\r
+ Node._document.listenOnce( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );\r
} else\r
if( 6 <= X.UA.IE && X.inHead ){\r
// if this script in Head\r
s.onreadystatechange = null;\r
s.parentNode.removeChild( s );\r
delete X_TEMP._script;\r
- X.Dom._init && X.Dom._init();\r
+ X_TEMP.onDomContentLoaded && X_TEMP.onDomContentLoaded();\r
};\r
};\r
};\r
// http://lists.apple.com/archives/web-dev/2003/Oct/msg00036.html\r
if( X.UA.WebKit || X.UA.Safari < 3 ){ // sniff\r
X.Timer.add( 16, function(){\r
- if( !X.Dom._init ) return X_Callback_UN_LISTEN;\r
- if( document.readyState === 'loaded' || document.readyState === 'complete' ) return X.Dom._init();\r
+ if( !X_TEMP.onDomContentLoaded ) return X_Callback_UN_LISTEN;\r
+ if( document.readyState === 'loaded' || document.readyState === 'complete' ) return X_TEMP.onDomContentLoaded();\r
});\r
};\r
\r
/* for other browsers */\r
-Node._window.listenOnce( 'load', X.Dom._init );\r
+Node._window.listenOnce( 'load', X_TEMP.onDomContentLoaded );\r
//\r
-X.Dom.listenOnce( X.Dom.Event.XDOM_READY, function(e){\r
- console.log( 'X.Dom XDomReady ' + X.Dom.readyState );\r
+X.Dom.listenOnce( X.Event.XDOM_READY, function(e){\r
+ console.log( 'X.Dom XDomReady ' + X_Dom_readyState );\r
} );\r
\r
X.Dom.listen( X.Dom.Event.VIEW_RESIZED, function(e){ console.log( 'X.Dom VIEW_RESIZED ' + e.w + ' x ' + e.h ); } );\r
\r
\r
\r
-X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){\r
+X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){\r
\r
var node = Node._systemNode,\r
\r
console.log( 'xnode.width() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'width' );\r
return this._rawObject.offsetWidth;\r
console.log( 'xnode.height() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'height' );\r
return this._rawObject.offsetHeight;\r
console.log( 'xnode.width() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'width' );\r
return this._rawObject.clientWidth;\r
console.log( 'xnode.height() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'height' );\r
return this._rawObject.clientHeight;\r
console.log( 'xnode.width() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'width' );\r
return this._rawObject.scrollWidth;\r
console.log( 'xnode.height() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'height' );\r
return this._rawObject.scrollHeight;\r
console.log( 'xnode.scrollLeft() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'width' );\r
return this._rawObject.scrollLeft;\r
console.log( 'xnode.scrollTop() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'width' );\r
return this._rawObject.scrollTop;\r
console.log( 'xnode.x() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'left' );\r
// this.css( X.Dom.Style.Unit.px, 'translateX' );\r
console.log( 'xnode.y() : not belong tree.' );\r
return 0;\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
if( X_UA_DOM.W3C ){\r
// this.css( X.Dom.Style.Unit.px, 'top' );\r
// this.css( X.Dom.Style.Unit.px, 'transisitonY' );\r
console.log( 'xnode.offset() : not belong tree.' );\r
return { x : 0, y : 0 };\r
};\r
- if( this._state & X.Dom.State.DISPLAY_NONE ) return 0;\r
+ if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
\r
if( X.Dom.Node._body === this || X.Dom.Node._html === this ){\r
return { x : 0, y : 0 };\r
-X.Dom.Attr = {\r
+var X_Node_Attr = {\r
noValue : {\r
checked : 1,\r
compact : 1,\r
// 動的に生成した input 要素を文書ツリーに挿入する前に設定した checked 属性は反映されず、defaultChecked だと反映される\r
// 先頭にスペース\r
objToAttrText : function( obj ){\r
- var noValue = X.Dom.Attr.noValue,\r
+ var noValue = X_Node_Attr.noValue,\r
attrs = [ '' ], n = 0, p, v;\r
if( !obj ) return ''; // Opera7\r
for( p in obj ){\r
for( name in renameForDOM ){\r
renameForTag[ renameForDOM[ name ] ] = name;\r
};\r
-})( X.Dom.Attr.renameForDOM, X.Dom.Attr.renameForTag );\r
+})( X_Node_Attr.renameForDOM, X_Node_Attr.renameForTag );\r
\r
\r
\r
/* --------------------------------------\r
* attribute\r
- * X.Dom.Attr.toIndex に定義されている 属性の場合\r
+ * X_Node_Attr.toIndex に定義されている 属性の場合\r
* \r
* http://nanto.asablo.jp/blog/2005/10/29/123294\r
* className, onclick等 はここで設定しない\r
};\r
if( f ){\r
this._attrText = false;\r
- this._dirty |= X.Dom.Dirty.ATTR;\r
+ this._dirty |= X_Node_Dirty.ATTR;\r
this._root && this._reserveUpdate(); \r
};\r
return this;\r
// setter\r
if( this._setAttr( attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
this._attrText = false;\r
- this._dirty |= X.Dom.Dirty.ATTR;\r
+ this._dirty |= X_Node_Dirty.ATTR;\r
this._root && this._reserveUpdate();\r
};\r
return this;\r
case 'selected' :\r
case 'disabled' : \r
case 'selectedIndex' :\r
- if( X.Dom.Attr.HAS_VALUE[ this._tag ] ){\r
+ if( X_Node_Attr.HAS_VALUE[ this._tag ] ){\r
if( this._newAttrs && X_Object_inObject( nameOrObj, this._newAttrs ) ) return this._newAttrs[ nameOrObj ];\r
if( elm = X_UA_DOM.IE4 ? this._rawObject || this._ie4getRawNode() : this._rawObject ){\r
if( !attrs ) attrs = this._attrs = {};\r
};\r
break;\r
};\r
- return attrs && attrs[ X.Dom.Attr.renameForTag[ nameOrObj ] || nameOrObj ];\r
+ return attrs && attrs[ X_Node_Attr.renameForTag[ nameOrObj ] || nameOrObj ];\r
};\r
};\r
X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){\r
v = ( v !== 'ie4uid' + this._uid ) ? v : undefined;\r
if( v !== this._id ){\r
this._id = v;\r
- this._dirty |= X.Dom.Dirty.ID;\r
+ this._dirty |= X_Node_Dirty.ID;\r
this._root && this._reserveUpdate();\r
};\r
return; \r
return;\r
};\r
\r
- name = X.Dom.Attr.renameForTag[ name ] || name;\r
+ name = X_Node_Attr.renameForTag[ name ] || name;\r
if( attrs[ name ] === v ) return;\r
\r
if( v == null ){\r
ieFix = X.Dom.Style.IE_FILTER_FIX;
for( p in nameOrObj ){
if( ieFix[ p ] ){
- this._dirty |= X.Dom.Dirty.IE_FILTER;
+ this._dirty |= X_Node_Dirty.IE_FILTER;
};
v = nameOrObj[ p ];
v || v === 0 ? css[ camelize( p ) ] = v : delete css[ camelize( p ) ];
if( p === 'display' ){
- v === 'none' ? ( this._state |= X.Dom.State.IE5_DISPLAY_NONE_FIX ) : ( this._state &= ~X.Dom.State.IE5_DISPLAY_NONE_FIX );
- v === 'none' ? ( this._state |= X.Dom.State.DISPLAY_NONE ) : ( this._state &= ~X.Dom.State.DISPLAY_NONE );
+ v === 'none' ? ( this._state |= X_Node_State.IE5_DISPLAY_NONE_FIX ) : ( this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX );
+ v === 'none' ? ( this._state |= X_Node_State.DISPLAY_NONE ) : ( this._state &= ~X_Node_State.DISPLAY_NONE );
};
};
- this._dirty |= X.Dom.Dirty.CSS;
+ this._dirty |= X_Node_Dirty.CSS;
this.parent && this._reserveUpdate();
delete this._cssText;
return this;
v = args[ 1 ];
if( css[ name ] === v ) return this;
if( X.Dom.Style.IE_FILTER_FIX[ name ] ){
- this._dirty |= X.Dom.Dirty.IE_FILTER;
+ this._dirty |= X_Node_Dirty.IE_FILTER;
};
if( !v && v !== 0 ){
delete css[ name ];
css[ name ] = v;
};
delete this._cssText;
- this._dirty |= X.Dom.Dirty.CSS;
+ this._dirty |= X_Node_Dirty.CSS;
if( name === 'display' ){
- v === 'none' ? ( this._state |= X.Dom.State.IE5_DISPLAY_NONE_FIX ) : ( this._state &= ~X.Dom.State.IE5_DISPLAY_NONE_FIX );
- v === 'none' ? ( this._state |= X.Dom.State.DISPLAY_NONE ) : ( this._state &= ~X.Dom.State.DISPLAY_NONE );
+ v === 'none' ? ( this._state |= X_Node_State.IE5_DISPLAY_NONE_FIX ) : ( this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX );
+ v === 'none' ? ( this._state |= X_Node_State.DISPLAY_NONE ) : ( this._state &= ~X_Node_State.DISPLAY_NONE );
};
// parent でなく this._root! でなくて this._state & in tree
this.parent && this._reserveUpdate();
var obj, i, l, attr, name;
if( v === '' ){
delete this._css;
- this._state &= ~X.Dom.State.IE5_DISPLAY_NONE_FIX;
- this._dirty |= X.Dom.Dirty.CSS;
+ this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;
+ this._dirty |= X_Node_Dirty.CSS;
this.parent && this._reserveUpdate();
delete this._cssText;
return this;
} else
if( X.Type.isString( v ) ){
delete this._css;
- this._state &= ~X.Dom.State.IE5_DISPLAY_NONE_FIX;
+ this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;
obj = {};
v = v.split( ';' ); // TODO content ";" などにも対応
for( i = 0, l = v.length; i < l; ++i ){
return this.css( obj );
};
// getter
- if( this._dirty & X.Dom.Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){
+ if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){
delete this._cssText;
};
return this._cssText;
/*
* ここでは HTMLElement のチ1ェックは行わない!
* TODO
- * body に css attr がセットされた場合には X.Dom.baseFontSize をクリア
+ * body に css attr がセットされた場合には X_Dom_baseFontSize をクリア
*/
X.Dom.Node.prototype._getCharSize =
window.getComputedStyle ?
(function(){
Node._body._updateTimerID && Node._body._startUpdate();
- if( this === Node._body && X.Dom.baseFontSize ) return X.Dom.baseFontSize;
+ if( this === Node._body && X_Dom_baseFontSize ) return X_Dom_baseFontSize;
if( this._fontSize ) return this._fontSize;
return this._fontSize = parseFloat( getComputedStyle( this._rawObject, null ).fontSize );
}) :
document.defaultView && document.defaultView.getComputedStyle ?
(function(){
Node._body._updateTimerID && Node._body._startUpdate();
- if( this === Node._body && X.Dom.baseFontSize ) return X.Dom.baseFontSize;
+ if( this === Node._body && X_Dom_baseFontSize ) return X_Dom_baseFontSize;
if( this._fontSize ) return this._fontSize;
return this._fontSize = parseFloat( document.defaultView.getComputedStyle( this._rawObject, null ).fontSize );
}) :
(function(){
var font, vu, v, u, _v;
Node._body._updateTimerID && Node._body._startUpdate();
- if( this === Node._body && X.Dom.baseFontSize ) return X.Dom.baseFontSize;
+ if( this === Node._body && X_Dom_baseFontSize ) return X_Dom_baseFontSize;
if( this._fontSize ) return this._fontSize;
font = this._rawObject.currentStyle.fontSize;
(function(){
var elm, v;
Node._body._updateTimerID && Node._body._startUpdate();
- if( this === Node._body && X.Dom.baseFontSize ) return X.Dom.baseFontSize;
+ if( this === Node._body && X_Dom_baseFontSize ) return X_Dom_baseFontSize;
if( this._fontSize ) return this._fontSize;
this._rawObject.appendChild( elm = document.createElement( 'span' ) );
(function(){
var font, vu, v, u, _v;
Node._body._updateTimerID && Node._body._startUpdate();
- if( this === Node._body && X.Dom.baseFontSize ) return X.Dom.baseFontSize;
+ if( this === Node._body && X_Dom_baseFontSize ) return X_Dom_baseFontSize;
if( this._fontSize ) return this._fontSize;
if( this._css && ( font = this._css.fontSize ) ){
}) :
(function(){
var elm, v;
- if( this === Node._body && X.Dom.baseFontSize ) return X.Dom.baseFontSize;
+ if( this === Node._body && X_Dom_baseFontSize ) return X_Dom_baseFontSize;
Node._body._updateTimerID && Node._body._startUpdate();
if( this._fontSize ) return this._fontSize;
};
} )();
-X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){
+X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){
var xnode = Node._systemNode,
output = X.Dom.Style._UNIT_RATIO = {},
list = 'cm,mm,in,pt,pc'.split( ',' ),
/* --------------------------------------\r
* Fuction Base, multi, getter, setter,\r
*/\r
-X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT, function(){\r
+X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_PRE_INIT, function(){\r
var target = X.Dom.NodeList.prototype,\r
src = X.Dom.Node.prototype,\r
p, v, multi;\r
links, className, attr, flag;\r
\r
/*@+debug[*/\r
- if( X.Dom.readyState < X.Dom.Event.XDOM_READY ){\r
- alert( 'not ready! use X.Dom.listenOnce( X.Dom.Event.XDOM_READY, callback )' );\r
+ if( X_Dom_readyState < X.Event.XDOM_READY ){\r
+ alert( 'not ready! use X.Dom.listenOnce( X.Event.XDOM_READY, callback )' );\r
return;\r
};\r
/*]@+debug*/\r
op = filter[ 1 ];\r
val = filter[ 2 ];\r
\r
- key = X.Dom.Attr.renameForTag[ key ] || key;\r
+ key = X_Node_Attr.renameForTag[ key ] || key;\r
\r
// [class~='val']\r
if( !isXML && key === 'class' && op === 3 ){\r
//flag_call ?\r
// funcAttr( elem, key ) :\r
//useName ?\r
- // elem[ X.Dom.Attr.renameForDOM[ key ] || key ] :\r
+ // elem[ X_Node_Attr.renameForDOM[ key ] || key ] :\r
// elem.getAttribute( key, 2 );\r
flag = attr != null;// && ( !useName || attr !== '' );\r
if( flag && op ){\r
*\r
*/\r
\r
-X_Dom_Parser = {\r
+var X_Dom_Parser = {\r
CHARS : {\r
A:1,B:1,C:1,D:1,E:1,F:1,G:1,H:1,I:1,J:1,K:1,L:1,M:1,N:1,O:1,P:1,Q:1,R:1,S:1,T:1,U:1,V:1,W:1,X:1,Y:1,Z:1,\r
a:2,b:2,c:2,d:2,e:2,f:2,g:2,h:2,i:2,j:2,k:2,l:2,m:2,n:2,o:2,p:2,q:2,r:2,s:2,t:2,u:2,v:2,w:2,x:2,y:2,z:2,\r
*/\r
\r
// Attributes that have their values filled in disabled="disabled"\r
- fillAttrs : X.Dom.Attr.noValue, //{checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};\r
+ fillAttrs : X_Node_Attr.noValue, //{checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};\r
\r
// Special Elements (can contain anything)\r
special : { SCRIPT : 1, STYLE : 1, PLAINTEXT : 1, XMP : 1, TEXTAREA : 1 },\r
exec : function( html, handler, async ){\r
var special = X_Dom_Parser.special,\r
//plainText = X_Dom_Parser.plainText,\r
- startTime = async && X.getTime(),\r
+ startTime = async && X_Timer_now(),\r
_parseStartTag = X_Dom_Parser._parseStartTag,\r
_parseEndTag = X_Dom_Parser._parseEndTag,\r
stack = async ? async[ 1 ] : [],\r
return;\r
};\r
\r
- if( async && startTime + 15 <= X.getTime() && html ){\r
+ if( async && startTime + 15 <= X_Timer_now() && html ){\r
handler.progress( 1 - html.length / async[ 0 ] );\r
X.Timer.once( 0, X_Dom_Parser.exec, [ html, handler, async ] );\r
return;\r
};\r
},\r
\r
- parseStartTag : function( stack, last, handler, tagName, attrs, unary, index ) {\r
+ parseStartTag : function( stack, last, handler, tagName, attrs, empty, index ) {\r
var inline = X_Dom_Parser.inline,\r
parseEndTag = X_Dom_Parser.parseEndTag,\r
sisters = X_Dom_Parser.sisters;\r
};\r
};\r
last && X_Dom_Parser.closeSelf[ tagName ] === 1 && ( last === tagName || ( sisters[ tagName ] && sisters[ tagName ][ last ] === 1 ) ) && parseEndTag( stack, handler, last );\r
- unary = unary || X_Dom_Parser.empty[ tagName ];\r
- !unary && ( stack[ stack.length ] = tagName );\r
+ empty = empty || X_Dom_Parser.empty[ tagName ];\r
+ !empty && ( stack[ stack.length ] = tagName );\r
\r
- return handler.start( tagName, attrs, unary, index );\r
+ return handler.start( tagName, attrs, empty, index );\r
},\r
\r
parseEndTag : function( stack, handler, tagName ) {\r
* http://kojs.sukobuto.com/docs/visible-binding\r
* IE6 には、「空の span エレメントに続く空白は無視される」という謎な癖があります。 \r
*/\r
-X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT,\r
+X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_PRE_INIT,\r
X_UA_DOM.W3C ?\r
(function(){\r
var r = Node._body,\r
l = async ? 0 : xnodes.length,\r
stack = async ? async.stack : [],\r
done = async ? async.done : 0,\r
- startTime = X.getTime(), \r
+ startTime = X_Timer_now(), \r
current = async ? async.current : {\r
me : parent,\r
xnodes : xnodes,\r
continue;\r
};\r
\r
- if( startTime + 16 <= X.getTime() ){\r
+ if( startTime + 16 <= X_Timer_now() ){\r
current.i = i;\r
if( async ){\r
async.current = i < l && current;\r
current = null;\r
};\r
// complete\r
- X.Dom.asyncDispatch( 0, X.Dom.Event.DOM_BUILDER_COMPLETE );\r
+ X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_XTREE );\r
elmProgress.parentNode ? elmProgress.parentNode.removeChild( elmProgress ) : ( elmProgress.outerHTML = '' );\r
delete X_TEMP.asyncCreateTree;\r
delete X_TEMP.bindElementToXnode;\r
};\r
\r
// textNode がある\r
- ( current.flag & 6 ) && ( parent._dirty |= X.Dom.Dirty.IE4_TEXTNODE_FIX );\r
+ ( current.flag & 6 ) && ( parent._dirty |= X_Node_Dirty.IE4_TEXTNODE_FIX );\r
});\r
\r
console.log( 'X.Dom.Builder' );\r
-console.log( 'bootTime : ' + ( X.getTime() - X.bootTime ) );
\ No newline at end of file
+console.log( 'bootTime : ' + ( X_Timer_now() - X.bootTime ) );
\ No newline at end of file
navigator.mimeTypes[ 'application/x-shockwave-flash' ] &&
navigator.mimeTypes[ 'application/x-shockwave-flash' ].enabledPlugin,
+/*
+ * ie11 の 互換モード(8,7)では、Silverlight が動作しない?
+ */
X_Pulgin_SILVER_LIGHT_VERSION =
!X.UA.IE && navigator.plugins[ 'Silverlight Plug-In' ] ?
parseFloat( navigator.plugins[ 'Silverlight Plug-In' ].version ) :
- X.UA.ActiveX && 6 <= X.UA.IE ? (function(){
+ X.UA.ActiveX && 6 <= X.UA.IE && !X.UA.IECompat ? (function(){
return eval( 'var a,i=0;try{a=new ActiveXObject("AgControl.AgControl");for(i=5;i;--i)if(a.IsVersionSupported(i+".0"))break;}catch(e){i=0}i' );
})() :
0,
\r
Constructor : function( html ){\r
\r
- this._name = 'hidden-iframe-' + X.getTime();\r
+ this._name = 'hidden-iframe-' + X_Timer_now();\r
// https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js\r
\r
this.xnodeIframe = X.Dom.Node._body.create(\r
// TODO onlineevent offlineevent, netspeed\r
+// local への通信に対しては、netspeed を更新しない\r
X.Net = {\r
\r
xhrGet : function( url ){\r
};\r
\r
\r
-X_AudioProxy = X.EventDispatcher.inherits(\r
+var X_AudioProxy = X.EventDispatcher.inherits(\r
'X.AV.AudioProxy',\r
X.Class.POOL_OBJECT,\r
{\r
* このページのサンプルは sl5+firefox32 環境で動いている。xaml を js から利用する形ではなく、.xap を sl4 以下で作るのがよさそう.\r
*/\r
this.proxy = proxy;\r
- this._onload = 'XAudioSilverlightOnLoad';// + ( ++X_Audio_SLAudio_uid );\r
+ this._onload = 'XAudioSilverlightOnLoad' + ( ++X_Audio_SLAudio_uid );\r
this._callback = window[ this._onload ] = X_Callback_create( this, this.onSLReady, [ option.autoplay ] );\r
this.xnodeObject = X.Dom.Node._body\r
.create( 'object', {\r
this._callback.kill();\r
delete this._callback;\r
\r
+ if( sender.findName('media') ) alert( 'exist' );\r
+\r
sender.children.add(\r
sender.GetHost().\r
content.\r
this.pointX = point.pageX;\r
this.pointY = point.pageY;\r
\r
- this.startTime = e.timeStamp || X.getTime();\r
+ this.startTime = e.timeStamp || X.Timer.now();\r
\r
this.uinodeRoot.listen( X.UI.Event.DRAG, this );\r
this.uinodeRoot.listen( X.UI.Event.DRAG_END, this );\r
newX = this.x + deltaX,\r
newY = this.y + deltaY,\r
c1, c2, scale,\r
- timestamp = e.timeStamp ||X.getTime(), ret;\r
+ timestamp = e.timeStamp ||X.Timer.now(), ret;\r
\r
//if (this.options.onBeforeScrollMove) this.options.onBeforeScrollMove.call(this, e);\r
if( ( ret = this._trigger( X.UI.Event.SCROLL_BEFORE_MOVE ) ) & X.Callback.PREVENT_DEFAULT ){\r
var point = hasTouch ? e.changedTouches[0] : e,\r
momentumX = { dist:0, time:0 },\r
momentumY = { dist:0, time:0 },\r
- duration = ( e.timeStamp ||X.getTime() ) - this.startTime,\r
+ duration = ( e.timeStamp ||X.Timer.now() ) - this.startTime,\r
newPosX = this.x,\r
newPosY = this.y,\r
distX, distY,\r
//step.time ? X.Dom.Event.add( this.scroller, TRNEND_EV, this ) /* this._bind(TRNEND_EV) */ : this._resetPos(0);\r
//return;\r
//}\r
- //this._doAnimate( X.getTime(), step, startX, startY );\r
+ //this._doAnimate( X.Timer.now(), step, startX, startY );\r
},\r
\r
/*\r
_doAnimate : function( startTime, step, startX, startY ){\r
- var now =X.getTime(),\r
+ var now =X.Timer.now(),\r
easeOut, newX, newY;\r
\r
if (now >= startTime + step.time) {\r
X.UI._eventRellay = function( e ){
- var x = e.clientX / X.Dom.baseFontSize,
- y = e.clientY / X.Dom.baseFontSize,
+ var font = X.Dom.getBaseFontSize(),
+ x = e.clientX / font,
+ y = e.clientY / font,
type = X.UI.Event.NameToID[ e.type ],
i = 0,
data = X.UI.currentRootData,
Constructor : function( layout, args ){
this.SuperConstructor( layout, args );
- if( X.Dom.readyState === X.Dom.Event.XDOM_READY ){
+ if( X_Dom_readyState === X.Event.XDOM_READY ){
X.Timer.once( 0, this, this.start );
} else {
- X.Dom.listenOnce( X.Dom.Event.XDOM_READY, this, this.start );
+ X.Dom.listenOnce( X.Event.XDOM_READY, this, this.start );
};
this.hoverList = [];
};
},
calculate : function( e ){
- var font = X.Dom.baseFontSize,
- size, w, h;
+ var font, size, w, h;
if( !e ){
size = X.Dom.getSize();
+ font = X.Dom.getBaseFontSize();
w = size[ 0 ];
h = size[ 1 ];
} else {
+ font = e.fontSize;
w = e.w;
h = e.h;
};