root/lang/actionscript/ascss/src/CSSTest.as @ 9972

Revision 9972, 6.1 kB (checked in by gyuque, 5 years ago)

ascss: updated test

Line 
1package
2{
3        import flash.display.*;
4        import flash.text.*;
5        import flash.events.*;
6        import css.*;
7        import ascsstest.*;
8        public class CSSTest extends Sprite
9        {
10                public static var theInstance:CSSTest;
11                private var mTextOut:TextField;
12                private var mCSS:ASCSS;
13                private var mVLayer:Sprite;
14                private var mELayer:Sprite;
15
16                private var mPrevX:int;
17                private var mPrevY:int;
18
19                public static const T_CSS:String =
20"@charset \"euc-jp\";\n\n/* AMAZON */\n\ndiv.hatena-asin-recommend {\n  margin: 4px 10px 4px 10px;\n    padding: 5px 4px;\n     width: 96%;\n   text-align: left;\n}\n\ndiv.hatena-asin-recommend a {\n text-decoration: none;\n        border: none;\n}\n\ndiv.hatena-asin-recommend-item-1 {\n        float: left;\n  width: 49%;\n}\n\ndiv.hatena-asin-recommend-item-2 {\n  float: right;\n width: 49%;\n}\n\ndiv.hatena-asin-recommend-foot {\n    clear: both;\n}\n\ndiv.hatena-asin-recommend-image {\n  float: left;\n}\n\ndiv.hatena-asin-recommend-image img {\n      border: none;\n}\n\ndiv.hatena-asin-recommend-info {\n  margin-left: 65px;\n    min-height: 65px;\n     line-height: 115%;\n}\n\ndiv.hatena-asin-recommend-title {\n    margin-left: 24px;\n    font-size: 11px;\n      font-weight: bold;\n}";
21
22                function CSSTest()
23                {
24                        stage.scaleMode = StageScaleMode.NO_SCALE;
25
26                        var g:Graphics = graphics;
27
28                        mELayer = new Sprite();
29                        addChild(mELayer);
30
31                        mVLayer = new Sprite();
32                        addChild(mVLayer);
33
34                        mTextOut = new TextField();
35                        mTextOut.width  = 600;
36                        mTextOut.height = 800;
37                        mTextOut.x = 8;
38                        mTextOut.y = 8;
39                        mTextOut.textColor = 0xffffff;
40                        mTextOut.mouseEnabled = false;
41                        addChild(mTextOut);
42                        theInstance = this;
43puts(T_CSS);
44                        var pex:PropExt = new PropExt();
45                        mCSS = new ASCSS(T_CSS, CSSTest);
46                        mCSS.propertyExtension = pex;
47                        mCSS.parse();
48
49                        var sheet:StyleList = mCSS.sheet;
50                        var sv:StyleListVisual = new StyleListVisual(sheet);
51                        sv.edgeLayer = mELayer;
52                        mVLayer.addChild(sv);
53
54                        sv.x = 10;
55                        sv.y = 10;
56
57                        generateStyleListChildren(sheet, sv);
58
59                        sv.calcSize(false);
60                        sv.calcMaxWidth();
61                        sv.locate();
62                        mELayer.graphics.clear();
63                        sv.renderEdge(mELayer, 0xffffff);
64
65                        stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
66                        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
67                }
68
69                private function onMouseDown(e:MouseEvent):void
70                {
71                        mPrevX = stage.mouseX;
72                        mPrevY = stage.mouseY;
73                }
74
75                private function onMouseMove(e:MouseEvent):void
76                {
77                        if (e.buttonDown)
78                        {
79                                var dx:int = stage.mouseX - mPrevX;
80                                var dy:int = stage.mouseY - mPrevY;
81
82                                if (mELayer != null && mVLayer != null && (dx != 0 || dy != 0))
83                                {
84                                        mELayer.x += dx;
85                                        mELayer.y += dy;
86
87                                        mVLayer.x += dx;
88                                        mVLayer.y += dy;
89
90                                        mTextOut.y = 8 + mVLayer.y/9;
91
92                                        e.updateAfterEvent();
93                                }
94
95                                mPrevX = stage.mouseX;
96                                mPrevY = stage.mouseY;
97                        }
98                }
99
100                private function generateStyleListChildren(sl:StyleList, sv:StyleListVisual):void
101                {
102                        var ch:StyleBase;
103                        var len:uint = sl.length;
104                        var children:Array = [];
105
106                        for (var i:uint = 0;i < len;i++)
107                        {
108                                ch = sl.item(i);
109
110                                if (ch is CSSRule)
111                                {
112                                        var v:RuleVisual = new RuleVisual(CSSRule(ch));
113                                        mVLayer.addChild(v);
114
115                                        if (ch is CSSStyleRule)
116                                                generateStyleRuleChildren(CSSStyleRule(ch), v);
117
118                                        children.push(v);
119                                }
120                        }
121
122                        chain(sv, children);
123                }
124
125                private function generateStyleRuleChildren(sr:CSSStyleRule, sv:RuleVisual):void
126                {
127                        var v:SelectorVisual;
128                        var nx:CSSSelector = sr.selector;
129                        var children:Array = [];
130
131                        while(nx != null)
132                        {
133                                v = new SelectorVisual(nx);
134                                mVLayer.addChild(v);
135                                children.push(v);
136
137                                generateSelectorChildren(nx, v);
138
139                                nx = nx.next;
140                        }
141
142                        if (sr.declaration != null)
143                        {
144                                var dv:DeclarationVisual = new DeclarationVisual(sr.declaration);
145                                mVLayer.addChild(dv);
146                                children.push(dv);
147
148                                if (sr.declaration is CSSMutableStyleDeclaration)
149                                        generateMutableDeclarationChildren(CSSMutableStyleDeclaration(sr.declaration), dv);
150                        }
151
152                        chain(sv, children);
153                }
154
155
156                private function generateSelectorChildren(ss:CSSSelector, sv:SelectorVisual):void
157                {
158                        if (ss.mTagHistory != null)
159                        {
160                                var v:SelectorVisual = new SelectorVisual(ss.mTagHistory);
161                                mVLayer.addChild(v);
162                                sv.firstChild = v;
163                        }
164                }
165
166                private function generateMutableDeclarationChildren(sd:CSSMutableStyleDeclaration, sv:DeclarationVisual):void
167                {
168                        var len:uint = sd.length;
169                        var children:Array = [];
170                        for (var i:uint;i < len;i++)
171                        {
172                                var v:PropertyVisual = new PropertyVisual(sd.rawItem(i));
173                                mVLayer.addChild(v);
174                                children.push(v);
175
176                                generatePropertyChildren(sd.rawItem(i), v);
177                        }
178
179                        chain(sv, children);
180                }
181
182                private function generatePropertyChildren(cp:CSSProperty, pv:PropertyVisual):void
183                {
184                        var val:CSSValue = cp.value;
185                        if (val == null)
186                                return;
187
188                        var v:ValueVisual = new ValueVisual(val);
189
190                        if (val is CSSValueList)
191                                generateValueListChildren(CSSValueList(val), v);
192
193                        mVLayer.addChild(v);
194                        pv.firstChild = v;
195                }
196
197                private function generateValueListChildren(cv:CSSValueList, vv:ValueVisual):void
198                {
199                        var len:uint = cv.length;
200                        var children:Array = [];
201                        for (var i:uint;i < len;i++)
202                        {
203                                var v:ValueVisual = new ValueVisual(cv.item(i));
204                                mVLayer.addChild(v);
205                                children.push(v);
206                        }
207
208                        chain(vv, children);
209                }
210
211                private function chain(parent:StyleVisualBase, children:Array /* of StyleVisualBase */):void
212                {
213                        var prev:StyleVisualBase = null;
214                        for each(var ch:StyleVisualBase in children)
215                        {
216                                if (prev == null)
217                                        parent.firstChild = ch;
218                                else
219                                        prev.nextSibling = ch;
220
221                                prev = ch;
222                        }
223                }
224
225                public static function puts(msg:*):void
226                {
227                        if (theInstance != null)
228                                theInstance.mTextOut.appendText(msg.toString() + "\n");
229                }
230        }
231}
232
233class PropExt implements css.IPropertyExtension
234{
235        import css.*;
236
237        private var mAzimuthPropID:int;
238        function PropExt()
239        {
240                mAzimuthPropID = CSSPropertyID.addExtProp("azimuth");
241        }
242
243        public function isValidPrimitiveValue(aPropID:int, aValueId:int):Boolean
244        {
245                if (aPropID == mAzimuthPropID)
246                {
247                        return true;
248                }
249
250                return false;
251        }
252}
Note: See TracBrowser for help on using the browser.