Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: sky/examples/style/sky-core-styles.sky

Issue 716013002: Specs: Initial hack at extensible style/layout (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/examples/style/hex-layout.sky ('k') | sky/examples/style/toolbar-layout.sky » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 SKY MODULE
2 <!-- this is part of sky:core -->
3 <script>
4 // "internals" is an object only made visible to this module that exports stuff implemented in C++
5 module.exports.registerProperty = internals.registerProperty;
6 internals.registerLayoutManager('none', null);
7 module.exports.LayoutManager = internals.LayoutManager;
8 module.exports.InlineLayoutManager = internals.InlineLayoutManager;
9 internals.registerLayoutManager('inline', internals.InlineLayoutManager);
10 module.exports.ParagraphLayoutManager = internals.ParagraphLayoutManager;
11 internals.registerLayoutManager('paragraph', internals.ParagraphLayoutManager);
12 module.exports.BlockLayoutManager = internals.BlockLayoutManager;
13 internals.registerLayoutManager('block', internals.BlockLayoutManager);
14
15 let displayTypes = new Map();
16 module.exports.registerLayoutManager = function registerLayoutManager(displayVa lue, layoutManagerConstructor) {
17 // TODO(ianh): apply rules for type-checking displayValue is a String
18 // TODO(ianh): apply rules for type-checking layoutManagerConstructor impleme nts the LayoutManagerConstructor interface (or is null)
19 if (displayTypes.has(displayValue))
20 throw new Error();
21 displayTypes.set(displayValue, layoutManagerConstructor);
22 };
23
24 module.exports.DisplayStyleValueType = new StyleValueType(); // value is null o r a LayoutManagerConstructor
25 module.exports.DisplayStyleValueType.addParser((tokens) => {
26 let token = tokens.next();
27 if (token.done)
28 throw new Error();
29 if (token.value.kind != 'identifier')
30 throw new Error();
31 if (!displayTypes.has(token.value.value))
32 throw new Error();
33 return {
34 value: displayTypes.get(token.value.value),
35 }
36 });
37
38 internals.registerProperty({
39 name: 'display',
40 type: module.exports.DisplayStyleValueType,
41 inherits: false,
42 initialValue: internals.BlockLayoutManager,
43 needsLayout: true,
44 });
45
46 module.exports.PositiveLengthStyleValueType = new StyleValueType(); // value is a ParsedValue whose value (once resolved) is a number in 96dpi pixels, >=0
47 module.exports.PositiveLengthStyleValueType.addParser((tokens) => {
48 // just handle "<number>px"
49 let token = tokens.next();
50 if (token.done)
51 throw new Error();
52 if (token.value.kind != 'dimension')
53 throw new Error();
54 if (token.value.unit != 'px')
55 throw new Error();
56 if (token.value.value < 0)
57 throw new Error();
58 return {
59 value: token.value.value;
60 };
61 });
62
63 internals.registerProperty({
64 name: 'min-width',
65 type: module.exports.PositiveLengthStyleValueType,
66 inherits: false,
67 initialValue: 0,
68 needsLayout: true,
69 });
70 internals.registerProperty({
71 name: 'min-height',
72 type: module.exports.PositiveLengthStyleValueType,
73 inherits: false,
74 initialValue: 0,
75 needsLayout: true,
76 });
77
78 module.exports.PositiveLengthOrAutoStyleValueType = new StyleValueType(); // va lue is a ParsedValue whose value (once resolved) is either a number in 96dpi pix els (>=0) or null (meaning 'auto')
79 module.exports.PositiveLengthOrAutoStyleValueType.addParser((tokens) => {
80 // handle 'auto'
81 let token = tokens.next();
82 if (token.done)
83 throw new Error();
84 if (token.value.kind != 'identifier')
85 throw new Error();
86 if (token.value.value != 'auto')
87 throw new Error();
88 return {
89 value: null,
90 };
91 });
92 module.exports.PositiveLengthOrAutoStyleValueType.addParser((tokens) => {
93 return module.exports.PositiveLengthStyleValueType.parse(tokens);
94 });
95
96 internals.registerProperty({
97 name: 'width',
98 type: module.exports.PositiveLengthOrAutoStyleValueType,
99 inherits: false,
100 initialValue: null,
101 needsLayout: true,
102 });
103 internals.registerProperty({
104 name: 'height',
105 type: module.exporets.PositiveLengthOrAutoStyleValueType,
106 inherits: false,
107 initialValue: null,
108 needsLayout: true,
109 });
110
111 module.exports.PositiveLengthOrInfinityStyleValueType = new StyleValueType(); / / value is a ParsedValue whose value (once resolved) is either a number in 96dpi pixels (>=0) or Infinity
112 module.exports.PositiveLengthOrInfinityStyleValueType.addParser((tokens) => {
113 // handle 'infinity'
114 let token = tokens.next();
115 if (token.done)
116 throw new Error();
117 if (token.value.kind != 'identifier')
118 throw new Error();
119 if (token.value.value != 'infinity')
120 throw new Error();
121 return {
122 value: Infinity,
123 };
124 });
125 module.exports.PositiveLengthOrInfinityStyleValueType.addParser((tokens) => {
126 return module.exports.PositiveLengthStyleValueType.parse(tokens);
127 });
128
129 internals.registerProperty({
130 name: 'width',
131 type: module.exports.PositiveLengthOrInfinityStyleValueType,
132 inherits: false,
133 initialValue: Infinity,
134 needsLayout: true,
135 });
136 internals.registerProperty({
137 name: 'height',
138 type: module.exporets.PositiveLengthOrInfinityStyleValueType,
139 inherits: false,
140 initialValue: Infinity,
141 needsLayout: true,
142 });
143 </script>
OLDNEW
« no previous file with comments | « sky/examples/style/hex-layout.sky ('k') | sky/examples/style/toolbar-layout.sky » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698