@sitecore-feaas/clientside 0.1.14 → 0.1.16

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 (92) hide show
  1. package/README.md +5 -5
  2. package/build/basic.js +11 -0
  3. package/build/basic.js.map +1 -0
  4. package/build/cloud.js +22 -0
  5. package/build/cloud.js.map +1 -0
  6. package/build/components/FEAASBase.js +229 -0
  7. package/build/components/FEAASBase.js.map +1 -0
  8. package/build/components/FEAASComponent.js +84 -0
  9. package/build/components/FEAASComponent.js.map +1 -0
  10. package/build/components/FEAASLoader.js +100 -0
  11. package/build/components/FEAASLoader.js.map +1 -0
  12. package/build/components/FEAASStylesheet.js +31 -0
  13. package/build/components/FEAASStylesheet.js.map +1 -0
  14. package/build/dom.js +294 -0
  15. package/build/dom.js.map +1 -0
  16. package/build/fetch.js +56 -0
  17. package/build/fetch.js.map +1 -0
  18. package/build/ui/FEAASContext.js +68 -0
  19. package/build/ui/FEAASContext.js.map +1 -0
  20. package/build/ui/FEAASEditor.js +180 -0
  21. package/build/ui/FEAASEditor.js.map +1 -0
  22. package/build/ui/FEAASPicker.js +81 -0
  23. package/build/ui/FEAASPicker.js.map +1 -0
  24. package/build/ui/index.js +5 -0
  25. package/build/ui/index.js.map +1 -0
  26. package/dist/browser/basic.esm.js +68 -0
  27. package/dist/browser/basic.esm.js.map +1 -0
  28. package/dist/browser/basic.js +5 -4
  29. package/dist/browser/basic.js.map +1 -0
  30. package/dist/browser/index.esm.js +73 -0
  31. package/dist/browser/index.esm.js.map +1 -0
  32. package/dist/browser/index.js +8 -7
  33. package/dist/browser/index.js.map +1 -0
  34. package/dist/node/basic.esm.js +66 -0
  35. package/dist/node/basic.esm.js.map +1 -0
  36. package/dist/node/basic.js +4 -1458
  37. package/dist/node/basic.js.map +1 -0
  38. package/dist/node/index.esm.js +71 -0
  39. package/dist/node/index.esm.js.map +1 -0
  40. package/dist/node/index.js +7 -1853
  41. package/dist/node/index.js.map +1 -0
  42. package/package.json +25 -34
  43. package/scripts/build.js +76 -0
  44. package/src/basic.ts +11 -1
  45. package/src/components/FEAASBase.tsx +4 -2
  46. package/src/components/FEAASComponent.ts +7 -2
  47. package/src/components/FEAASLoader.ts +2 -0
  48. package/src/components/FEAASStylesheet.ts +2 -1
  49. package/src/{components → ui}/FEAASContext.tsx +3 -5
  50. package/src/{components → ui}/FEAASEditor.tsx +4 -4
  51. package/src/{components → ui}/FEAASPicker.tsx +11 -6
  52. package/src/ui/index.ts +4 -0
  53. package/src/ui/tsconfig.json +22 -0
  54. package/test/render.ts +0 -1
  55. package/tsconfig.json +3 -3
  56. package/tsconfig.test.json +0 -0
  57. package/types/basic.d.ts +8 -1
  58. package/types/basic.d.ts.map +1 -0
  59. package/types/cloud.d.ts +1 -0
  60. package/types/cloud.d.ts.map +1 -0
  61. package/types/components/FEAASBase.d.ts +7 -1
  62. package/types/components/FEAASBase.d.ts.map +1 -0
  63. package/types/components/FEAASComponent.d.ts +7 -1
  64. package/types/components/FEAASComponent.d.ts.map +1 -0
  65. package/types/components/FEAASLoader.d.ts +2 -1
  66. package/types/components/FEAASLoader.d.ts.map +1 -0
  67. package/types/components/FEAASStylesheet.d.ts +5 -1
  68. package/types/components/FEAASStylesheet.d.ts.map +1 -0
  69. package/types/dom.d.ts +1 -0
  70. package/types/dom.d.ts.map +1 -0
  71. package/types/fetch.d.ts +1 -0
  72. package/types/fetch.d.ts.map +1 -0
  73. package/types/tsbuildinfo +1 -1
  74. package/types/tsbuildinfo_ui +1 -0
  75. package/types/{components → ui}/FEAASContext.d.ts +3 -2
  76. package/types/ui/FEAASContext.d.ts.map +1 -0
  77. package/types/{components → ui}/FEAASEditor.d.ts +3 -2
  78. package/types/ui/FEAASEditor.d.ts.map +1 -0
  79. package/types/{components → ui}/FEAASPicker.d.ts +3 -2
  80. package/types/ui/FEAASPicker.d.ts.map +1 -0
  81. package/types/ui/index.d.ts +5 -0
  82. package/types/ui/index.d.ts.map +1 -0
  83. package/dist/browser/basic.cjs +0 -67
  84. package/dist/browser/index.cjs +0 -72
  85. package/dist/node/basic.cjs +0 -1539
  86. package/dist/node/index.cjs +0 -1936
  87. package/src/components/index.tsx +0 -7
  88. package/src/index.ts +0 -4
  89. package/test/components.js +0 -11
  90. package/test/render.js +0 -688
  91. package/types/components/index.d.ts +0 -7
  92. package/types/index.d.ts +0 -4
package/test/render.js DELETED
@@ -1,688 +0,0 @@
1
- import { JSDOM } from 'jsdom';
2
- import * as FEAAS from '../src/dom.js';
3
- import { describe, it, assert } from 'vitest';
4
- const { renderDOMElement } = FEAAS;
5
- function assertScriptLoaded(element, src) {
6
- var _a;
7
- console.log(element.closest('html').innerHTML);
8
- assert.equal((_a = Array.prototype.find.call(element.closest('html').querySelectorAll('script'), (s) => s.src == src)) === null || _a === void 0 ? void 0 : _a.src, src);
9
- }
10
- function assertRendered(input, data, expected, scripts, customizations) {
11
- var _a;
12
- function normalize(str) {
13
- return str
14
- .replace(/>\s*</g, '><')
15
- .replace(/^\s+|\n/gm, '')
16
- .replace(/>/g, '>\n')
17
- .replace(/\n+/g, '\n')
18
- .replace(/<\//g, '\n</')
19
- .trim();
20
- }
21
- const rendered = (_a = renderDOMElement(new JSDOM(input).window.document.body.firstElementChild, data, customizations)) === null || _a === void 0 ? void 0 : _a.parentElement;
22
- assert.equal(normalize(rendered === null || rendered === void 0 ? void 0 : rendered.innerHTML), normalize(new JSDOM(expected).window.document.body.innerHTML));
23
- if (scripts) {
24
- scripts.map((s) => assertScriptLoaded(rendered, s));
25
- }
26
- }
27
- function assertRenderedContent(input, data, expected, scripts, customizations) {
28
- function normalize(str) {
29
- return str
30
- .replace(/>\s*</g, '><')
31
- .replace(/^\s+|\n/gm, '')
32
- .replace(/>/g, '>\n')
33
- .replace(/\n+/g, '\n')
34
- .replace(/<\//g, '\n</')
35
- .trim();
36
- }
37
- const doc = new JSDOM('').window.document;
38
- const element = doc.createElement('div');
39
- doc.body.appendChild(element);
40
- const rendered = FEAAS.renderDOMContent(element, input, data, customizations);
41
- assert.equal(normalize(rendered === null || rendered === void 0 ? void 0 : rendered.innerHTML), normalize(new JSDOM(expected).window.document.body.innerHTML));
42
- if (scripts) {
43
- scripts.map((s) => assertScriptLoaded(rendered, s));
44
- }
45
- }
46
- describe('DOM Clientside', function () {
47
- describe('render without data', function () {
48
- it('should render element', function () {
49
- assertRendered(`<div></div>`, null, '<div></div>');
50
- });
51
- it('should render nested', function () {
52
- assertRendered(`<div><img /></div>`, null, '<div><img /></div>');
53
- });
54
- });
55
- describe('render with data', function () {
56
- it('should render mapped attribute', function () {
57
- assertRendered(`<div><img data-path-src="image" /></div>`, { image: 'a.jpg' }, '<div><img data-path-src="image" src="a.jpg" /></div>');
58
- });
59
- it('should render custom attribute', function () {
60
- assertRendered(`<div data-path-custom-attribute="test"></div>`, { test: 'a.jpg' }, '<div data-path-custom-attribute="test" custom-attribute="a.jpg"></div>');
61
- assertRendered(`<div data-path-custom-attribute="test"></div>`, { missing: 'a.jpg' }, '<div data-path-custom-attribute="test"></div>');
62
- });
63
- it('should render attributes object', function () {
64
- assertRendered(`<div data-path-attributes="test"></div>`, { test: { a: 'a.jpg', b: 2, c: { user: 'yarik' } } }, '<div data-path-attributes="test" a="a.jpg" b="2" c="{&quot;user&quot;:&quot;yarik&quot;}" data-attributes-keys="a,b,c"></div>');
65
- });
66
- it('should render attributes in dynamic html', function () {
67
- assertRendered(`<div data-path="html"></div>`, { html: '<img data-path-src="image" />', image: '1.jpg' }, '<div data-path="html"><img data-path-src="image" src="1.jpg" /></div>');
68
- assertRendered(`<div data-path-custom-attribute="test"></div>`, { missing: 'a.jpg' }, '<div data-path-custom-attribute="test"></div>');
69
- });
70
- it('should fill parent link via attribute', function () {
71
- assertRendered(`<div><a><var data-path-href="image" data-path="image"></var></a></div>`, { image: 'a.jpg' }, '<div><a href="a.jpg"><var data-path-href="image" data-path="image">a.jpg</a></div>');
72
- });
73
- it('should fill child element via attribute', function () {
74
- assertRendered(`<div data-path-href="image"><a><var data-path="image"></var></a></div>`, { image: 'a.jpg' }, '<div data-path-href="image"><a href="a.jpg"><var data-path="image">a.jpg</a></div>');
75
- });
76
- it('should fill image element via attribute', function () {
77
- assertRendered(`<div data-path-href="image"><a><var data-path="image"></var></a></div>`, { image: 'a.jpg' }, '<div data-path-href="image"><a href="a.jpg"><var data-path="image">a.jpg</a></div>');
78
- });
79
- });
80
- describe('render with arrays', () => {
81
- it('should repeat element for primitive value', function () {
82
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"></h1></div>`, { outside: [{ items: ['a', 'b'] }] }, '<div><h1 data-path-scope="outside.*.items.*"></h1><h1 data-path-scope="outside.*.items.*"></h1></div>');
83
- });
84
- it('should repeat and fill element for primitive value', function () {
85
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*"></var></h1></div>`, { outside: [{ items: ['a', 'b'] }] }, `<div>
86
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">a</var></h1>
87
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">b</var></h1>
88
- </div>`);
89
- });
90
- it('should repeat element for object value', function () {
91
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"></h1></div>`, { outside: [{ items: [{ a: '1' }, { a: '2' }] }] }, '<div><h1 data-path-scope="outside.*.items.*"></h1><h1 data-path-scope="outside.*.items.*"></h1></div>');
92
- });
93
- it('should repeat element for object value', function () {
94
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '1' }, { title: '2' }] }] }, `<div>
95
- <h1 data-path-scope="outside.*.items.*">
96
- <var data-path="outside.*.items.*.title">1</var>
97
- </h1>
98
- <h1 data-path-scope="outside.*.items.*">
99
- <var data-path="outside.*.items.*.title">2</var>
100
- </h1>
101
- </div>`);
102
- });
103
- it('should repeat element for object value thrice', function () {
104
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }] }, `<div>
105
- <h1 data-path-scope="outside.*.items.*">
106
- <var data-path="outside.*.items.*.title">0</var>
107
- </h1>
108
- <h1 data-path-scope="outside.*.items.*">
109
- <var data-path="outside.*.items.*.title">1</var>
110
- </h1>
111
- <h1 data-path-scope="outside.*.items.*">
112
- <var data-path="outside.*.items.*.title">2</var>
113
- </h1>
114
- </div>`);
115
- });
116
- it('should repeat element for jsonpath', function () {
117
- assertRendered(`<div><h1 data-path-scope="items[1:3]"><var data-path="items.*.title"></var></h1></div>`, { items: [{ title: '0' }, { title: '1' }, { title: '2' }] }, `<div>
118
- <h1 data-path-scope="items[1:3]">
119
- <var data-path="items.*.title">1</var>
120
- </h1>
121
- <h1 data-path-scope="items[1:3]">
122
- <var data-path="items.*.title">2</var>
123
- </h1>
124
- </div>`);
125
- });
126
- });
127
- describe('render with nested arrays', () => {
128
- it('should repeat element for primitive value', function () {
129
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"></h1></div>`, { outside: [{ items: ['a', 'b'] }] }, '<div><h1 data-path-scope="outside.*.items.*"></h1><h1 data-path-scope="outside.*.items.*"></h1></div>');
130
- });
131
- it('should repeat and fill element for primitive value', function () {
132
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*"></var></h1></div>`, { outside: [{ items: ['a', 'b'] }] }, `<div>
133
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">a</var></h1>
134
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">b</var></h1>
135
- </div>`);
136
- });
137
- it('should repeat element for object value', function () {
138
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"></h1></div>`, { outside: [{ items: [{ a: '1' }, { a: '2' }] }] }, '<div><h1 data-path-scope="outside.*.items.*"></h1><h1 data-path-scope="outside.*.items.*"></h1></div>');
139
- });
140
- it('should repeat element for object value', function () {
141
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '1' }, { title: '2' }] }] }, `<div>
142
- <h1 data-path-scope="outside.*.items.*">
143
- <var data-path="outside.*.items.*.title">1</var>
144
- </h1>
145
- <h1 data-path-scope="outside.*.items.*">
146
- <var data-path="outside.*.items.*.title">2</var>
147
- </h1>
148
- </div>`);
149
- });
150
- it('should repeat element for object value thrice', function () {
151
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }] }, `<div>
152
- <h1 data-path-scope="outside.*.items.*">
153
- <var data-path="outside.*.items.*.title">0</var>
154
- </h1>
155
- <h1 data-path-scope="outside.*.items.*">
156
- <var data-path="outside.*.items.*.title">1</var>
157
- </h1>
158
- <h1 data-path-scope="outside.*.items.*">
159
- <var data-path="outside.*.items.*.title">2</var>
160
- </h1>
161
- </div>`);
162
- });
163
- it('should repeat element for jsonpath', function () {
164
- assertRendered(`<div><h1 data-path-scope="outside.*.items[1:3]"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }] }, `<div>
165
- <h1 data-path-scope="outside.*.items[1:3]">
166
- <var data-path="outside.*.items.*.title">1</var>
167
- </h1>
168
- <h1 data-path-scope="outside.*.items[1:3]">
169
- <var data-path="outside.*.items.*.title">2</var>
170
- </h1>
171
- </div>`);
172
- });
173
- });
174
- describe('render multiplied with nested arrays and without parent context', () => {
175
- it('should repeat element for primitive value', function () {
176
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"></h1></div>`, { outside: [{ items: ['a', 'b'] }, { items: ['a', 'b', 'c'] }] }, `<div>
177
- <h1 data-path-scope="outside.*.items.*"></h1>
178
- <h1 data-path-scope="outside.*.items.*"></h1>
179
- <h1 data-path-scope="outside.*.items.*"></h1>
180
- <h1 data-path-scope="outside.*.items.*"></h1>
181
- <h1 data-path-scope="outside.*.items.*"></h1>
182
- </div>`);
183
- });
184
- it('should repeat and fill element for primitive value', function () {
185
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*"></var></h1></div>`, { outside: [{ items: ['a', 'b'] }, { items: ['a', 'b', 'c'] }] }, `<div>
186
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">a</var></h1>
187
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">b</var></h1>
188
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">a</var></h1>
189
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">b</var></h1>
190
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">c</var></h1>
191
- </div>`);
192
- });
193
- it('should repeat element for object value', function () {
194
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"></h1></div>`, { outside: [{ items: [{ a: '1' }, { a: '2' }] }, { items: [{ a: '1' }, { a: '2' }, { c: '3' }] }] }, `<div>
195
- <h1 data-path-scope="outside.*.items.*"></h1>
196
- <h1 data-path-scope="outside.*.items.*"></h1>
197
- <h1 data-path-scope="outside.*.items.*"></h1>
198
- <h1 data-path-scope="outside.*.items.*"></h1>
199
- <h1 data-path-scope="outside.*.items.*"></h1>
200
- </div>`);
201
- });
202
- it('should repeat element for object value', function () {
203
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*.title"></var></h1></div>`, {
204
- outside: [
205
- { items: [{ title: '1' }, { title: '2' }] },
206
- { items: [{ title: '1' }, { title: '2' }, { title: '3' }] }
207
- ]
208
- }, `<div>
209
- <h1 data-path-scope="outside.*.items.*">
210
- <var data-path="outside.*.items.*.title">1</var>
211
- </h1>
212
- <h1 data-path-scope="outside.*.items.*">
213
- <var data-path="outside.*.items.*.title">2</var>
214
- </h1>
215
- <h1 data-path-scope="outside.*.items.*">
216
- <var data-path="outside.*.items.*.title">1</var>
217
- </h1>
218
- <h1 data-path-scope="outside.*.items.*">
219
- <var data-path="outside.*.items.*.title">2</var>
220
- </h1>
221
- <h1 data-path-scope="outside.*.items.*">
222
- <var data-path="outside.*.items.*.title">3</var>
223
- </h1>
224
- </div>`);
225
- });
226
- it('should repeat element for object value thrice', function () {
227
- assertRendered(`<div><h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }, { items: [{ title: '0' }] }] }, `<div>
228
- <h1 data-path-scope="outside.*.items.*">
229
- <var data-path="outside.*.items.*.title">0</var>
230
- </h1>
231
- <h1 data-path-scope="outside.*.items.*">
232
- <var data-path="outside.*.items.*.title">1</var>
233
- </h1>
234
- <h1 data-path-scope="outside.*.items.*">
235
- <var data-path="outside.*.items.*.title">2</var>
236
- </h1>
237
- <h1 data-path-scope="outside.*.items.*">
238
- <var data-path="outside.*.items.*.title">0</var>
239
- </h1>
240
- </div>`);
241
- });
242
- it('should repeat element for jsonpath', function () {
243
- assertRendered(`<div><h1 data-path-scope="outside.*.items[1:3]"><var data-path="outside.*.items.*.title"></var></h1></div>`, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }, { items: [{ title: '0' }] }] }, `<div>
244
- <h1 data-path-scope="outside.*.items[1:3]">
245
- <var data-path="outside.*.items.*.title">1</var>
246
- </h1>
247
- <h1 data-path-scope="outside.*.items[1:3]">
248
- <var data-path="outside.*.items.*.title">2</var>
249
- </h1>
250
- </div>`);
251
- });
252
- });
253
- describe('render multiplied with nested arrays and with parent context', () => {
254
- it('should repeat element for primitive value', function () {
255
- ;
256
- [
257
- `<div>
258
- <section data-path-scope="outside.*">
259
- <h1 data-path-scope="outside.*.items.*"></h1>
260
- </section>
261
- </div>`,
262
- `<div>
263
- <section data-path-scope="outside.*">
264
- <h1 data-path-scope="outside.*.items.*"></h1>
265
- <h1 data-path-scope="outside.*.items.*"></h1>
266
- </section>
267
- </div>`,
268
- `<div>
269
- <section data-path-scope="outside.*">
270
- <h1 data-path-scope="outside.*.items.*"></h1>
271
- <h1 data-path-scope="outside.*.items.*"></h1>
272
- <h1 data-path-scope="outside.*.items.*"></h1>
273
- </section>
274
- <section data-path-scope="outside.*">
275
- <h1 data-path-scope="outside.*.items.*"></h1>
276
- </section>
277
- </div>`,
278
- `<div>
279
- <section data-path-scope="outside.*">
280
- <h1 data-path-scope="outside.*.items.*"></h1>
281
- <h1 data-path-scope="outside.*.items.*"></h1>
282
- <h1 data-path-scope="outside.*.items.*"></h1>
283
- </section>
284
- <section data-path-scope="outside.*">
285
- <h1 data-path-scope="outside.*.items.*" style="display: none;"></h1>
286
- </section>
287
- <section data-path-scope="outside.*">
288
- <h1 data-path-scope="outside.*.items.*"></h1>
289
- </section>
290
- </div>`
291
- ].forEach((input) => {
292
- assertRendered(input, { outside: [{ items: ['a', 'b'] }, { items: ['a', 'b', 'c'] }] }, `<div>
293
- <section data-path-scope="outside.*">
294
- <h1 data-path-scope="outside.*.items.*"></h1>
295
- <h1 data-path-scope="outside.*.items.*"></h1>
296
- </section>
297
- <section data-path-scope="outside.*">
298
- <h1 data-path-scope="outside.*.items.*"></h1>
299
- <h1 data-path-scope="outside.*.items.*"></h1>
300
- <h1 data-path-scope="outside.*.items.*"></h1>
301
- </section>
302
- </div>`);
303
- });
304
- });
305
- it('should repeat and fill element for primitive value', function () {
306
- ;
307
- [
308
- `<div>
309
- <section data-path-scope="outside.*">
310
- <h1 data-path-scope="outside.*.items.*">
311
- <var data-path="outside.*.items.*"></var>
312
- </h1>
313
- </section>
314
- </div>`,
315
- `<div>
316
- <section data-path-scope="outside.*">
317
- <h1 data-path-scope="outside.*.items.*">
318
- <var data-path="outside.*.items.*"></var>
319
- </h1>
320
- </section>
321
- <section data-path-scope="outside.*">
322
- <h1 data-path-scope="outside.*.items.*">
323
- <var data-path="outside.*.items.*"></var>
324
- </h1>
325
- </section>
326
- </div>`,
327
- `<div>
328
- <section data-path-scope="outside.*">
329
- <h1 data-path-scope="outside.*.items.*" style="display: none">
330
- <var data-path="outside.*.items.*"></var>
331
- </h1>
332
- </section>
333
- <section data-path-scope="outside.*">
334
- <h1 data-path-scope="outside.*.items.*">
335
- <var data-path="outside.*.items.*"></var>
336
- </h1>
337
- <h1 data-path-scope="outside.*.items.*">
338
- <var data-path="outside.*.items.*"></var>
339
- </h1>
340
- </section>
341
- </div>`,
342
- `<div>
343
- <section data-path-scope="outside.*">
344
- <h1 data-path-scope="outside.*.items.*">
345
- <var data-path="outside.*.items.*"></var>
346
- </h1>
347
- </section>
348
- <section data-path-scope="outside.*">
349
- <h1 data-path-scope="outside.*.items.*">
350
- <var data-path="outside.*.items.*"></var>
351
- </h1>
352
- </section>
353
- <section data-path-scope="outside.*">
354
- <h1 data-path-scope="outside.*.items.*">
355
- <var data-path="outside.*.items.*"></var>
356
- </h1>
357
- </section>
358
- </div>`
359
- ].forEach((input) => {
360
- assertRendered(input, { outside: [{ items: ['a', 'b'] }, { items: ['a', 'b', 'c'] }] }, `<div>
361
- <section data-path-scope="outside.*">
362
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">a</var></h1>
363
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">b</var></h1>
364
- </section>
365
- <section data-path-scope="outside.*">
366
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">a</var></h1>
367
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">b</var></h1>
368
- <h1 data-path-scope="outside.*.items.*"><var data-path="outside.*.items.*">c</var></h1>
369
- </section>
370
- </div>`);
371
- });
372
- });
373
- it('should repeat element for object value', function () {
374
- ;
375
- [
376
- `<div>
377
- <section data-path-scope="outside.*">
378
- <h1 data-path-scope="outside.*.items.*"></h1>
379
- <h1 data-path-scope="outside.*.items.*"></h1>
380
- </section>
381
- <section data-path-scope="outside.*">
382
- <h1 data-path-scope="outside.*.items.*"></h1>
383
- </section>
384
- <section data-path-scope="outside.*">
385
- <h1 data-path-scope="outside.*.items.*"></h1>
386
- </section>
387
- </div>`,
388
- `<div>
389
- <section data-path-scope="outside.*">
390
- <h1 data-path-scope="outside.*.items.*"></h1>
391
- </section>
392
- </div>`,
393
- `<div>
394
- <section data-path-scope="outside.*">
395
- <h1 data-path-scope="outside.*.items.*"></h1>
396
- </section>
397
- </div>`,
398
- `<div>
399
- <section data-path-scope="outside.*">
400
- <h1 data-path-scope="outside.*.items.*"></h1>
401
- </section>
402
- </div>`
403
- ].forEach((input) => {
404
- assertRendered(input, { outside: [{ items: [{ a: '1' }, { a: '2' }] }, { items: [{ a: '1' }, { a: '2' }, { c: '3' }] }] }, `<div>
405
- <section data-path-scope="outside.*">
406
- <h1 data-path-scope="outside.*.items.*"></h1>
407
- <h1 data-path-scope="outside.*.items.*"></h1>
408
- </section>
409
- <section data-path-scope="outside.*">
410
- <h1 data-path-scope="outside.*.items.*"></h1>
411
- <h1 data-path-scope="outside.*.items.*"></h1>
412
- <h1 data-path-scope="outside.*.items.*"></h1>
413
- </section>
414
- </div>`);
415
- });
416
- });
417
- it('should repeat element for object value', function () {
418
- ;
419
- [
420
- `<div>
421
- <section data-path-scope="outside.*">
422
- <h1 data-path-scope="outside.*.items.*">
423
- <var data-path="outside.*.items.*.title"></var>
424
- </h1>
425
- </section>
426
- </div>`,
427
- `<div>
428
- <section data-path-scope="outside.*">
429
- <h1 data-path-scope="outside.*.items.*">
430
- <var data-path="outside.*.items.*.title"></var>
431
- </h1>
432
- <h1 data-path-scope="outside.*.items.*">
433
- <var data-path="outside.*.items.*.title"></var>
434
- </h1>
435
- </section>
436
- <section data-path-scope="outside.*">
437
- <h1 data-path-scope="outside.*.items.*">
438
- <var data-path="outside.*.items.*.title"></var>
439
- </h1>
440
- </section>
441
- <section data-path-scope="outside.*">
442
- <h1 data-path-scope="outside.*.items.*">
443
- <var data-path="outside.*.items.*.title"></var>
444
- </h1>
445
- </section>
446
- </div>`,
447
- `<div>
448
- <section data-path-scope="outside.*">
449
- <h1 data-path-scope="outside.*.items.*" style="display: none;">
450
- <var data-path="outside.*.items.*.title"></var>
451
- </h1>
452
- </section>
453
- <section data-path-scope="outside.*">
454
- <h1 data-path-scope="outside.*.items.*" style="display: none;">
455
- <var data-path="outside.*.items.*.title"></var>
456
- </h1>
457
- </section>
458
- </div>`
459
- ].forEach((input) => {
460
- assertRendered(input, {
461
- outside: [
462
- { items: [{ title: '1' }, { title: '2' }] },
463
- { items: [{ title: '1' }, { title: '2' }, { title: '3' }] }
464
- ]
465
- }, `<div>
466
- <section data-path-scope="outside.*">
467
- <h1 data-path-scope="outside.*.items.*">
468
- <var data-path="outside.*.items.*.title">1</var>
469
- </h1>
470
- <h1 data-path-scope="outside.*.items.*">
471
- <var data-path="outside.*.items.*.title">2</var>
472
- </h1>
473
- </section>
474
- <section data-path-scope="outside.*">
475
- <h1 data-path-scope="outside.*.items.*">
476
- <var data-path="outside.*.items.*.title">1</var>
477
- </h1>
478
- <h1 data-path-scope="outside.*.items.*">
479
- <var data-path="outside.*.items.*.title">2</var>
480
- </h1>
481
- <h1 data-path-scope="outside.*.items.*">
482
- <var data-path="outside.*.items.*.title">3</var>
483
- </h1>
484
- </section>
485
- </div>`);
486
- });
487
- });
488
- it('should repeat element for object value thrice', function () {
489
- ;
490
- [
491
- `<div>
492
- <section data-path-scope="outside.*">
493
- <h1 data-path-scope="outside.*.items.*">
494
- <var data-path="outside.*.items.*.title"></var>
495
- </h1>
496
- </section>
497
- </div>`,
498
- `<div>
499
- <section data-path-scope="outside.*">
500
- <h1 data-path-scope="outside.*.items.*">
501
- <var data-path="outside.*.items.*.title"></var>
502
- </h1>
503
- <h1 data-path-scope="outside.*.items.*">
504
- <var data-path="outside.*.items.*.title"></var>
505
- </h1>
506
- <h1 data-path-scope="outside.*.items.*">
507
- <var data-path="outside.*.items.*.title"></var>
508
- </h1>
509
- </section>
510
- <section data-path-scope="outside.*">
511
- <h1 data-path-scope="outside.*.items.*">
512
- <var data-path="outside.*.items.*.title"></var>
513
- </h1>
514
- </section>
515
- </div>`,
516
- `<div>
517
- <section data-path-scope="outside.*">
518
- <h1 data-path-scope="outside.*.items.*" style="display: none;">
519
- <var data-path="outside.*.items.*.title"></var>
520
- </h1>
521
- </section>
522
- <section data-path-scope="outside.*" style="display: none;">
523
- <h1 data-path-scope="outside.*.items.*" style="display: none;">
524
- <var data-path="outside.*.items.*.title"></var>
525
- </h1>
526
- </section>
527
- </div>`
528
- ];
529
- assertRendered(`<div>
530
- <section data-path-scope="outside.*">
531
- <h1 data-path-scope="outside.*.items.*">
532
- <var data-path="outside.*.items.*.title"></var>
533
- </h1>
534
- </section>
535
- </div>`, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }, { items: [{ title: '0' }] }] }, `<div>
536
- <section data-path-scope="outside.*">
537
- <h1 data-path-scope="outside.*.items.*">
538
- <var data-path="outside.*.items.*.title">0</var>
539
- </h1>
540
- <h1 data-path-scope="outside.*.items.*">
541
- <var data-path="outside.*.items.*.title">1</var>
542
- </h1>
543
- <h1 data-path-scope="outside.*.items.*">
544
- <var data-path="outside.*.items.*.title">2</var>
545
- </h1>
546
- </section>
547
- <section data-path-scope="outside.*">
548
- <h1 data-path-scope="outside.*.items.*">
549
- <var data-path="outside.*.items.*.title">0</var>
550
- </h1>
551
- </section>
552
- </div>`);
553
- });
554
- it('should repeat element for jsonpath', function () {
555
- ;
556
- [
557
- `<div>
558
- <section data-path-scope="outside.*">
559
- <h1 data-path-scope="outside.*.items[1:3]">
560
- <var data-path="outside.*.items.*.title"></var>
561
- </h1>
562
- </section>
563
- </div>`,
564
- `<div>
565
- <section data-path-scope="outside.*">
566
- <h1 data-path-scope="outside.*.items[1:3]">
567
- <var data-path="outside.*.items.*.title"></var>
568
- </h1>
569
- </section>
570
- <section data-path-scope="outside.*">
571
- <h1 data-path-scope="outside.*.items[1:3]">
572
- <var data-path="outside.*.items.*.title"></var>
573
- </h1>
574
- </section>
575
- </div>`,
576
- `<div>
577
- <section data-path-scope="outside.*">
578
- <h1 data-path-scope="outside.*.items[1:3]">
579
- <var data-path="outside.*.items.*.title"></var>
580
- </h1>
581
- <h1 data-path-scope="outside.*.items[1:3]">
582
- <var data-path="outside.*.items.*.title"></var>
583
- </h1>
584
- </section>
585
- </div>`
586
- ].forEach((input) => {
587
- assertRendered(input, { outside: [{ items: [{ title: '0' }, { title: '1' }, { title: '2' }] }, { items: [{ title: '0' }] }] }, `<div>
588
- <section data-path-scope="outside.*">
589
- <h1 data-path-scope="outside.*.items[1:3]">
590
- <var data-path="outside.*.items.*.title">1</var>
591
- </h1>
592
- <h1 data-path-scope="outside.*.items[1:3]">
593
- <var data-path="outside.*.items.*.title">2</var>
594
- </h1>
595
- </section>
596
- <section data-path-scope="outside.*">
597
- <h1 data-path-scope="outside.*.items[1:3]" style="display: none;">
598
- <var data-path="outside.*.items.*.title"></var>
599
- </h1>
600
- </section>
601
- </div>`);
602
- });
603
- });
604
- });
605
- describe('Scripts', () => {
606
- it('should autoload scripts initially', () => {
607
- assertRendered(`<div data-embed-src="http://example.com/script.js"></div>`, {}, `<div data-embed-src="http://example.com/script.js"></div>`, ['http://example.com/script.js']);
608
- });
609
- it('should autoload scripts via observer', async () => {
610
- const element = new JSDOM('<div><h1></h1></div>').window.document.body.firstElementChild;
611
- FEAAS.observeDOMElement(element);
612
- element.firstElementChild.setAttribute('data-embed-src', 'http://example.com/script.js');
613
- return new Promise((resolve) => {
614
- setTimeout(() => {
615
- assertScriptLoaded(element, 'http://example.com/script.js');
616
- resolve();
617
- }, 50);
618
- });
619
- });
620
- });
621
- describe('Various examples', () => {
622
- it('should render custom web components', () => {
623
- assertRendered(`<bx-accordion class='-embed' data-embed-src="https://1.www.s81c.com/common/carbon/web-components/version/v1.21.0/accordion.min.js">
624
- <bx-accordion-item data-path-scope="dominatorData.items.*" data-path-attributes="dominatorData.items.*">
625
- </bx-accordion-item>
626
- </bx-accordion>`, {
627
- dominatorData: {
628
- name: 'YarikZ',
629
- goal: 'Explode the planet',
630
- status: 'progressing',
631
- items: [
632
- {
633
- 'title-text': 'Hello world',
634
- html: 'Hola',
635
- open: true
636
- },
637
- {
638
- 'title-text': 'Bye world',
639
- html: 'Mystical island'
640
- }
641
- ]
642
- }
643
- }, `<bx-accordion class='-embed' data-embed-src="https://1.www.s81c.com/common/carbon/web-components/version/v1.21.0/accordion.min.js">
644
- <bx-accordion-item data-path-scope="dominatorData.items.*" data-path-attributes="dominatorData.items.*" title-text="Hello world" open data-attributes-keys="title-text,html,open">
645
- Hola
646
- </bx-accordion-item>
647
- <bx-accordion-item data-path-scope="dominatorData.items.*" data-path-attributes="dominatorData.items.*" title-text="Bye world" data-attributes-keys="title-text,html">
648
- Mystical island
649
- </bx-accordion-item>
650
- </bx-accordion>`);
651
- });
652
- });
653
- describe('customizations', function () {
654
- it('processTemplate', function () {
655
- assertRenderedContent(`<div></div>`, null, '<h1>123</h1>', [], {
656
- processTemplate: (element, template, data) => {
657
- return '<h1>123</h1>';
658
- }
659
- });
660
- assertRenderedContent(`<div></div>`, null, '<div></div>', [], {
661
- processTemplate: (element, template, data) => {
662
- return null;
663
- }
664
- });
665
- assertRenderedContent(`<div><h1></h1></div>`, null, '<div><h1></h1></div>', [], {
666
- processTemplate: (element, template, data) => {
667
- return null;
668
- }
669
- });
670
- });
671
- it('processData', function () {
672
- assertRenderedContent(`<div data-path-custom-attribute="test"></div>`, { test: 'a.jpg' }, '<div data-path-custom-attribute="test" custom-attribute="b.jpg"></div>', [], {
673
- processData(element, data) {
674
- return {
675
- test: 'b.jpg'
676
- };
677
- }
678
- });
679
- assertRenderedContent(`<div data-path-custom-attribute="test"></div>`, { test: 'a.jpg' }, '<div data-path-custom-attribute="test" custom-attribute="a.jpg.gz"></div>', [], {
680
- processData(element, data) {
681
- return {
682
- test: data.test + '.gz'
683
- };
684
- }
685
- });
686
- });
687
- });
688
- });