<script type="text/javascript" src="js/core/00_builtin.js"></script>\r
<script type="text/javascript" src="js/core/01_XUa.js"></script>\r
<script type="text/javascript" src="js/core/02_XType.js"></script>\r
- <script type="text/javascript" src="js/core/03_XCancel.js"></script>\r
- <script type="text/javascript" src="js/core/04_XCallback.js"></script>\r
- <script type="text/javascript" src="js/core/05_XClass.js"></script>\r
- <script type="text/javascript" src="js/core/06_XTimer.js"></script>\r
- <script type="text/javascript" src="js/core/07_XEventDispatcher.js"></script> \r
\r
- <script type="text/javascript" src="js/core/10_XStyle.js"></script>\r
- <script type="text/javascript" src="js/core/11_XDom.js"></script>\r
- <script type="text/javascript" src="js/core/12_XDomEvent.js"></script>\r
- <!-- <script type="text/javascript" src="js/core/19_XQuery.js"></script> -->\r
-\r
- <script type="text/javascript" src="js/core/13_XViewEvent.js"></script>\r
- <script type="text/javascript" src="js/core/14_XView.js"></script>\r
+ <script type="text/javascript" src="js/core/03_XCallback.js"></script>\r
+ <script type="text/javascript" src="js/core/04_XClass.js"></script>\r
+ <script type="text/javascript" src="js/core/05_XTimer.js"></script>\r
+ <script type="text/javascript" src="js/core/06_XEventDispatcher.js"></script>\r
+ <script type="text/javascript" src="js/core/07_XNotification.js"></script>\r
+ \r
+ <script type="text/javascript" src="js/dom/10_XDomStyle.js"></script>\r
+ <script type="text/javascript" src="js/dom/12_XDomParser.js"></script>\r
+ <script type="text/javascript" src="js/dom/13_XDomEvent.js"></script>\r
+ <script type="text/javascript" src="js/dom/14_XDomNode.js"></script>\r
+ <script type="text/javascript" src="js/dom/15_XDomNodeList.js"></script>\r
+ <script type="text/javascript" src="js/dom/16_XDomQuery.js"></script> \r
+ <script type="text/javascript" src="js/dom/17_XView.js"></script>\r
+ \r
+ \r
+ <script type="text/javascript" src="js/ui/00_XUI_Type.js"></script>\r
+ <script type="text/javascript" src="js/ui/01_XUI_Option.js"></script>\r
+ <script type="text/javascript" src="js/ui/02_XUI_Dirty.js"></script>\r
+ <script type="text/javascript" src="js/ui/03_XUI_Attr.js"></script>\r
+ <script type="text/javascript" src="js/ui/04_XUI_AttrNo.js"></script>\r
\r
- <script type="text/javascript" src="js/JU/AbstractDisplayNode.js"></script>\r
- <script type="text/javascript" src="js/JU/AbstractDisplayContainer.js"></script>\r
- <script type="text/javascript" src="js/JU/DisplayNodeStyle.js"></script>\r
- <script type="text/javascript" src="js/JU/LayoutManagerBase.js"></script>\r
- <script type="text/javascript" src="js/JU/Box.js"></script>\r
- <script type="text/javascript" src="js/JU/VBox.js"></script>\r
- <script type="text/javascript" src="js/JU/HBox.js"></script>\r
- <script type="text/javascript" src="js/JU/TileBox.js"></script>\r
- <script type="text/javascript" src="js/JU/ChromeBox.js"></script>\r
- <script type="text/javascript" src="js/JU/PageRoot.js"></script>\r
- <script type="text/javascript" src="js/JU/Text.js"></script>\r
+ <script type="text/javascript" src="js/ui/AbstractDisplayNode.js"></script>\r
+ <script type="text/javascript" src="js/ui/AbstractDisplayContainer.js"></script>\r
+ <script type="text/javascript" src="js/ui/DisplayNodeStyle.js"></script>\r
+ <script type="text/javascript" src="js/ui/LayoutManagerBase.js"></script>\r
+ <script type="text/javascript" src="js/ui/Box.js"></script>\r
+ <script type="text/javascript" src="js/ui/VBox.js"></script>\r
+ <script type="text/javascript" src="js/ui/HBox.js"></script>\r
+ <script type="text/javascript" src="js/ui/TileBox.js"></script>\r
+ <script type="text/javascript" src="js/ui/ChromeBox.js"></script>\r
+ <script type="text/javascript" src="js/ui/PageRoot.js"></script>\r
+ <script type="text/javascript" src="js/ui/Text.js"></script>\r
</head>\r
<body>\r
</body>\r
*/\r
\r
Function.prototype.apply || (Function.prototype.apply = function (x, y) {\r
+ var a, i, r, j;\r
x = x || window;\r
y = y ||[];\r
x.__apply = this;\r
if (!x.__apply) x.constructor.prototype.__apply = this;\r
- var r, j = y.length;\r
+ j = y.length;\r
switch (j) {\r
case 0: r = x.__apply(); break;\r
case 1: r = x.__apply(y[0]); break;\r
case 8: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break;\r
case 9: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8]); break;\r
default:\r
- var a = [];\r
- for (var i = 0; i < j; ++i)\r
+ a = [];\r
+ for (i = 0; i < j; ++i)\r
a[i] = 'y[' + i + ']';\r
r = eval('x.__apply(' + a.join(',') + ')');\r
break;\r
return r;\r
});\r
Function.prototype.call || (Function.prototype.call = function () {\r
- var a = arguments, x = a[0], y = [];\r
- for (var i = 1, j = a.length; i < j; ++i)\r
+ var a = arguments, x = a[0], y = [], i = 1, j;\r
+ for (j = a.length; i < j; ++i)\r
y[i - 1] = a[i]\r
return this.apply(x, y);\r
});\r
return r;\r
});\r
Array.prototype.push || (Array.prototype.push = function () {\r
- for (var a = arguments, i = 0, j = a.length, l = this.length; i < j; ++i)\r
+ var a = arguments, i = 0, j = a.length, l = this.length;\r
+ for (; i < j; ++i)\r
this[l + i] = a[i];\r
return this.length;\r
});\r
Array.prototype.shift || (Array.prototype.shift = function () {\r
- var r = this[0];\r
- for(var i = 1, j = this.length; i < j; ++i)\r
+ var r = this[0], i = 1, j = this.length;\r
+ for( ; i < j; ++i)\r
this[i - 1] = this[i];\r
--this.length;\r
return r;\r
var self = X.Callback,\r
live = self._LIVE_LIST,\r
f, listener, context, callback;\r
+ \r
if( typeof arg1 === 'function' ){\r
context = arg0;\r
callback = arg1;\r
listener = arg0;\r
arg2 = arg1;\r
} else {\r
- //throw new Error( 'Callback.create() fail!' );\r
+ alert( 'Callback.create() fail!' );\r
};\r
\r
f = self._POOL_LIST.pop();\r
};\r
return f;\r
},\r
- once : function(){\r
- var f = X.Callback.create.apply( null, arguments );\r
+ once : function( arg0, arg1, arg2 ){\r
+ var f = X.Callback.create( arg0, arg1, arg2 );\r
f.once = true;\r
return f;\r
},\r
classSetting,\r
opt_super,\r
klass, def;\r
- if( superDef.Final === true ) throw new Error( 'Class is final!' );\r
+ if( superDef.Final === true ) X.Notification.critical( 'X.Class inherits, Class is final!' );\r
\r
if( X.Type.isString( displayName ) === true ){\r
args.shift();\r
traits = null;\r
if( opt_super === true ){\r
def = X.Class._getClassDef( klass );\r
- def.Super = Super.prototype;\r
+ def.Super = Super;\r
+ def.SuperProto = Super.prototype;\r
def.SuperConstructor = superDef[ CONSTRUCTOR ];\r
};\r
return klass;\r
def = X.Class._getClassDef( klass ),\r
data, p, i;\r
if( def.isPrivate === true && killPrivateFlag === false ){\r
- throw new Error( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
+ X.Notification.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
+ return;\r
};\r
killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
X.Type.isFunction( instance.onKill ) === true && instance.onKill();\r
};\r
// myCallback の削除\r
// myCallback を受け取った API への通知\r
+ },\r
+ instanceOf : function( klass ){\r
+ var Super = this;\r
+ if( this.constructor === klass ) return true;\r
+ while( Super = X.Class._getClassDef( Super ).Super ){\r
+ if( Super === klass ) return true;\r
+ };\r
+ return false;\r
}\r
};\r
\r
instance,\r
userDef;\r
if( def.Abstract === true ){\r
- throw new Error( 'AbstractClass!' );\r
+ X.Notification.critical( 'AbstractClass!' );\r
+ return;\r
};\r
if( def.isPrivate === true && dataUser === null ){\r
- throw new Error( 'use myClass.newPrivate( instance, ...args )!' );\r
+ X.Notification.critical( 'use myClass.newPrivate( instance, ...args )!' );\r
+ return;\r
};\r
klass.__new = null;\r
instance = def.pool && def.pool.length > 0 ? def.pool.pop() : new klass();\r
def.live && def.live.push( instance );\r
};\r
if( def.Super ){\r
- instance.Super = def.Super;\r
+ instance.Super = def.SuperProto;\r
instance.SuperConstructor = superConstructor;\r
};\r
def[ CONSTRUCTOR ] && def[ CONSTRUCTOR ].apply( instance, args );\r
opt_final = !!( classSetting & X.Class.FINAL );\r
opt_private = !!( classSetting & X.Class.PRIVATE_DATA );\r
if( opt_final === true && opt_abstract === true ){\r
- throw new Error( 'final & Abstract!' );\r
+ X.Notification.critical( 'final & Abstract!' );\r
+ return;\r
}; \r
args.shift();\r
};\r
if( PRIVATE_CLASS_LIST.indexOf( args[ 0 ] ) !== -1 ){\r
privateDef = X.Class._getClassDef( args[ 0 ] );\r
if( privateDef.isPrivate !== true ){\r
- throw new Error( 'PrivateClass not found! please, X.Class.create( X.Class.PRIVATE, {...} ).' );\r
+ X.Notification.critical( 'PrivateClass not found! please, X.Class.create( X.Class.PRIVATE, {...} ).' );\r
+ return;\r
} else\r
if( privateDef.Abstract === true ){\r
- throw new Error( 'PrivateClass is Abstract!' );\r
+ X.Notification.critical( 'PrivateClass is Abstract!' );\r
+ return;\r
};\r
classDef.privateClass = args.shift();\r
};\r
props = args[ 0 ];\r
if( props === null || X.Type.isObject( props ) === false ){\r
- throw new Error( 'No Class Def!' );\r
+ X.Notification.critical( 'No Class Def!' );\r
+ return;\r
};\r
\r
if( X.Type.isFunction( props[ CONSTRUCTOR ] ) === true ){\r
klass = new Function( 'var a=arguments,f=a.callee;if(f.__new)return f.__new(a)' );\r
klass.__new = C;\r
klass.prototype = X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
+ klass.prototype.constructor = klass;\r
klass.name = displayName;\r
\r
if( opt_abstract === true ){\r
}; \r
if( opt_private === true ){\r
if( classDef.privateClass ){\r
- throw new Error( 'Private Data Class has no PrivateClass!' );\r
+ X.Notification.critical( 'Private Data Class has no PrivateClass!' );\r
+ return;\r
};\r
classDef.isPrivate = true;\r
PRIVATE_CLASS_LIST.push( klass );\r
klass;\r
for( ; i; ){\r
klass = cList[ --i ];\r
- if( instance instanceof klass ) return klass;\r
+ if( instance.constructor === klass ) return klass;\r
};\r
cList = PRIVATE_CLASS_LIST;\r
i = cList.length;\r
for( ; i; ){\r
klass = cList[ --i ];\r
- if( instance instanceof klass ) return klass;\r
+ if( instance.constructor === klass ) return klass;\r
};\r
\r
if( cList.indexOf( instance ) !== -1 ) return instance;\r
def.dataList = [];\r
};\r
if( i !== -1 ){\r
- throw new Error( 'PrivateData already exist!' );\r
+ X.Notification.critical( 'PrivateData already exist!' );\r
+ return;\r
};\r
if( privateDef._tempUser ){\r
- throw new Error( 'newPrivate を連続呼び出しされたところ破綻' );\r
+ X.Notification.critical( 'newPrivate を連続呼び出しされたところ破綻' );\r
+ return;\r
};\r
privateDef._tempUser = user;\r
return privateClass.__new( args );\r
_override : function ( target, src, force ){\r
for( var p in src ){\r
if( p === 'Super' || p === 'SuperConstructor' ){\r
- throw new Error( 'Super & SuperConstructor is reserved!' );\r
+ X.Notification.critical( 'Super & SuperConstructor is reserved!' );\r
+ return;\r
};\r
if( force === true || target[ p ] === void 0 ){\r
target[ p ] = src[ p ];\r
*/\r
\r
X.Timer = ( function(){\r
- var setTimeout = window.setTimeout;\r
- var clearTimeout = window.clearTimeout;\r
- var INTERVAL_TIME = 16;\r
- var TICKET_LIST = [];\r
- var timerId = -1;\r
- var next = 0;\r
- /* const */\r
- var INDEX_TIME = 0,\r
+ var setTimeout = window.setTimeout,\r
+ clearTimeout = window.clearTimeout,\r
+ INTERVAL_TIME = 16,\r
+ TICKET_LIST = [],\r
+ timerId = -1,\r
+ next = 0,\r
+ INDEX_TIME = 0,\r
INDEX_LAST = 1,\r
INDEX_COUNT = 2,\r
INDEX_CALLBACK = 3;\r
\r
function loop(){\r
- var i = 0,\r
- c = next,\r
+ var c = next,\r
list = TICKET_LIST,\r
i = list.length,\r
queue, f, ret;\r
if( !create ) return;\r
LIST[ LIST.length ] = instance;\r
TEMP[ TEMP.length ] = data = {};\r
- if( window[ 'AbstractDisplayNode' ] && instance instanceof window[ 'AbstractDisplayNode' ] ){\r
+ if( window[ 'AbstractDisplayNode' ] && instance.instanceOf && instance.instanceOf( window[ 'AbstractDisplayNode' ] ) ){\r
X.Class._getPrivate( instance ).events = data;\r
};\r
} else {\r
},\r
listenOnce : function( type, arg1, arg2 ){\r
once = true;\r
- //this.listen( type, arg1, arg2 );\r
X.EventDispatcher.prototype.listen.call( this, type, arg1, arg2 );\r
once = false;\r
return this;\r
--- /dev/null
+X.Notification = {\r
+ _$LogArea : null,\r
+ debug : function( msg ){\r
+ X.Notification._output( msg, 0 );\r
+ },\r
+ info : function( msg ){\r
+ X.Notification._output( msg, 1 );\r
+ },\r
+ warn : function( msg ){\r
+ X.Notification._output( msg, 2 );\r
+ },\r
+ critical : function( msg ){\r
+ X.Notification._output( msg, 3 );\r
+ },\r
+ _output : function( msg, level ){\r
+ var body, $Area;\r
+ if( X.View && X.View.ready === true ){\r
+ if( $Area = X.Notification._$LogArea ){\r
+ $Area.remove();\r
+ delete X.Notification._$LogArea;\r
+ };\r
+ \r
+ \r
+ } else\r
+ if( X.Dom && X.Dom.ready === true ){\r
+ if( !( $Area = X.Notification._$LogArea ) ){\r
+ $Area = X.Notification._$LogArea = X.Dom.Node( 'div' ).addToRoot( 0 );\r
+ };\r
+ $Area.add( '<p>' + msg + '</p>' );\r
+ } else \r
+ if( console ){\r
+ level === 0 ? console.debug( msg ) :\r
+ level === 1 ? console.info( msg ) :\r
+ level === 2 ? console.warn( msg ) :\r
+ level === 3 ? console.critical( msg ) : console.warn( msg );\r
+ } else {\r
+ 1 < level && alert( msg );\r
+ };\r
+ }\r
+};\r
+/*DEBUG、INFO、WARN、CRITICAL\r
+emerg サーバが稼動できないほどの重大なエラー\r
+alert critよりも重大なエラー\r
+crit 重大なエラー\r
+error エラー\r
+warn 警告\r
+notice 通知メッセージ\r
+info サーバ情報\r
+debug デバック用の情報\r
+*/\r
+++ /dev/null
-/**\r
- * use X.Callback\r
- */\r
-var X = X || {};\r
-\r
-X.Dom = {\r
- getElementById :\r
- document.getElementById ?\r
- (function( id ){\r
- return document.getElementById( id );\r
- }) :\r
- document.all ?\r
- (function( id ){\r
- return document.all[ id ];\r
- }) :\r
- (function(){}),\r
- getElementsByTagName :\r
- document.getElementsByTagName ?\r
- (function( parent, tagName ){\r
- return parent.getElementsByTagName( tagName.toUpperCase() );\r
- }) :\r
- document.all ?\r
- (function( parent, tagName ){\r
- return parent.all.tags( tagName.toUpperCase() );\r
- }) :\r
- (function(){}),\r
- getElementsByClassName :\r
- document.getElementsByClassName ?\r
- (function( parent, className ){\r
- return parent.getElementsByClassName( className );\r
- }) :\r
- document.getElementsByTagName ?\r
- (function( parent, className ){\r
- var self = X.Dom,\r
- live = parent.getElementsByTagName( '*' ),\r
- nodes = [],\r
- node, i;\r
- for( i = live.length; i; ){\r
- nodes[ --i ] = live[ i ];\r
- };\r
- for( i = nodes.length; i; ){\r
- node = nodes[ --i ];\r
- ( node.nodeType !== 1 || !node.className || !node.className.length || self.hasClass( node, className ) === false ) && nodes.splice( i, 1 );\r
- };\r
- return nodes;\r
- }) :\r
- document.all ?\r
- (function( parent, className ){\r
- var self = X.Dom,\r
- live = parent.all,\r
- nodes = [],\r
- node, i;\r
- for( i = live.length; i; ){\r
- nodes[ --i ] = live[ i ];\r
- };\r
- for( i = nodes.length; i; ){\r
- node = nodes[ --i ];\r
- ( !node.className || !node.className.length || self.hasClass( node, className ) === false ) && nodes.splice( i, 1 );\r
- };\r
- return nodes;\r
- }) :\r
- (function(){}),\r
- hasClass : function( elm, className ){\r
- var cnames = ( elm.className || '' ).split( ' ' ),\r
- _cnames = className.split( ' ' ),\r
- cname,\r
- i = _cnames.length;\r
- for( ; i; ){\r
- cname = _cnames[ --i ];\r
- if( cname === '' ) continue;\r
- if( cnames.indexOf( cname ) === -1 ) return false;\r
- };\r
- return true;\r
- },\r
- appendChild :\r
- document.appendChild ?\r
- (function( target, elm ){\r
- return target.appendChild( elm );\r
- }) :\r
- document.all ?\r
- (function( target, elm ){\r
- return target.insertAdjacentHTML( 'BeforeEnd', elm.outerHTML || elm ); // elm の場合と string の場合がある\r
- }) :\r
- (function(){}),\r
- removeChild :\r
- document.removeChild ?\r
- (function( parent, elm ){\r
- return target.removeChild( elm );\r
- }) :\r
- document.all ?\r
- (function( parent, elm ){\r
- var children = X.Dom.getChildNodes( parent ),\r
- l = children.length,\r
- html = [],\r
- i = 0,\r
- child, update;\r
- for( ; i < l; ++i ){\r
- child = children[ i ];\r
- if( child !== elm ){\r
- html[ html.length ] = child.outerHTML || child;\r
- } else {\r
- update = true;\r
- };\r
- };\r
- if( !update ) return;\r
- parent.innerHTML = html.join( '' );\r
- }) :\r
- (function(){}),\r
- insertBefore :\r
- document.insertBefore ?\r
- (function( parent, elm, elmAfter ){\r
- return parent.insertBefore( elm, elmAfter );\r
- }) :\r
- document.all ?\r
- (function( parent, elm, elmAfter ){\r
- return elmAfter.insertAdjacentHTML( 'BeforeBegin', elm.outerHTML );\r
- }) :\r
- (function(){})\r
-};\r
-\r
-if( X.UA.IE && X.UA.IE < 5 ){\r
- /*\r
- * ie4 に TextNode は存在しない。 Element.children にテキストノードは無視される。\r
- * そこでテキストノードを判定して控える操作が必要になる。\r
- */\r
- X.Dom.getChildNodes = function( elm ){\r
- var html = elm.innerHTML,\r
- children = elm.children,\r
- l = children.length - 1,\r
- _ = '',\r
- cr = X.Dom.getCRChars( html ),\r
- i, j, child, outer, index, parts, ret, text;\r
- if( l < 0 ){\r
- if( html.length ) return [ html ]; // new X.Dom.TextNode( html );\r
- return [];\r
- };\r
- ret = [];\r
- j = -1;\r
- html = html.split( cr ).join( _ );\r
- for( i = 0; i <= l; ++i ){\r
- child = children[ i ];\r
- outer = child.outerHTML.split( cr ).join( _ );\r
- index = html.indexOf( outer );\r
- if( index === -1 ){\r
- alert( 'X.Dom.getChildNodes\n' + outer + '\n' + html.substr( 0, 100 ) );\r
- continue;\r
- };\r
- if( 0 < index ){\r
- ret[ ++j ] = html.substr( 0, index ); // new X.Dom.TextNode( html );\r
- };\r
- ret[ ++j ] = child;\r
- html = html.substr( index + outer.length );\r
- if( i === l && html.length ){\r
- ret[ ++j ] = html; // new X.Dom.TextNode( html );\r
- break;\r
- };\r
- };\r
- return ret;\r
- };\r
- X.Dom.getCRChars = function( src ){\r
- return 0 <= src.indexOf( '\r\n' ) ? '\r\n' :\r
- 0 <= src.indexOf( '\n' ) ? '\n' :\r
- 0 <= src.indexOf( '\r' ) ? '\r' : '\n';\r
- };\r
-};
\ No newline at end of file
+++ /dev/null
-/**
- * use X.Callback
- */
-var X = X || {};
-
-X.DomEvent = {
- add :
- document.addEventListener ?
- (function( element, type, arg2, arg3, arg4 /* [ listener || ( context + function ) || function ][ arguments ] */ ){
- var callback;
- if( typeof arg2 === 'function' ){
- callback = X.Callback.create( element, arg2, arg3 );
- } else {
- callback = X.Callback.create( arg2, arg3, arg4 );
- };
- callback.c = X.DomEvent._callback; // override
- element.addEventListener( type, callback, false );
- }) :
- document.attachEvent ?
- (function( element, type, arg2, arg3, arg4 /* [ listener || ( context + function ) || function ][ arguments ] */ ){
- var callback;
- if( typeof arg2 === 'function' ){
- callback = X.Callback.create( element, arg2, arg3 );
- } else {
- callback = X.Callback.create( arg2, arg3, arg4 );
- };
- callback.c = X.DomEvent._callback; // override
- callback.e = element;
- element.attachEvent( 'on' + type, callback );
- }) :
- (function( element, type, arg2, arg3, arg4 /* [ listener || ( context + function ) || function ][ arguments ] */ ){
- var callback, dom0, helper, list;
- if( typeof arg2 === 'function' ){
- callback = X.Callback.create( element, arg2, arg3 );
- } else {
- callback = X.Callback.create( arg2, arg3, arg4 );
- };
- if( X.DomEvent.helper( element, type, callback ) === false ){
- callback.c = X.DomEvent._callback; // override
- return;
- };
- dom0 = X.DomEvent.Dom0;
- helper = dom0.find( element, type );
- if( helper ){
- list = helper.list;
- if( list.indexOf( callback ) === -1 ) list[ list.length ] = callback;
- } else {
- dom0.LIST[ dom0.LIST.length ] = new dom0.Helper( element, type, callback );
- };
- }),
- remove :
- document.removeEventListener ?
- (function( element, type, arg2, arg3 ){
- var callback = X.Callback.find( arg2, arg3 );
- if( callback ){
- element.removeEventListener( type, callback, false );
- X.Callback._correct( callback );
- };
- }) :
- document.detachEvent ?
- (function( element, type, arg2, arg3 ){
- var callback = X.Callback.find( arg2, arg3 );
- if( callback ){
- element.detachEvent( 'on' + type, callback );
- X.Callback._correct( callback );
- };
- }) :
- (function( element, type, arg2, arg3 ){
- var dom0 = X.DomEvent.Dom0,
- t = dom0.find( element, type ),
- c = X.Callback.find( arg2, arg3 ),
- i;
- if( t && c ){
- i = t.list.indexOf( c );
- if( i !== -1 ){
- t.list.splice( i, 1 );
- X.Callback._correct( c );
- };
- if( t.list.length === 0 ){
- t.elm[ 'on' + t.type ] = dom0.emptyFunc;
- t.elm[ 'on' + t.type ] = '';
- c = X.Callback.find( t );
- X.Callback._correct( c );
- dom0.LIST.splice( dom0.LIST.indexOf( t ), 1 );
- delete t.elm;
- delete t.type;
- delete t.list;
- };
- };
- }),
- _callback :
- window.addEventListener ?
- (function(){
- var f = this,
- e = f.a[ 0 ],
- r = f.callback.call( f.context, new X.DomEvent.xEvent( e ) );
- if( r !== false ) return r;
- e.preventDefault();
- e.stopPropagation();
- return false;
- }) :
- document.attachEvent ?
- (function(){
- var f = this,
- e = window.event,
- x = f.context,
- r = f.callback.call( x, new X.DomEvent.xEvent( e, f.e ));
- if( r !== false ) return r;
- e.cancelBubble = true;
- e.returnValue = false;
- return r;
- }) :
- (function(){
- var f = this,
- e = window.event,
- x = f.context,
- r = f.callback.call( x, new X.DomEvent.xEvent( e, x.elm ));
- if( r !== false ) return r;
- e.cancelBubble = true;
- e.returnValue = false;
- return r;
- })
-};
-if( window.addEventListener ){
- X.DomEvent.xEvent = function( e ){
- this._event = e;
- this.type = e.type;
- this.target = e.target;
- this.currentTarget = e.currentTarget;
- this.relatedTarget = e.relatedTarget;
- this.eventPhase = e.eventPhase;
-
- this.clientX = e.clientX;
- this.clientY = e.clientY;
- this.screenX = e.screenX;
- this.screenY = e.screenY;
-
- this.keyCode = e.keyCode;
- this.altKey = e.altKey;
- this.ctrlKey = e.ctrlKey;
- this.shiftKey = e.shiftKey;
-
- this.wheelDelta = e.wheelDelta;
- };
-} else {
- X.DomEvent.xEvent = function( e, element ){
- this._event = e;
- this.type = e.type;
- this.target = e.srcElement;
- this.currentTarget = element;
- this.relatedTarget = e.formElement ? e.formElement : e.toElement;
- this.eventPhase = e.srcElement === element ? 2: 3;
-
- this.clientX = e.clientX;
- this.clientY = e.clientY;
- this.screenX = e.screenX;
- this.screenY = e.screenY;
-
- this.keyCode = e.keyCode;
- this.altKey = e.altKey;
- this.ctrlKey = e.ctrlKey;
- this.shiftKey = e.shiftKey;
-
- this.wheelDelta = e.wheelDelta;
- };
-};
-if( !document.addEventListener && !document.attachEvent ){
- X.DomEvent.Dom0 = {
- LIST : [],
- emptyFunc : new Function(),
- find : function( element, type ){
- var list = X.DomEvent.Dom0.LIST,
- i = list.length,
- helper;
- for( ; i < l; ){
- helper = list[ --i ];
- if( helper.elm === element && helper.type === type ) return helper;
- };
- },
- Helper : function( elm, type, callback ){
- this.elm = elm;
- this.type = type;
- this.list = [ callback ];
-
- callback = elm[ 'on' + type ] = X.Callback.create( this );
- callback.c = X.DomEvent._callback; // override
- }
- };
- X.DomEvent.Dom0.Helper.prototype.handleEvent = function(e){
- //e = e.copy();
- var list = this.list,
- i = list.length,
- cancel;
- for( ; i; ){
- if( list[ --i ]( e ) === false ) cancel = false;
- };
- return cancel;
- };
-};
\ No newline at end of file
+++ /dev/null
-var X = X || {};\r
-\r
-;(function( window, document, undefined ){\r
-\r
-var $LIST = [];\r
-var HIDE_LIST = [];\r
-\r
-var Util = {\r
- extend : function( target, override ){\r
- for( var k in override ){\r
- target[ k ] = override[ k ];\r
- };\r
- },\r
- copyArray : function( ary ){\r
- var ret = [],\r
- i = ary.length;\r
- for( ; i; ){\r
- ret[ --i ] = ary[ i ];\r
- };\r
- return ret;\r
- },\r
- find$ : function( v ){\r
- var list = HIDE_LIST,\r
- i = list.length;\r
- for( ; i; ){\r
- if( list[ --i ].elm === v || list[ i ].elms === v ) return $LIST[ i ];\r
- };\r
- },\r
- getPrivate : function( $ ){\r
- var i = $LIST.indexOf( $ );\r
- if( i === -1 ){\r
- return HIDE_LIST[ HIDE_LIST.length ] = {};\r
- };\r
- return HIDE_LIST[ i ];\r
- },\r
- each : function( $, funcName, args ){\r
- var data = Util.getPrivate( $ ),\r
- elms = data.elms,\r
- _$;\r
- for( var i = 0, l = elms.length; i < l; ++i ){\r
- _$ = new X.$( elms[ i ] );\r
- _$[ funcName ].apply( _$, args );\r
- };\r
- },\r
- is$ : function( v ){\r
- return $LIST.indexOf(v) !== -1;\r
- },\r
- isHTMLList : function( v ){\r
- var type = X.Type;\r
- if( !type.isArray( v ) ) return false;\r
- for( var i = v.length; i; ){\r
- if( !type.isHTMLElement( v[ --i ] ) ) return false;\r
- };\r
- return true;\r
- },\r
- isHTMLString : function(v){\r
- if( typeof v === 'string' && v.charAt(0) === '<' && v.charAt(v.length - 1) === '>' ){\r
- return true;\r
- };\r
- return false;\r
- },\r
- isSelectorString : function(v){\r
- return typeof v === 'string';\r
- },\r
- getKind : function(v){\r
- return Util.is$(v) ? 0 :\r
- Util.isHTMLList(v) ? 5 :\r
- X.Type.isHTMLElement(v) ? 1 :\r
- Util.isHTMLString(v) ? 2 :\r
- Util.isSelectorString(v) ? 3 : 4;\r
- }\r
-};\r
-\r
-if( !document.getElementById && document.all ){\r
- Util.ie4remove = function( parent, target, html, save ){\r
- var children = X.Dom.getChildNodes( parent ),\r
- l = children.length,\r
- i = 0, child, $, data;\r
- for( ; i < l; ++i ){\r
- child = children[ i ];\r
- if( child === target ){\r
- $ = Util.find$( child );\r
- if( $ ){\r
- data = Util.getPrivate( $ );\r
- data.htmlText = child.outerHTML;\r
- delete data.elm;\r
- };\r
- } else\r
- if( typeof child !== 'string' ){\r
- /*\r
- * 要素の書き換え前に UID を記入して要素を復帰できるようにする\r
- */\r
- $ = Util.find$( child );\r
- if( $ ){\r
- $.UID = '' + save.length;\r
- child.setAttribute( 'UID', $.UID );\r
- save[ save.length ] = $;\r
- };\r
- Util.ie4remove( child, null, null, save );\r
- if( html ) html[ html.length ] = child.outerHTML;\r
- } else\r
- if( html ) html[ html.length ] = child;\r
- };\r
- };\r
-};\r
-\r
-\r
-X.$ = function( v ){\r
- if( !this || this.append !== X.$.prototype.append ) return new X.$( v );\r
- \r
- var elm, elms, htmlText, $, data;\r
-\r
- switch( Util.getKind(v) ){\r
- case 0 :\r
- return v;\r
- case 1 :\r
- elm = v;\r
- $ = Util.find$( v );\r
- if( $ ) return $; \r
- break;\r
- case 2 :\r
- htmlText = v;\r
- break;\r
- case 3 :\r
- return this.find( v );\r
- case 5 :\r
- elms = v;\r
- break;\r
- };\r
- \r
- data = Util.getPrivate( this );\r
- $LIST[ $LIST.length ] = this;\r
- if( elm ) data.elm = elm;\r
- if( elms ) data.elms = elms;\r
- if( htmlText ) data.htmlText = htmlText;\r
-};\r
-\r
-Util.extend(\r
- X.$.prototype,\r
- {\r
- append :\r
- document.getElementById ?\r
- (function( v ){\r
- var data = Util.getPrivate( this );\r
- if( data.elm ){\r
- switch( Util.getKind(v) ){\r
- case 0 :\r
- data.elm.appendChild( Util.getPrivate( v ).elm );\r
- return this;\r
- case 1 :\r
- data.elm.appendChild( v );\r
- return this;\r
- case 2 :\r
- // data.elm.appendChild( );\r
- return this;\r
- }; \r
- } else {\r
- if( !data.children ) data.children = [];\r
- data.children[ data.children.length ] = v;\r
- };\r
- return this;\r
- }) :\r
- document.all ?\r
- (function( v ){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm,\r
- _data, html;\r
- if( elm ){\r
- switch( Util.getKind( v ) ){\r
- case 0 :\r
- _data = Util.getPrivate( v );\r
- elm.insertAdjacentHTML( 'BeforeEnd', _data.htmlText || elm && elm.outerHTML );\r
- _data.elm = elm.children[ elm.children.length - 1 ];\r
- return this;\r
- case 1 :\r
- data.elm.insertAdjacentHTML( 'BeforeEnd', v.outerHTML );\r
- return this;\r
- case 2 :\r
- data.elm.insertAdjacentHTML( 'BeforeEnd', v );\r
- return this;\r
- }; \r
- } else {\r
- if( !data.children ){\r
- data.children = [ v ];\r
- } else {\r
- data.children[ data.children.length ] = v;\r
- };\r
- };\r
- return this;\r
- }) :\r
- (function(){}),\r
- appendTo :\r
- document.getElementById ?\r
- (function( v ){\r
- var data = Util.getPrivate( this );\r
- switch( Util.getKind(v) ){\r
- case 0 :\r
- v.append( this );\r
- return this;\r
- case 1 :\r
- v.appendChild( data.elm );\r
- return this;\r
- case 2 :\r
- X.$(v).append(this)\r
- return this;\r
- };\r
- return this;\r
- }) :\r
- document.all ?\r
- (function( v ){\r
- var data = Util.getPrivate( this ),\r
- html, i, children;\r
- switch( Util.getKind( v ) ){\r
- case 0 :\r
- v.append( this );\r
- return this;\r
- case 1 :\r
- if( data.elm ){\r
- html = data.elm.outerHTML;\r
- this.remove();\r
- } else {\r
- html = data.htmlText;\r
- };\r
- if( html ){\r
- v.insertAdjacentHTML( 'BeforeEnd', html ); // elm の場合と string の場合がある\r
- if( data.htmlText ){\r
- delete data.htmlText;\r
- };\r
- data.elm = v.children[ v.children.length - 1 ];\r
- };\r
- return this;\r
- case 2 :\r
- X.$( v ).append( this );\r
- return this;\r
- };\r
-\r
- return this;\r
- }) :\r
- (function(){}),\r
- remove :\r
- document.getElementById ?\r
- (function(){\r
- var data = Util.getPrivate( this );\r
- data.elm.parentNode && data.elm.parentNode.removeChild( data.elm );\r
- data.htmlText = data.elm.outerHTML;\r
- delete data.elm;\r
- return this;\r
- }) :\r
- document.all ?\r
- (function(){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm, \r
- parent, i, j,\r
- html, save, all, uid;\r
- if( !elm ) return;\r
- \r
- Util.ie4remove( parent = elm.parentElement, elm, html = [], save = [] );\r
- parent.innerHTML = html.join( '' );\r
- all = Util.copyArray( parent.all );\r
- \r
- for( i = save.length; i; ){\r
- $ = save[ --i ];\r
- uid = $.UID;\r
- for( j = all.length; j; ){\r
- elm = all[ --j ];\r
- if( elm.UID === uid ){\r
- Util.getPrivate( $ ).elm = elm;\r
- delete $.UID;\r
- elm.removeAttribute( 'UID' );\r
- all.splice( j, 1 ); \r
- break;\r
- } else\r
- if( !elm.UID ){\r
- all.splice( j, 1 );\r
- };\r
- }; \r
- };\r
- return this;\r
- }) :\r
- (function(){}),\r
- destroy : function(){\r
- \r
- },\r
- before :\r
- document.getElementById ?\r
- (function( v ){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm, div;\r
- if( elm ){\r
- if( typeof v === 'string' ){\r
- div = document.createElement( 'div' );\r
- div.innerHTML = v;\r
- document.body.appendChild( div );\r
- v = div.firstChild;\r
- document.body.removeChild( div );\r
- };\r
- elm.parentNode && elm.parentNode.insertBefore( v, elm );\r
- };\r
- return this;\r
- }) :\r
- document.all ?\r
- (function( v ){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm,\r
- parent, _data, _elm, i, children;\r
- if( !elm ) return this;\r
- parent = elm.parentElement;\r
- \r
- switch( Util.getKind(v) ){\r
- case 0 :\r
- if( this === v ) return this;\r
- _data = Util.getPrivate( v );\r
- _elm = _data.elm;\r
- if( _elm ){\r
- if( parent === _elm || _elm.contains( elm ) === true ) return this;\r
- v.remove();\r
- };\r
- elm.insertAdjacentHTML( 'BeforeBegin', _data.htmlText );\r
- for( children = X.Dom.getChildNodes( parent ), i = children.length; i; ){\r
- if( children[ --i ] === elm ){\r
- _data.elm = children[ --i ];\r
- delete _data.htmlText;\r
- break;\r
- };\r
- };\r
- return this;\r
- case 1 :\r
- elm && elm.insertAdjacentHTML( 'BeforeBegin', v.outerHTML );\r
- return this;\r
- case 2 :\r
- elm && elm.insertAdjacentHTML( 'BeforeBegin', v );\r
- return this;\r
- };\r
- return this;\r
- }) :\r
- (function(){}),\r
- after :\r
- document.getElementById ?\r
- (function( v ){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm, div;\r
- if( elm ){\r
- if( typeof v === 'string' ){\r
- div = document.createElement( 'div' );\r
- div.innerHTML = v;\r
- document.body.appendChild( div );\r
- v = div.firstChild;\r
- document.body.removeChild( div );\r
- };\r
- elm.parentNode && elm.parentNode.insertBefore( v, elm.nextSibling );\r
- };\r
- return this;\r
- }) :\r
- document.all ?\r
- (function( v ){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm,\r
- parent, _data, _elm, i, children;\r
- if( !elm ) return this;\r
- parent = elm.parentElement;\r
- \r
- switch( Util.getKind(v) ){\r
- case 0 :\r
- if( this === v ) return this;\r
- _data = Util.getPrivate( v );\r
- _elm = _data.elm;\r
- if( _elm ){\r
- if( parent === _elm || _elm.contains( elm ) === true ) return this;\r
- v.remove();\r
- };\r
- elm.insertAdjacentHTML( 'AfterEnd', _data.htmlText );\r
- for( children = X.Dom.getChildNodes( parent ), i = children.length; i; ){\r
- if( children[ --i ] === elm ){\r
- _data.elm = children[ ++i ];\r
- delete _data.htmlText;\r
- break;\r
- };\r
- };\r
- return this;\r
- case 1 :\r
- elm && elm.insertAdjacentHTML( 'AfterEnd', v.outerHTML ); // elm の場合と string の場合がある\r
- return this;\r
- case 2 :\r
- elm && elm.insertAdjacentHTML( 'AfterEnd', v ); // elm の場合と string の場合がある\r
- return this;\r
- };\r
- return this;\r
- }) :\r
- (function(){}),\r
- find : function( v ){\r
- var querys = parser(v), query;\r
- var selector, name;\r
- var key, operator, value;\r
- var elms = [], _elms, j, m;\r
- var dom = X.Dom;\r
- for( var i = 0, l = querys.length; i < l; ++i ){\r
- query = querys[ i ];\r
- if( typeof query === 'number' ){\r
- \r
- } else\r
- if( query.length === 2 ){\r
- name = query[ 1 ];\r
- _elms = [];\r
- j = 0;\r
- m = elms.length;\r
- switch( query[ 0 ] ){\r
- case 4 : // # id\r
- _elms.push( dom.getElementById( name ) );\r
- break;\r
- case 5 : // . classname\r
- for( ; j < m; ++j ){\r
- _elms = _elms.concat( dom.getElementsByClassName( elms[ j ], name ));\r
- };\r
- break;\r
- case 6 : // :\r
- break;\r
- case 7 : // [\r
- break; \r
- case 8 : // . tagname\r
- for( ; j < m; ++j ){\r
- _elms = _elms.concat( dom.getElementsByTagName( elms[ j ], name ));\r
- };\r
- break;\r
- };\r
- elms = _elms;\r
- } else {\r
- \r
- };\r
- };\r
- return new X.$( elms );\r
- },\r
- each : function( func /* func(index){ return false } */ ){\r
- var data = Util.getPrivate( this ),\r
- elms = data.elms, $s = [];\r
- for( var i = 0, l = elms.length; i < l; ++i ){\r
- $s[ $s.length ] = new X.$( elms[ i ] );\r
- };\r
- for( i = 0, l = $s.length; i < l; ++i ){\r
- if( func.call( $s[ i ], i ) === false ) break;\r
- };\r
- return this;\r
- },\r
- html : function( v ){\r
- var data = Util.getPrivate( this ),\r
- elm = data.elm;\r
- return elm ? elm.innerHTML : data.htmlText;\r
- }\r
- }\r
-);\r
-\r
-HASH_SELECTOR = {\r
- '>' : 1,\r
- '+' : 2,\r
- '~' : 3,\r
- '#' : 4,\r
- '.' : 5,\r
- ':' : 6,\r
- '[' : 7,\r
- scope : 8,\r
- root : 9,\r
- link : 10\r
-};\r
-SELECTORS = ' >+~#.:[';\r
-PASER = {\r
- START : 0,\r
- FINISH : 99,\r
- SELECTOR : 1,\r
- // TAG_STRAT : 5,\r
- ERROR : -99,\r
- NAME : 2,\r
- ATTR_FILTER_KEY : 3,\r
- ATTR_FILTER_OPERATOR : 4,\r
- ATTR_FILTER_VALUE : 5\r
-};\r
-OPERATORS = { "=": 1, "!=": 2, "~=": 3, "^=": 4, "$=": 5, "*=": 6, "|=": 7 };\r
-ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-0123456789';\r
-\r
-function parser( query ){\r
- query += ' ';\r
- var result = [];\r
- var i = 0, l = query.length, s;\r
- var selectors = [];\r
- var mode = PASER.START;\r
- var name = '', str, key, value, selector = -1, operator, lastSelector, nameString, nameFirst, escape;\r
- for( ; i < l; ++i ){\r
- str = query.charAt( i );\r
- nameString = ALPHABET.indexOf( str ) !== -1;\r
- nameFirst = nameString && ALPHABET.indexOf( str ) < 52;\r
- escape = str === '\\';\r
- switch( mode ){\r
- case PASER.NAME :\r
- if( nameString ){\r
- name += str;\r
- break;\r
- } else\r
- if( escape && selector === 4 ){\r
- str = query.charAt( i + 1 );\r
- if( ':.'.indexOf( str ) !== -1 ){\r
- name += str;\r
- break;\r
- };\r
- } else {\r
- result[ result.length ] = [ selector, name ];\r
- mode = PASER.START;\r
- };\r
- case PASER.START :\r
- selector = SELECTORS.indexOf( str );\r
- if( selector === -1 && nameFirst ){\r
- selector = 8; // tag name\r
- mode = PASER.NAME;\r
- name = str;\r
- } else\r
- if( selector === 7 ){ // [\r
- mode = PASER.ATTR_FILTER_START;\r
- } else\r
- if( 0 <= selector ){\r
- name = '';\r
- mode = selector < 4 ? PASER.FINISH : PASER.SELECTOR;// > ,+,~\r
- if( selector === 0 && lastSelector === 0 ) mode = PASER.START; // 子孫セレクタ\r
- } else\r
- if( str !== ' ' ){\r
- mode = PASER.ERROR;\r
- };\r
- break;\r
- case PASER.SELECTOR :\r
- if( nameFirst ){\r
- name = str;\r
- mode = PASER.NAME;\r
- break;\r
- };\r
- mode = PASER.ERROR;\r
- break;\r
- case PASER.ATTR_FILTER_START :\r
- if( nameFirst ){\r
- mode = PASER.ATTR_FILTER_KEY;\r
- key = str;\r
- value = '';\r
- break;\r
- };\r
- mode = PASER.ERROR;\r
- break;\r
- case PASER.ATTR_FILTER_KEY :\r
- operator = OPERATORS[ query.substr( i, 2 ) ];\r
- if( nameString ){\r
- key += str;\r
- break;\r
- } else\r
- if( str === '=' ){\r
- operator = 1;\r
- mode = PASER.ATTR_FILTER_VALUE;\r
- } else\r
- if( operator !== -1 ){\r
- mode = PASER.ATTR_FILTER_VALUE;\r
- ++i;\r
- } else\r
- if( str !== ' ' ){\r
- mode = PASER.ERROR;\r
- };\r
- break;\r
- case PASER.ATTR_FILTER_VALUE :\r
- if( nameString ){\r
- value += str;\r
- break;\r
- } else\r
- if( str === ']' ){\r
- mode = PASER.FINISH;\r
- break;\r
- };\r
- mode = PASER.ERROR;\r
- break;\r
- default :\r
- };\r
- //alert( str + ' ' + mode + ' ' + selector + ' ' + name + ' ' + nameFirst )\r
- if( mode === PASER.ERROR ) return [];\r
- \r
- if( mode === PASER.FINISH && 0 <= selector ){\r
- result[ result.length ] = selector === 7 ? [ key, operator, value ] :\r
- selector < 4 ? selector :\r
- [ selector, name ];\r
- lastSelector = selector;\r
- selector = -1;\r
- mode = PASER.START;\r
- };\r
- };\r
- return result;\r
-};\r
-\r
- \r
-})( window, document );
\ No newline at end of file
\r
\r
var onLibReady = function(){\r
- X.DomEvent.add( window, 'load', ResponsiveImage.onPageLoad );\r
+ X.Dom.Event.add( window, 'load', ResponsiveImage.onPageLoad );\r
//();\r
}; \r
})();\r
--- /dev/null
+/*
+ * Original code by Erik John Resig (ejohn.org)
+ * http://ejohn.org/blog/pure-javascript-html-parser/
+ *
+ */
+
+X.Dom = function(){ if( X.Dom._shortcut ) return X.Dom._shortcut.apply( this, arguments ); };
+
+(function(){
+
+ var alphabets = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ whiteSpace = '\t\r\n\f\b\v ';
+
+ // Empty Elements - HTML 4.01
+ var empty = {area:1,base:1,basefont:1,br:1,col:1,frame:1,hr:1,img:1,input:1,isindex:1,link:1,meta:1,param:1,embed:1};
+
+ // Block Elements - HTML 4.01
+ var block = {address:1,applet:1,blockquote:1,button:1,center:1,dd:1,del:1,dir:1,div:1,dl:1,dt:1,fieldset:1,form:1,frameset:1,hr:1,iframe:1,ins:1,isindex:1,li:1,map:1,menu:1,noframes:1,noscript:1,object:1,ol:1,p:1,pre:1,script:1,table:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,ul:1};
+
+ // Inline Elements - HTML 4.01
+ var inline = {a:1,abbr:1,acronym:1,applet:1,b:1,basefont:1,bdo:1,big:1,br:1,button:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,label:1,map:1,object:1,q:1,s:1,samp:1,script:1,select:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,textarea:1,tt:1,u:1,'var':1};
+
+ // Elements that you can, intentionally, leave open
+ // (and which close themselves)
+ var closeSelf = {colgroup:1,dd:1,dt:1,li:1,options:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1};
+
+ // Attributes that have their values filled in disabled="disabled"
+ var fillAttrs = {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};
+
+ // Special Elements (can contain anything)
+ var special = {script:1,style:1};
+
+ X.Dom.Parser = function( html, handler ) {
+ var stack = [],
+ lastHtml = html,
+ chars, last, text, index;
+
+ while ( html ) {
+ chars = true;
+ last = stack[ stack.length - 1 ];
+
+ // Make sure we're not in a script or style element
+ if ( last && special[ last ] === 1 ) {
+ if( 0 <= ( index = _parseEndTag( stack, handler, html ) ) ){
+ //handler.chars( html.substring( 0, index ) );
+ html = html.substring( index );
+ };
+ } else {
+ // Comment
+ if ( html.indexOf("<!--") === 0 ) {
+ if ( 0 < ( index = html.indexOf("-->") ) ) {
+ handler.comment( html.substring( 4, index ) );
+ html = html.substring( index + 3 );
+ chars = false;
+ };
+
+ // end tag
+ } else if ( html.indexOf("</") === 0 ) {
+ if ( 2 < ( index = _parseEndTag( stack, handler, html ) ) ) {
+ html = html.substring( index );
+ chars = false;
+ };
+
+ // start tag
+ } else if ( html.indexOf("<") === 0 ) {
+ if( index = _parseStartTag( stack, last, handler, html ) ){
+ html = html.substring( index );
+ chars = false;
+ };
+ };
+
+ if ( chars ) {
+ index = html.indexOf("<");
+
+ text = index < 0 ? html : html.substring( 0, index );
+ html = index < 0 ? '' : html.substring( index );
+
+ handler.chars( text );
+ };
+
+ };
+
+ if ( html === lastHtml ){
+ handler.err( html );
+ return;
+ };
+ lastHtml = html;
+ };
+
+ // Clean up any remaining tags
+ parseEndTag( stack, handler );
+ };
+
+ function _parseStartTag( stack, last, handler, html ){
+ var phase = 0,
+ l = html.length,
+ i = 0,
+ attrs = [],
+ tagName, empty,
+ chr, start, attrName, quot, escape;
+
+ while( i < l && phase < 9 ){
+ chr = html.charAt( i );
+ switch( phase ){
+ case 0 :
+ chr === '<' && ( ++phase );
+ break;
+ case 1 : // タグ名の開始を待つ
+ alphabets.indexOf( chr ) !== -1 && ( ++phase && ( start = i ) );
+ break;
+ case 2 : // タグ名の終わりの空白文字を待つ
+ whiteSpace.indexOf( chr ) !== -1 ?
+ ( ++phase && ( tagName = html.substring( start, i ) ) ) :
+ ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&
+ ( ( tagName = html.substring( start, i ) ) && ( phase = 9 ) );
+ break;
+ case 3 : // 属性名の開始を待つ
+ alphabets.indexOf( chr ) !== -1 ?
+ ( ++phase && ( start = i ) ) :
+ ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&
+ ( phase = 9 );
+ break;
+ case 4 : // 属性名の終わりを待つ
+ chr === '=' ?
+ ( ( phase = 6 ) && ( attrName = html.substring( start, i ) ) ) :
+ whiteSpace.indexOf( chr ) !== -1 &&
+ ( ( phase = 5 ) && ( attrName = html.substring( start, i ) ) );
+ break;
+ case 5 : // 属性の = または次の属性または htmlタグの閉じ
+ alphabets.indexOf( chr ) !== -1 ?
+ ( ( phase = 4 ) && ( attrs[ attrs.length ] = attrName ) && ( start = i ) ) :
+ chr === '=' ?
+ ( phase = 6 ) :
+ ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&
+ ( ( phase = 9 ) && ( attrs[ attrs.length ] = attrName ) );
+ break;
+ case 6 : // 属性値の開始 quot を待つ
+ ( chr === '"' || chr === "'" ) ?
+ ( ( phase = 7 ) && ( quot = chr ) && ( start = i + 1 ) ):
+ whiteSpace.indexOf( chr ) === -1 &&
+ ( ( phase = 8 ) && ( start = i ) ); // no quot
+ break;
+ case 7 : //属性値の閉じ quot を待つ
+ !escape && ( chr === quot ) && ( phase = 3 ) && saveAttr( attrs, attrName, html.substring( start, i ) );
+ break;
+ case 8 : //閉じ quot のない属性の値
+ whiteSpace.indexOf( chr ) !== -1 ?
+ ( ( phase = 3 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) ) :
+ ( chr === '>' || ( empty = html.substr( i, 2 ) === '/>' ) ) &&
+ ( ( phase = 9 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) );
+ break;
+ };
+ escape = chr === '\\' && !escape; // \\\\ is not escape for "
+ ++i;
+ };
+ if( phase === 9 ){
+ parseStartTag( stack, last, handler, tagName.toLowerCase(), attrs, empty );
+ return i;
+ };
+ return 0; // error
+ };
+
+ function _parseEndTag( stack, handler, html ){
+ var phase = 0,
+ l = html.length,
+ i = 0,
+ tagName,
+ chr, start;
+
+ while( i < l && phase < 9 ){
+ chr = html.charAt( i );
+ switch( phase ){
+ case 0 :
+ html.substr( i, 2 ) === '</' && ( ++phase && ++i );
+ break;
+ case 1 : // タグ名の開始を待つ
+ alphabets.indexOf( chr ) !== -1 && ( ++phase && ( start = i ) );
+ break;
+ case 2 : // タグ名の終わりの空白文字を待つ
+ whiteSpace.indexOf( chr ) !== -1 && ( ++phase );
+ ( chr === '>' ) && ( phase = 9 );
+ ( phase !== 2 ) && ( tagName = html.substring( start, i ) );
+ break;
+ case 3 : // 属性名の開始を待つ
+ chr === '>' && ( phase = 9 );
+ break;
+ };
+ ++i;
+ };
+ if( phase === 9 ){
+ parseEndTag( stack, handler, tagName.toLowerCase() );
+ return i;
+ };
+ return 0; // error
+ };
+
+ function saveAttr( attrs, name, value ){
+ name = name.toLowerCase();
+ value = fillAttrs[ name ] === 1 ? name : value;
+ attrs[ attrs.length ] = {
+ name : name,
+ value : value,
+ escaped : value && value.split( '"' ).join( '\\"' ).split( '\\\\"' ).join( '\\"' )
+ };
+ };
+
+ function parseStartTag( stack, last, handler, tagName, attrs, unary ) {
+ if ( block[ tagName ] === 1 ) {
+ while ( last && inline[ last ] === 1 ) {
+ parseEndTag( stack, handler, last );
+ last = stack[ stack.length - 1 ];
+ };
+ };
+ closeSelf[ tagName ] === 1 && last === tagName && parseEndTag( stack, handler, tagName );
+ unary = empty[ tagName ] === 1 || !!unary;
+ !unary && ( stack[ stack.length ] = tagName );
+
+ handler.start( tagName, attrs, unary );
+ };
+
+ function parseEndTag( stack, handler, tagName ) {
+ var pos = 0, i = stack.length;
+ // If no tag name is provided, clean shop
+
+ // Find the closest opened tag of the same type
+ if ( tagName )
+ for ( pos = i; 0 <= pos; )
+ if ( stack[ --pos ] === tagName )
+ break;
+
+ if ( 0 <= pos ) {
+ // Close all the open elements, up the stack
+ for ( ; pos < i; )
+ handler.end( stack[ --i ] );
+
+ // Remove the open elements from the stack
+ stack.length = pos;
+ };
+ };
+
+})();
+
+X.Dom._htmlStringToXHtmlNode = {
+ flat : undefined,
+ nest : [],
+ err : function( html ){
+ this.flat.length = 0;
+ this.ignoreError !== true && X.Notification.warn( 'X.Dom.Parser() error ' + html );
+ },
+ start : function( tagName, attrs, noChild ){
+ var $,
+ nest = this.nest,
+ flat = this.flat;
+ if( $ = nest[ nest.length - 1 ] ){
+ $ = $.create( tagName ).lastChild();
+ } else {
+ $ = flat[ flat.length ] = X.Dom.create( tagName );
+ };
+ $.attr( attrs );
+ if( !noChild ) nest[ nest.length ] = $;
+ },
+ end : function(){
+ 0 < this.nest.length && ( --this.nest.length );
+ },
+ chars : function( text ){
+ var $;
+ if( $ = this.nest[ this.nest.length - 1 ] ){
+ $.createText( text );
+ } else {
+ this.flat[ this.flat.length ] = X.Dom.createText( text );
+ };
+ },
+ comment : function(){
+
+ }
+};
+
+X.Dom.parse = function( html, ignoreError ){
+ var worker = X.Dom._htmlStringToXHtmlNode, ret;
+ worker.flat = [];
+ worker.nest.length = 0;
+ worker.ignoreError = ignoreError;
+ X.Dom.Parser( html, worker );
+ ret = worker.flat;
+ delete worker.flat;
+ return ret.length < 2 ? ret[ 0 ] : ret;
+};
+
--- /dev/null
+/**
+ * use X.Callback
+ */
+
+if( window.addEventListener ){
+ X.Dom.Event = function( e ){
+ this._event = e;
+ this.type = e.type;
+ this.target = e.target;
+ this.currentTarget = e.currentTarget;
+ this.relatedTarget = e.relatedTarget;
+ this.eventPhase = e.eventPhase;
+
+ this.clientX = e.clientX;
+ this.clientY = e.clientY;
+ this.screenX = e.screenX;
+ this.screenY = e.screenY;
+
+ this.keyCode = e.keyCode;
+ this.altKey = e.altKey;
+ this.ctrlKey = e.ctrlKey;
+ this.shiftKey = e.shiftKey;
+
+ this.wheelDelta = e.wheelDelta;
+ };
+} else {
+ X.Dom.Event = function( e, element ){
+ this._event = e;
+ this.type = e.type;
+ this.target = e.srcElement;
+ this.currentTarget = element;
+ this.relatedTarget = e.formElement ? e.formElement : e.toElement;
+ this.eventPhase = e.srcElement === element ? 2: 3;
+
+ this.clientX = e.clientX;
+ this.clientY = e.clientY;
+ this.screenX = e.screenX;
+ this.screenY = e.screenY;
+
+ this.keyCode = e.keyCode;
+ this.altKey = e.altKey;
+ this.ctrlKey = e.ctrlKey;
+ this.shiftKey = e.shiftKey;
+
+ this.wheelDelta = e.wheelDelta;
+ };
+};
+
+X.Dom.Event.add = function( element, type, arg2, arg3, arg4 /* [ listener || ( context + function ) || function ][ arguments ] */ ){
+ var xhe = X.Dom.Event, callback, helper, list;
+ callback = typeof arg2 === 'function' ? X.Callback.create( element, arg2, arg3 ) : X.Callback.create( arg2, arg3, arg4 );
+ if( helper = xhe._find( element, type ) ){
+ list = helper.list;
+ if( list.indexOf( callback ) === -1 ) list[ list.length ] = callback;
+ } else {
+ xhe._LIST[ xhe._LIST.length ] = new xhe._Helper( element, type, callback );
+ };
+};
+
+X.Dom.Event.remove = function( element, type, arg2, arg3 ){
+ var t = X.Dom.Event._find( element, type ),
+ c = X.Callback._find( arg2, arg3 ),
+ i;
+ if( t && c ){
+ i = t.list.indexOf( c );
+ if( i !== -1 ){
+ t.list.splice( i, 1 );
+ X.Callback._correct( c );
+ };
+ t.list.length === 0 && t.removeEvent();
+ };
+};
+
+X.Dom.Event._LIST = [];
+
+X.Dom.Event._find = function( element, type ){
+ var list = X.Dom.Event._LIST,
+ i = list.length,
+ helper;
+ for( ; i; ){
+ helper = list[ --i ];
+ if( helper.elm === element && helper.type === type ) return helper;
+ };
+};
+
+X.Dom.Event._Helper =
+ document.addEventListener ?
+ (function( elm, type, callback ){
+ this.elm = elm;
+ this.type = type;
+ this.list = [ callback ];
+ elm.addEventListener( type, this, false );
+ }) :
+ document.attachEvent ?
+ (function( elm, type, callback ){
+ this.elm = elm;
+ this.type = type;
+ this.list = [ callback ];
+ elm.attachEvent( 'on' + type, ( this.callback = X.Callback.create( this ) ) );
+ }) :
+ (function( elm, type, callback ){
+ this.elm = elm;
+ this.type = type;
+ this.list = [ callback ];
+ this.callback = elm[ 'on' + type ] = X.Callback.create( this );
+ });
+
+X.Dom.Event._Helper.prototype.handleEvent =
+ window.addEventListener ?
+ (function( e ){
+ var list = this.list,
+ l = list.length,
+ e = new X.Dom.Event( e ),
+ i = 0,
+ ret = 0,
+ f, r;
+ for( ; i < l; ++i ){
+ f = list[ i ];
+ r = f( e );
+ ret |= r;
+ if( r & X.Callback.UN_LISTEN ){
+ list.splice( i, 1 );
+ X.Callback._correct( f );
+ list.length === 0 && this.removeEvent();
+ };
+ if( r & X.Callback.CANCEL_NOW ) break;
+ };
+ if( ( ret & X.Callback.STOP_PROPAGATION ) ){
+ e.stopPropagation();
+ };
+ if( ( ret & X.Callback.PREVENT_DEFAULT ) ){
+ e.preventDefault();
+ return false;
+ };
+ }) :
+ (function(){
+ var list = this.list,
+ l = list.length,
+ e = new X.Dom.Event( event, this.elm ),
+ i = 0,
+ ret = 0,
+ r, f;
+ for( ; i < l; ++i ){
+ f = list[ i ];
+ r = f( e );
+ ret |= r;
+ if( r & X.Callback.UN_LISTEN ){
+ list.splice( i, 1 );
+ X.Callback._correct( f );
+ list.length === 0 && this.removeEvent();
+ };
+ if( r & X.Callback.CANCEL_NOW ) break;
+ };
+ if( ( ret & X.Callback.STOP_PROPAGATION ) ){
+ event.cancelBubble = true;
+ };
+ if( ( ret & X.Callback.PREVENT_DEFAULT ) ){
+ return event.returnValue = false;
+ };
+ });
+
+X.Dom.Event._Helper.prototype.removeEvent =
+ document.removeEventListener ?
+ (function(){
+ this.elm.removeEventListener( this.type, this );
+ delete this.elm;
+ delete this.type;
+ delete this.list;
+ X.Dom.Event._LIST.splice( X.Dom.Event._LIST.indexOf( this ), 1 );
+ }) :
+ document.detachEvent ?
+ (function(){
+ this.elm.detachEvent( 'on' + this.type, this.callback );
+ X.Callback._correct( this.callback );
+ delete this.elm;
+ delete this.type;
+ delete this.list;
+ delete this.callback;
+ X.Dom.Event._LIST.splice( X.Dom.Event._LIST.indexOf( this ), 1 );
+ }) :
+ (function(){
+ this.elm[ 'on' + this.type ] = emptyFunc;
+ this.elm[ 'on' + this.type ] = '';
+ X.Callback._correct( this.callback );
+ delete this.elm;
+ delete this.type;
+ delete this.list;
+ X.Dom.Event._LIST.splice( X.Dom.Event._LIST.indexOf( this ), 1 );
+ });
+
+if( !document.removeEventListener && !document.detachEvent ){
+ X.Dom.Event.emptyFunc = new Function();
+};
\ No newline at end of file
--- /dev/null
+\r
+/*\r
+ * Node( rawElement | rawTextnode | htmlString | textString )\r
+ * input=text ui#only.first > li.odd, li.even, li.odd\r
+ */\r
+\r
+var Node = X.Dom.Node = function( v ){\r
+ var nodeList, xnode, uid;\r
+ \r
+ if( Node._newByTag ){\r
+ delete Node._createByTag;\r
+ this._tag = v;\r
+ } else\r
+ if( Node._newByText ){\r
+ delete Node._createByText;\r
+ this._text = v;\r
+ } else {\r
+ if( 1 < arguments.length ){\r
+ return new X.Dom.NodeList( arguments );\r
+ };\r
+ if( v && 1 < v.length ){\r
+ return new X.Dom.NodeList( v );\r
+ };\r
+ \r
+ if( !this || this.constractor !== Node ) return new Node( v );\r
+ \r
+ switch( Node._getType( v ) ){\r
+ case Node.IS_XHNODE :\r
+ return v;\r
+ case Node.IS_RAW_HTML :\r
+ if( xnode = Node._getXNode( v ) ) return xnode;\r
+ ( uid = v.parentNode.uid ) && ( this.parent = Node._chashe[ uid ] );\r
+ this._rawNode = v;\r
+ this._type = 1;\r
+ break;\r
+ case Node.IS_RAW_TEXT :\r
+ if( xnode = Node._getXNode( v ) ) return xnode;\r
+ ( uid = v.parentNode.uid ) && ( this.parent = Node._chashe[ uid ] );\r
+ this._rawNode = v;\r
+ this._type = 3;\r
+ break;\r
+ case Node.IS_HTML_STRING :\r
+ case Node.IS_STRING :\r
+ if( nodeList = X.Dom.parse( v, true ) && 1 < nodeList.length ) return new X.Dom.NodeList( nodeList );\r
+ if( nodeList.length ) return nodeList[ 0 ];\r
+ return Node._chashe[ 0 ];\r
+ default :\r
+ return Node._chashe[ 0 ];\r
+ }; \r
+ };\r
+ \r
+ this._uid = Node._chashe.length;\r
+ Node._chashe[ this._uid ] = this;\r
+ this._rawNode &&\r
+ ( this._type === 1 && 4 < X.UA.IE && X.UA.IE < 6 ) ?\r
+ this._rawNode.setAttribute( 'uid', this._uid ) :\r
+ ( this._rawNode.uid = this._uid );\r
+};\r
+\r
+Node._getType = function( v ){\r
+ if( v === '' ) return Node.IS_STRING;\r
+ if( !v ) return 0;\r
+ if( v.constructor === Node ) return Node.IS_XHNODE;\r
+ if( v.tagName ) return Node.IS_RAW_HTML;\r
+ if( v.nodeType === 3 ) return Node.IS_RAW_TEXT;\r
+ if( typeof v === 'string' ){\r
+ return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? Node.IS_HTML_STRING : Node.IS_STRING;\r
+ };\r
+ return 0;\r
+};\r
+\r
+Node._chashe = [ new Node() ];\r
+Node._getXNode = function( node ){\r
+ return node.uid && Node._chashe[ node.uid ];\r
+};\r
+\r
+Node.hasClass = function( elm , className ){\r
+ var cnames = ( elm.className || '' ).split( ' ' ),\r
+ _cnames = className.split( ' ' ),\r
+ cname,\r
+ i = _cnames.length;\r
+ for( ; i; ){\r
+ cname = _cnames[ --i ];\r
+ if( cname === '' ) continue;\r
+ if( cnames.indexOf( cname ) === -1 ) return false;\r
+ };\r
+ return true;\r
+};\r
+\r
+Node.IS_XHNODE = 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
+\r
+Node.prototype._uid = 0;\r
+Node.prototype._type = 0;\r
+Node.prototype._rawNode = null;\r
+Node.prototype._tag = null;\r
+Node.prototype._text = null;\r
+Node.prototype._id = null;\r
+Node.prototype._className = null;\r
+Node.prototype._attr = null;\r
+Node.prototype.parent = null;\r
+\r
+/* --------------------------------------\r
+ * Dom Level 2\r
+ */\r
+if( document.getElementById ){\r
+ Node._dom2cleanUp = function( xnode ){\r
+ var elm = xnode._rawNode,\r
+ children = xnode._children,\r
+ childNodes, i, l, child, _child;\r
+ if( elm && children && ( childNodes = elm.childNodes ) ){\r
+ for( i = 0, l = children.length; i < l; ++i ){\r
+ child = children[ i ];\r
+ if( child.constractor === Node ) child = child._create( true );\r
+ if( typeof child === 'string' ) child = document.createTextNode( child );\r
+ if( ( _child = childNodes[ i ] ) !== child ){\r
+ _child ?\r
+ elm.insetBefore( child, _child ) :\r
+ elm.appendChild( child );\r
+ _child && elm.removeChild( _child );\r
+ };\r
+ };\r
+ while( ( _child = childNodes[ i ] ) ){\r
+ elm.removeChild( _child );\r
+ };\r
+ };\r
+ }; \r
+};\r
+\r
+/* --------------------------------------\r
+ * Create\r
+ */\r
+Node.prototype._create =\r
+ document.createElement ? (function( isChild ){\r
+ var tag = this._tag, node, frg;\r
+ if( tag === 'input' ){\r
+ // ie7 以下では createElement では name 等が働かない!\r
+ };\r
+ if( !( node = this._rawNode ) ){\r
+ this._isNew = true;\r
+ node = this._rawNode = ( tag ? document.createElement( tag ) : document.createTextNode( this._text ) );\r
+ };\r
+ // fragument がある場合 children も足して\r
+ // Mozilla: 1.0+, IE: 6.0+, Netscape: 2.0+, Safari: 1.0+, Opera: 7.0+\r
+ if( !isChild && document.createDocumentFragment ){\r
+ if( node.nodeType === 1 ){\r
+ frg = document.createDocumentFragment();\r
+ frg.appendChild( node );\r
+ Node._dom2cleanUp( this );\r
+ return frg;\r
+ };\r
+ };\r
+ return node;\r
+ }) :\r
+ document.all ? (function(){\r
+ var elm, id, html, children, i, l, child;\r
+ if( elm = this._ie4getRawNode() ){\r
+ // 追加する前に要素を抜く\r
+ this.remove();\r
+ return elm.outerHTML;\r
+ };\r
+ // attr\r
+ id = this._id || this._ie4uid || ( 'ie4uid_' + ( ++Node.ie4uid ) );\r
+ html = [ '<', this._tag, id ? ( ' id="' + id + '"' ) : '', '>' ];\r
+ if( ( children = this._children ) && ( l = children.length ) ){\r
+ for( i = 0; i < l; ++i ){\r
+ child = children[ i ];\r
+ html[ html.length ] = child.constractor === Node ? child._create() : ( child.outerHTML || child );\r
+ };\r
+ };\r
+ html[ html.length ] = '<\/' + this._tag + '>';\r
+ return html.join( '' );\r
+ }) :\r
+ (function(){});\r
+\r
+Node.prototype._afterCreate =\r
+ document.createElement ? (function( parent ){\r
+ var _children = this._children,\r
+ node = this._rawNode,\r
+ eChildren = node.childNodes,\r
+ _child, i, l;\r
+ this.parent = parent;\r
+ if( this._isNew ){\r
+ if( _children && !document.createDocumentFragment ){ \r
+ Node._dom2cleanUp( this ); // docFrg が使えない場合、doc 追加後に子を追加\r
+ };\r
+ node.uid = this._uid;\r
+ // attr\r
+ // イベントの復帰\r
+ delete this._isNew;\r
+ };\r
+ /*\r
+ * elm.childNodes を __.children にリンクさせる\r
+ */\r
+ if( _children ){\r
+ for( i = 0, l = _children.length; i < l; ++i ){\r
+ _child = _children[ i ];\r
+ _child.constractor === Node ? _child._afterCreate( this ) : ( _children[ i ] = eChildren[ i ] );\r
+ };\r
+ } else\r
+ if( eChildren && eChildren.length ){\r
+ this._children = [];\r
+ this._children.push.apply( this._children, eChildren );\r
+ };\r
+ return this;\r
+ }) :\r
+ document.all ? (function( parent ){\r
+ var elm = this._ie4getRawNode(),\r
+ _children = this._children,\r
+ eChildren = elm.innerHTML && Node._ie4getChildNodes( elm ),\r
+ _child, i, l;\r
+ this.parent = parent;\r
+ /*\r
+ * elm.children を __.children にリンクさせる\r
+ */\r
+ if( _children ){\r
+ for( i = 0; i < l; ++i ){\r
+ _child = _children[ i ];\r
+ if( _child.constractor === Node ){\r
+ if( _child._ie4getRawNode() === eChildren[ i ] ){\r
+ _child._afterCreate( this );\r
+ } else {\r
+ alert( 'error XHTMLElement._afterCreate() _child._ie4getRawNode() === eChildren[ i ]' );\r
+ };\r
+ } else\r
+ if( _child !== eChildren[ i ] ){\r
+ alert( 'error XHTMLElement._afterCreate() _child !== eChildren[ i ]' );\r
+ };\r
+ };\r
+ } else\r
+ if( elm.innerHTML ){\r
+ this._children = eChildren;\r
+ } else {\r
+\r
+ };\r
+ /*\r
+ * イベントの復帰 if( __.events && ( elm = this._ie4getRawNode() ) )\r
+ */\r
+ \r
+ delete this._ie4dirty;\r
+ delete this._ie4dirtyChildren;\r
+ }) :\r
+ (function(){});\r
+\r
+/* --------------------------------------\r
+ * Create\r
+ */\r
+Node.prototype.create = function( tag ){\r
+ var elm, v;\r
+ if( this.type !== 1 ) return;\r
+ if( !this._children ) this._children = [];\r
+ \r
+ elm = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
+ \r
+ if( elm ){\r
+ if( document.createElement ){\r
+ elm.appendChild( document.createElement( tag ) );\r
+ v = new Node( elm.lastChild );\r
+ } else\r
+ if( document.all ){\r
+ elm.insertAdjacentHTML( 'BeforeEnd', '<' + tag + '>' );\r
+ v = new Node( elm.children[ elm.children.length - 1 ] );\r
+ } else {\r
+ \r
+ };\r
+ } else {\r
+ Node._newByTag = true;\r
+ v = new Node( v );\r
+ };\r
+ v.parent = this;\r
+ this._children[ this._children.length ] = v;\r
+ return v;\r
+};\r
+\r
+/* --------------------------------------\r
+ * Create\r
+ */\r
+Node.prototype.createText = function( text ){\r
+ var elm, v;\r
+ if( this.type !== 1 ) return;\r
+ if( !this._children ) this._children = [];\r
+ \r
+ elm = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
+ \r
+ if( elm ){\r
+ if( document.createElement ){\r
+ elm.appendChild( document.createTextNode( text ) );\r
+ v = new Node( elm.lastChild );\r
+ } else\r
+ if( document.all ){\r
+ elm.insertAdjacentHTML( 'BeforeEnd', text );\r
+ Node._newByText = true;\r
+ v = new Node( v );\r
+ } else {\r
+ \r
+ };\r
+ } else {\r
+ Node._newByText = true;\r
+ v = new Node( v );\r
+ };\r
+ v.parent = this;\r
+ this._children[ this._children.length ] = v;\r
+ return v;\r
+};\r
+\r
+/* --------------------------------------\r
+ * Add\r
+ * Node\r
+ * HtmlElement の場合は内部使用専用 そのため event の破棄等しない\r
+ */\r
+Node.prototype.append = function( v ){\r
+ var elm, i, l, children;\r
+ if( this.type !== 1 ) return;\r
+ \r
+ if( 1 < arguments.length ){\r
+ for( i = 0, l = arguments.length; i < l; ++i ){\r
+ this.append( arguments[ i ] );\r
+ };\r
+ return this;\r
+ };\r
+ \r
+ if( !this._children ) this._children = [];\r
+ \r
+ elm = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
+ switch( Node._getType( v ) ){\r
+ case Node.IS_RAW_HTML :\r
+ case Node.IS_RAW_TEXT :\r
+ if( elm ){\r
+ if( document.appendChild ){\r
+ elm.appendChild( v );\r
+ } else\r
+ if( document.all ){\r
+ elm.insertAdjacentHTML( 'BeforeEnd', v.outerHTML );\r
+ v = elm.children[ elm.children.length - 1 ];\r
+ } else {\r
+ \r
+ };\r
+ };\r
+ this._children[ this._children.length ] = v;\r
+ break;\r
+ case Node.IS_HTML_STRING :\r
+ case Node.IS_STRING :\r
+ v = X.Dom.parse( v, true );\r
+ if( elm ){\r
+ for( i = 0, l = v.length; i < l; ++i ){\r
+ this.append( v[ i ] );\r
+ };\r
+ } else\r
+ if( 1 < v.length ){\r
+ this._children.push.apply( this._children, v );\r
+ } else\r
+ if( v ){\r
+ this._children[ this._children.length ] = v;\r
+ };\r
+ break;\r
+ case Node.IS_XHNODE :\r
+ if( elm ){\r
+ if( document.appendChild ){\r
+ elm.appendChild( v._create() );\r
+ v._afterCreate( this );\r
+ } else\r
+ if( document.all ){\r
+ elm.insertAdjacentHTML( 'BeforeEnd', v._create() );\r
+ v._afterCreate( this );\r
+ } else {\r
+ \r
+ };\r
+ };\r
+ this._children[ this._children.length ] = v;\r
+ };\r
+ return this;\r
+};\r
+\r
+\r
+Node.prototype.appendAt = function( start, v ){\r
+ var l = arguments.length,\r
+ children = this._children,\r
+ node, i, prev, next;\r
+ if( this.type !== 1 ) return;\r
+ \r
+ if( !children ) children = this._children = [];\r
+ \r
+ if( children.length <= start ){\r
+ for( i = 1; i < l; ++i ){\r
+ return this.append( arguments[ i ] );\r
+ };\r
+ return this;\r
+ };\r
+ if( start < 0 ) start = 0;\r
+ if( 2 < l ){\r
+ for( ; l; ){\r
+ this.appendAt( start, arguments[ --l ] );\r
+ };\r
+ return this;\r
+ };\r
+ if( this._type !== 1 ) return this;\r
+ \r
+ if( !this.parent ){\r
+ children.splice( start, 0, v );\r
+ return this;\r
+ };\r
+ elm = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
+ switch( Node._getType( v ) ){\r
+ case Node.IS_RAW_HTML :\r
+ case Node.IS_RAW_TEXT :\r
+ if( elm ){\r
+ if( document.appendChild ){\r
+ elm.insertBefore( v, elm.childNodes[ start ] );\r
+ } else\r
+ if( document.all ){\r
+ if( start === 0 ){\r
+ elm.insertAdjacentHTML( 'AfterBegin', v.outerHTML );\r
+ v = elm.children[ 0 ];\r
+ } else\r
+ if( ( next = children[ start ] ) && typeof next !== 'string' && next._type !== 2 &&\r
+ ( next = ( next._ie4getRawNode ? next._ie4getRawNode() : next ) ) ){\r
+ next.insertAdjacentHTML( 'BeforeBegin', v.outerHTML );\r
+ v = elm.children[ ( Array.prototype.indexOf.call( elm.children, next ) ) - 1 ];\r
+ } else\r
+ if( 0 < start && ( prev = children[ start - 1 ] ) && typeof prev !== 'string' && prev._type !== 2 &&\r
+ ( prev = ( prev._ie4getRawNode ? prev._ie4getRawNode() : prev ) ) ){\r
+ prev.insertAdjacentHTML( 'AfterEnd', v.outerHTML );\r
+ v = elm.children[ ( Array.prototype.indexOf.call( elm.children, prev ) ) + 1 ];\r
+ } else {\r
+ this._ie4reserveUpdate( v );// テキストノードの間に入れる場合!\r
+ };\r
+ } else {\r
+ \r
+ };\r
+ children.splice( start, 0, v );\r
+ } else {\r
+ children.splice( start, 0, v );\r
+ };\r
+ break;\r
+ case Node.IS_HTML_STRING :\r
+ case Node.IS_STRING :\r
+ v = X.Dom.parse( v, true );\r
+ if( elm ){\r
+ for( i = v.length; i; ){\r
+ this.appendAt( start, v[ --i ] );\r
+ };\r
+ } else\r
+ if( 1 < v.length ){\r
+ children.push.apply( children, v );\r
+ } else\r
+ if( v ){\r
+ children[ children.length ] = v;\r
+ };\r
+ break;\r
+ case Node.IS_XHNODE :\r
+ if( elm ){\r
+ if( document.appendChild ){\r
+ elm.insertBefore( v._create(), elm.childNodes[ start ] );\r
+ v._afterCreate( this );\r
+ } else\r
+ if( document.all ){\r
+ this._ie4reserveUpdate( v );\r
+ } else {\r
+ \r
+ };\r
+ };\r
+ children.splice( start, 0, v );\r
+ };\r
+ return this;\r
+};\r
+\r
+Node.prototype.appendTo = function( parent, opt_start ){\r
+ !opt_start ? new Node( parent ).append( this ) : new Node( parent ).appendAt( opt_start, this );\r
+};\r
+\r
+Node.prototype.appendToRoot = function( opt_start ){\r
+ !opt_start ? Node.root.append( this ) : Node.root.appendAt( opt_start, this );\r
+};\r
+\r
+/* --------------------------------------\r
+ * Before , After\r
+ */\r
+Node.prototype.before = function( v ){\r
+ \r
+};\r
+\r
+Node.prototype.after = function( v ){\r
+ \r
+};\r
+\r
+/* --------------------------------------\r
+ * Remove\r
+ */\r
+Node.prototype.remove = function(){\r
+ var parent = this.parent;\r
+ \r
+ if( !parent ) return this;\r
+ if( document.removeChild ){\r
+ this._rawNode && parent._rawNode.removeChild( this._rawNode );\r
+ } else\r
+ if( document.all ){\r
+ this._ie4beforeRemove();\r
+ delete this._ie4dirty;\r
+ delete this._ie4dirtyChildren;\r
+ parent._ie4reserveUpdate();\r
+ } else {\r
+ \r
+ };\r
+\r
+ parent._children.splice( parent._children.indexOf( v ), 1 );\r
+ delete this.parent;\r
+ return this;\r
+};\r
+\r
+Node.prototype.empty = function( v ){\r
+ \r
+};\r
+\r
+/* --------------------------------------\r
+ * replace\r
+ */\r
+\r
+/* --------------------------------------\r
+ * destory\r
+ */\r
+Node.prototype.destroy = function( v ){\r
+ \r
+};\r
+\r
+/* --------------------------------------\r
+ * for ie4\r
+ */\r
+if( !document.getElementById && document.all ){\r
+ Node.prototype._ie4beforeRemove = function(){\r
+ var __ = this.__,\r
+ children = __.children,\r
+ child, i, l, elm;\r
+ if( children ){\r
+ for( i = 0, l = children.length; i < l; ++i ){\r
+ child = children[ i ];\r
+ child.constractor === Node && child._ie4beforeRemove();\r
+ }; \r
+ };\r
+ if( elm = this._ie4getRawNode() ){\r
+ // イベントの削除\r
+ if( elm.id && elm.id !== __.ie4uid ){\r
+ __.id = elm.id;\r
+ } else\r
+ if( !elm.id ){\r
+ __.ie4uid = elm.id = 'ie4uid_' + ( ++Node.ie4uid );\r
+ };\r
+ __.htmlText = elm.outerHTML;\r
+ delete this._rawNode;\r
+ };\r
+ };\r
+ \r
+ Node.prototype._ie4getRawNode = function(){\r
+ var __ = this.__, elm, uid;\r
+ if( ( elm = this._rawNode ) && elm.parentElement ) return elm;\r
+ if( ( uid = __.id ) && ( elm = document.all[ uid ] ) ){\r
+ return ( this._rawNode = elm );\r
+ };\r
+ if( ( uid = __.ie4uid ) && ( elm = document.all[ uid ] ) ){\r
+ delete __.ie4uid;\r
+ delete __.htmlText;\r
+ if( __.id ) elm.id = __.id;\r
+ return ( this._rawNode = elm );\r
+ };\r
+ };\r
+ \r
+ Node.ie4uid = 0;\r
+ \r
+ Node.prototype._ie4reserveUpdate = function( child ){\r
+ var root = Node.root;\r
+ child && ( child.__.ie4dirty = true );\r
+ this.__.ie4dirtyChildren = true;\r
+ if( root.__.reserved === true ) return;\r
+ root.__.reserved = true;\r
+ X.Timer.once( 1, root, root._ie4startUpdate );\r
+ };\r
+ \r
+ Node.root._ie4startUpdate = function(){\r
+ var __ = this.__;\r
+ if( __.reserved !== true ) return;\r
+ if( this._ie4getRawNode() ) this._rawNode = document.all.tags( 'BODY' )[ 0 ];\r
+ // !this._rawNode && onload( )\r
+ delete __.reserved;\r
+ if( !__.children ) return;\r
+ this._ie4commitUpdate()._ie4afterUpdate();\r
+ };\r
+ \r
+ Node.prototype._ie4commitUpdate = function(){\r
+ var __ = this.__,\r
+ children = __.children,\r
+ i, l, child, html;\r
+ if( !__.ie4dirtyChildren && !__.ie4dirty ){\r
+ for( i = 0, l = children.length; i < l; ++i ){\r
+ child = children[ i ];\r
+ child.constractor === Node && child._ie4commitUpdate();\r
+ };\r
+ return this;\r
+ };\r
+ html = [];\r
+ for( i = 0, l = children.length; i < l; ++i ){\r
+ child = children[ i ];\r
+ html[ html.length ] = child.constractor === Node ?\r
+ ( child.__.ie4dirty ? child._ie4commitUpdate() : child._create() ) :\r
+ ( child.outerHTML || child );\r
+ };\r
+ if( !__.ie4dirty ){\r
+ this._rawNode.innerHTML = html.join( '' );\r
+ return this;\r
+ };\r
+ return html.join( '' );\r
+ };\r
+ \r
+ Node.prototype._ie4afterUpdate = function(){\r
+ var __ = this.__,\r
+ children = __.children,\r
+ i, l, child;\r
+ if( !__.ie4dirtyChildren && !__.ie4dirty ){\r
+ for( i = 0, l = children.length; i < l; ++i ){\r
+ child = children[ i ];\r
+ child.constractor === Node && child._ie4afterUpdate();\r
+ };\r
+ };\r
+\r
+ for( i = 0, l = children.length; i < l; ++i ){\r
+ child = children[ i ];\r
+ child.constractor === Node &&\r
+ ( child.__.ie4dirty ? child._ie4afterUpdate() : child._afterCreate( this ) );\r
+ };\r
+ delete __.ie4dirtyChildren;\r
+ delete __.ie4dirty;\r
+ };\r
+ \r
+ /*\r
+ * ie4 に TextNode は存在しない。 よって、Element.children にテキストノードは無視される。\r
+ * そこでテキストノードを判定して控える操作が必要になる。\r
+ * elm と string( TextNode の変わり ) の混在する配列が返る\r
+ * return [ elm, 'text', elm, elm, ... ]\r
+ */\r
+ Node._ie4getChildNodes = function( elm ){\r
+ var html = elm.innerHTML,\r
+ children = elm.children,\r
+ l = children.length,\r
+ _ = '',\r
+ cr, i, j, child, outer, index, nodes;\r
+ if( l < 1 ){\r
+ if( html.length ) return [ html ]; // new X.TextNode( html );\r
+ return [];\r
+ };\r
+ cr = Node._ie4getCRCChars( html );\r
+ nodes = [];\r
+ j = -1;\r
+ html = html.split( cr ).join( _ );\r
+ for( i = 0; i <= l; ++i ){\r
+ child = children[ i ];\r
+ outer = child.outerHTML.split( cr ).join( _ );\r
+ index = html.indexOf( outer );\r
+ if( index === -1 ){\r
+ alert( 'Node._ie4getChildNodes\n' + outer + '\n' + html.substr( 0, 100 ) );\r
+ continue;\r
+ };\r
+ if( 0 < index ) nodes[ ++j ] = html.substr( 0, index ); // new X.TextNode( html );\r
+ nodes[ ++j ] = child; // Element\r
+ html = html.substr( index + outer.length );\r
+ };\r
+ if( html.length ) nodes[ ++j ] = html; // new X.TextNode( html );\r
+ return nodes;\r
+ };\r
+ Node._ie4getCRCChars = function( src ){\r
+ return 0 <= src.indexOf( '\r\n' ) ? '\r\n' :\r
+ 0 <= src.indexOf( '\n' ) ? '\n' :\r
+ 0 <= src.indexOf( '\r' ) ? '\r' : '\n';\r
+ };\r
+};\r
+\r
+/* --------------------------------------\r
+ * contains\r
+ */\r
+Node.prototype.contains = function( v ){\r
+ var node, _node;\r
+ if( !this.parent || this._type !== -1 ) return false;\r
+ node = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
+ switch( Node._getType( v ) ){\r
+ case Node.IS_RAW_HTML :\r
+ case Node.IS_RAW_TEXT :\r
+ return node.contains( v );\r
+ case Node.IS_XHNODE :\r
+ _node = v._ie4getRawNode ? v._ie4getRawNode() : v._rawNode;\r
+ if( _node ) return node.contains( _node );\r
+ default :\r
+ return false;\r
+ };\r
+ if( this._children.indexOf( v ) !== -1 ) return true;\r
+ for( i = 0, l = this._children.length; i < l; ++i ){\r
+ if( ( new Node( this._children[ i ] ) ).contains( v ) === true ) return true\r
+ };\r
+ return false;\r
+};\r
+\r
+/* --------------------------------------\r
+ * getChild\r
+ */\r
+Node.prototype.getChildAt = function( index ){\r
+ var children = this._children,\r
+ elm, childNodes, child, xnode;\r
+ if( this._type !== 1 || index < 0 ) return;\r
+ if( !children ){\r
+ elm = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
+ if( !elm ){\r
+ if( v === 0 && this.text ){\r
+ children = this._children = [ this.text ];\r
+ } else {\r
+ return;\r
+ };\r
+ } else {\r
+ /* DOM level2 */\r
+ if( childNodes = elm.childNodes ){\r
+ children = this._children = [];\r
+ children.push.apply( children, childNodes );\r
+ } else\r
+ /* ie4 DOM */\r
+ if( elm.innerHTML ){\r
+ children = this._children = Node._ie4getChildNodes( elm );\r
+ } else {\r
+ return;\r
+ };\r
+ };\r
+ };\r
+ if( children.length <= index ) return;\r
+ child = children[ index ];\r
+ if( child.constractor === Node ) return child;\r
+ xnode = new Node( child );\r
+ xnode.parent = this;\r
+ return children[ index ] = xnode;\r
+};\r
+/* --------------------------------------\r
+ * getByID\r
+ */\r
+/* --------------------------------------\r
+ * getByTag\r
+ */\r
+Node.prototype.getByTag = function( tag ){\r
+ var parent = this.parent, elm, tags;\r
+ if( !parent || this._type !== -1 ) return;\r
+ if( document.getElementsByTagName ){\r
+ if( !( elm = this._rawNode ) ) return;\r
+ new X.Dom.NodeList( elm.getElementsByTagName( tag ) );\r
+ } else\r
+ if( document.all ){\r
+ if( !( elm = this._ie4getRawNode() ) ) return;\r
+ Node.root.__.reserved === true && Node.root._ie4startUpdate();\r
+ new X.Dom.NodeList( elm.all.tags( tag ) ); \r
+ } else {\r
+ \r
+ };\r
+};\r
+\r
+/* --------------------------------------\r
+ * getByClass\r
+ */\r
+Node.prototype.getByClass =\r
+ document.getElementsByClassName ?\r
+ (function( className ){\r
+ var parent = this.parent, elm;\r
+ if( !parent ) return;\r
+ if( !( elm = this._rawNode ) || elm.nodeType !== 1 ) return;\r
+ return new X.Dom.NodeList( elm.getElementsByClassName( className ) );\r
+ }) :\r
+ document.getElementsByTagName ?\r
+ (function( className ){\r
+ var parent = this.parent, elm;\r
+ var live = parent.getElementsByTagName( '*' ),\r
+ nodes = [],\r
+ node, i;\r
+ for( i = live.length; i; ){\r
+ nodes[ --i ] = live[ i ];\r
+ };\r
+ for( i = nodes.length; i; ){\r
+ node = nodes[ --i ];\r
+ ( node.nodeType !== 1 || !node.className || !node.className.length || Node.hasClass( node, className ) === false ) && nodes.splice( i, 1 );\r
+ };\r
+ return new X.Dom.NodeList( nodes );\r
+ }) :\r
+ document.all ?\r
+ (function( parent, className ){\r
+ var live = parent.all,\r
+ nodes = [],\r
+ node, i;\r
+ for( i = live.length; i; ){\r
+ nodes[ --i ] = live[ i ];\r
+ };\r
+ for( i = nodes.length; i; ){\r
+ node = nodes[ --i ];\r
+ ( !node.className || !node.className.length || Node.hasClass( node, className ) === false ) && nodes.splice( i, 1 );\r
+ };\r
+ return new X.Dom.NodeList( nodes );\r
+ }) :\r
+ (function(){}),\r
+\r
+// listen, unlisten, listening\r
+\r
+/* --------------------------------------\r
+ * prevNode, nextNode, firstChild, lastChild\r
+ */\r
+\r
+Node.prototype.prevNode = function(){\r
+ var parent = this.parent, index;\r
+ if( !parent ) return;\r
+ index = parent.children.indexOf( this );\r
+ if( 0 < index ) new Node( parent.children[ index - 1 ] );\r
+};\r
+Node.prototype.nextNode = function(){\r
+ var parent = this.parent, children, index;\r
+ if( !parent ) return;\r
+ children = parent.children;\r
+ index = children.indexOf( this );\r
+ if( index < children.length ) new Node( children[ index + 1 ] );\r
+};\r
+Node.prototype.firstChild = function(){\r
+ return this.getChildAt( 0 );\r
+};\r
+Node.prototype.lastChild = function(){\r
+ return this.getChildAt( this._children.length - 1 );\r
+};\r
+\r
+/* --------------------------------------\r
+ * getOrder\r
+ */\r
+Node.prototype.getOrder = function(){\r
+ var parent = this.parent;\r
+ if( !parent ) return -1;\r
+ return parent.children.indexOf( this );\r
+};\r
+\r
+/* --------------------------------------\r
+ * className, cssText, cssObject\r
+ */\r
+\r
+\r
+/* --------------------------------------\r
+ * attribute\r
+ */\r
+\r
+\r
+/* --------------------------------------\r
+ * Width, Height\r
+ */\r
+Node.prototype.width = function(){\r
+ var parent = this.parent, elm;\r
+ if( !parent ) return 0;\r
+ if( document.getElementById ){\r
+ return ( elm = this._rawNode ) ? elm.offsetWidth : 0;\r
+ } else\r
+ if( document.all ){\r
+ if( !( elm = this._ie4getRawNode() ) ) return 0;\r
+ Node.root.__.reserved === true && Node.root._ie4startUpdate();\r
+ return elm.offsetWidth; \r
+ } else {\r
+ \r
+ };\r
+};\r
+\r
+Node.prototype.height = function(){\r
+ var parent = this.parent, elm;\r
+ if( !parent ) return 0;\r
+ if( document.getElementById ){\r
+ return ( elm = this._rawNode ) ? elm.offsetHeight : 0;\r
+ } else\r
+ if( document.all ){\r
+ if( !( elm = this._ie4getRawNode() ) ) return 0;\r
+ Node.root.__.reserved === true && Node.root._ie4startUpdate();\r
+ return elm.offsetHeight; \r
+ } else {\r
+ \r
+ };\r
+};\r
+\r
+/* --------------------------------------\r
+ * Content Width, Content Height\r
+ */\r
+\r
+\r
+X.Dom.Event.add( window, 'load', function(){\r
+ var r = Node.root = new Node( document.body );\r
+ r.appendTo = r.appendToRoot = r.before = r.after = r.clone = r.remove = r.destroy = r.prevNode = r.nextNode = new Function();\r
+ r = null;\r
+ return X.Callback.UN_LISTEN;\r
+} );
\ No newline at end of file
--- /dev/null
+\r
+X.Dom.NodeList = function( v ){\r
+ var args = [],\r
+ l = arguments.length,\r
+ i = 0,\r
+ indexOf, xhn;\r
+ for( ; i < l; ++i ){\r
+ args.push.apply( args, arguments[ i ] );\r
+ };\r
+ if( ( l = args.length ) === 1 ) return new X.Dom.Node( args[ 0 ] );\r
+ if( !this || this.append !== Node.prototype.append ) return new X.Dom.NodeList( args );\r
+ \r
+ this.__ = { type : 2 };\r
+ indexOf = Array.prototype.indexOf;\r
+ for( i = 0; i < l; ++i ){\r
+ xhn = new X.Dom.Node( args[ i ] );\r
+ if( xhn.type !== 0 && indexOf.call( this, xhn ) === -1 ){\r
+ this[ this.length ] = xhn;\r
+ ++this.length;\r
+ };\r
+ };\r
+};\r
+X.Dom.NodeList.prototype.length = 0;\r
+\r
+/* --------------------------------------\r
+ * Fuction Base, multi, getter, setter,\r
+ */\r
+(function(){\r
+ var target = X.Dom.NodeList.prototype,\r
+ src = X.Dom.Node.prototype,\r
+ p, v, multi;\r
+ \r
+ for( p in src ){\r
+ v = src[ p ];\r
+ if( typeof v === 'funciton' && !target[ p ] ){\r
+ target[ p ] = multi = new Function( [\r
+ 'function functionBase(){',\r
+ 'var a=arguments,s=a.callee,f=s.f,t=this,i,l=t.length;',\r
+ 'if(0<l){',\r
+ 'for(i=0;i<l;++i)if(i===l-1)return f.apply(t[i],a)else f.apply(t[i],a);',\r
+ '}',\r
+ 'return f.apply(t,a)',\r
+ '}' \r
+ ].join( '' ));\r
+ multi.f = src[ p ];\r
+ };\r
+ };\r
+})();\r
--- /dev/null
+X.Dom.find = function( v ){
+ var selectors = parser( v ),
+ l, i, nodes, _nodes, selector,
+ name, key, operator, value,
+ j, m;
+
+ if( !selectors ) return;
+ l = selectors.length;
+ i = 0;
+ nodes = [];
+
+ for( ; i < l; ++i ){
+ selector = selectors[ i ];
+ if( 2 <= selector.length ){
+ operator = selector[ 2 ];
+ value = selector[ 3 ];
+ name = key = selector[ 1 ];
+ selector = selector[ 0 ];
+ };
+ switch( selector ){
+ case 4 : // # id
+ nodes = [ X.Dom.getById( name ) ];
+ break;
+ case 5 : // . classname
+ _nodes = [];
+ for( j = 0, m = nodes.length; j < m; ++j ){
+ _nodes = _nodes.concat( nodes[ j ].getByClass( name ) );
+ };
+ nodes = _nodes;
+ break;
+ case 6 : // :focus, :disabled ...
+ switch( name ){
+ case 'focus' :
+ case 'disabled' :
+ case 'checked' :
+ case 'enabled' :
+ case 'empty' :
+ case 'only-of-type' :
+ case '' :
+ case 'target' :
+ case 'link' :
+ case 'visited' :
+ case 'hover' :
+ case 'active' :
+ case 'first-line' :
+ case 'first-letter' :
+ case 'before' :
+ case 'after' :
+ case ':selection' :
+ case 'lang()' :
+ case 'not()' :
+ };
+ break;
+ case 7 : // [
+
+ break;
+ case 8 : // . tagname
+ _nodes = [];
+ for( j = 0, m = nodes.length ; j < m; ++j ){
+ _nodes = _nodes.concat( nodes[ j ].getByTag( name ) );
+ };
+ nodes = _nodes;
+ break;
+ };
+ };
+ return new X.Dom.NodeList( nodes );
+};
+
+
+HASH_SELECTOR = {
+ ' ' : 0,
+ '>' : 1,
+ '+' : 2,
+ '~' : 3,
+ '#' : 4,
+ '.' : 5,
+ ':' : 6,
+ '[' : 7,
+ scope : 9,
+ root : 10,
+ link : 11
+};
+OPERATORS = { "!=": 2, "~=": 3, "^=": 4, "$=": 5, "*=": 6, "|=": 7 };
+ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-0123456789\\';
+
+function parser( query ){
+ query += ' ';
+ var result = [],
+ i = 0,
+ l = query.length,
+ phase = 0,
+ selector = -1,
+ last = 0,
+ chr, index, start, name, key, value, operator, nameChr, name1st, escape;
+ while( i < l ){
+ chr = query.charAt( i );
+ index = ALPHABET.indexOf( chr );
+ nameChr = index !== -1;
+ name1st = nameChr && index < 52;
+ switch( phase ){
+ case 99 :
+ return;
+ case 0 :
+ name1st ? // tagName
+ ( ( selector = 8 ) && ( phase = 2 ) && ( start = i ) ) :
+ ( index = HASH_SELECTOR.indexOf( chr ) ) === 7 ? // [
+ ( ( selector = 7 ) && ( phase = 3 ) ) :
+ 0 <= index ?
+ ( ( selector = index ) && ( phase = index < 4 ? 9 : 1 ) ) :
+ chr !== ' ' &&
+ ( phase = 99 );
+ break;
+ case 1 :
+ name1st ?
+ ( ( start = i ) && ( phase = 2 ) ) :
+ ( phase = 99 );
+ break;
+ case 2 :
+ !nameChr &&
+ !( escape && ( selector === 4 || selector === 5 ) && ( chr === ':' || chr === '.' ) ) // id or class の場合 : . を直前にエスケープした場合に限り使える
+ && ( name = query.substring( start, i ) ) && ( phase = 9 );
+ break;
+ case 3 : // start attr filter
+ name1st ?
+ ( ( phase = 4 ) && ( start = i ) ) :
+ ( phase = 99 );
+ break;
+ case 4 : // attr filter key
+ chr === '=' ?
+ ( ( operator = 1 ) && ( phase = 5 ) && ( key = query.substring( start, i ) ) && ( start = i ) ) :
+ ( index = OPERATORS[ query.substr( i, 2 ) ] ) ?
+ ( ( operator = index ) && ( phase = 5 ) && ( key = query.substring( start, i ) ) && ( start = i ) && ++i ) :
+ chr !== ' ' &&
+ ( phase = 99 );
+ break;
+ case 5 : // attr filter value
+ chr === ']' ?
+ ( ( phase = 9 ) && ( value = query.substring( start, i ) ) ) :
+ !nameChr &&
+ ( phase = 99 );
+ break;
+ default :
+ };
+ //alert( chr + ' ' + phase + ' ' + selector + ' ' + name + ' ' + name1st )
+ if( phase === 9 ){
+ if( last < 4 && selector < 4 ){
+ if( last === 0 ){
+ result[ result.length - 1 ] = selector; // override
+ last = selector;
+ } else {
+ return; // error
+ };
+ } else { // 前回今回とも子孫セレクタの場合、保存しない
+ result[ result.length ] =
+ selector < 4 ?
+ selector :
+ selector === 7 ?
+ [ selector, key, operator, value ] :
+ [ selector, name.split( '\\' ).join( '' ) ];
+ last = selector;
+ };
+ selector = -1;
+ phase = 0;
+ } else
+ if( phase === 99 ) return;
+
+ escape = chr === '\\' && !escape;
+ };
+ return result;
+};
\ No newline at end of file
X.View.Event.NameToID[ 'MSPointerUp' ] = X.View.Event.POINTER_END;\r
X.View.Event.NameToID[ 'MSPointerMove' ] = X.View.Event.POINTER_MOVE;\r
} else\r
-if( 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch ){\r
+if( window.ontouchstart || window.DocumentTouch /* && document instanceof DocumentTouch */ ){\r
X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'touchstart';\r
X.View.Event.IdToName[ X.View.Event.POINTER_END ] = 'touchend';\r
X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ] = 'touchmove';\r
};\r
\r
X.View = (function( window, document ){\r
- var view = X.UA.IE ?\r
- ( document.compatMode !== "CSS1Compat" ? document.body : document.documentElement ) : window,\r
+ var view,\r
lock = 0, w = 0, h = 0,\r
resize, delayResize;\r
\r
};\r
};\r
\r
- X.View = X.Class._override( new X.EventDispatcher(),\r
+ X.View = X.Class._override(\r
+ new X.EventDispatcher(),\r
{\r
ready : false,\r
- _view : view,\r
- getSize : ( view.innerWidth ?\r
- ( function(){\r
- return [ view.innerWidth, view.innerHeight ];\r
- }) :\r
- ( function(){\r
- return [ view.clientWidth, view.clientHeight ];\r
- })\r
- ),\r
getPointerPosition : function(){\r
\r
},\r
Event : X.View.Event\r
}\r
);\r
- \r
+ \r
X.View.listenOnce( X.View.Event.SYS_READY, function(){\r
var b, x;\r
if( X.UA.IE && X.UA.IE < 9 ){\r
b.className += [ b.className === '' ? '' : ' ', 'ActiveX-', 1 < x.offsetHeight ? 'enabled' : 'disabled' ].join( '' );\r
b.removeChild( x );\r
} else {\r
- X.DomEvent.add( window, 'resize', resize );\r
+ X.Dom.Event.add( window, 'resize', resize );\r
};\r
+ \r
+ view = X.UA.IE ? ( document.compatMode !== "CSS1Compat" ? ( b || document.body ) : document.documentElement ) : window;\r
+ \r
+ X.View._view = view,\r
+ X.View.getSize = view.innerWidth ?\r
+ ( function(){\r
+ return [ view.innerWidth, view.innerHeight ];\r
+ }) :\r
+ ( function(){\r
+ return [ view.clientWidth, view.clientHeight ];\r
+ });\r
});\r
\r
return X.View;\r
})( window, document );\r
\r
-\r
/* -----------------------------------------------\r
* Document Ready\r
* Dean Edwards/Matthias Miller/John Resig\r
*/\r
/* for ie9+/Mozilla/Opera9 */\r
if( document.addEventListener ){\r
- X.DomEvent.add( document, 'DOMContentLoaded', X.View._init );\r
+ X.Dom.Event.add( document, 'DOMContentLoaded', X.View._init );\r
} else\r
-if( 4 < X.UA.IE ){\r
+if( 5 <= X.UA.IE ){\r
// if this script in Head\r
document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
X.View._script = document.getElementById( "__ie_onload" );\r
};\r
\r
/* for other browsers */\r
-X.DomEvent.add( window, 'load', X.View._init );\r
+X.Dom.Event.add( window, 'load', X.View._init );\r
\r
//\r
X.View.listen( X.View.Event.SYS_READY, function(e){ console.log( 'X.View DomReady ' + X.View.ready ) } );\r
\r
X.View.listen( X.View.Event.VIEW_RESIZED, function(e){ console.log( 'X.View VIEW_RESIZED ' + e.w + 'x' + e.h ) } );\r
+\r
forContainer : false,\r
tmpCss : null,\r
Constructor : function( layout, args ){\r
- if( !( this.User instanceof AbstractDisplayContainer ) ){\r
+ if( !( this.User.instanceOf( AbstractDisplayContainer ) ) ){\r
throw new Error( 'AbstractDisplayContainer を継承したインスタンスだけが _AbstractDisplayContainer のオーナーになれます' );\r
};\r
var i = 0,\r
arg, _data;\r
for( ; i < l; ++i ){\r
arg = args[ i ];\r
- if( arg instanceof AbstractDisplayNode ){\r
+ if( arg.instanceOf && arg.instanceOf( AbstractDisplayNode ) ){\r
_data = X.Class._getPrivate( arg );\r
nodes[ nodes.length ] = _data;\r
if( _data.parent ){\r
throw new Error( 'インスタンスはすでに親に追加されています ' + arg );\r
};\r
} else\r
- if( arg instanceof LayoutManagerBase ){\r
+ if( arg.instanceOf && arg.instanceOf( LayoutManagerBase ) ){\r
layout = arg;\r
} else\r
if( X.Type.isObject( arg ) === true ){\r
if( !nodes || nodes.length === 0 ) return ret;\r
for( i = 0, l = nodes.length; i < l; ++i ){\r
node = nodes[ i ].User;\r
- if( node instanceof klass ) ret[ ret.length ] = node;\r
+ if( node.instanceOf( klass ) ) ret[ ret.length ] = node;\r
};\r
return ret;\r
},\r
++counter[ type ];\r
} else {\r
counter[ type ] = 1;\r
- X.DomEvent.add( root.elmMouseCatch, X.View.Event.IdToName[ type ], eventRellay ); \r
+ X.Dom.Event.add( root.elmMouseCatch, X.View.Event.IdToName[ type ], eventRellay ); \r
};\r
};\r
return X.EventDispatcher.prototype.listen.apply( this, arguments );\r
if( !counter[ type ] ) return this;\r
--counter[ type ];\r
if( counter[ type ] === 0 ){\r
- X.DomEvent.remove( root.elmMouseCatch, X.View.Event.IdToName[ type ], eventRellay );\r
+ X.Dom.Event.remove( root.elmMouseCatch, X.View.Event.IdToName[ type ], eventRellay );\r
delete counter[ type ];\r
};\r
};\r
i = 0, l = nodes.length, node;\r
for( ; i < l; ++i ){\r
node = nodes[ i ];\r
- if( node instanceof _AbstractDisplayContainer ){\r
+ if( node.instanceOf( _AbstractDisplayContainer ) ){\r
node.calculate( x, y, w, h );\r
} else {\r
//node.styleData.layout( x, y, w, h );\r
if( childW || childW === 0 ){\r
for( ; i < l; ++i ){\r
node = nodes[ i ];\r
- if( node instanceof _AbstractDisplayContainer ){\r
+ if( node.instanceOf( _AbstractDisplayContainer ) ){\r
node.calculate( _x, NaN, childW, childH );\r
} else {\r
node.styleData.layout( _x, NaN, childW, childH );\r
} else {\r
for( ; i < l; ++i ){\r
node = nodes[ i ];\r
- if( node instanceof _AbstractDisplayContainer ){\r
+ if( node.instanceOf( _AbstractDisplayContainer ) ){\r
node.calculate( _x, NaN, NaN, childH );\r
} else {\r
node.styleData.layout( _x, NaN, NaN, childH );\r
} else {
t = r = b = l = 0;
};
- if( child instanceof LayoutBoxPrivate ){
+ if( child.instanceOf( LayoutBoxPrivate ) ){
child.layoutManager.reflow( child, contentW - r - l, contentH - t - b );
} else {
child.preMesure( contentW - r - l, contentH - t - b );
// hover や rollover rollout のための move イベントの追加
// X.View.activate, X.View.deactivate ?
// mouseout, mouseover
- X.DomEvent.add( elm, X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ], eventRellay );
+ X.Dom.Event.add( elm, X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ], eventRellay );
if( counter[ X.View.Event.POINTER_MOVE ] ){
++counter[ X.View.Event.POINTER_MOVE ];
} else {
},
beforeRemove : function(){
- X.DomEvent.remove( this.elmMouseCatch, X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ], eventRellay );
+ X.Dom.Event.remove( this.elmMouseCatch, X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ], eventRellay );
}
}
);
{\r
content : null,\r
Constructor : function( content ){\r
- if( !( this.User instanceof Text ) ){\r
+ if( !( this.User.instanceOf( Text ) ) ){\r
throw new Error( 'Text を継承したインスタンスだけが _Text のオーナーになれます' );\r
};\r
this.content = content;\r
};\r
for( ; i < l; ++i ){\r
node = nodes[ i ];\r
- if( node instanceof _AbstractDisplayContainer ){\r
+ if( node.instanceOf( _AbstractDisplayContainer ) ){\r
node.calculate( _x, _y, childW, childH );\r
} else {\r
node.styleData.layout( _x, _y, childW, childH );\r
if( childH || childH === 0 ){\r
for( ; i < l; ++i ){\r
node = nodes[ i ];\r
- if( node instanceof _AbstractDisplayContainer ){\r
+ if( node.instanceOf( _AbstractDisplayContainer ) ){\r
node.calculate( 0, _y, w - x, childH );\r
} else {\r
node.styleData.layout( 0, _y, w - x, childH );\r
} else {\r
for( ; i < l; ++i ){\r
node = nodes[ i ];\r
- if( node instanceof _AbstractDisplayContainer ){\r
+ if( node.instanceOf( _AbstractDisplayContainer ) ){\r
node.calculate( 0, _y, w - x );\r
} else {\r
node.styleData.layout( 0, _y, w - x );\r