OSDN Git Service
(root)
/
pettanr
/
clientJs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 0.6.145, fix X.Audio, fix VIEW_ACTIVATE Event @X.ViewPort.
[pettanr/clientJs.git]
/
0.6.x
/
js
/
02_dom
/
02_XNode.js
diff --git
a/0.6.x/js/02_dom/02_XNode.js
b/0.6.x/js/02_dom/02_XNode.js
index
ab3d01c
..
d71a866
100644
(file)
--- a/
0.6.x/js/02_dom/02_XNode.js
+++ b/
0.6.x/js/02_dom/02_XNode.js
@@
-68,7
+68,7
@@
var X_Node_BITMASK_RESET_STYLE = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ (
\r
X_Node_BitMask_IE4_IS_MIX = X_Node_State.IE4_HAS_TEXTNODE | X_Node_State.IE4_HAS_ELEMENT,
\r
\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
+ /* @enum {number} */
\r
X_Node_TYPE = {
\r
XNODE : 1,
\r
RAW_HTML : 2,
\r
X_Node_TYPE = {
\r
XNODE : 1,
\r
RAW_HTML : 2,
\r
@@
-142,7
+142,6
@@
var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ](
/**
\r
* NodeList と動作を一致させるためのプロパティ。常に 1。
\r
* @type {number}
\r
/**
\r
* NodeList と動作を一致させるためのプロパティ。常に 1。
\r
* @type {number}
\r
- * @private
\r
* @alias Node.prototype.length
\r
*/
\r
length : 1,
\r
* @alias Node.prototype.length
\r
*/
\r
length : 1,
\r
@@
-150,7
+149,6
@@
var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ](
/**
\r
* 親 Node。
\r
* @type {Node}
\r
/**
\r
* 親 Node。
\r
* @type {Node}
\r
- * @private
\r
* @alias Node.prototype.parent
\r
*/
\r
parent : null, // remove された枝も親子構造は維持している。
\r
* @alias Node.prototype.parent
\r
*/
\r
parent : null, // remove された枝も親子構造は維持している。
\r
@@
-671,7
+669,14
@@
function X_Node_appendAt( start, v ){
return this;
\r
case X_Node_TYPE.XNODE :
\r
// 親の xnodes から v を消す
\r
return this;
\r
case X_Node_TYPE.XNODE :
\r
// 親の xnodes から v を消す
\r
- v.parent && v[ 'remove' ]();
\r
+ if( v.parent ){
\r
+ if( v.parent === this ){
\r
+ i = v[ 'getOrder' ]();
\r
+ if( i === start ) return this;
\r
+ if( i < start ) --start;
\r
+ };
\r
+ v[ 'remove' ]();
\r
+ };
\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
break;
\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
break;
\r
@@
-716,14
+721,14
@@
function X_Node_appendTo( parent, opt_index ){
\r
\r
/**
\r
\r
\r
/**
\r
- * ノードの直前の要素を取得。または直前に挿入。
\r
+ * ノードの直前の要素を取得。または直前に挿入。
挿入する要素が先にいる兄弟でも正しく動作する。
\r
* @alias Node.prototype.prev
\r
* @alias Node.prototype.prev
\r
- * @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。
\r
+ * @param {Node|string|HTMLElement|TextNode} [
...
v] HTMLElement と TextNode は内部のみ。
\r
* @return {Node} 自身。チェインメソッド
\r
* @example childNode.prev( prevNode );
\r
*/
\r
function X_Node_prev( v ){
\r
* @return {Node} 自身。チェインメソッド
\r
* @example childNode.prev( prevNode );
\r
*/
\r
function X_Node_prev( v ){
\r
- var parent = this.parent, xnodes, i, l
, start
;
\r
+ var parent = this.parent, xnodes, i, l;
\r
\r
// getter
\r
if( v === undefined ){
\r
\r
// getter
\r
if( v === undefined ){
\r
@@
-736,19
+741,18
@@
function X_Node_prev( v ){
if( !parent ) return this;
\r
\r
l = arguments.length;
\r
if( !parent ) return this;
\r
\r
l = arguments.length;
\r
- start = this[ 'getOrder' ]();
\r
if( 1 < l ){
\r
if( 1 < l ){
\r
- for(
; l;
){
\r
- parent[ 'appendAt' ](
start
, arguments[ --l ] );
\r
+ for(
i = 0; l; ++i
){
\r
+ parent[ 'appendAt' ](
this[ 'getOrder' ]() - i
, arguments[ --l ] );
\r
};
\r
return this;
\r
};
\r
};
\r
return this;
\r
};
\r
- parent[ 'appendAt' ](
start
, v );
\r
+ parent[ 'appendAt' ](
this[ 'getOrder' ]()
, v );
\r
return this;
\r
};
\r
\r
/**
\r
return this;
\r
};
\r
\r
/**
\r
- * ノードの直後の要素を取得。または直後に挿入。
\r
+ * ノードの直後の要素を取得。または直後に挿入。
挿入する要素が先にいる兄弟でも正しく動作する。
\r
* @alias Node.prototype.next
\r
* @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。
\r
* @return {Node} 自身。チェインメソッド
\r
* @alias Node.prototype.next
\r
* @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。
\r
* @return {Node} 自身。チェインメソッド
\r
@@
-769,23
+773,19
@@
function X_Node_next( v ){
\r
l = arguments.length;
\r
start = this[ 'getOrder' ]() + 1;
\r
\r
l = arguments.length;
\r
start = this[ 'getOrder' ]() + 1;
\r
+
\r
if( parent[ '_xnodes' ].length <= start ){
\r
if( parent[ '_xnodes' ].length <= start ){
\r
- if( 1 < l ){
\r
- for( i = 0; i < l; ++i ){
\r
- parent[ 'append' ]( arguments[ i ] );
\r
- };
\r
- return this;
\r
+ for( i = 0; i < l; ++i ){
\r
+ parent[ 'append' ]( arguments[ i ] );
\r
};
\r
};
\r
- parent[ 'append' ]( v );
\r
- return this;
\r
- };
\r
+ } else
\r
if( 1 < l ){
\r
for( ; l; ){
\r
if( 1 < l ){
\r
for( ; l; ){
\r
- parent[ 'appendAt' ](
start
, arguments[ --l ] );
\r
+ parent[ 'appendAt' ](
this[ 'getOrder' ]() + 1
, arguments[ --l ] );
\r
};
\r
};
\r
- return this;
\r
+ } else {
\r
+ parent[ 'appendAt' ]( start, v );
\r
};
\r
};
\r
- parent[ 'appendAt' ]( start, v );
\r
return this;
\r
};
\r
\r
return this;
\r
};
\r
\r
@@
-1195,28
+1195,25
@@
function X_Node_text( text ){
function X_Node_call( name /*, opt_args... */ ){
\r
var l = arguments.length - 1,
\r
raw, func, args, params, i;
\r
function X_Node_call( name /*, opt_args... */ ){
\r
var l = arguments.length - 1,
\r
raw, func, args, params, i;
\r
-
\r
- X_Node_updateTimerID && X_Node_startUpdate();
\r
-
\r
+
\r
switch( name ){
\r
case 'nodeType' :
\r
return this[ '_tag' ] ? 1 : 3;
\r
switch( name ){
\r
case 'nodeType' :
\r
return this[ '_tag' ] ? 1 : 3;
\r
- case 'text' :
\r
- return this[ 'text' ]();
\r
- case 'html' :
\r
- case 'innerHTML' :
\r
- return this[ 'html' ]();
\r
case 'outerHTML' :
\r
X_Node_outerXNode = X_Node_body; // == true ならなんでもよい。型を合わすために xbody にしている
\r
v = this[ 'html' ]();
\r
X_Node_outerXNode = null;
\r
return v;
\r
case 'outerHTML' :
\r
X_Node_outerXNode = X_Node_body; // == true ならなんでもよい。型を合わすために xbody にしている
\r
v = this[ 'html' ]();
\r
X_Node_outerXNode = null;
\r
return v;
\r
+ case 'treeIsDirty' :
\r
+ return !!X_Node_updateTimerID;
\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
};
\r
\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
};
\r
\r
+ X_Node_updateTimerID && X_Node_startUpdate();
\r
+
\r
raw = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );
\r
if( !raw ) return;
\r
\r
raw = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );
\r
if( !raw ) return;
\r
\r
@@
-1327,6
+1324,8
@@
function X_Node_startUpdate( time ){
if( time ){
\r
// X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに
\r
X_System[ '_listeners' ] && X_System[ '_listeners' ][ X_EVENT_UPDATED ] && X_System[ 'dispatch' ]( X_EVENT_UPDATED );
\r
if( time ){
\r
// X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに
\r
X_System[ '_listeners' ] && X_System[ '_listeners' ][ X_EVENT_UPDATED ] && X_System[ 'dispatch' ]( X_EVENT_UPDATED );
\r
+ } else {
\r
+ X_System[ '_listeners' ] && X_System[ '_listeners' ][ X_EVENT_UPDATED ] && X_System[ 'asyncDispatch' ]( X_EVENT_UPDATED );
\r
};
\r
\r
X_ViewPort[ '_listeners' ] && X_ViewPort[ '_listeners' ][ X_EVENT_AFTER_UPDATE ] && X_ViewPort[ 'asyncDispatch' ]( X_EVENT_AFTER_UPDATE );
\r
};
\r
\r
X_ViewPort[ '_listeners' ] && X_ViewPort[ '_listeners' ][ X_EVENT_AFTER_UPDATE ] && X_ViewPort[ 'asyncDispatch' ]( X_EVENT_AFTER_UPDATE );
\r
@@
-1359,13
+1358,12
@@
var X_Node__commitUpdate =
};
\r
\r
// 2. GPU解放予約
\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
+
//
console.log( 'GPU 解放 ' );
\r
//X_Node_updateReservedByReleaseGPU = true;
\r
//X_Node__updateRawNode( that, elm );
\r
that[ '_flags' ] &= X_Node_BitMask_RESET_GPU;
\r
//X_Node_updateReservedByReleaseGPU = true;
\r
//X_Node__updateRawNode( that, elm );
\r
that[ '_flags' ] &= X_Node_BitMask_RESET_GPU;
\r
- //return elm;
\r
+ //return elm;
// TODO もしかしたらこのタイミングで更新できるかも。
\r
};
\r
\r
// 3. GPU予約 -> GPU
\r
};
\r
\r
// 3. GPU予約 -> GPU
\r