* @namespace X.Callback\r
* @alias X.Callback\r
*/\r
-X.Callback = {\r
+X[ 'Callback' ] = {\r
/**\r
* このコールバックでは返り値による操作は無い。\r
*/\r
var\r
/**\r
* 全てのクラスのスーパークラスのようなもの。(ライブラリ内にカプセル化されているため、ユーザが触ることはありません)<br>\r
- * X.Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。\r
+ * X_Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。\r
* @class __ClassBase__\r
* @private\r
* @abstract\r
};\r
\r
this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE );\r
- this._listeners && X_EventDispatcher_systemUnlisten( this );\r
+ this[ '_listeners' ] && X_EventDispatcher_systemUnlisten( this );\r
};\r
\r
for( p in instance ){\r
// --- interface ----------------------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
\r
+/*\r
+ * @enum {number}\r
+ * @const\r
+ */\r
+var X_Class = {\r
+ NONE : 0,\r
+ POOL_OBJECT : 1,\r
+ ABSTRACT : 2,\r
+ FINAL : 4,\r
+ SUPER_ACCESS : 8,\r
+ PRIVATE_DATA : 16,\r
+ SINGLETON : 32\r
+};\r
+\r
/**\r
* <p>Class を定義し システムの管理下に置く。\r
* <p>prototype 継承のブラウザ毎の差異も吸収し、 以下から最適な方法をしてくれる。\r
* </ol>\r
* \r
* <ol>\r
- * <li>X.Class.create( opt_settings, opt_name, opt_privateClass, opt_props ) でクラスを登録.\r
+ * <li>X_Class.create( opt_settings, opt_name, opt_privateClass, opt_props ) でクラスを登録.\r
* <li>コンストラクタ となるメソッドは、opt_props 内の Constructor : function( arg ){ ... }, に書く.\r
* <li>通常通り new で インスタンス生成\r
* <li>kill() でオブジェクトをクリーンして削除、pool が有効の場合は pool される.\r
* 設定なし。\r
* @const\r
*/ \r
- 'NONE' : 0,\r
+ 'NONE' : X_Class.NONE,\r
\r
/**\r
* インスタンスは破棄時(this.kill())に回収され、次回の new MyClass() 時に再利用されます。\r
* @const\r
*/\r
- 'POOL_OBJECT' : 1,\r
+ 'POOL_OBJECT' : X_Class.POOL_OBJECT,\r
\r
/**\r
* 定義するクラスは抽象クラスになります。new AbstractClass() とするとエラーになります。\r
* @const\r
*/\r
- 'ABSTRACT' : 2,\r
+ 'ABSTRACT' : X_Class.ABSTRACT,\r
\r
/**\r
* クラスの継承を禁止する。\r
* @const\r
*/\r
- 'FINAL' : 4,\r
+ 'FINAL' : X_Class.FINAL,\r
\r
/**\r
* 使用を中止。petanR ライブラリ使用プロジェクトから SUPER_ACCESS を消したらここも削除。\r
* @const\r
*/\r
- 'SUPER_ACCESS' : 8,\r
+ 'SUPER_ACCESS' : X_Class.SUPER_ACCESS,\r
\r
/**\r
* 内部コード、主に X.UI フレームワークに対して、フレーム外に露出するインスタンスとペアで動作する、シャドウなインスタンスの使用を宣言する。\r
* Javascript はインスタンス毎のカプセル化がとてもコスト高。微妙なコスト増で隠蔽されたインスタンスを使う。\r
* @const\r
*/\r
- 'PRIVATE_DATA' : 16,\r
+ 'PRIVATE_DATA' : X_Class.PRIVATE_DATA,\r
\r
/**\r
* 未実装。でも目印になるので付けておきましょう。\r
* @const\r
*/\r
- 'SINGLETON' : 32,\r
+ 'SINGLETON' : X_Class.SINGLETON,\r
\r
'create' : X_Class_create,\r
\r
// ------------------------------------------------------------------------- //\r
/**\r
* クラスを定義する。<br>\r
- * X.Class.create() によるクラス定義は必ずしもコンストラクタを必要としません。クラス定義時にコンストラクタが未設定の場合、スーパークラスがあればそのコンストラクタを使用します。\r
- * @alias X.Class.create\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 {number} [classSetting=0] X_Class.POOL_OBJECT | X_Class.FINAL など\r
* @param {__ClassBase__=} [privateClass] このクラスとペアで動作するシャドウクラス\r
* @param {object} [props={}] このクラスのメンバと関数。コンストラクタは Constructor と書くこと\r
* @return {__ClassBase__}\r
// クラス設定\r
classDef.setting = classSetting = args[ 0 ];\r
if( X_Type_isNumber( classSetting ) ){\r
- opt_pool = !!( classSetting & X.Class.POOL_OBJECT );\r
- opt_abstract = !!( classSetting & X.Class.ABSTRACT );\r
- opt_final = !!( classSetting & X.Class.FINAL );\r
- opt_private = !!( classSetting & X.Class.PRIVATE_DATA );\r
+ opt_pool = !!( classSetting & X_Class.POOL_OBJECT );\r
+ opt_abstract = !!( classSetting & X_Class.ABSTRACT );\r
+ opt_final = !!( classSetting & X_Class.FINAL );\r
+ opt_private = !!( classSetting & X_Class.PRIVATE_DATA );\r
if( opt_final && opt_abstract ){\r
X.Logger.critical( 'final & Abstract!' );\r
return;\r
if( X_Class_PRIVATE_CLASS_LIST.indexOf( args[ 0 ] ) !== -1 ){\r
privateDef = X_Class_getClassDef( args[ 0 ] );\r
if( privateDef.isPrivate !== true ){\r
- X.Logger.critical( 'PrivateClass not found! please, X.Class.create( X.Class.PRIVATE, {...} ).' );\r
+ X.Logger.critical( 'PrivateClass not found! please, X_Class.create( X_Class.PRIVATE, {...} ).' );\r
return;\r
} else\r
if( privateDef.Abstract === true ){\r
};\r
\r
/**\r
- * サブクラスを作ります。与える引数は X.Class.create と同じです。http://d.hatena.ne.jp/m-hiyama/20051018/1129605002\r
+ * サブクラスを作ります。与える引数は X_Class.create と同じです。http://d.hatena.ne.jp/m-hiyama/20051018/1129605002\r
* @alias __ClassBase__.inherits\r
- * @example var SubClass = SuperClass.inherits( 'Sub', X.Class.FINAL, { ... } );\r
+ * @example var SubClass = SuperClass.inherits( 'Sub', X_Class.FINAL, { ... } );\r
* @param {string} [displayName] クラスの名前\r
- * @param {number} [classSetting=0] X.Class.POOL_OBJECT | X.Class.FINAL など\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
args.shift();\r
} else {\r
// クラス設定がない場合、親からコピーして、Abstract flag は落とす??\r
- classSetting = superDef.setting;// &= ~X.Class.ABSTRACT;\r
+ classSetting = superDef.setting;// &= ~X_Class.ABSTRACT;\r
};\r
- if( superDef.isPrivate ) classSetting = classSetting | X.Class.PRIVATE_DATA;\r
+ if( superDef.isPrivate ) classSetting = classSetting | X_Class.PRIVATE_DATA;\r
\r
params.push( classSetting );\r
\r
} else {\r
X_Class_traits = new Super( X_Closure_COMMAND_DROP );\r
};\r
- klass = X.Class.create.apply( X.Class, params );\r
+ klass = X_Class_create.apply( X.Class, params );\r
X_Class_traits = null;\r
\r
def = X_Class_getClassDef( klass );\r
X_Dom_orientationchange = window[ 'orientation' ] !== undefined && function( e ){
X_ViewPort_orientationFlag = true;
!X_UA[ 'Android' ] && X_ViewPort_resize();
- //console.log( '-- orientationchange : ' + X.ViewPort.getSize[ 0 ] + ' ' + X.ViewPort.getSize[ 1 ] );
+ //console.log( '-- orientationchange : ' + X[ 'ViewPort' ].getSize[ 0 ] + ' ' + X[ 'ViewPort' ].getSize[ 1 ] );
},
X_ViewPort_document = X_EventDispatcher( document ),
* @namespace X.ViewPort
* @alias X.ViewPort
*/
-X.ViewPort = {
+X[ 'ViewPort' ] = {
'listen' : function( type, arg1, arg2, arg3 ){
if( type <= X_ViewPort_readyState ){
};
// ie8-では keydown -> documentへ
type && arg1 && X_ViewPort[ 'listen' ]( type, arg1, arg2, arg3 );
- return X.ViewPort;
+ return X[ 'ViewPort' ];
},
X_ViewPort[ 'asyncDispatch' ]( type );
};
type && arg1 && X_ViewPort[ 'listenOnce' ]( type, arg1, arg2, arg3 );
- return X.ViewPort;
+ return X[ 'ViewPort' ];
},
'unlisten' : function( type, arg1, arg2, arg3 ){
type && arg1 && X_ViewPort[ 'unlisten' ]( type, arg1, arg2, arg3 );
- return X.ViewPort;
+ return X[ 'ViewPort' ];
},
'listening' : function( type, arg1, arg2, arg3 ){
if( X_UA_EVENT.W3C ){
X_ViewPort_document[ 'listenOnce' ]( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );
} else
-if( 6 <= X_UA[ 'IE' ] && X.inHead ){
+if( 6 <= X_UA[ 'IE' ] && X[ 'inHead' ] ){
// if this script in Head
document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );
X_TEMP._script = document.getElementById( "__ie_onload" );
*/\r
var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ](\r
'X.Node',\r
- X.Class.POOL_OBJECT, // X.Class.FINAL\r
+ X_Class.POOL_OBJECT, // X_Class.FINAL\r
\r
{\r
/**\r
if( X_Node_newByTag ){\r
X_Node_newByTag = false;\r
this[ '_tag' ] = v.toUpperCase();\r
- arguments[ 1 ] && this.attr( arguments[ 1 ] );\r
+ arguments[ 1 ] && this[ 'attr' ]( arguments[ 1 ] );\r
css = arguments[ 2 ];\r
css && this[ X_Type_isString( css ) ? 'cssText' : 'css' ]( css );\r
} else\r
\r
'empty' : X_Node_empty,\r
\r
- destroy : X_Node_destroy, // -> kill && kill event\r
+ destroy : X_Node_destroy, // -> kill && kill event\r
\r
'contains' : X_Node_contains,\r
\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
+ [ '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
break;\r
case X_Node_TYPE.HTML_STRING :\r
case X_Node_TYPE.STRING :\r
- return this.append.apply( this, X_HtmlParser_parse( v, true ) );\r
+ return X_Node_append.apply( this, X_HtmlParser_parse( v, true ) );\r
case X_Node_TYPE.XNODE :\r
// 親の xnodes から v を消す\r
v.parent && v[ 'remove' ]();\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
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[ '_listeners' ] && this[ 'unlisten' ](); // イベントの退避\r
\r
if( xnodes && ( i = xnodes.length ) ){\r
for( ; i; ){\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
+ return html ? this[ 'empty' ]()[ 'append' ].apply( this, X_HtmlParser_parse( html, true ) ) : this[ 'empty' ]();\r
};\r
\r
// getter\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
\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
if( X_UA[ 'Gecko' ] ){\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
+ that[ 'attr' ]( 'src', 'about:blank' );\r
};\r
};\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
};\r
if( !elm ) return;\r
\r
if( that[ '_flags' ] & X_Node_State.ACTUAL_LISTENING ){\r
- that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
+ that[ '_listeners' ] && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
that[ '_flags' ] &= ~X_Node_State.ACTUAL_LISTENING;\r
};\r
\r
};\r
\r
if( !elm ) return;\r
- that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\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
*/\r
\r
var\r
- X_Node_Selector__PSEUDO = {\r
+ X_Node_Selector__PSEUDO = {\r
'nth-child' : 9,\r
'nth-last-child' : 14,\r
'nth-of-type' : 11,\r
'nth-last-of-type' : 16,\r
- root : 4,\r
- link : 4,\r
- lang : 4,\r
- empty : 5,\r
- target : 6,\r
- invalid : 7,\r
- enabled : 7,\r
- checked : 7,\r
- disabled : 8,\r
- contains : 8,\r
+ 'root' : 4,\r
+ 'link' : 4,\r
+ 'lang' : 4,\r
+ 'empty' : 5,\r
+ 'target' : 6,\r
+ 'invalid' : 7,\r
+ 'enabled' : 7,\r
+ 'checked' : 7,\r
+ 'disabled' : 8,\r
+ 'contains' : 8,\r
'last-child' : 10,\r
'only-child' : 10, \r
'first-child' : 11,\r
'@' : 6 // XML 用の拡張、属性ノードを辿る http://www.marguerite.jp/Nihongo/WWW/RefDOM/_Attr_interface.html\r
},\r
X_Node_Selector__SELECTOR = {\r
- '' : 0, // none\r
- tag : 1,\r
- '#' : 2,\r
- '.' : 3,\r
- ':' : 4,\r
- '[' : 5,\r
- not : 6,\r
- scope : 7,\r
- root : 8,\r
- link : 9\r
+ '' : 0, // none\r
+ 'tag' : 1,\r
+ '#' : 2,\r
+ '.' : 3,\r
+ ':' : 4,\r
+ '[' : 5,\r
+ 'not' : 6,\r
+ 'scope' : 7,\r
+ 'root' : 8,\r
+ 'link' : 9\r
},\r
X_Node_Selector__OPERATORS = { '==' : 1, '!=': 2, '~=': 3, '^=': 4, '$=': 5, '*=': 6, '|=': 7 }, // '':0 は属性が存在するならtrue\r
// TODO { a : 1, A : 2, _ : 3,,, }\r
};\r
\r
var X_Node_Selector__filter = {\r
- 'root' : function( elem ){\r
- return elem === ( elem.ownerDocument || elem.document ).documentElement;\r
+ 'root' : function(){\r
+ return X_Node_html;\r
},\r
'target' : {\r
m : function( flags, xnodes ){\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
+ for( node = xnode[ 'firstChild' ](); node; node = node[ 'next' ]() ){\r
if( node[ '_tag' ] || node[ '_text' ] ){\r
tmp = false;\r
break;\r
*/\r
\r
var X_HTMLParser_CHARS = {\r
- A:1,B:1,C:1,D:1,E:1,F:1,G:1,H:1,I:1,J:1,K:1,L:1,M:1,N:1,O:1,P:1,Q:1,R:1,S:1,T:1,U:1,V:1,W:1,X:1,Y:1,Z:1,\r
- a:2,b:2,c:2,d:2,e:2,f:2,g:2,h:2,i:2,j:2,k:2,l:2,m:2,n:2,o:2,p:2,q:2,r:2,s:2,t:2,u:2,v:2,w:2,x:2,y:2,z:2,\r
- // "0" : 4, "1" : 4, "2" : 4, "3" : 4, "4" : 4, "5" : 4, "6" : 4, "7" : 4, "8" : 4, "9" : 4, closure compiler で minify すると ie4 で error、eval使う\r
+ 'A':1,'B':1,'C':1,'D':1,'E':1,'F':1,'G':1,'H':1,'I':1,'J':1,'K':1,'L':1,'M':1,'N':1,'O':1,'P':1,'Q':1,'R':1,'S':1,'T':1,'U':1,'V':1,'W':1,'X':1,'Y':1,'Z':1,\r
+ 'a':2,'b':2,'c':2,'d':2,'e':2,'f':2,'g':2,'h':2,'i':2,'j':2,'k':2,'l':2,'m':2,'n':2,'o':2,'p':2,'q':2,'r':2,'s':2,'t':2,'u':2,'v':2,'w':2,'x':2,'y':2,'z':2,\r
+ // "0" ': 4, "1" : 4, "2" : 4, "3" : 4, "4" : 4, "5" : 4, "6" : 4, "7" : 4, "8" : 4, "9" : 4, closure compiler で minify すると ie4 で error、eval使う\r
\r
'\t' : 16, '\r\n' : 16, '\r' : 16, '\n' : 16, '\f' : 16, '\b' : 16, ' ' : 16\r
},\r
- X_HTMLParser_alphabets = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\r
- X_HTMLParser_whiteSpace = '\t\r\n\f\b ',\r
\r
// Empty Elements - HTML 4.01\r
- X_HTMLParser_empty = X_Dom_DTD_EMPTY,\r
+ // X_Dom_DTD_EMPTY\r
\r
// Block Elements - HTML 4.01\r
- X_HTMLParser_block = {ADDRESS:1,APPLET:1,BLOCKQUOTE:1,BUTTON:1,CENTER:1,DD:1,DEL:1,DIR:1,DIV:1,DL:1,DT:1,FIELDSET:1,FORM:1,FRAMESET:1,HR:1,IFRAME:1,INS:1,\r
- ISINDEX:1,LI:1,MAP:1,MENU:1,NOFRAMES:1,NOSCRIPT:1,OBJECT:1,OL:1,P:1,PRE:1,SCRIPT:1,TABLE:1,TBODY:1,TD:1,TFOOT:1,TH:1,THEAD:1,TR:1,UL:1 },\r
+ X_HTMLParser_block = {'ADDRESS':1,'APPLET':1,'BLOCKQUOTE':1,'BUTTON':1,'CENTER':1,'DD':1,'DEL':1,'DIR':1,'DIV':1,'DL':1,'DT':1,'FIELDSET':1,'FORM':1,'FRAMESET':1,'HR':1,'IFRAME':1,'INS':1,\r
+ 'ISINDEX':1,'LI':1,'MAP':1,'MENU':1,'NOFRAMES':1,'NOSCRIPT':1,'OBJECT':1,'OL':1,'P':1,'PRE':1,'SCRIPT':1,'TABLE':1,'TBODY':1,'TD':1,'TFOOT':1,'TH':1,'THEAD':1,'TR':1,'UL':1 },\r
// Inline Elements - HTML 4.01\r
- X_HTMLParser_inline = {A:1,ABBR:1,ACRONYM:1,APPLET:1,B:1,BASEFONT:1,BDO:1,BIG:1,BR:1,BUTTON:1,CITE:1,CODE:1,DEL:1,DFN:1,EM:1,FONT:1,I:1,IFRAME:1,IMG:1,\r
- INPUT:1,INS:1,KBD:1,LABEL:1,MAP:1,OBJECT:1,Q:1,S:1,SAMP:1,SCRIPT:1,SELECT:1,SMALL:1,SPAN:1,STRIKE:1,STRONG:1,SUB:1,SUP:1,TEXTAREA:1,TT:1,U:1,VAR:1},\r
- // Elements that you can, intentionally, leave open\r
+ X_HTMLParser_inline = {'A':1,'ABBR':1,'ACRONYM':1,'APPLET':1,'B':1,'BASEFONT':1,'BDO':1,'BIG':1,'BR':1,'BUTTON':1,'CITE':1,'CODE':1,'DEL':1,'DFN':1,'EM':1,'FONT':1,'I':1,'IFRAME':1,'IMG':1,\r
+ 'INPUT':1,'INS':1,'KBD':1,'LABEL':1,'MAP':1,'OBJECT':1,'Q':1,'S':1,'SAMP':1,'SCRIPT':1,'SELECT':1,'SMALL':1,'SPAN':1,'STRIKE':1,'STRONG':1,'SUB':1,'SUP':1,'TEXTAREA':1,'TT':1,'U':1,'VAR':1},\r
+ // Elements that you can,' intentionally,' leave open\r
// (and which close themselves)\r
- X_HTMLParser_closeSelf = {OLGROUP:1,DD:1,DT:1,LI:1,OPTIONS:1,P:1,TBODY:1,TD:1,TFOOT:1,TH:1,THEAD:1,TR:1}, // add tbody\r
+ X_HTMLParser_closeSelf = {'OLGROUP':1,'DD':1,'DT':1,'LI':1,'OPTIONS':1,'P':1,'TBODY':1,'TD':1,'TFOOT':1,'TH':1,'THEAD':1,'TR':1}, // add tbody\r
\r
X_HTMLParser_sisters = {\r
- TH : { TD : 1 },\r
- TD : { TH : 1 },\r
- DT : { DD : 1 },\r
- DD : { DT : 1 },\r
- COLGROUP : { CAPTION : 1 },\r
- THEAD : { CAPTION : 1, COLGROUP : 1 },\r
- TFOOT : { CAPTION : 1, COLGROUP : 1, THEAD : 1, TBODY : 1 },\r
- TBODY : { CAPTION : 1, COLGROUP : 1, THEAD : 1, TFOOT : 1 }\r
+ 'TH' : { 'TD' : 1 },\r
+ 'TD' : { 'TH' : 1 },\r
+ 'DT' : { 'DD' : 1 },\r
+ 'DD' : { 'DT' : 1 },\r
+ 'COLGROUP' : { 'CAPTION' : 1 },\r
+ 'THEAD' : { 'CAPTION' : 1, 'COLGROUP' : 1 },\r
+ 'TFOOT' : { 'CAPTION' : 1, 'COLGROUP' : 1, 'THEAD' : 1, 'TBODY' : 1 },\r
+ 'TBODY' : { 'CAPTION' : 1, 'COLGROUP' : 1, 'THEAD' : 1, 'TFOOT' : 1 }\r
},\r
/*\r
* http://www.tohoho-web.com/html/tbody.htm\r
*/\r
\r
// Attributes that have their values filled in disabled="disabled"\r
- X_HTMLParser_fillAttrs = X_Node_Attr_noValue, //{checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};\r
\r
// Special Elements (can contain anything)\r
- X_HTMLParser_special = { SCRIPT : 1, STYLE : 1, PLAINTEXT : 1, XMP : 1, TEXTAREA : 1 },\r
+ X_HTMLParser_special = { 'SCRIPT' : 1, 'STYLE' : 1, 'PLAINTEXT' : 1, 'XMP' : 1, 'TEXTAREA' : 1 },\r
\r
X_HTMLParser_skipFixNesting = false;\r
\r
\r
function X_HTMLParser_saveAttr( attrs, name, value ){\r
name = name.toLowerCase();\r
- value = X_HTMLParser_fillAttrs[ name ] === 1 ? name : value;\r
+ value = X_Node_Attr_noValue[ name ] === 1 ? name : value;\r
attrs[ attrs.length ] = {\r
name : name,\r
value : value,\r
};\r
};\r
last && X_HTMLParser_closeSelf[ tagName ] === 1 && ( last === tagName || ( sisters[ tagName ] && sisters[ tagName ][ last ] === 1 ) ) && parseEndTag( stack, handler, last );\r
- empty = empty || X_HTMLParser_empty[ tagName ];\r
+ empty = empty || X_Dom_DTD_EMPTY[ tagName ];\r
!empty && ( stack[ stack.length ] = tagName );\r
\r
return handler.start( tagName, attrs, empty, index );\r
};\r
};\r
};\r
- xnode.attr( _attrs );\r
+ xnode[ 'attr' ]( _attrs );\r
};\r
},\r
end : function(){\r
function X_HTMLParser_asyncParse( html, ignoreError ){\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
X_HTMLParser_asyncParse( html, true )\r
[ 'listen' ]( X_EVENT_PROGRESS,\r
function( e ){\r
- elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
+ elmProgress.style.width = ( e[ 'percent' ] * 100 | 0 ) + '%';\r
}\r
)\r
[ 'listenOnce' ]( X_EVENT_SUCCESS,\r
current = null;\r
};\r
// complete\r
+ console.log( 'xtree 作成完了' );\r
X_ViewPort[ 'asyncDispatch' ]( X_EVENT_XTREE_READY );\r
elmProgress.parentNode ? elmProgress.parentNode.removeChild( elmProgress ) : ( elmProgress.outerHTML = '' );\r
delete X_TEMP.asyncCreateTree;\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
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
return {\r
*/
X[ 'Pulgin' ] = {
- Flash : X_Pulgin_FLASH_VERSION,
+ 'Flash' : X_Pulgin_FLASH_VERSION,
- FlashEnabled : !!X_Pulgin_FLASH_ENABLED,
+ 'FlashEnabled' : !!X_Pulgin_FLASH_ENABLED,
- Silverlight : X_Pulgin_SILVER_LIGHT_VERSION,
+ 'Silverlight' : X_Pulgin_SILVER_LIGHT_VERSION,
- SilverlightEnabled : !!X_Pulgin_SILVER_LIGHT_ENABLED,
+ 'SilverlightEnabled' : !!X_Pulgin_SILVER_LIGHT_ENABLED,
- Unity : X_Pulgin_UNITY_VERSION,
+ 'Unity' : X_Pulgin_UNITY_VERSION,
- UnityEnabled : !!X_Pulgin_UNITY_ENABLED,
+ 'UnityEnabled' : !!X_Pulgin_UNITY_ENABLED,
- GearsEnabled : X_Pulgin_GEARS_ENABLED
+ 'GearsEnabled' : X_Pulgin_GEARS_ENABLED
};
// http://nanto.asablo.jp/blog/2011/12/08/6237308\r
// IE 6/7 で文書間通信を実現するための一案\r
if( X_UA[ 'IE' ] < 9 ){\r
- this.xnodeIframe.attr( 'src', 'about:blank' );\r
+ this.xnodeIframe[ 'attr' ]( 'src', 'about:blank' );\r
};\r
// Safari 2.0.* bug: iframe's absolute position and src set.\r
if( !X_UA[ 'Webkit' ] ){\r
this._ready = true;\r
return;\r
};\r
+ break;\r
\r
case 'readystatechange' :\r
if( ( raw.readyState !== 'complete' && raw.readyState !== 'loaded' ) ) break;\r
console.log( 'iframe load.' );\r
this[ 'asyncDispatch' ]( X_EVENT_SUCCESS );\r
break;\r
+\r
case 'error' :\r
this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
break;\r
\r
'close' : function(){\r
X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, this );\r
- this.xnodeIframe[ 'call' ]( 'close' );\r
+ this.xnodeIframe.call( 'close' );\r
this.xnodeIframe.destroy();\r
}\r
\r
*/\r
var X_NET_Queue = X_EventDispatcher[ 'inherits' ](\r
'XNetQueue',\r
- X.Class.POOL_OBJECT,\r
+ X_Class.POOL_OBJECT,\r
\r
/** @lends X_NET_Queue.prototype */\r
{\r
X_Net_XHR_ACTIVE_X = X_Net_XHR_ACTIVE_X[ 1 ];\r
};\r
\r
-X.Net.XHR = {\r
+X[ 'Net' ][ 'XHR' ] = {\r
\r
/*\r
* http://hakuhin.jp/as/import.html\r
* http://hakuhin.jp/as/javascript.html\r
* Flash から JavaScript にアクセスする(3+)\r
*/\r
- FLASH : false,\r
+ 'FLASH' : false,\r
\r
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\r
// Progress Events Chrome7, firefox3.5, ie10, opera12, Safari?, Chrome for Android 0.16\r
- PROGRESS : false, //\r
+ 'PROGRESS' : false, //\r
\r
- UL_PROGRESS : false\r
+ 'UL_PROGRESS' : false\r
\r
};\r
\r
this._timerID = 0;\r
},\r
\r
- onUploadProgress : X.Net.XHR.UL_PROGRESS && function( e ){\r
+ onUploadProgress : X[ 'Net' ][ 'XHR' ][ 'UL_PROGRESS' ] && function( e ){\r
var raw = X_NET_XHRWrapper[ '_rawObject' ].upload,\r
live = !X_NET_XHRWrapper._canceled,\r
states, data;\r
if( X_Net_XHR_ACTIVE_X ){ // win ie5-6\r
X_NET_XHRWrapper[ 'listen' ]( 'readystatechange' );\r
} else \r
- if( X.Net.XHR.PROGRESS ){\r
+ if( X[ 'Net' ][ 'XHR' ][ 'PROGRESS' ] ){\r
X_NET_XHRWrapper[ 'listen' ]( [ 'load', 'progress', 'error', 'timeout' ] ); //, 'abort'\r
} else {\r
X_NET_XHRWrapper[ 'listen' ]( [ 'load', 'readystatechange', 'error', 'timeout' ] ); //, 'abort'\r
* TODO postMessage
*/
-X.Net.JSONP = {
- cb : function( accessKey, jsonString, time, opt_json2FileSize ){
+X[ 'Net' ][ 'JSONP' ] = {
+ 'cb' : function( accessKey, jsonString, time, opt_json2FileSize ){
if( accessKey !== X_NET_JSONP_ACCESS_KEY || !X_NET_JSONPWrapper._busy ) return;
X_NET_JSONPWrapper._busy = false;
json2FileSize = 18103,
html;
- X_NET_JSONP_NinjaIframe || ( X_NET_JSONP_NinjaIframe = new X.Util.NinjaIframe() );
+ X_NET_JSONP_NinjaIframe || ( X_NET_JSONP_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ]() );
// TODO '<scr'+'ipt> 化 恐らくアンチウイルスソフトが反応しないための対策
// TODO postMessage の利用
};
X_NET_JSONP_NinjaIframe
- .refresh( html.join( '' ) )
+ [ 'refresh' ]( html.join( '' ) )
[ '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 :
- console.log( 'iframe onload, but' );
+ console.log( 'iframe onload, but ' + X_NET_JSONPWrapper._onloadCount + ' < ' + X_Net_JSONP_onloadCount );
if( ++X_NET_JSONPWrapper._onloadCount < X_Net_JSONP_onloadCount ) return;
// TODO callback が無ければ error
X_NET_JSONPWrapper[ 'asyncDispatch' ]( 1000, X_EVENT_ERROR );
\r
X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](\r
'X.Audio',\r
- X.Class.POOL_OBJECT,\r
+ X_Class.POOL_OBJECT,\r
{\r
'source' : '',\r
'backendName' : '',\r
X_Audio_WebAudioWrapper = X_EventDispatcher[ 'inherits' ](
'X.AV.WebAudioWrapper',
- X.Class.POOL_OBJECT,
+ X_Class.POOL_OBJECT,
{
url : '',
X_UA[ 'AndroidBrowser4' ] ? 'loadeddata' : \r
X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ? 'loadeddata' : 'canplay',\r
X_Audio_HTMLAudioWrapper,\r
- X_Audio_constructor = window.Audio || window.HTMLAudioElement,\r
+ X_Audio_constructor = window[ 'Audio' ] || window.HTMLAudioElement,\r
X_Audio_rawAudio,\r
// Opera Mobile 12 android4.4.4 & 2.3.5 は 2回目以降の currentTime へのセットで currentTime が更新されなくなるため、タイマーを使用する\r
X_Audio_HTMLAudioWrapper_currentTimeFix = !!X_UA[ 'OperaMobile' ] || !!X_UA[ 'OperaTablet' ], // || ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
\r
if( X_Audio_rawAudio.canPlayType ){\r
X_Audio_codecs = {\r
- mp3 : X_Audio_rawAudio.canPlayType('audio/mpeg'),\r
- opus : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="opus"'),\r
- ogg : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="vorbis"'),\r
- wav : X_Audio_rawAudio.canPlayType('audio/wav; codecs="1"'),\r
- aac : X_Audio_rawAudio.canPlayType('audio/aac'),\r
- m4a : X_Audio_rawAudio.canPlayType('audio/x-m4a') + X_Audio_rawAudio.canPlayType('audio/m4a') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
- mp4 : X_Audio_rawAudio.canPlayType('audio/x-mp4') + X_Audio_rawAudio.canPlayType('audio/mp4') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
- weba : X_Audio_rawAudio.canPlayType('audio/webm; codecs="vorbis"')\r
+ 'mp3' : X_Audio_rawAudio.canPlayType('audio/mpeg'),\r
+ 'opus' : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="opus"'),\r
+ 'ogg' : X_Audio_rawAudio.canPlayType('audio/ogg; codecs="vorbis"'),\r
+ 'wav' : X_Audio_rawAudio.canPlayType('audio/wav; codecs="1"'),\r
+ 'aac' : X_Audio_rawAudio.canPlayType('audio/aac'),\r
+ 'm4a' : X_Audio_rawAudio.canPlayType('audio/x-m4a') + X_Audio_rawAudio.canPlayType('audio/m4a') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
+ 'mp4' : X_Audio_rawAudio.canPlayType('audio/x-mp4') + X_Audio_rawAudio.canPlayType('audio/mp4') + X_Audio_rawAudio.canPlayType('audio/aac'),\r
+ 'weba' : X_Audio_rawAudio.canPlayType('audio/webm; codecs="vorbis"')\r
};\r
(function( k, v ){\r
for( k in X_Audio_codecs ){\r
} else {\r
// iOS3.2.3\r
X_Audio_codecs = {\r
- mp3 : X_UA[ 'IE' ] || X_UA[ 'Chrome' ] || ( X_UA[ 'Windows' ] && X_UA[ 'Safari' ] ),\r
- ogg : 5 <= X_UA[ 'Gecko' ] || X_UA[ 'Chrome' ] || X_UA[ 'Opera' ] ,\r
- wav : X_UA[ 'Gecko' ] || X_UA[ 'Opera' ] || ( X_UA[ 'Windows' ] && X_UA[ 'Safari' ] ),\r
- aac : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],\r
- m4a : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],\r
- mp4 : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],\r
- weba : 2 <= X_UA[ 'Gecko' ] || 10.6 <= X_UA[ 'Opera' ] // firefox4+(Gecko2+)\r
+ 'mp3' : X_UA[ 'IE' ] || X_UA[ 'Chrome' ] || ( X_UA[ 'Windows' ] && X_UA[ 'Safari' ] ),\r
+ 'ogg' : 5 <= X_UA[ 'Gecko' ] || X_UA[ 'Chrome' ] || X_UA[ 'Opera' ] ,\r
+ 'wav' : X_UA[ 'Gecko' ] || X_UA[ 'Opera' ] || ( X_UA[ 'Windows' ] && X_UA[ 'Safari' ] ),\r
+ 'aac' : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],\r
+ 'm4a' : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],\r
+ 'mp4' : X_UA[ 'IE' ] || X_UA[ 'WebKit' ],\r
+ 'weba' : 2 <= X_UA[ 'Gecko' ] || 10.6 <= X_UA[ 'Opera' ] // firefox4+(Gecko2+)\r
};\r
};\r
\r
X_Audio_HTMLAudioWrapper = X_EventDispatcher[ 'inherits' ](\r
'X.AV.HTML5AudioWrapper',\r
- X.Class.POOL_OBJECT,\r
+ X_Class.POOL_OBJECT,\r
{\r
\r
proxy : null,\r
var X_Audio_SLAudioWrapper,\r
X_Audio_SLAudio_uid = 0;\r
\r
-if( X.Pulgin.SilverlightEnabled ){\r
+if( X[ 'Pulgin' ][ 'SilverlightEnabled' ] ){\r
\r
// X.Node.inherits はできない。_rawObject は <object> でなく silverlight\r
X_Audio_SLAudioWrapper = X_EventDispatcher[ 'inherits' ](\r
'X.AV.SilverlightAudioWrapper',\r
- X.Class.POOL_OBJECT,\r
+ X_Class.POOL_OBJECT,\r
{\r
'_rawType' : X_EventDispatcher_EVENT_TARGET_TYPE.SILVER_LIGHT,\r
proxy : null,\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
X.UI._AbstractUINode = X_EventDispatcher[ 'inherits' ](\r
'X.UI._AbstractUINode',\r
- X.Class.ABSTRACT | X.Class.PRIVATE_DATA,\r
+ X_Class.ABSTRACT | X_Class.PRIVATE_DATA,\r
{\r
phase : 0,\r
dirty : X.UI.Dirty.CLEAN,\r
},\r
\r
dispatch : function( e ){\r
- //console.log( e.type + ' ' + ( this._listeners && this._listeners[ e.type ] ) );\r
+ //console.log( e.type + ' ' + ( this[ '_listeners' ] && this[ '_listeners' ][ e.type ] ) );\r
var xve = X.UI.Event,\r
ret = X_EventDispatcher_dispatch.call( this, e ),\r
type = e.type || e;\r
\r
X.UI.AbstractUINode = X_Class_create(\r
'AbstractUINode',\r
- X.Class.ABSTRACT | X.Class.SUPER_ACCESS,\r
+ X_Class.ABSTRACT | X_Class.SUPER_ACCESS,\r
{\r
parent : function(){\r
return X_Class_getPrivate( this ).parent;\r
\r
X.UI._Box = X.UI._AbstractUINode.inherits(\r
'X.UI._Box',\r
- X.Class.PRIVATE_DATA | X.Class.SUPER_ACCESS, // 現状 super 指定がないとconstructor未定擬時に親のconstructor が使われない\r
+ X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS, // 現状 super 指定がないとconstructor未定擬時に親のconstructor が使われない\r
{\r
layout : null,\r
uinodes : null,\r
\r
X.UI.Box = X.UI.AbstractUINode.inherits(\r
'Box',\r
- X.Class.SUPER_ACCESS,\r
+ X_Class.SUPER_ACCESS,\r
X.UI._Box,\r
{\r
Constructor : function(){\r
X.UI._ChromeBox = X.UI._Box.inherits(\r
'_ChromeBox',\r
- X.Class.PRIVATE_DATA | X.Class.SUPER_ACCESS,\r
+ X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS,\r
{\r
chromeNodes : null,\r
containerNode : null,\r
\r
X.UI.ChromeBox = X.UI.Box.inherits(\r
'ChromeBox',\r
- X.Class.SUPER_ACCESS,\r
+ X_Class.SUPER_ACCESS,\r
X.UI._ChromeBox,\r
{\r
Constructor : function(){\r
\r
X.UI._ScrollBox = X.UI._ChromeBox.inherits(\r
'_ScrollBox',\r
- X.Class.PRIVATE_DATA | X.Class.SUPER_ACCESS,\r
+ X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS,\r
{\r
//elmScroll : null,\r
//elmScroller : null,\r
this.maxScrollX = this.boxWidth - this.containerNode.boxWidth;\r
this.maxScrollY = this.boxHeight - this.containerNode.boxHeight;\r
\r
- this.hasHScroll = this.User.attr( 'scrollX' ) && this.maxScrollX < 0;\r
- this.hasVScroll = this.User.attr( 'scrollY' ) && this.maxScrollY < 0;\r
+ this.hasHScroll = this.User[ 'attr' ]( 'scrollX' ) && this.maxScrollX < 0;\r
+ this.hasVScroll = this.User[ 'attr' ]( 'scrollY' ) && this.maxScrollY < 0;\r
\r
if( !this.hasHScroll ){\r
this.maxScrollX = 0;\r
\r
X.UI.ScrollBox = X.UI.ChromeBox.inherits(\r
'ScrollBox',\r
- X.Class.SUPER_ACCESS,\r
+ X_Class.SUPER_ACCESS,\r
X.UI._ScrollBox,\r
{\r
Constructor : function(){\r
X.UI._Text = X.UI._AbstractUINode.inherits(\r
'_Text',\r
- X.Class.PRIVATE_DATA,\r
+ X_Class.PRIVATE_DATA,\r
{\r
content : null,\r
\r
\r
X.UI.Text = X.UI.AbstractUINode.inherits(\r
'Text',\r
- X.Class.SUPER_ACCESS,\r
+ X_Class.SUPER_ACCESS,\r
X.UI._Text,\r
{\r
Constructor : function( opt_content, opt_cssObj ){\r
X_Class_newPrivate( this, opt_content );\r
- X_Type_isObject( opt_cssObj = opt_cssObj || opt_content ) && this.attr( opt_cssObj );\r
+ X_Type_isObject( opt_cssObj = opt_cssObj || opt_content ) && this[ 'attr' ]( opt_cssObj );\r
},\r
content : function( v ){\r
var data = X_Class_getPrivate( this );\r
};
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[ '_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._PageRoot = X.UI._Box.inherits(
'_PageRoot',
- X.Class.FINAL | X.Class.PRIVATE_DATA | X.Class.SUPER_ACCESS,
+ X_Class.FINAL | X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS,
{
layout : X.UI.Layout.Canvas,