dothtml 4.8.6 → 5.0.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 (80) hide show
  1. package/{jest.config.js → jest.config.ts} +19 -16
  2. package/lib/arg-callback-obj.d.ts +29 -0
  3. package/lib/built-in-components/nav-link.d.ts +8 -0
  4. package/lib/built-in-components/router.d.ts +57 -0
  5. package/lib/component.d.ts +73 -0
  6. package/lib/dot-component-legacy.d.ts +0 -0
  7. package/lib/dot-document.d.ts +0 -0
  8. package/lib/dot-util.d.ts +13 -0
  9. package/lib/dot.d.ts +5 -0
  10. package/lib/dothtml.d.ts +21 -0
  11. package/lib/dothtml.js +2 -0
  12. package/lib/dothtml.js.LICENSE.txt +1 -0
  13. package/lib/err.d.ts +2 -0
  14. package/lib/event-bus.d.ts +10 -0
  15. package/lib/i-dot.d.ts +674 -0
  16. package/lib/i-dotcss.d.ts +821 -0
  17. package/lib/node-polyfill.d.ts +2 -0
  18. package/lib/observable-array.d.ts +49 -0
  19. package/lib/style-builder.d.ts +3 -0
  20. package/package.json +11 -5
  21. package/readme.md +3 -2
  22. package/src/{arg-callback-obj.js → arg-callback-obj.ts} +18 -6
  23. package/src/built-in-components/nav-link.ts +21 -0
  24. package/src/built-in-components/router.ts +315 -0
  25. package/src/component.ts +369 -0
  26. package/src/dot-component-legacy.ts +79 -0
  27. package/src/dot-document.ts +0 -0
  28. package/src/dot-util.ts +33 -0
  29. package/src/dot.ts +1147 -0
  30. package/src/dothtml.ts +33 -0
  31. package/src/err.ts +22 -0
  32. package/src/event-bus.ts +39 -0
  33. package/src/i-dot.ts +787 -0
  34. package/src/i-dotcss.ts +911 -0
  35. package/src/node-polyfill.ts +11 -0
  36. package/src/{observable-array.js → observable-array.ts} +10 -5
  37. package/src/{style-builder.js → style-builder.ts} +219 -183
  38. package/tsconfig.json +99 -0
  39. package/unittests/advanced-bindings.test.ts +421 -0
  40. package/unittests/{array-evaluation.test.js → array-evaluation.test.ts} +1 -1
  41. package/unittests/{basic-functionality.test.js → basic-functionality.test.ts} +14 -10
  42. package/unittests/class-binding.test.ts +227 -0
  43. package/unittests/component-decorator.-.ts +14 -0
  44. package/unittests/components-data.test.ts +153 -0
  45. package/unittests/components.test.ts +257 -0
  46. package/unittests/computed.test.ts +35 -0
  47. package/unittests/{core.js → core.ts} +5 -2
  48. package/unittests/element-and-attribute-coverage.test.ts +472 -0
  49. package/unittests/hooks.test.ts +67 -0
  50. package/unittests/immutable-if.test.ts +19 -0
  51. package/unittests/input-bindings.test.ts +166 -0
  52. package/unittests/integration.test.ts +5 -0
  53. package/unittests/{iterations.test.js → iterations.test.ts} +5 -5
  54. package/unittests/logic.test.ts +18 -0
  55. package/unittests/refs.test.ts +36 -0
  56. package/unittests/routing.-.ts +56 -0
  57. package/unittests/{scopes.test.js → scopes.test.ts} +5 -5
  58. package/unittests/special-tags.test.ts +39 -0
  59. package/unittests/styles.test.ts +9 -0
  60. package/unittests/{testpage.js → testpage.ts} +2 -0
  61. package/unittests/{wait.test.js → wait.test.ts} +8 -5
  62. package/webpack.config.js +13 -1
  63. package/lib/dothtml.min.js +0 -1
  64. package/src/component.js +0 -305
  65. package/src/err.js +0 -20
  66. package/src/event-bus.js +0 -40
  67. package/src/index.js +0 -1453
  68. package/src/util.js +0 -13
  69. package/unittests/advanced-bindings.test.js +0 -386
  70. package/unittests/class-binding.test.js +0 -53
  71. package/unittests/components-data.test.js +0 -97
  72. package/unittests/components.test.js +0 -151
  73. package/unittests/computed.test.js +0 -36
  74. package/unittests/hooks.test.js +0 -57
  75. package/unittests/immutable-if.test.js +0 -15
  76. package/unittests/input-bindings.test.js +0 -155
  77. package/unittests/integration.test.js +0 -6
  78. package/unittests/logic.test.js +0 -18
  79. package/unittests/routing.-.js +0 -56
  80. package/unittests/special-tags.test.js +0 -32
package/src/util.js DELETED
@@ -1,13 +0,0 @@
1
- // Polyfill for Object.keys(...).forEach.
2
-
3
- export function eachK(obj, cb){
4
- if(obj){
5
- var lst = Object.keys(obj);
6
- for(var i = 0; i < lst.length; i++) cb(lst[i], obj[lst[i]]);
7
- }
8
- }
9
-
10
- export function isF(v){
11
- return v && v.constructor && v.call && v.apply;
12
- }
13
-
@@ -1,386 +0,0 @@
1
- import addTest from "./core";
2
- import dot from "../src/index";
3
-
4
- addTest("Bind to number prop.", function(){
5
- const MyComp = dot.component({
6
- builder(){
7
- this.myProp = 0;
8
- var ret = dot.span(()=>this.myProp);
9
- return ret;
10
- },
11
- ready(){
12
- this.myProp++;
13
- },
14
- props:["myProp"]
15
- });
16
-
17
- return dot.h(MyComp());
18
- }, "<span>1</span>");
19
-
20
- addTest("Bind to calculated prop.", function(){
21
- const MyComp = dot.component({
22
- builder(){
23
- this.myProp = 0;
24
- var ret = dot.div(()=>dot.p("I have " + this.myProp + "!"));
25
- return ret;
26
- },
27
- ready(){
28
- this.myProp+=10;
29
- },
30
- props:["myProp"]
31
- });
32
-
33
- return dot.h(MyComp());
34
- }, "<div><p>I have 10!</p></div>");
35
-
36
- addTest("Bind to array.", function(){
37
- const MyComp = dot.component({
38
- builder(data){
39
- this.myData = data;
40
- return dot.ul(
41
- dot.each(()=>this.myData, (v, i)=>{
42
- return dot.li(v.value)
43
- })
44
- );
45
- },
46
- ready(){
47
- this.myData.push({value: 5});
48
- this.myData.push({value: 3});
49
- this.myData.push({value: 1});
50
- },
51
- props:["myData"]
52
- });
53
-
54
- var data = [];
55
-
56
- return dot.h(MyComp(data));
57
-
58
- }, "<ul><li>5</li><li>3</li><li>1</li></ul>"); // If stops working, add a delay.
59
-
60
- addTest("Bind to start of array.", function(){
61
- const MyComp = dot.component({
62
- builder(data){
63
- this.myData = data;
64
- return dot.ul(
65
- dot.each(()=>this.myData, (v, i)=>{
66
- return dot.li(v.value)
67
- })
68
- );
69
- },
70
- ready(){
71
- this.myData.push({value: 5});
72
- this.myData.push({value: 3});
73
- this.myData.unshift({value: 1});
74
- },
75
- props:["myData"]
76
- });
77
-
78
- var data = [];
79
-
80
- return dot.h(MyComp(data));
81
-
82
- }, "<ul><li>1</li><li>5</li><li>3</li></ul>");
83
-
84
- addTest("Bind to array out of order.", function(){
85
- const MyComp = dot.component({
86
- builder(data){
87
- this.myData = data;
88
- return dot.ul(
89
- dot.each(()=>this.myData, (v, i)=>{
90
- return dot.li(v.value)
91
- })
92
- );
93
- },
94
- ready(){
95
- this.myData.push({value: 5});
96
- this.myData.push({value: 3});
97
- this.myData.splice(1, 0, {value: 1});
98
- },
99
- props:["myData"]
100
- });
101
-
102
- var data = [];
103
-
104
- return dot.h(MyComp(data));
105
-
106
- }, "<ul><li>5</li><li>1</li><li>3</li></ul>");
107
-
108
- addTest("Bind 2 to array out of order.", function(){
109
- const MyComp = dot.component({
110
- builder(data){
111
- this.myData = data;
112
- return dot.ul(
113
- dot.each(()=>this.myData, (v, i)=>{
114
- return dot.li(v.value)
115
- })
116
- );
117
- },
118
- ready(){
119
- this.myData.push({value: 5});
120
- this.myData.push({value: 3});
121
- this.myData.splice(1, 0, {value: "a"}, {value: "b"});
122
- },
123
- props:["myData"]
124
- });
125
-
126
- var data = [];
127
-
128
- return dot.h(MyComp(data));
129
-
130
- }, "<ul><li>5</li><li>a</li><li>b</li><li>3</li></ul>");
131
-
132
- addTest("Remove from bound array.", function(){
133
- const MyComp = dot.component({
134
- builder(data){
135
- this.myData = data;
136
- return dot.ul(
137
- dot.each(()=>this.myData, (v, i)=>{
138
- return dot.li(v.value)
139
- })
140
- );
141
- },
142
- ready(){
143
- this.myData.push({value: 5});
144
- this.myData.push({value: "A"});
145
- this.myData.push({value: "B"});
146
- this.myData.push({value: 1});
147
- // this.myData.splice(1,2);
148
- this.myData.splice(1,2, {value: 3});
149
- },
150
- props:["myData"]
151
- });
152
-
153
- var data = [];
154
-
155
- return dot.h(MyComp(data));
156
-
157
- }, "<ul><li>5</li><li>3</li><li>1</li></ul>");
158
-
159
- addTest("Set value in bound array.", function(){
160
- const MyComp = dot.component({
161
- builder(data){
162
- this.myData = data;
163
- return dot.ul(
164
- dot.each(()=>this.myData, (v, i)=>{
165
- return dot.li(v.value)
166
- })
167
- );
168
- },
169
- ready(){
170
- this.myData.push({value: 5});
171
- this.myData.push({value: 3});
172
- this.myData.push({value: 1});
173
-
174
- this.myData[1] = {value: "YES!"};
175
- },
176
- props:["myData"]
177
- });
178
-
179
- var data = [];
180
-
181
- return dot.h(MyComp(data));
182
-
183
- }, "<ul><li>5</li><li>YES!</li><li>1</li></ul>"); // If stops working, add a delay.
184
-
185
- addTest("Conditional rendering.", function(){
186
- const MyComp = dot.component({
187
- builder(){
188
- this.myPropA = false;
189
- this.myPropB = true;
190
- var ret = dot.div(
191
- dot.div("OUTER1")
192
- .if(()=>this.myPropA, ()=>dot
193
- .p("A"))
194
- .if(()=>this.myPropB, ()=>dot
195
- .p("B"))
196
- .div("OUTER2")
197
- );
198
- return ret;
199
- },
200
- ready(){
201
- this.myPropA = !this.myPropA;
202
- this.myPropB = !this.myPropB;
203
- },
204
- props:["myPropA", "myPropB"]
205
- });
206
-
207
- return dot.h(MyComp());
208
- }, "<div><div>OUTER1</div><p>A</p><div>OUTER2</div></div>");
209
-
210
- addTest("Conditional rendering - out of order.", function(){
211
- const MyComp = dot.component({
212
- builder(){
213
- this.myPropA = false;
214
- this.myPropB = false;
215
- this.myPropC = false;
216
- var ret = dot.div(dot.div().if(()=>this.myPropA, ()=>dot.p("A")).if(()=>this.myPropB, ()=>dot.p("B")).if(()=>this.myPropC, ()=>dot.p("C")).div());
217
- return ret;
218
- },
219
- ready(){
220
- this.myPropB = true;
221
- this.myPropC = true;
222
- this.myPropA = true;
223
- },
224
- props:["myPropA", "myPropB", "myPropC"]
225
- });
226
-
227
- return dot.h(MyComp());
228
- }, "<div><div></div><p>A</p><p>B</p><p>C</p><div></div></div>");
229
-
230
-
231
- addTest("Conditional rendering - if true->false else.", function(){
232
- const MyComp = dot.component({
233
- builder(){
234
- this.myProp = false;
235
- var ret = dot.div(
236
- dot.div("OUTER1")
237
- .if(()=>this.myProp, ()=>dot
238
- .p("A"))
239
- .else(()=>dot
240
- .p("B"))
241
- .div("OUTER2")
242
- );
243
- return ret;
244
- },
245
- ready(){
246
- this.myProp = !this.myProp;
247
- },
248
- props:["myProp"]
249
- });
250
-
251
- return dot.h(MyComp());
252
- }, "<div><div>OUTER1</div><p>A</p><div>OUTER2</div></div>");
253
-
254
-
255
- addTest("Conditional rendering - if true->false elseif true.", function(){
256
- const MyComp = dot.component({
257
- builder(){
258
- this.myProp = true;
259
- this.myElseProp = true;
260
- var ret = dot.div(
261
- dot.div("OUTER1")
262
- .if(()=>this.myProp, ()=>dot
263
- .p("A"))
264
- .elseif(()=>this.myElseProp, ()=>dot
265
- .p("B"))
266
- .else(()=>dot
267
- .p("C"))
268
- .div("OUTER2")
269
- );
270
- return ret;
271
- },
272
- ready(){
273
- this.myProp = false;
274
- },
275
- props:["myProp", "myElseProp"]
276
- });
277
-
278
- return dot.h(MyComp());
279
- }, "<div><div>OUTER1</div><p>B</p><div>OUTER2</div></div>");
280
-
281
- addTest("Conditional rendering - if true->false elseif true->false.", function(){
282
- const MyComp = dot.component({
283
- builder(){
284
- this.myProp = true;
285
- this.myElseProp = true;
286
- var ret = dot.div(
287
- dot.div("OUTER1")
288
- .if(()=>this.myProp, ()=>dot
289
- .p("A"))
290
- .elseif(()=>this.myElseProp, ()=>dot
291
- .p("B"))
292
- .else(()=>dot
293
- .p("C"))
294
- .div("OUTER2")
295
- );
296
- return ret;
297
- },
298
- ready(){
299
- this.myProp = false;
300
- this.myElseProp = false;
301
- },
302
- props:["myProp", "myElseProp"]
303
- });
304
-
305
- return dot.h(MyComp());
306
- }, "<div><div>OUTER1</div><p>C</p><div>OUTER2</div></div>");
307
-
308
- addTest("Conditional rendering - if true->false elseif false->true.", function(){
309
- const MyComp = dot.component({
310
- builder(){
311
- this.myProp = true;
312
- this.myElseProp = false;
313
- var ret = dot.div(
314
- dot.div("OUTER1")
315
- .if(()=>this.myProp, ()=>dot
316
- .p("A"))
317
- .elseif(()=>this.myElseProp, ()=>dot
318
- .p("B"))
319
- .else(()=>dot
320
- .p("C"))
321
- .div("OUTER2")
322
- );
323
- return ret;
324
- },
325
- ready(){
326
- this.myProp = false;
327
- this.myElseProp = true;
328
- },
329
- props:["myProp", "myElseProp"]
330
- });
331
-
332
- return dot.h(MyComp());
333
- }, "<div><div>OUTER1</div><p>B</p><div>OUTER2</div></div>");
334
-
335
- addTest("Conditional rendering - if true else true.", function(){
336
- const MyComp = dot.component({
337
- builder(){
338
- this.myProp = false;
339
- this.myElseProp = true;
340
- var ret = dot.div(
341
- dot.div("OUTER1")
342
- .if(()=>this.myProp, ()=>dot
343
- .p("A"))
344
- .elseif(()=>this.myElseProp, ()=>dot
345
- .p("B"))
346
- .else(()=>dot
347
- .p("C"))
348
- .div("OUTER2")
349
- );
350
- return ret;
351
- },
352
- ready(){
353
- this.myProp = true;
354
- },
355
- props:["myProp", "myElseProp"]
356
- });
357
-
358
- return dot.h(MyComp());
359
- }, "<div><div>OUTER1</div><p>A</p><div>OUTER2</div></div>");
360
-
361
- addTest("Conditional rendering - if true else false->true.", function(){
362
- const MyComp = dot.component({
363
- builder(){
364
- this.myProp = false;
365
- this.myElseProp = false;
366
- var ret = dot.div(
367
- dot.div("OUTER1")
368
- .if(()=>this.myProp, ()=>dot
369
- .p("A"))
370
- .elseif(()=>this.myElseProp, ()=>dot
371
- .p("B"))
372
- .else(()=>dot
373
- .p("C"))
374
- .div("OUTER2")
375
- );
376
- return ret;
377
- },
378
- ready(){
379
- this.myProp = true;
380
-
381
- },
382
- props:["myProp", "myElseProp"]
383
- });
384
-
385
- return dot.h(MyComp());
386
- }, "<div><div>OUTER1</div><p>A</p><div>OUTER2</div></div>");
@@ -1,53 +0,0 @@
1
- import addTest from "./core";
2
- import dot from "../src/index";
3
-
4
- addTest("Basic immutable class binding.", function(){
5
- return dot.div().class({
6
- "foo": true,
7
- "bar": false,
8
- "xyz": true
9
- })
10
- }, "<div class=\"foo xyz\"></div>");
11
-
12
- addTest("Class binding to a component property.", function(){
13
- var Component = dot.component({
14
- builder(v){
15
- this.prop = v;
16
- return dot.div().class({
17
- "foo": ()=>this.prop,
18
- "bar": ()=>!this.prop,
19
- })
20
- },
21
- props: ["prop"],
22
- ready(){
23
- this.prop = !this.prop;
24
- }
25
- });
26
-
27
- return dot.h(Component(false)).h(Component(true));
28
-
29
- }, "<div class=\"foo\"></div><div class=\"bar\"></div>");
30
-
31
- addTest("Class binding to a component property with a style.", function(){
32
- var Component = dot.component({
33
- builder(v){
34
- this.prop = v;
35
- return dot.div().class({
36
- "foo": ()=>this.prop,
37
- "bar": ()=>!this.prop,
38
- })
39
- },
40
- props: ["prop"],
41
- ready(){
42
- this.prop = !this.prop;
43
- },
44
- style(css){
45
- css("div").backgroundColor("white");
46
- css(".foo").color("red");
47
- css(".bar").color("blue");
48
- }
49
- });
50
-
51
- return dot.h(Component(false)).h(Component(true));
52
-
53
- }, "<div class=\"foo\" style=\"background-color: rgb(255, 255, 255); color: rgb(255, 0, 0);\"></div><div class=\"bar\" style=\"background-color: rgb(255, 255, 255); color: rgb(0, 0, 255);\"></div>");
@@ -1,97 +0,0 @@
1
- import addTest from "./core";
2
- import dot from "../src/index";
3
-
4
- // For testing the passing of data into and out of components via properties and events, respectively.
5
-
6
- addTest("Pass value into component.", function(){
7
- const MyComp = dot.component({
8
- builder(){
9
- this.myProp = 1;
10
- var ret = dot.span(()=>this.myProp);
11
- return ret;
12
- },
13
- props:["myProp"]
14
- });
15
-
16
- var myComp = MyComp();
17
- myComp.myProp = 2;
18
- return dot.h(myComp);
19
- }, "<span>2</span>");
20
-
21
- // TODO
22
- // addTest("Binding value into component.", function(){
23
- // const MyComp = dot.component({
24
- // builder(){
25
- // this.myProp = 1;
26
- // var ret = dot.span(()=>this.myProp);
27
- // return ret;
28
- // },
29
- // props:["myProp"]
30
- // });
31
-
32
- // var myComp = MyComp();
33
- // myComp.myProp = 2;
34
- // return dot.h(myComp);
35
- // }, "<span>2</span>");
36
-
37
- addTest("Raise event from component.", function(){
38
- const MyComp = dot.component({
39
- builder(){
40
- this.myProp = 1;
41
- var ret = dot.span(()=>this.myProp);
42
- return ret;
43
- },
44
- props:["myProp"],
45
- events:["go"],
46
- ready(){
47
- this.go(5);
48
- }
49
- });
50
-
51
- var myComp = MyComp();
52
- myComp.myProp = 2;
53
- myComp.onGo(x=>myComp.myProp=x);
54
- return dot.h(myComp);
55
- }, "<span>5</span>");
56
-
57
- addTest("Raise 2 events from component.", function(){
58
- const MyComp = dot.component({
59
- builder(){
60
- this.myProp = "1";
61
- var ret = dot.span(()=>this.myProp);
62
- return ret;
63
- },
64
- props:["myProp"],
65
- events:["go2"],
66
- ready(){
67
- this.go2("3");
68
- this.go2("4");
69
- }
70
- });
71
-
72
- var myComp = MyComp();
73
- myComp.myProp = 2;
74
- myComp.onGo2(x=>myComp.myProp+=x);
75
- return dot.h(myComp);
76
- }, "<span>234</span>");
77
-
78
- addTest("Call a method from outside a component.", function(){
79
- const MyComp = dot.component({
80
- builder(){
81
- this.myProp = 1;
82
- var ret = dot.span(()=>this.myProp);
83
- return ret;
84
- },
85
- props:["myProp"],
86
- methods:{
87
- go(v){
88
- this.myProp = v;
89
- }
90
- }
91
- });
92
-
93
- var myComp = MyComp();
94
- myComp.myProp = 2;
95
- myComp.go(5);
96
- return dot.h(myComp);
97
- }, "<span>5</span>");