OSDN Git Service

Version 0.6.5
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 30 Jul 2013 12:08:27 +0000 (21:08 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 30 Jul 2013 12:08:27 +0000 (21:08 +0900)
18 files changed:
0.6.x/js/JU/00_XUI_Type.js [new file with mode: 0644]
0.6.x/js/JU/01_XUI_Option.js [new file with mode: 0644]
0.6.x/js/JU/02_XUI_Dirty.js [new file with mode: 0644]
0.6.x/js/JU/03_XUI_Attr.js [new file with mode: 0644]
0.6.x/js/JU/04_XUI_AttrNo.js [new file with mode: 0644]
0.6.x/js/JU/AbstractDisplayContainer.js
0.6.x/js/JU/AbstractDisplayNode.js
0.6.x/js/JU/DisplayNodeStyle.js
0.6.x/js/JU/LayoutManagerBase.js
0.6.x/js/JU/PageRoot.js
0.6.x/js/JU/Text.js
0.6.x/js/core/02_XType.js
0.6.x/js/core/03_XCancel.js [deleted file]
0.6.x/js/core/04_XCallback.js
0.6.x/js/core/06_XTimer.js
0.6.x/js/core/07_XEventDispatcher.js
0.6.x/js/core/13_XViewEvent.js [deleted file]
0.6.x/js/core/14_XView.js

diff --git a/0.6.x/js/JU/00_XUI_Type.js b/0.6.x/js/JU/00_XUI_Type.js
new file mode 100644 (file)
index 0000000..55c502f
--- /dev/null
@@ -0,0 +1,20 @@
+X.Css = {};\r
+\r
+X.Css.Type = {\r
+       LENGTH            :  1,\r
+       PERCENT           :  2,\r
+       COLOR             :  4,\r
+       U_DECIMAL         :  8,\r
+       NUMERICAL         : 16,\r
+       BOOLEAN           : 32,\r
+       QUARTET           : 64,\r
+       URL               : 128,\r
+       FONT_NAME         : 256,\r
+       LIST              : 512,\r
+       AUTO              : 1024,\r
+       COMBI             : 2048\r
+};\r
+\r
+var AUTO      = Number.POSITIVE_INFINITY;\r
+var FULL      = X.Css; // something unigue value;\r
+var FLOOR     = Math.floor;\r
diff --git a/0.6.x/js/JU/01_XUI_Option.js b/0.6.x/js/JU/01_XUI_Option.js
new file mode 100644 (file)
index 0000000..a4b5888
--- /dev/null
@@ -0,0 +1,10 @@
+X.Css.Option = {\r
+       BORDER_STYLE      : 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset'.split(','),\r
+       POSITION_X        : 'left,center,right'.split(','),\r
+       POSITION_Y        : 'top,center,bottom'.split(','),\r
+       ALIGN             : 'left,center,right,justify'.split(','),\r
+       TEXT_DECORATION   : 'none,underline,overline,line-through,blink'.split(','),\r
+       TEXT_TRANSFORM    : 'none,capitalize,lowercase,uppercase'.split(','),\r
+       WIDTH_HEIGHT      : [ 'auto' ],\r
+       BOX_SIZING        : 'content-box,padding-box,border-box'.split(',') // ,margin-box\r
+};
\ No newline at end of file
diff --git a/0.6.x/js/JU/02_XUI_Dirty.js b/0.6.x/js/JU/02_XUI_Dirty.js
new file mode 100644 (file)
index 0000000..0b9dc19
--- /dev/null
@@ -0,0 +1,7 @@
+X.Css.Dirty = {\r
+       CLEAN             : 0,\r
+       PAINT             : 1, // 再描画のみ必要\r
+       REFLOW            : 2, // レイアウト(ボックスサイズ)の再計算が必要\r
+       FONT              : 3, // フォントサイズが変更された\r
+       CONTENT_UPDATE    : 4 // コンテンツが変更された\r
+};
\ No newline at end of file
diff --git a/0.6.x/js/JU/03_XUI_Attr.js b/0.6.x/js/JU/03_XUI_Attr.js
new file mode 100644 (file)
index 0000000..2b60b11
--- /dev/null
@@ -0,0 +1,54 @@
+X.Css.Attr = {\r
+       borderWidth       : [ X.Css.Dirty.REFLOW,  0, X.Css.Type.QUARTET | X.Css.Type.LENGTH  ], // em [ top, right, bottom, left ]\r
+       borderColor       : [ X.Css.Dirty.PAINT,   4, X.Css.Type.QUARTET | X.Css.Type.COLOR   ], // color [ top, right, bottom, left ]\r
+       borderStyle       : [ X.Css.Dirty.PAINT,   8, X.Css.Type.QUARTET | X.Css.Type.LIST, X.Css.Option.BORDER_STYLE ], // string [ top, right, bottom, left ]\r
+       cornerRadius      : [ X.Css.Dirty.PAINT,  12, X.Css.Type.QUARTET | X.Css.Type.LENGTH | X.Css.Type.PERCENT ], // em, px [ top, right, bottom, left ]\r
+       bgColor           : [ X.Css.Dirty.PAINT,  16, X.Css.Type.COLOR     ], // color\r
+       bgAlpha           : [ X.Css.Dirty.PAINT,  17, X.Css.Type.U_DECIMAL ], // 0 - 1\r
+       bgImgUrl          : [ X.Css.Dirty.PAINT,  18, X.Css.Type.URL       ], // url\r
+       bgImgRepeatX      : [ X.Css.Dirty.PAINT,  19, X.Css.Type.BOOLEAN   ], // true / false\r
+       bgImgRepeatY      : [ X.Css.Dirty.PAINT,  20, X.Css.Type.BOOLEAN   ], // true / false\r
+       bgImgPositionX    : [ X.Css.Dirty.PAINT,  21, X.Css.Type.LENGTH | X.Css.Type.PERCENT | X.Css.Type.LIST, X.Css.Option.POSITION_X ], // em %, px, string\r
+       bgImgPositionY    : [ X.Css.Dirty.PAINT,  22, X.Css.Type.LENGTH | X.Css.Type.PERCENT | X.Css.Type.LIST, X.Css.Option.POSITION_Y ], // em %, px, string\r
+       shadowColor       : [ X.Css.Dirty.PAINT,  23, X.Css.Type.COLOR     ], // color\r
+       shadowAlpha       : [ X.Css.Dirty.PAINT,  24, X.Css.Type.U_DECIMAL ], // 0 - 1\r
+       shadowOffsetX     : [ X.Css.Dirty.PAINT,  25, X.Css.Type.LENGTH    ], // em\r
+       shadowOffsetY     : [ X.Css.Dirty.PAINT,  26, X.Css.Type.LENGTH    ], // em\r
+       shadowBlur        : [ X.Css.Dirty.PAINT,  27, X.Css.Type.LENGTH    ], // em\r
+       shadowSpread      : [ X.Css.Dirty.PAINT,  28, X.Css.Type.LENGTH    ], // em\r
+       shadowInset       : [ X.Css.Dirty.PAINT,  29, X.Css.Type.BOOLEAN   ], // true / false\r
+       \r
+       color             : [ X.Css.Dirty.PAINT,  30, X.Css.Type.COLOR     ], // color\r
+       fontFamily        : [ X.Css.Dirty.FONT,   31, X.Css.Type.FONT_NAME ], // string\r
+       fontSize          : [ X.Css.Dirty.FONT,   32, X.Css.Type.LENGTH | X.Css.Type.PERCENT ], // em, %\r
+       bold              : [ X.Css.Dirty.FONT,   33, X.Css.Type.BOOLEAN   ], // true / false\r
+       italic            : [ X.Css.Dirty.FONT,   34, X.Css.Type.BOOLEAN   ], // true / false\r
+       lineHeight        : [ X.Css.Dirty.FONT,   35, X.Css.Type.LENGTH | X.Css.Type.PERCENT | X.Css.Type.NUMERICAL ], // em, %, \r
+       letterSpacing     : [ X.Css.Dirty.FONT,   36, X.Css.Type.LENGTH    ], // em\r
+       wordSpacing       : [ X.Css.Dirty.FONT,   37, X.Css.Type.LENGTH    ],\r
+       align             : [ X.Css.Dirty.FONT,   38, X.Css.Type.LIST, X.Css.Type.ALIGN           ],\r
+       decoration        : [ X.Css.Dirty.PAINT,  39, X.Css.Type.LIST, X.Css.Type.TEXT_DECORATION ],\r
+       transform         : [ X.Css.Dirty.FONT,   40, X.Css.Type.LIST, X.Css.Type.TEXT_TRANSFORM  ],\r
+       textShadowColor   : [ X.Css.Dirty.PAINT,  41, X.Css.Type.COLOR     ],\r
+       textShadowOffsetX : [ X.Css.Dirty.PAINT,  42, X.Css.Type.LENGTH    ],\r
+       textShadowOffsetY : [ X.Css.Dirty.PAINT,  43, X.Css.Type.LENGTH    ],\r
+       shadowBlur        : [ X.Css.Dirty.PAINT,  44, X.Css.Type.LENGTH    ],\r
+       \r
+       width             : [ X.Css.Dirty.REFLOW, 45, X.Css.Type.LENGTH | X.Css.Type.PERCENT, X.Css.Option.WIDTH_HEIGHT ],\r
+       minWidth          : [ X.Css.Dirty.REFLOW, 46, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       maxWidth          : [ X.Css.Dirty.REFLOW, 47, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       height            : [ X.Css.Dirty.REFLOW, 48, X.Css.Type.LENGTH | X.Css.Type.PERCENT, X.Css.Option.WIDTH_HEIGHT ],\r
+       minHeight         : [ X.Css.Dirty.REFLOW, 49, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       maxHeight         : [ X.Css.Dirty.REFLOW, 50, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       padding           : [ X.Css.Dirty.REFLOW, 51, X.Css.Type.QUARTET | X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       margin            : [ X.Css.Dirty.REFLOW, 55, X.Css.Type.QUARTET | X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       sizing            : [ X.Css.Dirty.REFLOW, 59, X.Css.Type.LIST, X.Css.Option.BOX_SIZING ],\r
+       pageBox           : [ X.Css.Dirty.REFLOW, 60, X.Css.Type.BOOLEAN ], // true / false\r
+       left              : [ X.Css.Dirty.REFLOW, 61, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       top               : [ X.Css.Dirty.REFLOW, 62, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       bottom            : [ X.Css.Dirty.REFLOW, 63, X.Css.Type.LENGTH | X.Css.Type.PERCENT ],\r
+       right             : [ X.Css.Dirty.REFLOW, 64, X.Css.Type.LENGTH | X.Css.Type.PERCENT ]\r
+};\r
+\r
+X.Css.Attr.x = X.Css.Attr.left;\r
+X.Css.Attr.y = X.Css.Attr.top;
\ No newline at end of file
diff --git a/0.6.x/js/JU/04_XUI_AttrNo.js b/0.6.x/js/JU/04_XUI_AttrNo.js
new file mode 100644 (file)
index 0000000..1872ffa
--- /dev/null
@@ -0,0 +1,12 @@
+X.Css.AttrNo = ( function(){\r
+       var ret = {},\r
+               obj = X.Css.Attr,\r
+               max = 0,\r
+               p, no;\r
+       for( p in obj ){\r
+               ret[ p ] = no = obj[ p ][ 1 ];\r
+               if( max < no ) max = no;\r
+       };\r
+       ret.max = max;\r
+       return ret;\r
+})();\r
index 770885d..08bd76c 100644 (file)
@@ -53,7 +53,7 @@ var _AbstractDisplayContainer = _AbstractDisplayNode.inherits(
                        this.styleData.initialize();\r
                        \r
                        this.phase = 1;\r
-                       this.User.dispatch( { type : X.ViewEvent.INIT } );\r
+                       this.User.dispatch( { type : X.View.Event.INIT } );\r
                },\r
                \r
                addToParent : function( parentElement ){\r
@@ -67,7 +67,7 @@ var _AbstractDisplayContainer = _AbstractDisplayNode.inherits(
                        };\r
                        \r
                        this.phase = 2;\r
-                       this.User.dispatch( { type : X.ViewEvent.ADDED } );\r
+                       this.User.dispatch( { type : X.View.Event.ADDED } );\r
                },\r
                \r
        /* Rellay */\r
@@ -80,7 +80,7 @@ var _AbstractDisplayContainer = _AbstractDisplayNode.inherits(
                        this.styleData.afterAddition();\r
                        \r
                        this.phase = 3;\r
-                       this.User.dispatch( { type : X.ViewEvent.CREATION_COMPLETE } );\r
+                       this.User.dispatch( { type : X.View.Event.CREATION_COMPLETE } );\r
                },\r
                \r
                calculate : function( x, y, w, h ){\r
index 554299e..79566e5 100644 (file)
@@ -48,6 +48,28 @@ var _AbstractDisplayNode = X.Class.create(
                dragdrop       : false,\r
                tooltip        : null,\r
                \r
+               _content          : null,\r
+               updateContent     : false,\r
+               \r
+               elmWrap           : null,\r
+               elmExtend         : null,\r
+               textNode          : null,\r
+               boxWidth          : 0,\r
+               boxHeight         : 0,\r
+               contentL          : 0,\r
+               contentT          : 0,\r
+               contentR          : 0,\r
+               contentB          : 0,\r
+               boxSizingOffsetLR : 0,\r
+               boxSizingOffsetTB : 0,          \r
+               contentWidth      : 0,\r
+               minContentWidth   : 0,\r
+               maxContentWidth   : AUTO,\r
+               lastContentWidth  : -1,\r
+               contentHeight     : 0,\r
+               minContentHeight  : 0,\r
+               maxContentHeight  : AUTO,\r
+               \r
                // :hover, :focus, :disabled\r
                \r
                initialize : function( root, rootData, parent, parentData, parentElement ){\r
@@ -61,14 +83,14 @@ var _AbstractDisplayNode = X.Class.create(
                        this.styleData.initialize();\r
                        \r
                        this.phase = 1;\r
-                       this.User.dispatch( { type : X.ViewEvent.INIT } );\r
+                       this.User.dispatch( { type : X.View.Event.INIT } );\r
                },\r
                \r
                addToParent : function( parentElement ){\r
                        parentElement && parentElement.appendChild( this.rawElement );\r
                        \r
                        this.phase = 2;\r
-                       this.User.dispatch( { type : X.ViewEvent.ADDED } );\r
+                       this.User.dispatch( { type : X.View.Event.ADDED } );\r
                },\r
 \r
        /* Rellay\r
@@ -76,7 +98,7 @@ var _AbstractDisplayNode = X.Class.create(
                        this.styleData.afterAddition();\r
                        \r
                        this.phase = 3;\r
-                       this.User.dispatch( { type : X.ViewEvent.CREATION_COMPLETE } );\r
+                       this.User.dispatch( { type : X.View.Event.CREATION_COMPLETE } );\r
                }, */\r
                \r
                creationComplete : function(){\r
@@ -184,15 +206,15 @@ var _AbstractDisplayNode = X.Class.create(
                },\r
                \r
                dispatch : function( e ){\r
-                       var xve  = X.ViewEvent,\r
+                       var xve  = X.View.Event,\r
                                ret  = X.EventDispatcher.prototype.dispatch.call( this.User, e ),\r
                                type = e.type;\r
-                       if( ret & X.Cancel.MONOPOLY && !this.hitChildData && ( xve.POINTER_MOVE === type || type === xve.FILE_DRAG ) ){\r
+                       if( ret & X.Callback.MONOPOLY && !this.hitChildData && ( xve.POINTER_MOVE === type || type === xve.FILE_DRAG ) ){\r
                                this.rootData.monopolyNodeData = this;\r
                                return ret;\r
                        };\r
                        this.rootData.monopolyNodeData = null;\r
-                       if( xve._NO_BUBLEUP < type && this.parentData && ret & X.Cancel.STOP_PROPAGATION === 0 && ret & X.Cancel.STOP_NOW === 0 ) return this.parentData.dispatch( e );\r
+                       if( xve._NO_BUBLEUP < type && this.parentData && ret & X.Callback.STOP_PROPAGATION === 0 && ret & X.Callback.STOP_NOW === 0 ) return this.parentData.dispatch( e );\r
                        return ret;\r
                },\r
                \r
@@ -213,11 +235,419 @@ var _AbstractDisplayNode = X.Class.create(
                                        delete this.rawStyle;\r
                        };\r
                        delete this.phase;\r
-               }\r
+               },\r
                //killed\r
+               \r
+               \r
+               content : function( v ){\r
+                       if( Type.isString( v ) === true ){\r
+                               if( !this.textNode || this.textNode.data !== v ){\r
+                                       this._content = v;\r
+                                       this.updateContent = true;\r
+                               };\r
+                               return this.User;\r
+                       } else\r
+                       if( v === null ){\r
+                               if( this._content !== v && this.textNode ){\r
+                                       this.updateContent = true;\r
+                               };\r
+                               delete this._content;\r
+                               return this.User;\r
+                       };\r
+                       if( this._content || this._content === null ) return this._content;\r
+                       if( this.textNode ) return this.textNode.data;\r
+                       return null;\r
+               },\r
+               paint : function( dirty ){\r
+                       var content = this._content,\r
+                               style   = this.styleData;                               \r
+                       if( this.updateContent === true || ( style && style.hasPaint === true ) ){\r
+                               if( !this.elmWrap ){\r
+                                       this.elmWrap = DOM.createDiv();\r
+                                       this.__parent.addDisplayElement( this );\r
+                               };\r
+                               dirty !== 0 && this.commitStyle();                      \r
+                               if( this.updateContent === true ){\r
+                                       if( content !== null ){\r
+                                               if( !this.textNode ){\r
+                                                       this.textNode = DOM.cerateText();\r
+                                                       this.elmWrap.appendChild( this.textNode );\r
+                                               };\r
+                                               this.textNode.data = content;                                                   \r
+                                       } else\r
+                                       if( this.textNode ){\r
+                                               DOM.correct( this.textNode );\r
+                                               delete this.textNode;\r
+                                               delete this.contentWidth;\r
+                                               delete this.conetntHeight;\r
+                                               delete this.scrollWidth;                                                        \r
+                                               delete this.scrollHeight;\r
+                                       };                                      \r
+                               };\r
+                       } else\r
+                       if( this.elmWrap && content === null && ( !style || style.hasPaint === false ) ){\r
+                               this.__parent.removeDisplayElement( this );\r
+                               DOM.correct( this.elmWrap );\r
+                               delete this.contentWidth;\r
+                               delete this.conetntHeight;\r
+                       };\r
+               },\r
+               commitStyle : function(){\r
+                       var css;\r
+                       if( this.elmWrap ){\r
+                               css = this.styleData ? this.styleData.cssText( this ) : '';\r
+                               if( this.contentWidth  !== AUTO ) css += 'width:'  + this.contentWidth  + 'px';\r
+                               if( this.contentHeight !== AUTO ) css += 'height:' + this.contentHeight + 'px';\r
+                               this.elmWrap.style.cssText = css;\r
+                       };\r
+               },\r
+               /*\r
+                * 親の サイズを元に自身のサイズを計算していく\r
+                */\r
+               preMesure : function( allowW, allowH ){\r
+                       var style    = this.styleData,\r
+                               styles, calc, box, min, max,\r
+                               contentW, contentH, allowSize, boxMinus,\r
+                               paddingT, paddingR, paddingB, paddingL,\r
+                               borderT, borderR, borderB, borderL;//,\r
+                               //marginT, marginR, marginB, marginL;\r
+\r
+                       if( style ){\r
+                               styles   = style.data;\r
+                               calc     = _AbstractDisplayNode.calcValue;\r
+                               box      = styles[ X.Css.AttrNo.sizing ];\r
+                               \r
+                               // Width が確定するパターン\r
+                               // 自身が constraintW の場合 親が AUTO ではない\r
+                               // 自身が constraintW でない場合自身が  AUTO はなくかつ親 が AUTO の場合 or 自身は % でない\r
+                               if( style.constraintW ? allowW !== AUTO : !style.autoWidth && ( allowW !== AUTO || !style.percentWidth ) ){\r
+                                       if( style.constraintW ){ // 制約レイアウト\r
+                                               contentW = allowW - calc( styles[ X.Css.AttrNo.left ], allowW ) - calc( styles[ X.Css.AttrNo.right ], allowW );\r
+                                       } else {\r
+                                               contentW = _AbstractDisplayNode.finalValue( styles[ X.Css.AttrNo.width ], styles[ X.Css.AttrNo.minWidth ], styles[ X.Css.AttrNo.maxWidth ], allowW );                                   \r
+                                       };\r
+                                       paddingR = calc( styles[ X.Css.AttrNo.padding + 1 ], allowW );\r
+                                       paddingL = calc( styles[ X.Css.AttrNo.padding + 3 ], allowW );\r
+                                       borderR  = styles[ X.Css.AttrNo.border + 1 ];\r
+                                       borderL  = styles[ X.Css.AttrNo.margin + 3 ];\r
+                                       // marginR  = calc( styles[ X.Css.AttrNo.margin + 1 ], allowW );\r
+                                       // marginL  = calc( styles[ X.Css.AttrNo.margin + 3 ], allowW );\r
+                                       boxMinus = 0;\r
+                                       switch( box ){\r
+                                               //case 3 : // margin-box\r
+                                               //       boxMinus = - marginR - marginL;\r
+                                               case 2 : // border-box\r
+                                                        boxMinus -= borderR + borderL;\r
+                                               case 1 : // padding-box\r
+                                                        boxMinus -= paddingR + paddingL;\r
+                                               // case 0 : // content-box\r
+                                       };\r
+                                       this.contentL     = /* marginL + */ borderL + paddingL;\r
+                                       this.contentR     = /* marginR + */ borderR + paddingR;         \r
+                                       this.contentWidth = contentW + boxMinus;\r
+                                       this.boxWidth     = contentW - boxMinus + this.contentL + this.contentR;\r
+                                       this.boxSizingOffsetLR = boxMinus;\r
+                               } else {\r
+                                       this.boxWidth = this.contentWidth = AUTO;\r
+                                       min = styles[ X.Css.AttrNo.minWidth ];\r
+                                       max = styles[ X.Css.AttrNo.maxWidth ];\r
+                                       this.minContentWidth = 1 <= min ? min : 0;\r
+                                       this.maxContentWidth = 1 <= max ? max : AUTO;\r
+                                       delete this.boxSizingOffsetLR;\r
+                               };\r
+                               \r
+                               // Height\r
+                               if( style.constraintH ? allowH !== AUTO : !style.autoHeight && ( allowH !== AUTO || !style.percentHeight ) ){\r
+                                       if( style.constraintH ){ // 制約レイアウト\r
+                                               contentH = allowH - calc( styles[ X.Css.AttrNo.top ], allowH ) - calc( styles[ X.Css.AttrNo.bottom ], allowH );\r
+                                       } else {\r
+                                               contentH = _AbstractDisplayNode.finalValue( styles[ X.Css.AttrNo.height ], styles[ X.Css.AttrNo.minHeight ], styles[ X.Css.AttrNo.maxHeight ], allowH );\r
+                                       };\r
+                                       allowSize = styles[ X.Css.AttrNo.pageBox ] === true ? allowH : allowW;\r
+                                       paddingT  = calc( styles[ X.Css.AttrNo.padding + 0 ], allowSize );// paddingTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
+                                       paddingB  = calc( styles[ X.Css.AttrNo.padding + 2 ], allowSize );\r
+                                       borderT   = styles[ X.Css.AttrNo.border + 0 ];\r
+                                       borderB   = styles[ X.Css.AttrNo.border + 2 ];\r
+                                       // marginT   = calc( styles[ X.Css.AttrNo.margin + 0 ], allowSize );// marginTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
+                                       // marginB   = calc( styles[ X.Css.AttrNo.margin + 2 ], allowSize );\r
+                                       this.boxHeight = contentH;\r
+                                       boxMinus = 0;\r
+                                       switch( box ){\r
+                                               // case 3 : // margin-box\r
+                                                        // boxMinus = - marginT - marginR;\r
+                                               case 2 : // border-box\r
+                                                        boxMinus  = borderT + borderB;\r
+                                               case 1 : // padding-box\r
+                                                        boxMinus -= paddingT + paddingB;\r
+                                               // case 0 : // content-box\r
+                                       };                      \r
+                                       this.contentT      = /* marginT + */ borderT + paddingT;\r
+                                       this.conetntB      = /* marginB + */ borderB + paddingB;                        \r
+                                       this.contentHeight = contentH + boxMinus;\r
+                                       this.boxHeight     = contentH - boxMinus + this.contentT + this.conetntB;\r
+                                       this.boxSizingOffsetTB = boxMinus;\r
+                               } else {\r
+                                       this.boxHeight = this.contentHeight = AUTO;\r
+                                       min = styles[ X.Css.AttrNo.minHeight ];\r
+                                       max = styles[ X.Css.AttrNo.maxHeight ];\r
+                                       this.minContentHeight = 1 <= min ? min : 0;\r
+                                       this.maxContentHeight = 1 <= max ? max : AUTO;\r
+                                       delete this.boxSizingOffsetTB;\r
+                               };\r
+                       } else {\r
+                               this.boxWidth  = this.contentWidth  = allowW;\r
+                               this.boxHeight = this.contentHeight = allowH;\r
+                               delete this.minContentHeight;\r
+                               delete this.maxContentHeight;\r
+                               delete this.contentL;\r
+                               delete this.contentT;\r
+                               delete this.contentR;\r
+                               delete this.contentB;\r
+                       };\r
+               },\r
+               \r
+               /**\r
+                * 要素の追加・削除\r
+                * 1. ペイントがある // 予約のみ\r
+                * 2. コンテンツがある // 予約のみ *\r
+                * 3. コンテンツを削除 // 予約のみ\r
+                * 4. 要素を削除 // 予約のみ\r
+                * \r
+                * コンテンツの再計算\r
+                * 0. 要素追加して css セット\r
+                * 1. コンテンツの変更\r
+                * 2. font 指定の変更\r
+                * 3. contentWidth の変更 (コンテンツの高さの再計算) 前回の contentWidth の保持\r
+                * \r
+                * contentSize, scrollSize の決定\r
+                */\r
+               _mesure : function( dirty ){\r
+                       var content = this._content,\r
+                               root    = this.rootData,\r
+                               style   = this.styleData,\r
+                               w       = this.contentWidth,\r
+                               h       = this.contentHeight;\r
+                       switch( this.updateContent === true ? X.Css.Dirty.CONTENT : dirty ){\r
+                               case X.Css.Dirty.CONTENT : // コンテンツが変更された\r
+                                       this.paint( 0 );\r
+                                       this.lastContentWidth = -1;\r
+                               case X.Css.Dirty.FONT   : // フォントサイズが変更された\r
+                                       this.commitStyle();\r
+                               case X.Css.Dirty.REFLOW : // レイアウトの再計算が必要\r
+                                       /* http://web-designs.seesaa.net/article/188400668.html\r
+                                        * min-width の値が max-width の値より大きい場合は、max-width の値は min-width の値に設定される。\r
+                                        * \r
+                                        * テキストノードがあり\r
+                                        * 1. contentWidth === AUTO\r
+                                        *     style を更新して contentWidth の決定\r
+                                        *     min or max に引っかかったら style 更新\r
+                                        *     contentHeight === AUTO の場合\r
+                                        *     textHeight の決定\r
+                                        *     contentHeight !== AUTO の場合 scrollHeight のみ更新\r
+                                        * 2. contentHeight === AUTO かつ \r
+                                        *     コンテンツの高さの再取得が必要( contentWidth が最終計測時の contentWidth と一致 かつ フォント・コンテンツに変更無し の場合再取得不要)\r
+                                        *      style を更新して contentHeight の決定\r
+                                        *     必要でない\r
+                                        * 3. content のサイズがすでに決定している\r
+                                        *     コンテンツの高さの再取得が必要\r
+                                        *     必要でない\r
+                                        */   \r
+                                       if( this.textNode ){\r
+                                               if( w === AUTO ){\r
+                                                       w = this.contentWidth = this.elm.offsetWidth;\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 && this.commitStyle();\r
+                                                       \r
+                                                       if( h === AUTO ){\r
+                                                               h = this.conetntHeight = this.elm.offsetHeight;\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.scrollHeight = this.elm.offsetHeight + this.contentT + this.contentB;\r
+                                                       };\r
+                                               } else\r
+                                               if( h === AUTO ){\r
+                                                       if( w !== this.lastContentWidth || dirty !== X.Css.Dirty.REFLOW ){\r
+                                                               this.commitStyle();\r
+                                                               this.lastContentWidth  = w;\r
+                                                               h = this.conetntHeight = this.elm.offsetHeight;\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.scrollWidth  = w + this.contentL + this.contentR;\r
+                                                               this.scrollHeight = h + this.contentT + this.contentB;\r
+                                                               root.paintReserve( this );\r
+                                                       };\r
+                                               } else {\r
+                                                       if( dirty !== X.Css.Dirty.REFLOW ){\r
+                                                               this.commitStyle();\r
+                                                               this.scrollWidth  = this.elm.offsetWidth  + this.contentL + this.contentR;\r
+                                                               this.scrollHeight = this.elm.offsetHeight + this.contentT + this.contentB;\r
+                                                       } else {\r
+                                                               root.paintReserve( this );\r
+                                                               this.scrollWidth  = w + this.contentL + this.contentR;\r
+                                                               this.scrollHeight = h + this.contentT + this.contentB;\r
+                                                       };\r
+                                               };                                      \r
+                                       } else {\r
+                                               if( w === AUTO ) this.contentWidth  = w = 0 < this.minContentWidth  ? this.minContentWidth  : 0;\r
+                                               if( h === AUTO ) this.contentHeight = h = 0 < this.minContentHeight ? this.minContentHeight : 0;\r
+                                               this.scrollWidth  = w + this.contentL + this.contentR;\r
+                                               this.scrollHeight = h + this.contentT + this.contentB;\r
+                                               root.paintReserve( this );                              \r
+                                       };\r
+                                       break;                  \r
+                               case X.Css.Dirty.PAINT : // 再描画のみ必要\r
+                                       root.paintReserve( this );\r
+                                       break;                                          \r
+                       };\r
+               },\r
+               /**\r
+                * 自身のコンテンツサイズを元に AUTO な width, height を確定していく\r
+                */\r
+               postMesure : function(){\r
+                       var style = this.styleData,\r
+                               styles, calc, box,\r
+                               contentW, contentH,\r
+                               contentSize, contentPlus,\r
+                               paddingT, paddingR, paddingB, paddingL,\r
+                               borderT, borderR, borderB, borderL,\r
+                               min, max;\r
+                       if( style ){\r
+                               styles   = style.data;\r
+                               calc     = _AbstractDisplayNode.advancedCalcValue;\r
+                               contentW = this.contentWidth;\r
+                               box      = styles[ X.Css.AttrNo.sizing ];\r
+                               \r
+                               // Width\r
+                               if( this.boxWidth === AUTO ){\r
+                                       paddingR = calc( styles[ X.Css.AttrNo.padding + 1 ], contentW );                                        \r
+                                       paddingL = calc( styles[ X.Css.AttrNo.padding + 3 ], contentW );                                        \r
+                                       borderR  = styles[ X.Css.AttrNo.border + 1 ];                                   \r
+                                       borderL  = styles[ X.Css.AttrNo.border + 3 ];                                   \r
+                                       //marginR  = calc( styles[ X.Css.AttrNo.margin + 1 ], contentW );\r
+                                       //marginL  = calc( styles[ X.Css.AttrNo.margin + 3 ], contentW );\r
+                                       contentPlus = 0;\r
+                                       switch( box ){\r
+                                               //case 3 : // margin-box\r
+                                               //       contentPlus  = ( marginR + marginL );\r
+                                               case 2 : // border-box\r
+                                                        contentPlus  = borderR + borderL;\r
+                                               case 1 : // padding-box\r
+                                                        contentPlus += paddingR + paddingL;\r
+                                               // case 0 : // content-box\r
+                                       };\r
+                                       contentW += contentPlus;\r
+                                       if( !style.constraintW ){\r
+                                               min = styles[ X.Css.AttrNo.minWidth ];\r
+                                               max = styles[ X.Css.AttrNo.maxWidth ];\r
+                                               if( contentW < min && 1 <= min && contentPlus < min ){\r
+                                                       this.contentWidth = min - contentPlus;\r
+                                               } else\r
+                                               if( max < contentW && 1 <= max && contentPlus < max ){\r
+                                                       this.contentWidth = max - contentPlus;\r
+                                               };\r
+                                       };\r
+                                       this.contentL = /* marginL + */ borderL + paddingL;\r
+                                       this.contentR = /* marginR + */ borderR + paddingR;\r
+                                       this.boxWidth = this.contentWidth + this.contentL + this.contentR;\r
+                               };\r
+                               // Height\r
+                               if( this.boxHeight === AUTO ){\r
+                                       contentH    = this.contentHeight;\r
+                                       contentSize = styles[ X.Css.AttrNo.pageBox ] === true ? contentH : contentW;\r
+                                       paddingT    = calc( styles[ X.Css.AttrNo.padding + 0 ], contentSize );// paddingTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
+                                       paddingB    = calc( styles[ X.Css.AttrNo.padding + 2 ], contentSize );\r
+                                       borderT     = styles[ X.Css.AttrNo.border + 0 ];\r
+                                       borderB     = styles[ X.Css.AttrNo.border + 2 ];\r
+                                       //marginT     = calc( styles[ X.Css.AttrNo.margin + 0 ], contentSize );// marginTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
+                                       //marginB     = calc( styles[ X.Css.AttrNo.margin + 2 ], contentSize );\r
+                                       contentPlus = 0;\r
+                                       switch( box ){\r
+                                               //case 3 : // margin-box\r
+                                                        //contentPlus  = ( marginT + marginB );\r
+                                               case 2 : // border-box\r
+                                                        contentPlus  = borderT + borderB;\r
+                                               case 1 : // padding-box\r
+                                                        contentPlus += paddingT + paddingB;\r
+                                               // case 0 : // content-box\r
+                                       };\r
+                                       contentH += contentPlus;\r
+                                       if( !style.constraintH ){\r
+                                               min = styles[ X.Css.AttrNo.minHeight ];\r
+                                               max = styles[ X.Css.AttrNo.maxHeight ];\r
+                                               if( contentH < min && 1 <= min && contentPlus < min ){\r
+                                                       this.contentHeight = min - contentPlus;\r
+                                               } else\r
+                                               if( max < contentH && 1 <= max && contentPlus < max ){\r
+                                                       this.contentHeight = max - contentPlus;\r
+                                               };\r
+                                       };\r
+                                       this.contentT  = marginT + borderT + paddingT;\r
+                                       this.contentB  = marginB + borderB + paddingB;                                          \r
+                                       this.boxHeight = this.contentHeight + this.contentT + this.contentB;\r
+                               };                              \r
+                       } else {\r
+                               this.boxWidth  = this.contentWidth;\r
+                               this.boxHeight = this.contentHeight;\r
+                               delete this.minContentHeight;\r
+                               delete this.maxContentHeight;\r
+                               delete this.contentL;\r
+                               delete this.contentT;\r
+                               delete this.contentR;\r
+                               delete this.contentB;\r
+                       };\r
+               }\r
        }\r
 );\r
 \r
+_AbstractDisplayNode.finalValue = function( styleValue, styleMin, styleMax, srcValue ){\r
+       var calc = _AbstractDisplayNode.calcValue,\r
+               v    = calc( styleValue, srcValue ),\r
+               min  = calc( styleMin,   srcValue ),\r
+               max  = calc( styleMax,   srcValue );\r
+       if( v < min ) return min;\r
+       if( max < v ) return max;\r
+       return v;\r
+};\r
+_AbstractDisplayNode.calcValue = function( styleValue, srcValue ){\r
+       switch( styleValue ){\r
+               case 0 :\r
+                       return 0;\r
+               case AUTO :\r
+                       return AUTO;\r
+               case FULL :\r
+                       return srcValue; // 100%\r
+               default :\r
+                       if( 1 <= styleValue ) return styleValue; // legth\r
+                       if( -1 < styleValue ) return FLOOR( srcValue * styleValue ); // %\r
+       };\r
+       return styleValue; // - length\r
+};\r
+_AbstractDisplayNode.advancedCalcValue = function( styleValue, srcValue ){\r
+       switch( styleValue ){\r
+               case 0 :\r
+                       return 0;\r
+               case AUTO :\r
+                       return srcValue;\r
+               case FULL :\r
+                       throw new Error( 'advancedCalcValue FULL' ); \r
+                       // return ; // 100%\r
+               default :\r
+                       if( 1 <= styleValue ) return styleValue; \r
+                       if( -1 < styleValue ) return FLOOR( ( srcValue / ( 1 - styleValue ) ) * styleValue ); // %\r
+       };\r
+       return styleValue; // - length\r
+};\r
+\r
+\r
 var AbstractDisplayNode = X.EventDispatcher.inherits(\r
        'AbstractDisplayNode',\r
        X.Class.ABSTRACT | X.Class.SUPER_ACCESS,\r
@@ -231,7 +661,7 @@ var AbstractDisplayNode = X.EventDispatcher.inherits(
                },\r
                listen : function( type, arg1, arg2 ){\r
                        var root, data, events, counter;\r
-                       if( X.ViewEvent._START_POINTER <= type && type <= X.ViewEvent._END_POINTER ){\r
+                       if( X.View.Event._START_POINTER <= type && type <= X.View.Event._END_POINTER ){\r
                                data = X.Class._getPrivate( this );\r
                                if( data.phase < 3 ){\r
                                        if( !( events = data.reserveEvents ) ) data.reserveEvents = events = [];\r
@@ -244,14 +674,14 @@ var AbstractDisplayNode = X.EventDispatcher.inherits(
                                        ++counter[ type ];\r
                                } else {\r
                                        counter[ type ] = 1;\r
-                                       X.DomEvent.add( root.elmMouseCatch, X.ViewEvent.IdToName[ type ], eventRellay );                                        \r
+                                       X.DomEvent.add( root.elmMouseCatch, X.View.Event.IdToName[ type ], eventRellay );                                       \r
                                };\r
                        };\r
                        return X.EventDispatcher.prototype.listen.apply( this, arguments );\r
                },\r
                unlisten : function( type, arg1, arg2 ){\r
                        var root, data, events, i, ev, counter;\r
-                       if( X.ViewEvent._START_POINTER <= type && type <= X.ViewEvent._END_POINTER ){\r
+                       if( X.View.Event._START_POINTER <= type && type <= X.View.Event._END_POINTER ){\r
                                data = X.Class._getPrivate( this );\r
                                if( data.phase < 3 ){\r
                                        if( !( events = data.reserveEvents ) ) return this;\r
@@ -269,7 +699,7 @@ var AbstractDisplayNode = X.EventDispatcher.inherits(
                                if( !counter[ type ] ) return this;\r
                                --counter[ type ];\r
                                if( counter[ type ] === 0 ){\r
-                                       X.DomEvent.remove( root.elmMouseCatch, X.ViewEvent.IdToName[ type ], eventRellay );\r
+                                       X.DomEvent.remove( root.elmMouseCatch, X.View.Event.IdToName[ type ], eventRellay );\r
                                        delete counter[ type ];\r
                                };\r
                        };\r
@@ -303,22 +733,45 @@ var AbstractDisplayNode = X.EventDispatcher.inherits(
                        return this;\r
                },\r
                getX : function(){\r
+                       // dirty の場合、rootData.calculate\r
                        return X.Class._getPrivate( this ).x;\r
                },\r
                getY : function(){\r
+                       // dirty の場合、rootData.calculate\r
                        return X.Class._getPrivate( this ).y;\r
                },\r
                getAbsoluteX : function(){\r
+                       // dirty の場合、rootData.calculate\r
                        return X.Class._getPrivate( this ).absoluteX;\r
                },\r
                getAbsoluteY: function(){\r
+                       // dirty の場合、rootData.calculate\r
                        return X.Class._getPrivate( this ).absoluteY;\r
                },\r
                getWidth : function(){\r
+                       // dirty の場合、rootData.calculate\r
                        return X.Class._getPrivate( this ).w;\r
                },\r
                getHeight : function(){\r
+                       // dirty の場合、rootData.calculate\r
                        return X.Class._getPrivate( this ).h;\r
+               },\r
+               scrollTo : function( x, y ){\r
+                       X.Class._getPrivate( this ).scrollTo( x, y );\r
+               },\r
+               getScrollX : function( v ){\r
+                       // dirty の場合、rootData.calculate\r
+                       return X.Class._getPrivate( this ).scrollX( v );\r
+               },\r
+               getScrollY : function( v ){\r
+                       // dirty の場合、rootData.calculate\r
+                       return X.Class._getPrivate( this ).scrollY( v );\r
+               },\r
+               disabled : function( v ){\r
+                       return X.Class._getPrivate( this ).disabled( v );\r
+               },\r
+               cursor : function( v ){\r
+                       return X.Class._getPrivate( this ).cursor( v );\r
                }\r
        }\r
 );
\ No newline at end of file
index b01db88..85e6dc3 100644 (file)
@@ -53,13 +53,23 @@ var _DisplayNodeStyle = X.Class.create(
                },
                
                name : function( v ){
-                       var elm;
+                       var sp = ' ', sp2 = '  ', elm;
                        if( this._name !== v ){
-                               if( !v || !v.length ){
+                               if( !v ){
                                        delete this._name;
                                        v = '';
                                } else {
-                                       this._name = v;
+                                       // cleanup
+                                       while( v.indexOf( sp2 ) !== -1 ){ v = v.split( sp2 ).join( sp ); };
+                                       while( 0 < v.length && v.charAt( 0 ) === sp ){ v = v.substr( 1 ); };
+                                       while( 0 < v.length && v.lastIndexOf( sp ) === 0 ){ --v.length; };
+                                                                       
+                                       if( !v.length ){
+                                               delete this._name;
+                                               v = '';
+                                       } else {
+                                               this._name = v;
+                                       };
                                };
                                if( elm = this.nodeData.rawElement ){
                                        elm.className = v;
@@ -69,40 +79,36 @@ var _DisplayNodeStyle = X.Class.create(
                },
                addName : function( _names ){
                        var sp = ' ',
-                               names;
-                       if( this.hasName( _names ) === false ){
-                               names = this._name;
-                               if( !names.length ){
-                                       return this.name( _names );
-                               };
-                               names = names.split( sp );
-                               names[ names.length ] = _names;
-                               return this.name( names.join( sp ) );
+                               names, _name, i;
+                       if( !this._name || !this._name.length ) return this.name( _names );
+                       _names = _names.split( sp );
+                       for( i = _names.length; i; ){
+                               if( ( _name = _names[ --i ] ) !== '' && this.hasName( _name ) === false ){
+                                       if( !names ) names = this._name.split( sp );
+                                       names[ names.length ] = _name;
+                               };                              
                        };
-                       return this.User;
+                       return this.name( names.join( sp ) );
                },
                removeName : function( _names ){
                        var sp    = ' ',
                                names = this._name,
-                               name, i, index;
-                       if( !names.length ) return this.User;
+                               i, index;
+                       if( !names || !names.length ) return this.User;
                        names  = names.split( sp );
                        _names = _names.split( sp );
                        for( i = _names.length; i; ){
-                               name = _names[ --i ];
-                               name !== '' && ( index = names.indexOf( name ) ) !== -1 && names.splice( index, 1 );
+                               ( index = names.indexOf( _names[ --i ] ) ) !== -1 && names.splice( index, 1 );
                        };
                        return this.name( names.join( sp ) );
                },
                hasName : function( _names ){
-                       var names = this._name,
-                               name, i;
-                       if( !names ) return false;
+                       var names = this._name, i;
+                       if( !names || !names.length ) return false;
                        names  = names.split( ' ' );
                        _names = _names.split( ' ' );
                        for( i = _names.length; i; ){
-                               name = _names[ --i ];
-                               if( name !== '' && names.indexOf( name ) === -1 ) return false;
+                               if( names.indexOf( _names[ --i ] ) === -1 ) return false;
                        };
                        return true;
                },
@@ -124,8 +130,7 @@ var _DisplayNodeStyle = X.Class.create(
                                },
                                REMOVE = {
                                        role : 0
-                               },
-                               p;
+                               }, p;
                        for( p in v ){
                                if( REMOVE[ p ] === 0 ) continue;
 
@@ -234,6 +239,223 @@ var _DisplayNodeStyle = X.Class.create(
                        };
                        
                        // ScrollBarManager.update( this );
+               },
+               
+               /*
+                * opt_unit は getter のみ
+                */
+               attr : function( prop, v, opt_unit ){
+                       var update    = prop[ 0 ],
+                               propID    = prop[ 1 ],
+                               type      = prop[ 2 ],
+                               list      = prop[ 3 ],
+                               length    = !!( type & X.Css.Type.LENGTH    ),
+                               percent   = !!( type & X.Css.Type.PERCENT   ),
+                               color     = !!( type & X.Css.Type.COLOR     ),
+                               uDecimal  = !!( type & X.Css.Type.U_DECIMAL ),
+                               numerical = !!( type & X.Css.Type.NUMERICAL ),
+                               flag      = !!( type & X.Css.Type.BOOLEAN   ),
+                               quartet   = !!( type & X.Css.Type.QUARTET   ),
+                               url       = !!( type & X.Css.Type.URL       ),
+                               fontName  = !!( type & X.Css.Type.FONT_NAME ),
+                               //list      = !!( type & X.Css.Type.LIST      ),
+                               combi     = !!( type & X.Css.Type.COMBI     ),
+                               data      = this.data,
+                               _v        = -1,
+                               i, l, nodes, root;
+               /*
+                * Setter
+                */
+                       if( v !== undefined ){
+                               if( Type.isNumber( v ) === true ){
+                                       if( numerical === false ){
+                                               if( uDecimal === false || v < 0 || 1 < v ) throw new Error( '' );
+                                       };
+                               } else
+                               if( Type.isBoolean( v ) === true ){
+                                       if( flag === false ) throw new Error( '' );
+                               } else
+                               if( Type.isString( v ) === true ){
+                                       if( url === false && fontName === false ){
+                                               if( v.indexOf( ' ' ) !== -1 ){
+                                                       v = v.split( ' ' );
+                                               } else {
+                                                       if( length === false && percent === false && color === false ) throw new Error( '' );
+                                               };
+                                       };
+                               };                                      
+                               if( Type.isArray( v ) === true ){
+                                       if( v.length <= 4 && quartet === true ){
+                                               type ^= X.Css.Type.QUARTET;
+                                       } else
+                                       if( v.length === 2 && combi === true ){
+                                               type ^= X.Css.Type.COMBI;
+                                       } else {
+                                               throw new Error( '' );
+                                       };
+                                       switch( v.length ){
+                                               case 1 :
+                                                       this.attr( [ propID  , type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 0 ] );
+                                                       break;
+                                               case 2 :
+                                                       this.attr( [ propID  , type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 1 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 1 ] );
+                                                       break;
+                                               case 3 :
+                                                       this.attr( [ propID  , type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 1 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 2 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 1 ] );
+                                                       break;
+                                               case 4 :
+                                                       this.attr( [ propID  , type, list ], v[ 0 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 1 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 2 ] );
+                                                       this.attr( [ ++propID, type, list ], v[ 3 ] );
+                                                       break;
+                                               default :
+                                       };
+                                       return this.User;
+                               };
+                               switch( update ){
+                                       case X.Css.Dirty.REFLOW :
+                                               delete this.layoutCssText;
+                                               break;
+                                       case X.Css.Dirty.PAINT :
+                                               delete this.colorCssText;
+                                               break;
+                                       case X.Css.Dirty.FONT :
+                                               delete this.fontCssText;
+                               };
+
+                               if( this.dirty < update ){
+                                       this.dirty = update;
+                                       roots = this.rootList;
+                                       for( i = 0, l = roots.length; i < l; ++i ){
+                                               root = roots[ i ];
+                                               if( root.dirty < update ) root.dirty = update;
+                                       };
+                               };
+                               
+                               if( list ) _v = list.indexOf( v );
+                               data[ propID ] = _v !== -1 ? _v : v;
+                               
+                               switch( propID ){
+                                       case X.Css.AttrNo.left  :
+                                       case X.Css.AttrNo.right :
+                                               this.constraintW = Type.isNumber( data[ X.Css.AttrNo.left ] ) || Type.isNumber( data[ X.Css.AttrNo.right ] );
+                                               break;
+                                       case X.Css.AttrNo.top    :
+                                       case X.Css.AttrNo.bottom :
+                                               this.constraintH = Type.isNumber( data[ X.Css.AttrNo.top ] ) || Type.isNumber( data[ X.Css.AttrNo.bottom ] );
+                                               break;
+                                       case X.Css.AttrNo.width :
+                                               this.autoWidth    = v === AUTO;
+                                               this.percentWidth = v === FULL || v < 1;
+                                               break;
+                                       case X.Css.AttrNo.height :
+                                               this.autoHeight    = v === AUTO;
+                                               this.percentHeight = v === FULL || v < 1;
+                                               break;
+                               };                                      
+                               return this.User;
+                       };
+               /*
+                * Getter
+                */
+                       v = data[ propID ];
+                       // Unit
+                       if( quartet === true ) return [ v, data[ ++propID ], data[ ++propID ], data[ ++propID ] ];
+                       if( combi   === true ) return [ v, data[ ++propID ] ];
+                       if( list && Type.isNumber( v ) === true ) return list[ v ];
+                       return v;
+               },
+               __cssText : function(){
+                       if( this.fontCssText   === null ) this.fontCssText   = this.createFontCssText();
+                       if( this.layoutCssText === null ) this.layoutCssText = this.createLayoutCssText();
+                       if( this.colorCssText  === null ) this.colorCssText  = this.createColorCssText();
+                       return [ this.fontCssText, this.colorCssText, this.layoutCssText ].join( ';' );
+               },
+               createFontCssText : function(){
+                       var data = this.data,
+                               css  = [],
+                               v;
+                       if( v = data[ X.Css.AttrNo.fontFamily    ] ) css[ 0 ] = 'font-family:' + v;
+                       if( v = data[ X.Css.AttrNo.fontSize      ] ) css[ css.length ] = 'font-size:' + v;
+                       if( v = data[ X.Css.AttrNo.bold          ] ) css[ css.length ] = 'font-weight:bold';
+                       if( v = data[ X.Css.AttrNo.italic        ] ) css[ css.length ] = 'font-style:italic';
+                       if( v = data[ X.Css.AttrNo.lineHeight    ] ) css[ css.length ] = 'line-height:' + v;
+                       if( v = data[ X.Css.AttrNo.letterSpacing ] ) css[ css.length ] = 'letter-spacing:' + v;
+                       if( v = data[ X.Css.AttrNo.wordSpacing   ] ) css[ css.length ] = 'word-spacing:' + v;
+                       if( v = data[ X.Css.AttrNo.align         ] ) css[ css.length ] = 'text-align:' + X.Css.Option.ALIGN[ v ];
+                       if( v = data[ X.Css.AttrNo.transform     ] ) css[ css.length ] = 'text-transform:' + X.Css.Option.TEXT_TRANSFORM[ v ];
+                       return css.join( ';' );
+               },
+               createLayoutCssText : function(){
+                       
+               },
+               createColorCssText : function(){
+                       var data = this.data,
+                               css  = [],
+                               v, x, y, c, b;
+                       if( v = data[ X.Css.AttrNo.borderColor ]      ) css[ 0 ] = 'border-color:' + v;
+                       if( v = data[ X.Css.AttrNo.borderStyle + 0 ]  ) css[ css.length ] = 'border-top-style:' + X.Css.Option.BORDER_STYLE[ v ];
+                       if( v = data[ X.Css.AttrNo.borderStyle + 1 ]  ) css[ css.length ] = 'border-right-style:' + X.Css.Option.BORDER_STYLE[ v ];
+                       if( v = data[ X.Css.AttrNo.borderStyle + 2 ]  ) css[ css.length ] = 'border-bottom-style:' + X.Css.Option.BORDER_STYLE[ v ];
+                       if( v = data[ X.Css.AttrNo.borderStyle + 3 ]  ) css[ css.length ] = 'border-left-style:' + X.Css.Option.BORDER_STYLE[ v ];
+                       if( v = data[ X.Css.AttrNo.cornerRadius + 0 ] ) css[ css.length ] = 'corner-radius-top:' + v;
+                       if( v = data[ X.Css.AttrNo.cornerRadius + 1 ] ) css[ css.length ] = 'corner-radius-right:' + v;
+                       if( v = data[ X.Css.AttrNo.cornerRadius + 2 ] ) css[ css.length ] = 'border-radius-bottom:' + v;
+                       if( v = data[ X.Css.AttrNo.cornerRadius + 3 ] ) css[ css.length ] = 'border-radius-left:' + v;
+                       if( v = data[ X.Css.AttrNo.bgColor          ] ) css[ css.length ] = 'background-color:' + v;
+                       // X.Css.AttrNo.bgAlpha
+                       if( v = data[ X.Css.AttrNo.bgImgUrl         ] ) css[ css.length ] = 'background-image:url(' + v + ')';
+                       x = data[ X.Css.AttrNo.bgImgRepeatX ];
+                       y = data[ X.Css.AttrNo.bgImgRepeatY ];
+                       if( x && y ){
+                               css[ css.length ] = 'background-repeat:repeat';
+                       } else
+                       if( x ){
+                               css[ css.length ] = 'background-repeat:repeat-x';
+                       } else 
+                       if( y ){
+                               css[ css.length ] = 'background-repeat:repeat-y';
+                       };
+                       x = data[ X.Css.AttrNo.bgImgPositionX ];
+                       y = data[ X.Css.AttrNo.bgImgPositionY ];
+                       if( x && y ){
+                               css[ css.length ] = 'background-position:' + x + ' ' + y;
+                       } else
+                       if( x ){
+                               css[ css.length ] = 'background-position:' + x + ' 0';
+                       } else 
+                       if( y ){
+                               css[ css.length ] = 'background-position:0 ' + y;
+                       };
+                       if( v = data[ X.Css.AttrNo.color ]      ) css[ css.length ] = 'color:' + v;
+                       if( v = data[ X.Css.AttrNo.decoration ] ) css[ css.length ] = 'text-decoration:' + X.Css.Option.TEXT_DECORATION[ v ];
+                       x = data[ X.Css.AttrNo.textShadowOffsetX ];
+                       y = data[ X.Css.AttrNo.textShadowOffsetY ];
+                       b = data[ X.Css.AttrNo.textShadowBlur ];
+                       c = data[ X.Css.AttrNo.textShadowColor ];
+                       if( c || x || y || b ){
+                               css[ css.length ] = 'text-shadow:' + x + ' ' + y + ' ' + b + ' ' + c;
+                       };
+                       /*
+                       X.Css.AttrNo.shadowColor    = [ X.Css.Dirty.PAINT,  23, X.Css.Type.COLOR     ]; // color
+                       X.Css.AttrNo.shadowAlpha    = [ X.Css.Dirty.PAINT,  24, X.Css.Type.U_DECIMAL ]; // 0 - 1
+                       X.Css.AttrNo.shadowOffsetX  = [ X.Css.Dirty.PAINT,  25, X.Css.Type.LENGTH    ]; // em
+                       X.Css.AttrNo.shadowOffsetY  = [ X.Css.Dirty.PAINT,  26, X.Css.Type.LENGTH    ]; // em
+                       X.Css.AttrNo.shadowBlur     = [ X.Css.Dirty.PAINT,  27, X.Css.Type.LENGTH    ]; // em
+                       X.Css.AttrNo.shadowSpread   = [ X.Css.Dirty.PAINT,  28, X.Css.Type.LENGTH    ]; // em
+                       X.Css.AttrNo.shadowInset    = [ X.Css.Dirty.PAINT,  29, X.Css.Type.BOOLEAN   ]; // true / false
+                       */
+                       return css.join( ';' );
                }
        }
 );
@@ -246,13 +468,6 @@ var DisplayNodeStyle = X.Class.create(
                Constructor : function( node, nodeData ){
                        X.Class._newPrivate( this, node, nodeData );
                },
-               name : function( v ){
-                       var data = X.Class._getPrivate( this );
-                       if( v ){
-                               return data.name( v );
-                       };
-                       return data._name;
-               },
                addName : function( names ){
                        return X.Class._getPrivate( this ).addName( names );
                },
@@ -277,6 +492,106 @@ var DisplayNodeStyle = X.Class.create(
                                return this;
                        };
                        // return data._css;
+               },
+               
+               borderWidth : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.borderWidth, v );
+               },
+               borderColor : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.borderColor, v );
+               },
+               borderStyle : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.borderStyle, v );
+               },
+               cornerRadius : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.cornerRadius, v );
+               },
+               bgColor : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgColor, v );
+               },
+               bgAlpha : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgAlpha, v );
+               },
+               bgImgUrl : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgUrl, v );
+               },
+               bgImgRepeatX : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgRepeatX, v );
+               },
+               bgImgRepeatY : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgRepeatY, v );
+               },
+               bgImgPositionX : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgPositionX, v );
+               },
+               bgImgPositionY : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgPositionY, v );
+               },
+               shadowColor : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowColor, v );
+               },
+               shadowAlpha : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowAlpha, v );
+               },
+               shadowOffsetX : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowOffsetX, v );
+               },
+               shadowOffsetY : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowOffsetY, v );
+               },
+               shadowBlur : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowBlur, v );
+               },
+               shadowSpread : function(){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowSpread, v );
+               },
+               shadowInset : function(){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowInset, v );
+               },
+               color : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.color, v );
+               },
+               fontFamily : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.fontFamily, v );
+               },
+               fontSize : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.fontSize, v );
+               },
+               bold : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.bold, v );
+               },
+               italic : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.italic, v );
+               },
+               lineHeight : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.lineHeight, v );
+               },
+               letterSpacing : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.letterSpacing, v );
+               },
+               wordSpacing : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.wordSpacing, v );
+               },
+               align : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.align, v );
+               },
+               decoration : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.decoration, v );
+               },
+               transform : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.transform, v );
+               },
+               textShadowColor : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowColor, v );
+               },
+               textShadowOffsetX : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowOffsetX, v );
+               },
+               textShadowOffsetY : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowOffsetY, v );
+               },
+               shadowBlur : function( v ){
+                       return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowBlur, v );
                }
        }
 );
index e39bb7b..be56af2 100644 (file)
@@ -5,6 +5,59 @@ var LayoutManagerBase = X.Class.create(
                allowForChild : null,
                define : function( src ){
                        return X.Class._override( this, src, true );
+               },
+               
+               
+               reflow : function( nodeData, allowW, allowH ){
+                       nodeData.preMesure( allowW, allowH );
+                       
+                       var children = nodeData.children,                               
+                               contentW = nodeData.contentWidth,
+                               contentH = nodeData.contentHeight,
+                               autoW    = contentW === AUTO,
+                               autoH    = contentH === AUTO,
+                               auto, calc, childW, childH, child, i, style, data,
+                               t, r, b, l;                     
+                       if( children ){
+                               auto     = autoW && autoH;
+                               childW   = 0;
+                               childH   = 0;
+                               calc     = BasicLayoutManager.calcValue;                        
+                               for( i = children.length; i; ){
+                                       child = children[ --i ];
+                                       style = child.__style;
+                                       if( style ){
+                                               data = style.data;
+                                               t = calc( data[ X.Css.AttrNo.top ],    contentH );
+                                               r = calc( data[ X.Css.AttrNo.right ],  contentW );
+                                               b = calc( data[ X.Css.AttrNo.bottom ], contentH );
+                                               l = calc( data[ X.Css.AttrNo.left ],   contentW );
+                                       } else {
+                                               t = r = b = l = 0;
+                                       };
+                                       if( child instanceof LayoutBoxPrivate ){
+                                               child.layoutManager.reflow( child, contentW - r - l, contentH - t - b );
+                                       } else {
+                                               child.preMesure( contentW - r - l, contentH - t - b );
+                                               child.mesure();
+                                               child.postMesure();
+                                       };
+                                       if( !auto ) continue;
+                                       if( autoW && childW < child.boxWidth  + r + l ) childW = child.boxWidth  + r + l;
+                                       if( autoH && childH < child.boxHeight + t + b ) childH = child.boxHeight + t + b;                                               
+                               };
+                               if( autoW )     nodeData.contentWidth  = childW;
+                               if( autoH ) nodeData.contentHeight = childH;
+                       };
+                       ( autoW || autoH ) && nodeData.postMesure();
+                       
+                       delete nodeData.dirty;
+               },
+               redraw : function( nodeData ){
+                       var root = nodeData.rootData;
+                       root.dirty === X.Css.Dirty.REFLOW && this.reflow( root );
+                       
+                       // draw
                }
        }
 );
index 4620bc6..f7b7932 100644 (file)
@@ -4,18 +4,18 @@ var currentRootData  = null;
 function eventRellay( e ){
        var x       = e.clientX,
                y       = e.clientY,
-               type    = X.ViewEvent.NameToID[ e.type ],
+               type    = X.View.Event.NameToID[ e.type ],
                i       = 0,
                data    = currentRootData,
                sysOnly = false,
                list, ret, parent;
-       if( type !== X.ViewEvent.POINTER_MOVE ){
+       if( type !== X.View.Event.POINTER_MOVE ){
                // console.log( e.type + ' x:' + x + ', y:' + y )
        };
        
        e.type = type;
 
-       if( data && ( data = data.monopolyNodeData ) && ( ret = data.dispatch( e ) ) & X.Cancel.MONOPOLY ) return ret;
+       if( data && ( data = data.monopolyNodeData ) && ( ret = data.dispatch( e ) ) & X.Callback.MONOPOLY ) return ret;
        if( currentRootData === null ) return;
        list = currentRootData.hoverList;
        data = currentRootData.targetNodeData = currentRootData;
@@ -25,7 +25,7 @@ function eventRellay( e ){
        // data.apiuser.updateCoursor( data.targetNodeData._cursor );
        while( data ){
                ret = data.dispatch( e, sysOnly );
-               if( ret & X.Cancel.MONOPOLY || ret & X.Cancel.STOP_PROPAGATION || ret & X.Cancel.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;
        };
        
@@ -37,7 +37,7 @@ function eventRellay( e ){
                if( parent !== currentRootData ){
                        data.isHover === true && data.styleData.removeName( data.hoverStyleName );
                        delete data.isHover;
-                       data.events && data.events[ X.ViewEvent.POINTER_OUT ] && data.dispatch( e, X.ViewEvent.POINTER_OUT, false ); // new Event
+                       data.events && data.events[ X.View.Event.POINTER_OUT ] && data.dispatch( e, X.View.Event.POINTER_OUT, false ); // new Event
                        delete data.hitSelf;
                        list.splice( i, 1 );
                        continue;
@@ -47,7 +47,7 @@ function eventRellay( e ){
                        data.isHover = true;
                };
                if( data.hitSelf === false ){
-                       data.events && data.events[ X.ViewEvent.POINTER_IN ] && data.dispatch( e, X.ViewEvent.POINTER_IN, true ); // new Event
+                       data.events && data.events[ X.View.Event.POINTER_IN ] && data.dispatch( e, X.View.Event.POINTER_IN, true ); // new Event
                        data.hitSelf = true;
                };
        };
@@ -73,7 +73,7 @@ var _PageRoot = _AbstractDisplayContainer.inherits(
                        if( X.View.ready === true ){
                                X.Timer.once( 0, this, this.start );
                        } else {
-                               X.View.listenOnce( X.ViewEvent.SYS_READY, this, this.start );
+                               X.View.listenOnce( X.View.Event.SYS_READY, this, this.start );
                        };
                        
                        this.hoverList    = [];
@@ -104,11 +104,11 @@ var _PageRoot = _AbstractDisplayContainer.inherits(
                        // hover や rollover rollout のための move イベントの追加
                        // X.View.activate, X.View.deactivate ?
                        // mouseout, mouseover
-                       X.DomEvent.add( elm, X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE ], eventRellay );
-                       if( counter[ X.ViewEvent.POINTER_MOVE ] ){
-                               ++counter[ X.ViewEvent.POINTER_MOVE ];
+                       X.DomEvent.add( elm, X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ], eventRellay );
+                       if( counter[ X.View.Event.POINTER_MOVE ] ){
+                               ++counter[ X.View.Event.POINTER_MOVE ];
                        } else {
-                               counter[ X.ViewEvent.POINTER_MOVE ] = 1;
+                               counter[ X.View.Event.POINTER_MOVE ] = 1;
                        };
                        
                        X.Timer.once( 0, this, this.afterAddToView );
@@ -121,7 +121,7 @@ var _PageRoot = _AbstractDisplayContainer.inherits(
                
                doFirstCalc : function(){
                        this.doCalculate();
-                       X.View.listen( X.ViewEvent.VIEW_RESIZED, this, this.doCalculate );
+                       X.View.listen( X.View.Event.VIEW_RESIZED, this, this.doCalculate );
                },
                reserveCalc : function(){
                        if( this.calcReserved === false ){
@@ -148,7 +148,7 @@ var _PageRoot = _AbstractDisplayContainer.inherits(
                },
                
                beforeRemove : function(){
-                       X.DomEvent.remove( this.elmMouseCatch, X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE ], eventRellay );
+                       X.DomEvent.remove( this.elmMouseCatch, X.View.Event.IdToName[ X.View.Event.POINTER_MOVE ], eventRellay );
                }
        }
 );
index b03a137..f7e7df2 100644 (file)
@@ -14,7 +14,7 @@ var _Text = _AbstractDisplayNode.inherits(
                        this.styleData.afterAddition();\r
                        \r
                        this.phase = 3;\r
-                       this.User.dispatch( { type : X.ViewEvent.CREATION_COMPLETE } );\r
+                       this.User.dispatch( { type : X.View.Event.CREATION_COMPLETE } );\r
                }\r
        }\r
 );\r
index 88930f0..18cf6c3 100644 (file)
@@ -3,7 +3,6 @@
  * \r
  * need xua\r
  */\r
-var X = X || {};\r
 \r
 X.Type = {\r
        isObject : function(v) {\r
diff --git a/0.6.x/js/core/03_XCancel.js b/0.6.x/js/core/03_XCancel.js
deleted file mode 100644 (file)
index 872fb55..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-X.Cancel = {\r
-       NONE             :  0,\r
-       UN_LISTEN        :  1,\r
-       STOP_PROPAGATION :  2,  // 上位階層への伝播のキャンセル\r
-       CANCEL_NOW       :  4,  // 同一階層のリスナーのキャンセル\r
-       PREVENT_DEFAULT  :  8,  // 結果動作のキャンセル,\r
-       MONOPOLY         : 16,  // move event を独占する\r
-       SYS_CANCEL       : 32\r
-};\r
-\r
-/*             \r
-isDefaultPrevented():Boolean\r
-イベントで preventDefault() メソッドが呼び出されたかどうかを確認します。\r
-       Event\r
-               \r
-preventDefault():void\r
-イベントのデフォルト動作をキャンセルできる場合に、その動作をキャンセルします。\r
-       Event\r
-               \r
-stopImmediatePropagation():void\r
-イベントフローの現在のノードおよび後続するノードで、イベントリスナーが処理されないようにします。\r
-       Event\r
-               \r
-stopPropagation():void\r
-イベントフローの現在のノードに後続するノードで、イベントリスナーが処理されないようにします。\r
-*/
\ No newline at end of file
index 7568af2..90ea2cb 100644 (file)
@@ -1,7 +1,15 @@
 \r
-var X = X || {};\r
 \r
 X.Callback = {\r
+       \r
+       NONE             :  0,\r
+       UN_LISTEN        :  1,\r
+       STOP_PROPAGATION :  2,  // 上位階層への伝播のキャンセル\r
+       CANCEL_NOW       :  4,  // 同一階層のリスナーのキャンセル\r
+       PREVENT_DEFAULT  :  8,  // 結果動作のキャンセル,\r
+       MONOPOLY         : 16,  // move event を独占する\r
+       SYS_CANCEL       : 32,\r
+       \r
        _LIVE_LIST : [],\r
        _POOL_LIST : [],\r
        create : function( arg0, arg1, arg2 /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
index d685032..4412139 100644 (file)
@@ -27,7 +27,7 @@ X.Timer = ( function(){
                        f   = queue[ INDEX_CALLBACK ];\r
                        c   = queue[ INDEX_COUNT ];\r
                        ret = f();\r
-                       if( ret === false || ret === X.Cancel.UN_LISTEN || c === 1 ){\r
+                       if( ret === false || ret & X.Callback.UN_LISTEN || c === 1 ){\r
                                list.splice( i, 1 );\r
                                f.kill();\r
                                queue.length = 0;\r
index df04d6f..2bf2667 100644 (file)
@@ -77,7 +77,7 @@ X.EventDispatcher = ( function(){
                                                ret = f( e );\r
                                        } else {\r
                                                ret = f( e );\r
-                                               if( ret === false || ret & X.Cancel.UN_LISTEN ){\r
+                                               if( ret === false || ret & X.Callback.UN_LISTEN ){\r
                                                        list.splice( i, 1 );\r
                                                        f.kill();\r
                                                };\r
@@ -86,7 +86,7 @@ X.EventDispatcher = ( function(){
                                                list.data[ e.type ] = void 0;\r
                                                delete list.data;\r
                                        };\r
-                                       if( ret & X.Cancel.STOP_NOW ){\r
+                                       if( ret & X.Callback.STOP_NOW ){\r
                                                sysOnly = true;\r
                                        };\r
                                        _ret |= ret;\r
diff --git a/0.6.x/js/core/13_XViewEvent.js b/0.6.x/js/core/13_XViewEvent.js
deleted file mode 100644 (file)
index f02b6a4..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-X.ViewEvent = {\r
-       SYS_READY         : 0,\r
-       INIT              : 1,\r
-       ADDED             : 2,\r
-       CREATION_COMPLETE : 3,\r
-       REMOVED           : 4,\r
-       \r
-       VIEW_RESIZED      : 5, // リサイズイベントのバブルアップは要素のレイアウトマネジャーでキャンセルされることも\r
-       IN_VIEW           : 6, // 要素が視界に入った\r
-       OUT_VIEW          : 7,\r
-       \r
-       POINTER_OUT       : 8,\r
-       POINTER_IN        : 9,\r
-       \r
-       // FOCUS\r
-       // DISABLED\r
-       // ENABLED\r
-\r
-/* -- Pointing Device Event -- */\r
-       _START_POINTER    : 10,\r
-       \r
-       CONTEXT_MENU      : 10, // rightclick or longtouch or menukey\r
-       \r
-/* -- ここよりあとははノード上をバブルアップ        -- */\r
-       _NO_BUBLEUP       : 10.5,               \r
-       //\r
-       POINTER_START     : 11,\r
-       POINTER_END       : 12,\r
-       POINTER_MOVE      : 13,\r
-       \r
-       SELECT            : 14, // click or tap or enterkey\r
-       FILE_DRAG         : 15,\r
-       \r
-/* -- Pointing Device Event -- */\r
-       _END_POINTER      : 15,\r
-       \r
-       KEY_DOWN          : 16,\r
-       KEY_UP            : 17,\r
-       \r
-       SCROLL            : 18,\r
-\r
-       CHANGE            : 19,\r
-       SUBMIT            : 20,\r
-       \r
-       IdToName : {},\r
-       NameToID : {}\r
-};\r
-\r
-if( window.navigator.msPointerEnabled ){\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_START ] = 'MSPointerDown';\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_END   ] = 'MSPointerUp';\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE  ] = 'MSPointerMove';\r
-       X.ViewEvent.NameToID[ 'MSPointerDown' ] = X.ViewEvent.POINTER_START;\r
-       X.ViewEvent.NameToID[ 'MSPointerUp'   ] = X.ViewEvent.POINTER_END;\r
-       X.ViewEvent.NameToID[ 'MSPointerMove' ] = X.ViewEvent.POINTER_MOVE;\r
-} else\r
-if( 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch ){\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_START ] = 'touchstart';\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_END   ] = 'touchend';\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE  ] = 'touchmove';\r
-       X.ViewEvent.NameToID[ 'touchstart' ] = X.ViewEvent.POINTER_START;\r
-       X.ViewEvent.NameToID[ 'touchend'   ] = X.ViewEvent.POINTER_END;\r
-       X.ViewEvent.NameToID[ 'touchmove'  ] = X.ViewEvent.POINTER_MOVE;\r
-} else {\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_START ] = 'mousedown';\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_END   ] = 'mouseup';\r
-       X.ViewEvent.IdToName[ X.ViewEvent.POINTER_MOVE  ] = 'mousemove';\r
-       X.ViewEvent.NameToID[ 'mousedown' ] = X.ViewEvent.POINTER_START;\r
-       X.ViewEvent.NameToID[ 'mouseup'   ] = X.ViewEvent.POINTER_END;\r
-       X.ViewEvent.NameToID[ 'mousemove' ] = X.ViewEvent.POINTER_MOVE;\r
-};\r
-\r
index d1b6588..b87f83f 100644 (file)
@@ -1,3 +1,76 @@
+X.View = {\r
+       Event : {\r
+               SYS_READY         : 0,\r
+               INIT              : 1,\r
+               ADDED             : 2,\r
+               CREATION_COMPLETE : 3,\r
+               REMOVED           : 4,\r
+               \r
+               VIEW_RESIZED      : 5, // リサイズイベントのバブルアップは要素のレイアウトマネジャーでキャンセルされることも\r
+               IN_VIEW           : 6, // 要素が視界に入った\r
+               OUT_VIEW          : 7,\r
+               \r
+               POINTER_OUT       : 8,\r
+               POINTER_IN        : 9,\r
+               \r
+               // FOCUS\r
+               // DISABLED\r
+               // ENABLED\r
+       \r
+       /* -- Pointing Device Event -- */\r
+               _START_POINTER    : 10,\r
+               \r
+               CONTEXT_MENU      : 10, // rightclick or longtouch or menukey\r
+               \r
+       /* -- ここよりあとははノード上をバブルアップ -- */\r
+               _NO_BUBLEUP       : 10.5,               \r
+               //\r
+               POINTER_START     : 11,\r
+               POINTER_END       : 12,\r
+               POINTER_MOVE      : 13,\r
+               \r
+               SELECT            : 14, // click or tap or enterkey\r
+               FILE_DRAG         : 15,\r
+               \r
+       /* -- Pointing Device Event -- */\r
+               _END_POINTER      : 15,\r
+               \r
+               KEY_DOWN          : 16,\r
+               KEY_UP            : 17,\r
+               \r
+               SCROLL            : 18,\r
+       \r
+               CHANGE            : 19,\r
+               SUBMIT            : 20,\r
+               \r
+               IdToName : {},\r
+               NameToID : {}\r
+       }\r
+};\r
+\r
+if( window.navigator.msPointerEnabled ){\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'MSPointerDown';\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_END   ] = 'MSPointerUp';\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_MOVE  ] = 'MSPointerMove';\r
+       X.View.Event.NameToID[ 'MSPointerDown' ] = X.View.Event.POINTER_START;\r
+       X.View.Event.NameToID[ 'MSPointerUp'   ] = X.View.Event.POINTER_END;\r
+       X.View.Event.NameToID[ 'MSPointerMove' ] = X.View.Event.POINTER_MOVE;\r
+} else\r
+if( 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch ){\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'touchstart';\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_END   ] = 'touchend';\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_MOVE  ] = 'touchmove';\r
+       X.View.Event.NameToID[ 'touchstart' ] = X.View.Event.POINTER_START;\r
+       X.View.Event.NameToID[ 'touchend'   ] = X.View.Event.POINTER_END;\r
+       X.View.Event.NameToID[ 'touchmove'  ] = X.View.Event.POINTER_MOVE;\r
+} else {\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_START ] = 'mousedown';\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_END   ] = 'mouseup';\r
+       X.View.Event.IdToName[ X.View.Event.POINTER_MOVE  ] = 'mousemove';\r
+       X.View.Event.NameToID[ 'mousedown' ] = X.View.Event.POINTER_START;\r
+       X.View.Event.NameToID[ 'mouseup'   ] = X.View.Event.POINTER_END;\r
+       X.View.Event.NameToID[ 'mousemove' ] = X.View.Event.POINTER_MOVE;\r
+};\r
 \r
 X.View = (function( window, document ){\r
        var view = X.UA.IE ?\r
@@ -19,7 +92,7 @@ X.View = (function( window, document ){
                                if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
                                        w = size[ 0 ];\r
                                        h = size[ 1 ];\r
-                                       X.View.dispatch( { type : X.ViewEvent.VIEW_RESIZED, w : w, h : h } );\r
+                                       X.View.dispatch( { type : X.View.Event.VIEW_RESIZED, w : w, h : h } );\r
                                };\r
                                X.Timer.once( 1, unlock );// delay unlock\r
                        };\r
@@ -34,7 +107,7 @@ X.View = (function( window, document ){
                        if( w !== size[ 0 ] || h !== size[ 1 ] ){// VIEW_RESIZED\r
                                w = size[ 0 ];\r
                                h = size[ 1 ];\r
-                               X.View.dispatch( { type : X.ViewEvent.VIEW_RESIZED, w : w, h : h } );\r
+                               X.View.dispatch( { type : X.View.Event.VIEW_RESIZED, w : w, h : h } );\r
                        };\r
                        X.Timer.once( 1, unlock );\r
                };\r
@@ -61,7 +134,7 @@ X.View = (function( window, document ){
                        },\r
                        _init : function(){\r
                                var s;\r
-                               if( X.View.ready ) return X.Cancel.UN_LISTEN;\r
+                               if( X.View.ready ) return X.Callback.UN_LISTEN;\r
                                if( s = X.View._script ){\r
                                        s.parentNode.removeChild( s );\r
                                        s.onreadystatechange = new Function();\r
@@ -70,13 +143,14 @@ X.View = (function( window, document ){
                                };\r
                                delete X.View._init;\r
                                X.View.ready = true;\r
-                               X.View.dispatch( { type : X.ViewEvent.SYS_READY } );\r
-                               return X.Cancel.UN_LISTEN;\r
-                       }\r
+                               X.View.dispatch( { type : X.View.Event.SYS_READY } );\r
+                               return X.Callback.UN_LISTEN;\r
+                       },\r
+                       Event : X.View.Event\r
                }\r
        );\r
                \r
-       X.View.listenOnce( X.ViewEvent.SYS_READY, function(){\r
+       X.View.listenOnce( X.View.Event.SYS_READY, function(){\r
                var b, x;\r
                if( X.UA.IE && X.UA.IE < 9 ){\r
                        X.Timer.add( 100, resize );\r
@@ -112,7 +186,7 @@ if( 4 < X.UA.IE ){
 } else\r
 if( X.UA.WebKit ){ // sniff\r
        X.Timer.add( 10, function(){\r
-               if( !X.View._init ) return X.Cancel.UN_LISTEN;\r
+               if( !X.View._init ) return X.Callback.UN_LISTEN;\r
                if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return X.View._init();\r
        });\r
 };\r
@@ -121,6 +195,6 @@ if( X.UA.WebKit ){ // sniff
 X.DomEvent.add( window, 'load', X.View._init );\r
 \r
 //\r
-X.View.listen( X.ViewEvent.SYS_READY, function(e){ console.log( 'X.View DomReady ' + X.View.ready ) } );\r
+X.View.listen( X.View.Event.SYS_READY, function(e){ console.log( 'X.View DomReady ' + X.View.ready ) } );\r
 \r
-X.View.listen( X.ViewEvent.VIEW_RESIZED, function(e){ console.log( 'X.View VIEW_RESIZED ' + e.w + 'x' + e.h ) } );\r
+X.View.listen( X.View.Event.VIEW_RESIZED, function(e){ console.log( 'X.View VIEW_RESIZED ' + e.w + 'x' + e.h ) } );\r