*/\r
\r
Function.prototype.apply || (Function.prototype.apply = function (x, y) {\r
- var a, i, r, j;\r
+ var apply = '__apply',\r
+ a, i, r, j;\r
+\r
x = x || window;\r
y = y || [];\r
\r
// apply 内で apply を呼んだ場合に備える\r
if( x === window ){\r
- x.__apply = void 0;\r
+ x[ apply ] = void 0;\r
} else {\r
- if( x.constructor && x.constructor.prototype.__apply ){\r
- delete x.constructor.prototype.__apply;\r
+ if( x.constructor && x.constructor.prototype[ apply ] ){\r
+ delete x.constructor.prototype[ apply ];\r
} else\r
- if( x.__apply ) delete x.__apply;\r
+ if( x[ apply ] ) delete x[ apply ];\r
};\r
\r
- x.__apply = this;\r
- if (!x.__apply) x.constructor.prototype.__apply = this;\r
+ x[ apply ] = this;\r
+ if (!x[ apply ]) x.constructor.prototype[ apply ] = this;\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 2: r = x.__apply(y[0], y[1]); break;\r
- case 3: r = x.__apply(y[0], y[1], y[2]); break;\r
- case 4: r = x.__apply(y[0], y[1], y[2], y[3]); break;\r
- case 5: r = x.__apply(y[0], y[1], y[2], y[3], y[4]); break;\r
- case 6: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5]); break;\r
- case 7: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6]); 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
+ case 0: r = x[ apply ](); break;\r
+ case 1: r = x[ apply ](y[0]); break;\r
+ case 2: r = x[ apply ](y[0], y[1]); break;\r
+ case 3: r = x[ apply ](y[0], y[1], y[2]); break;\r
+ case 4: r = x[ apply ](y[0], y[1], y[2], y[3]); break;\r
+ case 5: r = x[ apply ](y[0], y[1], y[2], y[3], y[4]); break;\r
+ case 6: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5]); break;\r
+ case 7: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6]); 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
a = [];\r
for (i = 0; i < j; ++i)\r
};\r
// ie5\r
if( x === window ){\r
- x.__apply = void 0;\r
+ x[ apply ] = void 0;\r
} else {\r
//alert( typeof x );\r
- if( x.constructor && x.constructor.prototype.__apply ){\r
- delete x.constructor.prototype.__apply;\r
+ if( x.constructor && x.constructor.prototype[ apply ] ){\r
+ delete x.constructor.prototype[ apply ];\r
} else\r
- if( x.__apply ) delete x.__apply;\r
+ if( x[ apply ] ) delete x[ apply ];\r
};\r
return r;\r
});\r
+\r
/**\r
* <h4>はじめに:Web 開発の世界へようこそ!</h4>\r
* DHTML と XHR 等を活用した Ajax によってその真価を発揮した javascript は、現在では RIA に SPA や 3D ゲームなど、あらゆるアプリケーションがブラウザ上で動きつつあります。\r
* \r
* @example // ライブラリは X という名前空間を使用します。\r
* //ショートハンド\r
- * X( func ) == X.ViewPort.listenOnce(X.Event.XDOM_READY, func);\r
+ * X( func ) == X.ViewPort[ 'listenOnce' ](X.Event.XDOM_READY, func);\r
* X('#mydiv') == X.Doc.find('#mydiv');\r
* @namespace X\r
- */ \r
+ */\r
function X( v ){\r
if( X_Type_isFunction( v ) ){\r
- X.ViewPort.listenOnce( X_Event[ 'XDOM_READY' ], v );\r
+ X[ 'ViewPort' ][ 'listenOnce' ]( X_EVENT_XDOM_READY, v );\r
} else\r
if( X_shortcutFunction ){\r
return X_shortcutFunction.apply( X_shortcutContext || X, arguments );\r
var undefined,\r
X_EMPTY_OBJECT = {},\r
X_TEMP = { onSystemReady : [] },\r
+ X_emptyFunction = new Function,\r
X_shortcutFunction,\r
X_shortcutContext;\r
\r
/**\r
* バージョン文字列:"0.6.123"\r
* @type {string} */\r
-X.VERSION = '0.6.127';\r
+X[ 'VERSION' ] = '0.6.127';\r
\r
/**\r
* ブートタイム ms\r
* @type {number} */\r
-X.bootTime = + new Date;\r
+X[ 'bootTime' ] = + new Date;\r
\r
/**\r
* 空の関数\r
* @type {Function} */\r
-X.emptyFunction = new Function;\r
+X[ 'emptyFunction' ] = X_emptyFunction;\r
\r
/**\r
* このscriptはheadタグの中にあるか?\r
* @type {boolean} */\r
// TODO defer の場合もあるので、document.readyState を見る\r
// MacIE で false\r
-X.inHead = (function( s ){\r
+X[ 'inHead' ] = (function( s ){\r
if( !s ) return false;\r
if( !s.length ) return false; // Safari1.3 312.8 でerror\r
s = s[ s.length - 1 ];\r
*/\r
var X_UA = X[ 'UA' ] = {};\r
\r
-(function( n ){\r
- var dua = n.userAgent,\r
- dav = n.appVersion,\r
+(function(){\r
+ var dua = navigator.userAgent,\r
+ dav = navigator.appVersion,\r
tv = parseFloat(dav),\r
- sys = n.platform,\r
+ sys = navigator.platform,\r
tridentToVer, i, j, v;\r
\r
console.log( ' userAgent : ' + dua );\r
*/\r
X_UA[ 'iPhone' ] = true;\r
if( v ){\r
- /** iPhone4s以下\r
- * @memberof X.UA */\r
+ /**\r
+ * iPhone4s以下\r
+ * @alias X.UA.iPhone_4s\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPhone_4s' ] = true;\r
};\r
if( v && i ){\r
- /**\r
- * iPhone3GS以下\r
- * @alias X.UA.iPhone_3GS\r
- * @type {boolean}\r
- */\r
+ /**\r
+ * iPhone3GS以下\r
+ * @alias X.UA.iPhone_3GS\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPhone_3GS' ] = true;\r
};\r
//alert( 'iPhone ' + ( X_UA[ 'iPhone_3GS' ] ? '3GS以下' : X_UA[ 'iPhone_4s' ] ? '4s以下' : '5以上' ) );\r
};\r
if( sys === 'iPad' ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.iPad\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPad' ] = true;\r
if( i ){\r
/**\r
* iPad2以下または初代iPad mini 以下\r
- * @memberof X.UA */\r
+ * @alias X.UA.iPad_2Mini1\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPad_2Mini1' ] = true;\r
};\r
};\r
if( sys === 'iPod' ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.iPod\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPod' ] = true;\r
if( v && i ){\r
/**\r
* iPod3以下\r
- * @memberof X.UA */\r
+ * @alias X.UA.iPod_3\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPod_3' ] = true;\r
};\r
if( v ){\r
/**\r
* iPod4以下\r
- * @memberof X.UA */\r
+ * @alias X.UA.iPod_4\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'iPod_4' ] = true;\r
};\r
//alert( 'iPod touch ' + ( X_UA[ 'iPod_3' ] ? '3以下' : X_UA[ 'iPod_4' ] ? '4以下' : '5以上' ) );\r
console.log( '>> iOS : ' + X_UA[ 'iOS' ] );\r
} else\r
if( dua.indexOf( 'hp-tablet' ) !== -1 || dua.indexOf( 'webOS' ) !== -1 ){\r
- // http://user-agent-string.info/list-of-ua/os-detail?os=webOS\r
- /** @memberof X.UA */\r
+ /**\r
+ * http://user-agent-string.info/list-of-ua/os-detail?os=webOS\r
+ * @alias X.UA.webOS\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'webOS' ] = true; // webOS\r
} else\r
if( sys.indexOf( 'Win' ) + 1 ){\r
console.log( 'Win' );\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Windows\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'Windows' ] = true;\r
switch( sys ){\r
case 'Win16' :\r
case 'Win32' :\r
case 'Win64' :\r
case 'WinCE' :\r
+ /**\r
+ * @alias X.UA.Win16\r
+ * @alias X.UA.Win32\r
+ * @alias X.UA.Win64\r
+ * @alias X.UA.WinCE\r
+ * @type {boolean}\r
+ */\r
X_UA[ sys ] = true;\r
};\r
// winRT\r
} else\r
if( sys.indexOf( 'Mac' ) + 1 ){\r
console.log( 'Mac' );\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Mac\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'Mac' ] = true;\r
switch( sys ){\r
case 'MacPowerPC' :\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.MacPPC\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'MacPPC' ] = true;\r
break;\r
case 'MacPPC' :\r
case 'Mac68K' :\r
case 'MacIntel' :\r
+ /**\r
+ * @alias X.UA.MacPPC\r
+ * @alias X.UA.Mac68K\r
+ * @alias X.UA.MacIntel\r
+ * @type {boolean}\r
+ */\r
X_UA[ sys ] = true;\r
};\r
} else\r
if( ( sys.indexOf( 'Linux' ) + 1 ) || ( sys.indexOf( 'Android' ) + 1 ) ){\r
console.log( 'Linux' );\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Linux\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'Linux' ] = true;\r
\r
if( ( i = dua.indexOf( 'Android' ) ) !== -1 ){\r
- /** @memberof X.UA */\r
- X_UA[ 'Android' ] = parseFloat( dua.substr( i + 8 ) ) || 0.1; // Firefox で Version が取れない!\r
+ /**\r
+ * Firefox で Version が取れない!\r
+ * http://bizmakoto.jp/bizid/articles/1207/31/news004.html\r
+ * Chrome Android 4.0以上 Google\r
+ * Dolphin Browser HD Android 2.0.1以上 Mobotap\r
+ * Firefox Android 2.2以上 Mozilla\r
+ * Opera Mobile Android 1.6以上 Opera Software ASA\r
+ * Sleipnir Mobile Android 2.1以上 Fenrir\r
+ * @alias X.UA.Android\r
+ * @type {number}\r
+ */\r
+ X_UA[ 'Android' ] = parseFloat( dua.substr( i + 8 ) ) || 0.1;\r
console.log( '>> Android : ' + X_UA[ 'Android' ] );\r
};\r
};\r
-\r
-/*\r
- * http://bizmakoto.jp/bizid/articles/1207/31/news004.html\r
-Chrome Android 4.0以上 Google\r
-Dolphin Browser HD Android 2.0.1以上 Mobotap\r
-Firefox Android 2.2以上 Mozilla\r
-Opera Mobile Android 1.6以上 Opera Software ASA\r
-Sleipnir Mobile Android 2.1以上 Fenrir\r
- */\r
\r
if( window.opera ){\r
i = dua.indexOf( 'Opera' ); // Opera/\r
j = dua.indexOf( 'Version/' );\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Opera\r
+ * @type {number}\r
+ */\r
X_UA[ 'Opera' ] = v = Math.max(\r
i !== -1 ? parseFloat( dua.substr( i + 6 ) ) : 0,\r
j !== -1 ? parseFloat( dua.substr( j + 8 ) ) : 0,\r
tv );\r
- // closure compiler で minify するとOpera7で動かない \r
- // --compilation_level WHITESPACE_ONLY --formatting pretty_print <- 動く\r
- /** @memberof X.UA */\r
+ /**\r
+ * memo:closure compiler で minify するとOpera7で動かない \r
+ * --compilation_level WHITESPACE_ONLY --formatting pretty_print <- 動く\r
+ * @alias X.UA.Opera7\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'Opera7' ] = v < 8;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Opera78\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'Opera78' ] = v < 9;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.OperaMini\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'OperaMini' ] = 0 < dua.indexOf('Opera Mini');\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.OperaMobile\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'OperaMobile' ] = 0 < dua.indexOf('Opera Mobi');\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.OperaTablet\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'OperaTablet' ] = 0 < dua.indexOf('Opera Tablet');\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Wii\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'Wii' ] = dua.indexOf( 'Nintendo Wii' ) !== -1;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.NDS\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'NDS' ] = dua.indexOf( 'Nitro' ) !== -1;\r
console.log( '>> Opera : ' + v );\r
return;\r
\r
// Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\r
if( document.all || dav.indexOf( 'Trident/' ) !== -1 ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.ActiveX\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'ActiveX' ] = !!window[ 'ActiveXObject' ];\r
/**\r
* documentモードを考慮しないIEのバージョン\r
- * @memberof X.UA\r
- * @type {number}*/\r
+ * @alias X.UA._IE\r
+ * @type {number}\r
+ */\r
X_UA[ '_IE' ] = parseFloat(dua.split('MSIE ')[1]) || parseFloat(dua.split('rv:')[1]) || parseFloat(dav.split('MSIE ')[1]) || 0;\r
- // IE11 の互換モードの dav にも Trident/7.0 が書かれているため互換モードか?判定ができる\r
- // 互換モードでは Silverlight でエラーが出る?\r
- /** @memberof X.UA */\r
+ /**\r
+ * IE11 の互換モードの navigator.appVersion にも Trident/7.0 が書かれているため互換モードか?判定ができる\r
+ * 互換モードでは Silverlight でエラーが出る?\r
+ * @alias X.UA.Trident\r
+ * @type {number}\r
+ */\r
X_UA[ 'Trident' ] = parseFloat(dav.split('Trident/')[1]) || 0;\r
/**\r
* documentモードを考慮したIEのバージョン\r
- * @memberof X.UA */\r
+ * @alias X.UA.IE\r
+ * @type {number}\r
+ */\r
X_UA[ 'IE' ] = v = document.documentMode || X_UA[ '_IE' ];\r
- tridentToVer = X_UA[ 'Trident' ] ? ( X_UA[ 'Trident' ] + 4 | 0 ) : X_UA[ '_IE' ];\r
+ tridentToVer = X_UA[ 'Trident' ] ? ( X_UA[ 'Trident' ] + 4 | 0 ) : X_UA[ '_IE' ];\r
/**\r
- * IE11 の互換モードを使用しているか?\r
- * @memberof X.UA */\r
+ * IE10 以上の互換モードを使用している場合、そのバージョン\r
+ * @alias X.UA.IECompat\r
+ * @type {number}\r
+ */\r
X_UA[ 'IECompat' ] = /* v !== X_UA[ '_IE' ] || */ tridentToVer !== X_UA[ '_IE' ] && tridentToVer;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE4\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE4' ] = v && v < 5;\r
- /** @memberof X.UA */\r
- X_UA[ 'IE5678' ] = 5 <= v && v < 9;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE5\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE5' ] = 5 <= v && v < 5.5;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE55\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE55' ] = 5.5 <= v && v < 6;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE5x\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE5x' ] = X_UA[ 'IE5' ] || X_UA[ 'IE55' ];\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE6\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE6' ] = 6 <= v && v < 7;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE7\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE7' ] = 7 <= v && v < 8;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE8\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE8' ] = 8 <= v && v < 9;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IE9\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IE9' ] = 9 <= v && v < 10;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.MacIE\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'MacIE' ] = X_UA[ 'Mac' ];\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.IEMobile\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'IEMobile' ] = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 || X_UA[ 'WinCE' ];\r
- /** @memberof X.UA */\r
- X_UA[ 'WinPhone' ] = dua.toLowerCase().indexOf( 'windows phone' ) !== -1 || 0 < dav.indexOf( 'ZuneWP' ); // ZuneWP は IEM のデスクトップモードで使用\r
+ /**\r
+ * @alias X.UA.WinPhone\r
+ * @type {boolean}\r
+ */\r
+ X_UA[ 'WinPhone' ] = dua.toLowerCase().indexOf( 'windows phone' ) !== -1 || 0 < dav.indexOf( 'ZuneWP' ); // ZuneWP は IEM のデスクトップモードで登場する\r
console.log( '>> IE : ' + v + ' ActiveX : ' + X_UA[ 'ActiveX' ] );\r
// TODO XBox360, XBox1, Modern or Desktop, Standalone\r
return;\r
};\r
\r
- // http://qa.support.sony.jp/solution/S0812181056444/common/nfb34_dom_200jp/dom_dom0_JP.html\r
+ // \r
if( ( i = dua.indexOf( 'NetFront\/' ) !== -1 ) ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * http://qa.support.sony.jp/solution/S0812181056444/common/nfb34_dom_200jp/dom_dom0_JP.html\r
+ * @alias X.UA.NetFront\r
+ * @type {number}\r
+ */\r
X_UA[ 'NetFront' ] = parseFloat( dua.substr( i + 9 ) ) || 0.1;\r
console.log( '>> NetFront : ' + X_UA[ 'NetFront' ] );\r
return;\r
return;\r
};\r
\r
- // http://www.useragentstring.com/pages/Playstation%203/\r
- // Mozilla/5.0 (PLAYSTATION 3; 3.55)\r
- // Mozilla/4.0 (PS3 (PlayStation 3); 1.00)\r
- // https://github.com/Famous/famous/blob/1a02c8084587d80519ea4bd3b55649ab32ee2e65/examples/assets/lib/require.js\r
- // PS3 ブラウザのロードイベントについて\r
if( ( i = dua.toUpperCase().indexOf( 'PLAYSTATION 3' ) !== -1 ) ){\r
/**\r
* PlayStation 3 システムバージョン 4.10 未満の SONY 独自ブラウザ\r
- * @memberof X.UA */\r
+ * http://www.useragentstring.com/pages/Playstation%203/\r
+ * Mozilla/5.0 (PLAYSTATION 3; 3.55)\r
+ * Mozilla/4.0 (PS3 (PlayStation 3); 1.00)\r
+ * https://github.com/Famous/famous/blob/1a02c8084587d80519ea4bd3b55649ab32ee2e65/examples/assets/lib/require.js\r
+ * PS3 ブラウザのロードイベントについて\r
+ * @alias X.UA.PS3\r
+ * @type {number}\r
+ */\r
X_UA[ 'PS3' ] = parseFloat( dua.substr( i + 15 ) ) || 0.1;\r
console.log( '>> PS3 : ' + X_UA[ 'PS3' ] );\r
return;\r
};\r
\r
- // http://www.useragentstring.com/pages/iCab/\r
- // iCab/3.0.2 (Macintosh; U; PPC Mac OS X)\r
- // Mozilla/5.0 (Macintosh; U; PPC Mac OS; en) iCab 3\r
if( ( i = dua.indexOf( 'iCab' ) !== -1 ) ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * http://www.useragentstring.com/pages/iCab/\r
+ * iCab/3.0.2 (Macintosh; U; PPC Mac OS X)\r
+ * Mozilla/5.0 (Macintosh; U; PPC Mac OS; en) iCab 3\r
+ * @alias X.UA.iCab\r
+ * @type {number}\r
+ */\r
X_UA[ 'iCab' ] = parseFloat( dua.substr( i + 5 ) ) || 0.1;\r
console.log( '>> iCab : ' + X_UA[ 'iCab' ] );\r
return;\r
\r
if( 0 < dua.indexOf( 'Gecko\/' ) && ( i = dua.indexOf( 'rv:' ) ) ){\r
v = dua.substr( i + 3 ).split( '.' );\r
- /** @memberof X.UA */\r
+ /**\r
+ * メジャーバージョン + マイナーバージョン\r
+ * @alias X.UA.Gecko\r
+ * @type {number}\r
+ */\r
X_UA[ 'Gecko' ] = parseFloat( v[ 0 ] ) || 0 +\r
( parseFloat( v[ 1 ] ) || 0 ) / 10 +\r
( parseFloat( v[ 2 ] ) || 0 ) / 100;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.GeckoMajor\r
+ * @type {number}\r
+ */\r
X_UA[ 'GeckoMajor' ] = parseFloat( v[ 0 ] ) || 0;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.GeckoMinor\r
+ * @type {number}\r
+ */\r
X_UA[ 'GeckoMinor' ] = parseFloat( v[ 1 ] ) || 0;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.GeckoPatch\r
+ * @type {number}\r
+ */\r
X_UA[ 'GeckoPatch' ] = parseFloat( v[ 2 ] ) || 0;\r
\r
//Fennec\r
- // Mozilla/5.0 (Android; Linux armv7l; rv:9.0) Gecko/20111216 Firefox/9.0 Fennec/9.0\r
if( ( i = dua.indexOf( 'Fennec/' ) ) !== -1 ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * Mozilla/5.0 (Android; Linux armv7l; rv:9.0) Gecko/20111216 Firefox/9.0 Fennec/9.0\r
+ * @alias X.UA.Fennec\r
+ * @type {number}\r
+ */\r
X_UA[ 'Fennec' ] = parseFloat( dua.substr( i + 7 ) );\r
console.log( '>> Fennec : ' + X_UA[ 'Fennec' ] + ', Gecko : ' + X_UA[ 'Gecko' ] );\r
return;\r
//Netscape\r
//Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3\r
if( ( i = dua.indexOf( 'Netscape6/' ) ) !== -1 ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.NN\r
+ * @type {number}\r
+ */\r
X_UA[ 'NN' ] = parseFloat( dua.substr( i + 10 ) ) || 6;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.NN6\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'NN6' ] = true;\r
console.log( '>> NN : ' + X_UA[ 'NN' ] + ', Gecko : ' + X_UA[ 'Gecko' ] );\r
return;\r
\r
// TODO Blink\r
if( window.chrome ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Blink\r
+ * @type {number}\r
+ */\r
X_UA[ 'Blink' ] = tv;\r
console.log( '>>Blink : ' + X_UA[ 'Blink' ] );\r
\r
} else\r
if( dav.indexOf( 'Konqueror' ) !== -1 ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Khtml\r
+ * @type {number}\r
+ */\r
X_UA[ 'Khtml' ] = tv;\r
console.log( '>>Khtml : ' + X_UA[ 'Khtml' ] );\r
\r
} else\r
if( ( i = dua.indexOf( 'Android ' ) ) !== -1 ){\r
- /** @memberof X.UA */\r
- X_UA[ 'AndroidBrowser' ] = i = parseFloat( dua.substr( i + 8 ) ) || 0.1;\r
- /** @memberof X.UA */\r
+ /**\r
+ * Android 標準ブラウザ\r
+ * @alias X.UA.AndroidBrowser\r
+ * @type {number}\r
+ */\r
+ X_UA[ 'AndroidBrowser' ] = i = parseFloat( dua.substr( i + 8 ) ) || 0.1;\r
+ /**\r
+ * @alias X.UA.AndroidBrowser1\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'AndroidBrowser1' ] = 1 <= i && i < 2;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.AndroidBrowser2\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'AndroidBrowser2' ] = 2 <= i && i < 3;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.AndroidBrowser3\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'AndroidBrowser3' ] = 3 <= i && i < 4;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.AndroidBrowser4\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'AndroidBrowser4' ] = 4 <= i && i < 5;\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.AndroidBrowser5\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'AndroidBrowser5' ] = 5 <= i && i < 6;\r
console.log( '>> AndroidBrowser : ' + X_UA[ 'Android' ] );\r
\r
i = parseFloat(dua.split('WebKit\/')[1]);\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.AndroidBrowserWebkit\r
+ * @type {number}\r
+ */\r
X_UA[ 'AndroidBrowserWebkit' ] = i;\r
alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i );\r
\r
} else\r
if( i = parseFloat(dua.split('WebKit\/')[1]) ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.WebKit\r
+ * @type {number}\r
+ */\r
X_UA[ 'WebKit' ] = i;\r
\r
if( v = parseFloat(dua.split('Chrome\/')[1]) ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Chrome\r
+ * @type {number}\r
+ */\r
X_UA[ 'Chrome' ] = v;\r
};\r
\r
\r
if( i && !X_UA[ 'Chrome' ] && dua.indexOf( 'Safari' ) !== -1 ){\r
if( dav.indexOf( 'Version/' ) !== -1 ){\r
- /** @memberof X.UA */\r
+ /**\r
+ * @alias X.UA.Safari\r
+ * @type {number}\r
+ */\r
X_UA[ 'Safari' ] = parseFloat( dav.split('Version/')[1] );\r
} else {\r
if( i <= 528.16 ){\r
- X_UA[ 'Safari' ] = i < 73 ? 0.8 :\r
- i < 85 ? 0.9 :\r
- i < 100 ? 1 :\r
- i < 125 ? 1.1 :\r
- i < 312 ? 1.2 :\r
- i < 412 ? 1.3 :\r
+ X_UA[ 'Safari' ] = i < 73 ? 0.8 :\r
+ i < 85 ? 0.9 :\r
+ i < 100 ? 1 :\r
+ i < 125 ? 1.1 :\r
+ i < 312 ? 1.2 :\r
+ i < 412 ? 1.3 :\r
i <= 419.3 ? 2 :\r
i <= 525.13 ? 3 :\r
i <= 525.25 ? 3.1 : 3.2;\r
console.log( '>> Webkit : ' + X_UA[ 'WebKit' ] + ' Safari : ' + X_UA[ 'Safari' ] );\r
};\r
\r
- //http://www.useragentstring.com/pages/Iris/\r
- if( dua.toLowerCase().indexOf( 'iris' ) !== -1 ) X_UA[ 'Iris' ] = true;\r
+ if( dua.toLowerCase().indexOf( 'iris' ) !== -1 ){\r
+ /**\r
+ * http://www.useragentstring.com/pages/Iris/\r
+ * @alias X.UA.Iris\r
+ * @type {boolean}\r
+ */\r
+ X_UA[ 'Iris' ] = true;\r
+ };\r
\r
if( // Kobo Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/533.1 (KHTML, like Gecko) Verson/4.0 Mobile Safari/533.1 (Kobo Touch)\r
dua.indexOf( 'Kobo' ) !== -1 ||\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
- /** @memberof X.UA */\r
+ /**\r
+ * Kobo, Kindle, Sony Reader\r
+ * @alias X.UA.EInk\r
+ * @type {boolean}\r
+ */\r
X_UA[ 'EInk' ] = true;\r
};\r
-})( navigator );\r
+})();\r
\r
var X_UA_DOM = {},\r
X_UA_EVENT = {},\r
X_UA_HID = {};\r
-//X_UA[ 'IECompat' ] && alert( X_UA[ 'IE' ] + ' ' + X_UA[ '_IE' ] + ' Tri:' + X_UA[ 'Trident' ] );\r
\r
/*\r
* http://d.hatena.ne.jp/t-uchima/20051003/p1\r
* ie7 以下で実行する document.execCommand( 'BackgroundImageCache', false, true ) の失敗。\r
* bonus: hotfix for IE6 SP1 (bug KB823727)\r
* multipleIEs IE6 standalone 版では不可, IE5.5 は可,,,\r
- * @memberof X.UA */\r
+ * @alias X.UA.ieExeComError */\r
X_UA[ 'ieExeComError' ] = eval( 'var a=1;try{document.execCommand&&document.execCommand("BackgroundImageCache",!1,!0)}catch(e){a=0}!a' );\r
})();\r
\r
}) :\r
new Function( 'a,b', 'return a in b' );// なぜか ie5 でもerror\r
\r
+\r
+// ------------------------------------------------------------------------- //\r
+// --- interface ----------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+\r
/**\r
* Object に関するメソッドを集めたものです。\r
* @namespace X.Object\r
* @alias X.Object\r
*/\r
-X.Object = {\r
+X[ 'Object' ] = {\r
// TODO rename to copy\r
- clone : X_Object_clone,\r
+ 'clone' : X_Object_clone,\r
\r
- override : X_Object_override,\r
+ 'override' : X_Object_override,\r
\r
- deepCopy : X_Object_deepCopy,\r
+ 'deepCopy' : X_Object_deepCopy,\r
\r
// TODO rename to X.Array.copy\r
- cloneArray : X_Object_cloneArray,\r
+ 'cloneArray' : X_Object_cloneArray,\r
\r
- isEmpty : X_Object_isEmpty,\r
+ 'isEmpty' : X_Object_isEmpty,\r
\r
- inObject : X_Object_inObject\r
+ 'inObject' : X_Object_inObject\r
\r
// TODO hasOwnProperty\r
};\r
\r
+// ------------------------------------------------------------------------- //\r
+// --- implements ---------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
/**\r
* 単純なクローンでメンバーをコピーしたオブジェクトを返します。\r
* @alias X.Object.clone\r
* @namespace X.String\r
* @alias X.String\r
*/\r
-X.String = {\r
+X[ 'String' ] = {\r
\r
- parse : X_String_parse,\r
+ 'parse' : X_String_parse,\r
\r
- cleanupWhiteSpace : X_String_cleanupWhiteSpace,\r
+ 'cleanupWhiteSpace' : X_String_cleanupWhiteSpace,\r
\r
- whiteSpaceToTag : X_String_whiteSpaceToTag,\r
+ 'whiteSpaceToTag' : X_String_whiteSpaceToTag,\r
\r
- chrReferanceTo : X_String_chrReferanceTo,\r
+ 'chrReferanceTo' : X_String_chrReferanceTo,\r
\r
- toChrReferance : X_String_toChrReferance,\r
+ 'toChrReferance' : X_String_toChrReferance,\r
\r
- isNumberString : X_String_isNumberString\r
+ 'isNumberString' : X_String_isNumberString\r
};\r
\r
// ------------------------------------------------------------------------- //\r
* @namespace X.URL\r
* @alias X.URL\r
*/\r
-X.URL = {\r
+X[ 'URL' ] = {\r
\r
- BASE_URL : X_URL_BASE_URL,\r
+ 'BASE_URL' : X_URL_BASE_URL,\r
\r
- IS_FILE : X_URL_IS_FILE,\r
+ 'IS_FILE' : X_URL_IS_FILE,\r
\r
- IS_LOCAL : X_URL_IS_LOCAL,\r
+ 'IS_LOCAL' : X_URL_IS_LOCAL,\r
\r
- PARAMS : X_URL_PARAMS,\r
+ 'PARAMS' : X_URL_PARAMS,\r
\r
- toAbsolutePath : X_URL_toAbsolutePath,\r
+ 'toAbsolutePath' : X_URL_toAbsolutePath,\r
\r
- isSameDomain : X_URL_isSameDomain,\r
+ 'isSameDomain' : X_URL_isSameDomain,\r
\r
- cleanup : X_URL_cleanup,\r
+ 'cleanup' : X_URL_cleanup,\r
\r
- getEXT : X_URL_getEXT\r
+ 'getEXT' : X_URL_getEXT\r
};\r
\r
// ------------------------------------------------------------------------- //\r
// ------------ local variables -------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
\r
-var X_Callback_LIVE_LIST = [],\r
+var /** @const */\r
+ X_Callback_LIVE_LIST = [],\r
+ /** @const */\r
X_Callback_POOL_LIST = [],\r
+ /** @const */\r
X_Closure_COMMAND_BACK = X_Callback_LIVE_LIST,\r
+ /** @const */\r
X_Closure_COMMAND_DROP = X_Callback_POOL_LIST,\r
\r
+ /** @const */\r
X_Callback_THIS_FUNC = 1,\r
+ /** @const */\r
X_Callback_HANDLEEVENT = 2,\r
+ /** @const */\r
X_Callback_FUNC_ONLY = 3,\r
\r
+ /** @const */\r
X_Callback_NONE = 0,\r
+ /** @const */\r
X_Callback_UN_LISTEN = 1,\r
- X_Callback_STOP_PROPAGATION = 2, // 上位階層への伝播のキャンセル\r
+ /** @const */\r
+ X_Callback_STOP_PROPAGATION = 2,\r
+ /** @const */\r
X_Callback_STOP_NOW = 4 | 2, // 同一階層のリスナーのキャンセル(上位へもキャンセル)\r
+ /** @const */\r
X_Callback_PREVENT_DEFAULT = 8, // 結果動作のキャンセル,\r
+ /** @const */\r
X_Callback_MONOPOLY = 16, // move event を独占する\r
+ /** @const */\r
X_Callback_SYS_CANCEL = 32 | 4 | 2;\r
\r
/*\r
/**\r
* このコールバックでは返り値による操作は無い。\r
*/\r
- NONE : X_Callback_NONE,\r
+ 'NONE' : X_Callback_NONE,\r
/**\r
- * X.Timer.add, X.EventDispatcher.listen のコールバックでタイマーやイベントリスナの解除に使用。\r
+ * X.Timer, X.EventDispatcher のコールバックでタイマーやイベントリスナの解除に使用。\r
*/\r
- UN_LISTEN : X_Callback_UN_LISTEN,\r
+ 'UN_LISTEN' : X_Callback_UN_LISTEN,\r
/**\r
- * イベントのバブルアップを中止する。DOM イベントのコールバックの戻り値に指定すると e.stopPropagation() が呼ばれる。\r
+ * 上位階層へのイベント伝播のキャンセル。DOM イベントのコールバックの戻り値に指定すると e.stopPropagation() が呼ばれる。\r
*/\r
- STOP_PROPAGATION : X_Callback_STOP_PROPAGATION,\r
+ 'STOP_PROPAGATION' : X_Callback_STOP_PROPAGATION,\r
/**\r
- * 以降のイベントのディスパッチを中断する。\r
+ * 以降のイベントのディスパッチを中断する。STOP_PROPAGATION との違いは、次に控えているコールバックもキャンセルされる点。但し system によって追加されたイベントはキャンセルされない。\r
*/\r
- STOP_NOW : X_Callback_STOP_NOW,\r
+ 'STOP_NOW' : X_Callback_STOP_NOW,\r
/**\r
* DOM イベントのコールバックの戻り値に指定すると e.preventDefault() が呼ばれる。\r
* またフレームワーク内で定義されたデフォルト動作の回避にも使用される。\r
*/\r
- PREVENT_DEFAULT : X_Callback_PREVENT_DEFAULT,\r
+ 'PREVENT_DEFAULT' : X_Callback_PREVENT_DEFAULT,\r
/**\r
* X.UI に於いて、ポインターイベントの戻り値に指定すると、以降のポインターベントを独占する。\r
*/\r
- MONOPOLY : X_Callback_MONOPOLY\r
+ 'MONOPOLY' : X_Callback_MONOPOLY\r
};\r
\r
// ------------------------------------------------------------------------- //\r
function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
var obj = X_Callback_classifyCallbackArgs( thisObject, opt_callback, opt_args ),\r
l, ret, _obj;\r
- if( !obj.k ) return obj;\r
+ \r
+ if( !obj.kind ) return obj;\r
+ \r
if( l = X_Callback_POOL_LIST.length ){\r
- ret = X_Callback_POOL_LIST[ l - 1 ]; --X_Callback_POOL_LIST.length; // ret = X_Callback_POOL_LIST.pop();\r
- _obj = ret( X_Closure_COMMAND_BACK );\r
- _obj.k = obj.k;\r
- _obj.f = obj.f;\r
- _obj.x = obj.x;\r
- _obj.s = obj.s;\r
- _obj._ = X_Callback_proxyCallback;\r
+ ret = X_Callback_POOL_LIST[ l - 1 ]; --X_Callback_POOL_LIST.length; // ret = X_Callback_POOL_LIST.pop();\r
+ _obj = ret( X_Closure_COMMAND_BACK );\r
+ \r
+ _obj.kind = obj.kind;\r
+ _obj.func = obj.func;\r
+ _obj.context = obj.context;\r
+ _obj.supplement = obj.supplement;\r
+ _obj.proxy = X_Callback_proxyCallback;\r
} else {\r
- ret = X_Callback_actualClosure( obj );\r
- obj._ = X_Callback_proxyCallback;\r
+ ret = X_Callback_actualClosure( obj );\r
+ obj.proxy = X_Callback_proxyCallback;\r
};\r
X_Callback_LIVE_LIST[ X_Callback_LIVE_LIST.length ] = ret;\r
return ret;\r
var obj;\r
\r
if( arg1 && X_Type_isFunction( arg2 ) ){\r
- obj = { x : arg1, f : arg2, k : X_Callback_THIS_FUNC };\r
+ obj = { context : arg1, func : arg2, kind : X_Callback_THIS_FUNC };\r
} else\r
if( arg1 && X_Type_isFunction( arg1[ 'handleEvent' ] ) ){\r
- obj = { x : arg1, k : X_Callback_HANDLEEVENT };\r
+ obj = { context : arg1, kind : X_Callback_HANDLEEVENT };\r
arg3 = arg2;\r
} else\r
if( X_Type_isFunction( arg1 ) ){\r
arg3 = arg2;\r
if( alt_context ){\r
- obj = { x : alt_context, f : arg1, k : X_Callback_THIS_FUNC };\r
+ obj = { context : alt_context, func : arg1, kind : X_Callback_THIS_FUNC };\r
} else {\r
- obj = { f : arg1, k : X_Callback_FUNC_ONLY };\r
+ obj = { func : arg1, kind : X_Callback_FUNC_ONLY };\r
};\r
} else\r
if( X_Type_isFunction( arg2 ) ){\r
//console.log( 'X_Callback_classifyCallbackArgs : arg1 が ' + arg1 + 'です' ); ie4 で error\r
if( alt_context ){\r
- obj = { x : alt_context, f : arg2, k : X_Callback_THIS_FUNC };\r
+ obj = { context : alt_context, func : arg2, kind : X_Callback_THIS_FUNC };\r
} else {\r
- obj = { f : arg2, k : X_Callback_FUNC_ONLY };\r
+ obj = { func : arg2, kind : X_Callback_FUNC_ONLY };\r
};\r
} else\r
if( alt_context ){\r
- obj = { x : alt_context, k : X_Callback_HANDLEEVENT };\r
+ obj = { context : alt_context, kind : X_Callback_HANDLEEVENT };\r
arg3 = arg1;\r
} else {\r
console.log( '不正 ' + arg1 );\r
};\r
\r
if( X_Type_isArray( arg3 )){\r
- obj.s = arg3;\r
+ obj.supplement = arg3;\r
};\r
- return ( obj.x || obj.s ) ? obj : arg1;\r
+ return ( obj.context || obj.supplement ) ? obj : arg1;\r
};\r
\r
function X_Callback_actualClosure( obj ){\r
return function(){\r
if( arguments[ 0 ] === X_Closure_COMMAND_BACK ) return obj;\r
- if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj._( obj, arguments );\r
+ if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj.proxy( obj, arguments );\r
};\r
};\r
\r
function X_Callback_proxyCallback( xfunc, _args ){\r
var args = _args || [],\r
- thisObj = xfunc.x,\r
- func = xfunc.f,\r
- supp = xfunc.s,\r
+ thisObj = xfunc.context,\r
+ func = xfunc.func,\r
+ supp = xfunc.supplement,\r
temp, ret; \r
\r
if( supp && supp.length ){\r
args = temp;\r
};\r
\r
- switch( xfunc.k ){\r
+ switch( xfunc.kind ){\r
\r
case X_Callback_THIS_FUNC :\r
return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );\r
X_Callback_LIVE_LIST.splice( i, 1 );\r
X_Callback_POOL_LIST[ X_Callback_POOL_LIST.length ] = f;\r
obj = f( X_Closure_COMMAND_BACK );\r
- delete obj.k;\r
- if( obj.f ) delete obj.f;\r
- if( obj.x ) delete obj.x;\r
- if( obj.s ) delete obj.s;\r
- delete obj._;\r
+ delete obj.kind;\r
+ if( obj.func ) delete obj.func;\r
+ if( obj.context ) delete obj.context;\r
+ if( obj.supplement ) delete obj.supplement;\r
+ delete obj.proxy;\r
return true;\r
};\r
return false;\r
X_Class_killPrivateFlag = false,\r
X_Class_traits = null,\r
X_Class_useObjectCreate = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
- X_Class_use_proto_ = !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] && !!X.emptyFunction.prototype.__proto__,\r
+ X_Class_use_proto_ = !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] && !!X_emptyFunction.prototype.__proto__,\r
// Opera Mobile 12.10 Android11 IS01 でクラスのメンバが欠落する問題に遭遇。__proto__ を使わないと動作,,,\r
\r
X_Class_CommonMethods =\r
* 全ての動的メンバを削除して、インスタンスを破棄する。<br>\r
* インスタンスが X.EventDispatcher とそのサブクラスの場合、次の動作をする。\r
* <ol>\r
- * <li>X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X.Callback.PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。\r
+ * <li>X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X_Callback_PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。\r
* <li>破棄に進む場合は、X.Event.KILL_INSTANCE を発火する。\r
* <li>dispatch 中は、インスタンスの全ての dispatch が終了するまで実際の破棄を待つ。\r
* <li>実際の破棄では、インスタンスのメンバの削除に加えて全てのイベントリスナを解除する。\r
*/\r
// TODO kill したインスタンスのイベントが残っていないか?これは開発用のみ\r
- kill : function(){\r
+ 'kill' : function(){\r
var instance = this,\r
klass = X_Class_getClass( instance ),\r
def = X_Class_getClassDef( klass ),\r
};\r
X_Class_killPrivateFlag = false; // instance.kill() 内で PrivateInstance.kill() を防ぐため\r
\r
- if( this.instanceOf( X.EventDispatcher ) ){\r
+ if( this[ 'instanceOf' ]( X_EventDispatcher ) ){\r
if( !def.isPrivate ){\r
- if( this.dispatch( X_Event.BEFORE_KILL_INSTANCE ) & X.Callback.PREVENT_DEFAULT ){\r
- this.dispatch( X_Event.KILL_INSTANCE_CANCELED );\r
+ if( this[ 'dispatch' ]( X_EVENT_BEFORE_KILL_INSTANCE ) & X_Callback_PREVENT_DEFAULT ){\r
+ this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE_CANCELED );\r
return;\r
};\r
if( this[ '_listeners' ] && this[ '_listeners' ][ X_Listeners_.DISPATCHING ] ){\r
return;\r
};\r
} else {\r
- this.dispatch( X_Event.BEFORE_KILL_INSTANCE ); \r
+ this[ 'dispatch' ]( X_EVENT_BEFORE_KILL_INSTANCE ); \r
};\r
\r
// asyncDispatch の削除\r
for( p in X_EventDispatcher_LAZY_TIMERS ){\r
if( X_EventDispatcher_LAZY_TIMERS[ p ] === this ){\r
delete X_EventDispatcher_LAZY_TIMERS[ p ]; // 削除が先!理由は X.Timer.removeを確認。\r
- X.Timer.remove( parseFloat( p ) );\r
+ X_Timer_remove( parseFloat( p ) );\r
};\r
};\r
\r
- this.dispatch( X_Event.KILL_INSTANCE );\r
+ this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE );\r
this._listeners && X_EventDispatcher_systemUnlisten( this );\r
};\r
\r
i = def.userList.indexOf( instance );\r
if( i !== -1 ){\r
data = X_Class_getPrivate( instance );\r
- if( data[ '_listeners' ] && data[ '_listeners' ][ X_Listeners_.DISPATCHING ] && data.instanceOf( X.EventDispatcher ) ){\r
+ if( data[ '_listeners' ] && data[ '_listeners' ][ X_Listeners_.DISPATCHING ] && data[ 'instanceOf' ]( X.EventDispatcher ) ){\r
data[ '_listeners' ][ X_Listeners_.KILL_RESERVED ] = true;\r
} else {\r
X_Class_killPrivateFlag = true;\r
- data.kill();\r
+ data[ 'kill' ]();\r
};\r
def.dataList.splice( i, 1 );\r
def.userList.splice( i, 1 );\r
* @return {*}\r
*/\r
// TODO 現在 new しているインスタンスを保持してチェックする\r
- Super : function( var_args ){\r
+ 'Super' : function( var_args ){\r
var sClass = this,\r
i = X_Class_CALLING_SUPER.indexOf( sClass ),\r
n = -1,\r
* @example return this.superCall( arguments.callee, param0, param1, ... );\r
* @return {*} オーバーライド元の関数を呼び出した戻り値。\r
*/\r
- superCall : function( funcNameOrFunc, var_args ){\r
+ 'superCall' : function( funcNameOrFunc, var_args ){\r
var sClass = this,\r
args = arguments,\r
name, p, sFunc, hit = false;\r
case 4 :\r
return sFunc.call( this, args[ 1 ], args[ 2 ], args[ 3 ] );\r
default :\r
- args = X.Object.cloneArray( args );\r
+ args = X_Object_cloneArray( args );\r
args.shift();\r
return sFunc.apply( this, args );\r
};\r
* @return {boolean}\r
*/\r
// TODO instanceof に対応したブラウザはそちらを使用\r
- instanceOf : function( klass ){\r
+ 'instanceOf' : function( klass ){\r
var Super = this;\r
if( this.constructor === klass ) return true;\r
while( Super = X_Class_getClassDef( Super ).SuperClass ){\r
* @namespace X.Class\r
* @alias X.Class\r
*/ \r
-X.Class = {\r
+X[ 'Class' ] = {\r
\r
/**\r
* 設定なし。\r
+ * @const\r
*/ \r
- NONE : 0,\r
+ 'NONE' : 0,\r
\r
/**\r
* インスタンスは破棄時(this.kill())に回収され、次回の new MyClass() 時に再利用されます。\r
+ * @const\r
*/\r
- POOL_OBJECT : 1,\r
+ 'POOL_OBJECT' : 1,\r
\r
/**\r
* 定義するクラスは抽象クラスになります。new AbstractClass() とするとエラーになります。\r
+ * @const\r
*/\r
- ABSTRACT : 2,\r
+ 'ABSTRACT' : 2,\r
\r
/**\r
* クラスの継承を禁止する。\r
+ * @const\r
*/\r
- FINAL : 4,\r
+ 'FINAL' : 4,\r
\r
/**\r
* 使用を中止。petanR ライブラリ使用プロジェクトから SUPER_ACCESS を消したらここも削除。\r
+ * @const\r
*/\r
- SUPER_ACCESS : 8,\r
+ 'SUPER_ACCESS' : 8,\r
\r
/**\r
* 内部コード、主に X.UI フレームワークに対して、フレーム外に露出するインスタンスとペアで動作する、シャドウなインスタンスの使用を宣言する。\r
* Javascript はインスタンス毎のカプセル化がとてもコスト高。微妙なコスト増で隠蔽されたインスタンスを使う。\r
+ * @const\r
*/\r
- PRIVATE_DATA : 16,\r
+ 'PRIVATE_DATA' : 16,\r
\r
/**\r
* 未実装。でも目印になるので付けておきましょう。\r
+ * @const\r
*/\r
- SINGLETON : 32,\r
+ 'SINGLETON' : 32,\r
\r
+ 'create' : X_Class_create,\r
+ \r
+ // TODO collect\r
+ \r
+ '_newPrivate' : X_Class_newPrivate,\r
+ \r
+ '_getPrivate' : X_Class_getPrivate\r
+ \r
+};\r
+\r
+\r
+\r
+// ------------------------------------------------------------------------- //\r
+// --- implements ---------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
/**\r
* クラスを定義する。<br>\r
* X.Class.create() によるクラス定義は必ずしもコンストラクタを必要としません。クラス定義時にコンストラクタが未設定の場合、スーパークラスがあればそのコンストラクタを使用します。\r
+ * @alias X.Class.create\r
* @param {string} [displayName] クラスの名前\r
* @param {number} [classSetting=0] X.Class.POOL_OBJECT | X.Class.FINAL など\r
* @param {__ClassBase__=} [privateClass] このクラスとペアで動作するシャドウクラス\r
* @param {object} [props={}] このクラスのメンバと関数。コンストラクタは Constructor と書くこと\r
* @return {__ClassBase__}\r
*/\r
- create : function( /* displayName, classSetting, privateClass, props */ ){\r
+ function X_Class_create( /* displayName, classSetting, privateClass, props */ ){\r
var args = X_Object_cloneArray( arguments ),\r
displayName = args[ 0 ],\r
classSetting,\r
// クラスメンバ用オブジェクトが無しでもクラスは作成可能\r
props = {};\r
} else\r
- if( props.Constructor && X_Type_isFunction( props.Constructor ) ){\r
- classDef.Constructor = props.Constructor;\r
+ if( props[ 'Constructor' ] && X_Type_isFunction( props[ 'Constructor' ] ) ){\r
+ classDef.Constructor = props[ 'Constructor' ];\r
};\r
\r
- klass = X_Callback_actualClosure( hash = { _ : X_Class_actualConstructor } ); // TODO hash = classDef\r
- hash.c = klass;\r
- klass.superClassOf = X_Class_superClassOf;\r
- klass.subClassOf = X_Class_subClassOf;\r
+ klass = X_Callback_actualClosure( hash = { proxy : X_Class_actualConstructor } ); // TODO hash = classDef\r
+ hash.klass = klass;\r
+ klass[ 'superClassOf' ] = X_Class_superClassOf;\r
+ klass[ 'subClassOf' ] = X_Class_subClassOf;\r
\r
if( X_Class_useObjectCreate ){\r
klass.prototype = X_Class_override( X_Class_override( X_Class_traits || klass.prototype, props, true ), X_Class_CommonMethods, false );\r
klass.prototype.constructor = klass;\r
};\r
\r
- klass.name = displayName;\r
+ klass[ 'name' ] = displayName;\r
\r
if( opt_abstract ){\r
classDef.Abstract = true;\r
if( opt_final ){\r
classDef.Final = true;\r
} else {\r
- klass.inherits = X_Class_inherits;\r
+ klass[ 'inherits' ] = X_Class_inherits;\r
}; \r
if( opt_private ){\r
if( classDef.privateClass ){\r
X_Class_DEF_LIST.push( classDef ); \r
};\r
return klass;\r
- },\r
- \r
- _newPrivate : X_Class_newPrivate,\r
- \r
- _getPrivate : X_Class_getPrivate\r
- \r
-};\r
+ };\r
\r
\r
\r
-// ------------------------------------------------------------------------- //\r
-// --- implements ---------------------------------------------------------- //\r
-// ------------------------------------------------------------------------- //\r
function X_Class_getClass( instance ){\r
var cList = X_Class_CLASS_LIST,\r
i = cList.length,\r
* これにより pool された オブジェクト(破棄されたインスタンス) を再利用できる\r
*/\r
function X_Class_actualConstructor( f, args ){\r
- var klass = f.c,\r
+ var klass = f.klass,\r
def = X_Class_getClassDef( klass ),\r
dataUser = def._tempUser,\r
instance, obj,\r
def.SuperConstructor &&\r
def.SuperConstructor.apply( instance, args );\r
if( ( X_Type_isObject( obj ) && obj !== instance ) || X_Type_isFunction( obj ) ){ // Class\r
- instance.kill();\r
+ instance[ 'kill' ]();\r
return obj;\r
};\r
return instance;\r
\r
-var X_Event_last = 0,\r
- X_Event_Rename = {},\r
+var X_Event_Rename = {},\r
X_Event_RenameTo = {},\r
\r
+ // TODO IFRAMEload, SCRIPTload, LINKload raw.readyState !== 'complete' && raw.readyState !== 'loaded' && this.dispatch( 'load' )\r
X_Event_proxy = {\r
\r
- load : X_UA[ 'IE' ] < 9 && {\r
- check : function( eventDispatcher ){\r
- return eventDispatcher._tag === 'IFRAME' || eventDispatcher._tag === 'SCRIPT';\r
- },\r
+ 'IFRAMEload' : function( eventDispatcher ){\r
+ eventDispatcher[ 'listen' ]( 'readystatechange', X_Event_proxy.IFRAMEload_proxy );\r
+ },\r
+ \r
+ IFRAMEload_proxy : function( e ){\r
+ var raw = this[ '_rawObject' ];\r
\r
- f : function( e ){\r
- var raw = this._rawObject;\r
- return raw.readyState !== 'complete' && raw.readyState !== 'loaded';\r
- }\r
+ return raw.readyState === 'complete' || raw.readyState === 'loaded' ?\r
+ this[ 'dispatch' ]( 'load' ) : X_Callback_PREVENT_DEFAULT, X_Callback_STOP_PROPAGATION;\r
},\r
\r
- contextmenu : X_UA[ 'Opera' ] && {\r
- \r
- rename : 'mousedown',\r
- \r
- f : function( e ){\r
- return e.button === 2;\r
- }\r
- \r
- }\r
+ // X_UA[ 'Opera' ]\r
+ 'contextmenu' : function( eventDispatcher ){\r
+ eventDispatcher[ 'listen' ]( 'mousedown', contextmenu_proxy );\r
+ },\r
\r
+ contextmenu_proxy : function( e ){\r
+ return e.button === 2 ? this[ 'dispatch' ]( 'contextmenu' ) : X_Callback_NONE;\r
+ }\r
},\r
\r
X_Event_toPointer = !X_UA_HID.POINTER && ( X_UA_HID.TOUCH ?\r
{\r
- touchstart : 'pointerdown',\r
- mousedown : 'pointerdown',\r
- touchend : 'pointerup', \r
- mouseup : 'pointerup',\r
- touchmove : 'pointermove',\r
- mousemove : 'pointermove',\r
- touchcancel : 'pointercancel',\r
- contextmenu : 'contextmenu',\r
- dbclick : 'dbclick',\r
- click : 'click',\r
- tap : 'click'\r
+ 'touchstart' : 'pointerdown',\r
+ 'mousedown' : 'pointerdown',\r
+ 'touchend' : 'pointerup', \r
+ 'mouseup' : 'pointerup',\r
+ 'touchmove' : 'pointermove',\r
+ 'mousemove' : 'pointermove',\r
+ 'touchcancel' : 'pointercancel',\r
+ 'contextmenu' : 'contextmenu',\r
+ 'dbclick' : 'dbclick',\r
+ 'click' : 'click',\r
+ 'tap' : 'click'\r
} :\r
{\r
- mousedown : 'pointerdown',\r
- mouseup : 'pointerup',\r
- mousemove : 'pointermove',\r
- contextmenu : 'contextmenu',\r
- dbclick : 'dbclick',\r
- click : 'click'\r
+ 'mousedown' : 'pointerdown',\r
+ 'mouseup' : 'pointerup',\r
+ 'mousemove' : 'pointermove',\r
+ 'contextmenu' : 'contextmenu',\r
+ 'dbclick' : 'dbclick',\r
+ 'click' : 'click'\r
});\r
\r
-// 内部イベント\r
-X_TEMP.SYSTEM_EVENT_PRE_INIT = 5; // X_Listeners_.KILL_RESERVED に +1 した値から開始。\r
-X_TEMP.SYSTEM_EVENT_XTREE = 6;\r
-X_TEMP.SYSTEM_EVENT_INIT = 7;\r
+var // 内部イベント\r
+ X_EVENT_PRE_INIT = 5, // X_Listeners_.KILL_RESERVED に +1 した値から開始。\r
+ X_EVENT_XTREE_READY = 6,\r
+ X_EVENT_INIT = 7,\r
+\r
+ // 公開イベント\r
+ /* @const */\r
+ X_EVENT_XDOM_READY = 8,\r
+ \r
+ X_EVENT_COMPLETE = 9,\r
+ X_EVENT_READY = 10,\r
+ X_EVENT_SUCCESS = 11,\r
+ X_EVENT_ERROR = 12,\r
+ X_EVENT_PROGRESS = 13,\r
+ X_EVENT_BEFORE_CANCEL = 14,\r
+ X_EVENT_CANCELED = 15,\r
+ X_EVENT_TIMEOUT = 16,\r
+\r
+ /* @const */\r
+ X_EVENT_BEFORE_KILL_INSTANCE = 17,\r
+ /* @const */\r
+ X_EVENT_KILL_INSTANCE_CANCELED = 18,\r
+ /* @const */\r
+ X_EVENT_KILL_INSTANCE = 19,\r
+ \r
+ X_EVENT_VIEW_ACTIVATE = 20,\r
+ X_EVENT_VIEW_DEACTIVATE = 21,\r
+ X_EVENT_VIEW_RESIZED = 22,\r
+ X_EVENT_VIEW_TURNED = 23,\r
+\r
+ X_EVENT_BASE_FONT_RESIZED = 24,\r
+\r
+ X_EVENT_BEFORE_UPDATE = 25,\r
+ X_EVENT_UPDATED = 26,\r
+ X_EVENT_AFTER_UPDATE = 27,\r
+\r
+ X_EVENT_HASH_CHANGED = 28,\r
+\r
+\r
+ X_EVENT_BEFORE_UNLOAD = 29,\r
+ X_EVENT_UNLOAD = 30,\r
+ \r
+ X_EVENT_BACKEND_READY = 31,\r
+ X_EVENT_BACKEND_NONE = 32,\r
+ X_EVENT_BACKEND_RESEARCH = 33,\r
+ X_EVENT_BACKEND_CHANGED = 34,\r
+ \r
+ X_EVENT_ANIME_BEFORE_START = 35,\r
+ X_EVENT_ANIME_START = 36,\r
+ X_EVENT_ANIME = 37,\r
+ X_EVENT_ANIME_END = 38,\r
+ X_EVENT_ANIME_BEFORE_STOP = 39,\r
+ X_EVENT_ANIME_STOP = 40,\r
+ \r
+ X_EVENT_GPU_RELEASED = 41,\r
+\r
+ X_EVENT_MEDIA_PLAYING = 42,\r
+ X_EVENT_MEDIA_BEFORE_LOOP = 43,\r
+ X_EVENT_MEDIA_LOOPED = 44,\r
+ X_EVENT_MEDIA_PAUSED = 45,\r
+ X_EVENT_MEDIA_ENDED = 46,\r
+ X_EVENT_MEDIA_WAITING = 47,\r
+ X_EVENT_MEDIA_SEEKING = 48,\r
+ \r
+ X_Event_last = 48;\r
\r
/**\r
* フレームワーク内で定義されたイベント。\r
* @alias X.Event\r
* @enum {number}\r
*/\r
-var X_Event = X[ 'Event' ] = {\r
+X[ 'Event' ] = {\r
/**\r
* X.ViewPort で発生する。DomContentLoaded に相当。document.body.innerHTML の内容から X.Node ツリーの作成が完了した。\r
* このイベント以降、X.Doc.create(), X.Doc.find() 等が可能になる。\r
- * @const\r
*/\r
- 'XDOM_READY' : 8,\r
+ 'XDOM_READY' : X_EVENT_XDOM_READY,\r
\r
- 'COMPLETE' : 9,\r
- 'READY' : 10,\r
- 'SUCCESS' : 11,\r
- 'ERROR' : 12,\r
- 'PROGRESS' : 13,\r
- 'BEFORE_CANCEL' : 14,\r
- 'CANCELED' : 15,\r
- 'TIMEOUT' : 16,\r
+ 'COMPLETE' : X_EVENT_COMPLETE,\r
+ 'READY' : X_EVENT_READY,\r
+ 'SUCCESS' : X_EVENT_SUCCESS,\r
+ 'ERROR' : X_EVENT_ERROR,\r
+ 'PROGRESS' : X_EVENT_PROGRESS,\r
+ 'BEFORE_CANCEL' : X_EVENT_BEFORE_CANCEL,\r
+ 'CANCELED' : X_EVENT_CANCELED,\r
+ 'TIMEOUT' : X_EVENT_TIMEOUT,\r
\r
/**\r
* X.EventDispatcher インスタンスを kill() すると発生。キャンセル可能。\r
*/ \r
- 'BEFORE_KILL_INSTANCE' : 17,\r
+ 'BEFORE_KILL_INSTANCE' : X_EVENT_BEFORE_KILL_INSTANCE,\r
/**\r
* X.EventDispatcher インスタンスの kill() がキャンセルされた場合に発生。\r
*/ \r
- 'KILL_INSTANCE_CANCELED' : 18,\r
+ 'KILL_INSTANCE_CANCELED' : X_EVENT_KILL_INSTANCE_CANCELED,\r
/**\r
* X.EventDispatcher インスタンスの kill が確定し、kill プロセスの前に発生。\r
*/\r
- 'KILL_INSTANCE' : 19,\r
+ 'KILL_INSTANCE' : X_EVENT_KILL_INSTANCE,\r
\r
/**\r
* X.ViewPort で発生する。'visibilitychange', 'pageshow', window.onfocus を検出している。\r
*/\r
- 'VIEW_ACTIVATE' : 20,\r
+ 'VIEW_ACTIVATE' : X_EVENT_VIEW_ACTIVATE,\r
/**\r
* X.ViewPort で発生する。'visibilitychange', 'pagehide', window.onblur を検出している。\r
*/\r
- 'VIEW_DEACTIVATE' : 21,\r
+ 'VIEW_DEACTIVATE' : X_EVENT_VIEW_DEACTIVATE,\r
/**\r
* X.ViewPort で発生する。\r
*/\r
- 'VIEW_RESIZED' : 22,\r
+ 'VIEW_RESIZED' : X_EVENT_VIEW_RESIZED,\r
/**\r
* X.ViewPort で発生する。\r
*/\r
- 'VIEW_TURNED' : 23,\r
+ 'VIEW_TURNED' : X_EVENT_VIEW_TURNED,\r
/**\r
* X.ViewPort で発生する。ベースフォントサイズが変化すると発生する。body 直下の隠し要素のテキストサイズの変化で検出している。\r
*/\r
- 'BASE_FONT_RESIZED' : 24,\r
+ 'BASE_FONT_RESIZED' : X_EVENT_BASE_FONT_RESIZED,\r
\r
// in_page_jump\r
// on_screen_keyboard_show\r
// on_screen_keyboard_hide\r
\r
- 'BEFORE_UPDATE' : 25,// X_System このイベントで要素のサイズを取得すると無限ループに!\r
- 'UPDATED' : 26,// X_System\r
- 'AFTER_UPDATE' : 27,\r
+ /**\r
+ * X_System で発生する。このイベントで要素のサイズを取得すると無限ループに!\r
+ */\r
+ 'BEFORE_UPDATE' : X_EVENT_BEFORE_UPDATE,\r
+ /**\r
+ * X_System で発生する。X.Node ツリーへの変更を Real DOM に反映した。\r
+ */\r
+ 'UPDATED' : X_EVENT_UPDATED,\r
+ \r
+ /**\r
+ * X.ViewPort で発生する。X.Node ツリーへの変更を Real DOM に反映した。このイベントは lazyDispatch している。\r
+ */\r
+ 'AFTER_UPDATE' : X_EVENT_AFTER_UPDATE,\r
\r
- 'HASH_CHANGED' : 28,\r
+ 'HASH_CHANGED' : X_EVENT_HASH_CHANGED,\r
\r
/**\r
* X.ViewPort で発生する。\r
*/\r
- 'BEFORE_UNLOAD' : 29,\r
+ 'BEFORE_UNLOAD' : X_EVENT_BEFORE_UNLOAD,\r
/**\r
* X.ViewPort で発生する。\r
*/\r
- 'UNLOAD' : 30,\r
+ 'UNLOAD' : X_EVENT_UNLOAD,\r
\r
- 'BACKEND_READY' : 31,\r
- 'BACKEND_NONE' : 32,\r
- 'BACKEND_RESEARCH' : 33,\r
- 'BACKEND_CHANGED' : 34,\r
+ 'BACKEND_READY' : X_EVENT_BACKEND_READY,\r
+ 'BACKEND_NONE' : X_EVENT_BACKEND_NONE,\r
+ 'BACKEND_RESEARCH' : X_EVENT_BACKEND_RESEARCH,\r
+ 'BACKEND_CHANGED' : X_EVENT_BACKEND_CHANGED,\r
\r
- 'ANIME_BEFORE_START' : 35,\r
- 'ANIME_START' : 36,\r
- 'ANIME' : 37,\r
- 'ANIME_END' : 38,\r
- 'ANIME_BEFORE_STOP' : 39, // xnode.stop() のみ、指定時間による停止では呼ばれない\r
- 'ANIME_STOP' : 40,\r
+ 'ANIME_BEFORE_START' : X_EVENT_ANIME_BEFORE_START,\r
+ 'ANIME_START' : X_EVENT_ANIME_START,\r
+ 'ANIME' : X_EVENT_ANIME,\r
+ 'ANIME_END' : X_EVENT_ANIME_END,\r
+ /**\r
+ * xnode.stop() のみ、指定時間による停止では呼ばれない\r
+ */\r
+ 'ANIME_BEFORE_STOP' : X_EVENT_ANIME_BEFORE_STOP,\r
+ 'ANIME_STOP' : X_EVENT_ANIME_STOP,\r
\r
- 'GPU_RELEASED' : 41,\r
-\r
- 'MEDIA_PLAYING' : 42,\r
- 'MEDIA_BEFORE_LOOP' : 43, // cancelable\r
- 'MEDIA_LOOPED' : 44,\r
- 'MEDIA_PAUSED' : 45,\r
- 'MEDIA_ENDED' : 46,\r
- 'MEDIA_WAITING' : 47,\r
- 'MEDIA_SEEKING' : 48\r
-};\r
+ 'GPU_RELEASED' : X_EVENT_GPU_RELEASED,\r
\r
-X_Event_last = 48;\r
+ 'MEDIA_PLAYING' : X_EVENT_MEDIA_PLAYING,\r
+ 'MEDIA_BEFORE_LOOP' : X_EVENT_MEDIA_BEFORE_LOOP, // cancelable\r
+ 'MEDIA_LOOPED' : X_EVENT_MEDIA_LOOPED,\r
+ 'MEDIA_PAUSED' : X_EVENT_MEDIA_PAUSED,\r
+ 'MEDIA_ENDED' : X_EVENT_MEDIA_ENDED,\r
+ 'MEDIA_WAITING' : X_EVENT_MEDIA_WAITING,\r
+ 'MEDIA_SEEKING' : X_EVENT_MEDIA_SEEKING\r
+};\r
\r
X_TEMP.onSystemReady.push(\r
function(){\r
* \r
* <p>Arrayには、__CallbackHash__ というハッシュ、または関数が蓄えられています。\r
* \r
- * <p>また、イベントターゲット(EventDispatcher._rawObject)に渡された再利用可能クロージャの控えを _listeners[0] に記憶します。(ACTUAL_HANDLER)\r
+ * <p>また、イベントターゲット(EventDispatcher[ '_rawObject' ])に渡された再利用可能クロージャの控えを _listeners[0] に記憶します。(ACTUAL_HANDLER)\r
* \r
* <p>dispatch 中の状態と操作を記録し不整合が起きないようにするためのプロパティ(_listeners[1]~_listeners[4])を持ちます。イベントID が 5 から始まるのはこのためです。\r
* \r
\r
X_EventDispatcher_safariPreventDefault = false, // Safari3-\r
\r
+ /**\r
+ * @enum {number} \r
+ */\r
X_EventDispatcher_EVENT_TARGET_TYPE = {\r
OTHER : 0,\r
XHR : 1,\r
* <p>listen, unlisten, dispatch という addEventListener, removeEventListener, dispatchEvent に対応する関数を持ちます。\r
* また listening という ActionScript3 の hasEventListener に相当する関数を持ちます。\r
* \r
- * <p>イベントターゲットオブジェクト(widnow, document, HTMLElement, XHR, Silverlight 等)が this._rawObject に設定されていた場合に、それらへ実際のイベント登録・解除も行います。\r
+ * <p>イベントターゲットオブジェクト(widnow, document, HTMLElement, XHR, Silverlight 等)が this[ '_rawObject' ] に設定されていた場合に、それらへ実際のイベント登録・解除も行います。\r
* このイベントの登録・解除はクロスブラウザで、IE5~8 の独自イベントの差異を吸収し、DOM0 に対しても複数のコールバックを登録することができます。\r
* \r
* <p>またコールバックに対して、this コンテキストや、追加の引数を指定もできます。 this コンテキストを指定しなかった場合、EventDispatcher インスタンスがコールバックの this になります。 \r
* @constructs EventDispatcher\r
* @extends {__ClassBase__}\r
*/\r
-var EventDispatcher = X.EventDispatcher =\r
- X.Class.create(\r
+var X_EventDispatcher = X.EventDispatcher =\r
+ X_Class_create(\r
'EventDispatcher',\r
\r
/** @lends EventDispatcher.prototype */\r
* アプリケーション独自のイベントをやり取りしたいだけ、という場合イベントターゲットは指定しません。\r
* @param {object=} opt_rawObject\r
*/\r
- Constructor : function( opt_rawObject ){\r
+ 'Constructor' : function( opt_rawObject ){\r
if( opt_rawObject ){\r
- this._rawObject = opt_rawObject;\r
+ this[ '_rawObject' ] = opt_rawObject;\r
};\r
},\r
\r
- dispatch : X_EventDispatcher_dispatch,\r
+ 'dispatch' : X_EventDispatcher_dispatch,\r
\r
- listen : X_EventDispatcher_listen,\r
+ 'listen' : X_EventDispatcher_listen,\r
\r
/**\r
* dispatch 時に自動で unlisten されるフラグを立てて listen する。\r
* @param {Array} [opt_arg3=] コールバック時の引数を配列に入れる。引数がひとつでも配列を使用する。省略した場合引数なし。unlisten() に使用するので、配列も適宜に保持しておくこと。\r
* @return {EventDispatcher} チェインメソッド\r
*/\r
- listenOnce : function( type, opt_arg1, opt_arg2, opt_arg3 ){\r
+ 'listenOnce' : function( type, opt_arg1, opt_arg2, opt_arg3 ){\r
X_EventDispatcher_once = true;\r
- this.listen( type, opt_arg1, opt_arg2, opt_arg3 );\r
+ this[ 'listen' ]( type, opt_arg1, opt_arg2, opt_arg3 );\r
X_EventDispatcher_once = false;\r
return this;\r
},\r
\r
- unlisten : X_EventDispatcher_unlisten,\r
+ 'unlisten' : X_EventDispatcher_unlisten,\r
\r
/**\r
* <p>イベントリスナの登録状況を真偽値で返す。戻り値が数値(index)の場合もあるが、これは内部のみで使用。\r
- * <p>this.listening(); のように type を省略した場合、一つでも登録があれば true を返す。\r
- * <p>this.listening( 'myevent' ); と type だけを与えた場合、その type に登録があれば true を返す。\r
+ * <p>this[ 'listening' ](); のように type を省略した場合、一つでも登録があれば true を返す。\r
+ * <p>this[ 'listening' ]( 'myevent' ); と type だけを与えた場合、その type に登録があれば true を返す。\r
* <p>type と イベントリスナの組み合わせが登録されているかを調べる場合は、listen 時の thisObject や args(Array) も一致させて渡す必要がある。\r
* \r
* @example \r
- * this.listen( [ 'myevent', 'yourevent' ], this, onMyEvent, args = [ 1, 'a' ] );\r
- * this.listening( 'myevent', this, onMyEvent, args ) === true;\r
+ * this[ 'listen' ]( [ 'myevent', 'yourevent' ], this, onMyEvent, args = [ 1, 'a' ] );\r
+ * this[ 'listening' ]( 'myevent', this, onMyEvent, args ) === true;\r
* \r
* @return {number|boolean}\r
* @param {string|number} opt_type\r
* @param {function|Array} opt_arg2\r
* @param {Array} opt_arg3\r
*/ \r
- listening : function( opt_type, opt_arg1, opt_arg2, opt_arg3 ){\r
+ 'listening' : function( opt_type, opt_arg1, opt_arg2, opt_arg3 ){\r
var listeners = this[ '_listeners' ],\r
lock = X_EventDispatcher_lock || X_EventDispatcher_unlock,\r
list, cbHash, unlistens, i, f;\r
if( !listeners || !( list = listeners[ opt_type ] ) ) return false;\r
if( opt_arg1 === undefined ) return true;\r
\r
- if( opt_arg1.k ){\r
+ if( opt_arg1.kind ){\r
cbHash = opt_arg1;\r
} else {\r
cbHash = X_Callback_classifyCallbackArgs( opt_arg1, opt_arg2, opt_arg3, this );\r
if( ( unlistens = listeners[ X_Listeners_.UNLISTENS ] ) && ( unlistens = unlistens[ opt_type ] ) ){\r
for( i = unlistens.length; i; ){\r
f = unlistens[ --i ];\r
- if( f === cbHash || ( f.x === cbHash.x && f.f === cbHash.f && f.s === cbHash.s && f.lock === lock ) ) return false;\r
+ if( f === cbHash || ( f.context === cbHash.context && f.func === cbHash.func && f.supplement === cbHash.supplement && f.lock === lock ) ) return false;\r
};\r
};\r
for( i = list.length; i; ){\r
f = list[ --i ];\r
- if( f === cbHash || ( f.x === cbHash.x && f.f === cbHash.f && f.s === cbHash.s && f.lock === lock ) ){\r
+ if( f === cbHash || ( f.context === cbHash.context && f.func === cbHash.func && f.supplement === cbHash.supplement && f.lock === lock ) ){\r
// index を要求された場合、lock されていない、または unlock なら index を返す\r
return X_EventDispatcher_needsIndex ? i : true;\r
};\r
/**\r
* delay(ミリ秒)後にイベントを dispatch する。戻り値は uid = X.Timer.once() のタイマーID(数値)。X.Timer.remove(uid) でタイマーを解除して dispatch を中止できる。\r
* kill() 時には内部でまだ呼ばれていないタイマーの X.Timer.remove() が行われる。インスタンスが破棄された後にタイマーが呼ばれることがないので神経質にならなくても安全に使える。\r
- * @example this.asyncDispatch( 'myevent' );\r
+ * @example this[ 'asyncDispatch' ]( 'myevent' );\r
* // どちらのコードも同じ動作をする。\r
- * this.asyncDispatch( 0, 'myevent' );\r
+ * this[ 'asyncDispatch' ]( 0, 'myevent' );\r
* @param {number|eventHash|string} delay ms 省略した場合は 0 として扱う asyncDispatch( 'myevent' ) -> asyncDispatch( 0, 'myevent' )\r
* @param {eventHash|string|number} e イベントを表す数値、文字列、{ type : XXX, ... } なオブジェクト\r
* @return {number} X.Timer.add() の戻り値\r
*/ \r
- asyncDispatch : function( delay, e ){\r
+ 'asyncDispatch' : function( delay, e ){\r
var timerID;\r
if( delay && e === undefined ){\r
e = delay;\r
delay = 0;\r
};\r
- timerID = X.Timer.add( delay, 1, this, X_EventDispatcher_dispatch, [ e ] );\r
+ timerID = X_Timer_add( delay, 1, this, X_EventDispatcher_dispatch, [ e ] );\r
X_EventDispatcher_LAZY_TIMERS[ timerID ] = this;\r
return timerID;\r
}\r
\r
// 数値, 文字が渡された場合\r
if( !type ){\r
- e = { type : type = e };\r
+ e = { 'type' : type = e };\r
};\r
- e.target = e.target || this;\r
- e.currentTarget = e.currentTarget || this;\r
+ e[ 'target' ] = e[ 'target' ] || this;\r
+ e[ 'currentTarget' ] = e[ 'currentTarget' ] || this;\r
\r
if( listeners[ X_Listeners_.DISPATCHING ] ){\r
++listeners[ X_Listeners_.DISPATCHING ];\r
unlistens.indexOf( f ) === -1 && ( unlistens[ unlistens.length ] = f );\r
};\r
\r
- if( r & X.Callback.STOP_NOW ){\r
+ if( r & X_Callback_STOP_NOW ){\r
sysOnly = true;\r
};\r
ret |= X_Type_isFinite( r ) ? r : 0;\r
f = list[ i ];\r
X_EventDispatcher_once = f[ 4 ];\r
X_EventDispatcher_lock = f[ 5 ];\r
- this.listen( f[ 0 ], f[ 1 ], f[ 2 ], f[ 3 ] );\r
- X_EventDispatcher_once = false;\r
- X_EventDispatcher_lock = false;\r
+ this[ 'listen' ]( f[ 0 ], f[ 1 ], f[ 2 ], f[ 3 ] ); \r
f.length = 0;\r
};\r
list.length = 0;\r
+ X_EventDispatcher_once = X_EventDispatcher_lock = false;\r
delete listeners[ X_Listeners_.RESERVES ];\r
}; \r
\r
//if( X_EMPTY_OBJECT[ type ] ) continue;\r
list = unlistens[ type ];\r
for( i = list.length; i; ){\r
- this.unlisten( type, list[ --i ] );\r
+ this[ 'unlisten' ]( type, list[ --i ] );\r
};\r
list.length = 0;\r
delete unlistens[ type ];\r
for( timerID in X_EventDispatcher_LAZY_TIMERS ){\r
if( X_EventDispatcher_LAZY_TIMERS[ timerID ] === this ) return ret;\r
}; */\r
- this.kill();\r
+ this[ 'kill' ]();\r
};\r
};\r
\r
* ユーザーが触ることは無いが、システム内部でロックフラグを立てたリスナは、立てられていないフラグとは区別される。\r
* この仕組みによってシステムの登録したリスナを、システム外から不用意に削除されることを回避する。\r
* @example // 'myEvent' に対して、 this コンテキストを指定して 、コールバック関数を渡す。\r
- * this.listen( 'myEvent', context, func );\r
+ * this[ 'listen' ]( 'myEvent', context, func );\r
* // 'myEvent' に対して、 this コンテキストを指定して 、コールバック関数と追加の引数を渡す。\r
* args = [ 'arg1', 'arg2', 3 ]; // unlisten( 'myEvent', context, func, args ) で使用するので Array も控えておく。\r
- * this.listen( 'myEvent', context, func, args );\r
+ * this[ 'listen' ]( 'myEvent', context, func, args );\r
* // 'myEvent' に対して、 listener オブジェクトを渡す。listener は handleEvent という関数を持つオブジェクトのこと。\r
* listener.handleEvent = function( e ){};\r
- * this.listen( 'myEvent', listener );\r
+ * this[ 'listen' ]( 'myEvent', listener );\r
* // 'myEvent' に対して、 listener オブジェクトと追加の引数を渡す。\r
* listener.handleEvent = function( e, arg1, arg2, arg3 ){};\r
- * this.listen( 'myEvent', listener, [ arg1, arg2, arg3 ] );\r
+ * this[ 'listen' ]( 'myEvent', listener, [ arg1, arg2, arg3 ] );\r
* // 'myEvent' に対して、 function を渡す。\r
- * this.listen( 'myEvent', onMyEvent );\r
+ * this[ 'listen' ]( 'myEvent', onMyEvent );\r
* // 'myEvent' に対して、 function と追加の引数を渡す。\r
- * this.listen( 'myEvent', onMyEvent, args );\r
+ * this[ 'listen' ]( 'myEvent', onMyEvent, args );\r
* // 次の二つは同じ動作です。 this コンテキストが与えられなかった場合、コールバックの this は発火元インスタンスになります。\r
- * this.listen( 'myEvent', this [, func [, args ] ] );\r
- * this.listen( 'myEvent' [, func [, args ] ] );\r
+ * this[ 'listen' ]( 'myEvent', this [, func [, args ] ] );\r
+ * this[ 'listen' ]( 'myEvent' [, func [, args ] ] );\r
* // 複数のイベントタイプを同時に登録。コールバックは同じ指定が使われる。\r
- * this.listen( [ 'open', 'close', 'ready' ], onUpdate );\r
+ * this[ 'listen' ]( [ 'open', 'close', 'ready' ], onUpdate );\r
* \r
* @alias EventDispatcher.prototype.listen\r
* @param {string|number|Array.<string,number>} type 配列を指定した場合、複数のイベントタイプに対して同じコールバックを登録する。\r
\r
if( X_Type_isArray( type ) ){\r
for( i = type.length; i; ){\r
- this.listen( type[ --i ], opt_arg1, opt_arg2, opt_arg3 );\r
+ this[ 'listen' ]( type[ --i ], opt_arg1, opt_arg2, opt_arg3 );\r
};\r
return this;\r
};\r
\r
- raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
+ raw = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
add = raw && ( !listeners || !listeners[ type ] ) && X_Type_isString( type );\r
\r
- if( this.listening( type, opt_arg1 || this, opt_arg2, opt_arg3 ) ) return this;\r
+ if( this[ 'listening' ]( type, opt_arg1 || this, opt_arg2, opt_arg3 ) ) return this;\r
\r
if( !listeners ) listeners = this[ '_listeners' ] = {};\r
list = listeners[ type ] || ( listeners[ type ] = [] );\r
*/\r
function X_EventDispatcher_systemListen( that, type, opt_arg1, opt_arg2, opt_arg3 ){\r
X_EventDispatcher_lock = true;\r
- that.listen( type, opt_arg1, opt_arg2, opt_arg3 );\r
+ that[ 'listen' ]( type, opt_arg1, opt_arg2, opt_arg3 );\r
X_EventDispatcher_lock = false;\r
};\r
\r
-// TODO this.listen(type) は this リスナの登録なのに、this.unlisten(type)は全てのtypeの削除、と不一致\r
+// TODO this[ 'listen' ](type) は this リスナの登録なのに、this[ 'unlisten' ](type)は全てのtypeの削除、と不一致\r
\r
/**\r
* イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() ですべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。\r
\r
if( X_Type_isArray( opt_type ) ){\r
for( i = opt_type.length; i; ){\r
- this.unlisten( opt_type[ --i ], opt_arg1, opt_arg2, opt_arg3 );\r
+ this[ 'unlisten' ]( opt_type[ --i ], opt_arg1, opt_arg2, opt_arg3 );\r
if( !opt_type[ i ] ){\r
alert( '不正な unlisten Array' );\r
};\r
if( opt_type < X_Listeners_.KILL_RESERVED ) continue;\r
list = listeners[ opt_type ];\r
for( i = list.length; i; ){\r
- this.unlisten( opt_type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+ this[ 'unlisten' ]( opt_type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
};\r
- // this.unlisten( opt_type ); これは無茶!\r
+ // this[ 'unlisten' ]( opt_type ); これは無茶!\r
};\r
return this;\r
} else\r
// 同一タイプを全て削除\r
if( list = listeners[ opt_type ] ){\r
for( i = list.length; i; ){\r
- this.unlisten( opt_type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+ this[ 'unlisten' ]( opt_type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
};\r
};\r
return this;\r
};\r
\r
X_EventDispatcher_needsIndex = true;\r
- i = this.listening( opt_type, opt_arg1, opt_arg2, opt_arg3 );\r
+ i = this[ 'listening' ]( opt_type, opt_arg1, opt_arg2, opt_arg3 );\r
X_EventDispatcher_needsIndex = false;\r
if( i === false ) return this;\r
\r
delete f.once;\r
list.splice( i, 1 );\r
if( !list.length ){\r
- raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
+ raw = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
delete listeners[ opt_type ];\r
//empty = X_Object_isEmpty( listeners );\r
// TODO カウンター\r
*/\r
function X_EventDispatcher_systemUnlisten( that, type, opt_arg1, opt_arg2, opt_arg3 ){\r
X_EventDispatcher_unlock = true;\r
- that.unlisten( type, opt_arg1, opt_arg2, opt_arg3 );\r
+ that[ 'unlisten' ]( type, opt_arg1, opt_arg2, opt_arg3 );\r
X_EventDispatcher_unlock = false;\r
};\r
\r
\r
if( X_Type_isArray( type ) ){\r
for( i = type.length; i; ){\r
- X_EventDispatcher_systemListen( that, type[ --i ], X.emptyFunction );\r
+ X_EventDispatcher_systemListen( that, type[ --i ], X_emptyFunction );\r
console.log( 'events fix > ' + type[ i ] );\r
};\r
} else {\r
* animation も怪しい、、、\r
*/\r
function X_EventDispatcher_iOSTransitionEndDispatch( e ){\r
- return X_Node_getXNode( this ).dispatch( X_Event_RenameTo[ e.type ] || e.type );\r
+ return X_Node_getXNode( this )[ 'dispatch' ]( X_Event_RenameTo[ e.type ] || e.type );\r
};\r
\r
/*\r
* http://msdn.microsoft.com/ja-jp/library/cc189018%28v=vs.95%29.aspx#the_sender_parameter_and_event_data\r
*/\r
function X_EventDispatcher_sliverLightDispatch( sender, e, type ){\r
- return this.dispatch( type );\r
+ return this[ 'dispatch' ]( type );\r
};\r
\r
function X_EventDispatcher_removeEvent( that, type, raw, list, skip ){\r
\r
if( X_Type_isArray( type ) ){\r
for( i = type.length; i; ){\r
- X_EventDispatcher_systemUnlisten( that, type[ --i ], X.emptyFunction );\r
+ X_EventDispatcher_systemUnlisten( that, type[ --i ], X_emptyFunction );\r
};\r
} else {\r
X_EventDispatcher_actualRemoveEvent( that, type, raw, list, skip );\r
\r
case X_EventDispatcher_EVENT_TARGET_TYPE.XHR :\r
X_Callback_correct( raw[ 'on' + type ] );\r
- raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = X_emptyFunction;\r
raw[ 'on' + type ] = '';\r
break;\r
\r
if( raw.attachEvent ){\r
raw.detachEvent( 'on' + type, that[ '_listeners' ][ X_Listeners_.ACTUAL_HANDLER ] );\r
} else {\r
- raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = X_emptyFunction;\r
raw[ 'on' + type ] = '';\r
};\r
\r
\r
case X_EventDispatcher_EVENT_TARGET_TYPE.XHR :\r
X_Callback_correct( raw[ 'on' + type ] );\r
- raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = X_emptyFunction;\r
raw[ 'on' + type ] = '';\r
break;\r
\r
default :\r
- raw[ 'on' + type ] = X.emptyFunction;\r
+ raw[ 'on' + type ] = X_emptyFunction;\r
raw[ 'on' + type ] = '';\r
\r
if( !skip ){\r
(function(){\r
var ret;\r
\r
- //if( event.type === 'readystatechange' && this._tag && X.Dom.Event._LOAD_FIX_TAGS[ this._tag ] ){\r
- //type = 'readystatechange';\r
- //};\r
- \r
- ret = this.dispatch( new X.Dom.Event( event, this, this._rawObject ) );\r
+ ret = this[ 'dispatch' ]( new X_DomEvent( event, this, this[ '_rawObject' ] ) );\r
\r
- if( ret & X.Callback.STOP_PROPAGATION ){\r
+ if( ret & X_Callback_STOP_PROPAGATION ){\r
event.cancelBubble = true;\r
};\r
- if( ret & X.Callback.PREVENT_DEFAULT ){\r
- this._tag === 'A' && this._rawObject.blur();\r
+ if( ret & X_Callback_PREVENT_DEFAULT ){\r
+ this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur();\r
return event.returnValue = false;\r
};\r
}) :\r
//X_UA_EVENT.W3C || X_UA_EVENT.DOM0\r
(function( e ){\r
- var ev = new X.Dom.Event( e, this ),\r
+ var ev = new X_DomEvent( e, this ),\r
ret = X_Callback_NONE,\r
i, l;\r
//console.log( '>>>>>>>>>> ' + e.type );\r
if( X_Type_isArray( ev ) ){\r
if( ev.length === 0 ){\r
// TouchEvent の後に発生した MouseEvent のキャンセル\r
- ret = X.Callback.STOP_PROPAGATION | X.Callback.PREVENT_DEFAULT;\r
+ ret = X_Callback_STOP_PROPAGATION | X_Callback_PREVENT_DEFAULT;\r
} else {\r
for( i = 0, l = ev.length; i < l; ++i ){\r
//console.log( 'handleEvent ' + ev[ i ].type );\r
- ret |= this.dispatch( ev[ i ] ) || 0;\r
- }; \r
+ ret |= this[ 'dispatch' ]( ev[ i ] ) || 0;\r
+ };\r
};\r
} else {\r
- ret = this.dispatch( ev );\r
+ ret = this[ 'dispatch' ]( ev );\r
};\r
\r
- if( ret & X.Callback.STOP_PROPAGATION ){\r
+ if( ret & X_Callback_STOP_PROPAGATION ){\r
e.stopPropagation();\r
};\r
- if( ret & X.Callback.PREVENT_DEFAULT ){\r
- this._tag === 'A' && this._rawObject.blur();\r
+ if( ret & X_Callback_PREVENT_DEFAULT ){\r
+ this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur();\r
e.preventDefault();\r
if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-\r
if( e.type === 'click' || e.type === 'dbclick' ){\r
\r
if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-\r
document.documentElement.onclick =\r
- document.documentElement.ondbclick = function( e ){\r
+ document.documentElement[ 'ondbclick' ] = function( e ){\r
if( X_EventDispatcher_safariPreventDefault ){\r
X_EventDispatcher_safariPreventDefault = false;\r
e.preventDefault();\r
// 退避したイベントの復帰\r
function X_EventDispatcher_toggleAllEvents( that, add ){\r
var list = that[ '_listeners' ],\r
- raw = that._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( that ),\r
+ raw = that[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( that ),\r
func = add ? X_EventDispatcher_addEvent : X_EventDispatcher_removeEvent,\r
type;\r
if( !list || !raw ) return;\r
* @function\r
* @return {number} ミリ秒\r
*/\r
- X_Timer_now = Date.now || function(){ return +new Date; },\r
+ X_Timer_now = Date.now || ( function(){ return +new Date; } ),\r
\r
X_Timer_SET_TIMEOUT = window.setTimeout,\r
X_Timer_CLEAR_TIMEOUT = window.clearTimeout,\r
\r
X_Timer_REQ_FRAME_LIST = [],\r
X_Timer_requestID = 0,\r
- X_Timer_busyOnFrame = false;\r
+ X_Timer_busyOnFrame = false,\r
+\r
+ /**\r
+ * requestAnimationFrame をセットします。\r
+ * @alias X.Timer.requestFrame\r
+ * @function\r
+ * @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
+ * @param {*} args2\r
+ * @param {*} args3\r
+ * @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
+ */\r
+ X_Timer_requestFrame = X_Timer_REQ_ANIME_FRAME ?\r
+ (function( args1, args2, args3 ){\r
+ var i = X_Timer_REQ_FRAME_LIST.length,\r
+ f;\r
+ i === 0 && ( X_Timer_requestID = X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) );\r
+ f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
+ return f.uid = ++X_Timer_uid;\r
+ }) :\r
+ (function( args1, args2, args3 ){\r
+ var i = X_Timer_REQ_FRAME_LIST.length,\r
+ f;\r
+ i === 0 && ( X_Timer_requestID = X_Timer_add( 0, 1, X_Timer_onEnterFrame ) );\r
+ f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
+ return f.uid = ++X_Timer_uid;\r
+ }),\r
+\r
+ /**\r
+ * requestAnimationFrame を解除します。登録時に受け取ったタイマーIDを使用します。\r
+ * @alias X.Timer.cancelFrame\r
+ * @function\r
+ * @param {number} タイマーID\r
+ */\r
+ X_Timer_cancelFrame = X_Timer_CANCEL_ANIME_FRAME ?\r
+ (function( uid ){\r
+ var list = X_Timer_REQ_FRAME_LIST,\r
+ l = list.length,\r
+ i = l,\r
+ f;\r
+ // fire 中の cancel\r
+ if( X_Timer_busyOnFrame ){\r
+ if( !X_Timer_removal ) X_Timer_removal = {};\r
+ X_Timer_removal[ uid ] = true;\r
+ } else {\r
+ for( ; i; ){\r
+ if( ( f = list[ --i ] ).uid < uid ) break;\r
+ if( f.uid === uid ){\r
+ list.splice( i, 1 );\r
+ // gecko では無い場合がある\r
+ l === 1 && X_Timer_CANCEL_ANIME_FRAME && X_Timer_CANCEL_ANIME_FRAME( X_Timer_requestID );\r
+ break;\r
+ };\r
+ }; \r
+ };\r
+ }) :\r
+ (function( uid ){\r
+ var list = X_Timer_REQ_FRAME_LIST,\r
+ l = list.length,\r
+ i = l,\r
+ f;\r
+ // fire 中の cancel\r
+ if( X_Timer_busyOnFrame ){\r
+ if( !X_Timer_removal ) X_Timer_removal = {};\r
+ X_Timer_removal[ uid ] = true;\r
+ } else {\r
+ for( ; i; ){\r
+ if( ( f = list[ --i ] ).uid < uid ) break;\r
+ if( f.uid === uid ){\r
+ list.splice( i, 1 );\r
+ l === 1 && X_Timer_remove( X_Timer_requestID );\r
+ break;\r
+ };\r
+ };\r
+ };\r
+ });\r
+\r
\r
// ------------------------------------------------------------------------- //\r
// --- interface ----------------------------------------------------------- //\r
* <p>setTimeout のコールバックに文字列しか指定できないブラウザがあり対策しています。\r
* <p>requestAnimationFrame をラップします。ベンダープレフィックス付の requestAnimationFrame もない場合、setTimeout にフォールバックします。\r
* \r
- * @example X.Timer.add( 1000, 5, thisContext, onTimer );\r
- * \r
* @namespace X.Timer\r
* @alias X.Timer\r
*/ \r
-X.Timer = {\r
+X[ 'Timer' ] = {\r
\r
- now : X_Timer_now,\r
+ 'now' : X_Timer_now,\r
+ \r
+ 'add' : X_Timer_add,\r
\r
+ 'once' : X_Timer_once,\r
+ \r
+ 'remove' : X_Timer_remove,\r
+ \r
+ 'requestFrame' : X_Timer_requestFrame,\r
+ \r
+ 'cancelFrame' : X_Timer_cancelFrame\r
+ \r
+};\r
+\r
+// ------------------------------------------------------------------------- //\r
+// --- implements ---------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+\r
/**\r
* タイマーをセットします。\r
+ * @alias X.Timer.add\r
* @param {number} time ミリ秒\r
* @param {number} opt_count 回数。省略可能。指定回数で自動でタイマーを破棄します。0 を指定した場合無限にタイマーが呼ばれます。省略した場合 0 と同じです。\r
* @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
* @param {*} args2\r
* @param {*} args3\r
* @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
+ * @example X.Timer.add( 1000, 5, thisContext, onTimer );\r
*/\r
- add : function( time, opt_count, args1, args2, args3 ){\r
+ function X_Timer_add( time, opt_count, args1, args2, args3 ){\r
var list = X_Timer_TICKET_LIST,\r
hash, obj;\r
time = time < X_Timer_INTERVAL_TIME ? 1 : time / X_Timer_INTERVAL_TIME | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
hash = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
if( !hash ) return -1; // dev only\r
\r
- if( !hash.k ) hash = { f : hash };\r
+ if( !hash.kind ) hash = { func : hash };\r
hash.time = time;\r
hash.last = time;\r
hash.count = opt_count;\r
\r
!X_Timer_busyTimeout && X_Timer_update();\r
return X_Timer_uid;\r
- },\r
+ };\r
\r
/**\r
* 1 回呼ばれたら解除されるタイマーをセットします。\r
+ * @alias X.Timer.once\r
* @param {number} time ミリ秒\r
* @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
* @param {*} args2\r
* @param {*} args3\r
* @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
*/\r
- once : function( time, args1, args2, args3 ){\r
- return X.Timer.add( time, 1, args1, args2, args3 );\r
- },\r
+ function X_Timer_once( time, args1, args2, args3 ){\r
+ return X_Timer_add( time, 1, args1, args2, args3 );\r
+ };\r
\r
/**\r
* タイマーを解除します。登録時に受け取ったタイマーIDを使用します。\r
+ * @alias X.Timer.remove\r
* @param {number} タイマーID\r
*/\r
- remove : function( uid ){\r
+ function X_Timer_remove( uid ){\r
var list = X_Timer_TICKET_LIST,\r
i = list.length,\r
l = i,\r
break;\r
};\r
}; \r
- !lazy && eventDispatcher.kill();\r
+ !lazy && eventDispatcher[ 'kill' ]();\r
}; */\r
};\r
\r
};\r
}; \r
};\r
- },\r
- \r
- /**\r
- * requestAnimationFrame をセットします。\r
- * @function\r
- * @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
- * @param {*} args2\r
- * @param {*} args3\r
- * @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
- */\r
- requestFrame : X_Timer_REQ_ANIME_FRAME ?\r
- (function( args1, args2, args3 ){\r
- var i = X_Timer_REQ_FRAME_LIST.length,\r
- f;\r
- i === 0 && ( X_Timer_requestID = X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) );\r
- f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
- return f.uid = ++X_Timer_uid;\r
- }) :\r
- (function( args1, args2, args3 ){\r
- var i = X_Timer_REQ_FRAME_LIST.length,\r
- f;\r
- i === 0 && ( X_Timer_requestID = X.Timer.add( 0, 1, X_Timer_onEnterFrame ) );\r
- f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
- return f.uid = ++X_Timer_uid;\r
- }),\r
-\r
- /**\r
- * requestAnimationFrame を解除します。登録時に受け取ったタイマーIDを使用します。\r
- * @function\r
- * @param {number} タイマーID\r
- */\r
- cancelFrame : X_Timer_CANCEL_ANIME_FRAME ?\r
- (function( uid ){\r
- var list = X_Timer_REQ_FRAME_LIST,\r
- l = list.length,\r
- i = l,\r
- f;\r
- // fire 中の cancel\r
- if( X_Timer_busyOnFrame ){\r
- if( !X_Timer_removal ) X_Timer_removal = {};\r
- X_Timer_removal[ uid ] = true;\r
- } else {\r
- for( ; i; ){\r
- if( ( f = list[ --i ] ).uid < uid ) break;\r
- if( f.uid === uid ){\r
- list.splice( i, 1 );\r
- // gecko では無い場合がある\r
- l === 1 && X_Timer_CANCEL_ANIME_FRAME && X_Timer_CANCEL_ANIME_FRAME( X_Timer_requestID );\r
- break;\r
- };\r
- }; \r
- };\r
- }) :\r
- (function( uid ){\r
- var list = X_Timer_REQ_FRAME_LIST,\r
- l = list.length,\r
- i = l,\r
- f;\r
- // fire 中の cancel\r
- if( X_Timer_busyOnFrame ){\r
- if( !X_Timer_removal ) X_Timer_removal = {};\r
- X_Timer_removal[ uid ] = true;\r
- } else {\r
- for( ; i; ){\r
- if( ( f = list[ --i ] ).uid < uid ) break;\r
- if( f.uid === uid ){\r
- list.splice( i, 1 );\r
- l === 1 && X.Timer.remove( X_Timer_requestID );\r
- break;\r
- };\r
- };\r
- };\r
- })\r
- \r
-};\r
-\r
-// ------------------------------------------------------------------------- //\r
-// --- implements ---------------------------------------------------------- //\r
-// ------------------------------------------------------------------------- //\r
+ };\r
\r
if( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ){\r
X.Timer[ '_' ] = X_Timer_onTimeout;\r
\r
X_Timer_currentUID = q.uid;\r
\r
- if( q.k ){\r
+ if( q.kind ){\r
r = X_Callback_proxyCallback( q, [] );\r
} else {\r
- r = q.f();\r
+ r = q.func();\r
};\r
\r
//console.log( 'fire....' );\r
X_Timer_skipUpdate = true;\r
for( uid in X_Timer_removal ){\r
//if( X_EMPTY_OBJECT[ uid ] ) continue;\r
- X.Timer.remove( uid );\r
+ X_Timer_remove( uid );\r
};\r
X_Timer_skipUpdate = false;\r
X_Timer_removal = null;\r
\r
list.splice( 0, l );\r
if( list.length ){\r
- X_Timer_requestID = X_Timer_REQ_ANIME_FRAME ? X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) : X.Timer.add( 0, 1, X_Timer_onEnterFrame );\r
+ X_Timer_requestID = X_Timer_REQ_ANIME_FRAME ? X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) : X_Timer_add( 0, 1, X_Timer_onEnterFrame );\r
};\r
\r
X_Timer_busyOnFrame = false;\r
if( X_Timer_removal ){\r
for( uid in X_Timer_removal ){\r
//if( X_EMPTY_OBJECT[ uid ] ) continue;\r
- X.Timer.cancelFrame( X_Timer_removal[ uid ] );\r
+ X_Timer_cancelFrame( X_Timer_removal[ uid ] );\r
};\r
X_Timer_removal = null;\r
};\r
X_System_MESSAGE_RECIVERS = X_System_postMessageAccessKey && {},\r
\r
X_System = X_Class_override(\r
- new X.EventDispatcher(),\r
+ X_EventDispatcher(),\r
{\r
monitor : function(){\r
\r
if( !X_System_postMessageAccessKey ) return;\r
// name にスペースは含まない\r
X_System_MESSAGE_RECIVERS[ name + key ] = callback;\r
- X_ViewPort.listen( 'message', X_System );\r
+ X_ViewPort[ 'listen' ]( 'message', X_System );\r
\r
return X_System_postMessageAccessKey + '-' + name + key;\r
},\r
X_ViewPort_hScrollbarSize,
X_Dom_detectFontSize = !( X_UA[ 'IE' ] < 9 || X_UA[ 'iOS' ] ) && function(){
- var size = X_Node_fontSizeNode._rawObject.offsetHeight;
+ var size = X_Node_fontSizeNode[ '_rawObject' ].offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
- X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( X_Event.BASE_FONT_RESIZED );
+ X_ViewPort_baseFontSize && X_ViewPort[ 'asyncDispatch' ]( X_EVENT_BASE_FONT_RESIZED );
X_ViewPort_baseFontSize = size;
};
},
//console.log( '-- orientationchange : ' + X.ViewPort.getSize[ 0 ] + ' ' + X.ViewPort.getSize[ 1 ] );
},
- X_ViewPort_document = new X.EventDispatcher( document ),
+ X_ViewPort_document = X_EventDispatcher( document ),
X_ViewPort = X_Class_override(
- new X.EventDispatcher( window ),
+ X_EventDispatcher( window ),
{
- handleEvent : function( e ){
+ 'handleEvent' : function( e ){
var href, i, name;
switch( e.type ){
case 'beforeunload' :
// ie では a href="javascript" な要素でも beforeunload が起こる
- href = e.target && e.target.attr && e.target.attr( 'href' );
- if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;
+ href = e.target && e.target[ 'attr' ] && e.target[ 'attr' ]( 'href' );
+ if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X_Callback_PREVENT_DEFAULT | X_Callback_STOP_PROPAGATION;
- return X_ViewPort.dispatch( X_Event.BEFORE_UNLOAD );
+ return X_ViewPort[ 'dispatch' ]( X_EVENT_BEFORE_UNLOAD );
case 'unload' :
- X_ViewPort.dispatch( X_Event.UNLOAD );
+ X_ViewPort[ 'dispatch' ]( X_EVENT_UNLOAD );
//alert('unload');
- X_ViewPort_document.kill();
- this.kill();
+ X_ViewPort_document[ 'kill' ]();
+ this[ 'kill' ]();
- //X_System.dispatch( X_Event.SHUT_DOWN );
+ //X_System[ 'dispatch' ]( X_EVENT_SHUT_DOWN );
break;
case 'visibilitychange' :
- X_ViewPort.dispatch( ( X_ViewPort_active = document[ 'hidden' ] ) ? X_Event.VIEW_DEACTIVATE : X_Event.VIEW_ACTIVATE );
+ X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'hidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
break;
case 'mozvisibilitychange' :
- X_ViewPort.dispatch( ( X_ViewPort_active = document[ 'mozHidden' ] ) ? X_Event.VIEW_DEACTIVATE : X_Event.VIEW_ACTIVATE );
+ X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'mozHidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
break;
case 'webkitvisibilitychange' :
- X_ViewPort.dispatch( ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X_Event.VIEW_DEACTIVATE : X_Event.VIEW_ACTIVATE );
+ X_ViewPort[ 'dispatch' ]( ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X_EVENT_VIEW_DEACTIVATE : X_EVENT_VIEW_ACTIVATE );
break;
case 'pageshow' :
case 'focus' :
if( !X_ViewPort_active ){
X_ViewPort_active = true;
- X_ViewPort.dispatch( X_Event.VIEW_ACTIVATE );
+ X_ViewPort[ 'dispatch' ]( X_EVENT_VIEW_ACTIVATE );
};
break;
case 'blur' :
if( X_ViewPort_active ){
X_ViewPort_active = false;
- X_ViewPort.dispatch( X_Event.VIEW_DEACTIVATE );
+ X_ViewPort[ 'dispatch' ]( X_EVENT_VIEW_DEACTIVATE );
};
break;
};
*/
X.ViewPort = {
- listen : function( type, arg1, arg2, arg3 ){
+ 'listen' : function( type, arg1, arg2, arg3 ){
if( type <= X_ViewPort_readyState ){
/*
- * X_Event.XDOM_READY 以後に listen した場合の対策
+ * X_EVENT_XDOM_READY 以後に listen した場合の対策
*/
- X_ViewPort.asyncDispatch( type );
+ X_ViewPort[ 'asyncDispatch' ]( type );
};
// ie8-では keydown -> documentへ
- type && arg1 && X_ViewPort.listen( type, arg1, arg2, arg3 );
+ type && arg1 && X_ViewPort[ 'listen' ]( type, arg1, arg2, arg3 );
return X.ViewPort;
},
- listenOnce : function( type, arg1, arg2, arg3 ){
+ 'listenOnce' : function( type, arg1, arg2, arg3 ){
if( type <= X_ViewPort_readyState ){
/*
* X.Event.XDOM_READY 以後に listen した場合の対策
*/
- X_ViewPort.asyncDispatch( type );
+ X_ViewPort[ 'asyncDispatch' ]( type );
};
- type && arg1 && X_ViewPort.listenOnce( type, arg1, arg2, arg3 );
+ type && arg1 && X_ViewPort[ 'listenOnce' ]( type, arg1, arg2, arg3 );
return X.ViewPort;
},
- unlisten : function( type, arg1, arg2, arg3 ){
- type && arg1 && X_ViewPort.unlisten( type, arg1, arg2, arg3 );
+ 'unlisten' : function( type, arg1, arg2, arg3 ){
+ type && arg1 && X_ViewPort[ 'unlisten' ]( type, arg1, arg2, arg3 );
return X.ViewPort;
},
- listening : function( type, arg1, arg2, arg3 ){
- return X_ViewPort.listening( type, arg1, arg2, arg3 );
+ 'listening' : function( type, arg1, arg2, arg3 ){
+ return X_ViewPort[ 'listening' ]( type, arg1, arg2, arg3 );
},
// hammer のテストファイルだけが使用
- asyncDispatch : function(){
- return X_ViewPort.asyncDispatch.apply( X_ViewPort, arguments );
+ 'asyncDispatch' : function(){
+ return X_ViewPort[ 'asyncDispatch' ].apply( X_ViewPort, arguments );
},
- getPointerPosition : function(){
+ 'getPointerPosition' : function(){
},
/* 要素が視界に入った http://remysharp.com/2009/01/26/element-in-view-event-plugin/
* TODO -> Node.call('inView')
*/
- inView : function( elm ){
+ 'inView' : function( elm ){
},
- getSize : function(){
+ 'getSize' : function(){
return [ X_ViewPort_width, X_ViewPort_height ];
},
//https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollLeft == 'number' ? t : document.body).ScrollLeft;
//(((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.ScrollTop == 'number' ? t : document.body).ScrollTop
- getDocumentSize : function(){
+ 'getDocumentSize' : function(){
// Opera は互換モードでは document.body.scrollHeight、標準モードでは document.documentElement.scrollHeight でページの高さが取れる。と思ってたんだけど、例外があった。
// http://orera.g.hatena.ne.jp/edvakf/20100515/1273908051
//http://onozaty.hatenablog.com/entry/20060803/p1
];
},
- getScrollPosition :
+ 'getScrollPosition' :
window.pageXOffset !== undefined ?
( function(){
X_Node_updateTimerID && X_Node_startUpdate();
return[ X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
} ),
- getScrollbarSize : function(){
+ 'getScrollbarSize' : function(){
return [ X_ViewPort_vScrollbarSize, X_ViewPort_hScrollbarSize ];
},
- getBaseFontSize : function(){
+ 'getBaseFontSize' : function(){
if( X_Node_updateTimerID ){
X_Node_startUpdate();
- return X_ViewPort_baseFontSize = X_Node_fontSizeNode._rawObject.offsetHeight;
+ return X_ViewPort_baseFontSize = X_Node_fontSizeNode[ '_rawObject' ].offsetHeight;
};
return X_ViewPort_baseFontSize;
}
if( X_ViewPort_width !== size[ 0 ] || X_ViewPort_height !== size[ 1 ] ){
X_ViewPort_width = size[ 0 ];
X_ViewPort_height = size[ 1 ];
- X.Timer.once( 100, X_Dom_detectFinishResizing );
+ X_Timer_once( 100, X_Dom_detectFinishResizing );
X_ViewPort_lock = true;
};
};
- size = X_Node_fontSizeNode._rawObject.offsetHeight;
+ size = X_Node_fontSizeNode[ '_rawObject' ].offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
- X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( X_Event.BASE_FONT_RESIZED );
+ X_ViewPort_baseFontSize && X_ViewPort[ 'asyncDispatch' ]( X_EVENT_BASE_FONT_RESIZED );
X_ViewPort_baseFontSize = size;
};
(function( e ){
console.log( '-- resize : ' + X_Timer_now() );
- !X_ViewPort_lock && ( X_ViewPort_lock = true ) && X.Timer.once( 100, X_Dom_detectFinishResizing );
- return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;
+ !X_ViewPort_lock && ( X_ViewPort_lock = true ) && X_Timer_once( 100, X_Dom_detectFinishResizing );
+ return X_Callback_PREVENT_DEFAULT | X_Callback_STOP_PROPAGATION;
});
function X_Dom_detectFinishResizing(){
if( X_ViewPort_width !== size[ 0 ] || X_ViewPort_height !== size[ 1 ] ){
X_ViewPort_width = size[ 0 ];
X_ViewPort_height = size[ 1 ];
- X.Timer.once( 100, X_Dom_detectFinishResizing );
+ X_Timer_once( 100, X_Dom_detectFinishResizing );
} else {
console.log( '-- detectFinishResizing : ' + X_Timer_now() );
- X_ViewPort.asyncDispatch( X_Event.VIEW_RESIZED );
+ X_ViewPort[ 'asyncDispatch' ]( X_EVENT_VIEW_RESIZED );
X_ViewPort_lock = false;
if( X_ViewPort_orientationFlag ){
X_ViewPort_orientationFlag = false;
- X_ViewPort.asyncDispatch( 100, { type : X_Event.VIEW_TURNED, orientation : window.orientation } );
+ X_ViewPort[ 'asyncDispatch' ]( 100, { type : X_EVENT_VIEW_TURNED, orientation : window.orientation } );
};
};
};
console.log( '> X_TEMP.onDomContentLoaded rs:' + X_ViewPort_readyState );
- if( X_TEMP.SYSTEM_EVENT_PRE_INIT <= X_ViewPort_readyState ) return X_Callback_UN_LISTEN;
- X_ViewPort_readyState = X_TEMP.SYSTEM_EVENT_PRE_INIT;
+ if( X_EVENT_PRE_INIT <= X_ViewPort_readyState ) return X_Callback_UN_LISTEN;
+ X_ViewPort_readyState = X_EVENT_PRE_INIT;
// DOMContentLoaded の無いブラウザで X_TEMP.onDomContentLoaded への参照が残り続けるのを回避
- X_TEMP.onDomContentLoaded && X_ViewPort_document.unlisten( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
+ X_TEMP.onDomContentLoaded && X_ViewPort_document[ 'unlisten' ]( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
delete X_TEMP.onDomContentLoaded;
elmHtml = document.documentElement ||
X_ViewPort_rootElement = document.compatMode !== 'CSS1Compat' ? elmBody : elmHtml || elmBody;
- html = X.Doc.html = X_Node_html = elmHtml && new Node( elmHtml );
- html._flags |= X_Node_State.IN_TREE;
+ html = X[ 'Doc' ][ 'html' ] = X_Node_html = elmHtml && new Node( elmHtml );
+ html[ '_flags' ] |= X_Node_State.IN_TREE;
- head = X.Doc.head = X_Node_head = elmHead && new Node( elmHead );
+ head = X[ 'Doc' ][ 'head' ] = X_Node_head = elmHead && new Node( elmHead );
- body = X.Doc.body = X_Node_body = new Node( elmBody );
+ body = X[ 'Doc' ][ 'body' ] = X_Node_body = new Node( elmBody );
- body.parent = head.parent = html;
- html._xnodes = [ head, body ];
+ body[ 'parent ' ] = head[ 'parent' ] = html;
+ html[ '_xnodes' ] = [ head, body ];
- html.appendTo = html.appendToRoot = html.before = html.after = html.clone = html.remove = html.destroy = html.prev = html.next =
- html.create = html.createText = html.createAt = html.createTextAt = html.append = html.appendAt = html.empty = html.html = html.text =
- html.css = html.cssText =
- head.appendTo = head.appendToRoot = head.before = head.after = head.clone = head.remove = head.destroy =
- head.createText = head.createTextAt = head.empty = head.html = head.text = head.css = head.cssText =
- body.appendTo = body.appendToRoot = body.before = body.after = body.clone = body.remove = body.destroy = new Function( 'return this' );
-
- X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_PRE_INIT, function(){
- X_ViewPort_readyState = X_TEMP.SYSTEM_EVENT_XTREE;
+ html[ 'appendTo' ] = html[ 'before' ] = html[ 'after' ] = html[ 'clone' ] = html[ 'remove' ] = html[ 'destroy' ] = html[ 'prev' ] = html[ 'next' ] =
+ html[ 'create' ] = html[ 'createText' ] = html[ 'createAt' ] = html[ 'createTextAt' ] = html[ 'append' ] = html[ 'appendAt' ] = html[ 'empty' ] = html[ 'html' ] = html[ 'text' ] =
+ html[ 'css' ] = html[ 'cssText' ] =
+ head[ 'appendTo' ] = head[ 'before' ] = head[ 'after' ] = head[ 'clone' ] = head[ 'remove' ] = head[ 'destroy' ] =
+ head[ 'createText' ] = head[ 'createTextAt' ] = head[ 'empty' ] = head[ 'html' ] = head[ 'text' ] = head[ 'css' ] = head[ 'cssText' ] =
+ body[ 'appendTo' ] = body[ 'before' ] = body[ 'after' ] = body[ 'clone' ] = body[ 'remove' ] = body[ 'destroy' ] = new Function( 'return this' );
+
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, function(){
+ X_ViewPort_readyState = X_EVENT_XTREE_READY;
if( X_TEMP.X_Dom_useBuilder ) X_TEMP.X_Dom_useBuilder = !!document.body.children.length;
- !X_TEMP.X_Dom_useBuilder && X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_XTREE );
+ !X_TEMP.X_Dom_useBuilder && X_ViewPort[ 'asyncDispatch' ]( X_EVENT_XTREE_READY );
} );
- X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_XTREE, function(){
- X_ViewPort_readyState = X_TEMP.SYSTEM_EVENT_INIT;
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_XTREE_READY, function(){
+ X_ViewPort_readyState = X_EVENT_INIT;
//X_UA[ 'Opera7' ] && alert( 'bc' );
- X_Node_body.appendAt( 0,
+ X_Node_body[ 'appendAt' ]( 0,
X_Node_systemNode = X_Doc_create( 'div', { 'class' : 'hidden-system-node' } ),
- X_Node_fontSizeNode = X_Doc_create( 'div', { 'class' : 'hidden-system-node' } ).cssText( 'line-height:1;height:1em;' ).text( 'X' )
+ X_Node_fontSizeNode = X_Doc_create( 'div', { 'class' : 'hidden-system-node' } )[ 'cssText' ]( 'line-height:1;height:1em;' )[ 'text' ]( 'X' )
);
X_Node_startUpdate();
- X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_INIT );
+ X_ViewPort[ 'asyncDispatch' ]( X_EVENT_INIT );
} );
- X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_INIT, function(){
var size = X_ViewPort_getWindowSize(),
// http://jsdo.it/imaya/kTYg
if( X_Dom_detectFontSize ){
X_EventDispatcher_systemListen( X_ViewPort, 'resize', X_ViewPort_resize );
- X.Timer.add( 333, X_Dom_detectFontSize );
+ X_Timer_add( 333, X_Dom_detectFontSize );
} else {
- X.Timer.add( 333, X_ViewPort_resize );
+ X_Timer_add( 333, X_ViewPort_resize );
};
- X_ViewPort_baseFontSize = X_Node_fontSizeNode._rawObject.offsetHeight;
+ X_ViewPort_baseFontSize = X_Node_fontSizeNode[ '_rawObject' ].offsetHeight;
- X_ViewPort_readyState = X_Event.XDOM_READY;
- X_ViewPort.asyncDispatch( { type : X_Event.XDOM_READY, w : X_ViewPort_width = size[ 0 ], h : X_ViewPort_height = size[ 1 ] } );
+ X_ViewPort_readyState = X_EVENT_XDOM_READY;
+ X_ViewPort[ 'asyncDispatch' ]( { type : X_EVENT_XDOM_READY, w : X_ViewPort_width = size[ 0 ], h : X_ViewPort_height = size[ 1 ] } );
} );
- X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_PRE_INIT );
+ X_ViewPort[ 'asyncDispatch' ]( X_EVENT_PRE_INIT );
X_EventDispatcher_systemListen( X_ViewPort, [ 'beforeunload', 'unload' ] );
/* for ie9+/Mozilla/Opera9 */
if( X_UA_EVENT.W3C ){
- X_ViewPort_document.listenOnce( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
+ X_ViewPort_document[ 'listenOnce' ]( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
} else
if( 6 <= X_UA[ 'IE' ] && X.inHead ){
// if this script in Head
X_TEMP._script.onreadystatechange = function(){
var s = X_TEMP._script;
if( s && s.readyState === 'complete' ){
- s.onreadystatechange = X.emptyFunction;
+ s.onreadystatechange = X_emptyFunction;
s.onreadystatechange = null;
s.parentNode.removeChild( s );
delete X_TEMP._script;
// Re: onLoad doesn't work with Safari?
// http://lists.apple.com/archives/web-dev/2003/Oct/msg00036.html
if( X_UA[ 'WebKit' ] || X_UA[ 'Safari' ] < 3 ){ // sniff
- X.Timer.add( 16, function(){
+ X_Timer_add( 16, function(){
if( !X_TEMP.onDomContentLoaded ) return X_Callback_UN_LISTEN;
if( document.readyState === 'loaded' || document.readyState === 'complete' ) return X_TEMP.onDomContentLoaded();
});
};
/* for other browsers */
-X_ViewPort.listenOnce( 'load', X_TEMP.onDomContentLoaded );
+X_ViewPort[ 'listenOnce' ]( 'load', X_TEMP.onDomContentLoaded );
},\r
_output : function( msg, level ){\r
var body, $Area;\r
- if( X_Event.XDOM_READY <= X_ViewPort_readyState ){\r
+ if( X_EVENT_XDOM_READY <= X_ViewPort_readyState ){\r
if( $Area = X.Logger._$LogArea ){\r
- $Area.remove();\r
+ $Area[ 'remove' ]();\r
delete X.Logger._$LogArea;\r
};\r
\r
\r
} else\r
- if( X_Event.XDOM_READY <= X_ViewPort_readyState ){\r
+ if( X_EVENT_XDOM_READY <= X_ViewPort_readyState ){\r
if( !( $Area = X.Logger._$LogArea ) ){\r
$Area = X.Logger._$LogArea = X.Node( 'div' ).addToRoot( 0 );\r
};\r
* @namespace X.Doc
* @alias X.Doc
*/
-X.Doc = {
- listen : function( type, arg1, arg2, arg3 ){
+X[ 'Doc' ] = {
+ 'listen' : function( type, arg1, arg2, arg3 ){
if( type <= X_ViewPort_readyState && type === 'DOMContentLoaded' ){
/*
* X.Event.XDOM_READY 以後に listen した場合の対策
*/
- X_ViewPort_document.asyncDispatch( type );
+ X_ViewPort_document[ 'asyncDispatch' ]( type );
};
- type && arg1 && X_ViewPort_document.listen( type, arg1, arg2, arg3 );
+ type && arg1 && X_ViewPort_document[ 'listen' ]( type, arg1, arg2, arg3 );
return X.Doc;
},
- listenOnce : function( type, arg1, arg2, arg3 ){
+ 'listenOnce' : function( type, arg1, arg2, arg3 ){
if( type <= X_ViewPort_readyState && type === 'DOMContentLoaded' ){
/*
* X.Event.XDOM_READY 以後に listen した場合の対策
*/
- X_ViewPort_document.asyncDispatch( type );
+ X_ViewPort_document[ 'asyncDispatch' ]( type );
};
- type && arg1 && X_ViewPort_document.listenOnce( type, arg1, arg2, arg3 );
+ type && arg1 && X_ViewPort_document[ 'listenOnce' ]( type, arg1, arg2, arg3 );
return X.Doc;
},
- unlisten : function( type, arg1, arg2, arg3 ){
- type && arg1 && X_ViewPort_document.unlisten( type, arg1, arg2, arg3 );
+ 'unlisten' : function( type, arg1, arg2, arg3 ){
+ type && arg1 && X_ViewPort_document[ 'unlisten' ]( type, arg1, arg2, arg3 );
return X.Doc;
},
- listening : function( type, arg1, arg2, arg3 ){
- return X_ViewPort_document.listening( type, arg1, arg2, arg3 );
+ 'listening' : function( type, arg1, arg2, arg3 ){
+ return X_ViewPort_document[ 'listening' ]( type, arg1, arg2, arg3 );
},
- create : X_Doc_create,
+ 'create' : X_Doc_create,
- createText : X_Doc_createText
+ 'createText' : X_Doc_createText
// html
// head
-X.Dom = {};\r
-\r
-var X_Dom_DTD_EMPTY = {\r
- AREA : true,\r
- BASE : true,\r
- BASEFONT : true,\r
- BR : true,\r
- COL : true,\r
- FRAME : true,\r
- HR : true,\r
- IMG : true,\r
- INPUT : true,\r
- ISINDEX : true,\r
- LINK : true,\r
- META : true,\r
- PARAM : true,\r
- EMBED : true\r
+var X_Dom_DTD_EMPTY = {\r
+ 'AREA' : true,\r
+ 'BASE' : true,\r
+ 'BASEFONT' : true,\r
+ 'BR' : true,\r
+ 'COL' : true,\r
+ 'FRAME' : true,\r
+ 'HR' : true,\r
+ 'IMG' : true,\r
+ 'INPUT' : true,\r
+ 'ISINDEX' : true,\r
+ 'LINK' : true,\r
+ 'META' : true,\r
+ 'PARAM' : true,\r
+ 'EMBED' : true\r
},\r
\r
/*\r
*/ \r
X_Dom_DTD_TAG_FIX =\r
X_UA[ 'IE4' ] ?\r
- { ABBR : 'ACRONYM', BDO : '', RUBY : '' } :\r
+ { 'ABBR' : 'ACRONYM', 'BDO' : '', 'RUBY' : '' } :\r
X_UA[ 'IE5x' ] || X_UA[ 'IE6' ] ?\r
- { ABBR : 'ACRONYM' } :\r
+ { 'ABBR' : 'ACRONYM' } :\r
{},\r
\r
X_Dom_DTD_ATTR_VAL_IS_URI = {\r
- action : true,\r
- archive : true,\r
- background : true,\r
- cite : true,\r
- classid : true,\r
- codebase : true,\r
- data : true,\r
- href : true,\r
- longdesc : true,\r
- profile : true,\r
- src : true,\r
- usemap : true\r
+ 'action' : true,\r
+ 'archive' : true,\r
+ 'background' : true,\r
+ 'cite' : true,\r
+ 'classid' : true,\r
+ 'codebase' : true,\r
+ 'data' : true,\r
+ 'href' : true,\r
+ 'longdesc' : true,\r
+ 'profile' : true,\r
+ 'src' : true,\r
+ 'usemap' : true\r
},\r
\r
X_Dom_DTD_MOVE_TO_HEAD = {\r
- STYLE : true,\r
- LINK : true,\r
- TITLE : true,\r
- BGSOUND : true,\r
- AREA : true,\r
- BASE : true,\r
- META : true\r
+ 'STYLE' : true,\r
+ 'LINK' : true,\r
+ 'TITLE' : true,\r
+ 'BGSOUND' : true,\r
+ 'AREA' : true,\r
+ 'BASE' : true,\r
+ 'META' : true\r
},\r
\r
X_Dom_DTD_CLEANUP_TAGS = {\r
- SCRIPT : true,\r
- NOSCRIPT : true,\r
- NOFRAMES : true,\r
- '!' : true, // ie\r
- COMMENT : true, // ie\r
- NOEMBED : true,\r
- NOLAYER : true\r
+ 'SCRIPT' : true,\r
+ 'NOSCRIPT' : true,\r
+ 'NOFRAMES' : true,\r
+ '!' : true, // ie\r
+ 'COMMENT' : true, // ie\r
+ 'NOEMBED' : true,\r
+ 'NOLAYER' : true\r
},\r
\r
X_Dom_DTD_SKIP_CLEANUP_TAGS = {\r
- PRE : true,\r
- TEXTAREA : true,\r
- CODE : true,\r
- KBD : true,\r
- SAMP : true,\r
- XMP : true,\r
- PLAINTEXT : true,\r
- LISTING : true\r
+ 'PRE' : true,\r
+ 'TEXTAREA' : true,\r
+ 'CODE' : true,\r
+ 'KBD' : true,\r
+ 'SAMP' : true,\r
+ 'XMP' : true,\r
+ 'PLAINTEXT' : true,\r
+ 'LISTING' : true\r
};\r
-/*\r
-X.Dom.DTD = {\r
- \r
- EMPTY : X_Dom_DTD_EMPTY,\r
- \r
- TAG_FIX : X_Dom_DTD_TAG_FIX,\r
-\r
- ATTR_VAL_IS_URI : X_Dom_DTD_ATTR_VAL_IS_URI\r
-};\r
-*/\r
\r
var \r
- \r
+ /** @enum {number}\r
+ * @const */\r
X_Node_State = {\r
DESTROYED : 0x0,\r
EXIST : 0x1,\r
IE4_FIXED : X_UA[ 'IE4' ] ? 2 << 24 : 0,\r
\r
IE5_DISPLAY_NONE_FIX : X_UA[ 'IE5' ] && X_UA[ 'ActiveX' ] ? 2 << 24 : 0\r
- },\r
+ };\r
\r
- X_Node_BITMASK_RESET_STYLE = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ (\r
+var X_Node_BITMASK_RESET_STYLE = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ (\r
X_Node_State.STYLE_IS_DISPLAY_NONE |\r
X_Node_State.STYLE_IS_INVISIBLE |\r
X_Node_State.STYLE_IS_POS_ABSOLUTE |\r
\r
X_Node_BitMask_IE4_IS_MIX = X_Node_State.IE4_HAS_TEXTNODE | X_Node_State.IE4_HAS_ELEMENT,\r
\r
+ /** @enum {number} */\r
X_Node_TYPE = {\r
XNODE : 1,\r
RAW_HTML : 2,\r
* \r
* @alias X.Node\r
* @class Node HTMLElement、TextNode をラップし jQuery 風な API で操作できます。\r
- * @constructor \r
* @constructs Node\r
* @extends {EventDispatcher}\r
*/\r
-var Node = X.Node = X.EventDispatcher.inherits(\r
+var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ](\r
'X.Node',\r
X.Class.POOL_OBJECT, // X.Class.FINAL\r
+ \r
{\r
- _uid : 0,\r
- _flags : X_Node_State.DESTROYED,\r
+ /**\r
+ * 要素に振られるユニークID\r
+ * @type {number}\r
+ * @private\r
+ * @alias Node.prototype._uid\r
+ */\r
+ '_uid' : 0,\r
+ \r
+ /**\r
+ * Node の状態を表すフラグ。\r
+ * @type {number}\r
+ * @private\r
+ * @alias Node.prototype._flags\r
+ */\r
+ '_flags' : X_Node_State.DESTROYED,\r
\r
// _rawObject : null,\r
- _rect : null, // \r
- _fontSize : 0,\r
+ '_rect' : null, //\r
+ \r
+ /**\r
+ * 最後に計測したフォントサイズを保持している。ツリーが変更されると削除される。\r
+ * @type {number}\r
+ * @private\r
+ * @alias Node.prototype._fontSize\r
+ */\r
+ '_fontSize' : 0,\r
+ \r
+ /**\r
+ * NodeList と動作を一致させるためのプロパティ。常に 1。\r
+ * @type {number}\r
+ * @private\r
+ * @alias Node.prototype.length\r
+ */\r
+ length : 1,\r
+ \r
+ /**\r
+ * 親 Node。\r
+ * @type {Node}\r
+ * @private\r
+ * @alias Node.prototype.parent\r
+ */\r
+ parent : null, // remove された枝も親子構造は維持している。\r
+ \r
+ /**\r
+ * 子 Node リスト\r
+ * @type {Array}\r
+ * @private\r
+ * @alias Node.prototype._xnodes\r
+ */\r
+ '_xnodes' : null,\r
+ \r
+ /**\r
+ * GPU レイヤーに転送されている場合、その一番親となっている Node。未実装。\r
+ * @type {Node}\r
+ * @private\r
+ * @alias Node.prototype._gpuParent\r
+ */\r
+ '_gpuParent' : null,\r
+\r
+ /**\r
+ * タグ名。テキストノードの場合は空文字列。\r
+ * @type {string}\r
+ * @private\r
+ * @alias Node.prototype._tag\r
+ */\r
+ '_tag' : '',\r
\r
- length : 1,\r
- parent : null, // remove された枝も親子構造は維持している。\r
- _xnodes : null, // Array.<Node>\r
- _gpuParent : null, // TODO\r
-\r
- _tag : '',\r
- _text : '',\r
- _id : '', //\r
- _className : '', //\r
-\r
- _attrs : null, // see X_Node_Attr\r
- _newAttrs : null,\r
- _attrText : '',\r
+ /**\r
+ * テキストコンテンツ。テキストノードで使用。\r
+ * @type {string}\r
+ * @private\r
+ * @alias Node.prototype._text\r
+ */\r
+ '_text' : '',\r
\r
- _css : null, // see X_Node_CSS\r
- _cssText : '',\r
+ /**\r
+ * id\r
+ * @type {string}\r
+ * @private\r
+ * @alias Node.prototype._id\r
+ */\r
+ '_id' : '',\r
\r
- _anime : null, // Hash see X_Node_Anime\r
+ /**\r
+ * クラス名。複数のクラスが設定されている場合、スペース区切り。\r
+ * @type {string}\r
+ * @private\r
+ * @alias Node.prototype._className\r
+ */\r
+ '_className' : '', //\r
+\r
+ /**\r
+ * 属性。\r
+ * @type {object}\r
+ * @private\r
+ * @alias Node.prototype._attrs\r
+ */\r
+ '_attrs' : null, // see X_Node_Attr\r
+ \r
+ /**\r
+ * まだコミットされていない属性。\r
+ * @type {object}\r
+ * @private\r
+ * @alias Node.prototype._newAttrs\r
+ */\r
+ '_newAttrs' : null,\r
+ \r
+ /**\r
+ * 属性を文字列にしたもの。 color="red" size="8"\r
+ * @type {object}\r
+ * @private\r
+ * @alias Node.prototype._attrText\r
+ */\r
+ '_attrText' : '',\r
+ \r
+ /**\r
+ * スタイル。\r
+ * @type {object}\r
+ * @private\r
+ * @alias Node.prototype._css\r
+ */\r
+ '_css' : null,\r
+ \r
+ /**\r
+ * cssText\r
+ * @type {string}\r
+ * @private\r
+ * @alias Node.prototype._cssText\r
+ */\r
+ '_cssText' : '',\r
+ \r
+ /**\r
+ * アニメーション用オブジェクト。\r
+ * @type {object}\r
+ * @private\r
+ * @alias Node.prototype._anime\r
+ */\r
+ '_anime' : null,\r
\r
/*\r
* TODO Node の継承ができない!\r
*/\r
- Constructor : function( v ){\r
+ 'Constructor' : function( v ){\r
var uid = X_Node_CHASHE.length,\r
css, xnodes, xnode, parent;\r
\r
if( X_Node_newByTag ){\r
X_Node_newByTag = false;\r
- this._tag = v.toUpperCase();\r
+ this[ '_tag' ] = v.toUpperCase();\r
arguments[ 1 ] && this.attr( arguments[ 1 ] );\r
css = arguments[ 2 ];\r
css && this[ X_Type_isString( css ) ? 'cssText' : 'css' ]( css );\r
} else\r
if( X_Node_newByText ){\r
X_Node_newByText = false;\r
- this._text = v;\r
+ this[ '_text' ] = v;\r
} else {\r
if( 1 < arguments.length ) return new X_NodeList( arguments );\r
if( X_Type_isArray( v ) && v.length ) return new X_NodeList( v );\r
if( xnode = X_Node_getXNode( v ) ) return xnode;\r
// v.parentNode || v.parentElement : dom1 || dom0\r
this.parent = ( parent = v.parentNode || v.parentElement ) && parent.tagName /* ie7- */ && X_Node_getXNode( parent );\r
- this._rawObject = v;\r
- this._tag = v.tagName.toUpperCase();\r
- this._id = v.id;\r
- this._className = v.className;\r
+ this[ '_rawObject' ] = v;\r
+ this[ '_tag' ] = v.tagName.toUpperCase();\r
+ this[ '_id' ] = v.id;\r
+ this[ '_className' ] = v.className;\r
\r
- this.cssText( v.style.cssText );\r
- this._flags &= X_Node_BitMask_RESET_DIRTY; // X_Node_State.DIRTY_CSS を落とす\r
+ this[ 'cssText' ]( v.style.cssText );\r
+ this[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY; // X_Node_State.DIRTY_CSS を落とす\r
\r
// TODO attr の回収は不可能、、、?\r
if( X_UA_DOM.IE4 ){\r
v.setAttribute( 'UID', '' + uid );\r
} else {\r
- v.UID = uid;\r
+ v[ 'UID' ] = uid;\r
};\r
// childNodes...\r
break;\r
case X_Node_TYPE.RAW_TEXT :\r
if( xnode = X_Node_getXNode( v ) ) return xnode;\r
this.parent = X_Node_getXNode( v.parentNode );\r
- this._rawObject = v;\r
- this._text = v.data;\r
- v.UID = uid;\r
+ this[ '_rawObject' ] = v;\r
+ this[ '_text' ] = v.data;\r
+ v[ 'UID' ] = uid;\r
break;\r
\r
case X_Node_TYPE.HTML_STRING :\r
};\r
};\r
\r
- if( this.parent && ( this.parent._flags & X_Node_State.IN_TREE ) ){\r
- this._flags |= X_Node_State.IN_TREE;\r
+ if( this.parent && ( this.parent[ '_flags' ] & X_Node_State.IN_TREE ) ){\r
+ this[ '_flags' ] |= X_Node_State.IN_TREE;\r
};\r
- this._flags |= X_Node_State.EXIST;\r
- X_Node_CHASHE[ this._uid = uid ] = this;\r
+ this[ '_flags' ] |= X_Node_State.EXIST;\r
+ X_Node_CHASHE[ this[ '_uid' ] = uid ] = this;\r
},\r
\r
// attr\r
// find\r
// animate, stop\r
\r
- create : X_Node_create,\r
+ 'create' : X_Node_create,\r
\r
- createAt : X_Node_createAt,\r
+ 'createAt' : X_Node_createAt,\r
\r
- createText : X_Node_createText,\r
+ 'createText' : X_Node_createText,\r
\r
- createTextAt : X_Node_createTextAt,\r
+ 'createTextAt' : X_Node_createTextAt,\r
\r
- clone : X_Node_clone,\r
+ 'clone' : X_Node_clone,\r
\r
- append : X_Node_append,\r
+ 'append' : X_Node_append,\r
\r
- appendAt : X_Node_appendAt,\r
+ 'appendAt' : X_Node_appendAt,\r
\r
- appendTo : X_Node_appendTo,\r
+ 'appendTo' : X_Node_appendTo,\r
\r
- appendToRoot : X_Node_appendToRoot, // remove\r
+ 'prev' : X_Node_before,\r
\r
- before : X_Node_before, // remove\r
+ 'next' : X_Node_after,\r
\r
- prev : X_Node_before,\r
+ 'swap' : X_Node_swap,\r
\r
- after : X_Node_after, // remove\r
+ 'remove' : X_Node_remove,\r
\r
- next : X_Node_after,\r
- \r
- swap : X_Node_swap,\r
- \r
- remove : X_Node_remove,\r
- \r
- empty : X_Node_empty,\r
+ 'empty' : X_Node_empty,\r
\r
destroy : X_Node_destroy, // -> kill && kill event\r
\r
- contains : X_Node_contains,\r
+ 'contains' : X_Node_contains,\r
\r
- getChildAt : X_Node_getChildAt,\r
+ 'getChildAt' : X_Node_getChildAt,\r
\r
- numChildren : X_Node_length,\r
+ 'numChildren' : X_Node_length,\r
\r
- firstChild : X_Node_firstChild,\r
+ 'firstChild' : X_Node_firstChild,\r
\r
- lastChild : X_Node_lastChild,\r
+ 'lastChild' : X_Node_lastChild,\r
\r
- getOrder : X_Node_getOrder,\r
+ 'getOrder' : X_Node_getOrder,\r
\r
- className : X_Node_className,\r
- addClass : X_Node_addClass,\r
- removeClass : X_Node_removeClass,\r
- toggleClass : X_Node_toggleClass,\r
- hasClass : X_Node_hasClass,\r
+ 'className' : X_Node_className,\r
+ 'addClass' : X_Node_addClass,\r
+ 'removeClass' : X_Node_removeClass,\r
+ 'toggleClass' : X_Node_toggleClass,\r
+ 'hasClass' : X_Node_hasClass,\r
\r
- html : X_Node_html,\r
- text : X_Node_text,\r
- call : X_Node_call,\r
- each : X_Node_each\r
+ 'html' : X_Node_html,\r
+ 'text' : X_Node_text,\r
+ 'call' : X_Node_call,\r
+ 'each' : X_Node_each\r
\r
}\r
);\r
uid = v.getAttribute( 'UID' );\r
return uid && X_Node_CHASHE[ uid ];\r
};\r
- return v.UID && X_Node_CHASHE[ v.UID ];\r
+ return v[ 'UID' ] && X_Node_CHASHE[ v[ 'UID' ] ];\r
case X_Node_TYPE.WINDOW :\r
return X_ViewPort;\r
case X_Node_TYPE.DOCUMENT :\r
return X_ViewPort_document;\r
case X_Node_TYPE.RAW_TEXT :\r
- if( v.UID ) return X_Node_CHASHE[ v.UID ];\r
+ if( v[ 'UID' ] ) return X_Node_CHASHE[ v[ 'UID' ] ];\r
for( chashe = X_Node_CHASHE, i = chashe.length; i; ){\r
- if( ( xnode = X_Node_CHASHE[ --i ] ) && ( xnode._rawObject === v ) ) return xnode;\r
+ if( ( xnode = X_Node_CHASHE[ --i ] ) && ( xnode[ '_rawObject' ] === v ) ) return xnode;\r
};\r
};\r
};\r
\r
function X_Node_getRoot( xnode ){\r
return X_ViewPort_document;\r
- //return X_Node_body._rawObject.documentElement ? node : node.ownerDocument || node.document;\r
+ //return X_Node_body[ '_rawObject' ].documentElement ? node : node.ownerDocument || node.document;\r
};\r
// XMLかどうかを判別する\r
var X_Node_isXmlDocument =\r
X_UA_DOM.IE4 ?\r
- X.emptyFunction :\r
+ X_emptyFunction :\r
(function( root ){\r
if( X_Type_isBoolean( root.isXML ) ) return root.isXML;\r
- return root.isXML = root._rawObject.createElement( 'p' ).tagName !== root._rawObject.createElement( 'P' ).tagName;\r
+ return root.isXML = root[ '_rawObject' ].createElement( 'p' ).tagName !== root[ '_rawObject' ].createElement( 'P' ).tagName;\r
}),\r
X_Node_CHASHE = [],\r
X_Node_none = X_Node_CHASHE[ 0 ] = new Node(),\r
* remove :\r
* X_Node_reserveRemoval = [] に追加。commitUpdate で remove\r
* add :\r
- * X_Node_reserveRemoval にいたら消す, new_parent._xnodes に挿入\r
+ * X_Node_reserveRemoval にいたら消す, new_parent[ '_xnodes' ] に挿入\r
*/\r
X_Node_reserveRemoval = [];\r
\r
\r
var X_Node__ie4getRawNode = X_UA_DOM.IE4 && function ( that ){\r
- return that._rawObject ||\r
- ( that._rawObject = document.all[ 'ie4uid' + that._uid ] ) ||\r
- ( that._id && ( that._rawObject = document.all[ that._id ] ) );\r
+ return that[ '_rawObject' ] ||\r
+ ( that[ '_rawObject' ] = document.all[ 'ie4uid' + that[ '_uid' ] ] ) ||\r
+ ( that[ '_id' ] && ( that[ '_rawObject' ] = document.all[ that[ '_id' ] ] ) );\r
};\r
\r
\r
var i = xnodes.length, xnode;\r
for( ; i; ){\r
xnode = xnodes[ --i ];\r
- flag ? ( xnode._flags |= X_Node_State.IN_TREE | X_Node_State.DIRTY_POSITION ) : ( xnode._flags &= ~X_Node_State.IN_TREE & ~X_Node_State.IE5_DISPLAY_NONE_FIX );\r
- xnode._xnodes && X_Node_toggleInTreeFlag( xnode._xnodes, flag );\r
+ flag ? ( xnode[ '_flags' ] |= X_Node_State.IN_TREE | X_Node_State.DIRTY_POSITION ) : ( xnode[ '_flags' ] &= ~X_Node_State.IN_TREE & ~X_Node_State.IE5_DISPLAY_NONE_FIX );\r
+ xnode[ '_xnodes' ] && X_Node_toggleInTreeFlag( xnode[ '_xnodes' ], flag );\r
};\r
};\r
\r
if( flag ){\r
for( ; i; ){\r
xnode = xnodes[ --i ];\r
- if( !xnode._gpuParent ){\r
- xnode._flags |= X_Node_State.GPU_CHILD;\r
- xnode._gpuParent = gpuRoot;\r
- xnode._xnodes && X_Node_toggleInTreeFlag( gpuRoot, xnode._xnodes, flag ); \r
+ if( !xnode[ '_gpuParent' ] ){\r
+ xnode[ '_flags' ] |= X_Node_State.GPU_CHILD;\r
+ xnode[ '_gpuParent' ] = gpuRoot;\r
+ xnode[ '_xnodes' ] && X_Node_toggleInTreeFlag( gpuRoot, xnode[ '_xnodes' ], flag ); \r
};\r
};\r
} else {\r
for( ; i; ){\r
xnode = xnodes[ --i ];\r
- if( xnode._gpuParent === gpuRoot ){\r
- xnode._flags &= ~X_Node_State.GPU_CHILD;\r
- delete xnode._gpuParent;\r
- xnode._xnodes && X_Node_toggleInTreeFlag( gpuRoot, xnode._xnodes, flag );\r
+ if( xnode[ '_gpuParent' ] === gpuRoot ){\r
+ xnode[ '_flags' ] &= ~X_Node_State.GPU_CHILD;\r
+ delete xnode[ '_gpuParent' ];\r
+ xnode[ '_xnodes' ] && X_Node_toggleInTreeFlag( gpuRoot, xnode[ '_xnodes' ], flag );\r
};\r
};\r
};\r
};\r
\r
-/* --------------------------------------\r
- * Create\r
+/**\r
+ * タグ名等を指定して新規に子ノードを作成し、現在のノードに追加する。\r
+ * @alias Node.prototype.create\r
+ * @param {string} [tag] タグ名\r
+ * @param {object} [opt_attrs=] 属性\r
+ * @param {object|string} [opt_css=] css\r
+ * @return {Node} 新規作成されたノード\r
+ * @example var child = parent.create( 'div' );\r
*/\r
function X_Node_create( tag, opt_attrs, opt_css ){\r
var xnode;\r
- if( !this._tag ) return;\r
- this.append( xnode = X_Doc_create( tag, opt_attrs, opt_css ) );\r
+ if( !this[ '_tag' ] ) return;\r
+ this[ 'append' ]( xnode = X_Doc_create( tag, opt_attrs, opt_css ) );\r
return xnode;\r
};\r
+/**\r
+ * 挿入位置とタグ名等を指定して新規に子ノードを作成し、現在のノードに挿入する。\r
+ * @alias Node.prototype.createAt\r
+ * @param {number} [index] 挿入位置\r
+ * @param {string} [tag] タグ名\r
+ * @param {object} [opt_attrs=] 属性\r
+ * @param {object|string} [opt_css=] css\r
+ * @return {Node} 新規作成されたノード\r
+ * @example var child = parent.create( 2, 'div' );\r
+ */\r
function X_Node_createAt( index, tag, opt_attrs, opt_css ){\r
var xnode;\r
- if( !this._tag ) return;\r
- this.appendAt( index, xnode = X_Doc_create( tag, opt_attrs, opt_css ) );\r
+ if( !this[ '_tag' ] ) return;\r
+ this[ 'appendAt' ]( index, xnode = X_Doc_create( tag, opt_attrs, opt_css ) );\r
return xnode;\r
};\r
\r
-/* --------------------------------------\r
- * CreateText\r
+/**\r
+ * テキストを指定して新規にテキストノードを作成し、現在のノードに挿入する。\r
+ * @alias Node.prototype.createText\r
+ * @param {string} [tag] テキスト\r
+ * @return {Node} 新規作成されたノード\r
*/\r
function X_Node_createText( text ){\r
var xnode;\r
- if( !this._tag ) return;\r
- this.append( xnode = X_Doc_createText( text ) );\r
+ if( !this[ '_tag' ] ) return;\r
+ this[ 'append' ]( xnode = X_Doc_createText( text ) );\r
return xnode;\r
};\r
+/**\r
+ * 挿入位置とテキストを指定して新規に子ノードを作成し、現在のノードに挿入する。\r
+ * @alias Node.prototype.createTextAt\r
+ * @param {number} [index] 挿入位置\r
+ * @param {string} [tag] テキスト\r
+ * @return {Node} 新規作成されたノード\r
+ */\r
function X_Node_createTextAt( index, text ){\r
var xnode;\r
- if( !this._tag ) return;\r
- this.appendAt( index, xnode = X_Doc_createText( text ) );\r
+ if( !this[ '_tag' ] ) return;\r
+ this[ 'appendAt' ]( index, xnode = X_Doc_createText( text ) );\r
return xnode;\r
};\r
\r
-/* --------------------------------------\r
- * Clone\r
+/**\r
+ * Node のクローンを作成し返す。id もクローンされる点に注意。イベントリスナはクローンされない。\r
* http://d.hatena.ne.jp/think49/20110724/1311472811\r
* http://d.hatena.ne.jp/uupaa/20100508/1273299874\r
+ * @alias Node.prototype.clone\r
+ * @param {boolean} [opt_clone_children] 子要素のクローンを行うか?\r
+ * @return {Node}\r
*/\r
function X_Node_clone( opt_clone_children ){\r
var xnode, xnodes, i, l;\r
- if( this._tag ){\r
+ if( this[ '_tag' ] ){\r
X_Node_newByTag = true;\r
- xnode = new Node( this._tag, X_Object_clone( this._attrs ), X_Object_clone( this._css ) )\r
- .attr( { 'id' : this._id } )\r
- .className( this._className );\r
- if( opt_clone_children && ( xnodes = this._xnodes ) && ( l = xnodes.length ) ){\r
+ xnode = new Node( this[ '_tag' ], X_Object_clone( this[ '_attrs' ] ), X_Object_clone( this[ '_css' ] ) )\r
+ .attr( { 'id' : this[ '_id' ] } )\r
+ [ 'className' ]( this[ '_className' ] );\r
+ if( opt_clone_children && ( xnodes = this[ '_xnodes' ] ) && ( l = xnodes.length ) ){\r
for( i = 0; i < l; ++i ){\r
- xnode.append( xnodes[ i ].clone( true ) );\r
+ xnode[ 'append' ]( xnodes[ i ][ 'clone' ]( true ) );\r
};\r
};\r
return xnode; \r
};\r
X_Node_newByText = true;\r
- return new Node( this._text );\r
+ return new Node( this[ '_text' ] );\r
};\r
\r
-/* --------------------------------------\r
- * Add\r
- * Node\r
- * HtmlElement の場合は内部使用専用 そのため event の破棄等しない\r
+/**\r
+ * ノードを子配列の最後に追加する。文字列が渡された場合、HTMLパーサーによって Node ツリーを作成して追加する。HtmlElement, TextNode の場合は内部使用専用。\r
+ * @alias Node.prototype.clone\r
+ * @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。\r
+ * @return {Node} 自身。チェインメソッド\r
+ * @example myNode.append( node );\r
+ * myNode.append( nodeSprite, '<div>A</div>', 'B' );\r
*/\r
function X_Node_append( v ){\r
var i, l, xnodes, frg;\r
- if( !this._tag ) return;\r
+ if( !this[ '_tag' ] ) return;\r
\r
if( 1 < ( l = arguments.length ) ){\r
for( i = 0; i < l; ++i ){\r
- this.append( arguments[ i ] );\r
+ this[ 'append' ]( arguments[ i ] );\r
};\r
return this;\r
};\r
\r
- if( !( xnodes = this._xnodes ) ) this._xnodes = xnodes = [];\r
+ if( !( xnodes = this[ '_xnodes' ] ) ) this[ '_xnodes' ] = xnodes = [];\r
\r
switch( X_Node_getType( v ) ){\r
case X_Node_TYPE.RAW_HTML :\r
return this.append.apply( this, X_HtmlParser_parse( v, true ) );\r
case X_Node_TYPE.XNODE :\r
// 親の xnodes から v を消す\r
- v.parent && v.remove();\r
+ v.parent && v[ 'remove' ]();\r
// IE4 でテキストノードの追加、FIXED 済でない場合、親に要素の追加を通知\r
- if( X_UA[ 'IE4' ] && !v._tag && ( this._flags & X_Node_State.IE4_FIXED ) === 0 ) this._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
+ if( X_UA[ 'IE4' ] && !v[ '_tag' ] && ( this[ '_flags' ] & X_Node_State.IE4_FIXED ) === 0 ) this[ '_flags' ] |= X_Node_State.IE4_DIRTY_CHILDREN;\r
break;\r
default :\r
return this;\r
\r
v.parent = this;\r
xnodes[ xnodes.length ] = v;\r
- if( this._flags & X_Node_State.IN_TREE ){\r
- v._flags |= X_Node_State.IN_TREE;\r
- v._xnodes && X_Node_toggleInTreeFlag( v._xnodes, true );\r
+ if( this[ '_flags' ] & X_Node_State.IN_TREE ){\r
+ v[ '_flags' ] |= X_Node_State.IN_TREE;\r
+ v[ '_xnodes' ] && X_Node_toggleInTreeFlag( v[ '_xnodes' ], true );\r
X_Node_reserveUpdate();\r
};\r
return this;\r
};\r
\r
-\r
+/**\r
+ * ノードを挿入位置に追加する。\r
+ * @alias Node.prototype.clone\r
+ * @param {number} index 挿入位置 0以上\r
+ * @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。\r
+ * @return {Node} 自身。チェインメソッド\r
+ * @example myNode.appendAt( 1, node );\r
+ */\r
function X_Node_appendAt( start, v ){\r
var xnodes, l, i;\r
\r
- if( !this._tag ) return this;\r
+ if( !this[ '_tag' ] ) return this;\r
\r
l = arguments.length;\r
- if( !( xnodes = this._xnodes ) ) xnodes = this._xnodes = [];\r
+ if( !( xnodes = this[ '_xnodes' ] ) ) xnodes = this[ '_xnodes' ] = [];\r
\r
if( xnodes.length <= start ){\r
- if( l === 2 ) return this.append( v );\r
+ if( l === 2 ) return this[ 'append' ]( v );\r
for( i = 1; i < l; ++i ){\r
- this.append( arguments[ i ] );\r
+ 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
+ this[ 'appendAt' ]( start, arguments[ --l ] );\r
};\r
return this;\r
};\r
case X_Node_TYPE.STRING :\r
v = X_HtmlParser_parse( v, true );\r
for( i = v.length; i; ){\r
- this.appendAt( start, v[ --i ] );\r
+ this[ 'appendAt' ]( start, v[ --i ] );\r
};\r
return this;\r
case X_Node_TYPE.XNODE :\r
// 親の xnodes から v を消す\r
- v.parent && v.remove();\r
+ v.parent && v[ 'remove' ]();\r
// IE4 でテキストノードの追加、FIXED 済でない場合、親に要素の追加を通知\r
- if( X_UA[ 'IE4' ] && !v._tag && ( this._flags & X_Node_State.IE4_FIXED ) === 0 ) this._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
+ if( X_UA[ 'IE4' ] && !v[ '_tag' ] && ( this[ '_flags' ] & X_Node_State.IE4_FIXED ) === 0 ) this[ '_flags' ] |= X_Node_State.IE4_DIRTY_CHILDREN;\r
break;\r
default :\r
return this;\r
};\r
\r
v.parent = this;\r
- this._xnodes.splice( start, 0, v );\r
- if( this._flags & X_Node_State.IN_TREE ){\r
- v._flags |= X_Node_State.IN_TREE;\r
- v._xnodes && X_Node_toggleInTreeFlag( v._xnodes, true );\r
+ this[ '_xnodes' ].splice( start, 0, v );\r
+ if( this[ '_flags' ] & X_Node_State.IN_TREE ){\r
+ v[ '_flags' ] |= X_Node_State.IN_TREE;\r
+ v[ '_xnodes' ] && X_Node_toggleInTreeFlag( v[ '_xnodes' ], true );\r
X_Node_reserveUpdate();\r
};\r
return this;\r
default :\r
return this;\r
};\r
- opt_index === undefined ? parent.append( this ) : parent.appendAt( opt_index, this );\r
- return this;\r
-};\r
-\r
-function X_Node_appendToRoot( opt_index ){\r
- opt_index === undefined ? X_Node_body.append( this ) : X_Node_body.appendAt( opt_index, this );\r
+ opt_index === undefined ? parent[ 'append' ]( this ) : parent[ 'appendAt' ]( opt_index, this );\r
return this;\r
};\r
\r
// getter\r
if( v === undefined ){\r
if( !parent ) return;\r
- xnodes = parent._xnodes;\r
+ xnodes = parent[ '_xnodes' ];\r
i = xnodes.indexOf( this );\r
return 0 < i ? xnodes[ i - 1 ] : v;\r
};\r
if( !parent ) return this;\r
\r
l = arguments.length;\r
- start = this.getOrder();\r
+ start = this[ 'getOrder' ]();\r
if( 1 < l ){\r
for( ; l; ){\r
- parent.appendAt( start, arguments[ --l ] );\r
+ parent[ 'appendAt' ]( start, arguments[ --l ] );\r
};\r
return this;\r
};\r
- parent.appendAt( start, v );\r
+ parent[ 'appendAt' ]( start, v );\r
return this;\r
};\r
\r
// getter\r
if( v === undefined ){\r
if( !parent ) return;\r
- xnodes = parent._xnodes;\r
+ xnodes = parent[ '_xnodes' ];\r
i = xnodes.indexOf( this );\r
return ++i < xnodes.length ? xnodes[ i ] : v;\r
};\r
if( !parent ) return this;\r
\r
l = arguments.length;\r
- start = this.getOrder() + 1;\r
- if( parent._xnodes.length <= start ){\r
+ start = this[ 'getOrder' ]() + 1;\r
+ if( parent[ '_xnodes' ].length <= start ){\r
if( 1 < l ){\r
for( i = 0; i < l; ++i ){\r
- parent.append( arguments[ i ] );\r
+ parent[ 'append' ]( arguments[ i ] );\r
};\r
return this;\r
};\r
- parent.append( v );\r
+ parent[ 'append' ]( v );\r
return this;\r
};\r
if( 1 < l ){\r
for( ; l; ){\r
- parent.appendAt( start, arguments[ --l ] );\r
+ parent[ 'appendAt' ]( start, arguments[ --l ] );\r
};\r
return this;\r
};\r
- parent.appendAt( start, v );\r
+ parent[ 'appendAt' ]( start, v );\r
return this;\r
};\r
\r
function X_Node_swap( v ){\r
if( !this.parent ) return this;\r
- return arguments.length === 1 ? this.before( v ).remove() : this.before.apply( this, arguments ).remove();\r
+ return arguments.length === 1 ? this[ 'prev' ]( v )[ 'remove' ]() : X_Node_before.apply( this, arguments )[ 'remove' ]();\r
};\r
\r
/* --------------------------------------\r
if( !parent ) return this;\r
\r
delete this.parent;\r
- parent._xnodes.splice( parent._xnodes.indexOf( this ), 1 );\r
+ parent[ '_xnodes' ].splice( parent[ '_xnodes' ].indexOf( this ), 1 );\r
\r
- if( this._flags & X_Node_State.IN_TREE ){\r
- this._flags &= ~X_Node_State.IN_TREE & ~X_Node_State.IE5_DISPLAY_NONE_FIX;\r
- this._xnodes && X_Node_toggleInTreeFlag( this._xnodes, false );\r
+ if( this[ '_flags' ] & X_Node_State.IN_TREE ){\r
+ this[ '_flags' ] &= ~X_Node_State.IN_TREE & ~X_Node_State.IE5_DISPLAY_NONE_FIX;\r
+ this[ '_xnodes' ] && X_Node_toggleInTreeFlag( this[ '_xnodes' ], false );\r
\r
if( X_UA_DOM.IE4 ){\r
- elm = this._rawObject || X_Node__ie4getRawNode( this );\r
+ elm = this[ '_rawObject' ] || X_Node__ie4getRawNode( this );\r
if( elm ){\r
X_Node_reserveRemoval[ X_Node_reserveRemoval.length ] = this;\r
X_Node_reserveUpdate(); \r
} else\r
- if( !this._tag && ( parent._flags & X_Node_State.IE4_FIXED ) === 0 ){\r
- parent._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
+ if( !this[ '_tag' ] && ( parent[ '_flags' ] & X_Node_State.IE4_FIXED ) === 0 ){\r
+ parent[ '_flags' ] |= X_Node_State.IE4_DIRTY_CHILDREN;\r
};\r
} else {\r
- elm = this._rawObject;\r
+ elm = this[ '_rawObject' ];\r
if( elm && elm.parentNode && elm.parentNode.tagName ){\r
X_Node_reserveRemoval[ X_Node_reserveRemoval.length ] = this;\r
X_Node_reserveUpdate(); \r
};\r
\r
function X_Node_empty(){\r
- var xnodes = this._xnodes, i;\r
+ var xnodes = this[ '_xnodes' ], i;\r
if( xnodes && ( i = xnodes.length ) ){\r
for( ; i; ){\r
xnodes[ --i ].destroy();\r
*/\r
\r
function X_Node_destroy( isChild ){\r
- var xnodes = this._xnodes, i, elm;\r
+ var xnodes = this[ '_xnodes' ], i, elm;\r
\r
- if( ( this._flags & X_Node_State.EXIST ) === 0 ) return;\r
+ if( ( this[ '_flags' ] & X_Node_State.EXIST ) === 0 ) return;\r
\r
- elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
+ elm = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
\r
if( xnodes && ( i = xnodes.length ) ){\r
//for( ; i; ){\r
// xnodes[ --i ].destroy( true );\r
//};\r
};\r
- elm && this._listeners && this.unlisten(); // イベントの退避\r
+ elm && this._listeners && this[ 'unlisten' ](); // イベントの退避\r
\r
- if( this._flags & X_Node_State.IN_TREE ){\r
- !isChild && this.remove();\r
- this._flags &= ~X_Node_State.EXIST;\r
+ if( this[ '_flags' ] & X_Node_State.IN_TREE ){\r
+ !isChild && this[ 'remove' ]();\r
+ this[ '_flags' ] &= ~X_Node_State.EXIST;\r
} else {\r
- this.parent && this.parent._xnodes.splice( this.parent._xnodes.indexOf( this ), 1 );\r
+ this.parent && this.parent[ '_xnodes' ].splice( this.parent[ '_xnodes' ].indexOf( this ), 1 );\r
elm && !isChild && X_Node__actualRemove( this );\r
- this.kill();\r
+ this[ 'kill' ]();\r
};\r
\r
- delete X_Node_CHASHE[ this._uid ];\r
+ delete X_Node_CHASHE[ this[ '_uid' ] ];\r
};\r
\r
function X_Node_onBeforeKill( e ){\r
- var xnodes = this._xnodes, i, elm;\r
+ var xnodes = this[ '_xnodes' ], i, elm;\r
\r
- if( ( this._flags & X_Node_State.EXIST ) === 0 ) return X.Callback.NONE;\r
+ if( ( this[ '_flags' ] & X_Node_State.EXIST ) === 0 ) return X_Callback_NONE;\r
\r
- elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
- elm && this._listeners && this.unlisten(); // イベントの退避\r
+ elm = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
+ elm && this._listeners && this[ 'unlisten' ](); // イベントの退避\r
\r
if( xnodes && ( i = xnodes.length ) ){\r
for( ; i; ){\r
};\r
};\r
\r
- delete X_Node_CHASHE[ this._uid ];\r
+ delete X_Node_CHASHE[ this[ '_uid' ] ];\r
\r
if( e ){\r
- this.remove();\r
+ this[ 'remove' ]();\r
if( X_Node_reserveRemoval[ X_Node_reserveRemoval.length - 1 ] === this ){\r
- this._flags &= ~X_Node_State.EXIST;\r
- return X.Callback.PREVENT_DEFAULT; \r
+ this[ '_flags' ] &= ~X_Node_State.EXIST;\r
+ return X_Callback_PREVENT_DEFAULT; \r
}; \r
};\r
- return X.Callback.NONE;\r
+ return X_Callback_NONE;\r
};\r
\r
\r
*/\r
function X_Node_contains( v ){\r
var elm, type, xnodes, i;\r
- if( !v || !this._tag || this === v ) return false;\r
+ if( !v || !this[ '_tag' ] || this === v ) return false;\r
// contains ie4+\r
- if( ( elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this ) ) && document.contains && ( type = X_Node_getType( v ) ) && ( type === X_Node_TYPE.RAW_HTML || type === X_Node_TYPE.RAW_TEXT ) ){\r
- return elm.contains( v ); \r
+ if( ( elm = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this ) ) && document.contains && ( type = X_Node_getType( v ) ) && ( type === X_Node_TYPE.RAW_HTML || type === X_Node_TYPE.RAW_TEXT ) ){\r
+ return elm[ 'contains' ]( v ); \r
};\r
//if( document.compareDocumentPosition ){\r
// \r
//};\r
- xnodes = this._xnodes;\r
+ xnodes = this[ '_xnodes' ];\r
if( !xnodes || !xnodes.length ) return false;\r
if( xnodes.indexOf( v ) !== -1 ) return true; // fast\r
if( elm === v.parentNode ) return true;\r
for( i = xnodes.length; i; ){\r
- if( xnodes[ --i ].contains( v ) ) return true;\r
+ if( xnodes[ --i ][ 'contains' ]( v ) ) return true;\r
};\r
return false;\r
};\r
* getChild\r
*/\r
function X_Node_getChildAt( i ){\r
- var xnodes = this._xnodes;\r
+ var xnodes = this[ '_xnodes' ];\r
return xnodes && 0 <= i && i < xnodes.length && xnodes[ i ];\r
};\r
\r
function X_Node_length(){\r
- var xnodes = this._xnodes;\r
+ var xnodes = this[ '_xnodes' ];\r
return xnodes ? xnodes.length : 0;\r
};\r
\r
* firstChild, lastChild\r
*/\r
function X_Node_firstChild(){\r
- return this.getChildAt( 0 );\r
+ return this[ '_xnodes' ] && this[ '_xnodes' ][ 0 ];\r
};\r
function X_Node_lastChild(){\r
- return this.getChildAt( this._xnodes.length - 1 );\r
+ var xnodes = this[ '_xnodes' ];\r
+ return xnodes && xnodes[ xnodes.length - 1 ];\r
};\r
\r
/* --------------------------------------\r
function X_Node_getOrder(){\r
var parent = this.parent;\r
if( !parent ) return -1;\r
- return parent._xnodes.indexOf( this );\r
+ return parent[ '_xnodes' ].indexOf( this );\r
};\r
\r
/* --------------------------------------\r
function X_Node_className( v ){\r
var node, _, __;\r
// getter\r
- if( v === undefined ) return this._className;\r
+ if( v === undefined ) return this[ '_className' ];\r
\r
// setter\r
- if( this._className === v ) return this;\r
+ if( this[ '_className' ] === v ) return this;\r
if( !v || !X_Type_isString( v ) ){\r
- delete this._className;\r
+ delete this[ '_className' ];\r
} else {\r
// cleanup\r
_ = ' ';\r
v.charAt( 0 ) === _ && ( v = v.substr( 1 ) );\r
v.lastIndexOf( _ ) === 0 && ( v = v.substr( 0, v.length - 1 ) );\r
\r
- if( this._className === v ) return this;\r
- v ? ( this._className = v ) : delete this._className;\r
+ if( this[ '_className' ] === v ) return this;\r
+ v ? ( this[ '_className' ] = v ) : delete this[ '_className' ];\r
};\r
- this._flags |= X_Node_State.DIRTY_CLASSNAME;\r
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
+ this[ '_flags' ] |= X_Node_State.DIRTY_CLASSNAME;\r
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
return this;\r
};\r
function X_Node_addClass( v ){\r
for( ; i; ){\r
name = names[ --i ];\r
if( !name ) continue;\r
- !this.hasClass( name ) && ( v += ( v ? ' ' : '' ) + name );\r
+ !this[ 'hasClass' ]( name ) && ( v += ( v ? ' ' : '' ) + name );\r
};\r
- return v ? this.className( this._className + ( this._className ? ' ' : '' ) + v ) : this;\r
+ return v ? this[ 'className' ]( this[ '_className' ] + ( this[ '_className' ] ? ' ' : '' ) + v ) : this;\r
};\r
function X_Node_removeClass( v ){\r
var _ = ' ',\r
- className = this._className,\r
+ className = this[ '_className' ],\r
names = v.split( _ ),\r
classNames, i, f, j;\r
if( !className ) return this;\r
};\r
};\r
};\r
- return f ? this.className( classNames.join( _ ) ) : this;\r
+ return f ? this[ 'className' ]( classNames.join( _ ) ) : this;\r
};\r
function X_Node_toggleClass( v, opt_toggle ){\r
var names, i, name;\r
if( opt_toggle !== undefined ){\r
- return !!opt_toggle ? this.addClass( v ) : this.removeClass( v ); \r
+ return !!opt_toggle ? this[ 'addClass' ]( v ) : this[ 'removeClass' ]( v ); \r
};\r
names = v.split( ' ' );\r
for( i = names.length; i; ){\r
name = names[ --i ];\r
- this.hasClass( name ) ? this.removeClass( name ) : this.addClass( name );\r
+ this[ 'hasClass' ]( name ) ? this[ 'removeClass' ]( name ) : this[ 'addClass' ]( name );\r
};\r
return this;\r
};\r
function X_Node_hasClass( v ){\r
var _ = ' ',\r
- className = this._className,\r
+ className = this[ '_className' ],\r
i, name;\r
if( className === v ) return true;\r
if( !className ) return false;\r
var _ = '', q = '"', xnodes, n, i, l;\r
// setter\r
if( html !== undefined ){ // String 以外に Number や false null なども許可\r
- if( !this._tag ) return this.text( html );\r
- return html ? this.empty().append.apply( this, X_HtmlParser_parse( html, true ) ) : this.empty();\r
+ if( !this[ '_tag' ] ) return this[ 'text' ]( html );\r
+ return html ? this[ 'empty' ]().append.apply( this, X_HtmlParser_parse( html, true ) ) : this[ 'empty' ]();\r
};\r
\r
// getter\r
- if( !this._tag ){\r
- return this._text;\r
+ if( !this[ '_tag' ] ){\r
+ return this[ '_text' ];\r
};\r
\r
- this._flags & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( this );\r
+ this[ '_flags' ] & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( this );\r
\r
html = !X_Node_outerXNode ? [] : [\r
- '<', this._tag,\r
- this._id ? ' id="' + this._id + q : _,\r
- this._className ? ' class="' + this._className + q : _,\r
- this._flags & X_Node_State.OLD_ATTRTEXT ? X_Node_Attr_objToAttrText( this ) : this._attrText,\r
- this._cssText ? ' style="' + this._cssText + q : _,\r
+ '<', this[ '_tag' ],\r
+ this[ '_id' ] ? ' id="' + this[ '_id' ] + q : _,\r
+ this[ '_className' ] ? ' class="' + this[ '_className' ] + q : _,\r
+ this[ '_flags' ] & X_Node_State.OLD_ATTRTEXT ? X_Node_Attr_objToAttrText( this ) : this[ '_attrText' ],\r
+ this[ '_cssText' ] ? ' style="' + this[ '_cssText' ] + q : _,\r
'>' ];\r
\r
n = html.length;\r
- if( ( xnodes = this._xnodes ) && ( l = xnodes.length ) ){\r
+ if( ( xnodes = this[ '_xnodes' ] ) && ( l = xnodes.length ) ){\r
if( !X_Node_outerXNode ) X_Node_outerXNode = this;\r
for( i = 0; i < l; ++i ){\r
- html[ n ] = xnodes[ i ].html();\r
+ html[ n ] = xnodes[ i ][ 'html' ]();\r
++n;\r
};\r
if( X_Node_outerXNode === this ) X_Node_outerXNode = null;\r
};\r
- !X_Node_outerXNode || X_Dom_DTD_EMPTY[ this._tag ] || ( html[ n ] = '<\/' + this._tag + '>' );\r
+ !X_Node_outerXNode || X_Dom_DTD_EMPTY[ this[ '_tag' ] ] || ( html[ n ] = '<\/' + this[ '_tag' ] + '>' );\r
return html.join( _ );\r
};\r
\r
if( text === null ) text = '';\r
text += '';\r
\r
- if( !this._tag ){\r
- if( this._text !== text ){\r
- text ? ( this._text = text ) : delete this._text;\r
- this._flags |= X_Node_State.DIRTY_CONTENT; \r
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
+ if( !this[ '_tag' ] ){\r
+ if( this[ '_text' ] !== text ){\r
+ text ? ( this[ '_text' ] = text ) : delete this[ '_text' ];\r
+ this[ '_flags' ] |= X_Node_State.DIRTY_CONTENT; \r
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
};\r
return this;\r
};\r
- if( ( xnodes = this._xnodes ) && xnodes.length === 1 && !xnodes[ 0 ]._tag ){\r
- xnodes[ 0 ].text( text );\r
+ if( ( xnodes = this[ '_xnodes' ] ) && xnodes.length === 1 && !xnodes[ 0 ][ '_tag' ] ){\r
+ xnodes[ 0 ][ 'text' ]( text );\r
return this;\r
};\r
// TODO 一つのtextnode を残すケース 完全に削除したい場合は empty()を使う\r
- if( !text ) return this.empty(); \r
- this.empty().createText( text );\r
+ if( !text ) return this[ 'empty' ](); \r
+ this[ 'empty' ]()[ 'createText' ]( text );\r
return this;\r
};\r
// getter\r
- if( this._tag ){\r
- if( ( xnodes = this._xnodes ) && ( l = xnodes.length ) ){\r
+ if( this[ '_tag' ] ){\r
+ if( ( xnodes = this[ '_xnodes' ] ) && ( l = xnodes.length ) ){\r
for( texts = [], i = 0; i < l; ++i ){\r
- texts[ i ] = xnodes[ i ].text();\r
+ texts[ i ] = xnodes[ i ][ 'text' ]();\r
};\r
return texts.join( '' );\r
};\r
return '';\r
};\r
- return this._text;\r
+ return this[ '_text' ];\r
};\r
\r
/*\r
\r
switch( name ){\r
case 'nodeType' :\r
- return this._tag ? 1 : 3;\r
+ return this[ '_tag' ] ? 1 : 3;\r
case 'text' :\r
- return this.text();\r
+ return this[ 'text' ]();\r
case 'html' :\r
case 'innerHTML' :\r
- return this.html();\r
+ return this[ 'html' ]();\r
case 'outerHTML' :\r
X_Node_outerXNode = X_Node_body; // == true ならなんでもよい。型を合わすために xbody にしている\r
- v = this.html();\r
+ v = this[ 'html' ]();\r
X_Node_outerXNode = null;\r
return v;\r
case 'fontSize' :\r
return X_Node_CSS_getCharSize( this );\r
case 'inGPU' :\r
- return !!( this._flags & ( X_Node_State.GPU_NOW | X_Node_State.GPU_RELEASE_RESERVED ) );\r
+ return !!( this[ '_flags' ] & ( X_Node_State.GPU_NOW | X_Node_State.GPU_RELEASE_RESERVED ) );\r
};\r
\r
- raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
+ raw = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
if( !raw ) return;\r
\r
if( name === 'scrollTo' ){\r
*/\r
\r
function X_Node_reserveUpdate(){\r
- if( !X_Node_updateTimerID ) X_Node_updateTimerID = X.Timer.requestFrame( X_Node_startUpdate );\r
+ if( !X_Node_updateTimerID ) X_Node_updateTimerID = X_Timer_requestFrame( X_Node_startUpdate );\r
};\r
\r
var X_Node_updateReservedByReleaseGPU = false;\r
function X_Node_startUpdate( time ){\r
var removal, i, xnode;\r
\r
- if( !X_Node_updateTimerID || X_ViewPort_readyState < X_TEMP.SYSTEM_EVENT_INIT ){\r
+ if( !X_Node_updateTimerID || X_ViewPort_readyState < X_EVENT_INIT ){\r
return;\r
};\r
\r
- X.Timer.cancelFrame( X_Node_updateTimerID );\r
+ X_Timer_cancelFrame( X_Node_updateTimerID );\r
X_Node_updateTimerID = 0;\r
\r
if( time ){\r
// X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
- X_System._listeners && X_System._listeners[ X_Event.BEFORE_UPDATE ] && X_System.dispatch( X_Event.BEFORE_UPDATE );\r
+ X_System._listeners && X_System._listeners[ X_EVENT_BEFORE_UPDATE ] && X_System[ 'dispatch' ]( X_EVENT_BEFORE_UPDATE );\r
};\r
\r
removal = X_Node_reserveRemoval;\r
xnode = removal[ --i ];\r
// TODO GPU レイヤーの子の場合、remove をスキップする。 非GPU レイヤーへ apppend される場合、clone する?\r
X_Node__actualRemove( xnode );\r
- ( xnode._flags & X_Node_State.EXIST ) === 0 && xnode.kill();\r
+ ( xnode[ '_flags' ] & X_Node_State.EXIST ) === 0 && xnode[ 'kill' ]();\r
};\r
removal.length = 0;\r
};\r
\r
- if( X_Node_html._flags & X_Node_BitMask_IS_DIRTY ){\r
- X_Node__commitUpdate( X_Node_html, X_Node_html._rawObject.parentNode, null, X_Node_html._flags );\r
+ if( X_Node_html[ '_flags' ] & X_Node_BitMask_IS_DIRTY ){\r
+ X_Node__commitUpdate( X_Node_html, X_Node_html[ '_rawObject' ].parentNode, null, X_Node_html[ '_flags' ] );\r
} else {\r
- X_Node__commitUpdate( X_Node_head, X_Node_head._rawObject.parentNode, null, X_Node_head._flags );\r
- X_Node__commitUpdate( X_Node_body, X_Node_body._rawObject.parentNode, null, X_Node_body._flags );\r
+ X_Node__commitUpdate( X_Node_head, X_Node_head[ '_rawObject' ].parentNode, null, X_Node_head[ '_flags' ] );\r
+ X_Node__commitUpdate( X_Node_body, X_Node_body[ '_rawObject' ].parentNode, null, X_Node_body[ '_flags' ] );\r
};\r
\r
if( X_Node_updateReservedByReleaseGPU ){\r
\r
if( time ){\r
// X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
- X_System._listeners && X_System._listeners[ X_Event.UPDATED ] && X_System.dispatch( X_Event.UPDATED ); \r
+ X_System._listeners && X_System._listeners[ X_EVENT_UPDATED ] && X_System[ 'dispatch' ]( X_EVENT_UPDATED ); \r
};\r
\r
- X_ViewPort._listeners && X_ViewPort._listeners[ X_Event.AFTER_UPDATE ] && X_ViewPort.asyncDispatch( X_Event.AFTER_UPDATE );\r
+ X_ViewPort._listeners && X_ViewPort._listeners[ X_EVENT_AFTER_UPDATE ] && X_ViewPort[ 'asyncDispatch' ]( X_EVENT_AFTER_UPDATE );\r
};\r
\r
/*\r
var X_Node__commitUpdate =\r
X_UA_DOM.W3C ?\r
( function( that, parentElement, nextElement, accumulatedFlags ){\r
- var elm = that._rawObject,\r
+ var elm = that[ '_rawObject' ],\r
created, xnodes, l, next;\r
\r
// 1. GPU 一切の更新をスキップ\r
- if( that._flags & X_Node_State.GPU_NOW ){\r
- console.log( '更新のskip ' + !!( that._flags & X_Node_BitMask_IS_DIRTY ) );\r
- that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
+ if( that[ '_flags' ] & X_Node_State.GPU_NOW ){\r
+ console.log( '更新のskip ' + !!( that[ '_flags' ] & X_Node_BitMask_IS_DIRTY ) );\r
+ that[ '_flags' ] & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
return elm;\r
};\r
\r
// 2. GPU解放予約\r
// TODO もしかしたらこのタイミングで更新できるかも。\r
- if( that._flags & X_Node_State.GPU_RELEASE_RESERVED ){\r
+ if( that[ '_flags' ] & X_Node_State.GPU_RELEASE_RESERVED ){\r
console.log( 'GPU 解放 ' );\r
//X_Node_updateReservedByReleaseGPU = true;\r
//X_Node__updateRawNode( that, elm );\r
- that._flags &= X_Node_BitMask_RESET_GPU;\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_GPU;\r
//return elm;\r
};\r
\r
// 3. GPU予約 -> GPU\r
- if( that._flags & X_Node_State.GPU_RESERVED ){\r
- that._flags &= X_Node_BitMask_RESET_GPU;\r
- that._flags |= X_Node_State.GPU_NOW;\r
+ if( that[ '_flags' ] & X_Node_State.GPU_RESERVED ){\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_GPU;\r
+ that[ '_flags' ] |= X_Node_State.GPU_NOW;\r
};\r
\r
// 4. style="display:none" の場合\r
- if( that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+ if( that[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
if( X_Node_displayNoneFixForIE5 ){\r
// filter の効いている要素を含む要素は display:none が無視される。\r
// filter = '' で削除はできるが、再表示時に filter が消える。 -> filter な要素を削除してしまう。 \r
};\r
\r
// 5. ie5 非表示fixフラグ\r
- accumulatedFlags |= that._flags;\r
+ accumulatedFlags |= that[ '_flags' ];\r
\r
- if( that._flags & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
+ if( that[ '_flags' ] & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
if( accumulatedFlags & ( X_Node_State.DIRTY_POSITION | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME ) === 0 ){\r
return nextElement;\r
};\r
\r
// 6. 要素の生成\r
if( !elm ){\r
- if( !that._tag ){\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
- that._rawObject = elm = document.createTextNode( X_String_chrReferanceTo( that._text ) );\r
+ if( !that[ '_tag' ] ){\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
+ that[ '_rawObject' ] = elm = document.createTextNode( X_String_chrReferanceTo( that[ '_text' ] ) );\r
if( !X_UA[ 'IE' ] ){\r
- elm.UID = that._uid;\r
+ elm[ 'UID' ] = that[ '_uid' ];\r
};\r
} else\r
if( X_Node_strictElmCreation ){\r
- that._flags & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( that, true ); // OLD_CSSTEXT ??\r
+ that[ '_flags' ] & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( that, true ); // OLD_CSSTEXT ??\r
\r
- that._rawObject = elm =\r
+ that[ '_rawObject' ] = elm =\r
document.createElement( [\r
- '<', that._tag,\r
- ' UID="', that._uid, '"',\r
- that._id ? ' id="' + that._id + '"' : '',\r
- that._className ? ' class="' + that._className + '"' : '',\r
+ '<', that[ '_tag' ],\r
+ ' UID="', that[ '_uid' ], '"',\r
+ that[ '_id' ] ? ' id="' + that[ '_id' ] + '"' : '',\r
+ that[ '_className' ] ? ' class="' + that[ '_className' ] + '"' : '',\r
X_Node_Attr_objToAttrText( that, true ),\r
- that._cssText ? ' style="' + that._cssText + '"' : '',\r
+ that[ '_cssText' ] ? ' style="' + that[ '_cssText' ] + '"' : '',\r
'>' ].join( '' ) );\r
} else {\r
- that._rawObject = elm = document.createElement( that._tag );\r
+ that[ '_rawObject' ] = elm = document.createElement( that[ '_tag' ] );\r
};\r
\r
// IE には要素追加のタイミングで起こるメモリリークがありここで追加\r
parentElement.appendChild( elm );\r
};\r
\r
- if( that._tag ){\r
+ if( that[ '_tag' ] ){\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰 \r
- that._flags |= X_Node_State.ACTUAL_LISTENING;\r
+ that[ '_flags' ] |= X_Node_State.ACTUAL_LISTENING;\r
\r
if( X_Node_documentFragment ){\r
//( frg = X_Node_documentFragment ).appendChild( elm );\r
};\r
\r
if( X_Node_strictElmCreation ){\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
// ie の string から要素を作る場合、ネットワーク系属性は onload イベントなどを拾うために、要素生成->イベント復帰後に適用する\r
- that._newAttrs && ( that._flags |= X_Node_State.DIRTY_ATTR ); // _newAttrs には ネットワーク系属性が入っている。Network 系の属性は遅らせて設定\r
- that._flags |= X_Node_State.DIRTY_IE_FILTER;// doc 追加後に filter を指定しないと有効にならない。\r
+ that[ '_newAttrs' ] && ( that[ '_flags' ] |= X_Node_State.DIRTY_ATTR ); // _newAttrs には ネットワーク系属性が入っている。Network 系の属性は遅らせて設定\r
+ that[ '_flags' ] |= X_Node_State.DIRTY_IE_FILTER;// doc 追加後に filter を指定しないと有効にならない。\r
} else {\r
- elm.UID = that._uid;\r
- that._newAttrs = that._attrs;\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
- that._flags |= X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME | X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;\r
+ elm[ 'UID' ] = that[ '_uid' ];\r
+ that[ '_newAttrs' ] = that[ '_attrs' ];\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
+ that[ '_flags' ] |= X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME | X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;\r
\r
// http://outcloud.blogspot.jp/2010/09/iframe.html\r
// この問題は firefox3.6 で確認\r
if( X_UA[ 'Gecko' ] ){\r
- if( that._tag === 'IFRAME' && ( !that._attrs || !that._attrs[ 'src' ] ) ){\r
+ if( that[ '_tag' ] === 'IFRAME' && ( !that[ '_attrs' ] || !that[ '_attrs' ][ 'src' ] ) ){\r
//elm.contentWindow.location.replace = elm.src = 'about:blank';\r
that.attr( 'src', 'about:blank' );\r
};\r
parentElement.appendChild( elm );\r
};\r
\r
- if( that._listeners && ( that._flags & X_Node_State.ACTUAL_LISTENING ) === 0 ){\r
+ if( that._listeners && ( that[ '_flags' ] & X_Node_State.ACTUAL_LISTENING ) === 0 ){\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの退避\r
- that._flags |= X_Node_State.ACTUAL_LISTENING;\r
+ that[ '_flags' ] |= X_Node_State.ACTUAL_LISTENING;\r
};\r
\r
// 8. 更新の適用\r
if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ){\r
- delete that._fontSize;\r
+ delete that[ '_fontSize' ];\r
X_Node__updateRawNode( that, elm );\r
};\r
\r
// 親及び自身へのクラス・id指定で display : none になるケースがありそれを検出\r
// 生成と破棄が繰り返されてしまう、親と自身の id, class が変わった場合だけ再生成。 accumulatedFlags & ( ID | CLASSNAME )\r
// currentStyle を観ていたときはエラーで停止する、alert と挟むと正常に動いて支離滅裂\r
- if( X_Node_displayNoneFixForIE5 && that._tag ){\r
+ if( X_Node_displayNoneFixForIE5 && that[ '_tag' ] ){\r
if( elm.runtimeStyle.display === 'none' ){\r
X_Node__actualRemove( that );\r
- that._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
+ that[ '_flags' ] |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
return nextElement; \r
} else {\r
- that._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;\r
+ that[ '_flags' ] &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;\r
};\r
};\r
\r
// 10. 子要素の更新。\r
- if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ) {\r
+ if( ( xnodes = that[ '_xnodes' ] ) && ( l = xnodes.length ) ) {\r
for( ; l; ){\r
next = X_Node__commitUpdate( xnodes[ --l ], elm, next, accumulatedFlags );\r
};\r
parentElement.insertBefore( elm, nextElement ) :\r
parentElement.appendChild( elm );\r
\r
- if( X_UA[ 'Gecko' ] && that._tag === 'IFRAME' && elm.contentWindow ){\r
+ if( X_UA[ 'Gecko' ] && that[ '_tag' ] === 'IFRAME' && elm.contentWindow ){\r
// tree に追加されるまで contentWindow は存在しない。\r
elm.contentWindow.location.replace = elm.src;\r
};\r
}) :\r
X_UA_DOM.IE4 ? \r
( function( that, parentElement, prevElement, accumulatedFlags ){\r
- var elm = that._rawObject || X_Node__ie4getRawNode( that ),\r
+ var elm = that[ '_rawObject' ] || X_Node__ie4getRawNode( that ),\r
xnodes, l, i, dirty, mix, html, text, prev;\r
\r
- if( !that._tag ){\r
- that._flags & X_Node_State.DIRTY_CONTENT && X_Node__updateRawNode( that, elm );\r
+ if( !that[ '_tag' ] ){\r
+ that[ '_flags' ] & X_Node_State.DIRTY_CONTENT && X_Node__updateRawNode( that, elm );\r
return elm;\r
};\r
\r
// 4. style="display:none" の場合\r
- if( that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+ if( that[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
if( elm ){\r
elm.style.display = 'none';\r
if( elm.style.display !== 'none' ){ // ie4 の style は currentStyle 相当らしい、、、? div 以外への display:none が効かないので remove する。\r
prevElement.insertAdjacentHTML( 'AfterEnd', X_Node__actualCreate( that, false ) ) :\r
parentElement.insertAdjacentHTML( 'AfterBegin', X_Node__actualCreate( that, false ) );\r
X_Node__afterActualCreate( that );\r
- return that._rawObject || X_Node__ie4getRawNode( that );\r
+ return that[ '_rawObject' ] || X_Node__ie4getRawNode( that );\r
};\r
\r
- accumulatedFlags |= that._flags;\r
+ accumulatedFlags |= that[ '_flags' ];\r
\r
- xnodes = that._xnodes;\r
+ xnodes = that[ '_xnodes' ];\r
l = xnodes ? xnodes.length : 0;\r
- dirty = !!( that._flags & X_Node_State.IE4_DIRTY_CHILDREN );\r
+ dirty = !!( that[ '_flags' ] & X_Node_State.IE4_DIRTY_CHILDREN );\r
\r
/*\r
* HTML の下に TextNode だけ 。MIX_FIXED でない場合、削除、追加 を親に通知\r
* HTML の下は MIX_FIXED -> TextNode を <font> に置き換えてあるのでW3C DON 的に触ることができる\r
*/\r
if( dirty ){\r
- that._flags &= ~X_Node_State.IE4_DIRTY_CHILDREN;\r
+ that[ '_flags' ] &= ~X_Node_State.IE4_DIRTY_CHILDREN;\r
for( i = 0; i < l; ++i ){\r
- if( xnodes[ i ]._tag ){\r
- that._flags |= X_Node_State.IE4_HAS_ELEMENT;\r
+ if( xnodes[ i ][ '_tag' ] ){\r
+ that[ '_flags' ] |= X_Node_State.IE4_HAS_ELEMENT;\r
} else {\r
- that._flags |= X_Node_State.IE4_HAS_TEXTNODE;\r
+ that[ '_flags' ] |= X_Node_State.IE4_HAS_TEXTNODE;\r
};\r
- if( that._flags & X_Node_BitMask_IE4_IS_MIX === X_Node_BitMask_IE4_IS_MIX ){\r
+ if( that[ '_flags' ] & X_Node_BitMask_IE4_IS_MIX === X_Node_BitMask_IE4_IS_MIX ){\r
mix = true;\r
break;\r
};\r
};\r
};\r
\r
- if( that._flags & X_Node_State.IE4_FIXED || that._flags & X_Node_BitMask_IE4_IS_MIX === X_Node_State.IE4_HAS_ELEMENT ){\r
+ if( that[ '_flags' ] & X_Node_State.IE4_FIXED || that[ '_flags' ] & X_Node_BitMask_IE4_IS_MIX === X_Node_State.IE4_HAS_ELEMENT ){\r
for( i = 0; i < l; ++i ){\r
prev = X_Node__commitUpdate( xnodes[ i ], elm, prev, accumulatedFlags );\r
};\r
for( i = 0; i < l; ++i ){\r
X_Node__afterActualCreate( xnodes[ i ] );\r
};\r
- that._flags |= X_Node_State.IE4_FIXED;\r
+ that[ '_flags' ] |= X_Node_State.IE4_FIXED;\r
} else\r
- if( that._flags & X_Node_State.IE4_HAS_TEXTNODE ){\r
+ if( that[ '_flags' ] & X_Node_State.IE4_HAS_TEXTNODE ){\r
dirty = dirty || false;\r
for( i = 0; i < l; ++i ){\r
text = xnodes[ i ];\r
- if( text._flags & X_Node_BitMask_IS_DIRTY ){\r
- text._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ if( text[ '_flags' ] & X_Node_BitMask_IS_DIRTY ){\r
+ text[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
dirty = true;\r
};\r
};\r
- if( dirty ) elm.innerHTML = that.text();\r
+ if( dirty ) elm.innerHTML = that[ 'text' ]();\r
};\r
\r
- if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ) delete that._fontSize;\r
+ if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ) delete that[ '_fontSize' ];\r
\r
- that._flags &= ~X_Node_State.DIRTY_POSITION;\r
- that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
+ that[ '_flags' ] &= ~X_Node_State.DIRTY_POSITION;\r
+ that[ '_flags' ] & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
return elm;\r
}) :\r
(function(){});\r
var attrs, rename, k, v;\r
\r
// textNode\r
- if( !that._tag ){\r
- elm.data = X_String_chrReferanceTo( that._text );\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ if( !that[ '_tag' ] ){\r
+ elm.data = X_String_chrReferanceTo( that[ '_text' ] );\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
return;\r
};\r
// id\r
- if( that._flags & X_Node_State.DIRTY_ID ){\r
- that._id ? ( elm.id = that._id ) : ( elm.id && elm.removeAttribute( 'id' ) ); \r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_ID ){\r
+ that[ '_id' ] ? ( elm.id = that[ '_id' ] ) : ( elm.id && elm.removeAttribute( 'id' ) ); \r
};\r
// className\r
- if( that._flags & X_Node_State.DIRTY_CLASSNAME ){\r
- that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA[ 'IE' ] < 8 ? 'className' : 'class' ) ); // className は ie7- \r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_CLASSNAME ){\r
+ that[ '_className' ] ? ( elm.className = that[ '_className' ] ) : ( elm.className && elm.removeAttribute( X_UA[ 'IE' ] < 8 ? 'className' : 'class' ) ); // className は ie7- \r
};\r
\r
// attr\r
- if( that._flags & X_Node_State.DIRTY_ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_ATTR && ( attrs = that[ '_newAttrs' ] || that[ '_attrs' ] ) ){\r
rename = X_Node_Attr_renameForDOM;\r
\r
for( k in attrs ){\r
v = attrs[ k ];\r
\r
- switch( that._tag + k ){\r
+ switch( that[ '_tag' ] + k ){\r
case 'TEXTAREAvalue' :\r
// IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
if( !X_UA[ 'MacIE' ] && X_UA[ 'IE5x' ] ){\r
elm.removeAttribute( rename[ k ] || k ) :\r
( elm[ rename[ k ] || k ] = X_Node_Attr_noValue[ k ] ? k : v );\r
};\r
- delete that._newAttrs;\r
+ delete that[ '_newAttrs' ];\r
};\r
\r
// style\r
- if( that._flags & X_Node_State.DIRTY_CSS ){\r
- if( that._flags & X_Node_State.OLD_CSSTEXT ? X_Node_CSS_objToCssText( that ) : that._cssText ){\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_CSS ){\r
+ if( that[ '_flags' ] & X_Node_State.OLD_CSSTEXT ? X_Node_CSS_objToCssText( that ) : that[ '_cssText' ] ){\r
X_UA[ 'Opera78' ] || X_UA[ 'NN6' ] ?\r
- elm.setAttribute( 'style', that._cssText ) : // opera8用\r
- ( elm.style.cssText = that._cssText );\r
+ elm.setAttribute( 'style', that[ '_cssText' ] ) : // opera8用\r
+ ( elm.style.cssText = that[ '_cssText' ] );\r
} else {\r
elm.style.cssText = ''; // IE5.5以下 Safari3.2 で必要\r
elm.removeAttribute( 'style' );\r
};\r
} else\r
- if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_IE_FILTER ){\r
v = X_Node_CSS_objToIEFilterText( that );\r
if( v ){\r
elm.style.filter = v;\r
- that._flags |= X_Node_State.IE_FILTER_NOW;\r
+ that[ '_flags' ] |= X_Node_State.IE_FILTER_NOW;\r
} else {\r
elm.style.removeAttribute( 'filter' );\r
- that._flags &= ~X_Node_State.IE_FILTER_NOW;\r
+ that[ '_flags' ] &= ~X_Node_State.IE_FILTER_NOW;\r
};\r
};\r
\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
}) :\r
X_UA_DOM.IE4 ? \r
( function( that, elm ){\r
var attrs, rename, k, v;\r
\r
// fake textNode\r
- if( !that._tag ){\r
- elm.innerText = that._text;\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ if( !that[ '_tag' ] ){\r
+ elm.innerText = that[ '_text' ];\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
return;\r
};\r
\r
* title、className、id、lang、language には setAttribute でなく、element.id で直接読み書きできる\r
*/ \r
// id\r
- if( that._flags & X_Node_State.DIRTY_ID ) elm.setAttribute( 'id', that._id || ( 'ie4uid' + that._uid ) );\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_ID ) elm.setAttribute( 'id', that[ '_id' ] || ( 'ie4uid' + that[ '_uid' ] ) );\r
\r
// className\r
- if( that._flags & X_Node_State.DIRTY_CLASSNAME ){\r
- that._className ? ( elm.className = that._className ) : elm.removeAttribute( 'class' );\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_CLASSNAME ){\r
+ that[ '_className' ] ? ( elm.className = that[ '_className' ] ) : elm.removeAttribute( 'class' );\r
};\r
// style\r
- if( that._flags & X_Node_State.DIRTY_CSS ){\r
- if( that._flags & X_Node_State.OLD_CSSTEXT ? X_Node_CSS_objToCssText( that ) : that._cssText ){\r
- elm.style.cssText = that._cssText;\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_CSS ){\r
+ if( that[ '_flags' ] & X_Node_State.OLD_CSSTEXT ? X_Node_CSS_objToCssText( that ) : that[ '_cssText' ] ){\r
+ elm.style.cssText = that[ '_cssText' ];\r
} else {\r
elm.style.cssText = '';\r
elm.removeAttribute( 'style' );\r
};\r
} else\r
- if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_IE_FILTER ){\r
v = X_Node_CSS_objToIEFilterText( that );\r
if( v ){\r
elm.style.filter = v;\r
- that._flags |= X_Node_State.IE_FILTER_NOW;\r
+ that[ '_flags' ] |= X_Node_State.IE_FILTER_NOW;\r
} else {\r
elm.style.removeAttribute( 'filter' );\r
- that._flags &= ~X_Node_State.IE_FILTER_NOW;\r
+ that[ '_flags' ] &= ~X_Node_State.IE_FILTER_NOW;\r
};\r
};\r
\r
// attr\r
- if( that._flags & X_Node_State.DIRTY_ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
+ if( that[ '_flags' ] & X_Node_State.DIRTY_ATTR && ( attrs = that[ '_newAttrs' ] || that[ '_attrs' ] ) ){\r
rename = X_Node_Attr_renameForDOM;\r
for( k in attrs ){\r
//if( X_EMPTY_OBJECT[ k ] ) continue;\r
elm.removeAttribute( rename[ k ] || k ) :\r
elm.setAttribute( rename[ k ] || k, X_Node_Attr_noValue[ k ] ? k : v );\r
};\r
- delete that._newAttrs;\r
+ delete that[ '_newAttrs' ];\r
};\r
\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
}) :\r
(function(){});\r
\r
*/\r
var X_Node__actualCreate =\r
X_UA_DOM.IE4 && (function( that, isChild ){\r
- var uid = that._uid,\r
+ var uid = that[ '_uid' ],\r
html, xnodes, n, i, l;\r
\r
- if( !that._tag ){\r
- html = [ '<FONT id=ie4uid', uid, ' UID="', uid, '">', that._text, '</FONT>' ];// fake textNode\r
- delete that._rawObject;\r
+ if( !that[ '_tag' ] ){\r
+ html = [ '<FONT id=ie4uid', uid, ' UID="', uid, '">', that[ '_text' ], '</FONT>' ];// fake textNode\r
+ delete that[ '_rawObject' ];\r
} else {\r
if( !isChild ) X_Node__actualRemove( that, /* true */ false );\r
\r
- that._flags & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( that, true );\r
+ that[ '_flags' ] & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( that, true );\r
\r
html = [\r
- '<', that._tag, ' id=', ( that._id || ( 'ie4uid' + uid ) ), ' UID="', uid, '"',\r
- that._className ? ' class="' + that._className + '"' : '',\r
+ '<', that[ '_tag' ], ' id=', ( that[ '_id' ] || ( 'ie4uid' + uid ) ), ' UID="', uid, '"',\r
+ that[ '_className' ] ? ' class="' + that[ '_className' ] + '"' : '',\r
X_Node_Attr_objToAttrText( that, true ),\r
- that._cssText ? ' style="' + that._cssText + '"' : '',\r
+ that[ '_cssText' ] ? ' style="' + that[ '_cssText' ] + '"' : '',\r
'>' ];\r
\r
n = html.length;\r
- if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ){\r
+ if( ( xnodes = that[ '_xnodes' ] ) && ( l = xnodes.length ) ){\r
\r
- that._flags &= ~X_Node_State.IE4_DIRTY_CHILDREN;\r
+ that[ '_flags' ] &= ~X_Node_State.IE4_DIRTY_CHILDREN;\r
for( i = 0; i < l; ++i ){\r
- if( xnodes[ i ]._tag ){\r
- that._flags |= X_Node_State.IE4_HAS_ELEMENT;\r
+ if( xnodes[ i ][ '_tag' ] ){\r
+ that[ '_flags' ] |= X_Node_State.IE4_HAS_ELEMENT;\r
} else {\r
- that._flags |= X_Node_State.IE4_HAS_TEXTNODE;\r
+ that[ '_flags' ] |= X_Node_State.IE4_HAS_TEXTNODE;\r
};\r
- if( that._flags & X_Node_BitMask_IE4_IS_MIX === X_Node_BitMask_IE4_IS_MIX ){\r
+ if( that[ '_flags' ] & X_Node_BitMask_IE4_IS_MIX === X_Node_BitMask_IE4_IS_MIX ){\r
break;\r
};\r
};\r
\r
- if( that._flags & X_Node_BitMask_IE4_IS_MIX === X_Node_State.IE4_HAS_TEXTNODE ){\r
+ if( that[ '_flags' ] & X_Node_BitMask_IE4_IS_MIX === X_Node_State.IE4_HAS_TEXTNODE ){\r
// only textnode\r
- html[ n ] = that.text();\r
+ html[ n ] = that[ 'text' ]();\r
++n;\r
} else {\r
for( i = 0; i < l; ++i ){\r
html[ n ] = X_Node__actualCreate( xnodes[ i ], true );\r
++n;\r
};\r
- that._flags |= X_Node_State.IE4_FIXED;\r
+ that[ '_flags' ] |= X_Node_State.IE4_FIXED;\r
};\r
};\r
- X_Dom_DTD_EMPTY[ that._tag ] || ( html[ n ] = '<\/' + that._tag + '>' );\r
+ X_Dom_DTD_EMPTY[ that[ '_tag' ] ] || ( html[ n ] = '<\/' + that[ '_tag' ] + '>' );\r
\r
- that._newAttrs && ( that._flags |= X_Node_State.DIRTY_ATTR );\r
+ that[ '_newAttrs' ] && ( that[ '_flags' ] |= X_Node_State.DIRTY_ATTR );\r
};\r
\r
return html.join( '' );\r
X_UA_DOM.IE4 && (function( that ){\r
var xnodes, i, v;\r
\r
- if( !that._tag ) return that;\r
+ if( !that[ '_tag' ] ) return that;\r
\r
- if( ( xnodes = that._xnodes ) && ( i = xnodes.length ) ){\r
+ if( ( xnodes = that[ '_xnodes' ] ) && ( i = xnodes.length ) ){\r
for( ; i; ){\r
X_Node__afterActualCreate( xnodes[ --i ] );\r
};\r
};\r
// ネットワーク系属性と filter は要素生成後に適用\r
- if( that._flags & ( X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_IE_FILTER ) ){\r
- X_Node__updateRawNode( that, that._rawObject || X_Node__ie4getRawNode( that ) );\r
+ if( that[ '_flags' ] & ( X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_IE_FILTER ) ){\r
+ X_Node__updateRawNode( that, that[ '_rawObject' ] || X_Node__ie4getRawNode( that ) );\r
} else {\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ that[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
};\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
});\r
// GPUレイヤーにいるうちは remove しない。-> GPU解除してから remove する\r
// Firefox34 では遭遇せず、Safari で何度かアニメーションしているうちに発生\r
( function( that, isChild ){\r
- var xnodes = that._xnodes,\r
- elm = that._rawObject,\r
+ var xnodes = that[ '_xnodes' ],\r
+ elm = that[ '_rawObject' ],\r
child, i, l;\r
\r
if( xnodes && ( l = xnodes.length ) ){\r
for( i = 0; i < l; ++i ){\r
child = xnodes[ i ];\r
- child._tag && X_Node__actualRemove( child, true );\r
+ child[ '_tag' ] && X_Node__actualRemove( child, true );\r
};\r
};\r
\r
if( !elm ) return;\r
\r
- if( that._flags & X_Node_State.ACTUAL_LISTENING ){\r
+ if( that[ '_flags' ] & X_Node_State.ACTUAL_LISTENING ){\r
that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
- that._flags &= ~X_Node_State.ACTUAL_LISTENING;\r
+ that[ '_flags' ] &= ~X_Node_State.ACTUAL_LISTENING;\r
};\r
\r
// ie5では filter の効いている要素をremove時に破棄して、再度append 時に新規生成する\r
if( elm.filters && elm.filters.length ){\r
//elm.style.removeAttribute( 'filter' );\r
isChild = false;\r
- delete that._rawObject;\r
+ delete that[ '_rawObject' ];\r
// 破棄前にインタラクティブな属性値を控える\r
- if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.value = elm.value;\r
+ if( X_Node_Attr_HAS_VALUE[ that[ '_tag' ] ] && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'value', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].value = elm.value;\r
};\r
- if( that._tag === 'OPTION' && ( !that._newAttrs || !X_Object_inObject( 'selected', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.selected = elm.selected;\r
+ if( that[ '_tag' ] === 'OPTION' && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'selected', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].selected = elm.selected;\r
};\r
- if( that._tag === 'SELECT' && ( !that._newAttrs || !X_Object_inObject( 'selectedIndex', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.selectedIndex = elm.selectedIndex;\r
+ if( that[ '_tag' ] === 'SELECT' && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'selectedIndex', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].selectedIndex = elm.selectedIndex;\r
};\r
- if( that._tag === 'INPUT' && that._attr && ( that._attr.type === 'checkbox' || that._attr.type === 'radio' ) && ( !that._newAttrs || !X_Object_inObject( 'checked', that._newAttrs ) ) ){\r
- that._attrs.checked = elm.checked;\r
+ if( that[ '_tag' ] === 'INPUT' && that._attr && ( that._attr.type === 'checkbox' || that._attr.type === 'radio' ) && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'checked', that[ '_newAttrs' ] ) ) ){\r
+ that[ '_attrs' ].checked = elm.checked;\r
};\r
// 子要素への参照を外す\r
elm.innerHTML = '';\r
}) :\r
X_UA_DOM.IE4 ?\r
( function( that, isChild ){\r
- var xnodes = that._xnodes,\r
- elm = that._rawObject || X_Node__ie4getRawNode( that ),\r
+ var xnodes = that[ '_xnodes' ],\r
+ elm = that[ '_rawObject' ] || X_Node__ie4getRawNode( that ),\r
i, l, xnode;\r
if( xnodes && ( l = xnodes.length ) ){\r
for( i = 0; i < l; ++i ){\r
that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
\r
// 破棄前にインタラクティブな属性値を控える\r
- if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.value = elm.value;\r
+ if( X_Node_Attr_HAS_VALUE[ that[ '_tag' ] ] && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'value', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].value = elm.value;\r
};\r
- if( that._tag === 'OPTION' && ( !that._newAttrs || !X_Object_inObject( 'selected', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.selected = elm.selected;\r
+ if( that[ '_tag' ] === 'OPTION' && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'selected', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].selected = elm.selected;\r
};\r
- if( that._tag === 'SELECT' && ( !that._newAttrs || !X_Object_inObject( 'selectedIndex', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.selectedIndex = elm.selectedIndex;\r
+ if( that[ '_tag' ] === 'SELECT' && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'selectedIndex', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].selectedIndex = elm.selectedIndex;\r
};\r
- if( that._tag === 'INPUT' && that._attr && ( that._attr.type === 'checkbox' || that._attr.type === 'radio' ) && ( !that._newAttrs || !X_Object_inObject( 'checked', that._newAttrs ) ) ){\r
- if( !that._attrs ) that._attrs = {};\r
- that._attrs.checked = elm.checked;\r
+ if( that[ '_tag' ] === 'INPUT' && that._attr && ( that._attr.type === 'checkbox' || that._attr.type === 'radio' ) && ( !that[ '_newAttrs' ] || !X_Object_inObject( 'checked', that[ '_newAttrs' ] ) ) ){\r
+ if( !that[ '_attrs' ] ) that[ '_attrs' ] = {};\r
+ that[ '_attrs' ].checked = elm.checked;\r
};\r
\r
elm.removeAttribute( 'id' ); // ?\r
- //document.all[ that._id || ( 'ie4uid' + that._uid ) ] = null; // MacIE5 でエラー\r
+ //document.all[ that[ '_id' ] || ( 'ie4uid' + that[ '_uid' ] ) ] = null; // MacIE5 でエラー\r
if( !isChild ) elm.outerHTML = '';\r
- delete that._rawObject;\r
+ delete that[ '_rawObject' ];\r
}) :\r
(function(){});\r
\r
-X_ViewPort.listenOnce( X_Event.UNLOAD, X_Node__actualRemove, [ X_Node_html, true ] );\r
+X_ViewPort[ 'listenOnce' ]( X_EVENT_UNLOAD, X_Node__actualRemove, [ X_Node_html, true ] );\r
\r
\r
// http://msdn.microsoft.com/ja-jp/library/ie/dn255104%28v=vs.85%29.aspx\r
var X_Dom_Event_devicePixelRatio = window.devicePixelRatio || ( window.screen.deviceXDPI / window.screen.logicalXDPI ),\r
- X_Dom_Event_convertMSPointerType = window.MSPointerEvent && [ 0, 0, 'touch', 'pen', 'mouse' ];/*{\r
+ X_Dom_Event_convertMSPointerType = window.MSPointerEvent && [ 0, 0, 'touch', 'pen', 'mouse' ],/*{\r
'2' : 'touch',\r
'3' : 'pen',\r
'4' : 'mouse'\r
}; */\r
+ X_Dom_Event_CANCEL_MOUSE = {},\r
+ X_DomEvent;\r
\r
if( !X_UA[ 'IE' ] || 9 <= X_UA[ 'IE' ] ){\r
- X.Dom.Event = function( e, xnode ){\r
+ X_DomEvent = function( e, xnode ){\r
var originalType = e.type,\r
type, pointerEventType,\r
touches, events,\r
elm, i, n, time, touch, ev;\r
\r
//this._event = e;\r
- this.type = type = X_Event_RenameTo[ originalType ] || originalType;\r
+ this[ 'type' ] = type = X_Event_RenameTo[ originalType ] || originalType;\r
\r
switch( type ){\r
case 'message' :\r
- this.data = e.data;\r
- this.origin = e.origin;\r
- this.source = e.source;\r
+ this[ 'data' ] = e.data;\r
+ this[ 'origin' ] = e.origin;\r
+ this[ 'source' ] = e.source;\r
break;\r
case 'progress' :\r
- this.lengthComputable = e.lengthComputable;\r
- this.loaded = e.loaded;\r
- this.total = e.total;\r
+ this[ 'lengthComputable' ] = e.lengthComputable;\r
+ this[ 'loaded' ] = e.loaded;\r
+ this[ 'total' ] = e.total;\r
break;\r
};\r
\r
if( e.pointerType ){\r
// PointerEvent;\r
if( X_Dom_Event_convertMSPointerType ){\r
- this.pointerType = X_Dom_Event_convertMSPointerType[ e.pointerType ];\r
- this.pressure = e.pressure || ( e.button !== -1 ? 0.5 : 0 );\r
+ this[ 'pointerType' ] = X_Dom_Event_convertMSPointerType[ e.pointerType ];\r
+ this[ 'pressure' ] = e.pressure || ( e.button !== -1 ? 0.5 : 0 );\r
// ポインターの接触形状の スクリーン ピクセル単位の幅と高さ なので変換。(多分、、、)\r
- this.width = e.width / X_Dom_Event_devicePixelRatio;\r
- this.height = e.height / X_Dom_Event_devicePixelRatio; \r
+ this[ 'width' ] = e.width / X_Dom_Event_devicePixelRatio;\r
+ this[ 'height' ] = e.height / X_Dom_Event_devicePixelRatio; \r
} else {\r
- this.pointerType = e.pointerType;\r
- this.pressure = e.pressure;\r
+ this[ 'pointerType' ] = e.pointerType;\r
+ this[ 'pressure' ] = e.pressure;\r
// ポインターの接触形状の CSS ピクセル単位の幅と高さ。\r
- this.width = e.width;\r
- this.height = e.height;\r
+ this[ 'width' ] = e.width;\r
+ this[ 'height' ] = e.height;\r
};\r
\r
- switch( this.pointerType ){\r
+ switch( this[ 'pointerType' ] ){\r
case 'pen' :\r
//Y-Z 平面と、ペンの軸が含まれる平面の間の角度を返します。Y 軸の範囲は -90 ~ +90 です。X の傾きの正の方向は右方向です。\r
- this.tiltX = e.tiltX;\r
- this.tiltY = e.tiltY;\r
+ this[ 'tiltX' ] = e.tiltX;\r
+ this[ 'tiltY' ] = e.tiltY;\r
if( originalType === 'MSPointerHover' ){\r
- this.type = 'pointermove'; // ie10 には pointerhover と pointermoveがあり、ie11 で一本化。ie11 では buttons を見て hover 状態を判定\r
+ this[ 'type' ] = 'pointermove'; // ie10 には pointerhover と pointermoveがあり、ie11 で一本化。ie11 では buttons を見て hover 状態を判定\r
};\r
case 'touch' :\r
- this.radiusX = e.radiusX;\r
- this.radiusY = e.radiusY;\r
- this.rotationAngle = e.rotationAngle;\r
+ this[ 'radiusX' ] = e.radiusX;\r
+ this[ 'radiusY' ] = e.radiusY;\r
+ this[ 'rotationAngle' ] = e.rotationAngle;\r
case 'mouse' :\r
};\r
\r
- this.button = e.button;\r
- this.buttons = e.buttons;\r
+ this[ 'button' ] = e.button;\r
+ this[ 'buttons' ] = e.buttons;\r
\r
- this.pointerId = e.pointerId; \r
- this.target = X_Node_getXNode( e.target );\r
- this.relatedTarget = X_Node_getXNode( e.relatedTarget ); // xnode\r
- this.isPrimary = e.isPrimary;\r
- this.hwTimestamp = e.hwTimestamp;\r
- this.timestamp = e.timestamp;\r
+ this[ 'pointerId' ] = e.pointerId; \r
+ this[ 'target' ] = X_Node_getXNode( e.target );\r
+ this[ 'relatedTarget' ] = X_Node_getXNode( e.relatedTarget ); // xnode\r
+ this[ 'isPrimary' ] = e.isPrimary;\r
+ this[ 'hwTimestamp' ] = e.hwTimestamp;\r
+ this[ 'timestamp' ] = e.timestamp;\r
\r
- this.altKey = e.altKey;\r
- this.ctrlKey = e.ctrlKey;\r
- this.metaKey = e.metaKey;\r
- this.shiftKey = e.shiftKey;\r
- //this.screenX = touch.screenX;\r
- //this.screenY = touch.screenY;\r
- this.clientX = e.clientX;\r
- this.clientY = e.clientY;\r
- this.pageX = e.pageX;\r
- this.pageY = e.pageY;\r
- this.offsetX = e.offsetX;\r
- this.offsetY = e.offsetY;\r
+ this[ 'altKey' ] = e.altKey;\r
+ this[ 'ctrlKey' ] = e.ctrlKey;\r
+ this[ 'metaKey' ] = e.metaKey;\r
+ this[ 'shiftKey' ] = e.shiftKey;\r
+ //this[ 'screenX' ] = touch.screenX;\r
+ //this[ 'screenY' ] = touch.screenY;\r
+ this[ 'clientX' ] = e.clientX;\r
+ this[ 'clientY' ] = e.clientY;\r
+ this[ 'pageX' ] = e.pageX;\r
+ this[ 'pageY' ] = e.pageY;\r
+ this[ 'offsetX' ] = e.offsetX;\r
+ this[ 'offsetY' ] = e.offsetY;\r
} else\r
if( pointerEventType = X_Event_toPointer[ originalType ] ){\r
// Touch or Mouse\r
if( touches.length === 0 ){\r
alert( 'e.changedTouches.length === 0' );\r
};\r
- xnode._cancelMouse = pointerEventType;\r
+ X_Dom_Event_CANCEL_MOUSE[ xnode[ '_uid' ] ] = pointerEventType;\r
\r
events = [];\r
altKey = e.altKey;\r
target = touch.target;\r
related = touch.relatedTarget;\r
events[ i ] = {\r
- type : pointerEventType,\r
- pointerType : 'touch',\r
- target : X_Node_getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
- currentTarget : xnode,\r
- relatedTarget : related && X_Node_getXNode( related.nodeType === 3 ? related.parentNode : related ), // xnode iOS3 には relatedTarget がない\r
- isPrimary : true,\r
- hwTimestamp : time,\r
- timestamp : time,\r
- button : e.button,\r
- buttons : e.buttons || e.button,\r
- altKey : altKey,\r
- ctrlKey : ctrlKey,\r
- metaKey : metaKey,\r
- shiftKey : shiftKey,\r
- pointerId : touch.identifier + 2,\r
+ 'type' : pointerEventType,\r
+ 'pointerType' : 'touch',\r
+ 'target' : X_Node_getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
+ 'currentTarget' : xnode,\r
+ 'relatedTarget' : related && X_Node_getXNode( related.nodeType === 3 ? related.parentNode : related ), // xnode iOS3 には relatedTarget がない\r
+ 'isPrimary' : true,\r
+ 'hwTimestamp' : time,\r
+ 'timestamp' : time,\r
+ 'button' : e.button,\r
+ 'buttons' : e.buttons || e.button,\r
+ 'altKey' : altKey,\r
+ 'ctrlKey' : ctrlKey,\r
+ 'metaKey' : metaKey,\r
+ 'shiftKey' : shiftKey,\r
+ 'pointerId' : touch.identifier + 2,\r
//screenX : touch.screenX,\r
//screenY : touch.screenY,\r
- clientX : touch.clientX,\r
- clientY : touch.clientY,\r
- pageX : touch.pageX,\r
- pageY : touch.pageY,\r
- offsetX : touch.offsetX, // 要素上の座標を取得 \r
- offsetY : touch.offsetY,\r
- radiusX : touch.radiusX || 0,\r
- radiusY : touch.radiusY || 0,\r
- rotationAngle : touch.rotationAngle || 0,\r
- pressure : touch.force || touch.webkitForce || force,\r
- width : touch.width || 0,\r
- height : touch.height || 0\r
+ 'clientX' : touch.clientX,\r
+ 'clientY' : touch.clientY,\r
+ 'pageX' : touch.pageX,\r
+ 'pageY' : touch.pageY,\r
+ 'offsetX' : touch.offsetX, // 要素上の座標を取得 \r
+ 'offsetY' : touch.offsetY,\r
+ 'radiusX' : touch.radiusX || 0,\r
+ 'radiusY' : touch.radiusY || 0,\r
+ 'rotationAngle' : touch.rotationAngle || 0,\r
+ 'pressure' : touch.force || touch.webkitForce || force,\r
+ 'width' : touch.width || 0,\r
+ 'height' : touch.height || 0\r
};\r
};\r
return events.length === 1 ? events[ 0 ] : events;\r
} else {\r
\r
- if( xnode._cancelMouse === pointerEventType ){\r
- delete xnode._cancelMouse;\r
- console.log( '**** xnode._cancelMouse ' + xnode._cancelMouse );\r
+ if( X_Dom_Event_CANCEL_MOUSE[ xnode[ '_uid' ] ] === pointerEventType ){\r
+ delete X_Dom_Event_CANCEL_MOUSE[ xnode[ '_uid' ] ];\r
return [];\r
};\r
\r
// MouseEvent;\r
- this.type = pointerEventType;\r
- this.pointerType = 'mouse';\r
+ this[ 'type' ] = pointerEventType;\r
+ this[ 'pointerType' ] = 'mouse';\r
\r
- this.button = e.button !== undefined ? e.button :\r
+ this[ 'button' ] = e.button !== undefined ? e.button :\r
e.which !== undefined ? e.which - 1 : -1;\r
- this.buttons = e.buttons !== undefined ? e.buttons : this.button === 0 ? 1 : this.button === 1 ? 2 : this.button === 2 ? 4 : 0;\r
- this.pressure = ( this.button !== -1 ? 0.5 : 0 );\r
+ this[ 'buttons' ] = e.buttons !== undefined ? e.buttons : this[ 'button' ] === 0 ? 1 : this[ 'button' ] === 1 ? 2 : this[ 'button' ] === 2 ? 4 : 0;\r
+ this[ 'pressure' ] = ( this[ 'button' ] !== -1 ? 0.5 : 0 );\r
\r
elm = e.target;\r
- this.target = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnodetouch.target;\r
- this.isPrimary = true;\r
- this.hwTimestamp = this.timestamp = X_Timer_now(); \r
- this.altKey = e.altKey;\r
- this.ctrlKey = e.ctrlKey;\r
- this.metaKey = e.metaKey;\r
- this.shiftKey = e.shiftKey;\r
- this.pointerId = 1;\r
- //this.screenX = touch.screenX;\r
- //this.screenY = touch.screenY;\r
+ this[ 'target' ] = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnodetouch.target;\r
+ this[ 'isPrimary' ] = true;\r
+ this[ 'hwTimestamp' ] = this[ 'timestamp' ] = X_Timer_now(); \r
+ this[ 'altKey' ] = e.altKey;\r
+ this[ 'ctrlKey' ] = e.ctrlKey;\r
+ this[ 'metaKey' ] = e.metaKey;\r
+ this[ 'shiftKey' ] = e.shiftKey;\r
+ this[ 'pointerId' ] = 1;\r
+ //this[ 'screenX' ] = touch.screenX;\r
+ //this[ 'screenY' ] = touch.screenY;\r
// TODO http://uupaa-js.googlecode.com/svn-history/r8/trunk/doc/reference/symbols/src/trunk_uu.module.ui.js.html\r
// Safari2ではclientX,YはpageX,Yと同じ値を返す\r
- this.clientX = e.clientX;\r
- this.clientY = e.clientY;\r
- this.pageX = e.pageX;\r
- this.pageY = e.pageY;\r
- this.offsetX = e.offsetX || e.layerX; // 要素上の座標を取得 \r
- this.offsetY = e.offsetY || e.layerY;\r
+ this[ 'clientX' ] = e.clientX;\r
+ this[ 'clientY' ] = e.clientY;\r
+ this[ 'pageX' ] = e.pageX;\r
+ this[ 'pageY' ] = e.pageY;\r
+ this[ 'offsetX' ] = e.offsetX || e.layerX; // 要素上の座標を取得 \r
+ this[ 'offsetY' ] = e.offsetY || e.layerY;\r
\r
// http://www.programming-magic.com/20090127231544/\r
// Opera で button==2の場合、コンテキストメニューイベントを発火 「ツール」->「設定」->「詳細設定」->「コンテンツ」->「Javascriptオプション」で「右クリックを制御するスクリプトを許可する」\r
- if( originalType === 'mousedown' && this.button === 2 && X_UA[ 'Opera' ] ){\r
- events = [ X.Object.clone( this ), X.Object.clone( this ) ];\r
+ if( originalType === 'mousedown' && this[ 'button' ] === 2 && X_UA[ 'Opera' ] ){\r
+ events = [ X_Object_clone( this ), X_Object_clone( this ) ];\r
events[ 1 ].type = 'contextmenu';\r
return events;\r
};\r
} else {\r
// Other\r
\r
- this.keyCode = e.keyCode || e.which;\r
- this.altKey = e.altKey;\r
- this.ctrlKey = e.ctrlKey;\r
- this.shiftKey = e.shiftKey;\r
- this.metaKey = e.metaKey;\r
+ this[ 'keyCode' ] = e.keyCode || e.which;\r
+ this[ 'altKey' ] = e.altKey;\r
+ this[ 'ctrlKey' ] = e.ctrlKey;\r
+ this[ 'shiftKey' ] = e.shiftKey;\r
+ this[ 'metaKey' ] = e.metaKey;\r
\r
- this.button = e.button !== undefined ? e.button :\r
+ this[ 'button' ] = e.button !== undefined ? e.button :\r
e.which !== undefined ? e.which - 1 : -1;\r
- this.buttons = e.buttons !== undefined ? e.buttons : this.button === 0 ? 1 : this.button === 1 ? 2 : this.button === 2 ? 4 : 0;\r
+ this[ 'buttons' ] = e.buttons !== undefined ? e.buttons : this[ 'button' ] === 0 ? 1 : this[ 'button' ] === 1 ? 2 : this[ 'button' ] === 2 ? 4 : 0;\r
\r
//http://www.quirksmode.org/js/events_properties.html\r
if( elm = e.target ){\r
- this.target = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnode\r
+ this[ 'target' ] = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnode\r
};\r
if( elm = e.relatedTarget ){\r
- this.relatedTarget = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm ); // xnode\r
+ this[ 'relatedTarget' ] = X_Node_getXNode( elm.nodeType === 3 ? elm.parentNode : elm ); // xnode\r
};\r
\r
if( type === 'wheel' ){\r
// https://w3g.jp/blog/tools/wheelevent_crossbrowser\r
// ホイール系イベント2014年版クロスブラウザ\r
if( e.deltaY !== undefined ){\r
- this.deltaX = e.deltaX;\r
- this.deltaY = e.deltaY;\r
- this.deltaZ = e.deltaZ || 0;\r
+ this[ 'deltaX' ] = e.deltaX;\r
+ this[ 'deltaY' ] = e.deltaY;\r
+ this[ 'deltaZ' ] = e.deltaZ || 0;\r
} else\r
if( e.wheelDeltaY !== undefined ){\r
- this.deltaX = e.wheelDeltaX / 120;\r
- this.deltaY = e.wheelDeltaY / 120;\r
- this.deltaZ = e.wheelDeltaZ / 120 || 0;\r
+ this[ 'deltaX' ] = e.wheelDeltaX / 120;\r
+ this[ 'deltaY' ] = e.wheelDeltaY / 120;\r
+ this[ 'deltaZ' ] = e.wheelDeltaZ / 120 || 0;\r
} else\r
if( e.wheelDelta !== undefined ){\r
- this.deltaX = this.deltaZ = 0;\r
- this.deltaY = e.wheelDelta / -120;\r
+ this[ 'deltaX' ] = this[ 'deltaZ' ] = 0;\r
+ this[ 'deltaY' ] = e.wheelDelta / -120;\r
} else\r
if( e.detail !== undefined ){\r
- this.deltaX = this.deltaZ = 0;\r
- this.deltaY = originalType === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
+ this[ 'deltaX' ] = this[ 'deltaZ' ] = 0;\r
+ this[ 'deltaY' ] = originalType === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
} else {\r
- this.deltaX = this.deltaY = this.deltaZ = 0;\r
+ this[ 'deltaX' ] = this[ 'deltaY' ] = this[ 'deltaZ' ] = 0;\r
};\r
};\r
};\r
\r
- this.currentTarget = xnode; // xnode\r
- this.eventPhase = e.eventPhase;\r
- this.detail = e.detail;\r
+ this[ 'currentTarget' ] = xnode; // xnode\r
+ this[ 'eventPhase' ] = e.eventPhase;\r
+ this[ 'detail' ] = e.detail;\r
};\r
} else {\r
- X.Dom.Event = function( e, xnode, element ){\r
+ X_DomEvent = function( e, xnode, element ){\r
var originalType = e.type, btn, type;\r
\r
- this.type = X_Event_RenameTo[ originalType ] || originalType;\r
- this.target = X_Node_getXNode( e.srcElement ); // xnode\r
- if( this.target && !this.target._tag ) this.target = this.target.parent; // ie4 の fake Textnode がヒットしていないか?\r
- this.currentTarget = xnode; // xnode\r
- this.relatedTarget = X_Node_getXNode( e.formElement || e.toElement ); // xnode\r
- this.eventPhase = e.srcElement === element ? 2: 3;\r
+ this[ 'type' ] = X_Event_RenameTo[ originalType ] || originalType;\r
+ this[ 'target' ] = X_Node_getXNode( e.srcElement ); // xnode\r
+ if( this[ 'target' ] && !this[ 'target' ][ '_tag' ] ) this[ 'target' ] = this[ 'target' ].parent; // ie4 の fake Textnode がヒットしていないか?\r
+ this[ 'currentTarget' ] = xnode; // xnode\r
+ this[ 'relatedTarget' ] = X_Node_getXNode( e.formElement || e.toElement ); // xnode\r
+ this[ 'eventPhase' ] = e.srcElement === element ? 2: 3;\r
\r
- this.keyCode = e.keyCode;\r
- this.altKey = e.altKey;\r
- this.ctrlKey = e.ctrlKey;\r
- this.shiftKey = e.shiftKey; \r
+ this[ 'keyCode' ] = e.keyCode;\r
+ this[ 'altKey' ] = e.altKey;\r
+ this[ 'ctrlKey' ] = e.ctrlKey;\r
+ this[ 'shiftKey' ] = e.shiftKey; \r
\r
\r
- switch( this.type ){\r
+ switch( this[ 'type' ] ){\r
case 'message' :\r
- this.data = e.data;\r
- this.origin = e.origin;\r
- this.source = e.source;\r
+ this[ 'data' ] = e.data;\r
+ this[ 'origin' ] = e.origin;\r
+ this[ 'source' ] = e.source;\r
break;\r
case 'progress' :\r
- this.loaded = e.loaded;\r
- this.total = e.total;\r
+ this[ 'loaded' ] = e.loaded;\r
+ this[ 'total' ] = e.total;\r
break;\r
};\r
\r
switch( originalType ){\r
case 'click' :\r
case 'dblclick' :\r
- this.button = 0;\r
+ this[ 'button' ] = 0;\r
break;\r
case 'contextmenu' :\r
- this.button = 2;\r
+ this[ 'button' ] = 2;\r
break;\r
default :\r
// mouseup, mousedown\r
btn = e.button;\r
- this.button =\r
+ this[ 'button' ] =\r
btn & 1 ? 0 :\r
btn & 4 ? 2 :\r
btn & 2 ? 1 : -1; // 左:1(click:0), 中:4, 右:2\r
\r
};\r
- this.buttons = e.button;\r
+ this[ 'buttons' ] = e.button;\r
\r
- this.deltaX = 0;\r
- this.deltaY = e.wheelDelta / -120; \r
+ this[ 'deltaX' ] = 0;\r
+ this[ 'deltaY' ] = e.wheelDelta / -120; \r
\r
if( type = X_Event_toPointer[ originalType ] ){\r
- this.type = type;\r
- this.clientX = e.clientX;\r
- this.clientY = e.clientY;\r
- //this.screenX = e.screenX;\r
- //this.screenY = e.screenY;\r
+ this[ 'type' ] = type;\r
+ this[ 'clientX' ] = e.clientX;\r
+ this[ 'clientY' ] = e.clientY;\r
+ //this[ 'screenX' ] = e.screenX;\r
+ //this[ 'screenY' ] = e.screenY;\r
\r
//if( X_ViewPort_rootElement ){ // uuu...\r
- this.pageX = e.clientX + X_ViewPort_rootElement.scrollLeft;\r
- this.pageY = e.clientY + X_ViewPort_rootElement.scrollTop;\r
+ this[ 'pageX' ] = e.clientX + X_ViewPort_rootElement.scrollLeft;\r
+ this[ 'pageY' ] = e.clientY + X_ViewPort_rootElement.scrollTop;\r
// DOMAssistant 2.8.1\r
//event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));\r
//event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); \r
//};\r
\r
if( 5 <= X_UA[ 'IE' ] ){\r
- this.offsetX = e.offsetX; // イベントターゲット左上からの座標\r
- this.offsetY = e.offsetY; \r
+ this[ 'offsetX' ] = e.offsetX; // イベントターゲット左上からの座標\r
+ this[ 'offsetY' ] = e.offsetY; \r
}// else\r
//if( e.srcElement ){\r
- // this.offsetX = e.x - e.srcElement.offsetLeft; // e.x はイベント発生要素の親要素を基準にした座標。\r
- // this.offsetY = e.y - e.srcElement.offsetTop; \r
+ // this[ 'offsetX' ] = e.x - e.srcElement.offsetLeft; // e.x はイベント発生要素の親要素を基準にした座標。\r
+ // this[ 'offsetY' ] = e.y - e.srcElement.offsetTop; \r
//};\r
\r
- this.pointerId = 1;\r
- this.radiusX = 0;\r
- this.radiusY = 0;\r
- this.rotationAngle = 0;\r
- this.width = 0;\r
- this.height = 0;\r
- this.tiltX = 0;\r
- this.tiltY = 0;\r
+ this[ 'pointerId' ] = 1;\r
+ this[ 'radiusX' ] = 0;\r
+ this[ 'radiusY' ] = 0;\r
+ this[ 'rotationAngle' ] = 0;\r
+ this[ 'width' ] = 0;\r
+ this[ 'height' ] = 0;\r
+ this[ 'tiltX' ] = 0;\r
+ this[ 'tiltY' ] = 0;\r
};\r
};\r
};\r
\r
// TODO load -> readystatechange this.readyState === "loaded" || this.readyState === "complete"\r
-/*\r
-X.Dom.Event._LOAD_FIX_TAGS = {\r
- IFRAME : true,\r
- SCRIPT : true//,\r
- //LINK : true\r
-}; */\r
\r
// https://github.com/georgeadamson/jQuery.prefixfree-events/blob/master/jQuery.prefixfree-events.js\r
// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r
var X_Node_BoxModel = {\r
- CONTENT_BOX : 1,\r
- PADDING_BOX : 2,\r
- BORDER_BOX : 3,\r
- \r
- defaultBoxModel : 0,\r
- boxSizingEnabled : false,\r
+ CONTENT_BOX : 1,\r
+ PADDING_BOX : 2,\r
+ BORDER_BOX : 3\r
+ },\r
+ \r
+ X_Node_BoxModel_defaultBoxModel,\r
\r
+ X_Node_BoxModel_boxSizingEnabled,\r
// TODO: offsetLeft, offsetTop の基準位置\r
- absoluteOffset : 0\r
-};\r
+ X_Node_BoxModel_absoluteOffset;\r
\r
\r
\r
-X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){\r
+\r
+\r
+X_ViewPort[ 'listenOnce' ]( X_EVENT_INIT, function(){\r
var node = X_Node_systemNode;\r
\r
- node.cssText( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' );\r
+ node[ 'cssText' ]( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' );\r
\r
- X_Node_BoxModel.defaultBoxModel = node.width() === 10 ?\r
+ X_Node_BoxModel_defaultBoxModel = node[ 'width' ]() === 10 ?\r
X_Node_BoxModel.BORDER_BOX :\r
X_Node_BoxModel.CONTENT_BOX;\r
\r
- if( X_Node_BoxModel.defaultBoxModel === X_Node_BoxModel.CONTENT_BOX ){\r
- X_Node_BoxModel.boxSizingEnabled = node.cssText( 'width:10px;padding:1px;border:2px solid #0;margin:4px;' +\r
+ if( X_Node_BoxModel_defaultBoxModel === X_Node_BoxModel.CONTENT_BOX ){\r
+ X_Node_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
- .width() === 10;\r
+ [ 'width' ]() === 10;\r
};\r
\r
/*\r
* TODO boxShadow が有効な要素に対して offsetWidth 等の補正(?)\r
*/\r
if( X_Node_CSS_Support[ 'boxShadow' ] &&\r
- node.cssText(\r
- X_Node_CSS_uncamelize( X_Node_CSS_VENDER_PREFIX[ 'boxShadow' ] ) + ':10px 10px 0 0 #000;width:10px;'\r
- ).width() !== 10\r
- ){\r
- console.log( node.cssText() + node.width() );\r
+ node[ 'cssText' ](\r
+ X_Node_CSS_uncamelize( X_Node_CSS_VENDER_PREFIX[ 'boxShadow' ] ) + ':10px 10px 0 0 #000;width:10px;'\r
+ )[ 'width' ]() !== 10\r
+ ){\r
+ console.log( node[ 'cssText' ]() + node[ 'width' ]() );\r
X_Node_CSS_Support[ 'boxShadowLayoutBug' ] = true;\r
};\r
\r
// margin\r
// top\r
\r
- X_Node_BoxModel.absoluteOffset =\r
- node.cssText( 'position:absolute;top:0;left:0;margin:1px;border:2px solid #000;padding:4px;' )\r
- .append( '<div></div>' )\r
- .firstChild().cssText( 'position:absolute;top:8px;left:8px;margin:16px;border:32px solid #666;padding:64px;' )\r
- .y();\r
-\r
+ X_Node_BoxModel_absoluteOffset =\r
+ node[ 'cssText' ]( 'position:absolute;top:0;left:0;margin:1px;border:2px solid #000;padding:4px;' )\r
+ [ 'append' ]( '<div></div>' )\r
+ [ 'firstChild' ]()\r
+ [ 'cssText' ]( 'position:absolute;top:8px;left:8px;margin:16px;border:32px solid #666;padding:64px;' )\r
+ [ 'y' ]();\r
\r
- node.cssText( '' ).empty();\r
+ node[ 'cssText' ]( '' )[ 'empty' ]();\r
});\r
\r
/* --------------------------------------\r
* getBoxObjectFor\r
* getBoundingClientRect\r
*/\r
-Node.prototype.width = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'width' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
// TODO width : length + overflow : hidden ならそれを返す? <- block or inline\r
- return this._rawObject ? this._rawObject.offsetWidth : 0;\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].offsetWidth : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetWidth;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).offsetWidth;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.height = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'height' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'height' );\r
- return this._rawObject ? this._rawObject.offsetHeight : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'height' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].offsetHeight : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetHeight;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).offsetHeight;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.clientWidth = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'clientWidth' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject ? this._rawObject.clientWidth : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'width' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].clientWidth : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).clientWidth;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).clientWidth;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.clientHeight = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'clientHeight' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'height' );\r
- return this._rawObject ? this._rawObject.clientHeight : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'height' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].clientHeight : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).clientHeight;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).clientHeight;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.scrollWidth = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'scrollWidth' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject ? this._rawObject.scrollWidth : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'width' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].scrollWidth : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollWidth;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).scrollWidth;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.scrollHeight = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'scrollHeight' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- return this._rawObject ? this._rawObject.scrollHeight : 0;\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].scrollHeight : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollHeight;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).scrollHeight;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.scrollLeft = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'scrollLeft' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject ? this._rawObject.scrollLeft : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'width' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].scrollLeft : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollLeft;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).scrollLeft;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.scrollTop = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'scrollTop' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject ? this._rawObject.scrollTop : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'width' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].scrollTop : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollTop;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).scrollTop;\r
} else {\r
\r
};\r
* transformX, Y は加える? アニメーション中は?\r
*/\r
// X_Node_CSS_transform,\r
-Node.prototype.x = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'x' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'left' );\r
- // this.css( X_Node_CSS_Unit.px, 'translateX' );\r
- return this._rawObject ? this._rawObject.offsetLeft : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'left' );\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'translateX' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].offsetLeft : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
// pixelLeft http://www.din.or.jp/~hagi3/JavaScript/JSTips/DHTML/ProbIE5.htm\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetLeft;\r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).offsetLeft;\r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.y = function(){\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+Node.prototype[ 'y' ] = function(){\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'top' );\r
- // this.css( X_Node_CSS_Unit.px, 'transisitonY' );\r
- return this._rawObject ? this._rawObject.offsetTop : 0;\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'top' );\r
+ // this[ 'css' ]( X_Node_CSS_Unit.px, 'transisitonY' );\r
+ return this[ '_rawObject' ] ? this[ '_rawObject' ].offsetTop : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetTop; \r
+ return ( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) ).offsetTop; \r
} else {\r
\r
};\r
};\r
\r
-Node.prototype.offset = function( /* xnodeParent */ ){\r
+Node.prototype[ 'offset' ] = function( /* xnodeParent */ ){\r
\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 };\r
+ if( ( this[ '_flags' ] & X_Node_State.IN_TREE ) === 0 || this[ '_flags' ] & X_Node_State.STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 };\r
\r
if( X.Doc.body === this || X.Doc.html === this ){\r
return { x : 0, y : 0 };\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- return this._rawObject ? X_Node_getPosition( this._rawObject ) : { x : 0, y : 0 };\r
+ return this[ '_rawObject' ] ? X_Node_getPosition( this[ '_rawObject' ] ) : { x : 0, y : 0 };\r
} else\r
if( X_UA_DOM.IE4 ){\r
- return X_Node_getPosition( this._rawObject || X_Node__ie4getRawNode( this ) );\r
+ return X_Node_getPosition( this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) );\r
} else {\r
\r
};\r
var X_Node_Attr_noValue = {\r
- checked : 1,\r
- compact : 1,\r
- declare : 1,\r
- defer : 1,\r
- disabled : 1,\r
- ismap : 1,\r
- multiple : 1,\r
- nohref : 1,\r
- noresize : 1,\r
- noshade : 1,\r
- nowrap : 1,\r
- readonly : 1,\r
- selected : 1\r
+ 'checked' : 1,\r
+ 'compact' : 1,\r
+ 'declare' : 1,\r
+ 'defer' : 1,\r
+ 'disabled' : 1,\r
+ 'ismap' : 1,\r
+ 'multiple' : 1,\r
+ 'nohref' : 1,\r
+ 'noresize' : 1,\r
+ 'noshade' : 1,\r
+ 'nowrap' : 1,\r
+ 'readonly' : 1,\r
+ 'selected' : 1\r
},\r
X_Node_Attr_renameForDOM = {\r
- 'class' : 'className',\r
- accesskey : 'accessKey',\r
- 'accept-charset' : 'acceptCharset',\r
- bgcolor : 'bgColor',\r
- cellpadding : 'cellPadding',\r
- cellspacing : 'cellSpacing',\r
- 'char' : 'ch',\r
- charoff : 'chOff',\r
- codebase : 'codeBase',\r
- codetype : 'codeType',\r
- colspan : 'colSpan',\r
- datetime : 'dateTime',\r
- 'for' : 'htmlFor',\r
- frameborder : 'frameBorder',\r
- 'http-equiv' : 'httpEquiv',\r
- ismap : 'isMap',\r
- longdesc : 'longDesc',\r
- maxlength : 'maxLength',\r
- nohref : 'noHref',\r
- readonly : 'readOnly',\r
- rowspan : 'rowSpan',\r
- tabindex : 'tabIndex',\r
- usemap : 'useMap',\r
- valuetype : 'valueType',\r
- checked : 'defaultChecked'\r
+ 'class' : 'className',\r
+ 'accesskey' : 'accessKey',\r
+ 'accept-charset' : 'acceptCharset',\r
+ 'bgcolor' : 'bgColor',\r
+ 'cellpadding' : 'cellPadding',\r
+ 'cellspacing' : 'cellSpacing',\r
+ 'char' : 'ch',\r
+ 'charoff' : 'chOff',\r
+ 'codebase' : 'codeBase',\r
+ 'codetype' : 'codeType',\r
+ 'colspan' : 'colSpan',\r
+ 'datetime' : 'dateTime',\r
+ 'for' : 'htmlFor',\r
+ 'frameborder' : 'frameBorder',\r
+ 'http-equiv' : 'httpEquiv',\r
+ 'ismap' : 'isMap',\r
+ 'longdesc' : 'longDesc',\r
+ 'maxlength' : 'maxLength',\r
+ 'nohref' : 'noHref',\r
+ 'readonly' : 'readOnly',\r
+ 'rowspan' : 'rowSpan',\r
+ 'tabindex' : 'tabIndex',\r
+ 'usemap' : 'useMap',\r
+ 'valuetype' : 'valueType',\r
+ 'checked' : 'defaultChecked'\r
},\r
\r
X_Node_Attr_HAS_VALUE = {\r
- INPUT : true,\r
- TEXTAREA : true,\r
- SELECT : true,\r
- BUTTON : true,\r
- OBJECT : true,\r
- PARAM : true // FlashVars が flash 側から書き換えられるケースがある??\r
+ 'INPUT' : true,\r
+ 'TEXTAREA' : true,\r
+ 'SELECT' : true,\r
+ 'BUTTON' : true,\r
+ 'OBJECT' : true,\r
+ 'PARAM' : true // FlashVars が flash 側から書き換えられるケースがある??\r
},\r
\r
// <input type=button,hidden,submit,reset,radio,checkbox> の場合、value の値はユーザーで変えることはない\r
// <input type=text,password,file> はユーザーによって常に変更される HTML5 ではこれにさらにいろいろ加わる\r
X_Node_Attr_STATIC_VALUE_TYPES = {\r
- button : true,\r
- hidden : true,\r
- submit : true,\r
- reset : true,\r
- radio : true,\r
- checkbox : true\r
+ 'button' : true,\r
+ 'hidden' : true,\r
+ 'submit' : true,\r
+ 'reset' : true,\r
+ 'radio' : true,\r
+ 'checkbox' : true\r
},\r
\r
// 自由な内容が入るため、参照文字への変換が必要\r
X_Node_Attr_toChrReferance = {\r
- value : true,\r
- title : true,\r
- alt : true\r
+ 'value' : true,\r
+ 'title' : true,\r
+ 'alt' : true\r
},\r
\r
X_Node_Attr_renameForTag = {};\r
// -> src (img, iframe, ), link の href, <param name="movie" src=>\r
// \r
function X_Node_Attr_objToAttrText( that, skipNetworkForElmCreation ){\r
- var obj = that._attrs,\r
+ var obj = that[ '_attrs' ],\r
noValue = X_Node_Attr_noValue,\r
attrs = [ '' ], // 先頭にスペース\r
plain = X_EMPTY_OBJECT,\r
n = 0, k, check;\r
\r
if( skipNetworkForElmCreation ){\r
- delete that._newAttrs;\r
+ delete that[ '_newAttrs' ];\r
// このあとで _newAttr にネットワーク系の属性を控える, attrText には加えない\r
} else {\r
- that._flags &= ~X_Node_State.OLD_ATTRTEXT;\r
+ that[ '_flags' ] &= ~X_Node_State.OLD_ATTRTEXT;\r
// 完全な attrText\r
};\r
\r
if( !obj ){ // Opera7\r
- delete that._attrText;\r
+ delete that[ '_attrText' ];\r
return '';\r
};\r
\r
\r
if( skipNetworkForElmCreation ){\r
check = false;\r
- switch( that._tag + k ){\r
+ switch( that[ '_tag' ] + k ){\r
case 'PARAMvalue' :\r
check = obj[ 'name' ] !== 'movie';\r
case 'INPUTsrc' :\r
case 'APPLETcode' :\r
//case 'AUDIOsrc' :\r
//case 'VIDEOsrc' :\r
- if( !that._newAttrs ) that._newAttrs = {};\r
- that._newAttrs[ k ] = obj[ k ];\r
+ if( !that[ '_newAttrs' ] ) that[ '_newAttrs' ] = {};\r
+ that[ '_newAttrs' ][ k ] = obj[ k ];\r
continue;\r
};\r
};\r
};\r
\r
if( 0 < n ){\r
- return that._attrText = attrs.join( ' ' );\r
+ return that[ '_attrText' ] = attrs.join( ' ' );\r
};\r
- delete that._attrText;\r
+ delete that[ '_attrText' ];\r
return '';\r
};\r
\r
(function( renameForDOM, renameForTag ){\r
- var k, i;\r
+ var k;\r
for( k in renameForDOM ){\r
//if( X_EMPTY_OBJECT[ k ] ) continue;\r
renameForTag[ renameForDOM[ k ] ] = k;\r
* className, onclick等 はここで設定しない\r
* \r
*/\r
-Node.prototype.attr = function( nameOrObj /* v */ ){\r
- var attrs = this._attrs, newAttrs, f, k, elm, v;\r
+Node.prototype[ 'attr' ] = function( nameOrObj /* v */ ){\r
+ var attrs = this[ '_attrs' ], newAttrs, f, k, elm, v;\r
\r
- if( !this._tag ) return this;\r
+ if( !this[ '_tag' ] ) return this;\r
\r
if( nameOrObj && X_Type_isObject( nameOrObj ) ){\r
- attrs || ( attrs = this._attrs = {} );\r
- newAttrs = this._newAttrs || ( this._newAttrs = {} );\r
+ attrs || ( attrs = this[ '_attrs' ] = {} );\r
+ newAttrs = this[ '_newAttrs' ] || ( this[ '_newAttrs' ] = {} );\r
\r
for( k in nameOrObj ){\r
//if( X_EMPTY_OBJECT[ k ] ) continue;\r
if( X_Node_Attr_setAttr( this, attrs, newAttrs, k, nameOrObj[ k ] ) === true ) f = true;\r
};\r
if( f ){\r
- delete this._attrText;\r
- this._flags |= X_Node_State.DIRTY_ATTR | X_Node_State.OLD_ATTRTEXT;\r
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
+ delete this[ '_attrText' ];\r
+ this[ '_flags' ] |= X_Node_State.DIRTY_ATTR | X_Node_State.OLD_ATTRTEXT;\r
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
};\r
return this;\r
} else\r
if( 1 < arguments.length ){\r
// setter\r
- if( X_Node_Attr_setAttr( this, attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
- delete this._attrText;\r
- this._flags |= X_Node_State.DIRTY_ATTR | X_Node_State.OLD_ATTRTEXT;\r
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
+ if( X_Node_Attr_setAttr( this, attrs || ( this[ '_attrs' ] = {} ), this[ '_newAttrs' ] || ( this[ '_newAttrs' ] = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
+ delete this[ '_attrText' ];\r
+ this[ '_flags' ] |= X_Node_State.DIRTY_ATTR | X_Node_State.OLD_ATTRTEXT;\r
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
};\r
return this;\r
} else\r
// getter\r
switch( nameOrObj ){\r
case 'id' :\r
- return this._id;\r
+ return this[ '_id' ];\r
case 'class' :\r
case 'className' :\r
- return this._className;\r
+ return this[ '_className' ];\r
case 'tag' :\r
case 'tagName' :\r
- return this._tag;\r
+ return this[ '_tag' ];\r
case 'style' :\r
case 'cssText' :\r
- return this.cssText();\r
+ return this[ 'cssText' ]();\r
\r
case 'src' : // src は遷移して変化する, name も?\r
- if( this._tag !== 'IFRAME' ) break;\r
- if( this._newAttrs && X_Object_inObject( nameOrObj, this._newAttrs ) ) return this._newAttrs[ nameOrObj ];\r
- if( elm = X_UA_DOM.IE4 ? this._rawObject || X_Node__ie4getRawNode( this ) : this._rawObject ){\r
- if( !attrs ) attrs = this._attrs = {};\r
+ if( this[ '_tag' ] !== 'IFRAME' ) break;\r
+ if( this[ '_newAttrs' ] && X_Object_inObject( nameOrObj, this[ '_newAttrs' ] ) ) return this[ '_newAttrs' ][ nameOrObj ];\r
+ if( elm = X_UA_DOM.IE4 ? this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) : this[ '_rawObject' ] ){\r
+ if( !attrs ) attrs = this[ '_attrs' ] = {};\r
return attrs[ nameOrObj ] = elm[ nameOrObj ]; // getAttribute( nameOrObj )?\r
};\r
break;\r
// kquery.js : safariのバグ対策\r
// if ($.browser.safari && key === "selected" && tmp) tmp.selectedIndex;\r
// 親ノードの selectedIndex の getter を呼んでおくと値が正しくなる、ということ?( by itozyun )\r
- if( X_UA[ 'WebKit' ] ) this._rawObject.parentNode && this._rawObject.parentNode.selectedIndex;\r
+ if( X_UA[ 'WebKit' ] ) this[ '_rawObject' ].parentNode && this[ '_rawObject' ].parentNode.selectedIndex;\r
case 'value' :\r
- if( this._tag === 'INPUT' && X_Node_Attr_STATIC_VALUE_TYPES[ attrs[ 'type' ] ] ) break;\r
+ if( this[ '_tag' ] === 'INPUT' && X_Node_Attr_STATIC_VALUE_TYPES[ attrs[ 'type' ] ] ) break;\r
case 'checked' :\r
case 'disabled' : \r
case 'selectedIndex' :\r
- if( X_Node_Attr_HAS_VALUE[ this._tag ] ){\r
- if( this._newAttrs && X_Object_inObject( nameOrObj, this._newAttrs ) ) return this._newAttrs[ nameOrObj ];\r
- if( elm = X_UA_DOM.IE4 ? this._rawObject || X_Node__ie4getRawNode( this ) : this._rawObject ){\r
- if( !attrs ) attrs = this._attrs = {};\r
+ if( X_Node_Attr_HAS_VALUE[ this[ '_tag' ] ] ){\r
+ if( this[ '_newAttrs' ] && X_Object_inObject( nameOrObj, this[ '_newAttrs' ] ) ) return this[ '_newAttrs' ][ nameOrObj ];\r
+ if( elm = X_UA_DOM.IE4 ? this[ '_rawObject' ] || X_Node__ie4getRawNode( this ) : this[ '_rawObject' ] ){\r
+ if( !attrs ) attrs = this[ '_attrs' ] = {};\r
return attrs[ nameOrObj ] = elm[ nameOrObj ]; // getAttribute( nameOrObj )?\r
};\r
};\r
case 'tagName' :\r
return;\r
case 'id' :\r
- v = ( v !== 'ie4uid' + that._uid ) ? v : undefined;\r
+ v = ( v !== 'ie4uid' + that[ '_uid' ] ) ? v : undefined;\r
// TODO unique の check\r
- if( v !== that._id ){\r
- that._id = v;\r
- that._flags |= X_Node_State.DIRTY_ID;\r
- that._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
+ if( v !== that[ '_id' ] ){\r
+ that[ '_id' ] = v;\r
+ that[ '_flags' ] |= X_Node_State.DIRTY_ID;\r
+ that[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
};\r
return; \r
case 'class' :\r
case 'className' :\r
- return that.className( v );\r
+ return that[ 'className' ]( v );\r
case 'style' :\r
case 'cssText' :\r
- return that.cssText( v );\r
+ return that[ 'cssText' ]( v );\r
case 'text' :\r
- return that.text( v );\r
+ return that[ 'text' ]( v );\r
case 'html' :\r
- return that.html( v );\r
+ return that[ 'html' ]( v );\r
};\r
// debug\r
if( name.indexOf( 'on' ) === 0 ){\r
var
-X_node_CSS_getComputedStyle = window.getComputedStyle || document.defaultView && document.defaultView.getComputedStyle,
-
- /* font-size -> fontSize */
-X_Node_CSS__DICTIONARY_CAMELIZE = {},
-
- /* fontSize -> font-size */
-X_Node_CSS_CHAR_CODE_A = 'A'.charCodeAt( 0 ),
+ X_Node_CSS_getComputedStyle = window.getComputedStyle || document.defaultView && document.defaultView.getComputedStyle,
+
+ /* font-size -> fontSize */
+ X_Node_CSS__DICTIONARY_CAMELIZE = {},
-X_Node_CSS__DICTIONARY_UNCAMELIZE = {},
+ /* fontSize -> font-size */
+ X_Node_CSS_CHAR_CODE_A = 'A'.charCodeAt( 0 ),
+
+ X_Node_CSS__DICTIONARY_UNCAMELIZE = {},
/*
* CSS における display, position, float プロパティの相互関係
_FLOAT_BOX
_GRNERAL
*/
-X_Node_CSS_VENDER_PREFIX = {},
-
-X_Node_CSS__CLIP_SEPARATOR = X_UA[ 'IE' ] < 8 ? ' ' : ',',
-
-X_Node_CSS__UNIT_RATIO = {},
-X_Node_CSS__FONT_SIZE_RATIO = {},
+ X_Node_CSS_VENDER_PREFIX = {},
+
+ X_Node_CSS__CLIP_SEPARATOR = X_UA[ 'IE' ] < 8 ? ' ' : ',',
+
+ X_Node_CSS__UNIT_RATIO = {},
+ X_Node_CSS__FONT_SIZE_RATIO = {},
// https://developer.mozilla.org/en-US/docs/Web/CSS/transform
// Firefox 3.5, ie9, Opera 10.5, Safari 3.1, Chrome
// ブラウザ毎の getComputedStyle の戻り値 http://d.hatena.ne.jp/uupaa/20080928/1222543331
-X_Node_CSS_COLOR = {
- BLACK : 0x0,
- RED : 0xFF0000,
- LIME : 0x00FF00,
- BLUE : 0x0000FF,
- YELLOW : 0xFFFF00,
- AQUA : 0x00FFFF,
- CYAN : 0x00FFFF,
- MAGENTA : 0xFF00FF,
- FUCHSIA : 0xFF00FF,
- WHITE : 0xFFFFFF,
- GREEN : 0x008000,
- PURPLE : 0x800080,
- MAROON : 0x800000,
- NAVY : 0x000080,
- OLIVE : 0x808000,
- TEAL : 0x008080,
- GRAY : 0x808080,
- SILVER : 0xC0C0C0,
- DIMGRAY : 0x696969,
- SLATEGRAY : 0x708090,
- DARKGRAY : 0xA9A9A9,
- GAINSBORO : 0xDCDCDC,
- MIDNIGHTBLUE : 0x191970,
- SLATEBLUE : 0x6A5ACD,
- MEDIUMBLUE : 0x0000CD,
- ROYALBLUE : 0x4169E1,
- DODGERBLUE : 0x1E90FF,
- SKYBLUE : 0x87CEEB,
- STEELBLUE : 0x4682B4,
- LIGHTBLUE : 0xADD8E6,
- PALETURQUOISE : 0xAFEEEE,
- TURQUOISE : 0x40E0D0,
- LIGHTCYAN : 0xE0FFFF,
- AQUAMARINE : 0x7FFFD4,
- DARKGREEN : 0x006400,
- SEAGREEN : 0x2E8B57,
- LIGHTGREEN : 0x90EE90,
- CHARTREUSE : 0x7FFF00,
- GREENYELLOW : 0xADFF2F,
- LIMEGREEN : 0x32CD32,
- YELLOWGREEN : 0x9ACD32,
- OLIVEDRAB : 0x6B8E23,
- DARKKHAKI : 0xBCB76B,
- PALEGOLDENROD : 0xEEE8AA,
- LIGHTYELLOW : 0xFFFFE0,
- GOLD : 0xFFD700,
- GOLDENROD : 0xDAA520,
- DARKGOLDENROD : 0xB8860B,
- ROSYBROWN : 0xBC8F8F,
- INDIANRED : 0xCD5C5C,
- SADDLEBROWN : 0x8B4513,
- SIENNA : 0xA0522D,
- PERU : 0xCD853F,
- BURLYWOOD : 0xDEB887,
- BEIGE : 0xF5F5DC,
- WHEAT : 0xF5DEB3,
- SANDYBROWN : 0xF4A460,
- TAN : 0xD2B48C,
- CHOCOLATE : 0xD2691E,
- FIREBRICK : 0xB22222,
- BROWN : 0xA52A2A,
- SALMON : 0xFA8072,
- ORANGE : 0xFFA500,
- CORAL : 0xFF7F50,
- TOMATO : 0xFF6347,
- HOTPINK : 0xFF69B4,
- PINK : 0xFFC0CB,
- DEEPPINK : 0xFF1493,
- PALEVIOLETRED : 0xDB7093,
- VIOLET : 0xEE82EE,
- PLUM : 0xDDA0DD,
- ORCHILD : 0xDA70D6,
- DARKVIOLET : 0x9400D3,
- BLUEVIOLET : 0x8A2BE2,
- MEDIUMPURPLE : 0x9370DB,
- THISTLE : 0xD8BFD8,
- LAVENDER : 0xE6E6FA,
- MISTYROSE : 0xFFE4E1,
- IVORY : 0xFFFFF0,
- LEMONCHIFFON : 0xFFFACD
-};
+ X_Node_CSS_COLOR = {
+ 'BLACK' : 0x0,
+ 'RED' : 0xFF0000,
+ 'LIME' : 0x00FF00,
+ 'BLUE' : 0x0000FF,
+ 'YELLOW' : 0xFFFF00,
+ 'AQUA' : 0x00FFFF,
+ 'CYAN' : 0x00FFFF,
+ 'MAGENTA' : 0xFF00FF,
+ 'FUCHSIA' : 0xFF00FF,
+ 'WHITE' : 0xFFFFFF,
+ 'GREEN' : 0x008000,
+ 'PURPLE' : 0x800080,
+ 'MAROON' : 0x800000,
+ 'NAVY' : 0x000080,
+ 'OLIVE' : 0x808000,
+ 'TEAL' : 0x008080,
+ 'GRAY' : 0x808080,
+ 'SILVER' : 0xC0C0C0,
+ 'DIMGRAY' : 0x696969,
+ 'SLATEGRAY' : 0x708090,
+ 'DARKGRAY' : 0xA9A9A9,
+ 'GAINSBORO' : 0xDCDCDC,
+ 'MIDNIGHTBLUE' : 0x191970,
+ 'SLATEBLUE' : 0x6A5ACD,
+ 'MEDIUMBLUE' : 0x0000CD,
+ 'ROYALBLUE' : 0x4169E1,
+ 'DODGERBLUE' : 0x1E90FF,
+ 'SKYBLUE' : 0x87CEEB,
+ 'STEELBLUE' : 0x4682B4,
+ 'LIGHTBLUE' : 0xADD8E6,
+ 'PALETURQUOISE' : 0xAFEEEE,
+ 'TURQUOISE' : 0x40E0D0,
+ 'LIGHTCYAN' : 0xE0FFFF,
+ 'AQUAMARINE' : 0x7FFFD4,
+ 'DARKGREEN' : 0x006400,
+ 'SEAGREEN' : 0x2E8B57,
+ 'LIGHTGREEN' : 0x90EE90,
+ 'CHARTREUSE' : 0x7FFF00,
+ 'GREENYELLOW' : 0xADFF2F,
+ 'LIMEGREEN' : 0x32CD32,
+ 'YELLOWGREEN' : 0x9ACD32,
+ 'OLIVEDRAB' : 0x6B8E23,
+ 'DARKKHAKI' : 0xBCB76B,
+ 'PALEGOLDENROD' : 0xEEE8AA,
+ 'LIGHTYELLOW' : 0xFFFFE0,
+ 'GOLD' : 0xFFD700,
+ 'GOLDENROD' : 0xDAA520,
+ 'DARKGOLDENROD' : 0xB8860B,
+ 'ROSYBROWN' : 0xBC8F8F,
+ 'INDIANRED' : 0xCD5C5C,
+ 'SADDLEBROWN' : 0x8B4513,
+ 'SIENNA' : 0xA0522D,
+ 'PERU' : 0xCD853F,
+ 'BURLYWOOD' : 0xDEB887,
+ 'BEIGE' : 0xF5F5DC,
+ 'WHEAT' : 0xF5DEB3,
+ 'SANDYBROWN' : 0xF4A460,
+ 'TAN' : 0xD2B48C,
+ 'CHOCOLATE' : 0xD2691E,
+ 'FIREBRICK' : 0xB22222,
+ 'BROWN' : 0xA52A2A,
+ 'SALMON' : 0xFA8072,
+ 'ORANGE' : 0xFFA500,
+ 'CORAL' : 0xFF7F50,
+ 'TOMATO' : 0xFF6347,
+ 'HOTPINK' : 0xFF69B4,
+ 'PINK' : 0xFFC0CB,
+ 'DEEPPINK' : 0xFF1493,
+ 'PALEVIOLETRED' : 0xDB7093,
+ 'VIOLET' : 0xEE82EE,
+ 'PLUM' : 0xDDA0DD,
+ 'ORCHILD' : 0xDA70D6,
+ 'DARKVIOLET' : 0x9400D3,
+ 'BLUEVIOLET' : 0x8A2BE2,
+ 'MEDIUMPURPLE' : 0x9370DB,
+ 'THISTLE' : 0xD8BFD8,
+ 'LAVENDER' : 0xE6E6FA,
+ 'MISTYROSE' : 0xFFE4E1,
+ 'IVORY' : 0xFFFFF0,
+ 'LEMONCHIFFON' : 0xFFFACD
+ };
function X_Node_CSS_parseColor( x ){
var rgb, r, g, b;
};
function X_Node_CSS_objToCssText( that, skipFilter ){
- var obj = that._css,
+ var obj = that[ '_css' ],
plain = X_EMPTY_OBJECT,
css = [],
n = -1,
p, v, specialFix, filterFix;
- that._flags &= ~X_Node_State.OLD_CSSTEXT;
+ that[ '_flags' ] &= ~X_Node_State.OLD_CSSTEXT;
if( !obj ){ // Opera7.5 未満?
- delete that._cssText;
+ delete that[ '_cssText' ];
return '';
};
if( 0 <= n ){
// cssText には完全なものを控えるが、戻すのは filter を抜いたもの
- that._cssText = css.join( ';' );
+ that[ '_cssText' ] = css.join( ';' );
if( skipFilter ){
--css.length;
return css.join( ';' );
};
- return that._cssText;
+ return that[ '_cssText' ];
};
- delete that._cssText;
+ delete that[ '_cssText' ];
return '';
};
X_Node_CSS_FILTER_FIX_PROPS =
X_UA[ 'ActiveX' ] && X_UA[ 'IE' ] < 9 && !X_UA[ 'MacIE' ] ?
{
- opacity : 2,
- boxShadow : 3,
- textShadow : 4,
- transform : 5
+ 'opacity' : 2,
+ 'boxShadow' : 3,
+ 'textShadow' : 4,
+ 'transform' : 5
} :
X_UA[ 'ActiveX' ] && X_UA[ 'IE9' ] ? // == 9
{
- textShadow : 4
+ 'textShadow' : 4
} :
null;
function X_Node_CSS_objToIEFilterText( that, opt_css ){
- var obj = opt_css || that._css,
+ var obj = opt_css || that[ '_css' ],
test = X_Node_CSS_FILTER_FIX_PROPS,
filters = [],
n = -1,
};
if( afterUpdate ){
// AFTER_UPDATE 時に 再計算
- X_ViewPort.listenOnce( X_Event.AFTER_UPDATE, that, X_Node_CSS_onAfterUpdateForIEFilterFix );
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, that, X_Node_CSS_onAfterUpdateForIEFilterFix );
break;
};
dir = Math.atan2( params[ 1 ] + params[ 3 ], params[ 0 ] + params[ 3 ] ) * 180 / Math.PI + 90;
};
function X_Node_CSS_onAfterUpdateForIEFilterFix(){
- if( this._flags & X_Node_State.IN_TREE ){ // 要素があり、要素がツリーに属している
- this._flags |= X_Node_State.DIRTY_IE_FILTER;
+ if( this[ '_flags' ] & X_Node_State.IN_TREE ){ // 要素があり、要素がツリーに属している
+ this[ '_flags' ] |= X_Node_State.DIRTY_IE_FILTER;
X_Node_reserveUpdate();
};
};
// obj setter
// name, value setter
-Node.prototype.css = function( nameOrObj /* orUnitID, valuOrUnitOrName */ ){
+Node.prototype[ 'css' ] = function( nameOrObj /* orUnitID, valuOrUnitOrName */ ){
var args = arguments,
- css = this._css,
+ css = this[ '_css' ],
p, name, v, plain, camelize, flags;
- if( !this._tag || X_Dom_DTD_MOVE_TO_HEAD[ this._tag ] || this._tag === 'SCRIPT' ) return this;
+
+ if( !this[ '_tag' ] || X_Dom_DTD_MOVE_TO_HEAD[ this[ '_tag' ] ] || this[ '_tag' ] === 'SCRIPT' ) return this;
// setter:object
if( X_Type_isObject( nameOrObj ) ){
- if( !css ) css = this._css = {};
+ if( !css ) css = this[ '_css' ] = {};
plain = X_EMPTY_OBJECT;
camelize = X_Node_CSS_camelize;
- flags = this._flags;
+ flags = this[ '_flags' ];
for( p in nameOrObj ){
if( plain[ p ] ) continue;
name = camelize( p );
if( css[ name ] === v ) continue;
flags = X_Node_CSS_setStyle( css, flags, name, v );
};
- this._flags |= X_Node_State.DIRTY_CSS | X_Node_State.OLD_CSSTEXT;
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();
- delete this._cssText;
+ this[ '_flags' ] |= X_Node_State.DIRTY_CSS | X_Node_State.OLD_CSSTEXT;
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();
+ delete this[ '_cssText' ];
return this;
} else
if( 1 < args.length ){
// setter name, value
- if( !css ) css = this._css = {};
+ if( !css ) css = this[ '_css' ] = {};
name = X_Node_CSS_camelize( nameOrObj );
v = args[ 1 ];
if( css[ name ] === v ) return this;
- this._flags = X_Node_CSS_setStyle( css, this._flags, name, v ) | X_Node_State.DIRTY_CSS | X_Node_State.OLD_CSSTEXT;
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();
- delete this._cssText;
+ this[ '_flags' ] = X_Node_CSS_setStyle( css, this[ '_flags' ], name, v ) | X_Node_State.DIRTY_CSS | X_Node_State.OLD_CSSTEXT;
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();
+ delete this[ '_cssText' ];
return this;
};
// getter
return flags;
};
-Node.prototype.cssText = function( v ){
+Node.prototype[ 'cssText' ] = function( v ){
var obj, i, l, attr, name;
- if( v === this._cssText && ( this._flags & X_Node_State.OLD_CSSTEXT ) === 0 ){
+ if( v === this[ '_cssText' ] && ( this[ '_flags' ] & X_Node_State.OLD_CSSTEXT ) === 0 ){
return this;
};
if( v === '' ){
- delete this._css;
- delete this._cssText;
- this._flags |= X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;
- this._flags &= ~X_Node_State.OLD_CSSTEXT;
- this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();
+ delete this[ '_css' ];
+ delete this[ '_cssText' ];
+ this[ '_flags' ] |= X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;
+ this[ '_flags' ] &= ~X_Node_State.OLD_CSSTEXT;
+ this[ '_flags' ] & X_Node_State.IN_TREE && X_Node_reserveUpdate();
return this;
} else
if( X_Type_isString( v ) ){
- delete this._css;
+ delete this[ '_css' ];
obj = {};
- v = v.split( ';' ); // TODO content ";" などにも対応 <- 不要 :before :after 疑似要素には触らない
+ v = v.split( ';' ); // TODO content ";" などにも対応 <- 不要 :before :after 疑似要素には触らない
for( i = 0, l = v.length; i < l; ++i ){
attr = v[ i ].split( ':' );
( name = attr[ 0 ] ) && ( obj[ name ] = attr[ 1 ] || true );
};
- return this.css( obj );
+ return this[ 'css' ]( obj );
};
// getter
- this._flags & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( this );
- return this._cssText;
+ this[ '_flags' ] & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( this );
+ return this[ '_cssText' ];
};
/*
*/
var
X_Node_CSS_getCharSize =
- X_node_CSS_getComputedStyle ?
+ X_Node_CSS_getComputedStyle ?
(function( that ){
X_Node_updateTimerID && X_Node_startUpdate();
if( that === X_Node_body && X_ViewPort_baseFontSize ) return X_ViewPort_baseFontSize;
- if( that._fontSize ) return that._fontSize;
- return that._fontSize = parseFloat( X_node_CSS_getComputedStyle( that._rawObject, null ).fontSize );
+ if( that[ '_fontSize' ] ) return that[ '_fontSize' ];
+ return that[ '_fontSize' ] = parseFloat( X_Node_CSS_getComputedStyle( that[ '_rawObject' ], null ).fontSize );
}) :
5 <= X_UA[ 'IE' ] ?
var font, vu, v, u, _v;
X_Node_updateTimerID && X_Node_startUpdate();
if( that === X_Node_body && X_ViewPort_baseFontSize ) return X_ViewPort_baseFontSize;
- if( that._fontSize ) return that._fontSize;
+ if( that[ '_fontSize' ] ) return that[ '_fontSize' ];
- font = that._rawObject.currentStyle.fontSize;
- //font = that._css && that._css.fontSize || '1em';
+ font = that[ '_rawObject' ].currentStyle.fontSize;
+ //font = that[ '_css' ] && that[ '_css' ].fontSize || '1em';
vu = X_Node_CSS__splitValueAndUnit( font );
v = vu[ 0 ];
u = vu[ 1 ];
if( v === 0 ){
- if( v = X_Node_CSS__FONT_SIZE_RATIO[ font ] ) return that._fontSize = v;
+ if( v = X_Node_CSS__FONT_SIZE_RATIO[ font ] ) return that[ '_fontSize' ] = v;
} else {
- if( _v = X_Node_CSS__UNIT_RATIO[ u ] ) return that._fontSize = v / _v;
+ if( _v = X_Node_CSS__UNIT_RATIO[ u ] ) return that[ '_fontSize' ] = v / _v;
};
switch( u ){
case 'px' :
- return that._fontSize = v;
+ return that[ '_fontSize' ] = v;
case 'em' :
// body まで辿ってしまった場合は?
- if( that.parent ) return that._fontSize = X_Node_CSS_getCharSize( that.parent ) * v;
+ if( that.parent ) return that[ '_fontSize' ] = X_Node_CSS_getCharSize( that.parent ) * v;
break;
case '%' :
// body まで辿ってしまった場合は?
- if( that.parent ) return that._fontSize = X_Node_CSS_getCharSize( that.parent ) * v / 100;
+ if( that.parent ) return that[ '_fontSize' ] = X_Node_CSS_getCharSize( that.parent ) * v / 100;
};
return 0;
}) :
var elm, v;
X_Node_updateTimerID && X_Node_startUpdate();
if( that === X_Node_body && X_ViewPort_baseFontSize ) return X_ViewPort_baseFontSize;
- if( that._fontSize ) return that._fontSize;
+ if( that[ '_fontSize' ] ) return that[ '_fontSize' ];
- that._rawObject.appendChild( elm = document.createElement( 'span' ) );
+ that[ '_rawObject' ].appendChild( elm = document.createElement( 'span' ) );
elm.style.cssText = 'display:block;position:absolute;top:0;left:0;visivility:hidden;line-height:1;height:1em;';
elm.innerHTML = 'X';
v = elm.offsetHeight;
- that._rawObject.removeChild( elm );
- return that._fontSize = v;
+ that[ '_rawObject' ].removeChild( elm );
+ return that[ '_fontSize' ] = v;
}) :
X_UA_DOM.IE4 ?
(function( that ){
var font, vu, v, u, _v;
X_Node_updateTimerID && X_Node_startUpdate();
if( that === X_Node_body && X_ViewPort_baseFontSize ) return X_ViewPort_baseFontSize;
- if( that._fontSize ) return that._fontSize;
+ if( that[ '_fontSize' ] ) return that[ '_fontSize' ];
- if( that._css && ( font = that._css.fontSize ) ){
+ if( that[ '_css' ] && ( font = that[ '_css' ].fontSize ) ){
vu = X_Node_CSS__splitValueAndUnit( font );
v = vu[ 0 ];
u = vu[ 1 ];
if( v === 0 ){
- if( _v = X_Node_CSS__FONT_SIZE_RATIO[ font ] ) return that._fontSize = _v;
+ if( _v = X_Node_CSS__FONT_SIZE_RATIO[ font ] ) return that[ '_fontSize' ] = _v;
} else {
- if( _v = X_Node_CSS__UNIT_RATIO[ u ] ) return that._fontSize = v / _v;
+ if( _v = X_Node_CSS__UNIT_RATIO[ u ] ) return that[ '_fontSize' ] = v / _v;
};
} else {
// 要素を生成して測定!
- ( that._rawObject || X_Node__ie4getRawNode( that ) ).insertAdjacentHTML( 'BeforeEnd', '<div id="ie4charsize" style="position:absolute;top:0;left:0;visivility:hidden;line-height:1;height:1em;">X</div>' );
+ ( that[ '_rawObject' ] || X_Node__ie4getRawNode( that ) ).insertAdjacentHTML( 'BeforeEnd', '<div id="ie4charsize" style="position:absolute;top:0;left:0;visivility:hidden;line-height:1;height:1em;">X</div>' );
elm = document.all[ 'ie4charsize' ];
v = elm.offsetHeight;
elm.removeAttribute( 'id' ); // ?
elm.outerHTML = '';
- return that._fontSize = v;
+ return that[ '_fontSize' ] = v;
};
switch( u ){
case 'px' :
- return that._fontSize = v;
+ return that[ '_fontSize' ] = v;
case 'em' :
// body まで辿ってしまった場合は?
- if( that.parent ) return that._fontSize = X_Node_CSS_getCharSize( that.parent ) * v;
+ if( that.parent ) return that[ '_fontSize' ] = X_Node_CSS_getCharSize( that.parent ) * v;
break;
case '%' :
// body まで辿ってしまった場合は?
- if( that.parent ) return that._fontSize = X_Node_CSS_getCharSize( that.parent ) * v / 100;
+ if( that.parent ) return that[ '_fontSize' ] = X_Node_CSS_getCharSize( that.parent ) * v / 100;
};
return 0;
}) :
X_Node_CSS_SPECIAL_FIX_PROP = {
- transitionDuration : X_UA[ 'Android' ] && !X_UA[ 'Chrome' ] && function( v ){ // bad Android
+ 'transitionDuration' : X_UA[ 'Android' ] && !X_UA[ 'Chrome' ] && function( v ){ // bad Android
return parseFloat( v ) === 0 ? '0.001s' : v;
}
};
-X.CSS = {
+/**
+ * @namespace X.CSS
+ */
+X[ 'CSS' ] = {
- VENDER_PREFIX : X_Node_CSS_VENDER_PREFIX,
+ 'VENDER_PREFIX' : X_Node_CSS_VENDER_PREFIX,
// iscroll で使用
- uncamelize : X_Node_CSS_uncamelize,
+ 'uncamelize' : X_Node_CSS_uncamelize,
- Support : X_Node_CSS_Support
+ 'Support' : X_Node_CSS_Support
};
/*
})();
-X_ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){
+X_ViewPort[ 'listenOnce' ]( X_EVENT_INIT, function(){
var xnode = X_Node_systemNode,
output = X_Node_CSS__UNIT_RATIO,
list = 'cm,mm,in,pt,pc'.split( ',' ),
for( i = list.length; i; ){
unit = list[ --i ];
- output[ unit ] = xnode.css( 'width', 10 + unit ).width() / 10;
+ output[ unit ] = xnode[ 'css' ]( 'width', 10 + unit )[ 'width' ]() / 10;
};
output = X_Node_CSS__FONT_SIZE_RATIO,
list = 'xx-large,x-large,large,larger,medium,small,smaller,x-small,xx-small'.split( ',' );
- xnode.css( { lineHeight : '100%', height : '1em' } ).text( 'X' );
+ xnode[ 'css' ]( { lineHeight : '100%', height : '1em' } )[ 'text' ]( 'X' );
for( i = list.length; i; ){
size = list[ --i ];
- output[ size ] = xnode.css( 'fontSize', size ).height();// / base;
+ output[ size ] = xnode[ 'css' ]( 'fontSize', size )[ 'height' ]();// / base;
};
- xnode.cssText( '' ).empty();
+ xnode[ 'cssText' ]( '' )[ 'empty' ]();
});
};\r
\r
if( ( l = args.length ) === 1 ) return new Node( args[ 0 ] );\r
- if( !this || this.append !== X_NodeList.prototype.append ) return new X_NodeList( args );\r
+ if( !this || this[ 'append' ] !== X_NodeList.prototype[ 'append' ] ) return new X_NodeList( args );\r
\r
for( i = 0; i < l; ++i ){\r
xnode = args[ i ];\r
};\r
X_NodeList.prototype.length = 0;\r
\r
-X_NodeList.prototype.each = function( func /* opt_args... */ ){\r
+X_NodeList.prototype[ 'each' ] = function( func /* opt_args... */ ){\r
var l = this.length,\r
i = 0, args;\r
\r
};\r
\r
// セレクター\r
- X.Doc.find = X_shortcutFunction = Node.prototype.find = X_NodeList.prototype.find = function ( queryString ){\r
+ X[ 'Doc' ][ 'find' ] = X_shortcutFunction = Node.prototype[ 'find' ] = X_NodeList.prototype[ 'find' ] = function ( queryString ){\r
var HTML = X_Node_html,\r
scope = this.constructor === X_NodeList && this.length ? this : [ this.constructor === Node ? this : X_Node_body ],\r
parents = scope, // 探索元の親要素 XNodeList の場合あり\r
links, className, attr, flag;\r
\r
/*@+debug[*/\r
- if( X_ViewPort_readyState < X_Event.XDOM_READY ){\r
- alert( 'not ready! use X.ViewPort.listenOnce( X_Event.XDOM_READY, callback )' );\r
+ if( X_ViewPort_readyState < X_EVENT_XDOM_READY ){\r
+ alert( 'not ready! use X.ViewPort.listenOnce( X_EVENT_XDOM_READY, callback )' );\r
return;\r
};\r
/*]@+debug*/\r
// > TagName|*\r
case 2 :\r
for( ; i < l; ++i ){\r
- for( xnode = parents[ i ].firstChild(); xnode; xnode = xnode.next() ){\r
- if( xnode._tag && ( isAll || tagName === xnode._tag ) ) xnodes[ ++n ] = xnode;\r
+ for( xnode = parents[ i ][ 'firstChild' ](); xnode; xnode = xnode[ 'next' ]() ){\r
+ if( xnode[ '_tag' ] && ( isAll || tagName === xnode[ '_tag' ] ) ) xnodes[ ++n ] = xnode;\r
}; \r
};\r
break;\r
// + TagName|*\r
case 3 :\r
for( ; i < l; ++i ){\r
- for( xnode = parents[ i ].next(); xnode; xnode = xnode.next() ){\r
- if( xnode._tag ){\r
- if( isAll || tagName === xnode._tag ) xnodes[ ++n ] = xnode;\r
+ for( xnode = parents[ i ][ 'next' ](); xnode; xnode = xnode[ 'next' ]() ){\r
+ if( xnode[ '_tag' ] ){\r
+ if( isAll || tagName === xnode[ '_tag' ] ) xnodes[ ++n ] = xnode;\r
break;\r
}; \r
}; \r
case 4 :\r
merge = {};\r
for( ; i < l; ++i ){\r
- for( xnode = parents[ i ].next(); xnode; xnode = xnode.next() ){\r
- if( xnode._tag && ( isAll || tagName === xnode._tag ) ){\r
- uid = xnode._uid;\r
+ for( xnode = parents[ i ][ 'next' ](); xnode; xnode = xnode[ 'next' ]() ){\r
+ if( xnode[ '_tag' ] && ( isAll || tagName === xnode[ '_tag' ] ) ){\r
+ uid = xnode[ '_uid' ];\r
if( merge[ uid ] ){\r
break;\r
} else {\r
//console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
for( ; i < l; ++i ){\r
xnode = parents[ i ];\r
- xnode._xnodes && xnode._xnodes.length && X_Node_Selector__fetchElements( xnodes, xnode, isAll ? null : tagName );\r
+ xnode[ '_xnodes' ] && xnode[ '_xnodes' ].length && X_Node_Selector__fetchElements( xnodes, xnode, isAll ? null : tagName );\r
};\r
//console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
};\r
if( !isXML && key === 'class' && op === 3 ){\r
val = _ + val + _;\r
for( i = 0, n = -1; xnode = xnodes[ i ]; ++i ){\r
- className = xnode._className;\r
+ className = xnode[ '_className' ];\r
if( !!( className && ( _ + className + _ ).indexOf( val ) > -1 ) ^ isNot ) tmp[ ++n ] = xnode;\r
};\r
} else {\r
for( i = 0, n = -1, l = xnodes.length; i < l; ++i ){\r
xnode = xnodes[ i ];\r
attr =\r
- key === 'id' ? xnode._id :\r
- key === 'class' ? xnode._className :\r
- xnode._attrs && xnode._attrs[ key ];\r
+ key === 'id' ? xnode[ '_id' ] :\r
+ key === 'class' ? xnode[ '_className' ] :\r
+ xnode[ '_attrs' ] && xnode[ '_attrs' ][ key ];\r
//flag_call ?\r
// funcAttr( elem, key ) :\r
//useName ?\r
for( i = 0, n = -1; i < l; ++i ){\r
//alert( 'multi:' + i )\r
xnode = ret[ i ];\r
- if( !merge[ uid = xnode._uid ] ){\r
+ if( !merge[ uid = xnode[ '_uid' ] ] ){\r
merge[ uid ] = true;\r
xnodes[ ++n ] = xnode;\r
};\r
};\r
- X_Node_Selector__sortElementOrder( ret = [], xnodes, hasRoot ? [ HTML ] : HTML._xnodes );\r
+ X_Node_Selector__sortElementOrder( ret = [], xnodes, hasRoot ? [ HTML ] : HTML[ '_xnodes' ] );\r
xnodes = ret;\r
};\r
\r
j, child, _xnodes;\r
for( ; i < l; ++i ){\r
child = xnodes[ i ];\r
- if( !child._tag ) continue;\r
- //console.log( child._tag );\r
+ if( !child[ '_tag' ] ) continue;\r
+ //console.log( child[ '_tag' ] );\r
if( ( j = list.indexOf( child ) ) !== -1 ){\r
newList[ newList.length ] = child;\r
list.splice( j, 1 );\r
};\r
if( list.length === 0 ) return true;\r
};\r
- if( ( _xnodes = child._xnodes ) && X_Node_Selector__sortElementOrder( newList, list, _xnodes ) ){\r
+ if( ( _xnodes = child[ '_xnodes' ] ) && X_Node_Selector__sortElementOrder( newList, list, _xnodes ) ){\r
return true;\r
};\r
};\r
};\r
\r
function X_Node_Selector__fetchElements( list, parent, tag ){\r
- var xnodes = parent._xnodes,\r
+ var xnodes = parent[ '_xnodes' ],\r
l = xnodes.length,\r
i = 0,\r
child;\r
for( ; i < l; ++i ){\r
child = xnodes[ i ];\r
- if( child._tag ){\r
- ( !tag || child._tag === tag ) && ( list[ list.length ] = child );\r
- //console.log( parent._tag + ' > ' + child._tag + ' == ' + tag+ ' l:' + list.length );\r
- child._xnodes && child._xnodes.length && X_Node_Selector__fetchElements( list, child, tag );\r
+ if( child[ '_tag' ] ){\r
+ ( !tag || child[ '_tag' ] === tag ) && ( list[ list.length ] = child );\r
+ //console.log( parent[ '_tag' ] + ' > ' + child[ '_tag' ] + ' == ' + tag+ ' l:' + list.length );\r
+ child[ '_xnodes' ] && child[ '_xnodes' ].length && X_Node_Selector__fetchElements( list, child, tag );\r
};\r
};\r
};\r
i = 0, n = -1, xnode, node,\r
tagName, tmp;\r
for( ; xnode = xnodes[ i ]; ++i ){\r
- tagName = flag_all || xnode._tag;\r
+ tagName = flag_all || xnode[ '_tag' ];\r
tmp = null;\r
if( /* tmp === null && */ type <= 0 ){\r
- for( node = xnode.prev(); node; node = node.prev() ){\r
- if( node._tag && ( flag_all || tagName === node._tag ) ){\r
+ for( node = xnode[ 'prev' ](); node; node = node[ 'prev' ]() ){\r
+ if( node[ '_tag' ] && ( flag_all || tagName === node[ '_tag' ] ) ){\r
tmp = false;\r
break;\r
};\r
};\r
};\r
if( tmp === null && 0 <= type ){\r
- for( node = xnode.next(); node; node = node.next() ){\r
- if( node._tag && ( flag_all || tagName === node._tag ) ){\r
+ for( node = xnode[ 'next' ](); node; node = node[ 'next' ]() ){\r
+ if( node[ '_tag' ] && ( flag_all || tagName === node[ '_tag' ] ) ){\r
tmp = false;\r
break;\r
}; \r
i = 0, n = -1, uid,\r
c, xnode, tmp, node, tagName;\r
for( ; xnode = xnodes[ i ]; ++i ){\r
- uid = xnode._uid;\r
+ uid = xnode[ '_uid' ];\r
tmp = checked[ uid ];\r
if( tmp === void 0 ){\r
- for( c = 0, node = xnode.parent[ pointer ](), tagName = flag_all || xnode._tag; node; node = node[ sibling ]() ){\r
- if( node._tag && ( flag_all || tagName === node._tag ) ){\r
+ for( c = 0, node = xnode.parent[ pointer ](), tagName = flag_all || xnode[ '_tag' ]; node; node = node[ sibling ]() ){\r
+ if( node[ '_tag' ] && ( flag_all || tagName === node[ '_tag' ] ) ){\r
++c;\r
- checked[ node._uid ] = a === 0 ? c === b : (c - b) % a === 0 && (c - b) / a >= 0;\r
+ checked[ node[ '_uid' ] ] = a === 0 ? c === b : (c - b) % a === 0 && (c - b) / a >= 0;\r
}; \r
};\r
tmp = checked[ uid ];\r
flag_not = flag ? flags.not : !flags.not,\r
i = 0, n = -1, xnode;\r
for( ; xnode = xnodes[ i ]; ++i ){\r
- if( xnode._attrs && xnode._attrs[ prop ] ^ flag_not ) res[ ++n ] = xnode;\r
+ if( xnode[ '_attrs' ] && xnode[ '_attrs' ][ prop ] ^ flag_not ) res[ ++n ] = xnode;\r
};\r
return res;\r
};\r
\r
var X_Node_Selector__filter = {\r
- root : function( elem ){\r
+ 'root' : function( elem ){\r
return elem === ( elem.ownerDocument || elem.document ).documentElement;\r
},\r
- target : {\r
+ 'target' : {\r
m : function( flags, xnodes ){\r
var res = [],\r
hash = location.hash.slice( 1 ),\r
flag_not = flags.not,\r
i = 0, n = -1, xnode;\r
for ( ; xnode = xnodes[ i ]; ++i ){\r
- if( ( ( xnode._id || xnode._attrs && xnode._attrs.name ) === hash ) ^ flag_not ) res[ ++n ] = xnode; \r
+ if( ( ( xnode[ '_id' ] || xnode[ '_attrs' ] && xnode[ '_attrs' ][ 'name' ] ) === hash ) ^ flag_not ) res[ ++n ] = xnode; \r
};\r
return res;\r
}\r
'nth-last-of-type' : {\r
m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prev', false, flags, xnodes, a, b ); }\r
},\r
- empty : {\r
+ 'empty' : {\r
m : function( flags, xnodes ){\r
var res = [],\r
flag_not = flags.not,\r
i = 0, n = -1, xnode, tmp, node;\r
for( ; xnode = xnodes[i]; ++i ){\r
tmp = true;\r
- for( node = xnode.firstChild(); node; node = node.nextSibling() ){\r
- if( node._tag || ( !node._tag && node._text ) ){\r
+ for( node = xnode[ 'firstChild' ](); node; node = node.nextSibling() ){\r
+ if( node[ '_tag' ] || node[ '_text' ] ){\r
tmp = false;\r
break;\r
}; \r
return res;\r
}\r
},\r
- link : {\r
+ 'link' : {\r
m : function( flags, xnodes ){\r
- var links = ( xnodes[ 0 ].ownerDocument || xnodes[ 0 ].document ).links,\r
- _data = funcData,\r
+ var links = document.links,\r
res = [],\r
checked, flag_not, i, link, xnode, n;\r
if( !links ) return res;\r
checked = {};\r
flag_not = flags.not;\r
for( i = 0; link = links[ i ]; ++i ){\r
- checked[ ( new Node( link ) )._uid ] = true;\r
+ checked[ ( new Node( link ) )[ '_uid' ] ] = true;\r
};\r
for( i = 0, n = -1; xnode = xnodes[ i ]; ++i ){\r
- if( checked[ xnode._uid ] ^ flag_not ) res[ ++n ] = xnode;\r
+ if( checked[ xnode[ '_uid' ] ] ^ flag_not ) res[ ++n ] = xnode;\r
};\r
return res;\r
}\r
},\r
- lang : {\r
+ 'lang' : {\r
m : function( flags, xnodes, arg ){\r
var res = [],\r
//reg = new RegExp('^' + arg, 'i'),\r
i = 0, n = -1, xnode, tmp, lang;\r
arg = arg.toLowerCase();\r
for( ; tmp = xnode = xnodes[ i ]; ++i ){\r
- while( tmp && !( lang = tmp._attrs && tmp._attrs[ 'lang' ] ) ){\r
+ while( tmp && !( lang = tmp[ '_attrs' ] && tmp[ '_attrs' ][ 'lang' ] ) ){\r
tmp = tmp.parent;\r
};\r
//tmp = !!(tmp && reg.test(tmp.getAttribute('lang')));\r
return res;\r
}\r
},\r
- enabled : {\r
+ 'enabled' : {\r
m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorProp( 'disabled', false, flags, xnodes ); }\r
},\r
- disabled : {\r
+ 'disabled' : {\r
m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorProp( 'disabled', true, flags, xnodes ); }\r
},\r
- checked : {\r
+ 'checked' : {\r
m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorProp( 'checked', true, flags, xnodes ); }\r
},\r
- contains : {\r
+ 'contains' : {\r
m : function( flags, xnodes, arg ){\r
var res = [],\r
flag_not = flags.not,\r
i = 0, n = -1, xnode;\r
for( ; xnode = xnodes[ i ]; ++i ){\r
- if ( ( -1 < ( xnode.text() ).indexOf( arg ) ) ^ flag_not ) res[ ++n ] = xnode; \r
+ if ( ( -1 < ( xnode[ 'text' ]() ).indexOf( arg ) ) ^ flag_not ) res[ ++n ] = xnode; \r
};\r
return res;\r
}\r
\r
if( async && startTime + 15 <= X_Timer_now() && html ){\r
handler.progress( 1 - html.length / async[ 0 ] );\r
- X.Timer.once( 0, X_HTMLParser_exec, [ html, handler, async ] );\r
+ X_Timer_once( 0, X_HTMLParser_exec, [ html, handler, async ] );\r
return;\r
};\r
\r
l = nest.length,\r
attr, name, i, _attrs; //, toIndex;\r
if( l ){\r
- xnode = nest[ l - 1 ].create( tagName );\r
+ xnode = nest[ l - 1 ][ 'create' ]( tagName );\r
} else {\r
xnode = flat[ flat.length ] = X_Doc_create( tagName );\r
};\r
},\r
chars : function( text ){\r
if( X_HTMLParser_htmlStringToXNode.nest.length ){\r
- X_HTMLParser_htmlStringToXNode.nest[ X_HTMLParser_htmlStringToXNode.nest.length - 1 ].createText( text );\r
+ X_HTMLParser_htmlStringToXNode.nest[ X_HTMLParser_htmlStringToXNode.nest.length - 1 ][ 'createText' ]( text );\r
} else {\r
X_HTMLParser_htmlStringToXNode.flat[ X_HTMLParser_htmlStringToXNode.flat.length ] = X_Doc_createText( text );\r
};\r
},\r
- comment : X.emptyFunction\r
+ comment : X_emptyFunction\r
};\r
\r
function X_HtmlParser_parse( html, ignoreError ){\r
var X_HTMLParser_asyncHtmlStringToXNode = {\r
err : function( html ){\r
X_HTMLParser_htmlStringToXNode.err( html );\r
- this.asyncDispatch( X_Event.ERROR );\r
+ this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
},\r
start : X_HTMLParser_htmlStringToXNode.start,\r
end : X_HTMLParser_htmlStringToXNode.end,\r
chars : X_HTMLParser_htmlStringToXNode.chars,\r
- comment : X.emptyFunction,\r
+ comment : X_emptyFunction,\r
\r
progress : function( pct ){\r
- this.asyncDispatch( { type : X_Event.PROGRESS, percent : pct } );\r
+ this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, percent : pct } );\r
},\r
complete : function(){\r
var ret = X_HTMLParser_htmlStringToXNode.flat;\r
delete X_HTMLParser_htmlStringToXNode.flat;\r
- this.asyncDispatch( { type : X_Event.SUCCESS, xnodes : ret } );\r
+ this[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, xnodes : ret } );\r
}\r
};\r
\r
function X_HTMLParser_asyncParse( html, ignoreError ){\r
- var dispatcher = X_Class_override( new X.EventDispatcher(), X_HTMLParser_asyncHtmlStringToXNode ),\r
+ var dispatcher = X_Class_override( X_EventDispatcher(), X_HTMLParser_asyncHtmlStringToXNode ),\r
worker = X_HTMLParser_htmlStringToXNode;\r
- dispatcher.listenOnce( X_Event.SUCCESS, dispatcher, dispatcher.kill );\r
+ dispatcher[ 'listenOnce' ]( X_EVENT_SUCCESS, dispatcher, dispatcher.kill );\r
worker.flat = [];\r
worker.nest.length = 0;\r
worker.ignoreError = ignoreError;\r
* TODO : filter\r
* TODO 前回位置からの継続\r
*/\r
-Node.prototype.animate = function( start, dest, duration, easing, wait ){\r
- var isNew = !this._anime,\r
- obj = this._anime || ( this._anime = {} );\r
+Node.prototype[ 'animate' ] = function( start, dest, duration, easing, wait ){\r
+ var isNew = !this[ '_anime' ],\r
+ obj = this[ '_anime' ] || ( this[ '_anime' ] = {} );\r
\r
obj.duration = 0 <= duration && X_Type_isFinite( duration ) ? duration : 500;\r
obj.easing = ease[ easing ] || ease.circular;\r
if( X_Node_Anime_hasTransition ){\r
\r
if( obj.gpuTimerID ){\r
- X.Timer.remove( obj.gpuTimerID );\r
+ X_Timer_remove( obj.gpuTimerID );\r
delete obj.gpuTimerID;\r
}; \r
\r
\r
X_Node_Anime_reserveUpdate( true );\r
} else {\r
- X_System.unlisten( X_Event.UPDATED, X_Node_Anime_updateAnimationsNoTransition );\r
- X_Node_Anime_updateTimerID || ( X_Node_Anime_updateTimerID = X.Timer.requestFrame( X_Node_Anime_updateAnimationsNoTransition ) );\r
+ X_System[ 'unlisten' ]( X_EVENT_UPDATED, X_Node_Anime_updateAnimationsNoTransition );\r
+ X_Node_Anime_updateTimerID || ( X_Node_Anime_updateTimerID = X_Timer_requestFrame( X_Node_Anime_updateAnimationsNoTransition ) );\r
\r
- isNew && this.dispatch( { type : X_Event.ANIME_START, gpu : false } );\r
+ isNew && this[ 'dispatch' ]( { type : X_EVENT_ANIME_START, gpu : false } );\r
};\r
\r
- console.log( 'animate ' + this._id + ' y:' + obj.startX + ' > ' + obj.destX + ' d:' + obj.duration );\r
+ console.log( 'animate ' + this[ '_id' ] + ' y:' + obj.startX + ' > ' + obj.destX + ' d:' + obj.duration );\r
\r
return this;\r
};\r
\r
-Node.prototype.stop = function(){\r
- var obj = this._anime;\r
+Node.prototype[ 'stop' ] = function(){\r
+ var obj = this[ '_anime' ];\r
if( !obj ) return;\r
if( X_Node_Anime_hasTransition ){\r
obj.phase = 100;\r
X_Node_Anime_reserveUpdate();\r
} else {\r
X_Node_ANIMATIONS.splice( X_Node_ANIMATIONS.indexOf( this ), 1 );\r
- //obj.gpuTimerID && X.Timer.remove( obj.gpuTimerID );\r
- delete this._anime; \r
+ //obj.gpuTimerID && X_Timer_remove( obj.gpuTimerID );\r
+ delete this[ '_anime' ]; \r
};\r
return this;\r
};\r
if( X_Node_updateTimerID ){\r
console.log( before ? '> BEFORE_UPDATE' : '> UPDATED' );\r
before = false;\r
- X_System.listenOnce( before ? X_Event.BEFORE_UPDATE : X_Event.UPDATED, X_Node_Anime_updateAnimations );\r
+ X_System[ 'listenOnce' ]( before ? X_EVENT_BEFORE_UPDATE : X_EVENT_UPDATED, X_Node_Anime_updateAnimations );\r
} else {\r
console.log( '> Timer' );\r
// Opera12 requestAnimationFrame では transition が動かない、、、\r
X_Node_Anime_updateTimerID =\r
X_UA[ 'Opera' ] ?\r
- X.Timer.once( 0, X_Node_Anime_updateAnimations ) :\r
- X.Timer.requestFrame( X_Node_Anime_updateAnimations ); \r
+ X_Timer_once( 0, X_Node_Anime_updateAnimations ) :\r
+ X_Timer_requestFrame( X_Node_Anime_updateAnimations ); \r
};\r
};\r
};\r
\r
for( ; i; ){\r
xnode = X_Node_ANIMATIONS[ --i ];\r
- //console.log( 'phase : ' + xnode._id + ' ' + xnode._anime.phase + ' ' + xnode._anime.duration );\r
+ //console.log( 'phase : ' + xnode[ '_id' ] + ' ' + xnode[ '_anime' ].phase + ' ' + xnode[ '_anime' ].duration );\r
ret = X_Node_Anime_updateAnimation( xnode );\r
if( ret === true ){\r
X_Node_ANIMATIONS.splice( i, 1 );\r
- xnode._anime.gpuTimerID && X.Timer.remove( xnode._anime.gpuTimerID );\r
- delete xnode._anime;\r
+ xnode[ '_anime' ].gpuTimerID && X_Timer_remove( xnode[ '_anime' ].gpuTimerID );\r
+ delete xnode[ '_anime' ];\r
} else\r
if( ret !== false ){\r
c = true;\r
};\r
};\r
\r
-// TODO X.Timer.requestFrame 経由の BEFORE_UPDATE で更新を行う\r
+// TODO X_Timer_requestFrame 経由の BEFORE_UPDATE で更新を行う\r
function X_Node_Anime_detectAnimationLayers(){\r
var i = X_Node_ANIMATIONS.length,\r
l = i,\r
if( xnode.parent === _xnode.parent ){\r
continue;\r
} else\r
- if( _xnode.contains( xnode ) ){\r
- if( ( _xnode._anime.phase === 3 && _xnode._anime.gpuParent ) || _xnode._anime.phase === 10 ){\r
- _xnode._anime.phase = 15;\r
+ if( _xnode[ 'contains' ]( xnode ) ){\r
+ if( ( _xnode[ '_anime' ].phase === 3 && _xnode[ '_anime' ].gpuParent ) || _xnode[ '_anime' ].phase === 10 ){\r
+ _xnode[ '_anime' ].phase = 15;\r
} else\r
- if( xnode._anime.gpuParent ){\r
+ if( xnode[ '_anime' ].gpuParent ){\r
parent = true;\r
- xnode._anime.phase = xnode._anime.phase === 2 ? 6 : 15;// GPU レイヤーの解除 > アニメーションは継続, すでに終了フェイズなら破棄\r
+ xnode[ '_anime' ].phase = xnode[ '_anime' ].phase === 2 ? 6 : 15;// GPU レイヤーの解除 > アニメーションは継続, すでに終了フェイズなら破棄\r
} else\r
- if( [ 7, 8, 9, 13, 14 ].indexOf( xnode._anime.phase ) !== -1 ){// GPU レイヤーの中止\r
+ if( [ 7, 8, 9, 13, 14 ].indexOf( xnode[ '_anime' ].phase ) !== -1 ){// GPU レイヤーの中止\r
parent = true;\r
- xnode._anime.phase -= 8;\r
+ xnode[ '_anime' ].phase -= 8;\r
};\r
break;\r
} else\r
- if( xnode.contains( _xnode ) ){\r
- if( ( xnode._anime.phase === 3 && xnode._anime.gpuParent ) || xnode._anime.phase === 10 ){\r
- xnode._anime.phase = 15;\r
+ if( xnode[ 'contains' ]( _xnode ) ){\r
+ if( ( xnode[ '_anime' ].phase === 3 && xnode[ '_anime' ].gpuParent ) || xnode[ '_anime' ].phase === 10 ){\r
+ xnode[ '_anime' ].phase = 15;\r
} else\r
- if( _xnode._anime.gpuParent ){\r
+ if( _xnode[ '_anime' ].gpuParent ){\r
hasGPUChild = true;\r
- _xnode._anime.phase = _xnode._anime.phase === 2 ? 6 : 15;// GPU レイヤーの解除 > アニメーションは継続, すでに終了フェイズなら破棄\r
+ _xnode[ '_anime' ].phase = _xnode[ '_anime' ].phase === 2 ? 6 : 15;// GPU レイヤーの解除 > アニメーションは継続, すでに終了フェイズなら破棄\r
} else\r
- if( [ 7, 8, 9, 13, 14 ].indexOf( _xnode._anime.phase ) !== -1 ){// GPU レイヤーの中止\r
+ if( [ 7, 8, 9, 13, 14 ].indexOf( _xnode[ '_anime' ].phase ) !== -1 ){// GPU レイヤーの中止\r
hasGPUChild = true;\r
- _xnode._anime.phase -= 8;\r
+ _xnode[ '_anime' ].phase -= 8;\r
};\r
break;\r
};\r
};\r
\r
- if( !parent && xnode._anime.phase !== 15 ){\r
- if( xnode._anime.phase === 0 ){\r
+ if( !parent && xnode[ '_anime' ].phase !== 15 ){\r
+ if( xnode[ '_anime' ].phase === 0 ){\r
// 新規\r
- xnode._anime.phase = hasGPUChild ? 7 : 8;// 非GPU -> GPU 子に GPU アニメをもつなら、タイミングをずらす。\r
+ xnode[ '_anime' ].phase = hasGPUChild ? 7 : 8;// 非GPU -> GPU 子に GPU アニメをもつなら、タイミングをずらす。\r
} else\r
- if( [ 3, 4, 10, 100 ].indexOf( xnode._anime.phase ) === -1 ){\r
+ if( [ 3, 4, 10, 100 ].indexOf( xnode[ '_anime' ].phase ) === -1 ){\r
// 非GPU -> GPU\r
- xnode._anime.phase = hasGPUChild ? 13 : 14;// 非GPU -> GPU 子に GPU アニメをもつなら、タイミングをずらす。\r
+ xnode[ '_anime' ].phase = hasGPUChild ? 13 : 14;// 非GPU -> GPU 子に GPU アニメをもつなら、タイミングをずらす。\r
};\r
};\r
};\r
* 0:無, 1:子のGPU解除待 2:GPU予約, 3:GPU now!, 4:GPU解除予約\r
*/\r
function X_Node_Anime_updateAnimation( xnode ){\r
- var obj = xnode._anime,\r
+ var obj = xnode[ '_anime' ],\r
phase = obj.phase,\r
current, time;\r
switch( phase ){\r
break;\r
case 0 : // 開始位置+アニメーションの設定 \r
case 8 :\r
- X_ViewPort.unlisten( X_Event.AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
+ X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
\r
- xnode.css({\r
+ xnode[ 'css' ]({\r
//willChange : X_Node_Anime_transitionProps + ',opacity,width,height',\r
backfaceVisibility : 'hidden',\r
transitionTimingFunction : obj.easing.style,\r
console.log( '開始位置 ' + phase );\r
X_Node_Anime_updatePosition( xnode, obj.startX, obj.startY, obj.startA, phase === 8 );\r
\r
- xnode.dispatch( { type : X_Event.ANIME_START, gpu : phase === 8 } );\r
+ xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_START, gpu : phase === 8 } );\r
++obj.phase;\r
break;\r
case 1 :\r
case 9 : // 終了位置の設定\r
obj.gpuParent = phase === 9;\r
if( obj.duration ){\r
- xnode.listenOnce( 'transitionend', X_Node_Anime_onTransitionEnd );\r
+ xnode[ 'listenOnce' ]( 'transitionend', X_Node_Anime_onTransitionEnd );\r
\r
- xnode.css({\r
+ xnode[ 'css' ]({\r
transitionProperty : X_Node_Anime_transitionProps + ',opacity,width,height',\r
transitionDuration : obj.duration + 'ms'\r
});\r
obj.phase = obj.gpuParent ? 10 : 4;\r
// このタイミングで animation 関連の css を削除したところ(X_Node_Anime_clearTransition)、iOS3、4 で再描画忘れが度々起きるように、、、\r
if( !obj.gpuParent ) X_Node_Anime_clearTransition( xnode );\r
- xnode.dispatch( { type : X_Event.ANIME_END, gpu : obj.gpuParent } );\r
+ xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, gpu : obj.gpuParent } );\r
break;\r
\r
case 4 :\r
//X_Node_Anime_clearTransition( xnode ); // TODO X_Node_Anime_releaseGPULayer に移動?\r
if( !obj.gpuTimerID ){\r
if( obj.wait ){\r
- obj.gpuTimerID = X.Timer.once( obj.wait, xnode, X_Node_Anime_releaseGPULayer );\r
+ obj.gpuTimerID = X_Timer_once( obj.wait, xnode, X_Node_Anime_releaseGPULayer );\r
} else {\r
X_Node_Anime_releaseGPULayer.call( xnode );\r
};\r
X_Node_Anime_clearTransition( xnode );\r
X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, phase === 14 );\r
obj.phase = phase === 14 ? 10 : 4;\r
- xnode.dispatch( { type : X_Event.ANIME_END, gpu : obj.gpuParent } );\r
+ xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, gpu : obj.gpuParent } );\r
} else {\r
current = X_Node_Anime_getComputedPosition( xnode );\r
obj.startX = current.x;\r
\r
case 15 :\r
// GPU有効で停止(待機)している xnode の解除\r
- //console.log( 'GPU有効で停止(待機)している xnode の解除' + xnode._tag + xnode.getOrder() );\r
+ //console.log( 'GPU有効で停止(待機)している xnode の解除' + xnode[ '_tag' ] + xnode[ 'getOrder' ]() );\r
console.log( 'GPU有効で停止(待機)している xnode のGPU解除' );\r
X_Node_Anime_clearTransition( xnode );\r
X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, false );\r
- obj.gpuTimerID && X.Timer.remove( obj.gpuTimerID );\r
- X_ViewPort.listenOnce( X_Event.AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
+ obj.gpuTimerID && X_Timer_remove( obj.gpuTimerID );\r
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
return true;\r
\r
case 100 : // stop() : アニメーションを中断して削除\r
};\r
\r
function X_Node_Anime_getComputedPosition( that ) {\r
- var matrix = X_node_CSS_getComputedStyle( that._rawObject, null ),\r
+ var matrix = X_Node_CSS_getComputedStyle( that[ '_rawObject' ], null ),\r
x, y;\r
\r
if ( X_Node_Anime_hasTransform ) {\r
};\r
\r
function X_Node_Anime_onTransitionEnd( e ){\r
- if( !this._anime || this._anime.phase !== 2 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
- this._anime.phase = 3;\r
+ if( !this[ '_anime' ] || this[ '_anime' ].phase !== 2 ) return X_Callback_PREVENT_DEFAULT | X_Callback_STOP_PROPAGATION;\r
+ this[ '_anime' ].phase = 3;\r
\r
console.log( 'トランジション終了' );\r
\r
X_Node_Anime_onTransition = true;\r
- this.dispatch( { type : X_Event.ANIME_END, gpu : this._anime.gpuParent } );\r
+ this[ 'dispatch' ]( { type : X_EVENT_ANIME_END, gpu : this[ '_anime' ].gpuParent } );\r
X_Node_Anime_onTransition = false;\r
\r
X_Node_Anime_needsDetection = true;\r
// win+Gecko は不可\r
X_Node_Anime_updateAnimations( 0, X_Node_updateOnTransitionEnd );\r
\r
- return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
+ return X_Callback_PREVENT_DEFAULT | X_Callback_STOP_PROPAGATION;\r
};\r
\r
function X_Node_Anime_releaseGPULayer(){\r
- var obj = this._anime, tmp;\r
+ var obj = this[ '_anime' ], tmp;\r
if( !obj ){\r
console.log( '_anime無' );\r
return;\r
X_Node_Anime_updatePosition( this, obj.destX, obj.destY, obj.destA, false );\r
X_Node_ANIMATIONS.splice( X_Node_ANIMATIONS.indexOf( this ), 1 );\r
delete obj.gpuTimerID;\r
- delete this._anime;\r
+ delete this[ '_anime' ];\r
console.log( 'GPUレイヤーの破棄を指示' );\r
\r
- X_ViewPort.listenOnce( X_Event.AFTER_UPDATE, this, X_Node_Anime_gpuReleased );\r
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, X_Node_Anime_gpuReleased );\r
};\r
\r
function X_Node_Anime_gpuReleased(){\r
console.log( 'GPU レイヤーが解放されました' );\r
- this.dispatch( { type : X_Event.GPU_RELEASED, gpu : true } );\r
+ this[ 'dispatch' ]( { type : X_EVENT_GPU_RELEASED, gpu : true } );\r
};\r
\r
function X_Node_Anime_clearTransition( xnode ){\r
// 開始座標のセット(新規のみ)\r
// アニメーション指定のセット(または解除)(対象のみ)\r
// 目標座標のセット\r
- xnode.unlisten( 'transitionend', X_Node_Anime_onTransitionEnd );\r
+ xnode[ 'unlisten' ]( 'transitionend', X_Node_Anime_onTransitionEnd );\r
\r
- xnode.css({\r
+ xnode[ 'css' ]({\r
//willChange : '',\r
backfaceVisibility : '',\r
transitionTimingFunction : '',\r
function X_Node_Anime_updatePosition( xnode, x, y, opacity, useGPU ){\r
//console.log( 'y : ' + y + ' gpu : ' + !!useGPU );\r
if( X_Node_Anime_hasTransform ){\r
- xnode.css({\r
+ xnode[ 'css' ]({\r
transform : 'translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)' + ( useGPU ? X_Node_Anime_translateZ : '' ),\r
opacity : opacity\r
});\r
} else {\r
- xnode.css({\r
+ xnode[ 'css' ]({\r
left : ( x | 0 ) + 'px',\r
top : ( y | 0 ) + 'px',\r
opacity : opacity\r
\r
if( X_Node_Anime_translateZ ){\r
if( useGPU ){\r
- if( xnode._flags & X_Node_State.GPU_RELEASE_RESERVED ){\r
- xnode._flags &= X_Node_BitMask_RESET_GPU;\r
- xnode._flags |= X_Node_State.GPU_NOW;\r
+ if( xnode[ '_flags' ] & X_Node_State.GPU_RELEASE_RESERVED ){\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_GPU;\r
+ xnode[ '_flags' ] |= X_Node_State.GPU_NOW;\r
} else\r
- if( xnode._flags & X_Node_State.GPU_NOW ){\r
+ if( xnode[ '_flags' ] & X_Node_State.GPU_NOW ){\r
} else {\r
- xnode._flags &= X_Node_BitMask_RESET_GPU;\r
- xnode._flags |= X_Node_State.GPU_RESERVED;\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_GPU;\r
+ xnode[ '_flags' ] |= X_Node_State.GPU_RESERVED;\r
};\r
} else {\r
- if( xnode._flags & X_Node_State.GPU_NOW ){\r
- xnode._flags &= X_Node_BitMask_RESET_GPU;\r
- xnode._flags |= X_Node_State.GPU_RELEASE_RESERVED; \r
+ if( xnode[ '_flags' ] & X_Node_State.GPU_NOW ){\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_GPU;\r
+ xnode[ '_flags' ] |= X_Node_State.GPU_RELEASE_RESERVED; \r
} else\r
- if( xnode._flags & X_Node_State.GPU_RESERVED ){\r
- xnode._flags &= X_Node_BitMask_RESET_GPU;\r
+ if( xnode[ '_flags' ] & X_Node_State.GPU_RESERVED ){\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_GPU;\r
};\r
}; \r
};\r
\r
for( ; i; ){\r
xnode = X_Node_ANIMATIONS[ --i ];\r
- obj = xnode._anime;\r
+ obj = xnode[ '_anime' ];\r
\r
if( obj.destTime <= now ){\r
X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, false );\r
\r
- delete xnode._anime;\r
+ delete xnode[ '_anime' ];\r
X_Node_ANIMATIONS.splice( i, 1 );\r
\r
// filter な 親が解除されないと子要素への filter が反映されない\r
- xnode.asyncDispatch( { type : X_Event.ANIME_END, gpu : false } );\r
+ xnode[ 'asyncDispatch' ]( { type : X_EVENT_ANIME_END, gpu : false } );\r
} else {\r
easing = obj.easing.fn( ( now - obj.startTime ) / obj.duration );\r
newX = ( obj.destX - obj.startX ) * easing + obj.startX;\r
\r
if( c ){\r
if( X_Node_updateTimerID ){\r
- X_System.listen( X_Event.UPDATED, X_Node_Anime_updateAnimationsNoTransition );\r
+ X_System[ 'listen' ]( X_EVENT_UPDATED, X_Node_Anime_updateAnimationsNoTransition );\r
X_Node_Anime_updateTimerID = 0;\r
} else {\r
- X_Node_Anime_updateTimerID = X.Timer.requestFrame( X_Node_Anime_updateAnimationsNoTransition );\r
+ X_Node_Anime_updateTimerID = X_Timer_requestFrame( X_Node_Anime_updateAnimationsNoTransition );\r
};\r
} else {\r
X_Node_Anime_updateTimerID = 0;\r
//node.data = '';\r
l = X_TEMP._removalTextNodes.length;\r
if( parent ){\r
- //!l && X.Timer.once( 0, X_TEMP._timerRemove );\r
+ //!l && X_Timer_once( 0, X_TEMP._timerRemove );\r
//X_TEMP._removalTextNodes[ l ] = node;\r
//var str=[],p;\r
//for( p in node ){\r
parent.parentNode.insertBefore( clone, parent );\r
parent.style.display = 'none';\r
if( xnode ){\r
- xnode.parent.parent._rawObject = clone;\r
+ xnode.parent.parent[ '_rawObject' ] = clone;\r
};\r
} else {\r
// ignore\r
};\r
};\r
\r
- //nodes.length && X.Timer.once( 1000, X_TEMP._timerRemove );\r
+ //nodes.length && X_Timer_once( 1000, X_TEMP._timerRemove );\r
};\r
\r
} else\r
* http://kojs.sukobuto.com/docs/visible-binding\r
* IE6 には、「空の span エレメントに続く空白は無視される」という謎な癖があります。 \r
*/\r
-X.ViewPort.listenOnce( X_TEMP.SYSTEM_EVENT_PRE_INIT,\r
+X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT,\r
X_UA_DOM.W3C ?\r
(function(){\r
var r = X_Node_body,\r
- body = r._rawObject,\r
+ body = r[ '_rawObject' ],\r
copy, i, l, node, html,\r
elmProgress;\r
\r
elmProgress.setAttribute( 'style', 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;' );\r
\r
X_HTMLParser_asyncParse( html, true )\r
- .listen( X_Event.PROGRESS,\r
- function(e){\r
+ [ 'listen' ]( X_EVENT_PROGRESS,\r
+ function( e ){\r
elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
}\r
)\r
- .listenOnce( X_Event.SUCCESS, function( e ){\r
- var xnodes = X_Node_body._xnodes = [], t;\r
- xnodes.push.apply( xnodes, e.xnodes );\r
- elmProgress.style.width = '100%';\r
-\r
- X_TEMP.asyncCreateTree( X_Node_body, body.childNodes, elmProgress );\r
- } );\r
+ [ 'listenOnce' ]( X_EVENT_SUCCESS,\r
+ function( e ){\r
+ var xnodes = X_Node_body[ '_xnodes' ] = [], t;\r
+ xnodes.push.apply( xnodes, e.xnodes );\r
+ elmProgress.style.width = '100%';\r
+ \r
+ X_TEMP.asyncCreateTree( X_Node_body, body.childNodes, elmProgress );\r
+ }\r
+ );\r
\r
}) :\r
X_UA_DOM.IE4 ?\r
(function(){\r
var r = X_Node_body,\r
- body = r._rawObject,\r
+ body = r[ '_rawObject' ],\r
elmProgress = '_xdom_builder_progress',\r
html;\r
\r
- \r
if( !X_TEMP.X_Dom_useBuilder ) return;\r
\r
/*\r
elmProgress = document.all[ elmProgress ];\r
\r
X_HTMLParser_asyncParse( html, true )\r
- .listen( X_Event.PROGRESS,\r
+ [ 'listen' ]( X_EVENT_PROGRESS,\r
function( e ){\r
elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
}\r
)\r
- .listenOnce( X_Event.SUCCESS,\r
+ [ 'listenOnce' ]( X_EVENT_SUCCESS,\r
function( e ){\r
- var xnodes = X_Node_body._xnodes = [], t;\r
+ var xnodes = X_Node_body[ '_xnodes' ] = [], t;\r
xnodes.push.apply( xnodes, e.xnodes );\r
elmProgress.style.width = '100%';\r
\r
\r
}) );\r
\r
-X_TEMP.asyncCreateTree = function ( parent, elems, elmProgress, async ){\r
- var xnodes = async ? 0 : X_Object_cloneArray( parent._xnodes ),\r
+X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){\r
+ var xnodes = async ? 0 : X_Object_cloneArray( parent[ '_xnodes' ] ),\r
l = async ? 0 : xnodes.length,\r
stack = async ? async.stack : [],\r
done = async ? async.done : 0,\r
async.done = done;\r
};\r
//alert( 'koko?' );\r
- X.Timer.once( 0, X_TEMP.asyncCreateTree, [ null, null, elmProgress, async || { stack : stack, current : i < l && current, done : done } ] );\r
+ X_Timer_once( 0, X_TEMP.asyncCreateTree, [ null, null, elmProgress, async || { stack : stack, current : i < l && current, done : done } ] );\r
// progress\r
elmProgress.style.width = ( ( 1 - done / X_Node_CHASHE.length ) * 100 | 0 ) + '%';\r
return;\r
current = null;\r
};\r
// complete\r
- X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_XTREE );\r
+ X_ViewPort[ 'asyncDispatch' ]( X_EVENT_XTREE_READY );\r
elmProgress.parentNode ? elmProgress.parentNode.removeChild( elmProgress ) : ( elmProgress.outerHTML = '' );\r
delete X_TEMP.asyncCreateTree;\r
delete X_TEMP.bindElementToXnode;\r
continue;\r
};\r
\r
- if( xnode._tag ){\r
+ if( xnode[ '_tag' ] ){\r
if( elm.nodeType === 3 ){\r
if( !( text = elm.data ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\r
//alert( text.charCodeAt( 0 ) );\r
};\r
continue;\r
};\r
- alert( '1:[' +parent._tag + '>' +xnode._tag + '] !== ' + elm.nodeType + '\n' + ( elm.data ) );\r
+ alert( '1:[' +parent[ '_tag' ] + '>' +xnode[ '_tag' ] + '] !== ' + elm.nodeType + '\n' + ( elm.data ) );\r
} else\r
if( X_Dom_DTD_MOVE_TO_HEAD[ tag ] ){\r
alert( tag );\r
continue;\r
} else\r
- if( xnode._tag !== tag ){\r
- alert( '2:[' +parent._tag + '>' +xnode._tag + ' len:' + (xnode._xnodes ? xnode._xnodes.length : '' ) + '] !== ' + tag + ' ' + (elm.childNodes ? elm.childNodes.length : '' ) + '\n' + elm.outerHTML );\r
+ if( xnode[ '_tag' ] !== tag ){\r
+ alert( '2:[' +parent[ '_tag' ] + '>' +xnode[ '_tag' ] + ' len:' + (xnode[ '_xnodes' ] ? xnode[ '_xnodes' ].length : '' ) + '] !== ' + tag + ' ' + (elm.childNodes ? elm.childNodes.length : '' ) + '\n' + elm.outerHTML );\r
} else {\r
- xnode._rawObject = elm;\r
+ xnode[ '_rawObject' ] = elm;\r
//if( ( doc = elm.ownerDocument || elm.document ) && ( doc.createElement( 'p' ).tagName === doc.createElement( 'P' ).tagName ) ){\r
if( tag.charAt( 0 ) === '/' ) tag = tag.slice( 1 );\r
- xnode._tag = tag;\r
+ xnode[ '_tag' ] = tag;\r
//};\r
- xnode._flags |= X_Node_State.IN_TREE;\r
- xnode._flags &= X_Node_BitMask_RESET_DIRTY;\r
- elm.UID = xnode._uid;\r
+ xnode[ '_flags' ] |= X_Node_State.IN_TREE;\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
+ elm[ 'UID' ] = xnode[ '_uid' ];\r
current.xtext = null;\r
\r
if( tag === 'TEXTAREA' ){\r
- xnode.attr( 'value', xnode.html() ).empty();\r
+ xnode.attr( 'value', xnode[ 'html' ]() )[ 'empty' ]();\r
\r
} else\r
if( elm.childNodes && elm.childNodes.length ){\r
- //alert( '[' +parent._tag + '>' + xnode._tag + ' ' + (xnode._xnodes ? xnode._xnodes.length : '' ) + '] === ' + tag + ' ' + (elm.childNodes ? elm.childNodes.length : '' ) + ' Hit\n' + elm.outerHTML );\r
+ //alert( '[' +parent[ '_tag' ] + '>' + xnode[ '_tag' ] + ' ' + (xnode[ '_xnodes' ] ? xnode[ '_xnodes' ].length : '' ) + '] === ' + tag + ' ' + (elm.childNodes ? elm.childNodes.length : '' ) + ' Hit\n' + elm.outerHTML );\r
//current.xtext = null;\r
++current.j;\r
\r
return {\r
me : xnode,\r
- xnodes : X_Object_cloneArray( xnode._xnodes ),\r
+ xnodes : X_Object_cloneArray( xnode[ '_xnodes' ] ),\r
xtext : null,\r
flag : 0,\r
i : 0,\r
- l : xnode._xnodes.length,\r
+ l : xnode[ '_xnodes' ].length,\r
elems : X_Object_cloneArray( elm.childNodes ),\r
j : 0,\r
skipCleanup : skipCleanup || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ]\r
};\r
\r
if( elm.nodeType !== 3 ){\r
- if( !( text = xnode._text ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\r
- console.log( '[' +parent._tag + '> UID:' + xnode._uid + ' len:' + xnode._text.length + ' code : ' + xnode._text.charCodeAt( 0 ) + ',' + xnode._text.charCodeAt( 1 ) + '] destroyed.' );\r
+ if( !( text = xnode[ '_text' ] ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\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
- alert( parent._tag + ' > ' + '"' + xnode._text + '" !== ' + tag + '\n' +\r
- 'prev : ' + ( xnode.prev() && xnode.prev().html() ) + '\n' +\r
- 'next : ' + ( xnode.next() && xnode.next().html() ) + '\n' +\r
+ alert( parent[ '_tag' ] + ' > ' + '"' + xnode[ '_text' ] + '" !== ' + tag + '\n' +\r
+ 'prev : ' + ( xnode[ 'prev' ]() && xnode[ 'prev' ]()[ 'html' ]() ) + '\n' +\r
+ 'next : ' + ( xnode[ 'next' ]() && xnode[ 'next' ]()[ 'html' ]() ) + '\n' +\r
'html : ' + elm.outerHTML );\r
break;\r
};\r
\r
++current.j;\r
- xnode._rawObject = elm;\r
- xnode._flags |= X_Node_State.IN_TREE;\r
- xnode._flags &= X_Node_BitMask_RESET_DIRTY;\r
- xnode._text = elm.data; // 正確\r
+ xnode[ '_rawObject' ] = elm;\r
+ xnode[ '_flags' ] |= X_Node_State.IN_TREE;\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
+ xnode[ '_text' ] = elm.data; // 正確\r
\r
if( !skipCleanup ){\r
- if( !( text = xnode._text ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\r
- console.log( '[' +parent._tag + '>' + xnode._uid + '] destroy ... ' );\r
+ if( !( text = xnode[ '_text' ] ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\r
+ console.log( '[' +parent[ '_tag' ] + '>' + xnode[ '_uid' ] + '] destroy ... ' );\r
xnode.destroy();\r
};\r
if( xtext ){\r
- xtext.text( xtext._text + text );\r
- console.log( '[' +parent._tag + '>' + xnode._uid + '] xtext,destroy ... ' );\r
+ xtext[ 'text' ]( xtext[ '_text' ] + text );\r
+ console.log( '[' +parent[ '_tag' ] + '>' + xnode[ '_uid' ] + '] xtext,destroy ... ' );\r
xnode.destroy();\r
} else {\r
- //alert( parent._tag + '>' + '"' + text + '"\n' + elm.data );\r
- xnode.text( text );\r
+ //alert( parent[ '_tag' ] + '>' + '"' + text + '"\n' + elm.data );\r
+ xnode[ 'text' ]( text );\r
};\r
} else\r
if( xtext ){\r
- xtext.text( xtext._text + xnode._text );\r
- console.log( '[' +parent._tag + '>' + xnode._uid + '] xtext,destroy ... ' );\r
+ xtext[ 'text' ]( xtext[ '_text' ] + xnode[ '_text' ] );\r
+ console.log( '[' +parent[ '_tag' ] + '>' + xnode[ '_uid' ] + '] xtext,destroy ... ' );\r
xnode.destroy();\r
};\r
current.xtext = xtext || xnode;\r
\r
xnode.parent = parent;\r
\r
- if( !xnode._tag ){\r
- xnode._flags |= X_Node_State.IN_TREE;\r
- xnode._flags &= X_Node_BitMask_RESET_DIRTY;\r
- //alert( X_String_cleanupWhiteSpace( xnode._text ) );\r
+ if( !xnode[ '_tag' ] ){\r
+ xnode[ '_flags' ] |= X_Node_State.IN_TREE;\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
+ //alert( X_String_cleanupWhiteSpace( xnode[ '_text' ] ) );\r
if( !skipCleanup ){\r
- if( !( text = xnode._text ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\r
+ if( !( text = xnode[ '_text' ] ) || ( text = X_String_cleanupWhiteSpace( text ) ) === ' ' ){\r
xnode.destroy();\r
xnode = null;\r
} else\r
if( xtext ){\r
//alert( 'xtext ' + text.charCodeAt( 0 ) + ' : ' + text.length );\r
- xtext.text( xtext._text + text );\r
+ xtext[ 'text' ]( xtext[ '_text' ] + text );\r
xnode.destroy();\r
} else {\r
//alert( 'xnode ' + text.charCodeAt( 0 ) + ' : ' + text.length );\r
- xnode.text( text );\r
+ xnode[ 'text' ]( text );\r
};\r
} else {\r
if( xtext ){\r
//alert( 'skip ' + text.charCodeAt( 0 ) + ' : ' + text.length );\r
- xtext.text( xtext._text + xnode._text );\r
+ xtext[ 'text' ]( xtext[ '_text' ] + xnode[ '_text' ] );\r
xnode.destroy();\r
};\r
};\r
current.xtext = xtext || xnode;\r
- parent._flags |= X_Node_State.IE4_HAS_TEXTNODE;\r
+ parent[ '_flags' ] |= X_Node_State.IE4_HAS_TEXTNODE;\r
return;\r
};\r
\r
//alert( '## ' + tag );\r
continue;\r
} else\r
- if( xnode._tag !== tag ){\r
- alert( xnode._tag + ' ' + ' !== ' + tag + '\nxnode.html():' + xnode.attr('cite') + '\nelm.outerHTML:' + elm.outerHTML );\r
+ if( xnode[ '_tag' ] !== tag ){\r
+ alert( xnode[ '_tag' ] + ' ' + ' !== ' + tag + '\nxnode.html():' + xnode.attr('cite') + '\nelm.outerHTML:' + elm.outerHTML );\r
} else {\r
++current.j;\r
\r
- xnode._rawObject = elm;\r
- xnode._flags |= X_Node_State.IN_TREE;\r
- xnode._flags &= X_Node_BitMask_RESET_DIRTY;\r
- //xnode._tag = X_Dom_DTD_TAG_FIX[ tag ] || tag;\r
- if( X_TEMP._isCleanupTarget( elm ) ){ //!xnode.hasClass( 'skip-cleanup' ) && ( X_Dom_DTD_CLEANUP_TAGS[ tag ] || xnode.hasClass( 'cleanup-target' ) ) ){\r
+ xnode[ '_rawObject' ] = elm;\r
+ xnode[ '_flags' ] |= X_Node_State.IN_TREE;\r
+ xnode[ '_flags' ] &= X_Node_BitMask_RESET_DIRTY;\r
+ //xnode[ '_tag' ] = X_Dom_DTD_TAG_FIX[ tag ] || tag;\r
+ if( X_TEMP._isCleanupTarget( elm ) ){ //!xnode[ 'hasClass' ]( 'skip-cleanup' ) && ( X_Dom_DTD_CLEANUP_TAGS[ tag ] || xnode[ 'hasClass' ]( 'cleanup-target' ) ) ){\r
xnode.destroy();\r
break;\r
};\r
\r
- !xnode._id && elm.setAttribute( 'id', 'ie4uid' + xnode._uid );\r
- elm.setAttribute( 'UID', xnode._uid );\r
+ !xnode[ '_id' ] && elm.setAttribute( 'id', 'ie4uid' + xnode[ '_uid' ] );\r
+ elm.setAttribute( 'UID', xnode[ '_uid' ] );\r
\r
tag === 'INPUT' && (\r
- !xnode._attrs ?\r
- ( xnode._attrs = { type : 'text' } ) :\r
- xnode._attrs.type || ( xnode._attrs.type = 'text' )\r
+ !xnode[ '_attrs' ] ?\r
+ ( xnode[ '_attrs' ] = { type : 'text' } ) :\r
+ xnode[ '_attrs' ].type || ( xnode[ '_attrs' ].type = 'text' )\r
);\r
- parent._flags |= X_Node_State.IE4_HAS_ELEMENT;\r
+ parent[ '_flags' ] |= X_Node_State.IE4_HAS_ELEMENT;\r
current.xtext = null;\r
\r
if( tag === 'TEXTAREA' ){\r
- xnode.attr( 'value', xnode.html() ).empty();\r
+ xnode.attr( 'value', xnode[ 'html' ]() )[ 'empty' ]();\r
} else\r
- if( xnode._xnodes && xnode._xnodes.length ){\r
+ if( xnode[ '_xnodes' ] && xnode[ '_xnodes' ].length ){\r
return {\r
me : xnode,\r
- xnodes : X_Object_cloneArray( xnode._xnodes ),\r
+ xnodes : X_Object_cloneArray( xnode[ '_xnodes' ] ),\r
xtext : null,\r
flag : 0,\r
i : 0,\r
- l : xnode._xnodes.length,\r
+ l : xnode[ '_xnodes' ].length,\r
elems : X_Object_cloneArray( elm.children ),\r
j : 0,\r
skipCleanup : skipCleanup || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ]\r
};\r
};\r
// for\r
- if( !xnode._rawObject ){\r
- alert( xnode._tag + ' ' + xnode._id + ' !== none...' );\r
+ if( !xnode[ '_rawObject' ] ){\r
+ alert( xnode[ '_tag' ] + ' ' + xnode[ '_id' ] + ' !== none...' );\r
};\r
});\r
\r
navigator.mimeTypes[ 'application/x-googlegears' ].enabledPlugin
);
-X.Pulgin = {
+/**
+ * @namespace X.Pulgin
+ */
+X[ 'Pulgin' ] = {
Flash : X_Pulgin_FLASH_VERSION,
-X.Util = {};\r
+X[ 'Util' ] = {};\r
*/\r
\r
// TODO Node.inherits\r
-X.Util.NinjaIframe = X.EventDispatcher.inherits(\r
+X[ 'Util' ][ 'NinjaIframe' ] = X_EventDispatcher[ 'inherits' ](\r
'NinjaIframe',\r
{\r
autoRefresh : 0,\r
_name : '',\r
_ready : false,\r
\r
- Constructor : function( html ){\r
+ 'Constructor' : function( html ){\r
\r
this._name = 'hidden-iframe-' + X_Timer_now();\r
// https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js\r
\r
- this.xnodeIframe = X_Node_body.create(\r
+ this.xnodeIframe = X_Node_body[ 'create' ](\r
'iframe',\r
{\r
className : 'hidden-iframe',\r
}\r
);\r
\r
- X_ViewPort.listenOnce( X_Event.AFTER_UPDATE, this );\r
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this );\r
\r
// http://nanto.asablo.jp/blog/2011/12/08/6237308\r
// IE 6/7 で文書間通信を実現するための一案\r
};\r
// Safari 2.0.* bug: iframe's absolute position and src set.\r
if( !X_UA[ 'Webkit' ] ){\r
- this.xnodeIframe.css( { position : 'absolute' } );\r
+ this.xnodeIframe[ 'css' ]( { position : 'absolute' } );\r
};\r
\r
if( html ) this._contentHTML = html;\r
},\r
\r
- handleEvent : function( e ){\r
- var raw = this.xnodeIframe._rawObject;\r
+ 'handleEvent' : function( e ){\r
+ var raw = this.xnodeIframe[ '_rawObject' ];\r
\r
switch( e.type ){\r
- case X_Event.AFTER_UPDATE :\r
+ case X_EVENT_AFTER_UPDATE :\r
this._iwin = raw.contentWindow || ( raw.contentDocument && raw.contentDocument.parentWindow ) || window.frames[ this._name ];\r
// http://d.hatena.ne.jp/NeoCat/20080921/1221940658\r
// こちらに名前をsetしないとtargetが動作しない\r
if( X_UA[ 'IE' ] ) this._iwin.name = this._name;\r
\r
- this.xnodeIframe.listen( [ X_UA[ 'IE' ] < 9 ? 'readystatechange' : 'load', 'error' ], this );\r
+ this.xnodeIframe[ 'listen' ]( [ X_UA[ 'IE' ] < 9 ? 'readystatechange' : 'load', 'error' ], this );\r
\r
if( !( X_UA[ 'IE' ] < 9 ) ){\r
this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );\r
// onload\r
case 'load' :\r
console.log( 'iframe load.' );\r
- this.asyncDispatch( X_Event.SUCCESS );\r
+ this[ 'asyncDispatch' ]( X_EVENT_SUCCESS );\r
break;\r
case 'error' :\r
- this.asyncDispatch( X_Event.ERROR );\r
+ this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
break;\r
};\r
\r
- return X.Callback.STOP_PROPAGATION; \r
+ return X_Callback_STOP_PROPAGATION; \r
},\r
\r
- refresh : function( opt_contentHTML ){\r
- var raw = this.xnodeIframe._rawObject,\r
+ 'refresh' : function( opt_contentHTML ){\r
+ var raw = this.xnodeIframe[ '_rawObject' ],\r
idoc;\r
\r
this._ready = false;\r
return this;\r
},\r
\r
- close : function(){\r
- X_ViewPort.unlisten( X_Event.AFTER_UPDATE, this );\r
- this.xnodeIframe.call( 'close' );\r
+ 'close' : function(){\r
+ X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, this );\r
+ this.xnodeIframe[ 'call' ]( 'close' );\r
this.xnodeIframe.destroy();\r
}\r
\r
);\r
\r
function X_Util_NinjaIframe_writeToIframe( that ){\r
- var raw = that.xnodeIframe._rawObject,\r
+ var raw = that.xnodeIframe[ '_rawObject' ],\r
idoc = raw.contentDocument || that._iwin.document,\r
html = that._contentHTML;\r
\r
\r
var X_Util_Image_actualSize = {};\r
\r
-X.Util.Image = { \r
- getActualDimension : X_Util_Image_getActualDimension\r
+X[ 'Util' ][ 'Image' ] = { \r
+ 'getActualDimension' : X_Util_Image_getActualDimension\r
\r
// Alpha Image, data uri ong ...\r
};\r
if( X_Type_isString( XnodeOrImageElemOrSrc ) ){\r
if( ret = X_Util_Image_actualSize[ X_URL_toAbsolutePath( XnodeOrImageElemOrSrc ) ] ) return ret;\r
\r
- xnode = X_Node_systemNode.create(\r
+ xnode = X_Node_systemNode[ 'create' ](\r
'img',\r
{\r
src : XnodeOrImageElemOrSrc\r
}\r
);\r
X_Node_startUpdate();\r
- img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode ) : xnode._rawObject;\r
+ img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode ) : xnode[ '_rawObject' ];\r
remove = true;\r
} else {\r
if( XnodeOrImageElemOrSrc.constructor === X.Node ){\r
xnode = XnodeOrImageElemOrSrc;\r
- img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode )._rawObject : xnode._rawObject;\r
+ img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode )[ '_rawObject' ] : xnode[ '_rawObject' ];\r
} else\r
if( X_Type_isHTMLElement( XnodeOrImageElemOrSrc ) ){\r
img = XnodeOrImageElemOrSrc;\r
} else\r
- if( XnodeOrImageElemOrSrc.constructor === X.EventDispatcher && X_Type_isImage( XnodeOrImageElemOrSrc._rawObject ) ){\r
+ if( XnodeOrImageElemOrSrc.constructor === X_EventDispatcher && X_Type_isImage( XnodeOrImageElemOrSrc[ '_rawObject' ] ) ){\r
xnode = XnodeOrImageElemOrSrc;\r
- img = xnode._rawObject;\r
+ img = xnode[ '_rawObject' ];\r
} else {\r
return;\r
};\r
\r
// http://bugs.jquery.com/ticket/2709\r
// <head><base> がある場合、<script>の追加に失敗する\r
-X.Net = {\r
+X[ 'Net' ] = {\r
\r
- xhrGet : function( url, type ){\r
+ 'xhrGet' : function( url, type ){\r
return new X_NET_Queue( X_NET_TYPE_XHR, { method : 'GET', url : url, type : type } );\r
},\r
\r
- xhrPost : function( url, type, postbody ){\r
+ 'xhrPost' : function( url, type, postbody ){\r
return new X_NET_Queue( X_NET_TYPE_XHR, { method : 'POST', url : url, type : type, postbody : postbody } );\r
},\r
\r
- formGet : function(){\r
+ 'formGet' : function(){\r
\r
},\r
\r
- formPost : function(){\r
+ 'formPost' : function(){\r
\r
},\r
\r
// TODO chashe\r
// TODO iframe useful or not. TODO dynamicIframe\r
// TODO file: では http: は使えない\r
- jsonp : function( url, useIframe ){\r
+ 'jsonp' : function( url, useIframe ){\r
return new X_NET_Queue( X_NET_TYPE_JSONP, url );\r
},\r
\r
- image : function( url, needSize, delay, timeout ){\r
+ 'image' : function( url, needSize, delay, timeout ){\r
return new X_NET_Queue( X_NET_TYPE_IMAGE, { url : url, needSize : needSize } );\r
},\r
\r
// <script>, <link>\r
\r
- amountQueue : function(){\r
+ 'amountQueue' : function(){\r
return X_NET_QUEUE_LIST.length;\r
}\r
\r
X_NET_ImageWrapper,\r
\r
X_NET_currentWrapper,\r
- X_NET_currentQueue,\r
+ X_NET_currentQueue;\r
\r
- X_NET_Queue = X.EventDispatcher.inherits(\r
+/**\r
+ * フレームワークによってラップされたネットワーク機能にアクセスするためのクラス。\r
+ * \r
+ * @alias X_NET_Queue\r
+ * @class X_NET_Queue\r
+ * @constructs X_NET_Queue\r
+ * @extends {EventDispatcher}\r
+ */\r
+var X_NET_Queue = X_EventDispatcher[ 'inherits' ](\r
'XNetQueue',\r
X.Class.POOL_OBJECT,\r
+ \r
+ /** @lends X_NET_Queue.prototype */\r
{\r
type : 0,\r
data : null,\r
\r
- Constructor : function( type, data ){\r
+ 'Constructor' : function( type, data ){\r
this.type = type;\r
this.data = data; \r
\r
- //this.listenOnce( X_Event.COMPLETE, X_NET_proxyDispatch );\r
- X_EventDispatcher_systemListen( this, X_Event.COMPLETE, X_NET_proxyDispatch );\r
+ //this[ 'listenOnce' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch );\r
+ X_EventDispatcher_systemListen( this, X_EVENT_COMPLETE, X_NET_proxyDispatch );\r
\r
X_NET_QUEUE_LIST[ X_NET_QUEUE_LIST.length ] = this;\r
!X_NET_currentQueue && X_NET_shiftQueue();\r
},\r
\r
- busy : function(){\r
+ 'busy' : function(){\r
return this === X_NET_currentQueue && X_NET_currentWrapper._busy;\r
},\r
\r
- cancel : function(){\r
+ 'cancel' : function(){\r
var i = X_NET_QUEUE_LIST.indexOf( this );\r
if( i !== -1 ){\r
X_NET_QUEUE_LIST.splice( i, 1 );\r
- this.asyncDispatch( X_Event.CANCELED );\r
- this.asyncDispatch( 16, X_Event.COMPLETE );\r
+ this[ 'asyncDispatch' ]( X_EVENT_CANCELED );\r
+ this[ 'asyncDispatch' ]( 16, X_EVENT_COMPLETE );\r
} else\r
if( this === X_NET_currentQueue ){\r
X_NET_currentWrapper.cancel();\r
\r
function X_NET_proxyDispatch( e ){\r
switch( e.type ){\r
- case X_Event.BEFORE_KILL_INSTANCE :\r
+ case X_EVENT_BEFORE_KILL_INSTANCE :\r
break;\r
- case X_Event.KILL_INSTANCE :\r
+ case X_EVENT_KILL_INSTANCE :\r
break; \r
- case X_Event.KILL_INSTANCE_CANCELED :\r
+ case X_EVENT_KILL_INSTANCE_CANCELED :\r
break;\r
- case X_Event.PROGRESS :\r
- this.dispatch( e );\r
+ case X_EVENT_PROGRESS :\r
+ this[ 'dispatch' ]( e );\r
break;\r
- case X_Event.SUCCESS :\r
- case X_Event.ERROR :\r
- case X_Event.TIMEOUT :\r
- case X_Event.CANCELED :\r
- this.dispatch( e );\r
- this.asyncDispatch( X_Event.COMPLETE );\r
+ case X_EVENT_SUCCESS :\r
+ case X_EVENT_ERROR :\r
+ case X_EVENT_TIMEOUT :\r
+ case X_EVENT_CANCELED :\r
+ this[ 'dispatch' ]( e );\r
+ this[ 'asyncDispatch' ]( X_EVENT_COMPLETE );\r
break;\r
- case X_Event.COMPLETE :\r
- this.kill();\r
+ case X_EVENT_COMPLETE :\r
+ this[ 'kill' ]();\r
X_NET_shiftQueue();\r
break;\r
};\r
console.log( 'X_NET_shiftQueue ' + X_NET_currentWrapper._busy );\r
if( X_NET_currentWrapper._busy ) return;\r
X_NET_currentWrapper\r
- .unlisten( [ X_Event.PROGRESS, X_Event.SUCCESS, X_Event.ERROR, X_Event.TIMEOUT, X_Event.CANCELED ], X_NET_currentQueue, X_NET_proxyDispatch )\r
+ [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT, X_EVENT_CANCELED ], X_NET_currentQueue, X_NET_proxyDispatch )\r
.reset();\r
X_NET_currentQueue = X_NET_currentWrapper = null;\r
};\r
break;\r
};\r
\r
- X_NET_currentWrapper.listen( [ X_Event.PROGRESS, X_Event.SUCCESS, X_Event.ERROR, X_Event.TIMEOUT, X_Event.CANCELED ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
+ X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT, X_EVENT_CANCELED ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
\r
X_NET_currentWrapper.load( queue.data );\r
};\r
if( X_Net_XHR_W3C || X_Net_XHR_ACTIVE_X ){\r
\r
X_NET_XHRWrapper = X_Class_override(\r
- new X.EventDispatcher(),\r
+ X_EventDispatcher(),\r
{\r
\r
'_rawType' : X_EventDispatcher_EVENT_TARGET_TYPE.XHR,\r
_timerID : 0,\r
\r
load : function( obj ){\r
- var raw = this._rawObject,\r
+ var raw = this[ '_rawObject' ],\r
method = obj[ 'method' ],\r
url = obj[ 'url' ],\r
async = obj[ 'async' ],\r
if( X_URL_isSameDomain( url ) ){ // isXDomain\r
if( this._isXDR ){\r
X_EventDispatcher_toggleAllEvents( this, false );\r
- this._rawObject = X_Net_XHR_W3C || X_Net_XHR_ACTIVE_X;\r
+ this[ '_rawObject' ] = X_Net_XHR_W3C || X_Net_XHR_ACTIVE_X;\r
X_EventDispatcher_toggleAllEvents( this, true );\r
this._isXDR = false; \r
};\r
} else {\r
if( !this._isXDR ){\r
X_EventDispatcher_toggleAllEvents( this, false );\r
- this._rawObject = X_Net_XHR_X_DOMAIN;\r
+ this[ '_rawObject' ] = X_Net_XHR_X_DOMAIN;\r
X_EventDispatcher_toggleAllEvents( this, true );\r
this._isXDR = true; \r
};\r
if( raw.timeout !== undefined ){\r
raw.timeout = timeout;\r
} else {\r
- this._timerID = X.Timer.once( timeout, this, this.onTimeout );\r
+ this._timerID = X_Timer_once( timeout, this, this.onTimeout );\r
}; \r
\r
// send 前にフラグを立てる,回線が早いと raw.send() 内で onload -> _busy = false ののち、 _busy = true するため。\r
\r
\r
raw.send( postbody || '' );\r
- //this._timerID = X.Timer.once( 16, this, this._lazySend, [ postbody || '', timeout ] );\r
+ //this._timerID = X_Timer_once( 16, this, this._lazySend, [ postbody || '', timeout ] );\r
},\r
/*\r
// send() 内で onload するケースがあり、そのときはイベントリスナが間に合わないので、タイマーをかませる。\r
_lazySend : function( postbody, timeout ){\r
- if( this._rawObject.timeout === undefined ){\r
- this._timerID = X.Timer.once( timeout, this, this.onTimeout );\r
+ if( this[ '_rawObject' ].timeout === undefined ){\r
+ this._timerID = X_Timer_once( timeout, this, this.onTimeout );\r
} else {\r
this._timerID = 0;\r
};\r
// http://allabout.co.jp/gm/gc/24097/#1\r
// sendをonreadystatechangeの前に記述すると、ieでは動作しなくなります、、、。\r
// konquerorでエラーが発生するのでここでは、とりあえず、send('') としました。\r
- this._rawObject.send( postbody ); \r
+ this[ '_rawObject' ].send( postbody ); \r
}, */\r
\r
cancel : function(){\r
- /* X.Net.XHR.CANCELABLE && */ this._rawObject.abort && this._rawObject.abort();\r
+ /* X.Net.XHR.CANCELABLE && */ this[ '_rawObject' ].abort && this[ '_rawObject' ].abort();\r
this._canceled = true;\r
- this.asyncDispatch( X_Event.CANCELED );\r
+ this[ 'asyncDispatch' ]( X_EVENT_CANCELED );\r
},\r
\r
reset : function(){\r
if( X_UA[ 'Opera' ] || X_UA[ 'Webkit' ] || X_UA[ 'Gecko' ] ){\r
if( this._error ){\r
X_EventDispatcher_toggleAllEvents( this, false );\r
- this._rawObject = new XMLHttpRequest();\r
+ this[ '_rawObject' ] = new XMLHttpRequest();\r
X_EventDispatcher_toggleAllEvents( this, true );\r
};\r
};\r
// XMLHttpRequest の使い方\r
// http://webos-goodies.jp/archives/50548720.html\r
// XMLHttpRequest オブジェクトを再利用する際も、 abort メソッドを呼び出す必要があるようです。\r
- this._rawObject.abort && this._rawObject.abort();\r
+ this[ '_rawObject' ].abort && this[ '_rawObject' ].abort();\r
\r
this._method = this._type = '';\r
this._canceled = this._busy = this._error = false;\r
- this._timerID && X.Timer.remove( this._timerID );\r
+ this._timerID && X_Timer_remove( this._timerID );\r
this._percent = this._timerID = 0;\r
},\r
\r
handleEvent : function( e ){\r
- var raw = this._rawObject,\r
+ var raw = this[ '_rawObject' ],\r
live = !this._canceled,\r
status, data;\r
\r
case 1 :\r
return;\r
case 2 : // 0% ajaxstart\r
- live && this.asyncDispatch( { type : X_Event.PROGRESS, percent : 0 } );\r
+ live && this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, percent : 0 } );\r
return;\r
case 3 :\r
- live && this.asyncDispatch( { type : X_Event.PROGRESS, percent : this._percent < 99.9 ? 99.9 : ( this._percent + 100 ) / 2 } );\r
+ live && this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, percent : this._percent < 99.9 ? 99.9 : ( this._percent + 100 ) / 2 } );\r
// 99.9%\r
return;\r
case 4 :\r
break;\r
};\r
\r
- this.asyncDispatch( 32, { type : X_Event.SUCCESS, status : status || 200, data : data } );\r
+ this[ 'asyncDispatch' ]( 32, { type : X_EVENT_SUCCESS, status : status || 200, data : data } );\r
} else {\r
- live && this.asyncDispatch( 32, { type : X_Event.ERROR, status : raw.status || 0, percent : 100 } );\r
+ live && this[ 'asyncDispatch' ]( 32, { type : X_EVENT_ERROR, status : raw.status || 0, percent : 100 } );\r
};\r
break;\r
\r
case 'progress' :\r
if( e.lengthComputable ){\r
this._percent = e.loaded / e.total;\r
- live && this.asyncDispatch( { type : X_Event.PROGRESS, percent : this._percent } );\r
+ live && this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, percent : this._percent } );\r
};\r
break;\r
\r
//console.dir( e );\r
this._busy = false;\r
this._error = X_UA[ 'Opera' ] || X_UA[ 'Webkit' ] ;\r
- live && this.asyncDispatch( 32, { type : X_Event.ERROR, status : raw.status } );\r
+ live && this[ 'asyncDispatch' ]( 32, { type : X_EVENT_ERROR, status : raw.status } );\r
break;\r
\r
case 'timeout' : // Gecko 12.0 https://developer.mozilla.org/ja/docs/XMLHttpRequest/Synchronous_and_Asynchronous_Requests\r
this._busy = false;\r
this._error = !!X_UA[ 'Gecko' ];\r
- this.asyncDispatch( X_Event.TIMEOUT );\r
+ this[ 'asyncDispatch' ]( X_EVENT_TIMEOUT );\r
break;\r
};\r
},\r
\r
onTimeout : function(){\r
- var raw = this._rawObject,\r
+ var raw = this[ '_rawObject' ],\r
live = !X_NET_XHRWrapper._canceled || !this._busy;\r
\r
if( raw.readyState < 3 ){\r
this._busy = false;\r
- live && this.asyncDispatch( X_Event.TIMEOUT );\r
+ live && this[ 'asyncDispatch' ]( X_EVENT_TIMEOUT );\r
};\r
this._timerID = 0;\r
},\r
\r
onUploadProgress : X.Net.XHR.UL_PROGRESS && function( e ){\r
- var raw = X_NET_XHRWrapper._rawObject.upload,\r
+ var raw = X_NET_XHRWrapper[ '_rawObject' ].upload,\r
live = !X_NET_XHRWrapper._canceled,\r
states, data;\r
}\r
// 同期リクエストでなければならない場合, unload, beforeunload時\r
\r
if( X_UA[ 'IE8' ] ){\r
- X_NET_XHRWrapper.listen( [ 'readystatechange', 'error', 'timeout' ] ); //, 'abort'\r
+ X_NET_XHRWrapper[ 'listen' ]( [ 'readystatechange', 'error', 'timeout' ] ); //, 'abort'\r
} else\r
if( X_UA[ 'IE7' ] ){\r
if( X_URL_IS_LOCAL ){\r
- X_NET_XHRWrapper.listen( 'readystatechange' ); // ie7 ActiveX の場合、error は不可\r
+ X_NET_XHRWrapper[ 'listen' ]( 'readystatechange' ); // ie7 ActiveX の場合、error は不可\r
} else {\r
- X_NET_XHRWrapper.listen( [ 'readystatechange', 'error' ] );\r
+ X_NET_XHRWrapper[ 'listen' ]( [ 'readystatechange', 'error' ] );\r
};\r
} else\r
if( X_Net_XHR_ACTIVE_X ){ // win ie5-6\r
- X_NET_XHRWrapper.listen( 'readystatechange' );\r
+ X_NET_XHRWrapper[ 'listen' ]( 'readystatechange' );\r
} else \r
if( X.Net.XHR.PROGRESS ){\r
- X_NET_XHRWrapper.listen( [ 'load', 'progress', 'error', 'timeout' ] ); //, 'abort'\r
+ X_NET_XHRWrapper[ 'listen' ]( [ 'load', 'progress', 'error', 'timeout' ] ); //, 'abort'\r
} else {\r
- X_NET_XHRWrapper.listen( [ 'load', 'readystatechange', 'error', 'timeout' ] ); //, 'abort'\r
+ X_NET_XHRWrapper[ 'listen' ]( [ 'load', 'readystatechange', 'error', 'timeout' ] ); //, 'abort'\r
};\r
\r
if( X_NET_XHRWrapper.onUploadProgress ){\r
- X_NET_XHRWrapper._rawObject.upload.addEventListener( 'progress', X_NET_XHRWrapper.onUploadProgress );\r
+ X_NET_XHRWrapper[ '_rawObject' ].upload.addEventListener( 'progress', X_NET_XHRWrapper.onUploadProgress );\r
};\r
};\r
\r
X_NET_JSONPWrapper._busy = false;
X_NET_JSONPWrapper
- .asyncDispatch( {
- type : jsonString ? X_Event.SUCCESS : X_Event.ERROR,
+ [ 'asyncDispatch' ]( {
+ type : jsonString ? X_EVENT_SUCCESS : X_EVENT_ERROR,
data : window.JSON ? JSON.parse( jsonString ) : eval( 'var a=' + jsonString + ';a' )
} );
X_NET_JSONP_NinjaIframe
.refresh( html.join( '' ) )
- .listen( [ X_Event.SUCCESS, X_Event.ERROR ], X_NET_JSONPWrapper, X_NET_JSONP_iframeListener );
+ [ 'listen' ]( [ X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_JSONPWrapper, X_NET_JSONP_iframeListener );
};
function X_NET_JSONP_iframeListener( e ){
switch( e.type ){
- case X_Event.SUCCESS :
+ case X_EVENT_SUCCESS :
console.log( 'iframe onload, but' );
if( ++X_NET_JSONPWrapper._onloadCount < X_Net_JSONP_onloadCount ) return;
// TODO callback が無ければ error
- X_NET_JSONPWrapper.asyncDispatch( 1000, X_Event.ERROR );
+ X_NET_JSONPWrapper[ 'asyncDispatch' ]( 1000, X_EVENT_ERROR );
break;
- case X_Event.ERROR :
+ case X_EVENT_ERROR :
console.log( 'iframe onerror' );
- X_NET_JSONPWrapper.asyncDispatch( X_Event.ERROR );
+ X_NET_JSONPWrapper[ 'asyncDispatch' ]( X_EVENT_ERROR );
break;
};
- X_NET_JSONP_NinjaIframe.unlisten();
- return X.Callback.UN_LISTEN;
+ X_NET_JSONP_NinjaIframe[ 'unlisten' ]();
+ return X_Callback_UN_LISTEN;
};
// TODO extend NinjaIframe
X_NET_JSONPWrapper = X_Class_override(
- new X.EventDispatcher(),
+ X_EventDispatcher(),
{
_busy : false,
* Opera7 では毎回 image を作る必要あり、src が異なればOK?\r
*/\r
X_NET_ImageWrapper = X_Class_override(\r
- !X_Net_Image_isElement ? new X.EventDispatcher( X_Net_Image_image ) : new X.Node( X_Net_Image_image ),\r
+ !X_Net_Image_isElement ? X_EventDispatcher( X_Net_Image_image ) : Node( X_Net_Image_image ),\r
{\r
\r
_busy : false,\r
this.delay = data.delay || 100;\r
this.timeout = data.timeout || 5000;\r
\r
- this._rawObject.src = this.abspath;\r
+ this[ '_rawObject' ].src = this.abspath;\r
\r
- if( X_UA[ 'Opera7' ] && this._rawObject.complete ){\r
- this.asyncDispatch( 'load' );\r
+ if( X_UA[ 'Opera7' ] && this[ '_rawObject' ].complete ){\r
+ this[ 'asyncDispatch' ]( 'load' );\r
} else {\r
- this.timerID = X.Timer.add( this.delay, 0, this, this._detect );\r
+ this.timerID = X_Timer_add( this.delay, 0, this, this._detect );\r
};\r
},\r
\r
if( this.finish ) return;\r
this._busy = false;\r
this.finish = true;\r
- this.timerID && X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( /*e.type === 'error' ?*/ X_Event.ERROR /*: X_Event.CANCELED*/ );\r
+ this.timerID && X_Timer_remove( this.timerID );\r
+ this.timerID = this[ 'asyncDispatch' ]( /*e.type === 'error' ?*/ X_EVENT_ERROR /*: X_EVENT_CANCELED*/ );\r
break;\r
case 'load' :\r
// if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
// if( timer ) return; // これがあると safari3.2 で駄目、、、\r
this._busy = false;\r
this.finish = true;\r
- this.timerID && X.Timer.remove( this.timerID );\r
- if( X_UA[ 'Opera' ] && !this._rawObject.complete ){\r
- this.timerID = this.asyncDispatch( X_Event.ERROR );\r
+ this.timerID && X_Timer_remove( this.timerID );\r
+ if( X_UA[ 'Opera' ] && !this[ '_rawObject' ].complete ){\r
+ this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
return;\r
};\r
size = X.Util.Image.getActualDimension( !X_Net_Image_isElement ? this.abspath : this );\r
- this.timerID = this.asyncDispatch( {\r
- type : X_Event.SUCCESS,\r
+ this.timerID = this[ 'asyncDispatch' ]( {\r
+ type : X_EVENT_SUCCESS,\r
src : this.abspath,\r
w : size[ 0 ],\r
h : size[ 1 ]\r
// TODO feedback net speed\r
- // time , this._rawObject.fileSize\r
+ // time , this[ '_rawObject' ].fileSize\r
} );\r
break;\r
- case X_Event.KILL_INSTANCE :\r
+ case X_EVENT_KILL_INSTANCE :\r
this.reset();\r
!X_Net_Image_hasImage && this.destroy(); // if xnode\r
break;\r
\r
_detect : function(){\r
if( this.finish ) return;\r
- if( this._rawObject && this._rawObject.complete ){\r
+ if( this[ '_rawObject' ] && this[ '_rawObject' ].complete ){\r
this._busy = false;\r
this.finish = true;\r
- if( this._rawObject.width ) return;\r
- X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( X_Event.ERROR );\r
+ if( this[ '_rawObject' ].width ) return;\r
+ X_Timer_remove( this.timerID );\r
+ this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
} else\r
if( this.timeout < ( this.tick += this.delay ) ){\r
this._busy = false;\r
this.finish = true;\r
- X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( X_Event.TIMEOUT );\r
+ X_Timer_remove( this.timerID );\r
+ this.timerID = this[ 'asyncDispatch' ]( X_EVENT_TIMEOUT );\r
};\r
},\r
\r
cancel : function(){\r
// abort がある?\r
- this._rawObject && this._rawObject.abort && this._rawObject.abort();\r
- // this._rawObject.src = '';\r
+ this[ '_rawObject' ] && this[ '_rawObject' ].abort && this[ '_rawObject' ].abort();\r
+ // this[ '_rawObject' ].src = '';\r
this._busy = false;\r
this.finish = true;\r
- this.asyncDispatch( X_Event.CANCELED );\r
+ this[ 'asyncDispatch' ]( X_EVENT_CANCELED );\r
},\r
\r
reset : function(){\r
- this.timerID && X.Timer.remove( this.timerID );\r
- //X_Net_Image_isElement ? this._rawObject.removeAttribute( 'src' ) : ( this._rawObject.src = '' );\r
- this._rawObject.src = '';\r
+ this.timerID && X_Timer_remove( this.timerID );\r
+ //X_Net_Image_isElement ? this[ '_rawObject' ].removeAttribute( 'src' ) : ( this[ '_rawObject' ].src = '' );\r
+ this[ '_rawObject' ].src = '';\r
this.timerID = 0;\r
this._busy = false;\r
this.finished = false;\r
}\r
);\r
\r
-X_NET_ImageWrapper.listen( [ 'load', 'error' /*, 'abort'*/, X_Event.KILL_INSTANCE ] );\r
+X_NET_ImageWrapper[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ] );\r
\r
-// X_Net_Image_isElement && X_NET_ImageWrapper.appendTo( X.X_Node_systemNode );\r
+// X_Net_Image_isElement && X_NET_ImageWrapper[ 'appendAt' ]( X.X_Node_systemNode );\r
};\r
\r
/*\r
- * X_Event.BACKEND_READY\r
- * X_Event.BACKEND_NONE\r
+ * X_EVENT_BACKEND_READY\r
+ * X_EVENT_BACKEND_NONE\r
* \r
- * X_Event.READY 再生可能、実際の状態は canplay から loadeddata まで様々、、、\r
- * X_Event.ERROR\r
+ * X_EVENT_READY 再生可能、実際の状態は canplay から loadeddata まで様々、、、\r
+ * X_EVENT_ERROR\r
* 1 : ユーザーによってメディアの取得が中断された\r
* 2 : ネットワークエラー\r
* 3 : メディアのデコードエラー\r
* 4 : メディアがサポートされていない\r
* \r
- * X_Event.MEDIA_PLAYING 再生中に1秒以下のタイミングで発生.currentTime が取れる?\r
- * X_Event.MEDIA_LOOP ループ直前に発生、キャンセル可能\r
- * X_Event.MEDIA_LOOPED ループ時に発生\r
- * X_Event.MEDIA_ENDED 再生位置の(音声の)最後についた\r
- * X_Event.MEDIA_PAUSED ポーズした\r
- * X_Event.MEDIA_WAITING 再生中に音声が待機状態に。間もなく X_Event.MEDIA_PLAYING に移行。\r
- * X_Event.MEDIA_SEEKING シーク中に音声が待機状態に。間もなく X_Event.MEDIA_PLAYING に移行。\r
+ * X_EVENT_MEDIA_PLAYING 再生中に1秒以下のタイミングで発生.currentTime が取れる?\r
+ * X_EVENT_MEDIA_LOOP ループ直前に発生、キャンセル可能\r
+ * X_EVENT_MEDIA_LOOPED ループ時に発生\r
+ * X_EVENT_MEDIA_ENDED 再生位置の(音声の)最後についた\r
+ * X_EVENT_MEDIA_PAUSED ポーズした\r
+ * X_EVENT_MEDIA_WAITING 再生中に音声が待機状態に。間もなく X_EVENT_MEDIA_PLAYING に移行。\r
+ * X_EVENT_MEDIA_SEEKING シーク中に音声が待機状態に。間もなく X_EVENT_MEDIA_PLAYING に移行。\r
*/\r
\r
-X.Audio = X.EventDispatcher.inherits(\r
+X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](\r
'X.Audio',\r
X.Class.POOL_OBJECT,\r
{\r
- source : '',\r
- backendName : '',\r
- _backend : -1,\r
+ 'source' : '',\r
+ 'backendName' : '',\r
+ _backend : -1,\r
\r
- Constructor : function( sourceList, opt_option ){\r
+ 'Constructor' : function( sourceList, opt_option ){\r
X_Audio_startDetectionBackend(\r
X_Audio_BACKENDS[ 0 ], this,\r
X_Type_isArray( sourceList ) ? X_Object_cloneArray( sourceList ) : [ sourceList ],\r
opt_option || {} );\r
- this.listenOnce( [ X_Event.BACKEND_READY, X_Event.BACKEND_NONE, X_Event.KILL_INSTANCE ], X_Audio_handleEvent );\r
+ this[ 'listenOnce' ]( [ X_EVENT_BACKEND_READY, X_EVENT_BACKEND_NONE, X_EVENT_KILL_INSTANCE ], X_Audio_handleEvent );\r
},\r
\r
- play : function( startTime, endTime, loop, loopStartTime, loopEndTime ){\r
+ 'play' : function( startTime, endTime, loop, loopStartTime, loopEndTime ){\r
var state, duration;\r
if( 0 <= startTime ){\r
- this.state( {\r
+ this[ 'state' ]( {\r
currentTime : startTime,\r
startTime : startTime,\r
endTime : endTime,\r
return this;\r
},\r
\r
- seek : function( seekTime ){\r
- var state = this.state(),\r
+ 'seek' : function( seekTime ){\r
+ var state = this[ 'state' ](),\r
end = X_AudioWrapper_getEndTime( X_Audio_getAudioWrapper( this ) );\r
if( seekTime < end ){\r
- this.state( { currentTime : seekTime } );\r
+ this[ 'state' ]( { currentTime : seekTime } );\r
};\r
return this;\r
},\r
\r
- pause : function(){\r
- this.state().playing && X_Audio_getAudioWrapper( this ).pause();\r
+ 'pause' : function(){\r
+ this[ 'state' ]().playing && X_Audio_getAudioWrapper( this ).pause();\r
return this;\r
},\r
\r
- state : function( obj ){\r
+ 'state' : function( obj ){\r
var backend = this._backend !== -1 && X_Audio_getAudioWrapper( this );\r
\r
if( obj === undefined ){\r
error : false,\r
playing : false,\r
\r
- source : this.source || '',\r
+ source : this[ 'source' ] || '',\r
duration : 0\r
};\r
};\r
return this;\r
}, \r
\r
- loop : function( v ){\r
+ 'loop' : function( v ){\r
var backend = this._backend !== -1 && X_Audio_getAudioWrapper( this );\r
if( v === undefined ){\r
return backend && backend.state().loop;\r
return this;\r
},\r
\r
- volume : function( v ){\r
+ 'volume' : function( v ){\r
var backend = this._backend !== -1 && X_Audio_getAudioWrapper( this );\r
if( v === undefined ){\r
return backend && backend.state().volume;\r
return this;\r
},\r
\r
- currentTime : function( v ){\r
+ 'currentTime' : function( v ){\r
var backend = this._backend !== -1 && X_Audio_getAudioWrapper( this );\r
if( v === undefined ){\r
return backend && backend.state().currentTime;\r
return this;\r
},\r
\r
- isPlaying : function(){\r
+ 'isPlaying' : function(){\r
return this._backend !== -1 && X_Audio_getAudioWrapper( this ).state().playing;\r
}\r
\r
\r
function X_Audio_handleEvent( e ){\r
switch( e.type ){\r
- case X_Event.BACKEND_READY :\r
- this.unlisten( X_Event.BACKEND_NONE, X_Audio_handleEvent );\r
- this.source = e.source;\r
- this.backendName = X_Audio_BACKENDS[ this._backend ].backendName;\r
+ case X_EVENT_BACKEND_READY :\r
+ this[ 'unlisten' ]( X_EVENT_BACKEND_NONE, X_Audio_handleEvent );\r
+ this[ 'source' ] = e.source;\r
+ this[ 'backendName' ] = X_Audio_BACKENDS[ this._backend ].backendName;\r
X_Audio_WRAPPER_LIST.push(\r
new X_Audio_BACKENDS[ this._backend ]\r
.klass( this, e.source, e.option ) );\r
break;\r
\r
- case X_Event.BACKEND_NONE :\r
- this.kill();\r
+ case X_EVENT_BACKEND_NONE :\r
+ this[ 'kill' ]();\r
break;\r
\r
- case X_Event.KILL_INSTANCE :\r
+ case X_EVENT_KILL_INSTANCE :\r
this._backend !== -1 && X_Audio_getAudioWrapper( this ).close();\r
break;\r
};\r
sup = [ proxy, sourceList, option, source, ext ];\r
sup[ 5 ] = sup;\r
\r
- proxy.listenOnce( X_Event.COMPLETE, backend, X_Audio_onEndedDetection, sup );\r
+ proxy[ 'listenOnce' ]( X_EVENT_COMPLETE, backend, X_Audio_onEndedDetection, sup );\r
backend.detect( proxy, source, ext );\r
} else {\r
- proxy.asyncDispatch( X_Event.BACKEND_NONE );\r
+ proxy[ 'asyncDispatch' ]( X_EVENT_BACKEND_NONE );\r
};\r
};\r
\r
\r
if( e.canPlay ){\r
proxy._backend = i;\r
- proxy.asyncDispatch( {\r
- type : X_Event.BACKEND_READY,\r
- option : option,\r
- source : source,\r
- backendName : this.backendName\r
+ proxy[ 'asyncDispatch' ]( {\r
+ type : X_EVENT_BACKEND_READY,\r
+ 'option' : option,\r
+ 'source' : source,\r
+ 'backendName' : this[ 'backendName' ]\r
} ); \r
} else {\r
- console.log( 'No ' + source + ' ' + this.backendName );\r
+ console.log( 'No ' + source + ' ' + this[ 'backendName' ] );\r
if( sup[ 3 ] = source = sourceList[ sourceList.indexOf( source ) + 1 ] ){\r
sup[ 4 ] = ext = X_URL_getEXT( source );\r
- proxy.listenOnce( X_Event.COMPLETE, this, X_Audio_onEndedDetection, sup );\r
+ proxy[ 'listenOnce' ]( X_EVENT_COMPLETE, this, X_Audio_onEndedDetection, sup );\r
this.detect( proxy, source, ext );\r
} else\r
if( backend = X_Audio_BACKENDS[ i + 1 ] ){\r
X_Audio_startDetectionBackend( backend, proxy, sourceList, option );\r
} else {\r
- proxy.asyncDispatch( X_Event.BACKEND_NONE );\r
+ proxy[ 'asyncDispatch' ]( X_EVENT_BACKEND_NONE );\r
}; \r
};\r
};\r
};
};
- X_Audio_WebAudioWrapper = X.EventDispatcher.inherits(
+ X_Audio_WebAudioWrapper = X_EventDispatcher[ 'inherits' ](
'X.AV.WebAudioWrapper',
X.Class.POOL_OBJECT,
{
} else
if( audio ){
// TODO 当てにしていたaudioがclose 等した場合
- audio.proxy.listenOnce( 'canplaythrough', this, this._onBufferReady );
+ audio.proxy[ 'listenOnce' ]( 'canplaythrough', this, this._onBufferReady );
} else {
this.xhr = X.Net.xhrGet( url, 'arraybuffer' )
- .listen( X_Event.PROGRESS, this )
- .listenOnce( [ X_Event.SUCCESS, X_Event.COMPLETE, X_Event.CANCELED ], this );
+ [ 'listen' ]( X_EVENT_PROGRESS, this )
+ [ 'listenOnce' ]( [ X_EVENT_SUCCESS, X_EVENT_COMPLETE, X_EVENT_CANCELED ], this );
};
},
handleEvent : function( e ){
switch( e.type ){
- case X_Event.PROGRESS :
+ case X_EVENT_PROGRESS :
e.percent ?
- this.proxy.dispatch( { type : 'progress', percent : e.percent } ) :
- this.proxy.dispatch( 'loadstart' );
+ this.proxy[ 'dispatch' ]( { type : 'progress', percent : e.percent } ) :
+ this.proxy[ 'dispatch' ]( 'loadstart' );
return;
- case X_Event.SUCCESS :
+ case X_EVENT_SUCCESS :
console.log( 'WebAudio xhr success! ' + !!X_Audio_WebAudio_context.decodeAudioData + ' t:' + typeof e.data );
// TODO 旧api
// https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Porting_webkitAudioContext_code_to_standards_based_AudioContext
};
break;
- case X_Event.CANCELED :
+ case X_EVENT_CANCELED :
this.error = 1;
- this.proxy.dispatch( 'aborted' );
+ this.proxy[ 'dispatch' ]( 'aborted' );
break;
- case X_Event.COMPLETE :
+ case X_EVENT_COMPLETE :
this.error = 2;
- this.proxy.asyncDispatch( { type : X_Event.ERROR, message : 'xhr error' } );
+ this.proxy[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, message : 'xhr error' } );
break;
};
- this.xhr.unlisten( [ X_Event.PROGRESS, X_Event.SUCCESS, X_Event.COMPLETE, X_Event.CANCELED ], this );
+ this.xhr[ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_COMPLETE, X_EVENT_CANCELED ], this );
delete this.xhr;
},
this.onDecodeSuccess && this._onDecodeComplete();
if ( !buffer ) {
- this.proxy.asyncDispatch( { type : X_Event.ERROR, message : 'buffer is ' + buffer } );
+ this.proxy[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, message : 'buffer is ' + buffer } );
return;
};
this.buffer = buffer;
this.duration = buffer.duration * 1000;
/*
- this.proxy.asyncDispatch( 'loadedmetadata' );
- this.proxy.asyncDispatch( 'loadeddata' );
- this.proxy.asyncDispatch( 'canplay' );
- this.proxy.asyncDispatch( 'canplaythrough' );
+ this.proxy[ 'asyncDispatch' ]( 'loadedmetadata' );
+ this.proxy[ 'asyncDispatch' ]( 'loadeddata' );
+ this.proxy[ 'asyncDispatch' ]( 'canplay' );
+ this.proxy[ 'asyncDispatch' ]( 'canplaythrough' );
*/
- this.proxy.asyncDispatch( X_Event.READY );
+ this.proxy[ 'asyncDispatch' ]( X_EVENT_READY );
- this.autoplay && X.Timer.once( 16, this, this.play );
+ this.autoplay && X_Timer_once( 16, this, this.play );
console.log( 'WebAudio decoded!' );
},
console.log( 'WebAudio decode error!' );
this._onDecodeComplete();
this.error = 3;
- this.proxy.asyncDispatch( { type : X_Event.ERROR, message : 'decode error' } );
+ this.proxy[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, message : 'decode error' } );
},
_onDecodeComplete : function(){
this.gainNode.gain.value = this.volume;
// おかしい、stop 前に外していても呼ばれる、、、@Firefox33.1
- // 破棄された X.Callback が呼ばれて、obj._() でエラーになる。Firefox では、onended は使わない
+ // 破棄された X.Callback が呼ばれて、obj.proxy() でエラーになる。Firefox では、onended は使わない
if( false && this.source.onended !== undefined ){
//console.log( '> use onended' );
this.source.onended = this._onended || ( this._onended = X_Callback_create( this, this._onEnded ) );
} else {
- this._timerID && X.Timer.remove( this._timerID );
- this._timerID = X.Timer.once( end - begin, this, this._onEnded );
+ this._timerID && X_Timer_remove( this._timerID );
+ this._timerID = X_Timer_once( end - begin, this, this._onEnded );
};
if( this.source.start ){
this._startPos = begin;
this._endPosition = end;
this._startTime = X_Audio_WebAudio_context.currentTime * 1000;
- this._interval = this._interval || X.Timer.add( 1000, 0, this, this._onInterval );
+ this._interval = this._interval || X_Timer_add( 1000, 0, this, this._onInterval );
},
_onInterval : function(){
delete this._interval;
return X_Callback_UN_LISTEN;
};
- this.proxy.dispatch( X_Event.MEDIA_PLAYING );
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_PLAYING );
},
_onEnded : function(){
if( time < 0 ){
console.log( '> onEnd crt:' + ( X_Audio_WebAudio_context.currentTime * 1000 ) + ' startTime:' + this._startTime +
' from:' + this._startPos + ' to:' + this._endPosition );
- this._timerID = X.Timer.once( -time, this, this._onEnded );
+ this._timerID = X_Timer_once( -time, this, this._onEnded );
return;
};
};
if( this.loop ){
- if( !( this.proxy.dispatch( X_Event.MEDIA_BEFORE_LOOP ) & X.Callback.PREVENT_DEFAULT ) ){
+ if( !( this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_Callback_PREVENT_DEFAULT ) ){
this.looped = true;
- this.proxy.dispatch( X_Event.MEDIA_LOOPED );
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );
this.play();
};
} else {
this.pause();
- this.proxy.dispatch( X_Event.MEDIA_ENDED );
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_ENDED );
};
};
},
this.seekTime = this.state().currentTime;
- this._timerID && X.Timer.remove( this._timerID );
+ this._timerID && X_Timer_remove( this._timerID );
delete this._timerID;
delete this.playing;
//
detect : function( proxy, source, ext ){
- proxy.asyncDispatch( { type : X_Event.COMPLETE, canPlay : X_Audio_codecs[ ext ] } );
+ proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : X_Audio_codecs[ ext ] } );
},
klass : X_Audio_WebAudioWrapper
};\r
};\r
\r
- X_Audio_HTMLAudioWrapper = X.EventDispatcher.inherits(\r
+ X_Audio_HTMLAudioWrapper = X_EventDispatcher[ 'inherits' ](\r
'X.AV.HTML5AudioWrapper',\r
X.Class.POOL_OBJECT,\r
{\r
_src : '',\r
\r
Constructor : function( proxy, source, option ){\r
+ var raw;\r
+ \r
this.proxy = proxy;\r
this._closed = false;\r
\r
X_AudioWrapper_updateStates( this, option );\r
\r
if( option[ 'useVideo' ] ){\r
- this._rawObject = document.createElement( 'video' );\r
- this._rawObject.preload = 'none'; // auto, metadata, none\r
- //this._rawObject.autoplay = false, // no-auto\r
- this._rawObject.loop = false;\r
- this._rawObject.muted = false;\r
- //this._rawObject.crossorigin = option[ 'crossorigin' ] || ''; //crossorigin: "anonymous", X.URL.isSameDomain() で切り替え\r
- this._rawObject.style.cssText = 'position:absolute;bottom:0;left:-50px;width:100px;height:100px;opacity:0;';\r
- this._rawObject.controls = false;\r
- this._rawObject.WebKitPlaysInline = true;\r
- this._rawObject.src = source;\r
- //this._rawObject.onclick = "alert('play');this.play();";\r
- document.body.appendChild( this._rawObject );\r
- //this._rawObject.load();\r
+ this[ '_rawObject' ] = raw = document.createElement( 'video' );\r
+ raw.preload = 'none'; // auto, metadata, none\r
+ //raw.autoplay = false, // no-auto\r
+ raw.loop = false;\r
+ raw.muted = false;\r
+ //raw.crossorigin = option[ 'crossorigin' ] || ''; //crossorigin: "anonymous", X.URL.isSameDomain() で切り替え\r
+ raw.style.cssText = 'position:absolute;bottom:0;left:-50px;width:100px;height:100px;opacity:0;';\r
+ raw.controls = false;\r
+ raw.WebKitPlaysInline = true;\r
+ raw.src = source;\r
+ //raw.onclick = "alert('play');this.play();";\r
+ document.body.appendChild( raw );\r
+ //raw.load();\r
} else {\r
- this._rawObject = X_Audio_rawAudio || new X_Audio_constructor( source );// X_Doc_create( 'audio', { src : source } ).appendToRoot();//( X.X_Node_systemNode );\r
- this._rawObject.autobuffer = false;\r
+ this[ '_rawObject' ] = X_Audio_rawAudio || new X_Audio_constructor( source );\r
+ // X_Doc_create( 'audio', { src : source } )[ 'appendTo' ]( X.Doc.body );\r
+ this[ '_rawObject' ].autobuffer = false;\r
this._src = source;\r
};\r
\r
- this.listen( [\r
+ this[ 'listen' ]( [\r
'loadstart', 'load', 'progress', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'pause', 'loadedmetadata',\r
'loadeddata', 'waiting', 'playing', 'canplay', 'canplaythrough', 'seeking', 'seeked', 'timeupdate', 'ended',\r
'ratechange', 'durationchange', 'volumechange' ], this.handleEventProxy ); \r
\r
- //document.body.appendChild( this._rawObject );\r
- this._rawObject.autoplay = false;\r
+ //document.body.appendChild( this[ '_rawObject' ] );\r
+ this[ '_rawObject' ].autoplay = false;\r
\r
- if( X_Audio_rawAudio === this._rawObject ){\r
+ if( X_Audio_rawAudio === this[ '_rawObject' ] ){\r
if( X_Audio_HTMLAudioWrapper_badOperaAndroid ){\r
X_Audio_HTMLAudioWrapper_badOperaAndroid && alert( 12 );\r
X_EventDispatcher_toggleAllEvents( this, false );\r
- this._rawObject = new X_Audio_constructor( X_URL_toAbsolutePath( source ) );\r
+ this[ '_rawObject' ] = new X_Audio_constructor( X_URL_toAbsolutePath( source ) );\r
//X_EventDispatcher_toggleAllEvents( this, true );\r
} else {\r
X_Audio_rawAudio.src = source;\r
};\r
\r
- //this._rawObject = new X_Audio_constructor( X_URL_toAbsolutePath( source ) );\r
+ //this[ '_rawObject' ] = new X_Audio_constructor( X_URL_toAbsolutePath( source ) );\r
/*!X_Audio_Sprite_needTouchFirst && */ X_Audio_rawAudio.load(); // 要る?\r
X_Audio_rawAudio = null;\r
};\r
\r
- this.listenOnce( X_Event.KILL_INSTANCE );\r
+ this[ 'listenOnce' ]( X_EVENT_KILL_INSTANCE );\r
},\r
\r
handleEvent : function( e ){\r
switch( e.type ){\r
\r
- case X_Event.KILL_INSTANCE :\r
+ case X_EVENT_KILL_INSTANCE :\r
break;\r
};\r
},\r
break;\r
case 'progress' : // ブラウザがコンテンツの取得を実行した場合に発生\r
console.log( e.loaded + ' ' + e.total * 100 + '%' );\r
- // iem9 で常に0 this._rawObject.networkState;\r
+ // iem9 で常に0 this[ '_rawObject' ].networkState;\r
// opera Android 12 で buffered.end() へのアクセスはエラー try catch も無効、iem9 は常に end(0) = 0\r
- //console.log( 'buffered.end ' + this._rawObject.buffered && this._rawObject.buffered.end(0) ); \r
+ //console.log( 'buffered.end ' + this[ '_rawObject' ].buffered && this[ '_rawObject' ].buffered.end(0) ); \r
break;\r
\r
case 'canplay' : // 今すぐに再生を再開できるが、バッファリングが不十分でコンテンツを最後まで表示できないと予測している場合に発生\r
if( X_Audio_HTMLAudioWrapper_durationFix && this._playForDuration === 0 ){\r
- //console.log( 'DurationFix開始 - ' + this._rawObject.duration );\r
+ //console.log( 'DurationFix開始 - ' + this[ '_rawObject' ].duration );\r
this._playForDuration = 1;\r
- this._rawObject.play();\r
- this._rawObject.currentTime = this._beginTime / 1000; // 必要!\r
+ this[ '_rawObject' ].play();\r
+ this[ '_rawObject' ].currentTime = this._beginTime / 1000; // 必要!\r
return;\r
};\r
case 'loadedmetadata' : // ブラウザがメディアリソースの長さと寸法を判定した場合に発生\r
case 'loadeddata' : // コンテンツの表示を現在の再生位置で初めて行えるようになった場合に発生\r
case 'canplaythrough' : // 今すぐに再生を開始してもバッファリングで停止することなく最後まで表示できると予測している場合に発生\r
if( X_Audio_HTMLAudioWrapper_durationFix && this._playForDuration !== 2 ) return;\r
- this.duration = this.duration || this._rawObject.duration * 1000;\r
+ this.duration = this.duration || this[ '_rawObject' ].duration * 1000;\r
break;\r
\r
case 'stalled' : // ブラウザがコンテンツの取得を試みたが、データがまだ用意されていない場合に発生\r
break;\r
\r
case 'error' : // コンテンツの取得実行中にエラーが発生した場合に発生\r
- type = X_Event.ERROR;\r
+ type = X_EVENT_ERROR;\r
break;\r
\r
case 'playing' : // 再生が開始された場合に発生\r
if( X_Audio_HTMLAudioWrapper_currentTimeFix ){\r
this._playTime = X_Timer_now();\r
};\r
- type = X_Event.MEDIA_PLAYING;\r
+ type = X_EVENT_MEDIA_PLAYING;\r
case 'play' : // 再生が開始された。play()メソッドからの復帰後に発生する場合に発生\r
case 'pause' : // 再生が一時停止された。pauseメソッドからの復帰後に発生する場合に発生\r
case 'seeked' : // シークがfalseに変化した場合に発生\r
break;\r
\r
case 'waiting' : // 次のフレームが利用不可のため再生を停止したが、そのフレームがやがて利用可能になると想定している場合に発生\r
- type = X_Event.MEDIA_WAITING;\r
+ type = X_EVENT_MEDIA_WAITING;\r
case 'seeking' : // シークがtrueに変化し、イベントを発生させるのに十分な時間がシーク操作にかかっている場合に発生\r
- type = type || X_Event.MEDIA_SEEKING;\r
+ type = type || X_EVENT_MEDIA_SEEKING;\r
if( this._playForDuration === 1 ) return;\r
break;\r
\r
case 'ended' :\r
if( !this._closed && this.loop ){\r
- if( !( this.proxy.dispatch( X_Event.MEDIA_BEFORE_LOOP ) & X.Callback.PREVENT_DEFAULT ) ){\r
+ if( !( this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_Callback_PREVENT_DEFAULT ) ){\r
this.looped = true;\r
- this.proxy.dispatch( X_Event.MEDIA_LOOPED );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );\r
this.play();\r
};\r
return;\r
};\r
- type = X_Event.MEDIA_ENDED;\r
+ type = X_EVENT_MEDIA_ENDED;\r
this.seekTime = 0;\r
delete this.playing;\r
break;\r
case 'timeupdate' : // 通常の再生が行われ現在の再生位置の変化が起こった場合に発生\r
if( X_Audio_HTMLAudioWrapper_ieMobile9Fix ){\r
if( this._playForDuration === 1 ){\r
- console.log( 'tu ' + this._rawObject.duration );\r
- if( !this.duration && X_Type_isFinite( this._rawObject.duration ) ){\r
- this.duration = this.duration || this._rawObject.duration * 1000;\r
+ console.log( 'tu ' + this[ '_rawObject' ].duration );\r
+ if( !this.duration && X_Type_isFinite( this[ '_rawObject' ].duration ) ){\r
+ this.duration = this.duration || this[ '_rawObject' ].duration * 1000;\r
this._playForDuration = 2;\r
\r
- //this.proxy.asyncDispatch( 'loadedmetadata' );\r
- //this.proxy.asyncDispatch( 'loadeddata' );\r
- //this.proxy.asyncDispatch( 'canplay' );\r
- //this.proxy.asyncDispatch( 'canplaythrough' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'loadedmetadata' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'loadeddata' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'canplay' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'canplaythrough' );\r
loaded = true;\r
//console.log( 'durationFix が完了' + this.duration );\r
break;\r
} else {\r
- this._rawObject.currentTime = this._beginTime / 1000; // 必要!\r
+ this[ '_rawObject' ].currentTime = this._beginTime / 1000; // 必要!\r
return;\r
};\r
} else\r
- if( this._rawObject.currentTime === this._lastCurrentTime ){\r
- //this.proxy.dispatch( 'seeking' );\r
- this.proxy.dispatch( X_Event.MEDIA_WAITING );\r
+ if( this[ '_rawObject' ].currentTime === this._lastCurrentTime ){\r
+ //this.proxy[ 'dispatch' ]( 'seeking' );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_WAITING );\r
return;\r
};\r
- this._lastCurrentTime = this._rawObject.currentTime;\r
+ this._lastCurrentTime = this[ '_rawObject' ].currentTime;\r
};\r
- this.duration = this.duration || this._rawObject.duration * 1000;\r
+ this.duration = this.duration || this[ '_rawObject' ].duration * 1000;\r
\r
if( this.playing ){\r
end = X_AudioWrapper_getEndTime( this );\r
- now = X_Audio_HTMLAudioWrapper_currentTimeFix ? X_Timer_now() - this._playTime + this._beginTime : this._rawObject.currentTime * 1000 | 0;\r
+ now = X_Audio_HTMLAudioWrapper_currentTimeFix ? X_Timer_now() - this._playTime + this._beginTime : this[ '_rawObject' ].currentTime * 1000 | 0;\r
if( 0 + end <= 0 + now ){ // なぜか iem9 で必要,,,\r
if( this.loop ){\r
- if( !( this.proxy.dispatch( X_Event.MEDIA_BEFORE_LOOP ) & X.Callback.PREVENT_DEFAULT ) ){\r
+ if( !( this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_Callback_PREVENT_DEFAULT ) ){\r
this.looped = true;\r
- this.proxy.dispatch( X_Event.MEDIA_LOOPED );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );\r
this.play();\r
};\r
} else {\r
this.pause();\r
- this.proxy.dispatch( X_Event.MEDIA_ENDED );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_ENDED );\r
};\r
return;\r
};\r
} else {\r
return;\r
};\r
- type = X_Event.MEDIA_PLAYING;\r
+ type = X_EVENT_MEDIA_PLAYING;\r
break;\r
\r
case 'durationchange' : // duration属性が更新された場合に発生\r
\r
if( !X_Audio_HTMLAudioWrapper_durationFix ){\r
- this.duration = this._rawObject.duration * 1000;\r
+ this.duration = this[ '_rawObject' ].duration * 1000;\r
} else\r
// Desktop Opera では Infinity, IEM9 では NaN\r
- if( !this.duration && X_Type_isFinite( this._rawObject.duration ) ){\r
+ if( !this.duration && X_Type_isFinite( this[ '_rawObject' ].duration ) ){\r
\r
- //console.log( this._rawObject.duration );\r
+ //console.log( this[ '_rawObject' ].duration );\r
\r
- this.duration = this._rawObject.duration * 1000;\r
+ this.duration = this[ '_rawObject' ].duration * 1000;\r
\r
if( this._playForDuration === 0 ) this._playForDuration = 2;\r
\r
console.log( 'Loaded ' + this._loaded );\r
\r
if( this._loaded ){\r
- this._rawObject.currentTime = this._beginTime / 1000;\r
+ this[ '_rawObject' ].currentTime = this._beginTime / 1000;\r
console.log( '設定 ' + this._beginTime );\r
return;\r
};\r
\r
/*\r
- this.proxy.asyncDispatch( 'loadedmetadata' );\r
- this.proxy.asyncDispatch( 'loadeddata' );\r
- this.proxy.asyncDispatch( 'canplay' );\r
- this.proxy.asyncDispatch( 'canplaythrough' ); */\r
+ this.proxy[ 'asyncDispatch' ]( 'loadedmetadata' );\r
+ this.proxy[ 'asyncDispatch' ]( 'loadeddata' );\r
+ this.proxy[ 'asyncDispatch' ]( 'canplay' );\r
+ this.proxy[ 'asyncDispatch' ]( 'canplaythrough' ); */\r
\r
\r
loaded = true;\r
console.log( 'durationFix が完了' + this.duration );\r
\r
if( this.autoplay ){\r
- this._rawObject.currentTime = this._beginTime / 1000; \r
+ this[ '_rawObject' ].currentTime = this._beginTime / 1000; \r
} else {\r
// Opera12.17 WinXP で勝手に再生される不具合\r
// これで一応再生は止まる、、、\r
- this._rawObject.src = '';\r
- //this._rawObject.load(); \r
+ this[ '_rawObject' ].src = '';\r
+ //this[ '_rawObject' ].load(); \r
};\r
};\r
\r
\r
\r
if( !this._loaded && ( loaded || e.type === X_Audio_HTMLAudio_playTrigger || e.type === 'loadeddata' ) ){\r
- this.autoplay && X.Timer.once( 16, this, this.play );\r
+ this.autoplay && X_Timer_once( 16, this, this.play );\r
this._loaded = true;\r
- this.proxy.dispatch( X_Event.READY );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_READY );\r
console.log( 'Loaded! ' + e.type + ' d:' + ( this.duration | 0 ) );\r
return;\r
};\r
\r
- loaded || ( type && this.proxy.dispatch( type ) );\r
+ loaded || ( type && this.proxy[ 'dispatch' ]( type ) );\r
},\r
\r
close : function(){\r
delete this._closed;\r
delete this._loaded;\r
\r
- this._rawObject.src = '';\r
- this._rawObject.load();\r
+ this[ '_rawObject' ].src = '';\r
+ this[ '_rawObject' ].load();\r
},\r
\r
play : function(){\r
};\r
\r
if( X_Audio_HTMLAudioWrapper_ieMobile9Fix && this._playForDuration === 0 ){\r
- console.log( 'DurationFix開始 - ' + this._rawObject.duration );\r
+ console.log( 'DurationFix開始 - ' + this[ '_rawObject' ].duration );\r
this._playForDuration = 1;\r
};\r
\r
begin = begin < 0 ? 0 : begin;\r
};\r
\r
- if( !this._rawObject.src ){\r
+ if( !this[ '_rawObject' ].src ){\r
this._beginTime = begin;\r
- this._rawObject.src = this._src;\r
+ this[ '_rawObject' ].src = this._src;\r
delete this._playForDuration;\r
};\r
\r
if( !this.playing ){\r
if( X_UA[ 'Chrome' ] ){ // [CHROME][FIX] volume TODO どの version で 修正される?\r
// [!] delay\r
- X.Timer.once( 0, this, this._fixForChrome );\r
- this._rawObject.volume = 0;\r
+ X_Timer_once( 0, this, this._fixForChrome );\r
+ this[ '_rawObject' ].volume = 0;\r
} else {\r
- this._rawObject.volume = this.volume;\r
+ this[ '_rawObject' ].volume = this.volume;\r
};\r
- this._rawObject.play();\r
+ this[ '_rawObject' ].play();\r
this.playing = true;\r
};\r
//http://himaxoff.blog111.fc2.com/blog-entry-97.html\r
//Firefox3.6では一度も play() していない状態で currentTime = 0 を実行するとエラーになる。\r
//また、GoogleChrome7 では currentTime = 0 直後に play() すると、pause()した位置前後の音が混ざることがある。(少なくとも自分の環境では)\r
- this._rawObject.currentTime = this._lastCurrentTime = begin / 1000;\r
+ this[ '_rawObject' ].currentTime = this._lastCurrentTime = begin / 1000;\r
\r
console.log( '[HTMLAudio] play ' + begin + ' -> ' + end );\r
\r
\r
// [CHROME][FIX] volume\r
_fixForChrome : X_UA[ 'Chrome' ] && function(){\r
- !this._closed && ( this._rawObject.volume = this.volume );\r
+ !this._closed && ( this[ '_rawObject' ].volume = this.volume );\r
},\r
\r
pause : function(){\r
\r
delete this._playTime;\r
\r
- !this._rawObject.error && this._rawObject.pause();\r
+ !this[ '_rawObject' ].error && this[ '_rawObject' ].pause();\r
\r
if( X_Audio_HTMLAudioWrapper_durationFix ){\r
- this._rawObject.src = '';\r
+ this[ '_rawObject' ].src = '';\r
// load();\r
};\r
delete this.playing;\r
loop : this.loop,\r
looped : this.looped,\r
volume : this.volume,\r
- playing : this.playing, // && !this._rawObject.error && !this._rawObject.paused && !this._rawObject.ended, \r
+ playing : this.playing, // && !this[ '_rawObject' ].error && !this[ '_rawObject' ].paused && !this[ '_rawObject' ].ended, \r
duration : this.duration,\r
\r
currentTime :\r
this.playing ?\r
( X_Audio_HTMLAudioWrapper_currentTimeFix ?\r
X_Timer_now() - this._playTime + this._beginTime :\r
- this._rawObject.currentTime * 1000 | 0 ) :\r
+ this[ '_rawObject' ].currentTime * 1000 | 0 ) :\r
this.seekTime,\r
/*\r
http://www.w3schools.com/tags/av_prop_error.asp\r
3 = MEDIA_ERR_DECODE - error occurred when decoding\r
4 = MEDIA_ERR_SRC_NOT_SUPPORTED - audio/video not supported\r
*/\r
- error : this._rawObject.error || 0 // 0, 1 ~ 4 \r
+ error : this[ '_rawObject' ].error || 0 // 0, 1 ~ 4 \r
}; \r
};\r
\r
\r
} else\r
if( result & 4 ){\r
- this._rawObject.volume = this.volume;\r
+ this[ '_rawObject' ].volume = this.volume;\r
};\r
\r
}\r
console.log( 'HTML Audio ' + ok + ' ext:' + ext );\r
*/\r
\r
- proxy.asyncDispatch( { type : X_Event.COMPLETE, canPlay : X_Audio_codecs[ ext ] } );\r
+ proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : X_Audio_codecs[ ext ] } );\r
},\r
\r
klass : X_Audio_HTMLAudioWrapper\r
if( X.Pulgin.SilverlightEnabled ){\r
\r
// X.Node.inherits はできない。_rawObject は <object> でなく silverlight\r
- X_Audio_SLAudioWrapper = X.EventDispatcher.inherits(\r
+ X_Audio_SLAudioWrapper = X_EventDispatcher[ 'inherits' ](\r
'X.AV.SilverlightAudioWrapper',\r
X.Class.POOL_OBJECT,\r
{\r
\r
if( !X_Audio_SLAudio_uid ){\r
// source\r
- // X_Node_systemNode.create( 'script', { type : 'text/xaml', id : 'silverlightaudio' } )\r
- // .text( '<Canvas xmlns="http://schemas.microsoft.com/client/2007" ' +\r
+ // X_Node_systemNode[ 'create' ]( 'script', { type : 'text/xaml', id : 'silverlightaudio' } )\r
+ // [ 'text' ]( '<Canvas xmlns="http://schemas.microsoft.com/client/2007" ' +\r
// 'xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"></Canvas>');\r
\r
// html に以下を書いた \r
this._onload = 'XAudioSilverlightOnLoad' + ( ++X_Audio_SLAudio_uid );\r
this._callback = window[ this._onload ] = X_Callback_create( this, this.onSLReady );\r
this.xnodeObject = X_Node_body\r
- .create( 'object', {\r
+ [ 'create' ]( 'object', {\r
type : 'application/x-silverlight-2',\r
data : 'data:application/x-silverlight-2,',\r
width : 1,\r
height : 1\r
})\r
- .html(\r
+ [ 'html' ](\r
'<param name="background" value="#00000000">' + // transparent\r
'<param name="windowless" value="true">' +\r
'<param name="source" value="#silverlightaudio">' + // XAML ID\r
);\r
X_AudioWrapper_updateStates( this, option );\r
\r
- this.listenOnce( X_Event.KILL_INSTANCE );\r
+ this[ 'listenOnce' ]( X_EVENT_KILL_INSTANCE );\r
},\r
\r
onSLReady : function( sender ){\r
'<MediaElement x:Name="media" Source="' + this._source + '" Volume="' + this.volume + '" AutoPlay="false" />' +\r
'</Canvas>'));\r
\r
- this._rawObject = sender.findName('media'); // x:Name='media'\r
+ this[ '_rawObject' ] = sender.findName('media'); // x:Name='media'\r
\r
- this.listen( [ 'MediaFailed', 'MediaOpened', 'MediaEnded', 'CurrentStateChanged' ] );\r
+ this[ 'listen' ]( [ 'MediaFailed', 'MediaOpened', 'MediaEnded', 'CurrentStateChanged' ] );\r
},\r
\r
handleEvent : function( e ){\r
this.playing = false;\r
this._ended = true;\r
this._paused = false;\r
- this.proxy.dispatch( X_Event.ERROR ); // open failed\r
+ this.proxy[ 'dispatch' ]( X_EVENT_ERROR ); // open failed\r
break;\r
\r
case 'MediaOpened' :\r
// http://msdn.microsoft.com/ja-jp/library/bb979710(VS.95).aspx\r
- this.duration = this._rawObject.NaturalDuration.Seconds * 1000;\r
+ this.duration = this[ '_rawObject' ].NaturalDuration.Seconds * 1000;\r
// TODO 'canplaythrough'\r
- //this.proxy.asyncDispatch( 'loadstart' );\r
- //this.proxy.asyncDispatch( 'loadedmetadata' );\r
- //this.proxy.asyncDispatch( 'loadeddata' );\r
- //this.proxy.asyncDispatch( 'canplay' );\r
- //this.proxy.asyncDispatch( 'canplaythrough' );\r
- this.proxy.asyncDispatch( X_Event.READY );\r
+ //this.proxy[ 'asyncDispatch' ]( 'loadstart' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'loadedmetadata' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'loadeddata' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'canplay' );\r
+ //this.proxy[ 'asyncDispatch' ]( 'canplaythrough' );\r
+ this.proxy[ 'asyncDispatch' ]( X_EVENT_READY );\r
\r
- this.autoplay && X.Timer.once( 16, this, this.play );\r
+ this.autoplay && X_Timer_once( 16, this, this.play );\r
break;\r
\r
case 'MediaEnded' : \r
\r
case 'CurrentStateChanged' :\r
lastState = this._lastState,\r
- currentState = this._rawObject.CurrentState;\r
+ currentState = this[ '_rawObject' ].CurrentState;\r
\r
// ignore consecutive events or 'Closed' == 'Error'\r
if( lastState === currentState\r
case 'Opening' :\r
switch( this._lastUserAction ){\r
case 'play' :\r
- this.proxy.dispatch( X_Event.MEDIA_WAITING );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_WAITING );\r
break;\r
case 'seek' :\r
- this.proxy.dispatch( X_Event.MEDIA_SEEKING );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_SEEKING );\r
break;\r
case 'pause' :\r
break;\r
this.playing = false;\r
this._ended = true;\r
this._paused = false;\r
- this.proxy.dispatch( X_Event.ERROR );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_ERROR );\r
break;\r
\r
// userAction.pause() -> MediaState('Paused') -> x\r
this.seekTime = 0;\r
this._ended = true;\r
this._paused = false;\r
- this.proxy.dispatch( X_Event.MEDIA_ENDED );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_ENDED );\r
this._currentTime( this.startTime );\r
break;\r
case 'pause':\r
this.playing = true;\r
this._ended = false;\r
this._paused = false;\r
- this.proxy.dispatch( X_Event.MEDIA_PLAYING );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_PLAYING );\r
break;\r
\r
// stop()\r
};\r
break;\r
\r
- case X_Event.KILL_INSTANCE :\r
+ case X_EVENT_KILL_INSTANCE :\r
if( this._onload ){\r
// window への delete に ie5 は対応しないが、そもそも ie5 は Silverlight に非対応\r
window[ this._onload ] = null;\r
\r
close : function(){\r
this.playing && this.pause();\r
- this.proxy.dispatch( X_Event.MEDIA_ENDED );\r
- this.kill();\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_ENDED );\r
+ this[ 'kill' ]();\r
},\r
\r
// SilverlightAudio.play\r
\r
console.log( '[SLAudio] play ' + begin + ' -> ' + end );\r
\r
- this._rawObject.Volume = this.volume;\r
+ this[ '_rawObject' ].Volume = this.volume;\r
this._beginTime = begin;\r
this._currentTime( begin );\r
\r
if( !this.playing ){\r
- this._rawObject.play();\r
- //this.proxy.dispatch( 'play' );\r
+ this[ '_rawObject' ].play();\r
+ //this.proxy[ 'dispatch' ]( 'play' );\r
\r
this.playing = true;\r
};\r
\r
- this._timerID && X.Timer.remove( this._timerID );\r
+ this._timerID && X_Timer_remove( this._timerID );\r
\r
if( end < this.duration ){\r
- this._timerID = X.Timer.once( end - begin, this, this._onEnded );\r
+ this._timerID = X_Timer_once( end - begin, this, this._onEnded );\r
} else {\r
delete this._timerID;\r
};\r
\r
if( !this._interval ){\r
- this._interval = X.Timer.add( 1000, 0, this, this._onInterval );\r
+ this._interval = X_Timer_add( 1000, 0, this, this._onInterval );\r
};\r
},\r
\r
delete this._interval;\r
return X_Callback_UN_LISTEN;\r
};\r
- this.proxy.dispatch( X_Event.MEDIA_PLAYING );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_PLAYING );\r
},\r
\r
_onEnded : function(){\r
delete this._timerID;\r
\r
if( this.playing ){\r
- console.log( '> end ' + X_AudioWrapper_getEndTime( this ) + ' current:' + ( this._rawObject.Position.Seconds * 1000 | 0 ) );\r
- time = this._rawObject.Position.Seconds * 1000 | 0;\r
+ console.log( '> end ' + X_AudioWrapper_getEndTime( this ) + ' current:' + ( this[ '_rawObject' ].Position.Seconds * 1000 | 0 ) );\r
+ time = this[ '_rawObject' ].Position.Seconds * 1000 | 0;\r
\r
if( time <= this._beginTime ){\r
console.log( '== waiting' );\r
- this.proxy.dispatch( X_Event.MEDIA_WAITING );\r
- this._timerID = X.Timer.once( X_AudioWrapper_getEndTime( this ) - this._beginTime, this, this._onEnded );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_WAITING );\r
+ this._timerID = X_Timer_once( X_AudioWrapper_getEndTime( this ) - this._beginTime, this, this._onEnded );\r
return;\r
};\r
\r
time -= X_AudioWrapper_getEndTime( this );\r
if( time < 0 ){\r
console.log( '> onEnd ' + time );\r
- this._timerID = X.Timer.once( -time, this, this._onEnded );\r
+ this._timerID = X_Timer_once( -time, this, this._onEnded );\r
return;\r
};\r
\r
if( this.loop ){\r
- if( !( this.proxy.dispatch( X_Event.MEDIA_BEFORE_LOOP ) & X.Callback.PREVENT_DEFAULT ) ){\r
+ if( !( this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_Callback_PREVENT_DEFAULT ) ){\r
this.looped = true;\r
- this.proxy.dispatch( X_Event.MEDIA_LOOPED );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_LOOPED );\r
this.play();\r
};\r
} else {\r
this.pause();\r
- this.proxy.dispatch( X_Event.MEDIA_ENDED );\r
+ this.proxy[ 'dispatch' ]( X_EVENT_MEDIA_ENDED );\r
};\r
};\r
},\r
this._paused = true;\r
this._ended = false;\r
\r
- this._rawObject.pause();\r
- //this.proxy.dispatch( 'pause' );\r
+ this[ '_rawObject' ].pause();\r
+ //this.proxy[ 'dispatch' ]( 'pause' );\r
},\r
\r
// SilverlightAudio.state\r
loopEndTime : this.loopEndTime < 0 ? ( this.endTime || this.duration ) : this.loopEndTime,\r
\r
// 整数化 しておかないと seek 時に不具合がある。\r
- currentTime : this.playing ? this._rawObject.Position.Seconds * 1000 | 0 : this.seekTime,\r
+ currentTime : this.playing ? this[ '_rawObject' ].Position.Seconds * 1000 | 0 : this.seekTime,\r
\r
loop : this.loop,\r
looped : this.looped,\r
volume : this.volume,\r
error : this.error,\r
playing : this.playing,\r
- duration : this.duration // this._rawObject.NaturalDuration.Seconds;\r
+ duration : this.duration // this[ '_rawObject' ].NaturalDuration.Seconds;\r
};\r
};\r
\r
if( result & 1 ){\r
end = X_AudioWrapper_getEndTime( this );\r
halfway = end < this.duration;\r
- this._timerID && X.Timer.remove( this._timerID );\r
+ this._timerID && X_Timer_remove( this._timerID );\r
\r
if( halfway ){\r
- this._timerID = X.Timer.once( end - this._rawObject.Position.Seconds * 1000 | 0, this, this._onEnded );\r
+ this._timerID = X_Timer_once( end - this[ '_rawObject' ].Position.Seconds * 1000 | 0, this, this._onEnded );\r
} else {\r
delete this._timerID;\r
};\r
\r
};\r
if( result & 4 ){\r
- this._rawObject.Volume = this.volume;\r
+ this[ '_rawObject' ].Volume = this.volume;\r
};\r
};\r
},\r
\r
// SilverlightAudio.currentTime\r
_currentTime : function( time ){ // @param Number: time\r
- var position = this._rawObject.Position; // [!] create instance\r
+ var position = this[ '_rawObject' ].Position; // [!] create instance\r
\r
position.Seconds = time / 1000 | 0; // set current time\r
\r
- this._rawObject.Position = position; // [!] reattach instance\r
+ this[ '_rawObject' ].Position = position; // [!] reattach instance\r
}\r
\r
}\r
\r
detect : function( proxy, source, ext ){\r
var ok = ext === 'mp3' || ext === 'wma' || ext === 'wav';\r
- proxy.asyncDispatch( { type : X_Event.COMPLETE, canPlay : ok } ); \r
+ proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : ok } ); \r
},\r
\r
klass : X_Audio_SLAudioWrapper\r
presets : {},\r
BGMs : {},\r
tracks : [],\r
- pauseTracks : [], // X_Event.DEACTIVATE によって pause した再生中のトラックたち。\r
+ pauseTracks : [], // X_EVENT_DEACTIVATE によって pause した再生中のトラックたち。\r
volume : 1,\r
bgmTrack : null,\r
bgmPosition : 0,\r
},\r
X_Audio_Sprite_instance;\r
\r
-X.Audio.Sprite = {\r
+X[ 'Audio' ][ 'Sprite' ] = {\r
\r
- shouldUse : X_Audio_Sprite_shouldUse,\r
+ 'shouldUse' : X_Audio_Sprite_shouldUse,\r
\r
- needTouchFirst : X_Audio_Sprite_needTouchFirst,\r
+ 'needTouchFirst' : X_Audio_Sprite_needTouchFirst,\r
\r
- enableMultiTrack : X_Audio_Sprite_enableMultiTrack,\r
+ 'enableMultiTrack' : X_Audio_Sprite_enableMultiTrack,\r
\r
- create : function( setting ){\r
+ 'create' : function( setting ){\r
// close()\r
if( X_Audio_Sprite_instance ){\r
X_Audio_Sprite_instance.close();\r
} else {\r
- X_Audio_Sprite_instance = X_Class_override( new X.EventDispatcher(), X_Audio_Sprite_members );\r
- X_ViewPort.listen( [ X_Event.VIEW_ACTIVATE, X_Event.VIEW_DEACTIVATE ], X_Audio_Sprite_instance, X_Audio_Sprite_handleEvent );\r
+ X_Audio_Sprite_instance = X_Class_override( X_EventDispatcher(), X_Audio_Sprite_members );\r
+ X_ViewPort[ 'listen' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE ], X_Audio_Sprite_instance, X_Audio_Sprite_handleEvent );\r
};\r
X_Audio_Sprite_instance.setup( setting );\r
return X_Audio_Sprite_instance;\r
* BGM_02 : [ '56.00', '1:15.230', true ]\r
* }\r
* \r
- * X_Event.BACKEND_READY\r
- * X_Event.BACKEND_NONE\r
+ * X_EVENT_BACKEND_READY\r
+ * X_EVENT_BACKEND_NONE\r
* \r
- * X_Event.READY\r
- * X_Event.MEDIA_LOOPED\r
- * X_Event.MEDIA_ENDED\r
+ * X_EVENT_READY\r
+ * X_EVENT_MEDIA_LOOPED\r
+ * X_EVENT_MEDIA_ENDED\r
* \r
*/\r
\r
for( k in setting ){\r
v = setting[ k ];\r
if( X_Type_isArray( v ) && v !== urls ){\r
- v = X.Object.cloneArray( v );\r
+ v = X_Object_cloneArray( v );\r
for( i = v.length; i; ){\r
--i;\r
if( i !== 2 ) v[ i ] = X_AudioWrapper_timeStringToNumber( v[ i ] );\r
if( video || ( i === 1 && X_Audio_Sprite_useVideoForMulti ) ){\r
option[ 'useVideo' ] = true;\r
};\r
- tracks.push( X.Audio( urls, X.Object.clone( option ) ) );\r
+ tracks.push( X.Audio( urls, X_Object_clone( option ) ) );\r
};\r
\r
- tracks[ n - 1 ].listenOnce( [ X_Event.BACKEND_READY, X_Event.BACKEND_NONE ], this, X_Audio_Sprite_handleEvent );\r
+ tracks[ n - 1 ][ 'listenOnce' ]( [ X_EVENT_BACKEND_READY, X_EVENT_BACKEND_NONE ], this, X_Audio_Sprite_handleEvent );\r
\r
X_Audio_Sprite_instance.numTracks = n;\r
},\r
k;\r
\r
while( tracks.length ){\r
- tracks.pop().kill();\r
+ tracks.pop()[ 'kill' ]();\r
};\r
\r
for( k in bgms ){\r
//tracks[ i ].play( 0, X_Audio_Sprite_lengthSilence, true, 0, X_Audio_Sprite_lengthSilence ).seek( 0 );\r
this.pause( i );\r
} else {\r
- X_Audio_getAudioWrapper( tracks[ i ] )._rawObject.load();\r
+ X_Audio_getAudioWrapper( tracks[ i ] )[ '_rawObject' ].load();\r
};\r
};\r
},\r
track = X_Audio_Sprite_TEMP.bgmTrack = tracks[ 0 ];\r
};\r
\r
- if( track.listen( [ X_Event.MEDIA_PLAYING, X_Event.MEDIA_BEFORE_LOOP ], this, X_Audio_Sprite_handleEvent ).isPlaying() ){\r
+ if( track[ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_BEFORE_LOOP ], this, X_Audio_Sprite_handleEvent ).isPlaying() ){\r
track\r
.state( {\r
loop : true,\r
if( 1 < tracks.length ){\r
track = X_Audio_Sprite_getTrackEnded( X_Audio_Sprite_TEMP.bgmPlaying );\r
track\r
- .listen( [ X_Event.MEDIA_PLAYING, X_Event.MEDIA_BEFORE_LOOP ], this, X_Audio_Sprite_handleEvent )\r
+ [ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_BEFORE_LOOP ], this, X_Audio_Sprite_handleEvent )\r
.state( { looped : false } )\r
.play( preset[ 0 ], preset[ 1 ], true, 0, X_Audio_Sprite_lengthSilence );\r
} else {\r
};\r
track = tracks[ 0 ];\r
\r
- if( track.listen( [ X_Event.MEDIA_PLAYING, X_Event.MEDIA_BEFORE_LOOP ], this, X_Audio_Sprite_handleEvent ).isPlaying() ){\r
+ if( track[ 'listen' ]( [ X_EVENT_MEDIA_PLAYING, X_EVENT_MEDIA_BEFORE_LOOP ], this, X_Audio_Sprite_handleEvent ).isPlaying() ){\r
track\r
.state( {\r
loop : true,\r
X_Audio_Sprite_TEMP.bgmTrack = null;\r
};\r
track && track.play( 0, X_Audio_Sprite_lengthSilence, true, 0, X_Audio_Sprite_lengthSilence ).seek( 0 );\r
- this.asyncDispatch( X_Event.MEDIA_PAUSED );\r
+ this[ 'asyncDispatch' ]( X_EVENT_MEDIA_PAUSED );\r
return this;\r
},\r
\r
var i, tracks, track, _e;\r
\r
switch( e.type ){\r
- case X_Event.BACKEND_READY :\r
+ case X_EVENT_BACKEND_READY :\r
_e = {\r
- type : X_Event.BACKEND_READY,\r
- source : e.source,\r
- backendName : e.backendName\r
+ 'type' : X_EVENT_BACKEND_READY,\r
+ 'source' : e[ 'source' ],\r
+ 'backendName' : e[ 'backendName' ]\r
};\r
\r
if( X_Audio_Sprite_needTouchFirst ){\r
_e[ 'needTouchForLoad' ] = true;\r
};\r
};\r
- this.asyncDispatch( _e );\r
+ this[ 'asyncDispatch' ]( _e );\r
\r
e.target\r
- .unlisten( X_Event.BACKEND_NONE, this, X_Audio_Sprite_handleEvent )\r
- .listenOnce( X_Event.READY, this, X_Audio_Sprite_handleEvent );\r
+ [ 'unlisten' ]( X_EVENT_BACKEND_NONE, this, X_Audio_Sprite_handleEvent )\r
+ [ 'listenOnce' ]( X_EVENT_READY, this, X_Audio_Sprite_handleEvent );\r
\r
// READY, needTouchForPlay, needTouchForLoad\r
if( X_Audio_HTMLAudioWrapper_durationFix ){\r
};\r
break;\r
\r
- case X_Event.BACKEND_NONE :\r
- this.asyncDispatch( X_Event.BACKEND_NONE );\r
- e.target.unlisten( X_Event.BACKEND_READY, this, X_Audio_Sprite_handleEvent );\r
+ case X_EVENT_BACKEND_NONE :\r
+ this[ 'asyncDispatch' ]( X_EVENT_BACKEND_NONE );\r
+ e.target[ 'unlisten' ]( X_EVENT_BACKEND_READY, this, X_Audio_Sprite_handleEvent );\r
break;\r
\r
- case X_Event.READY :\r
+ case X_EVENT_READY :\r
console.log( 'X.AudioSprite - Ready!' );\r
if( X_Audio_Sprite_needTouchAndroid ){\r
for( i = 0; i < X_Audio_Sprite_TEMP.tracks.length; ++i ){\r
X_Audio_Sprite_instance.pause( i );\r
};\r
- e.target.listenOnce( X_Event.MEDIA_PLAYING, this, this.asyncDispatch, [ X_Event.READY ] ); // Android 標準ブラウザ\r
+ e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this.asyncDispatch, [ X_EVENT_READY ] ); // Android 標準ブラウザ\r
return;\r
};\r
- this.asyncDispatch( X_Event.READY );\r
+ this[ 'asyncDispatch' ]( X_EVENT_READY );\r
break;\r
\r
- case X_Event.MEDIA_PLAYING :\r
- ( e.target === X_Audio_Sprite_TEMP.bgmTrack || !e.target.state().looped ) && this.asyncDispatch( X_Event.MEDIA_PLAYING );\r
+ case X_EVENT_MEDIA_PLAYING :\r
+ ( e.target === X_Audio_Sprite_TEMP.bgmTrack || !e.target.state().looped ) && this[ 'asyncDispatch' ]( X_EVENT_MEDIA_PLAYING );\r
break;\r
\r
- case X_Event.MEDIA_BEFORE_LOOP :\r
+ case X_EVENT_MEDIA_BEFORE_LOOP :\r
if( e.target === X_Audio_Sprite_TEMP.bgmTrack ){\r
X_Audio_Sprite_TEMP.bgmLooped = true;\r
- this.asyncDispatch( X_Event.MEDIA_LOOPED ); // TODO uid\r
+ this[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid\r
} else {\r
if( e.target.state().looped ){\r
- //this.asyncDispatch( X_Event.MEDIA_LOOPED ); // TODO uid\r
+ //this[ 'asyncDispatch' ]( X_EVENT_MEDIA_LOOPED ); // TODO uid\r
} else {\r
- this.asyncDispatch( X_Event.MEDIA_ENDED ); // TODO uid\r
+ this[ 'asyncDispatch' ]( X_EVENT_MEDIA_ENDED ); // TODO uid\r
};\r
\r
// single track | iOS\r
};\r
break;\r
\r
- case X_Event.VIEW_ACTIVATE :\r
+ case X_EVENT_VIEW_ACTIVATE :\r
console.log( '■ アクティブ' );\r
// track.play(); or iOS need touch??\r
tracks = X_Audio_Sprite_TEMP.pauseTracks;\r
while( tracks.length ) tracks.pop().play();\r
break;\r
\r
- case X_Event.VIEW_DEACTIVATE :\r
+ case X_EVENT_VIEW_DEACTIVATE :\r
console.log( '■ デアクティブ' );\r
// track.pause();\r
tracks = X_Audio_Sprite_TEMP.tracks;\r
};\r
break;\r
\r
- case X_Event.KILL_INSTANCE :\r
- X_ViewPort.unlisten( [ X_Event.VIEW_ACTIVATE, X_Event.VIEW_DEACTIVATE ], this, X_Audio_Sprite_handleEvent );\r
+ case X_EVENT_KILL_INSTANCE :\r
+ X_ViewPort[ 'unlisten' ]( [ X_EVENT_VIEW_ACTIVATE, X_EVENT_VIEW_DEACTIVATE ], this, X_Audio_Sprite_handleEvent );\r
this.close();\r
break;\r
};\r
currentRootData : null,\r
\r
Layout : {\r
- Base : X.Class.create(\r
+ Base : X_Class_create(\r
'X.UI.Layout.Base',\r
{\r
overrideAttrsForSelf : null,\r
overrideAttrsForChild : null,\r
- calculate : X.emptyFunction //function( data, isNeedsDetection, x, y, w, h )\r
+ calculate : X_emptyFunction //function( data, isNeedsDetection, x, y, w, h )\r
}\r
),\r
create : function( props ){\r
\r
X.UI.attrClassProto = null;\r
\r
-X.UI.AttrClass = X.Class.create( 'X.UI.AttrClass', X.Class.POOL_OBJECT );\r
+X.UI.AttrClass = X_Class_create( 'X.UI.AttrClass', X.Class.POOL_OBJECT );\r
\r
\r
X.UI.Attr.copy = function( proto, supports ){\r
// start detection on touchstart\r
Utils.addEvents( uinode, Hammer.EVENT_TYPES_START, this );\r
\r
- this.listen( type );\r
+ this[ 'listen' ]( type );\r
};\r
\r
Hammer.defaults = {};\r
// onmouseup, but when touchend has been fired we do nothing.\r
// this is for touchdevices which also fire a mouseup on touchend\r
if( type & MOUSE && touch_triggered ){\r
- return X.Callback.STOP_NOW | X.Callback.PREVENT_DEFAULT;\r
+ return X_Callback_STOP_NOW | X_Callback_PREVENT_DEFAULT;\r
} else\r
// mousebutton must be down or a touch event\r
if( type & TOUCH || //sourceEventType.match(/touch/) || // touch events are always on screen\r
// only when the instance options have enabled this gesture\r
active[ gesture.name ] &&\r
// if a handler returns false, we stop with the detection\r
- ( ret |= ( gesture.handler( e, hammer ) || X.Callback.NONE ) );\r
+ ( ret |= ( gesture.handler( e, hammer ) || X_Callback_NONE ) );\r
};\r
\r
// endevent, but not the last touch, so dont stop\r
if( !this.types[ type ] ) return;\r
var e = Utils.extend( {}, gesture );\r
e.type = type;\r
- return this.uinode.dispatch( e );\r
+ return this.uinode[ 'dispatch' ]( e );\r
};\r
\r
Hammer.prototype.listen = function( type ){\r
*/\r
addEvents : function( uinode, types, context ){\r
for( var i = 0; i < types.length; ++i ){\r
- uinode.listen( types[ i ], context );\r
+ uinode[ 'listen' ]( types[ i ], context );\r
};\r
},\r
\r
switch( e.eventType ){\r
case START :\r
// clear any running timers\r
- this.timerID && X.Timer.remove( this.timerID );\r
+ this.timerID && X_Timer_remove( this.timerID );\r
\r
// set the gesture so we can check in the timeout if it still is\r
Detection.current.name = this.name;\r
\r
// set timer and if after the timeout it still is hold,\r
// we trigger the hold event\r
- this.timerID = X.Timer.add( hammer.options.hold_timeout, 1, Gestures.Hold._onTimer, [ e, hammer ] );\r
+ this.timerID = X_Timer_add( hammer.options.hold_timeout, 1, Gestures.Hold._onTimer, [ e, hammer ] );\r
return;\r
\r
// when you move or end we clear the timer\r
case MOVE :\r
if( e.distance <= hammer.options.hold_threshold ) return;\r
case END :\r
- this.timerID && X.Timer.remove( this.timerID );\r
+ this.timerID && X_Timer_remove( this.timerID );\r
if( Gestures.Hold.holding === true ){\r
Gestures.Hold.holding = false;\r
return hammer.trigger( X.UI.Event.HOLD_END, e );\r
-X.UI._AbstractUINode = X.EventDispatcher.inherits(\r
+X.UI._AbstractUINode = X_EventDispatcher[ 'inherits' ](\r
'X.UI._AbstractUINode',\r
X.Class.ABSTRACT | X.Class.PRIVATE_DATA,\r
{\r
//this.xnode = X_Doc_create( 'div' );\r
this.phase = 1;\r
\r
- this.dispatch( X.UI.Event.INIT );\r
+ this[ 'dispatch' ]( X.UI.Event.INIT );\r
},\r
\r
addToParent : function( xnodeParent ){\r
- xnodeParent && xnodeParent.append( this.xnode );\r
+ xnodeParent && xnodeParent[ 'append' ]( this.xnode );\r
\r
this.phase = 2;\r
- this.dispatch( X.UI.Event.ADDED );\r
+ this[ 'dispatch' ]( X.UI.Event.ADDED );\r
},\r
\r
creationComplete : function(){\r
l, i;\r
\r
this.phase = 3;\r
- this.User.dispatch( X.UI.Event.CREATION_COMPLETE );\r
+ this.User[ 'dispatch' ]( X.UI.Event.CREATION_COMPLETE );\r
\r
// html 要素が親に追加されるまで控えていたイベントの登録\r
if( events && ( l = events.length ) ){\r
};\r
\r
if( !X.UI.attrClassProto && user === X.UI.Attr.USER.XNODE && this.xnode ){\r
- this.xnode.css( X.UI.Attr.Rename[ name ] || name, this._createCssText( name ) );\r
+ this.xnode[ 'css' ]( X.UI.Attr.Rename[ name ] || name, this._createCssText( name ) );\r
//console.log( ( X.UI.Attr.Rename[ name ] || name ) + ' ' + this._createCssText( name ) + ' ' + propID + ' ' + attrs[ propID ] );\r
};\r
return;\r
};\r
\r
if( name && user === X.UI.Attr.USER.XNODE && this.xnode ){\r
- this.xnode.css( X.UI.Attr.Rename[ name ] || name, this._createCssText( name ) );\r
+ this.xnode[ 'css' ]( X.UI.Attr.Rename[ name ] || name, this._createCssText( name ) );\r
//console.log( ( X.UI.Attr.Rename[ name ] || name ) + ' ' + this._createCssText( name ) + ' ' + propID + ' ' + attrs[ propID ] );\r
} else\r
if( this.dirty < dirty ) this.dirty = dirty; \r
this.boxX = x;\r
this.boxY = y;\r
this.xnode\r
- .css( 'left', x ? x + 'em' : 0 )\r
- .css( 'top', y ? y + 'em' : 0 )\r
- .css( 'width', this.contentWidth ? X.UI._AbstractUINode.ceil( this.contentWidth ) + 'em' : 0 )\r
- .css( 'height', this.contentHeight ? X.UI._AbstractUINode.ceil( this.contentHeight ) + 'em' : 0 )\r
- .css( 'padding', this._createCssText( 'padding' ) )\r
- .css( 'borderWidth', this._createCssText( 'borderWidth' ) );\r
+ [ 'css' ]( 'left', x ? x + 'em' : 0 )\r
+ [ 'css' ]( 'top', y ? y + 'em' : 0 )\r
+ [ 'css' ]( 'width', this.contentWidth ? X.UI._AbstractUINode.ceil( this.contentWidth ) + 'em' : 0 )\r
+ [ 'css' ]( 'height', this.contentHeight ? X.UI._AbstractUINode.ceil( this.contentHeight ) + 'em' : 0 )\r
+ [ 'css' ]( 'padding', this._createCssText( 'padding' ) )\r
+ [ 'css' ]( 'borderWidth', this._createCssText( 'borderWidth' ) );\r
},\r
\r
/*\r
* コンテンツの高さの再取得が必要\r
* 必要でない\r
*/\r
- if( xnode._xnodes && xnode._xnodes.length ){\r
+ if( xnode[ '_xnodes' ] && xnode[ '_xnodes' ].length ){\r
if( w === X.UI.Attr.AUTO ){\r
- w = this.contentWidth = xnode.css( 'width', 'auto' ).width() / X_Node_CSS_getCharSize( xnode );\r
+ w = this.contentWidth = xnode[ 'css' ]( 'width', 'auto' )[ 'width' ]() / X_Node_CSS_getCharSize( xnode );\r
\r
this.scrollWidth = w + this.contentL + this.contentR;\r
if( this.maxContentWidth < w - this.boxSizingOffsetLR ) this.contentWidth = this.maxContentWidth + this.boxSizingOffsetLR;\r
if( w - this.boxSizingOffsetLR < this.minContentWidth ) this.contentWidth = this.minContentWidth + this.boxSizingOffsetLR;\r
this.lastContentWidth = this.contentWidth;\r
\r
- w !== this.contentWidth && xnode.css( 'width', X.UI._AbstractUINode.ceil( this.contentWidth ) + 'em' );\r
+ w !== this.contentWidth && xnode[ 'css' ]( 'width', X.UI._AbstractUINode.ceil( this.contentWidth ) + 'em' );\r
\r
if( h === X.UI.Attr.AUTO ){\r
- this.contentHeight = h = xnode.css( 'height', 'auto' ).scrollHeight() / X_Node_CSS_getCharSize( xnode ); // scrollHeight() ??\r
+ this.contentHeight = h = xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ); // scrollHeight() ??\r
this.scrollHeight = h + this.contentT + this.contentB;\r
if( this.maxContentHeight < h - this.boxSizingOffsetTB ) this.contentHeight = this.maxContentHeight + this.boxSizingOffsetTB;\r
if( h - this.boxSizingOffsetTB < this.minContentHeight ) this.contentHeight = this.minContentHeight + this.boxSizingOffsetTB;\r
} else\r
if( h === X.UI.Attr.AUTO ){\r
if( w !== this.lastContentWidth ){\r
- xnode.css( 'width', X.UI._AbstractUINode.ceil( w ) + 'em' );\r
+ xnode[ 'css' ]( 'width', X.UI._AbstractUINode.ceil( w ) + 'em' );\r
\r
this.lastContentWidth = w;\r
- this.contentHeight = h = xnode.css( 'height', 'auto' ).scrollHeight() / X_Node_CSS_getCharSize( xnode );\r
+ this.contentHeight = h = xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode );\r
this.scrollWidth = w + this.contentL + this.contentR;\r
this.scrollHeight = h + this.contentT + this.contentB;\r
if( this.maxContentHeight < h - this.boxSizingOffsetTB ) this.contentHeight = this.maxContentHeight + this.boxSizingOffsetTB;\r
if( h - this.boxSizingOffsetTB < this.minContentHeight ) this.contentHeight = this.minContentHeight + this.boxSizingOffsetTB; \r
} else {\r
this.contentHeight = this.lastContentHeight = h =\r
- this.lastContentHeight === -1 ? xnode.css( 'height', 'auto' ).scrollHeight() / X_Node_CSS_getCharSize( xnode ) : this.lastContentHeight;\r
+ this.lastContentHeight === -1 ? xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) : this.lastContentHeight;\r
this.scrollWidth = w + this.contentL + this.contentR;\r
this.scrollHeight = h + this.contentT + this.contentB;\r
};\r
} else\r
if( dirty !== X.UI.Dirty.LAYOUT ){\r
- this.contentWidth = this.lastContentWidth = w; //xnode.width();\r
- this.contentHeight = this.lastContentHeight = xnode.css( 'height', 'auto' ).scrollHeight() / X_Node_CSS_getCharSize( xnode );\r
+ this.contentWidth = this.lastContentWidth = w; //xnode[ 'width' ]();\r
+ this.contentHeight = this.lastContentHeight = xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode );\r
this.scrollWidth = this.contentWidth + this.contentL + this.contentR;\r
this.scrollHeight = this.contentHeight + this.contentT + this.contentB;\r
} else {\r
if( !this.gesture ){\r
this.gesture = new X.UI.Gesture( this.rootData, this, type );\r
} else {\r
- this.gesture.listen( type );\r
+ this.gesture[ 'listen' ]( type );\r
};\r
} else {\r
//console.log( type );\r
++counter[ type ];\r
} else {\r
counter[ type ] = 1; \r
- root.xnodeInteractiveLayer.listen( X.UI.Event.IdToName[ type ], X_UI_eventRellay );\r
+ root.xnodeInteractiveLayer[ 'listen' ]( X.UI.Event.IdToName[ type ], X_UI_eventRellay );\r
};\r
};\r
};\r
f = X_Callback_classifyCallbackArgs( arg1, arg2, arg3 );\r
- if( !f.k ){\r
+ if( !f.kind ){\r
return X_EventDispatcher_listen.call( this, type, this.User, f );\r
} else\r
- if( f.k === X_Callback_FUNC_ONLY ){\r
- return X_EventDispatcher_listen.call( this, type, this.User, f.f, f.s );\r
+ if( f.kind === X_Callback_FUNC_ONLY ){\r
+ return X_EventDispatcher_listen.call( this, type, this.User, f.func, f.supplement );\r
};\r
return X_EventDispatcher_listen.apply( this, arguments );\r
},\r
};\r
\r
if( X.UI.Event._START_XUI_EVENT < type && type < X.UI.Event._END_XUI_EVENT ){\r
- this.gesture && this.gesture.unlisten( type );\r
+ this.gesture && this.gesture[ 'unlisten' ]( type );\r
} else {\r
root = this.rootData;\r
counter = root.eventCounter;\r
if( !counter[ type ] ) return this;\r
--counter[ type ];\r
if( counter[ type ] === 0 ){\r
- root.xnodeInteractiveLayer.unlisten( X.UI.Event.IdToName[ type ], X_UI_eventRellay );\r
+ root.xnodeInteractiveLayer[ 'unlisten' ]( X.UI.Event.IdToName[ type ], X_UI_eventRellay );\r
delete counter[ type ];\r
};\r
};\r
};\r
f = X_Callback_classifyCallbackArgs( arg1, arg2, arg3 );\r
- if( !f.k ){\r
- return X.EventDispatcher.prototype.unlisten.apply( this, [ type, this.User, f ] );\r
+ if( !f.kind ){\r
+ return X_EventDispatcher_unlisten.apply( this, [ type, this.User, f ] );\r
} else\r
- if( f.k === X_Callback_FUNC_ONLY ){\r
- return X.EventDispatcher.prototype.unlisten.apply( this, [ type, this.User, f.f, f.s ] );\r
+ if( f.kind === X_Callback_FUNC_ONLY ){\r
+ return X_EventDispatcher_unlisten.apply( this, [ type, this.User, f.func, f.supplement ] );\r
};\r
- return X.EventDispatcher.prototype.unlisten.apply( this, arguments );\r
+ return X_EventDispatcher_unlisten.apply( this, arguments );\r
},\r
\r
dispatch : function( e ){\r
type = e.type || e;\r
\r
// TODO captureEvent PointerEvent\r
- if( ret & X.Callback.MONOPOLY && !this.hitChildData && ( xve._POINTER_MOVE === type || xve._MOUSE_MOVE === type || xve.FILE_DRAG === type ) ){\r
+ if( ret & X_Callback_MONOPOLY && !this.hitChildData && ( xve._POINTER_MOVE === type || xve._MOUSE_MOVE === type || xve.FILE_DRAG === type ) ){\r
this.rootData.monopolyNodeData = this;\r
return ret;\r
};\r
this.rootData.monopolyNodeData = null;\r
- if( xve._START_BUBLEUP < type && this.parentData && !( ret & X.Callback.STOP_PROPAGATION ) && !( ret & X.Callback.STOP_NOW ) ) return this.parentData.dispatch( e );\r
+ if( xve._START_BUBLEUP < type && this.parentData && !( ret & X_Callback_STOP_PROPAGATION ) && !( ret & X_Callback_STOP_NOW ) ) return this.parentData[ 'dispatch' ]( e );\r
return ret;\r
}\r
\r
return ( -v * 10 + 0.999 | 0 ) / -10;\r
};\r
\r
-X.UI.AbstractUINode = X.Class.create(\r
+X.UI.AbstractUINode = X_Class_create(\r
'AbstractUINode',\r
X.Class.ABSTRACT | X.Class.SUPER_ACCESS,\r
{\r
},\r
\r
listen : function( type, arg1, arg2, arg3 ){\r
- X_Class_getPrivate( this ).listen( type, arg1, arg2, arg3 );\r
+ X_Class_getPrivate( this )[ 'listen' ]( type, arg1, arg2, arg3 );\r
return this;\r
},\r
listenOnce : function( type, arg1, arg2, arg3 ){\r
- X_Class_getPrivate( this ).listenOnce( type, arg1, arg2, arg3 );\r
+ X_Class_getPrivate( this )[ 'listenOnce' ]( type, arg1, arg2, arg3 );\r
return this;\r
},\r
listening : function( type, arg1, arg2, arg3 ){\r
- return X_Class_getPrivate( this ).listening( type, arg1, arg2, arg3 );\r
+ return X_Class_getPrivate( this )[ 'listening' ]( type, arg1, arg2, arg3 );\r
},\r
unlisten : function( type, arg1, arg2, arg3 ){\r
- X_Class_getPrivate( this ).unlisten( type, arg1, arg2, arg3 );\r
+ X_Class_getPrivate( this )[ 'unlisten' ]( type, arg1, arg2, arg3 );\r
return this;\r
},\r
dispatch : function( e ){\r
- return X_Class_getPrivate( this ).dispatch( e );\r
+ return X_Class_getPrivate( this )[ 'dispatch' ]( e );\r
},\r
\r
getNextNode : function(){\r
j = -1,\r
uinodes, arg, _data, attrs, support;\r
\r
- if( !this.User.instanceOf( X.UI.Box ) ){\r
+ if( !this.User[ 'instanceOf' ]( X.UI.Box ) ){\r
//throw new Error( 'Box を継承したインスタンスだけが _Box のオーナーになれます' );\r
}; \r
\r
\r
for( ; i < l; ++i ){\r
arg = args[ i ];\r
- if( arg.instanceOf && arg.instanceOf( X.UI.AbstractUINode ) ){\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.AbstractUINode ) ){\r
_data = X_Class_getPrivate( arg );\r
if( !uinodes ) this.uinodes = uinodes = [];\r
uinodes[ ++j ] = _data;\r
//throw new Error( 'インスタンスはすでに親に追加されています ' + arg );\r
};\r
} else\r
- if( arg.instanceOf && arg.instanceOf( Node ) ){\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( Node ) ){\r
//this.layout = arg;\r
} else\r
- if( arg.instanceOf && arg.instanceOf( X.UI.Layout.Base ) ){\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.Layout.Base ) ){\r
//this.layout = arg;\r
} else\r
if( X_Type_isObject( arg ) ){\r
};\r
\r
this.phase = 1;\r
- this.User.dispatch( { type : X.UI.Event.INIT } );\r
+ this.User[ 'dispatch' ]( { type : X.UI.Event.INIT } );\r
},\r
\r
addToParent : function( parentXNode ){\r
l = uinodes && uinodes.length,\r
i;\r
\r
- parentXNode && parentXNode.append( this.xnode );\r
+ parentXNode && parentXNode[ 'append' ]( this.xnode );\r
\r
if( l ){\r
for( i = 0; i < l; ++i ){\r
};\r
\r
this.phase = 2;\r
- this.User.dispatch( { type : X.UI.Event.ADDED } );\r
+ this.User[ 'dispatch' ]( { type : X.UI.Event.ADDED } );\r
},\r
\r
/* Rellay */\r
_p1 && data.initialize( this.root, this.rootData, this.User, this );\r
if( index <= num ){\r
// _p2 && this.xnode.insertBefore( data.xnode, uinodes[ index + i ].xnode );\r
- _p2 && uinodes[ index + i ].xnode.before( data.xnode );\r
+ _p2 && uinodes[ index + i ].xnode[ 'prev' ]( data.xnode );\r
_p2 && data.addToParent( this.xnode );\r
uinodes.splice( index + i, 0, data );\r
} else {\r
case 4:\r
case 3:\r
case 2:\r
- this.xnode.remove();\r
+ this.xnode[ 'remove' ]();\r
case 1:\r
delete this.root;\r
delete this.rootData;\r
return this;\r
},\r
remove : function( node /* , node, node ... */ ){\r
- X_Class_getPrivate( this ).remove( Array.prototype.slice.call( arguments ) );\r
+ X_Class_getPrivate( this )[ 'remove' ]( Array.prototype.slice.call( arguments ) );\r
return this;\r
},\r
removeAt : function( from, length ){\r
if( !uinodes || uinodes.length === 0 ) return ret;\r
for( i = 0, l = uinodes.length; i < l; ++i ){\r
node = uinodes[ 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
arg = args[ i ];\r
if( !arg ) continue;\r
// レイアウトの preset ができるのは layout が未定義な Box だけ\r
- if( !shadow.prototype.layout && arg.instanceOf && arg.instanceOf( X.UI.Layout.Base ) ){\r
+ if( !shadow.prototype.layout && arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.Layout.Base ) ){\r
layout = arg;\r
} else\r
if( ( klassDef = X_Class_getClassDef( arg ) ) && klassDef.isPrivate ){\r
Constructor : function( layout, args ){\r
var uinodes, i, l, node, after, index = 0;\r
\r
- this.Super( layout, args );\r
+ this[ 'Super' ]( layout, args );\r
\r
uinodes = this.uinodes;\r
l = i = uinodes.length;\r
after = true;\r
index = 0;\r
};\r
- if( node.instanceOf && node.instanceOf( Node ) ){\r
+ if( node[ 'instanceOf' ] && node[ 'instanceOf' ]( Node ) ){\r
\r
};\r
};\r
return this;\r
},\r
remove : function( node /* , node, node ... */ ){\r
- X_Class_getPrivate( this ).containerNode.remove( arguments );\r
+ X_Class_getPrivate( this ).containerNode[ 'remove' ]( arguments );\r
return this;\r
},\r
removeAt : function( from, length ){\r
scrollManager : null,\r
\r
Constructor : function( layout, args ){\r
- this.Super( layout, args );\r
+ this[ 'Super' ]( layout, args );\r
this._containerNode = X_Class_getPrivate( this.containerNode );\r
},\r
\r
// create scroller\r
\r
\r
- this.listen( X.UI.Event.POINTER_START, X_UI_ScrollBox_onStart );\r
+ this[ 'listen' ]( X.UI.Event.POINTER_START, X_UI_ScrollBox_onStart );\r
\r
\r
this._move( 0, 0 );\r
// no scroll\r
if( this.scrolling ){\r
// remove scroller\r
- this.unlisten( X.UI.Event.POINTER_START );\r
+ this[ 'unlisten' ]( X.UI.Event.POINTER_START );\r
\r
( this._scrollX !== 0 || this._scrollY !== 0 ) && this._move( 0, 0 );\r
\r
\r
\r
function X_UI_ScrollBox_onStart( e ){\r
- var ret = X.Callback.NONE;\r
+ var ret = X_Callback_NONE;\r
\r
// React to left mouse button only\r
if( e.pointerType === 'mouse' && e.button !== 0 ){\r
// スクロール中の停止\r
if( this.isAnimating ){\r
delete this.isAnimating;\r
- this.dispatch( X.UI.Event.SCROLL_END );\r
+ this[ 'dispatch' ]( X.UI.Event.SCROLL_END );\r
}; \r
\r
this.startX = this.x;\r
this.pointX = e.pageX;\r
this.pointY = e.pageY;\r
\r
- this.listen( X.UI.Event.POINTER_MOVE, X_UI_ScrollBox_onMove );\r
- this.listen( X.UI.Event.POINTER_END , X_UI_ScrollBox_onEnd );\r
+ this[ 'listen' ]( X.UI.Event.POINTER_MOVE, X_UI_ScrollBox_onMove );\r
+ this[ 'listen' ]( X.UI.Event.POINTER_END , X_UI_ScrollBox_onEnd );\r
\r
//console.log( 'start : 3' );\r
- return ret | X.Callback.PREVENT_DEFAULT;\r
+ return ret | X_Callback_PREVENT_DEFAULT;\r
};\r
\r
function X_UI_ScrollBox_onMove( e ){\r
- var ret = X.Callback.NONE,\r
+ var ret = X_Callback_NONE,\r
deltaX, deltaY, timestamp,\r
newX, newY,\r
absDistX, absDistY;\r
};\r
\r
// gpu の用意\r
- if( !this.containerNode._anime ){\r
+ if( !this.containerNode[ '_anime' ] ){\r
console.log( 'gpuレイヤーの用意' );\r
this._translate( this.x, this.y );\r
return ret;\r
deltaY = this.hasVScroll ? deltaY : 0;\r
\r
if( !this.moved ){\r
- this.dispatch( X.UI.Event.SCROLL_BEFORE_MOVE );\r
+ this[ 'dispatch' ]( X.UI.Event.SCROLL_BEFORE_MOVE );\r
this.moved = true;\r
this.minusX = deltaX;\r
this.minusY = deltaY;\r
} else {\r
- this.dispatch( X.UI.Event.SCROLL_MOVE );\r
+ this[ 'dispatch' ]( X.UI.Event.SCROLL_MOVE );\r
};\r
\r
newX = this.x + deltaX;// - this.minusX;\r
this.startY = this.y;\r
};\r
// イベントの拘束\r
- return ret | X.Callback.PREVENT_DEFAULT | X.Callback.MONOPOLY;\r
+ return ret | X_Callback_PREVENT_DEFAULT | X_Callback_MONOPOLY;\r
};\r
\r
function X_UI_ScrollBox_onEnd( e ){\r
- var ret = X.Callback.NONE,\r
+ var ret = X_Callback_NONE,\r
time = 0,\r
easing = '',\r
newX, newY,\r
momentumX, momentumY,\r
duration, distanceX, distanceY;\r
\r
- this.unlisten( X.UI.Event.POINTER_MOVE, X_UI_ScrollBox_onMove );\r
- this.unlisten( X.UI.Event.POINTER_END, X_UI_ScrollBox_onEnd );\r
+ this[ 'unlisten' ]( X.UI.Event.POINTER_MOVE, X_UI_ScrollBox_onMove );\r
+ this[ 'unlisten' ]( X.UI.Event.POINTER_END, X_UI_ScrollBox_onEnd );\r
\r
if( !this.enabled || e.pointerType !== this.initiated ){\r
return ret;\r
\r
// we scrolled less than 10 pixels\r
if( !this.moved ){\r
- // this.dispatch( X_Event.CANCELED );\r
+ // this[ 'dispatch' ]( X_EVENT_CANCELED );\r
return ret;\r
};\r
\r
return ret;\r
};\r
\r
- this.dispatch( X.UI.Event.SCROLL_END );\r
+ this[ 'dispatch' ]( X.UI.Event.SCROLL_END );\r
\r
return ret;\r
};\r
delete this.directionX;\r
delete this.directionY;\r
\r
- this.wrapperOffset = this.xnodeWrapper.offset();\r
+ this.wrapperOffset = this.xnodeWrapper[ 'offset' ]();\r
\r
- //this.dispatch('refresh');\r
+ //this[ 'dispatch' ]('refresh');\r
\r
X_UI_ScrollBox_resetPosition( this, 0 );\r
};\r
\r
for( ; i; ){\r
arg = arguments[ --i ];\r
- if( arg.instanceOf && arg.instanceOf( X.UI.Layout.Base ) ){\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.Layout.Base ) ){\r
layout = arg;\r
} else {\r
args[ args.length ] = arg;\r
content : null,\r
\r
Constructor : function( content ){\r
- if( !( this.User.instanceOf( X.UI.Text ) ) ){\r
+ if( !( this.User[ 'instanceOf' ]( X.UI.Text ) ) ){\r
alert( 'Text を継承したインスタンスだけが _Text のオーナーになれます' );\r
};\r
this.xnode = X_Doc_create( 'div' );\r
\r
if( X_Type_isString( content ) && content ){\r
this.content = content;\r
- this.xnode.text( this.content );\r
+ this.xnode[ 'text' ]( this.content );\r
this.dirty = X.UI.Dirty.CONTENT;\r
};\r
}\r
content : function( v ){\r
var data = X_Class_getPrivate( this );\r
if( data.content !== v ){\r
- data.xnode && data.xnode.text( v );\r
+ data.xnode && data.xnode[ 'text' ]( v );\r
data.rootData.reserveCalc();\r
if( data.dirty < X.UI.Dirty.CONTENT ) data.dirty = X.UI.Dirty.CONTENT; \r
};\r
i = 0,
data = X_UI_rootData,
sysOnly = false,
- ret = X.Callback.NONE,
+ ret = X_Callback_NONE,
list, parent, _ret;
// mouseup で alert を出すと mouseleave が発生、ということでイベント中のイベント発火を禁止
e.type = type;
- if( data && ( data = data.monopolyNodeData ) && ( ret = data.dispatch( e ) ) & X.Callback.MONOPOLY ){
+ if( data && ( data = data.monopolyNodeData ) && ( ret = data[ 'dispatch' ]( e ) ) & X_Callback_MONOPOLY ){
X_UI_eventBusy = false;
- return ret | X.Callback.PREVENT_DEFAULT;
+ return ret | X_Callback_PREVENT_DEFAULT;
};
list = X_UI_rootData.hoverList;
( X_UI_rootData.targetNodeData = X_UI_rootData ).capcher( x, y );
data = X_UI_rootData.targetNodeData;
- //data !== X_UI_rootData && console.log( data.xnode.text() );
+ //data !== X_UI_rootData && console.log( data.xnode[ 'text' ]() );
while( data ){
- _ret = data.dispatch( e, sysOnly );
+ _ret = data[ 'dispatch' ]( e, sysOnly );
ret |= _ret;
- if( _ret & X.Callback.MONOPOLY || _ret & X.Callback.STOP_PROPAGATION || _ret & X.Callback.STOP_NOW ) break; // sysOnly = true;
+ if( _ret & X_Callback_MONOPOLY || _ret & X_Callback_STOP_PROPAGATION || _ret & X_Callback_STOP_NOW ) break; // sysOnly = true;
data = data.parentData;
};
parent = parent.parentData;
};
if( parent !== X_UI_rootData ){
- data.hoverClassName && data.xnode.removeClass( data.hoverClassName );
- data._listeners && data._listeners[ X.UI.Event.POINTER_OUT ] && data.dispatch( e, X.UI.Event.POINTER_OUT, false ); // new Event
+ data.hoverClassName && data.xnode[ 'removeClass' ]( data.hoverClassName );
+ data._listeners && data._listeners[ X.UI.Event.POINTER_OUT ] && data[ 'dispatch' ]( e, X.UI.Event.POINTER_OUT, false ); // new Event
delete data.hovering;
list.splice( i, 1 );
continue;
};
if( !data.hovering ){
data.hoverClassName && data.xnode.addClassName( data.hoverClassName );
- data._listeners && data._listeners[ X.UI.Event.POINTER_IN ] && data.dispatch( e, X.UI.Event.POINTER_IN, true ); // new Event
+ data._listeners && data._listeners[ X.UI.Event.POINTER_IN ] && data[ 'dispatch' ]( e, X.UI.Event.POINTER_IN, true ); // new Event
data.hovering = true;
};
};
X_UI_eventBusy = false;
- return ret | X.Callback.PREVENT_DEFAULT;
+ return ret | X_Callback_PREVENT_DEFAULT;
};
/*
cursorStyle : null,
Constructor : function( layout, args ){
- this.Super( layout, args );
+ this[ 'Super' ]( layout, args );
- if( X_ViewPort_readyState === X_Event.XDOM_READY ){
- X.Timer.once( 0, this, this.start );
+ if( X_ViewPort_readyState === X_EVENT_XDOM_READY ){
+ X_Timer_once( 0, this, this.start );
} else {
- X.ViewPort.listenOnce( X_Event.XDOM_READY, this, this.start );
+ X.ViewPort[ 'listenOnce' ]( X_EVENT_XDOM_READY, this, this.start );
};
this.hoverList = [];
start : function(){
this.initialize( this.User, this, null, null );
- X.Timer.once( 0, this, this.addToView );
+ X_Timer_once( 0, this, this.addToView );
},
addToView : function(){
var counter = this.eventCounter, flg;
} );
// hover や rollover rollout のための move イベントの追加
- this.xnodeInteractiveLayer.listen( X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE ], X_UI_eventRellay );
+ this.xnodeInteractiveLayer[ 'listen' ]( X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE ], X_UI_eventRellay );
if( counter[ X.UI.Event._POINTER_MOVE ] ){
++counter[ X.UI.Event._POINTER_MOVE ];
} else {
counter[ X.UI.Event._POINTER_MOVE ] = 1;
};
- X.Timer.once( 0, this, this.afterAddToView );
+ X_Timer_once( 0, this, this.afterAddToView );
},
afterAddToView : function(){
- this.xnode.className( 'PageRoot' );
+ this.xnode[ 'className' ]( 'PageRoot' );
this.creationComplete();
- X.Timer.once( 0, this, this.doFirstCalc );
+ X_Timer_once( 0, this, this.doFirstCalc );
},
doFirstCalc : function(){
this.calculate();
this.phase = 4;
X.ViewPort
- .listen( X_Event.VIEW_RESIZED, this, this.calculate )
- .listen( X_Event.BASE_FONT_RESIZED, this, this.calculate );
+ [ 'listen' ]( X_EVENT_VIEW_RESIZED, this, this.calculate )
+ [ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate );
},
reserveCalc : function(){
if( this.calcReserved === false ){
this.calcReserved = true;
- X.Timer.once( 0, this, this.calculate );
+ X_Timer_once( 0, this, this.calculate );
};
},
calculate : function( e ){
},
_remove : function(){
- this.xnodeInteractiveLayer.unlisten();
+ this.xnodeInteractiveLayer[ 'unlisten' ]();
_Box.prototype._remove.call( this );
}
}