a = [];\r
for (i = 0; i < j; ++i)\r
a[i] = 'y[' + i + ']';\r
- r = eval('x.__apply(' + a.join(',') + ')');\r
+ //r = eval('x.__apply(' + a.join(',') + ')');\r
+ // closuer compiler 対策\r
+ r = (new Function( 'x,y', 'return x.__apply(' + a.join(',') + ')' ))( x, y );\r
break;\r
};\r
- // delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;\r
// ie5\r
if( x === window ){\r
x.__apply = void 0;\r
} else {\r
- //delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;\r
if( x.constructor && x.constructor.prototype.__apply ){\r
delete x.constructor.prototype.__apply;\r
} else\r
\r
X.Dom.DTD = {\r
- 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 }//,\r
+ 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 },//,\r
// video:1,audio:1}\r
+ ATTR_VAL_IS_URI : 'action,archive,background,cite,classid,codebase,data,href,longdesc,profile,src,usemap'.split( ',' )\r
};\r
\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
Node._newByTag = true;\r
return new Node( tag, opt_attrs, opt_css );\r
case Node.IS_HTML_STRING :\r
- return X.Dom.parse( tag, true )[ 0 ];\r
+ list = X.Dom.parse( tag, true );\r
+ for( i = list.length; 1 < i; ){\r
+ list[ --i ].destroy();\r
+ };\r
+ return list[ 0 ];\r
};\r
};\r
Node.createText = function( text ){\r
};\r
\r
Node.prototype.empty = function(){\r
- var xnodes = this._xnodes, child, i, l;\r
- if( xnodes && ( l = xnodes.length ) ){\r
- for( i = 0; i < l; ++i ){\r
- xnodes[ i ].destroy();\r
+ var xnodes = this._xnodes, i;\r
+ if( xnodes && ( i = xnodes.length ) ){\r
+ for( ; i; ){\r
+ xnodes[ --i ].destroy();\r
};\r
xnodes.length = 0;\r
};\r
//for( ; i; ){\r
// xnodes[ --i ].destroy( true );\r
//};\r
- //xnodes.length = 0;\r
};\r
- elm && this.unlisten(); // イベントの退避\r
+ elm && this._listeners && this.unlisten(); // イベントの退避\r
\r
delete Node._chashe[ this._uid ];\r
delete this._state;\r
\r
if( this._root ){\r
- this.remove( isChild );\r
+ !isChild && this.remove();\r
} else {\r
this.parent && this.parent._xnodes.splice( this.parent._xnodes.indexOf( this ), 1 );\r
elm && !isChild && this._actualRemove();\r
'<', this._tag,\r
this._id ? ' id=' + this._id : _,\r
this._className ? ' class="' + this._className + '"' : _,\r
- this._attrText === _ ? _ : this._attrText || ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ),\r
+ this._attrText || ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ),\r
this._cssText ? ' style="' + this._cssText + '"' : _,\r
'>' ];\r
\r
html, xnodes, n, i, l;\r
\r
if( this._xnodeType === 3 ){\r
- //html = [];\r
- //for( i = 0, l = this._text.length; i < l; ++i ){\r
- // html.push( this._text.charCodeAt( i ) );\r
- //};\r
- //html = html.join( ',' );\r
html = [ '<FONT id=ie4uid', uid, ' UID="', uid, '">', this._text, '</FONT>' ];// fake textNode\r
delete this._rawNode;\r
} else {\r
\r
if( !elm ) return;\r
this._xnodeType === 1 && this._migrateEvent();// イベントの退避\r
- // elm.parentNode.tagName check tagName is for ie7\r
+ // elm.parentNode.tagName for ie7\r
!isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
}) :\r
document.all ?\r
e.stopPropagation();
};
if( ret & X.Callback.PREVENT_DEFAULT ){
+ this._tag === 'A' && this._rawNode.blur();
e.preventDefault();
return false;
};
event.cancelBubble = true;
};
if( ret & X.Callback.PREVENT_DEFAULT ){
+ this._tag === 'A' && this._rawNode.blur();
return event.returnValue = false;
};
});
childNodes = X.copyArray( childNodes );
if( textarea ){
- xnode.attr( 'value', xnode.text() );
- for( l = xnode._xnodes.length; i < l; ++i ){
- xnode._xnodes[ i ].destroy();
- };
- xnode._xnodes.length = 0;
- delete xnode._xnodes;
+ xnode.attr( 'value', xnode.text() ).empty();
return;
};
//children = X.copyArray( children );
if( textarea ){
- xnode.attr( 'value', xnode.text() );
- for( l = xnode._xnodes.length; i < l; ++i ){
- xnode._xnodes[ i ].destroy();
- };
- xnode._xnodes.length = 0;
- delete xnode._xnodes;
+ xnode.attr( 'value', xnode.text() ).empty();
return;
};
* 未知のタグについては、閉じタグも含めてタグ名扱いになる
*/
if( tag === '!' || tag.charAt( 0 ) === '/' ){
+ alert( '## ' + tag );
continue;
} else
if( xnode._tag !== tag ){
- alert( xnode._tag + ' ' + xnode._xnodeType + ' !== ' + tag + '\n' + elm.outerHTML );
+ alert( xnode._tag + ' ' + ' !== ' + tag + '\nxnode.html():' + xnode.attr('cite') + '\nelm.outerHTML:' + elm.outerHTML );
} else {
xnode._rawNode = elm;
xnode._root = parent._root;
// for
if( !xnode._rawNode ){
alert( xnode._tag + ' ' + xnode._id + ' !== none...' );
- --i;
+ //--i;
};
++j;
flag &= 6;
xnodes.push.apply( xnodes, X.Dom.parse( body.innerHTML, true ) );
delete Node.skipCreate;
+ //alert(body.innerHTML);
+
+ //alert(r.html());
+
createTree( r, body.childNodes || body.children );
i = xnodes.length;
/* --------------------------------------\r
* Fuction Base, multi, getter, setter,\r
*/\r
-(function(){\r
+X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT, 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
+ if( X.Type.isFunction( v ) && !target[ p ] ){\r
target[ p ] = multi = new Function( [\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
+ '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
].join( '' ) );\r
- multi.f = src[ p ];\r
+ multi.f = v;\r
};\r
};\r
-})();\r
+});\r
\r
\r
X.Dom.find = X._shortcut = Node.prototype.find = function( queryString ){\r
var HTML = Node._html,\r
scope = this.cnstructor === X.Dom.NodeList && this.length ? this : [ this.cnstructor === Node ? this : Node.root ],\r
- parents = scope, // 探索元の親要素\r
+ parents = scope, // 探索元の親要素 XNodeList の場合あり\r
noLower = 'title id name class for href src',\r
ARY_PUSH = Array.prototype.push,\r
ret = [], // 結果要素\r
};
function _parseStartTag( stack, last, handler, html ){
- var phase = 0,
+ var uri = X.Dom.DTD.ATTR_VAL_IS_URI,
+ phase = 0,
l = html.length,
i = 0,
attrs = [],
( ( phase = 5 ) && ( attrName = html.substring( start, i ) ) );
break;
case 5 : // 属性の = または次の属性または htmlタグの閉じ
+ whiteSpace.indexOf( chr ) !== -1 ?// ie4 未対応の属性には cite = http:// となる
+ 1 :
alphabets.indexOf( chr ) !== -1 ?
( ( phase = 4 ) && ( attrs[ attrs.length ] = attrName ) && ( start = i ) ) :
chr === '=' ?
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 ) ) );
+ ( chr === '>' ) ?
+ ( ( phase = 9 ) && saveAttr( attrs, attrName, html.substring( start, i ) ) ) :
+ ( !escape && uri.indexOf( attrName ) === -1 && html.substr( i, 2 ) === '/>' ) && // attr の val が uri で / で終わりかつ、未対応属性の場合
+ ( empty = true );
break;
};
escape = chr === '\\' && !escape; // \\\\ is not escape for "