dothtml 5.0.3 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.vscode/launch.json +34 -0
  2. package/.vscode/settings.json +2 -1
  3. package/lib/component.d.ts +1 -1
  4. package/lib/dot-util.d.ts +13 -0
  5. package/lib/dothtml.d.ts +2 -1
  6. package/lib/dothtml.js +1 -1
  7. package/lib/i-dot.d.ts +4 -4
  8. package/lib/styling/css-types.ts/css-angle.d.ts +7 -0
  9. package/lib/styling/css-types.ts/css-color.d.ts +9 -0
  10. package/lib/styling/css-types.ts/css-complex.d.ts +7 -0
  11. package/lib/styling/css-types.ts/css-data-type.d.ts +5 -0
  12. package/lib/styling/css-types.ts/css-length.d.ts +7 -0
  13. package/lib/styling/css-types.ts/css-number.d.ts +6 -0
  14. package/lib/styling/css-types.ts/css-transform.d.ts +38 -0
  15. package/lib/styling/css-types.ts/css-unknown.d.ts +6 -0
  16. package/lib/styling/css-types.ts/css-url.d.ts +6 -0
  17. package/lib/{i-dotcss.d.ts → styling/i-dotcss.d.ts} +192 -42
  18. package/lib/styling/style-builder.d.ts +24 -0
  19. package/lib/styling/unit-function-tables.d.ts +10 -0
  20. package/package.json +2 -2
  21. package/src/component.ts +1 -1
  22. package/src/dot-util.ts +37 -1
  23. package/src/dot.ts +2 -2
  24. package/src/dothtml.ts +2 -1
  25. package/src/i-dot.ts +1 -1
  26. package/src/styling/css-types.ts/css-angle.ts +18 -0
  27. package/src/styling/css-types.ts/css-color.ts +229 -0
  28. package/src/styling/css-types.ts/css-complex.ts +20 -0
  29. package/src/styling/css-types.ts/css-data-type.ts +9 -0
  30. package/src/styling/css-types.ts/css-length.ts +20 -0
  31. package/src/styling/css-types.ts/css-number.ts +12 -0
  32. package/src/styling/css-types.ts/css-transform.ts +220 -0
  33. package/src/styling/css-types.ts/css-unknown.ts +13 -0
  34. package/src/styling/css-types.ts/css-url.ts +41 -0
  35. package/src/{i-dotcss.ts → styling/i-dotcss.ts} +206 -49
  36. package/src/styling/style-builder.ts +963 -0
  37. package/src/styling/unit-function-tables.ts +24 -0
  38. package/unittests/basic-functionality.test.ts +1 -1
  39. package/unittests/calc.test.ts +2 -0
  40. package/unittests/{component-decorator.-.ts → components/component-decorator.-.ts} +0 -0
  41. package/unittests/{components-data.test.ts → components/components-data.test.ts} +3 -3
  42. package/unittests/{components.test.ts → components/components.test.ts} +5 -4
  43. package/unittests/input-bindings.test.ts +6 -6
  44. package/unittests/non-function-props-rerender.test.ts +85 -0
  45. package/unittests/styling/animations.test.ts +14 -0
  46. package/unittests/styling/inline-styling.test.ts +18 -0
  47. package/unittests/styling/pseudo-selectors.test.ts +1 -0
  48. package/unittests/styling/transformations.test.ts +234 -0
  49. package/{lib/dot-document.d.ts → unittests/styling/value-interpretation.test.ts} +0 -0
  50. package/lib/style-builder.d.ts +0 -3
  51. package/src/dot-document.ts +0 -0
  52. package/src/style-builder.ts +0 -1516
package/src/i-dot.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import EventBus from "./event-bus";
2
2
  import type Component from "./component";
3
- import IDotCss, { IDotcssProp } from "./i-dotcss";
3
+ import IDotCss, { IDotcssProp } from "./styling/i-dotcss";
4
4
 
5
5
  export type DotContentPrimitive = string|number|boolean;
6
6
  export type DotContentBasic = DotContentPrimitive|Node|Element|NodeList|Component|IDotDocument//typeof DotDocument;
@@ -0,0 +1,18 @@
1
+ import { floatRegex } from "../../dot-util";
2
+ import CssDataType from "./css-data-type";
3
+
4
+ export default class CssAngle extends CssDataType{
5
+ angle: number;
6
+ units: string;
7
+ constructor(value: string|number){
8
+ super("angle");
9
+ value = value || "0deg";
10
+ if(!isNaN(value as number)) value = `${Math.round(value as number)}deg`;
11
+ this.angle = Number((value as string).match(floatRegex)[0]);
12
+ this.units = (value as string).split(floatRegex)[1] || "deg";
13
+ }
14
+
15
+ toString(){
16
+ return this.angle + this.units;
17
+ }
18
+ }
@@ -0,0 +1,229 @@
1
+ import CssDataType from "./css-data-type";
2
+
3
+ export default class CssColor extends CssDataType{
4
+ r: number;
5
+ g: number;
6
+ b: number;
7
+ a: number;
8
+ constructor(value){
9
+ super("color");
10
+ this.r = 0;
11
+ this.g = 0;
12
+ this.b = 0;
13
+ this.a = 1;
14
+ if(value.length == 1) {
15
+ value = value[0];
16
+ if(value == "" || value == "none" || value == "initial" || value == "inherit"){} //Nothing more needs to be done.
17
+ else if(!isNaN(value)){
18
+ this.b = value & 0xFF;
19
+ value >>= 8;
20
+ this.g = value & 0xFF;
21
+ value >>= 8;
22
+ this.r = value & 0xFF;
23
+ }
24
+ else if(value[0] == "#"){
25
+ var cH = value.split("#")[1];
26
+ if(cH.length == 3){
27
+ this.r = Number("0x" + cH[0] + "" + cH[0]);
28
+ this.g = Number("0x" + cH[1] + "" + cH[1]);
29
+ this.b = Number("0x" + cH[2] + "" + cH[2]);
30
+
31
+ }
32
+ else if(cH.length == 6){
33
+ this.r = Number("0x" + cH[0] + "" + cH[1]);
34
+ this.g = Number("0x" + cH[2] + "" + cH[3]);
35
+ this.b = Number("0x" + cH[4] + "" + cH[5]);
36
+ }
37
+ //else throw value + " is not a valid color"; //or just stick with black.
38
+ }
39
+ else if(value.toLowerCase().indexOf("rgb") === 0){
40
+ //This also handles rgba.
41
+ var cData = value.split("(")[1];
42
+ cData = cData.split(")")[0];
43
+ cData = cData.split(",");
44
+ if(cData.length == 3 || cData.length == 4){
45
+ this.r = Number(cData[0]);
46
+ this.g = Number(cData[1]);
47
+ this.b = Number(cData[2]);
48
+ this.a = Number(cData[3] || 1);
49
+ }
50
+ }
51
+ else{
52
+ var r = 0;
53
+ var g = 0;
54
+ var b = 0;
55
+ switch(value.toLowerCase()){
56
+ case 'aliceblue':r=0xF0;g=0xF8;b=0xFF;break;
57
+ case 'antiquewhite':r=0xFA;g=0xEB;b=0xD7;break;
58
+ case 'aqua':r=0x00;g=0xFF;b=0xFF;break;
59
+ case 'aquamarine':r=0x7F;g=0xFF;b=0xD4;break;
60
+ case 'azure':r=0xF0;g=0xFF;b=0xFF;break;
61
+ case 'beige':r=0xF5;g=0xF5;b=0xDC;break;
62
+ case 'bisque':r=0xFF;g=0xE4;b=0xC4;break;
63
+ case 'black':r=0x00;g=0x00;b=0x00;break;
64
+ case 'blanchedalmond':r=0xFF;g=0xEB;b=0xCD;break;
65
+ case 'blue':r=0x00;g=0x00;b=0xFF;break;
66
+ case 'blueviolet':r=0x8A;g=0x2B;b=0xE2;break;
67
+ case 'brown':r=0xA5;g=0x2A;b=0x2A;break;
68
+ case 'burlywood':r=0xDE;g=0xB8;b=0x87;break;
69
+ case 'cadetblue':r=0x5F;g=0x9E;b=0xA0;break;
70
+ case 'chartreuse':r=0x7F;g=0xFF;b=0x00;break;
71
+ case 'chocolate':r=0xD2;g=0x69;b=0x1E;break;
72
+ case 'coral':r=0xFF;g=0x7F;b=0x50;break;
73
+ case 'cornflowerblue':r=0x64;g=0x95;b=0xED;break;
74
+ case 'cornsilk':r=0xFF;g=0xF8;b=0xDC;break;
75
+ case 'crimson':r=0xDC;g=0x14;b=0x3C;break;
76
+ case 'cyan':r=0x00;g=0xFF;b=0xFF;break;
77
+ case 'darkblue':r=0x00;g=0x00;b=0x8B;break;
78
+ case 'darkcyan':r=0x00;g=0x8B;b=0x8B;break;
79
+ case 'darkgoldenrod':r=0xB8;g=0x86;b=0x0B;break;
80
+ case 'darkgray':r=0xA9;g=0xA9;b=0xA9;break;
81
+ case 'darkgrey':r=0xA9;g=0xA9;b=0xA9;break;
82
+ case 'darkgreen':r=0x00;g=0x64;b=0x00;break;
83
+ case 'darkkhaki':r=0xBD;g=0xB7;b=0x6B;break;
84
+ case 'darkmagenta':r=0x8B;g=0x00;b=0x8B;break;
85
+ case 'darkolivegreen':r=0x55;g=0x6B;b=0x2F;break;
86
+ case 'darkorange':r=0xFF;g=0x8C;b=0x00;break;
87
+ case 'darkorchid':r=0x99;g=0x32;b=0xCC;break;
88
+ case 'darkred':r=0x8B;g=0x00;b=0x00;break;
89
+ case 'darksalmon':r=0xE9;g=0x96;b=0x7A;break;
90
+ case 'darkseagreen':r=0x8F;g=0xBC;b=0x8F;break;
91
+ case 'darkslateblue':r=0x48;g=0x3D;b=0x8B;break;
92
+ case 'darkslategray':r=0x2F;g=0x4F;b=0x4F;break;
93
+ case 'darkslategrey':r=0x2F;g=0x4F;b=0x4F;break;
94
+ case 'darkturquoise':r=0x00;g=0xCE;b=0xD1;break;
95
+ case 'darkviolet':r=0x94;g=0x00;b=0xD3;break;
96
+ case 'deeppink':r=0xFF;g=0x14;b=0x93;break;
97
+ case 'deepskyblue':r=0x00;g=0xBF;b=0xFF;break;
98
+ case 'dimgray':r=0x69;g=0x69;b=0x69;break;
99
+ case 'dimgrey':r=0x69;g=0x69;b=0x69;break;
100
+ case 'dodgerblue':r=0x1E;g=0x90;b=0xFF;break;
101
+ case 'firebrick':r=0xB2;g=0x22;b=0x22;break;
102
+ case 'floralwhite':r=0xFF;g=0xFA;b=0xF0;break;
103
+ case 'forestgreen':r=0x22;g=0x8B;b=0x22;break;
104
+ case 'fuchsia':r=0xFF;g=0x00;b=0xFF;break;
105
+ case 'gainsboro':r=0xDC;g=0xDC;b=0xDC;break;
106
+ case 'ghostwhite':r=0xF8;g=0xF8;b=0xFF;break;
107
+ case 'gold':r=0xFF;g=0xD7;b=0x00;break;
108
+ case 'goldenrod':r=0xDA;g=0xA5;b=0x20;break;
109
+ case 'gray':r=0x80;g=0x80;b=0x80;break;
110
+ case 'grey':r=0x80;g=0x80;b=0x80;break;
111
+ case 'green':r=0x00;g=0x80;b=0x00;break;
112
+ case 'greenyellow':r=0xAD;g=0xFF;b=0x2F;break;
113
+ case 'honeydew':r=0xF0;g=0xFF;b=0xF0;break;
114
+ case 'hotpink':r=0xFF;g=0x69;b=0xB4;break;
115
+ case 'indianred':r=0xCD;g=0x5C;b=0x5C;break;
116
+ case 'indigo':r=0x4B;g=0x00;b=0x82;break;
117
+ case 'ivory':r=0xFF;g=0xFF;b=0xF0;break;
118
+ case 'khaki':r=0xF0;g=0xE6;b=0x8C;break;
119
+ case 'lavender':r=0xE6;g=0xE6;b=0xFA;break;
120
+ case 'lavenderblush':r=0xFF;g=0xF0;b=0xF5;break;
121
+ case 'lawngreen':r=0x7C;g=0xFC;b=0x00;break;
122
+ case 'lemonchiffon':r=0xFF;g=0xFA;b=0xCD;break;
123
+ case 'lightblue':r=0xAD;g=0xD8;b=0xE6;break;
124
+ case 'lightcoral':r=0xF0;g=0x80;b=0x80;break;
125
+ case 'lightcyan':r=0xE0;g=0xFF;b=0xFF;break;
126
+ case 'lightgoldenrodyellow':r=0xFA;g=0xFA;b=0xD2;break;
127
+ case 'lightgray':r=0xD3;g=0xD3;b=0xD3;break;
128
+ case 'lightgrey':r=0xD3;g=0xD3;b=0xD3;break;
129
+ case 'lightgreen':r=0x90;g=0xEE;b=0x90;break;
130
+ case 'lightpink':r=0xFF;g=0xB6;b=0xC1;break;
131
+ case 'lightsalmon':r=0xFF;g=0xA0;b=0x7A;break;
132
+ case 'lightseagreen':r=0x20;g=0xB2;b=0xAA;break;
133
+ case 'lightskyblue':r=0x87;g=0xCE;b=0xFA;break;
134
+ case 'lightslategray':r=0x77;g=0x88;b=0x99;break;
135
+ case 'lightslategrey':r=0x77;g=0x88;b=0x99;break;
136
+ case 'lightsteelblue':r=0xB0;g=0xC4;b=0xDE;break;
137
+ case 'lightyellow':r=0xFF;g=0xFF;b=0xE0;break;
138
+ case 'lime':r=0x00;g=0xFF;b=0x00;break;
139
+ case 'limegreen':r=0x32;g=0xCD;b=0x32;break;
140
+ case 'linen':r=0xFA;g=0xF0;b=0xE6;break;
141
+ case 'magenta':r=0xFF;g=0x00;b=0xFF;break;
142
+ case 'maroon':r=0x80;g=0x00;b=0x00;break;
143
+ case 'mediumaquamarine':r=0x66;g=0xCD;b=0xAA;break;
144
+ case 'mediumblue':r=0x00;g=0x00;b=0xCD;break;
145
+ case 'mediumorchid':r=0xBA;g=0x55;b=0xD3;break;
146
+ case 'mediumpurple':r=0x93;g=0x70;b=0xDB;break;
147
+ case 'mediumseagreen':r=0x3C;g=0xB3;b=0x71;break;
148
+ case 'mediumslateblue':r=0x7B;g=0x68;b=0xEE;break;
149
+ case 'mediumspringgreen':r=0x00;g=0xFA;b=0x9A;break;
150
+ case 'mediumturquoise':r=0x48;g=0xD1;b=0xCC;break;
151
+ case 'mediumvioletred':r=0xC7;g=0x15;b=0x85;break;
152
+ case 'midnightblue':r=0x19;g=0x19;b=0x70;break;
153
+ case 'mintcream':r=0xF5;g=0xFF;b=0xFA;break;
154
+ case 'mistyrose':r=0xFF;g=0xE4;b=0xE1;break;
155
+ case 'moccasin':r=0xFF;g=0xE4;b=0xB5;break;
156
+ case 'navajowhite':r=0xFF;g=0xDE;b=0xAD;break;
157
+ case 'navy':r=0x00;g=0x00;b=0x80;break;
158
+ case 'oldlace':r=0xFD;g=0xF5;b=0xE6;break;
159
+ case 'olive':r=0x80;g=0x80;b=0x00;break;
160
+ case 'olivedrab':r=0x6B;g=0x8E;b=0x23;break;
161
+ case 'orange':r=0xFF;g=0xA5;b=0x00;break;
162
+ case 'orangered':r=0xFF;g=0x45;b=0x00;break;
163
+ case 'orchid':r=0xDA;g=0x70;b=0xD6;break;
164
+ case 'palegoldenrod':r=0xEE;g=0xE8;b=0xAA;break;
165
+ case 'palegreen':r=0x98;g=0xFB;b=0x98;break;
166
+ case 'paleturquoise':r=0xAF;g=0xEE;b=0xEE;break;
167
+ case 'palevioletred':r=0xDB;g=0x70;b=0x93;break;
168
+ case 'papayawhip':r=0xFF;g=0xEF;b=0xD5;break;
169
+ case 'peachpuff':r=0xFF;g=0xDA;b=0xB9;break;
170
+ case 'peru':r=0xCD;g=0x85;b=0x3F;break;
171
+ case 'pink':r=0xFF;g=0xC0;b=0xCB;break;
172
+ case 'plum':r=0xDD;g=0xA0;b=0xDD;break;
173
+ case 'powderblue':r=0xB0;g=0xE0;b=0xE6;break;
174
+ case 'purple':r=0x80;g=0x00;b=0x80;break;
175
+ case 'rebeccapurple':r=0x66;g=0x33;b=0x99;break;
176
+ case 'red':r=0xFF;g=0x00;b=0x00;break;
177
+ case 'rosybrown':r=0xBC;g=0x8F;b=0x8F;break;
178
+ case 'royalblue':r=0x41;g=0x69;b=0xE1;break;
179
+ case 'saddlebrown':r=0x8B;g=0x45;b=0x13;break;
180
+ case 'salmon':r=0xFA;g=0x80;b=0x72;break;
181
+ case 'sandybrown':r=0xF4;g=0xA4;b=0x60;break;
182
+ case 'seagreen':r=0x2E;g=0x8B;b=0x57;break;
183
+ case 'seashell':r=0xFF;g=0xF5;b=0xEE;break;
184
+ case 'sienna':r=0xA0;g=0x52;b=0x2D;break;
185
+ case 'silver':r=0xC0;g=0xC0;b=0xC0;break;
186
+ case 'skyblue':r=0x87;g=0xCE;b=0xEB;break;
187
+ case 'slateblue':r=0x6A;g=0x5A;b=0xCD;break;
188
+ case 'slategray':r=0x70;g=0x80;b=0x90;break;
189
+ case 'slategrey':r=0x70;g=0x80;b=0x90;break;
190
+ case 'snow':r=0xFF;g=0xFA;b=0xFA;break;
191
+ case 'springgreen':r=0x00;g=0xFF;b=0x7F;break;
192
+ case 'steelblue':r=0x46;g=0x82;b=0xB4;break;
193
+ case 'tan':r=0xD2;g=0xB4;b=0x8C;break;
194
+ case 'teal':r=0x00;g=0x80;b=0x80;break;
195
+ case 'thistle':r=0xD8;g=0xBF;b=0xD8;break;
196
+ case 'tomato':r=0xFF;g=0x63;b=0x47;break;
197
+ case 'turquoise':r=0x40;g=0xE0;b=0xD0;break;
198
+ case 'violet':r=0xEE;g=0x82;b=0xEE;break;
199
+ case 'wheat':r=0xF5;g=0xDE;b=0xB3;break;
200
+ case 'white':r=0xFF;g=0xFF;b=0xFF;break;
201
+ case 'whitesmoke':r=0xF5;g=0xF5;b=0xF5;break;
202
+ case 'yellow':r=0xFF;g=0xFF;b=0x00;break;
203
+ case 'yellowgreen':r=0x9A;g=0xCD;b=0x32;break;
204
+ }
205
+ this.r = r;
206
+ this.g = g;
207
+ this.b = b;
208
+ }
209
+ }
210
+ else if(value.length == 3 || value.length == 4){
211
+ this.r = value[0];
212
+ this.g = value[1];
213
+ this.b = value[2];
214
+ if(value.length == 4){
215
+ this.a = value[3];
216
+ }
217
+ }
218
+ }
219
+
220
+ toString(){
221
+ var R = Math.round;
222
+ var X = Math.max;
223
+ var N = Math.min;
224
+ if(this.a == 1)
225
+ return "rgb(" + N(255, X(0, R(this.r))) + ", " + N(255, X(0, R(this.g))) + ", " + N(255, X(0, R(this.b))) + ")";
226
+ else
227
+ return "rgba(" + N(255, X(0, R(this.r))) + ", " + N(255, X(0, R(this.g))) + ", " + N(255, X(0, R(this.b))) + ", " + N(1, X(0, this.a)) + ")";
228
+ }
229
+ }
@@ -0,0 +1,20 @@
1
+ import { floatRegex } from "../../dot-util";
2
+ import CssDataType from "./css-data-type";
3
+
4
+ export default class CssComplex extends CssDataType{
5
+ parts: string[];
6
+ numbers: string;
7
+ constructor(value){
8
+ super("complex");
9
+ this.parts = (" " + value + " ").split(floatRegex);
10
+ this.numbers = value.match(floatRegex);
11
+ }
12
+
13
+ toString(){
14
+ var ret = this.parts[0];
15
+ for(var i = 0; i < this.numbers.length; i++){
16
+ ret += this.numbers[i] + this.parts[i+1];
17
+ }
18
+ return ret;
19
+ }
20
+ }
@@ -0,0 +1,9 @@
1
+ export declare type CssDataTypeToken = "url"|"number"|"length"|"angle"|"color"|"transformation"|"complex"|"unknown";
2
+
3
+ export default abstract class CssDataType{
4
+ type: CssDataTypeToken;
5
+
6
+ constructor(type: CssDataTypeToken){
7
+ this.type = type;
8
+ }
9
+ }
@@ -0,0 +1,20 @@
1
+ import { floatRegex } from "../../dot-util";
2
+ import CssDataType from "./css-data-type";
3
+
4
+ //TODO: this should support multiple lengths.
5
+ // TODO: add some test cases to test these.
6
+ export default class CssLength extends CssDataType{
7
+ length: number;
8
+ units: string;
9
+ constructor (value:string|number){
10
+ super("length")
11
+ value = value || "0px";
12
+ if(!isNaN(value as number)) value = Math.round(value as number) + "px";
13
+ this.length = Number((value as string).match(floatRegex)[0]);
14
+ this.units = (value as string).split(floatRegex)[1] || "px";
15
+ }
16
+
17
+ toString(){
18
+ return `${this.length}${this.units}`;
19
+ }
20
+ }
@@ -0,0 +1,12 @@
1
+ import CssDataType from "./css-data-type";
2
+
3
+ export default class CssNumber extends CssDataType{
4
+ value: number;
5
+ constructor(value){
6
+ super("number");
7
+ this.value = Number(value);
8
+ }
9
+ toString(){
10
+ return this.value;
11
+ }
12
+ }
@@ -0,0 +1,220 @@
1
+ import { isF } from "../../dot-util";
2
+ import {AllAngleUnits, AllLengthUnits} from "../unit-function-tables";
3
+ import { BasicCommonValues, ITransformationContext, NumericAngle, NumericLength } from "../i-dotcss";
4
+ import dotcss from "../style-builder";
5
+ import CssAngle from "./css-angle";
6
+ import CssDataType from "./css-data-type";
7
+ import CssLength from "./css-length";
8
+
9
+ export default class CssTransform extends CssDataType{
10
+
11
+ transformations: Array<{
12
+ transformation: string,
13
+ args: Array<any>
14
+ }>;
15
+ finalMatrix: number[];
16
+ simpleValue: string;
17
+
18
+ constructor(value){
19
+ super("transformation");
20
+ this.transformations = [];
21
+ //this.finalMatrix = [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];
22
+ if(typeof value == "string"){
23
+ //this.value = "matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";
24
+ this.simpleValue = value;
25
+ return; //?? Need a better way to handle this.
26
+ }
27
+ else if(isF(value)){
28
+ value(this);
29
+ }
30
+ //var ret = {value: value, type: cssDataType};
31
+
32
+ // The old way of doing transformations was that it was set up to accept a big string. The added complexity was to support animations.
33
+ // The new way is to use the builder. But I might want to come back and revisit the idea of accepting a string.
34
+ // For instance, a use case of accepting a string for a transformation is if we're trying to animate transforms generated by another framework.
35
+ // Not sure if that's realistic.
36
+ // var transformations = value.split(/\)\s*/); transformations.pop(); for(var i = 0; i < transformations.length; i++) transformations[i] += ")";
37
+ // // var cos = Math.cos; var sin = Math.sin; var tan = Math.tan;
38
+ // for(var t = 0; t < transformations.length; t++){
39
+ // var trans = transformations[t].trim();
40
+ // var parts = trans.split(/[\(\)]/);
41
+ // var func = parts[0]
42
+ // var p = parts[1].split(/\s*,\s*/)
43
+
44
+ // if(this[func]){
45
+ // this[func].apply(this, p);
46
+ // }
47
+ // }
48
+ }
49
+
50
+ toString(){
51
+ if(this.simpleValue){
52
+ return this.simpleValue;
53
+ }
54
+
55
+ var ret = "";
56
+ for(var i = 0; i < this.transformations.length; i++){
57
+ var t = this.transformations[i];
58
+ ret += t.transformation + "(";
59
+ for(var k = 0; k < t.args.length; k++){
60
+ ret += t.args[k].toString() + ",";
61
+ }
62
+ ret = ret.substring(0, ret.length - 1);
63
+ ret += ") ";
64
+ }
65
+ return ret.trim();
66
+ }
67
+
68
+ private appendTransformString(transformation, args){
69
+ //this.finalMatrix = dotcss.matrixMultiply3D(m, this.finalMatrix);
70
+ this.transformations.push({transformation: transformation, args: args});
71
+ /*if(this.value.length > 0) this.value += " ";
72
+ this.value += transformation + "(";
73
+ for(var i = 0; i < args.length; i++){
74
+ this.value += args[i] + (i == args.length -1 ? "" : ",")
75
+ }*/
76
+ return this;
77
+ }
78
+
79
+ matrix3d(a1:number, b1:number, c1:number, d1:number, a2:number, b2:number, c2:number, d2:number, a3:number, b3:number, c3:number, d3:number, a4:number, b4:number, c4:number, d4:number){
80
+ // Why do we need this again?
81
+ // Going to try to remove it to see what breaks. I believe it's used for animations.
82
+ // this.finalMatrix = dotcss.matrixMultiply3D(arguments as unknown as Array<number>, this.finalMatrix);
83
+ return this.appendTransformString("matrix3d", arguments);
84
+ }
85
+
86
+ matrix(a: number, b: number, c: number, d: number, tx: number, ty: number){
87
+ return this.appendTransformString("matrix", arguments);
88
+ }
89
+
90
+ translate(x:NumericLength,y?:NumericLength){
91
+ return arguments.length == 1
92
+ ? this.appendTransformString("translate", [new CssLength(x)]/*, [1,0,0,0,0,1,0,0,0,0,1,0,x,0,0,1]*/)
93
+ : this.appendTransformString("translate", [new CssLength(x), new CssLength(y)]/*, [1,0,0,0,0,1,0,0,0,0,1,0,x,y,0,1]*/);
94
+ }
95
+
96
+ translate3d(x:NumericLength,y:NumericLength,z:NumericLength){
97
+ return this.appendTransformString("translate3d", [new CssLength(x), new CssLength(y), new CssLength(z)]/*, [1,0,0,0,0,1,0,0,0,0,1,0,x,y,z,1]*/);
98
+ }
99
+
100
+ translateX(x:NumericLength){
101
+
102
+ //var x = dotcss.lengthToPx(p[0]);
103
+ //this.updateValue("translateX", [new CssLength(x + "px")]/*, [1,0,0,0,0,1,0,0,0,0,1,0,x,0,0,1]*/);
104
+ return this.appendTransformString("translateX", [new CssLength(x)]);
105
+ }
106
+
107
+ translateY(y:NumericLength){
108
+ //var y = dotcss.lengthToPx(p[0]);
109
+ //this.updateValue("translateY", [new CssLength(y + "px")]/*, [1,0,0,0,0,1,0,0,0,0,1,0,0,y,0,1]*/);
110
+ return this.appendTransformString("translateY", [new CssLength(y)]);
111
+ }
112
+
113
+ translateZ(z:NumericLength){
114
+
115
+ //var z = dotcss.lengthToPx(p[0]);
116
+ //this.updateValue("translateZ", [new CssLength(z + "px")]/*, [1,0,0,0,0,1,0,0,0,0,1,0,0,0,z,1]*/);
117
+ return this.appendTransformString("translateZ", [new CssLength(z)]);
118
+ }
119
+
120
+ scale(x:number,y?:number){
121
+ return this.appendTransformString("scale", [x,y??1]/*, [x,0,0,0,0,y,0,0,0,0,1,0,0,0,0,1]*/);
122
+ }
123
+
124
+ scale3d(x:number,y:number,z:number){
125
+ return this.appendTransformString("scale3d", [x,y,z]/*, [p[0],0,0,0,0,p[1],0,0,0,0,p[2],0,0,0,0,1]*/);
126
+ }
127
+
128
+ scaleX(x:number){
129
+ //this.updateValue("scaleX", p/*, [p[0],0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]*/);
130
+ return this.appendTransformString("scaleX", [x]);
131
+ }
132
+
133
+ scaleY(y:number){
134
+ //this.updateValue("scaleY", p/*, [1,0,0,0,0,p[0],0,0,0,0,1,0,0,0,0,1]*/);
135
+ return this.appendTransformString("scaleY", [y]);
136
+ }
137
+
138
+ scaleZ(z:number){
139
+ //this.updateValue("scaleZ", p/*, [1,0,0,0,0,1,0,0,0,0,p[0],0,0,0,0,1]*/);
140
+ return this.appendTransformString("scaleZ", [z]);
141
+ }
142
+
143
+ rotate(x: NumericAngle){
144
+ // var a = Util.angleToDeg(x);
145
+ return this.appendTransformString("rotate", [new CssAngle(x)]/*, [Math.cos(a),Math.sin(a),0,0,-Math.sin(axxx),Math.cos(axxx),0,0,0,0,1,0,0,0,0,1]*/);
146
+ }
147
+
148
+ rotate3d(x: number, y: number, z: number, a: NumericAngle){
149
+
150
+ return this.appendTransformString("rotate3d", [x, y, z, new CssAngle(a)]/*,
151
+ [1+C*(x*x-1), z*S+x*y*C, -y*S+x*z*C, 0,
152
+ -z*S+x*y*C, 1+C*(y*y-1), x*S+y*z*C, 0,
153
+ y*S+x*z*C, -x*S+y*z*C, 1+C*(z*z-1), 0,
154
+ 0, 0, 0, 1]*/
155
+ );
156
+ }
157
+
158
+ // Manually create the 4 unit functions for rotate 3d since the arg structure is mixed.
159
+ rotate3dDeg(x: number, y: number, z: number, a: number){return this.rotate3d(x,y,z,a);}
160
+ rotate3dRad(x: number, y: number, z: number, a: number){return this.rotate3d(x,y,z,`${a}rad`);}
161
+ rotate3dGrad(x: number, y: number, z: number, a: number){return this.rotate3d(x,y,z,`${a}grad`);}
162
+ rotate3dTurn(x: number, y: number, z: number, a: number){return this.rotate3d(x,y,z,`${a}turn`);}
163
+
164
+ rotateX(x: NumericAngle){
165
+ return this.appendTransformString("rotateX", [new CssAngle(x)]/*, [1,0,0,0,0,Math.cos(axx),Math.sin(axx),0,0,-Math.sin(axx),Math.cos(axx),0,0,0,0,1]*/);
166
+ }
167
+
168
+ rotateY(y: NumericAngle){
169
+ return this.appendTransformString("rotateY", [new CssAngle(y)]);
170
+ }
171
+
172
+ rotateZ(z: NumericAngle){
173
+ return this.appendTransformString("rotateZ", [new CssAngle(z)]);
174
+ }
175
+
176
+ skew(x: NumericAngle, y?: NumericAngle){
177
+
178
+ return arguments.length == 1
179
+ ? this.appendTransformString("skew", [new CssAngle(x)]/*, [1,0,0,0,Math.tan(axxxxx),1,0,0,0,0,1,0,0,0,0,1]*/)
180
+ : this.appendTransformString("skew", [new CssAngle(x), new CssAngle(y)]/*, [1,Math.tan(axxxy),0,0,Math.tan(axxxx),1,0,0,0,0,1,0,0,0,0,1]*/);
181
+ }
182
+
183
+ skewX(x: NumericAngle){
184
+ return this.appendTransformString("skewX", [new CssAngle(x)]);
185
+ }
186
+
187
+ skewY(y: NumericAngle){
188
+ return this.appendTransformString("skewY", [new CssAngle(y)]);
189
+ }
190
+
191
+ perspective(d: NumericLength){
192
+ return this.appendTransformString("perspective", [new CssLength(d)]/*, [1,0,0,0,0,1,0,0,0,0,1,0,0,0,dotcss.formatNumberValue(-1 / d),1]*/);
193
+ }
194
+ }
195
+
196
+ // Extend the above with special length and degree functions.
197
+
198
+ const lengthFuncs = "translate|translate3d|translateX|translateY|translateZ|perspective".split("|");
199
+ const angleFuncs = "rotate|rotateX|rotateY|rotateZ|skew|skewX|skewY".split("|");
200
+
201
+ for(let i = 0; i < lengthFuncs.length; i++){
202
+ let F = lengthFuncs[i];
203
+ for(let u = 0; u < AllLengthUnits.length; u++){
204
+ let uu = AllLengthUnits[u];
205
+ CssTransform.prototype[F + (uu.jsName || uu.unit)] = function(){
206
+ for(var i = 0; i < arguments.length; i++) arguments[i] = arguments[i] + uu.unit.toLowerCase();
207
+ return CssTransform.prototype[F].apply(this, arguments);
208
+ }
209
+ }
210
+ }
211
+ for(let i = 0; i < angleFuncs.length; i++){
212
+ let F = angleFuncs[i];
213
+ for(let u = 0; u < AllAngleUnits.length; u++){
214
+ let uu = AllAngleUnits[u];
215
+ CssTransform.prototype[F + (uu.unit)] = function(){
216
+ for(var i = 0; i < arguments.length; i++) arguments[i] = arguments[i] + uu.unit.toLowerCase();
217
+ return CssTransform.prototype[F].apply(this, arguments);
218
+ }
219
+ }
220
+ }
@@ -0,0 +1,13 @@
1
+ import CssDataType from "./css-data-type";
2
+
3
+ export default class CssUnknown extends CssDataType{
4
+ value: any;
5
+ constructor(value: any){
6
+ super("unknown");
7
+ this.value = value;
8
+ }
9
+
10
+ toString(){
11
+ return this.value;
12
+ }
13
+ }
@@ -0,0 +1,41 @@
1
+ import CssDataType from "./css-data-type";
2
+
3
+ export default class CssUrl extends CssDataType{
4
+ url: Array<string>;
5
+ constructor(value){
6
+ super("url");
7
+ this.url = null;
8
+ if(!value || value.length == 0 || (value.length == 1 && value[0] == "" || value[0] == "none" || value[0] == "initial" || value[0] == "inherit")){
9
+ this.url = null;
10
+ }
11
+ else{
12
+ this.url = [];
13
+ for(var i = 0; i < value.length; i++){
14
+ var currentURL = "";
15
+ if(value[i].toLowerCase().indexOf("url") === 0){
16
+ var url = value[i].substring(value[i].indexOf("("), value[i].lastIndexOf(")")).trim();
17
+ if((url.indexOf("\"") && url.lastIndexOf("\"") == url.length - 1) ||
18
+ (url.indexOf("'") && url.lastIndexOf("'") == url.length - 1)){
19
+ url = url.substring(1, url.length - 1);
20
+ }
21
+ this.url.push(url);
22
+ }
23
+ else{
24
+ this.url.push(value[i]);
25
+ }
26
+ }
27
+ }
28
+ }
29
+
30
+ toString(): string{
31
+ if(!this.url) return "none";
32
+ else
33
+ {
34
+ var ret = [];
35
+ for(var i = 0; i < this.url.length; i++){
36
+ ret.push("url(\"" + this.url[i] + "\")");
37
+ }
38
+ return ret.join(", ");
39
+ }
40
+ }
41
+ }