-if( !window['console'] ) console = { log : function(a){\r
+if( !window['console'] || ( window.parent && window.parent.log ) ) console = { log : function(a){\r
+ var win, elm;\r
//alert(a)\r
+ if( window.parent ){\r
+ elm = parent.document.all ? parent.document.all.log : parent.log || parent.document.getElementById( 'log' );\r
+ elm && ( elm.innerHTML = a + '<br>' + elm.innerHTML );\r
+ };\r
} };\r
\r
var undefined,\r
- X = X || new Function( 'return X._shortcut && X._shortcut.apply( X._shortcut, arguments )' );\r
+ X = new Function( 'return X._shortcut && X._shortcut.apply( X._shortcut, arguments )' );\r
\r
-X.VERSION = '0.6.39';\r
+X.VERSION = '0.6.50';\r
\r
X.bootTime = + new Date;\r
\r
/*\r
Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){\r
var proto = this.constructor && this.constructor.prototype,\r
- __p__ = proto && ( '__proto__' in proto ) && proto.__proto__,\r
+ __p__ = proto && proto.__proto__,\r
v = this[ p ],\r
- nan = v !== v, // isNaN\r
- r = false, save;\r
+ r = false;\r
\r
- if( __p__ ) proto.__proto__ = v === null ? undefined : null;\r
+ if( __p__ ) proto.__proto__ = null;\r
\r
- if( nan ){\r
- if( proto[ p ] !== proto[ p ] ){ // proto is NaN\r
- proto[ p ] = 0; // different value\r
- r = this[ p ] !== this[ p ]; // isNaN\r
- proto[ p ] = NaN; // proto で定義されていた.\r
- } else {\r
- r = true;\r
- };\r
- } else\r
if( p in this ){\r
+ if( v !== v ){\r
+ if( proto && ( p in proto ) && proto[ p ] !== proto[ p ] ){ // proto[ p ] is NaN\r
+ proto[ p ] = 0; // different value\r
+ r = this[ p ] !== this[ p ]; // isNaN\r
+ proto[ p ] = v; // proto で定義されていた.\r
+ } else {\r
+ r = true;\r
+ };\r
+ } else\r
if( !proto || !( p in proto ) || ( proto[ p ] !== v ) ){\r
r = true;\r
} else {\r
// this と proto に同名で同値が書かれている可能性あり\r
- save = proto[ p ];\r
proto[ p ] = v + ' '; // different value\r
r = v === this[ p ];\r
\r
- delete proto[ p ];\r
- \r
- if( proto[ p ] !== v ){\r
- // proto で定義されていた.\r
- proto[ p ] = save; \r
- };\r
+ proto[ p ] = v;\r
};\r
};\r
\r
dav = n.appVersion,\r
tv = parseFloat(dav),\r
i, j, v;\r
+ \r
+ console.log( ' userAgent : ' + dua );\r
+ console.log( ' appVersion : ' + dav );\r
+ console.log( ' platform : ' + n.platform );\r
+ \r
if( window.opera ){\r
i = dua.indexOf( 'Opera' ); // Opera/\r
j = dua.indexOf( 'Version/' );\r
acme.OperaMobile = 0 < dua.indexOf("Opera Mobi");\r
acme.OperaTablet = 0 < dua.indexOf("Opera Tablet");\r
// TODO NDS\r
+ console.log( '>> Opera : ' + acme.Opera );\r
return acme;\r
};\r
\r
acme.IE4 = acme.IE && acme.IE < 5;\r
acme.IE5678 = 5 <= acme.IE && acme.IE < 9;\r
acme.MacIE = dua.indexOf( 'Mac_PowerPC' ) !== -1 || dua.indexOf( 'Mac_PPC' ) !== -1 || dua.indexOf( 'Mac_68K' ) !== -1;\r
- acme.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1;\r
+ acme.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 || n.platform === 'WinCE';\r
acme.WinPhone = dua.toLowerCase().indexOf( 'windows phone' ) !== -1;\r
+ console.log( '>> IE : ' + acme.IE + ' ActiveX : ' + acme.ActiveX );\r
return acme;\r
};\r
\r
+ // http://qa.support.sony.jp/solution/S0812181056444/common/nfb34_dom_200jp/dom_dom0_JP.html\r
if( ( i = dua.indexOf( 'NetFront\/' ) !== -1 ) ){\r
acme.NetFront = parseFloat( dua.substr( i + 9 ) ) || 0;\r
+ console.log( '>> NetFront : ' + acme.NetFront );\r
+ return acme;\r
+ };\r
+ \r
+ if( n.platform === 'Linux' && tv === 2 && dua.indexOf( 'Sony\/COM2\/' ) !== -1 ){\r
+ acme.NetFront = 3.4;\r
+ console.log( '>> NetFront : ' + acme.NetFront );\r
return acme;\r
};\r
\r
// Mozilla/4.0 (PS3 (PlayStation 3); 1.00)\r
if( ( i = dua.toUpperCase().indexOf( 'PLAYSTATION 3' ) !== -1 ) ){\r
acme.PS3 = parseFloat( dua.substr( i + 15 ) ) || 0;\r
+ console.log( '>> PS3 : ' + acme.PS3 );\r
return acme;\r
};\r
\r
// Mozilla/5.0 (Macintosh; U; PPC Mac OS; en) iCab 3\r
if( ( i = dua.indexOf( 'iCab' ) !== -1 ) ){\r
acme.iCab = parseFloat( dua.substr( i + 5 ) ) || 0;\r
+ console.log( '>> iCab : ' + acme.iCab );\r
return acme;\r
};\r
\r
acme.NN = v;\r
return acme;\r
};\r
+ \r
+ console.log( '>> Gecko : ' + acme.Gecko );\r
};\r
\r
// TODO Blink\r
+ \r
acme.Khtml = ( dav.indexOf("Konqueror") >= 0 ) ? tv : undefined;\r
+ \r
+ \r
acme.WebKit = i = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
\r
// Sony Reader Mozilla/5.0 (Linux; U; ja-jp; EBRD1101; EXT) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\r
dua.indexOf( 'EBRD' ) !== -1; \r
\r
+ console.log( '>> Webkit : ' + acme.WebKit + ' Safari : ' + acme.Safari );\r
return acme;\r
})( navigator );\r
\r
\r
// Safari 3.1 未満は開発コンソールがない!\r
// http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
-\r
+/*\r
if( X.UA.Safari && X.UA.WebKit < 525.13 ){ \r
window.onerror = function( x, y, z ){\r
var n = String.fromCharCode( 10 );\r
alert('window.onerrorによるエラーの捕捉:' + n + x + n + y + 'の' + z + '行目付近です。');\r
return true;\r
};\r
-};\r
+};*/\r
\r
if( X.UA.IE && X.UA.IE < 7 ){ // error @ NN7.2\r
// bonus: hotfix for IE6 SP1 (bug KB823727)\r
return typeof v === 'undefined';\r
}\r
};\r
+\r
+console.log( 'X.Core.Type' );\r
};\r
}\r
};\r
+\r
+console.log( 'X.Core.Callback' );\r
+\r
\r
}\r
};\r
-})();
\ No newline at end of file
+})();\r
+\r
+console.log( 'X.Core.Class' );\r
X.Timer[ '_ie_loop' ] = X.Timer._loop;\r
X.Timer._loop = 'X.Timer._ie_loop()';\r
};\r
+\r
+console.log( 'X.Core.Timer' );\r
);\r
\r
X.EventDispatcher._once = false;\r
+\r
+console.log( 'X.Core.EventDispatcher' );\r
debug デバック用の情報\r
*/\r
\r
+console.log( 'X.Core.Notification' );\r
new X.EventDispatcher(),\r
{\r
readyState : -1,\r
- active : !!document.activeElement,\r
+ active : !!window.parent || !!document.activeElement, // frameに読み込まれた場合のieのerror回避\r
_root : null,\r
\r
_lock : false,\r
_init : function(){\r
var s, size, h, r;\r
if( X.Dom.Event.DOM_PRE_INIT <= X.Dom.readyState ) return X.Callback.UN_LISTEN;\r
+ \r
+ console.log( 'X.Dom._init()' );\r
+ \r
delete X.Dom._init;\r
X.Dom.readyState = X.Dom.Event.DOM_PRE_INIT;\r
\r
* http://d.hatena.ne.jp/t-uchima/20051003/p1\r
* MacIEにはattachEventが一応あるけどwindow.attachEventとdocument.attachEventしかなく他の要素にはattachEventはない。\r
*/\r
-if( X.UA.MacIE ){\r
+if( X.UA.MacIE || X.UA.NetFront ){\r
X.Dom.DOM_W3C = true;\r
X.Dom.EVENT_DOM0 = true;\r
} else\r
PLAINTEXT : true,\r
LISTING : true\r
};\r
+\r
+X.Dom.CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 );\r
\r
X.Dom.cleanupWhiteSpace = function( text ){\r
- var _ = ' ', __ = ' ';\r
+ var _ = ' ', __ = ' ', CRLF = X.Dom.CRLF;\r
+ //text.indexOf( CRLF ) !== -1 && ( text = text.split( CRLF ).join( _ ) );\r
text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );\r
text.indexOf( '\t' ) !== -1 && ( text = text.split( '\t' ).join( _ ) );\r
text.indexOf( '\r' ) !== -1 && ( text = text.split( '\r' ).join( _ ) );\r
return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );\r
};\r
\r
+console.log( 'X.Dom dom:w3c=' + X.Dom.DOM_W3C + ' ev:w3c=' + X.Dom.EVENT_W3C );\r
tmp = this._rawNode.style.visibility;\r
//this._rawNode.style.visibility = 'hidden';\r
\r
+ //console.log( '_actualRemove().' );\r
+\r
if( i = removal.length ){\r
for( ; i; ){\r
xnode = removal[ --i ];\r
removal.length = 0;\r
};\r
\r
+ console.log( 'start _startUpdate().' );\r
+\r
Node._html._dirty ? Node._html._commitUpdate() : this._commitUpdate();\r
\r
+ //console.log( 'end of _startUpdate().' );\r
+ \r
X.Dom._listeners && X.Dom._listeners[ X.Dom.Event.AFTER_UPDATE ] && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.AFTER_UPDATE } );\r
//this._rawNode.style.visibility = tmp;\r
};\r
continue;\r
};\r
};\r
+ k = \r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
- ( elm[ rename[ k ] || k ] = v ); \r
+ ( elm[ rename[ k ] || k ] = X.Dom.Attr.noValue[ k ] ? k : v ); \r
\r
};\r
delete this._newAttrs;\r
for( k in attrs ){\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
- elm.setAttribute( rename[ k ] || k, v );\r
+ elm.setAttribute( rename[ k ] || k, v ); // TODO X.Dom.Attr.noValue\r
};\r
delete this._newAttrs;\r
};\r
* ie7 以下では iframe の frameborder や、input name は、createElement 後に setAttribute しても無視される\r
* \r
* fragument がある場合 children も足して\r
- * Mozilla: 1.0+, IE: 6.0+, Netscape: 2.0+, Safari: 1.0+, Opera: 7.0+\r
+ * Mozilla: 1.0+, IE: 5.5+, Netscape: 2.0+, Safari: 1.0+, Opera: 7.0+\r
* ie6 大丈夫?fragment の場合リークしないか?チェックが必要\r
* http://msdn.microsoft.com/ja-jp/library/bb250448%28v=vs.85%29.aspx\r
* \r
}) :\r
(function(){});\r
\r
+console.log( 'X.Dom.Node' );\r
+\r
raw.addEventListener( type, this._handleEvent, false );\r
};\r
}) :\r
- X.Dom.EVENT_W3C && X.UA.Opera7 ?\r
+ X.Dom.EVENT_W3C && ( X.UA.Opera7 || X.UA.NetFront ) ?\r
(function( type ){\r
var raw = this._rawNode;\r
if( !raw ) return;\r
delete this._handleEvent;\r
};\r
}) :\r
- X.Dom.EVENT_W3C && X.UA.Opera7 ?\r
+ X.Dom.EVENT_W3C && ( X.UA.Opera7 || X.UA.NetFront ) ?\r
(function( type ){\r
var raw = this._rawNode;\r
if( !raw ) return;\r
// http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
\r
/* for ie9+/Mozilla/Opera9 */\r
-if( X.Dom.DOM_W3C ){\r
+if( X.Dom.EVENT_W3C ){\r
Node._document.listenOnce( 'DOMContentLoaded', X.Dom._init );\r
} else\r
-if( 5 <= X.UA.IE && X.inHead ){\r
+if( 6 <= X.UA.IE && X.inHead ){\r
// if this script in Head\r
document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
X.Dom._script = document.getElementById( "__ie_onload" );\r
X.Dom._script.onreadystatechange = function(){\r
var s = X.Dom._script;\r
- if( s && this.readyState === 'complete' ){\r
+ if( s && s.readyState === 'complete' ){\r
s.onreadystatechange = X.emptyFunction;\r
s.onreadystatechange = null;\r
s.parentNode.removeChild( s );\r
X.Dom._init && X.Dom._init();\r
};\r
};\r
-} else\r
+};\r
// Re: onLoad doesn't work with Safari?\r
// http://lists.apple.com/archives/web-dev/2003/Oct/msg00036.html\r
if( X.UA.WebKit || ( X.UA.Safari && X.UA.Safari < 3 ) ){ // sniff\r
};\r
};\r
\r
-X.Dom.listenOnce( X.Dom.Event.VIEW_RESIZED, function(e){ console.log( 'X.Dom VIEW_RESIZED ' + e.w + 'x' + e.h ); } );\r
+X.Dom.listen( X.Dom.Event.VIEW_RESIZED, function(e){ console.log( 'X.Dom VIEW_RESIZED ' + e.w + 'x' + e.h ); } );\r
\r
hScrollbarSize : 0\r
};\r
\r
+\r
+\r
X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){\r
\r
- var node = Node._systemNode;\r
+ var node = Node._systemNode,\r
+ \r
+ // http://jsdo.it/imaya/kTYg\r
+ body = document.body,\r
+ defaultOverflow = document.body.style.overflow,\r
+ width, height;\r
+\r
+ body.style.overflow = 'hidden';\r
+ w = body.clientWidth;\r
+ h = body.clientHeight;\r
+\r
+ body.style.overflow = 'scroll';\r
+ w -= body.clientWidth;\r
+ h -= body.clientHeight;\r
+\r
+ if( !w ) w = body.offsetWidth - body.clientWidth;\r
+ if( !h ) h = body.offsetHeight - body.clientHeight;\r
+ body.style.overflow = defaultOverflow; \r
+\r
+ X.Dom.BoxModel.vScrollbarSize = w;\r
+ X.Dom.BoxModel.hScrollbarSize = h;\r
+ //\r
+ \r
node.cssText( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' );\r
\r
X.Dom.BoxModel.defaultBoxModel = node.width() === 10 ?\r
\r
if( X.Dom.BoxModel.defaultBoxModel === X.Dom.BoxModel.CONTENT_BOX ){\r
X.Dom.BoxModel.boxSizingEnabled = node.cssText( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' +\r
- 'box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing: border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;' )\r
+ 'box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;' )\r
.width() === 10;\r
};\r
// padding\r
// border\r
// margin\r
// top\r
-\r
- node.cssText( 'width:90px;height:90px;overflow:auto;' )\r
- .html( '<div style="width:100px;height:100px;"></div>' )\r
- ._startUpdate();\r
\r
+ node\r
+ //.cssText( 'width:90px;height:90px;overflow:auto;' )\r
+ .html( '<div style="width:100px;height:100px;"></div>' );\r
+ //._startUpdate();\r
+ /*\r
X.Dom.BoxModel.vScrollbarSize = 90 - node._rawNode.clientWidth;\r
- X.Dom.BoxModel.hScrollbarSize = 90 - node._rawNode.clientHeight;\r
+ X.Dom.BoxModel.hScrollbarSize = 90 - node._rawNode.clientHeight;*/\r
\r
X.Dom.BoxModel.absoluteOffset =\r
node.cssText( 'position:absolute;top:0;left:0;margin:1px;border:2px solid #000;padding:4px;' )\r
HAS_VALUE : {\r
INPUT : true,\r
TEXTAREA : true,\r
- SELECT : true\r
+ SELECT : true,\r
+ BUTTON : true\r
},\r
\r
renameForTag : {},\r
case 'cssText' :\r
return this.cssText();\r
case 'value' :\r
+ case 'checked' :\r
+ case 'selected' :\r
+ case 'disabled' : \r
case 'selectedIndex' :\r
if( X.Dom.Attr.HAS_VALUE[ this._tag ] ){\r
if( this._newAttrs && X.inObject( nameOrObj, this._newAttrs ) ) return this._newAttrs[ nameOrObj ];\r
document.write( html = copy.innerHTML );\r
} else {\r
// body の属性値の取得\r
- html = body.innerHTML;\r
+ if( X.UA.IE5678 ){\r
+ html = body.innerHTML.split( X.Dom.CRLF ).join( '' ); // 不要な改行が入る\r
+ } else {\r
+ html = body.innerHTML;\r
+ };\r
\r
// Nokia s60 Safari\r
if( html === 'fastinnerhtml!' ){\r
\r
if( elm.nodeType !== 3 ){\r
if( !( text = xnode._text ) || ( text = X.Dom.cleanupWhiteSpace( text ) ) === ' ' ){\r
- console.log( '[' +parent._tag + '>' + xnode._uid + '] destroy ... ' );\r
+ console.log( '[' +parent._tag + '> UID:' + xnode._uid + ' len:' + xnode._text.length + ' code : ' + xnode._text.charCodeAt( 0 ) + ',' + xnode._text.charCodeAt( 1 ) + '] destroyed.' );\r
xnode.destroy();\r
break;\r
};\r
\r
++current.j;\r
xnode._rawNode = elm;\r
+ xnode._text = elm.data; // 正確\r
xnode._root = parent._root;\r
if( !skipCleanup ){\r
if( !( text = xnode._text ) || ( text = X.Dom.cleanupWhiteSpace( text ) ) === ' ' ){\r
// textNode がある\r
( current.flag & 6 ) && ( parent._dirty |= X.Dom.Dirty.IE4_TEXTNODE_FIX );\r
});\r
+\r
+console.log( 'X.Dom.Builder' );\r
+console.log( 'bootTime : ' + ( X.getTime() - X.bootTime ) );
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>\r
+<html lang="ja">\r
+<head>\r
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+ \r
+ <title>Logger</title>\r
+ \r
+ <meta name="HandheldFriendly" content="true">\r
+ <meta name="mobileoptimized" content="0">\r
+ \r
+ <!-- for ie & chrome frame -->\r
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\r
+ <meta http-equiv="imagetoolbar" content="no">\r
+ \r
+ <!-- for smartphone -->\r
+ <meta name="format-detection" content="telephone=no">\r
+ <meta name="apple-mobile-web-app-capable">\r
+ \r
+ <!-- maximum-scale=1 初代iPod touch で必要, dynamic-viewport は operaで可能 -->\r
+ <meta name="viewport" id="dynamic-viewport" content="width=device-width,target-densitydpi=device-dpi,initial-scale=1,user-scalable=0,maximum-scale=1">\r
+\r
+ <style>\r
+ html, body {\r
+ padding : 0;\r
+ margin : 0;\r
+ border : 0;\r
+ width : 100%;\r
+ height : 100%;\r
+ overflow : hidden;\r
+ }\r
+ iframe {\r
+ display : block;\r
+ padding : 0;\r
+ border : 0;\r
+ height : 100%;\r
+ margin-left : 240px;\r
+ }\r
+ #log {\r
+ position : absolute;\r
+ top : 0;\r
+ left : 0;\r
+ width : 240px;\r
+ height : 100%;\r
+ font-size : 12px;\r
+ z-index : 999;\r
+ color : #fff;\r
+ background : #000;\r
+ }\r
+ </style>\r
+ \r
+ <script>\r
+ function __onload(){\r
+ if( document.all ){\r
+ document.body.children[1].style.width = ( document.documentElement || document.body ).offsetWidth - 240 + 'px';\r
+ } else {\r
+ document.body.lastChild.style.width = ( window.innerWidth - 240 ) + 'px';\r
+ document.body.lastChild.style.height = window.innerHeight + 'px'; // NetFront3.4\r
+ };\r
+ };\r
+ </script>\r
+ <noscript>\r
+ <meta name="viewport" content="width=device-width,initial-scale=1">\r
+ </noscript>\r
+</head>\r
+<body onload="__onload()" onresize="__onload()" scroll="no"><div id="log">-- console.log() --</div><iframe src="index.html" height="100%" scrolling="yes" frameborder="0"></body>\r
+</html>\r
+<xmp class="cleanup-target" style="display:none"><plaintext style="display:none"><!-- plainetext は nds 用 -->
\ No newline at end of file