@epa-wg/custom-element-dist 0.0.26 → 0.0.27

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 (137) hide show
  1. package/.idea/custom-element-dist.iml +1 -5
  2. package/.storybook/preview.ts +1 -1
  3. package/README.md +4 -4
  4. package/bin/vitest/vitest-browser-importmaps.mjs +20 -20
  5. package/coverage/coverage-final.json +9 -9
  6. package/coverage/index.html +25 -25
  7. package/coverage/src/custom-element/coverage.svg +1 -1
  8. package/coverage/src/custom-element/custom-element.js/coverage.svg +1 -1
  9. package/coverage/src/custom-element/custom-element.js.html +467 -308
  10. package/coverage/src/custom-element/demo/index.html +1 -1
  11. package/coverage/src/custom-element/demo/z.js.html +1 -1
  12. package/coverage/src/custom-element/http-request.js.html +12 -12
  13. package/coverage/src/custom-element/index.html +20 -20
  14. package/coverage/src/custom-element/local-storage.js.html +56 -41
  15. package/coverage/src/custom-element/location-element.js.html +4 -4
  16. package/coverage/src/custom-element/module-url.js/coverage.svg +1 -1
  17. package/coverage/src/custom-element/module-url.js.html +16 -10
  18. package/coverage/src/index.html +1 -1
  19. package/coverage/src/mocks/handlers.ts.html +1 -1
  20. package/coverage/src/mocks/index.html +1 -1
  21. package/coverage/src/stories/attributes.test.stories.ts.html +9 -12
  22. package/coverage/src/stories/coverage.svg +1 -1
  23. package/coverage/src/stories/css.test.stories.ts.html +1 -1
  24. package/coverage/src/stories/dom-merge.test.stories.ts.html +15 -9
  25. package/coverage/src/stories/external-template.test.stories.ts.html +8 -11
  26. package/coverage/src/stories/form.test.stories.ts.html +1 -1
  27. package/coverage/src/stories/http-request.stories.ts.html +1 -1
  28. package/coverage/src/stories/index.html +26 -26
  29. package/coverage/src/stories/local-storage.test.stories.ts/coverage.svg +1 -1
  30. package/coverage/src/stories/local-storage.test.stories.ts.html +87 -63
  31. package/coverage/src/stories/location-element.test.stories.ts.html +1 -1
  32. package/coverage/src/stories/module-url.test.stories.ts.html +1 -1
  33. package/coverage/src/stories/set-url.test.stories.ts.html +1 -1
  34. package/coverage/src/stories/slice-events.test.stories.ts.html +1 -1
  35. package/coverage/src/stories/slots.test.stories.ts.html +1 -1
  36. package/coverage/src/stories/testStoryBook.ts.html +1 -1
  37. package/coverage/src/stories/version-select.test.stories.ts.html +1 -1
  38. package/coverage/src/sum.ts.html +1 -1
  39. package/dist/{custom-element-b7c_7Kz4.js → custom-element-BMMsP1Dy.js} +204 -156
  40. package/dist/custom-element-CPSk7s0j.cjs +87 -0
  41. package/dist/custom-element-bundle.cjs +1 -1
  42. package/dist/custom-element-bundle.js +28 -25
  43. package/dist/demo/a.svg +27 -0
  44. package/dist/demo/demo.css +6 -7
  45. package/dist/demo/external-template.html +3 -3
  46. package/dist/demo/npm-versions-demo.html +21 -8
  47. package/dist/demo/npm-versions.html +54 -25
  48. package/dist/demo/s.xml +3 -28
  49. package/dist/demo/s.xslt +51 -92
  50. package/dist/demo/z.html +32 -61
  51. package/dist/demo/z1.html +34 -0
  52. package/dist/local-storage-78EivJ_B.cjs +1 -0
  53. package/dist/local-storage-DzmNKzgN.js +66 -0
  54. package/dist/mockServiceWorker.js +1 -1
  55. package/package.json +27 -25
  56. package/public/demo/a.svg +27 -0
  57. package/public/demo/demo.css +6 -7
  58. package/public/demo/external-template.html +3 -3
  59. package/public/demo/npm-versions-demo.html +21 -8
  60. package/public/demo/npm-versions.html +54 -25
  61. package/public/demo/s.xml +3 -28
  62. package/public/demo/s.xslt +51 -92
  63. package/public/demo/z.html +32 -61
  64. package/public/demo/z1.html +34 -0
  65. package/public/mockServiceWorker.js +1 -1
  66. package/src/custom-element/custom-element.js +67 -14
  67. package/src/custom-element/demo/a.svg +27 -0
  68. package/src/custom-element/demo/demo.css +6 -7
  69. package/src/custom-element/demo/external-template.html +3 -3
  70. package/src/custom-element/demo/npm-versions-demo.html +21 -8
  71. package/src/custom-element/demo/npm-versions.html +54 -25
  72. package/src/custom-element/demo/s.xml +3 -28
  73. package/src/custom-element/demo/s.xslt +51 -92
  74. package/src/custom-element/demo/z.html +32 -61
  75. package/src/custom-element/demo/z1.html +34 -0
  76. package/src/custom-element/ide/web-types-dce.json +1 -1
  77. package/src/custom-element/ide/web-types-xsl.json +1 -1
  78. package/src/custom-element/index.html +19 -2
  79. package/src/custom-element/local-storage.js +19 -14
  80. package/src/custom-element/module-url.js +3 -2
  81. package/src/mocks/versions.mock.ts +8 -8
  82. package/src/stories/__screenshots__/http-request.test.ts/http-request-url-change-1.png +0 -0
  83. package/src/stories/attributes.test.stories.ts +3 -4
  84. package/src/stories/dom-merge.test.stories.ts +9 -7
  85. package/src/stories/external-template.test.stories.ts +2 -3
  86. package/src/stories/local-storage.test.stories.ts +61 -53
  87. package/src/sum.test.ts +5 -5
  88. package/src/sum.ts +3 -3
  89. package/storybook-static/assets/{Color-KGDBMAHA-CH-YyWYq.js → Color-KGDBMAHA-CJo5gHY3.js} +1 -1
  90. package/storybook-static/assets/{Configure-DFL_bm2M.js → Configure-DdXbGKhY.js} +1 -1
  91. package/storybook-static/assets/{DocsRenderer-PKQXORMH-Bz-_1hmS.js → DocsRenderer-PKQXORMH-DLnpL5hE.js} +2 -2
  92. package/storybook-static/assets/{attributes.test.stories-DIQXccHc.js → attributes.test.stories-Bt5V18qO.js} +10 -11
  93. package/storybook-static/assets/{css.test.stories-BV2hi4CY.js → css.test.stories-CGYy2daE.js} +1 -1
  94. package/storybook-static/assets/{custom-element-wn23PUwN.js → custom-element-D8hcDZHh.js} +116 -82
  95. package/storybook-static/assets/{dom-merge.test.stories-Dws0C2-g.js → dom-merge.test.stories-XlsZ0UvX.js} +22 -20
  96. package/storybook-static/assets/{external-template.test.stories-BHO48b0j.js → external-template.test.stories-Bt_Pflu8.js} +7 -8
  97. package/storybook-static/assets/{form.test.stories-dv9mwp24.js → form.test.stories-B0NoI8wm.js} +1 -1
  98. package/storybook-static/assets/{handlers-CaCq2ZPF.js → handlers-B5969HUu.js} +13 -13
  99. package/storybook-static/assets/{http-request.stories-B2ke7LtS.js → http-request.stories-B2skuTFV.js} +1 -1
  100. package/storybook-static/assets/iframe-Dfrt81rk.js +2 -0
  101. package/storybook-static/assets/{index-BnXBQqj9.js → index-Ay195x2L.js} +4 -4
  102. package/storybook-static/assets/{index-sm7QlJZE.js → index-C3ChPTMh.js} +1 -1
  103. package/storybook-static/assets/{index-Dz4OaB2k.js → index-C7lvoJNv.js} +1 -1
  104. package/storybook-static/assets/{index-Cpxqn5iQ.js → index-Gpdhz4ab.js} +1 -1
  105. package/storybook-static/assets/local-storage.test.stories-DfY6feqG.js +420 -0
  106. package/storybook-static/assets/{location-element.test.stories-BiFvBop7.js → location-element.test.stories-944AotIJ.js} +1 -1
  107. package/storybook-static/assets/{module-url.test.stories-BXoM34tX.js → module-url.test.stories-DSKcwApl.js} +1 -1
  108. package/storybook-static/assets/preview-AJR7rVPD.js +52 -0
  109. package/storybook-static/assets/{preview-Cg7hXPRq.js → preview-CadgX-4y.js} +2 -2
  110. package/storybook-static/assets/{set-url.test.stories-Cg5Z0r7x.js → set-url.test.stories-DjLHKkEh.js} +1 -1
  111. package/storybook-static/assets/{slice-events.test.stories-D_ttGp3g.js → slice-events.test.stories-8I_BrHd6.js} +1 -1
  112. package/storybook-static/assets/{slots.test.stories-DBNXOm0T.js → slots.test.stories-CvZz4jyP.js} +1 -1
  113. package/storybook-static/assets/{version-select.test.stories-CgV3UCim.js → version-select.test.stories-DSxmJylI.js} +1 -1
  114. package/storybook-static/demo/a.svg +27 -0
  115. package/storybook-static/demo/demo.css +6 -7
  116. package/storybook-static/demo/external-template.html +3 -3
  117. package/storybook-static/demo/npm-versions-demo.html +21 -8
  118. package/storybook-static/demo/npm-versions.html +54 -25
  119. package/storybook-static/demo/s.xml +3 -28
  120. package/storybook-static/demo/s.xslt +51 -92
  121. package/storybook-static/demo/z.html +32 -61
  122. package/storybook-static/demo/z1.html +34 -0
  123. package/storybook-static/iframe.html +1 -1
  124. package/storybook-static/mockServiceWorker.js +1 -1
  125. package/storybook-static/project.json +1 -1
  126. package/storybook-static/sb-addons/chromatic-com-storybook-9/manager-bundle.js +39 -36
  127. package/storybook-static/sb-addons/chromatic-com-storybook-9/manager-bundle.js.LEGAL.txt +38 -1
  128. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  129. package/.idea/compiler.xml +0 -6
  130. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  131. package/.vscode/settings.json +0 -24
  132. package/dist/custom-element-CckoVsvO.cjs +0 -53
  133. package/dist/local-storage-Boafngui.cjs +0 -1
  134. package/dist/local-storage-BqDEu2kF.js +0 -59
  135. package/storybook-static/assets/iframe-D4Sos1HO.js +0 -2
  136. package/storybook-static/assets/local-storage.test.stories-BpogLNq-.js +0 -419
  137. package/storybook-static/assets/preview-oHxXRSIu.js +0 -48
@@ -1,97 +1,56 @@
1
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml"
2
- xmlns:dce="urn:schemas-epa-wg:dce" xmlns:exsl="http://exslt.org/common" version="1.0"
3
- exclude-result-prefixes="exsl">
4
- <xsl:template match="ignore">
5
- <xsl:choose>
6
- <xsl:when test="//attr">
7
- <xsl:value-of select="//attr"/>
8
- </xsl:when>
9
- <xsl:otherwise>
10
- <xsl:value-of select="def"/>
11
- </xsl:otherwise>
12
- </xsl:choose>
13
- <xsl:value-of select="."/>
14
- </xsl:template>
15
- <xsl:template mode="payload" match="attributes">
16
- <dce-root xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml" data-dce-id="1">
17
- <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="methods">
18
- <a xmlns="" href="https://developer.mozilla.org/en-US/docs/Web/API/Location/href" data-dce-id="2">
19
- location.href
20
- </a>
21
- <a xmlns="" href="https://developer.mozilla.org/en-US/docs/Web/API/Location/hash" data-dce-id="3">
22
- location.hash
23
- </a>
24
- <a xmlns="" href="https://developer.mozilla.org/en-US/docs/Web/API/Location/assign" data-dce-id="4">
25
- location.assign
26
- </a>
27
- </xsl:variable>
28
- <fieldset xmlns="" data-dce-id="5">
29
- <legend data-dce-id="6">
30
- <b data-dce-id="7">set-by</b>
31
- </legend>
32
- <xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="$methods">
33
- <p data-dce-id="8">
34
- <label data-dce-id="9">
35
- <input type="radio" name="method" value="{.}" data-dce-id="10"/>
36
- <dce-text data-dce-id="11">
37
- <xsl:value-of select="."/>
38
- </dce-text>
39
- </label>
40
- <a class="infolink" href="https://developer.mozilla.org/en-US/docs/Web/API/Location/assign"
41
- data-dce-id="12">mdn
42
- </a>
43
- </p>
44
- </xsl:for-each>
45
- <label data-dce-id="13">
46
- <input type="radio" name="method" value="location.href" data-dce-id="14"/>
47
- <dce-text data-dce-id="15">location.href</dce-text>
48
- </label>
49
- <label data-dce-id="16">
50
- <input type="radio" name="method" value="location" data-dce-id="17"/>
51
- <dce-text data-dce-id="18">location</dce-text>
52
- </label>
53
- <label data-dce-id="19">
54
- <input type="radio" name="method" value="location.replace" data-dce-id="20"/>
55
- <dce-text data-dce-id="21">location.replace</dce-text>
56
- </label>
57
- <label data-dce-id="22">
58
- <input type="radio" name="method" value="location.assign" data-dce-id="23"/>
59
- <dce-text data-dce-id="24">location.assign</dce-text>
60
- </label>
61
- <label data-dce-id="25">
62
- <input type="radio" name="method" value="location.hash" data-dce-id="26"/>
63
- <dce-text data-dce-id="27">location.hash</dce-text>
64
- </label>
65
- <label data-dce-id="28">
66
- <input type="radio" name="method" value="history.pushState" data-dce-id="29"/>
67
- <dce-text data-dce-id="30">history.pushState</dce-text>
68
- </label>
69
- <label data-dce-id="31">
70
- <input type="radio" name="method" value="history.replaceState" data-dce-id="32"/>
71
- <dce-text data-dce-id="33">history.replaceState</dce-text>
72
- </label>
73
- </fieldset>
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <xsl:stylesheet version="1.0"
3
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
5
+ >
6
+ <xsl:output method="xml"/>
7
+ <xsl:template match="/">
8
+ <dce-root >
9
+ <xsl:apply-templates select="*"/>
74
10
  </dce-root>
75
11
  </xsl:template>
76
- <xsl:template match="/">
77
- <xsl:apply-templates mode="payload" select="/datadom/attributes"/>
12
+ <xsl:template match="*[name()='template']">
13
+ <xsl:apply-templates mode="sanitize" select="*|text()"/>
14
+ </xsl:template>
15
+ <xsl:template match="*">
16
+ <xsl:apply-templates mode="sanitize" select="*|text()"/>
17
+ </xsl:template>
18
+ <xsl:template match="*[name()='svg']|*[name()='math']">
19
+ <xsl:apply-templates mode="sanitize" select="."/>
20
+ </xsl:template>
21
+ <xsl:template mode="sanitize" match="*[count(text())=1 and count(*)=0]">
22
+ <xsl:copy>
23
+ <xsl:apply-templates mode="sanitize" select="@*"/>
24
+ <xsl:value-of select="text()"></xsl:value-of>
25
+ </xsl:copy>
26
+ </xsl:template>
27
+ <xsl:template mode="sanitize" match="xhtml:*[count(text())=1 and count(*)=0]">
28
+ <xsl:element name="{local-name()}">
29
+ <xsl:apply-templates mode="sanitize" select="@*"/>
30
+ <xsl:value-of select="text()"></xsl:value-of>
31
+ </xsl:element>
32
+ </xsl:template>
33
+ <xsl:template mode="sanitize" match="*|@*">
34
+ <xsl:copy>
35
+ <xsl:apply-templates mode="sanitize" select="*|@*|text()"/>
36
+ </xsl:copy>
37
+ </xsl:template>
38
+ <xsl:template mode="sanitize" match="text()[normalize-space(.) = '']"/>
39
+ <xsl:template mode="sanitize" match="text()">
40
+ <dce-text>
41
+ <xsl:copy/>
42
+ </dce-text>
43
+ </xsl:template>
44
+ <xsl:template mode="sanitize" match="xsl:value-of|*[name()='slot']">
45
+ <dce-text>
46
+ <xsl:copy>
47
+ <xsl:apply-templates mode="sanitize" select="*|@*|text()"/>
48
+ </xsl:copy>
49
+ </dce-text>
78
50
  </xsl:template>
79
- <xsl:template name="slot">
80
- <xsl:param name="slotname"/>
81
- <xsl:param name="defaultvalue"/>
82
- <xsl:choose>
83
- <xsl:when test="//payload/*[@slot=$slotname]">
84
- <xsl:copy-of select="//payload/*[@slot=$slotname]"/>
85
- </xsl:when>
86
- <xsl:otherwise>
87
- <xsl:copy-of select="$defaultvalue"/>
88
- </xsl:otherwise>
89
- </xsl:choose>
51
+ <xsl:template mode="sanitize" match="xhtml:*">
52
+ <xsl:element name="{local-name()}">
53
+ <xsl:apply-templates mode="sanitize" select="*|@*|text()"/>
54
+ </xsl:element>
90
55
  </xsl:template>
91
- <xsl:variable name="js-injected-body">
92
- <xsl:call-template name="slot">
93
- <xsl:with-param name="slotname" select="''"/>
94
- <xsl:with-param name="defaultvalue"/>
95
- </xsl:call-template>
96
- </xsl:variable>
97
56
  </xsl:stylesheet>
@@ -1,62 +1,33 @@
1
- <dce-root xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"
2
- xmlns:dce="urn:schemas-epa-wg:dce" data-dce-id="1">
3
- <location-element xmlns="" slice="window-url" live="" data-dce-id="2"></location-element>
4
- <table xmlns="" data-dce-id="3">
5
- <tbody data-dce-id="0-1">
6
- <tr data-dce-id="4">
7
- <th data-dce-id="5"><h3 data-dce-id="6"> URL properties </h3></th>
8
- <td data-dce-id="7">9</td>
9
- </tr>
10
- <tr data-dce-id="10">
11
- <th data-dce-id="11">href</th>
12
- <td data-dce-id="12">http://localhost:63342/custom-element/demo/a.html?_ijt=dmv0p4go000q47lg48i5im92f7&amp;_ij_reload=RELOAD_ON_SAVE</td>
13
- </tr>
14
- <tr data-dce-id="10-1">
15
- <th data-dce-id="11">origin</th>
16
- <td data-dce-id="12">http://localhost:63342</td>
17
- </tr>
18
- <tr data-dce-id="10-2">
19
- <th data-dce-id="11">protocol</th>
20
- <td data-dce-id="12">http:</td>
21
- </tr>
22
- <tr data-dce-id="10-3">
23
- <th data-dce-id="11">host</th>
24
- <td data-dce-id="12">localhost:63342</td>
25
- </tr>
26
- <tr data-dce-id="10-4">
27
- <th data-dce-id="11">hostname</th>
28
- <td data-dce-id="12">localhost</td>
29
- </tr>
30
- <tr data-dce-id="10-5">
31
- <th data-dce-id="11">port</th>
32
- <td data-dce-id="12">63342</td>
33
- </tr>
34
- <tr data-dce-id="10-6">
35
- <th data-dce-id="11">pathname</th>
36
- <td data-dce-id="12">/custom-element/demo/a.html</td>
37
- </tr>
38
- <tr data-dce-id="10-7">
39
- <th data-dce-id="11">search</th>
40
- <td data-dce-id="12">?_ijt=dmv0p4go000q47lg48i5im92f7&amp;_ij_reload=RELOAD_ON_SAVE</td>
41
- </tr>
42
- <tr data-dce-id="10-8">
43
- <th data-dce-id="11">hash</th>
44
- <td data-dce-id="12"></td>
45
- </tr>
46
- </tbody>
47
- </table>
48
- <h3 data-dce-id="9"> URL parameters </h3>
49
- <table xmlns="" data-dce-id="8">
1
+ <!DOCTYPE html>
2
+ <html lang="en" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5
+ <title>DOM merge - Declarative Custom Element implementation demo</title>
6
+ <link rel="icon" href="./wc-square.svg"/>
7
+ <script type="importmap">
8
+ {
9
+ "imports": {
10
+ "@epa-wg/custom-element/": "../",
11
+ "@epa-wg/custom-element-dist/": "../"
12
+ }
13
+ }
14
+ </script>
15
+ <script type="module" src="../http-request.js"></script>
16
+ <script type="module" src="../location-element.js"></script>
17
+ <script type="module" src="../custom-element.js"></script>
18
+ <style>
19
+ @import "./demo.css";
20
+ dt{ font-weight: bold}
21
+ dd{ padding: 0;}
22
+ h1,h3{ margin: 0;}
23
+ nav{ gap:0; }
24
+ </style>
25
+ </head>
26
+ <body>
50
27
 
51
- <tbody data-dce-id="0-1">
52
- <tr data-dce-id="10">
53
- <th data-dce-id="11">_ijt</th>
54
- <td data-dce-id="12">dmv0p4go000q47lg48i5im92f7</td>
55
- </tr>
56
- <tr data-dce-id="10-1">
57
- <th data-dce-id="11">_ij_reload</th>
58
- <td data-dce-id="12">RELOAD_ON_SAVE</td>
59
- </tr>
60
- </tbody>
61
- </table>
62
- </dce-root>
28
+ <custom-element src="./html-template.html#dwc-logo">
29
+ <template><i>loading SVG from templates file ...</i></template>
30
+ </custom-element>
31
+
32
+ </body>
33
+ </html>
@@ -0,0 +1,34 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5
+ <title>DOM merge - Declarative Custom Element implementation demo</title>
6
+ <link rel="icon" href="./wc-square.svg"/>
7
+ <script type="importmap">
8
+ {
9
+ "imports": {
10
+ "@epa-wg/custom-element/": "../",
11
+ "@epa-wg/custom-element-dist/": "../"
12
+ }
13
+ }
14
+ </script>
15
+ <script type="module" src="../http-request.js"></script>
16
+ <script type="module" src="../location-element.js"></script>
17
+ <script type="module" src="../custom-element.js"></script>
18
+ <style>
19
+ @import "./demo.css";
20
+ dt{ font-weight: bold}
21
+ dd{ padding: 0;}
22
+ h1,h3{ margin: 0;}
23
+ nav{ gap:0; }
24
+ </style>
25
+ </head>
26
+ <body>
27
+ <button onclick="window.location.hash = `#@epa-wg/custom-element-dist@0.0.27/storybook-static/index.html`">set in page URL</button>
28
+
29
+ <custom-element src="@epa-wg/custom-element-dist/demo/npm-versions.html#npm-version"
30
+ package-name="@epa-wg/custom-element-dist"
31
+ ></custom-element>
32
+
33
+ </body>
34
+ </html>
@@ -8,7 +8,7 @@
8
8
  * - Please do NOT serve this file on production.
9
9
  */
10
10
 
11
- const PACKAGE_VERSION = '2.3.5'
11
+ const PACKAGE_VERSION = '2.4.5'
12
12
  const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423'
13
13
  const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
14
14
  const activeClientIds = new Set()
@@ -47,6 +47,7 @@ xml2dom( xmlString )
47
47
  }
48
48
  export function
49
49
  xmlString(doc){ return new XMLSerializer().serializeToString( doc ) }
50
+ function x(doc) { return xmlString(doc) }
50
51
 
51
52
  function
52
53
  injectData( root, sectionName, arr, cb )
@@ -145,22 +146,63 @@ createXsltFromDom( templateNode, S = 'xsl:stylesheet' )
145
146
  if( templateNode.tagName === S || templateNode.documentElement?.tagName === S )
146
147
  return tagUid(templateNode)
147
148
  const sanitizeXsl = xml2dom(`<xsl:stylesheet version="1.0" xmlns:xsl="${ XSL_NS_URL }" xmlns:xhtml="${ HTML_NS_URL }" xmlns:exsl="${EXSL_NS_URL}" exclude-result-prefixes="exsl" >
148
- <xsl:output method="xml" />
149
- <xsl:template match="/"><dce-root xmlns="${ HTML_NS_URL }"><xsl:apply-templates select="*"/></dce-root></xsl:template>
150
- <xsl:template match="*[name()='template']"><xsl:apply-templates mode="sanitize" select="*|text()"/></xsl:template>
151
- <xsl:template match="*"><xsl:apply-templates mode="sanitize" select="*|text()"/></xsl:template>
152
- <xsl:template match="*[name()='svg']|*[name()='math']"><xsl:apply-templates mode="sanitize" select="."/></xsl:template>
153
- <xsl:template mode="sanitize" match="*[count(text())=1 and count(*)=0]"><xsl:copy><xsl:apply-templates mode="sanitize" select="@*"/><xsl:value-of select="text()"></xsl:value-of></xsl:copy></xsl:template>
154
- <xsl:template mode="sanitize" match="xhtml:*[count(text())=1 and count(*)=0]"><xsl:element name="{local-name()}"><xsl:apply-templates mode="sanitize" select="@*"/><xsl:value-of select="text()"></xsl:value-of></xsl:element></xsl:template>
155
- <xsl:template mode="sanitize" match="*|@*"><xsl:copy><xsl:apply-templates mode="sanitize" select="*|@*|text()"/></xsl:copy></xsl:template>
156
- <xsl:template mode="sanitize" match="text()[normalize-space(.) = '']"/>
157
- <xsl:template mode="sanitize" match="text()"><dce-text><xsl:copy/></dce-text></xsl:template>
158
- <xsl:template mode="sanitize" match="xsl:value-of|*[name()='slot']"><dce-text><xsl:copy><xsl:apply-templates mode="sanitize" select="*|@*|text()"/></xsl:copy></dce-text></xsl:template>
159
- <xsl:template mode="sanitize" match="xhtml:*"><xsl:element name="{local-name()}"><xsl:apply-templates mode="sanitize" select="*|@*|text()"/></xsl:element></xsl:template>
160
- </xsl:stylesheet>`)
149
+ <xsl:output method="xml"/>
150
+ <xsl:template match="/"><dce-root xmlns="${ HTML_NS_URL }"><xsl:apply-templates select="*" /></dce-root></xsl:template>
151
+ <xsl:template match="*[name()='template']">
152
+ <xsl:apply-templates mode="sanitize" select="*|text()"/>
153
+ </xsl:template>
154
+ <xsl:template match="*">
155
+ <xsl:apply-templates mode="sanitize" select="*|text()"/>
156
+ </xsl:template>
157
+ <xsl:template match="*[name()='svg']|*[name()='math']">
158
+ <xsl:apply-templates mode="sanitize" select="."/>
159
+ </xsl:template>
160
+ <xsl:template mode="sanitize" match="*[count(text())=1 and count(*)=0]">
161
+ <xsl:copy>
162
+ <xsl:apply-templates mode="sanitize" select="@*"/>
163
+ <xsl:value-of select="text()"></xsl:value-of>
164
+ </xsl:copy>
165
+ </xsl:template>
166
+ <xsl:template mode="sanitize" match="xhtml:*[count(text())=1 and count(*)=0]">
167
+ <xsl:element name="{local-name()}">
168
+ <xsl:apply-templates mode="sanitize" select="@*"/>
169
+ <xsl:value-of select="text()"></xsl:value-of>
170
+ </xsl:element>
171
+ </xsl:template>
172
+ <xsl:template mode="sanitize" match="*|@*">
173
+ <xsl:copy>
174
+ <xsl:apply-templates mode="sanitize" select="*|@*|text()"/>
175
+ </xsl:copy>
176
+ </xsl:template>
177
+ <xsl:template mode="sanitize" match="text()[normalize-space(.) = '']"/>
178
+ <xsl:template mode="sanitize" match="text()">
179
+ <dce-text>
180
+ <xsl:copy/>
181
+ </dce-text>
182
+ </xsl:template>
183
+ <xsl:template mode="sanitize" match="xsl:value-of|*[name()='slot']">
184
+ <dce-text>
185
+ <xsl:copy>
186
+ <xsl:apply-templates mode="sanitize" select="*|@*|text()"/>
187
+ </xsl:copy>
188
+ </dce-text>
189
+ </xsl:template>
190
+ <xsl:template mode="sanitize" match="xhtml:*">
191
+ <xsl:element name="{local-name()}">
192
+ <xsl:apply-templates mode="sanitize" select="*|@*|text()"/>
193
+ </xsl:element>
194
+ </xsl:template>
195
+ </xsl:stylesheet>`)
161
196
  const sanitizeProcessor = new XSLTProcessor()
162
197
  , tc = (n =>
163
198
  {
199
+ forEach$(n,'custom-element', ce=>{
200
+ if( 'template' === ce.firstElementChild.localName )
201
+ {
202
+ [...ce.firstElementChild.content.childNodes].forEach(n=>ce.append(n));
203
+ ce.firstElementChild.remove();
204
+ }
205
+ })
164
206
  forEach$(n,'script', s=> s.remove() );
165
207
  const xslRoot = n.content ?? n.firstElementChild?.content ?? n.body ?? n;
166
208
  xslTags.forEach( tag => forEach$( xslRoot, tag, el=>toXsl(el,xslRoot) ) );
@@ -223,6 +265,11 @@ createXsltFromDom( templateNode, S = 'xsl:stylesheet' )
223
265
  , payload = $( xslDom, 'template[mode="payload"]');
224
266
  if( !fr )
225
267
  return console.error("transformation error",{ xml:tc.outerHTML, xsl: xmlString( sanitizeXsl ) });
268
+ if( 'dce-root'!==fr.firstElementChild.localName )
269
+ { const r = fr.ownerDocument.createElement('dce-root');
270
+ [...fr.childNodes].forEach(n=>r.append(n));
271
+ fr.append(r)
272
+ }
226
273
  const params = [];
227
274
  [...fr.querySelectorAll('dce-root>attribute')].forEach( a=>
228
275
  {
@@ -574,7 +621,13 @@ CustomElement extends HTMLElement
574
621
  this.append(s);
575
622
  })
576
623
  const templateDocs = templateRoots.map( n => createXsltFromDom( n ) )
577
- , xp = templateDocs.map( (td, p) =>{ p = new XSLTProcessor(); p.importStylesheet( td ); return p })
624
+ , xp = templateDocs.map( (td, p) =>
625
+ { p = new XSLTProcessor();
626
+ try{ p.importStylesheet( td ) }
627
+ catch( e )
628
+ { console.error(e, xmlString(td)) }
629
+ return p
630
+ })
578
631
 
579
632
  Object.defineProperty( this, "xsltString", { get: ()=>templateDocs.map( td => xmlString(td) ).join('\n') });
580
633
 
@@ -0,0 +1,27 @@
1
+ <svg id="dwc-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 216 209.18" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2
+ <defs>
3
+
4
+ </defs>
5
+ <polygon class="cls-3" points="0 82.47 0 126.71 34.84 146.83 34.84 187.06 73.16 209.18 108 189.07 142.84 209.18 181.16 187.06 181.16 146.83 216 126.71 216 82.47 181.16 62.35 181.16 22.12 142.84 0 108 20.12 73.16 0 34.84 22.12 34.84 62.35 0 82.47"/>
6
+ <path class="cls-2" d="m114.33,56.69l20.64-11.92c.47-.27.47-.79,0-1.06l-20.65-11.92h0c-4.44-2.57-8.22-2.57-12.67,0l-20.65,11.92c-.47.27-.47.79,0,1.06l20.64,11.92c4.44,2.57,8.22,2.57,12.67,0h0Z"/>
7
+ <path class="cls-2" d="m98.19,62.71h0s-20.64-11.92-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84s0,0,0,0c0,5.13,1.89,8.4,6.33,10.97l20.65,11.92c.47.27.92,0,.92-.54v-23.84c0-5.13-1.89-8.4-6.33-10.97Z"/>
8
+ <path class="cls-1" d="m48.12,66.01l20.65,11.92c.47.27.92,0,.92-.54v-23.84c0-5.13-1.89-8.4-6.33-10.97h0s-20.64-11.92-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84s0,0,0,0c0,5.13,1.89,8.4,6.33,10.97Z"/>
9
+ <path class="cls-2" d="m46.18,24.66l20.64,11.92c4.44,2.57,8.22,2.57,12.67,0h0s20.64-11.92,20.64-11.92c.47-.27.47-.79,0-1.06l-20.65-11.92h0c-4.44-2.57-8.22-2.57-12.67,0l-20.65,11.92c-.47.27-.47.79,0,1.06Z"/>
10
+ <path class="cls-2" d="m115.87,24.66l20.64,11.92c4.44,2.57,8.22,2.57,12.67,0h0s20.64-11.92,20.64-11.92c.47-.27.47-.79,0-1.06l-20.65-11.92h0c-4.44-2.57-8.22-2.57-12.67,0l-20.65,11.92c-.47.27-.47.79,0,1.06Z"/>
11
+ <path class="cls-2" d="m152.65,42.59c-4.44,2.56-6.33,5.84-6.33,10.97v23.84c0,.54.45.8.92.54l20.65-11.92c4.44-2.57,6.33-5.84,6.33-10.97h0v-23.84c0-.54-.45-.8-.92-.53l-20.64,11.92h0Z"/>
12
+ <path class="cls-2" d="m77.55,158.4l20.65-11.92h0c4.44-2.57,6.33-5.84,6.33-10.97v-23.84c0-.54-.45-.8-.92-.53l-20.64,11.92c-4.44,2.57-6.33,5.84-6.33,10.97h0s0,23.84,0,23.84c0,.54.45.8.92.54Z"/>
13
+ <path class="cls-4" d="m146.31,134.03v23.84c0,.54.45.8.92.54l20.65-11.92c4.44-2.57,6.33-5.84,6.33-10.97h0s0-23.84,0-23.84c0-.54-.45-.8-.92-.53l-20.64,11.92h0c-4.44,2.57-6.33,5.84-6.33,10.97Z"/>
14
+ <path class="cls-4" d="m63.35,123.06h0s-20.64-11.92-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84s0,0,0,0c0,5.13,1.89,8.4,6.33,10.97l20.65,11.92c.47.27.92,0,.92-.54v-23.84c0-5.13-1.89-8.4-6.33-10.97Z"/>
15
+ <path class="cls-4" d="m103.61,151.37l-20.64,11.92c-4.44,2.57-6.33,5.84-6.33,10.97h0s0,23.84,0,23.84c0,.54.45.8.92.54l20.65-11.92h0c4.44-2.57,6.33-5.84,6.33-10.97v-23.84c0-.54-.45-.8-.92-.53Z"/>
16
+ <path class="cls-4" d="m63.35,163.29h0s-20.64-11.92-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84s0,0,0,0c0,5.13,1.89,8.4,6.33,10.97l20.65,11.92c.47.27.92,0,.92-.54v-23.84c0-5.13-1.89-8.4-6.33-10.97Z"/>
17
+ <path class="cls-4" d="m28.51,102.94h0s-20.64-11.92-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84s0,0,0,0c0,5.13,1.89,8.4,6.33,10.97l20.65,11.92c.47.27.92,0,.92-.54v-23.84c0-5.13-1.89-8.4-6.33-10.97Z"/>
18
+ <path class="cls-4" d="m133.04,163.29l-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84c0,5.13,1.89,8.4,6.33,10.97h0s20.65,11.92,20.65,11.92c.47.27.92,0,.92-.54v-23.84s0,0,0,0c0-5.13-1.89-8.4-6.33-10.97Z"/>
19
+ <path class="cls-4" d="m173.29,151.37l-20.64,11.92h0c-4.44,2.57-6.33,5.84-6.33,10.97v23.84c0,.54.45.8.92.54l20.65-11.92c4.44-2.57,6.33-5.84,6.33-10.97h0s0-23.84,0-23.84c0-.54-.45-.8-.92-.53Z"/>
20
+ <path class="cls-4" d="m209.06,91.55c0-.54-.45-.8-.92-.53l-20.64,11.92h0c-4.44,2.57-6.33,5.84-6.33,10.97v23.84c0,.54.45.8.92.54l20.65-11.92c4.44-2.57,6.33-5.84,6.33-10.97h0v-23.84Z"/>
21
+ <path class="cls-2" d="m149.18,117.04l20.64-11.92c.47-.27.47-.79,0-1.06l-20.65-11.92h0c-4.44-2.57-8.22-2.57-12.67,0l-20.65,11.92c-.47.27-.47.79,0,1.06l20.64,11.92c4.44,2.57,8.22,2.57,12.67,0h0Z"/>
22
+ <path class="cls-1" d="m112.39,98.05l20.65-11.92c4.44-2.57,6.33-5.84,6.33-10.97h0v-23.84c0-.54-.45-.8-.92-.53l-20.64,11.92h0c-4.44,2.57-6.33,5.84-6.33,10.97v23.84c0,.54.45.8.92.54Z"/>
23
+ <path class="cls-1" d="m100.13,105.12c.47-.27.47-.79,0-1.06l-20.65-11.92c-4.44-2.57-8.22-2.57-12.67,0h0s-20.65,11.92-20.65,11.92c-.47.27-.47.79,0,1.06l20.64,11.92h0c4.44,2.57,8.22,2.57,12.67,0l20.64-11.92Z"/>
24
+ <path class="cls-2" d="m65.29,85.01c.47-.27.47-.79,0-1.06l-20.65-11.92c-4.44-2.57-8.22-2.57-12.67,0h0s-20.65,11.92-20.65,11.92c-.47.27-.47.79,0,1.06l20.64,11.92h0c4.44,2.57,8.22,2.57,12.67,0l20.64-11.92Z"/>
25
+ <path class="cls-1" d="m133.04,123.06l-20.64-11.92c-.47-.27-.92-.01-.92.53v23.84c0,5.13,1.89,8.4,6.33,10.97h0s20.65,11.92,20.65,11.92c.47.27.92,0,.92-.54v-23.84s0,0,0,0c0-5.13-1.89-8.4-6.33-10.97Z"/>
26
+ <path class="cls-1" d="m184.02,96.93l20.64-11.92c.47-.27.47-.79,0-1.06l-20.65-11.92h0c-4.44-2.57-8.22-2.57-12.67,0l-20.65,11.92c-.47.27-.47.79,0,1.06l20.64,11.92c4.44,2.57,8.22,2.57,12.67,0h0Z"/>
27
+ </svg>
@@ -4,13 +4,12 @@ html
4
4
  }
5
5
  body,nav{ display: flex; flex-wrap: wrap; align-content: stretch; gap: 1rem; }
6
6
  body>*{flex: auto;}
7
- nav{ flex-direction: column;}
8
- custom-element+*,
9
- custom-element+*+*,
10
- custom-element:not([tag]),
11
- dce-link,dce-1-slot,dce-2-slot,dce-3-slot,dce-4-slot,dce-2-slots,greet-element,pokemon-tile,
12
- dce-1,dce-2,dce-3,dce-4,dce-internal,dce-hash
13
- { box-shadow: 0 0 0.5rem lime; padding: 1rem; display: inline-block; flex:1; }
7
+ nav
8
+ { flex-direction: column;
9
+ dce-root{ box-shadow:none; padding: 0;}
10
+ }
11
+
12
+ html-demo-element *:has(>dce-root){ box-shadow: 0 0 0.5rem lime; padding: 1rem; flex:1; display: block; }
14
13
  script{ display:none !important; }
15
14
  dd{ padding: 1rem;}
16
15
  p{ margin: 0;}
@@ -141,13 +141,13 @@
141
141
  <html-demo-element legend="6. HTML, SVG by ID within external file" description="Should render 👋, svg, formula">
142
142
  <a href="html-template.html">html-template.html</a>
143
143
  <template>
144
- <custom-element src="html-template.html#wave">
144
+ <custom-element src="./html-template.html#wave">
145
145
  <template><i>loading HTML from templates file ...</i></template>
146
146
  </custom-element>
147
- <custom-element src="html-template.html#dwc-logo">
147
+ <custom-element src="./html-template.html#dwc-logo">
148
148
  <template><i>loading SVG from templates file ...</i></template>
149
149
  </custom-element>
150
- <custom-element src="html-template.html#sophomores-dream">
150
+ <custom-element src="./html-template.html#sophomores-dream">
151
151
  <template><i>loading MathML from HTML file ...</i></template>
152
152
  </custom-element>
153
153
  </template>
@@ -4,8 +4,16 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5
5
  <title>DOM merge - Declarative Custom Element implementation demo</title>
6
6
  <link rel="icon" href="./wc-square.svg"/>
7
-
7
+ <script type="importmap">
8
+ {
9
+ "imports": {
10
+ "@epa-wg/custom-element/": "../",
11
+ "@epa-wg/custom-element-dist/": "../"
12
+ }
13
+ }
14
+ </script>
8
15
  <script type="module" src="../http-request.js"></script>
16
+ <script type="module" src="../location-element.js"></script>
9
17
  <script type="module" src="../custom-element.js"></script>
10
18
  <style>
11
19
  @import "./demo.css";
@@ -40,16 +48,20 @@
40
48
  <html-demo-element legend="1. NPM package version picker"
41
49
  description="defaults, last version should be preselected">
42
50
  <template>
43
- <custom-element tag="npm-version" src="./npm-versions.html#npm-version"></custom-element>
44
- <npm-version package-name="@epa-wg/custom-element-dist"></npm-version>
51
+ <custom-element src="./npm-versions.html#npm-version"
52
+ package-name="@epa-wg/custom-element-dist"></custom-element>
45
53
  </template>
46
54
  </html-demo-element>
47
55
 
48
56
  <html-demo-element legend="2. preselected NPM package version picker"
49
- description="version 22 should be selected">
57
+ description="version 22 should be selected and date shown">
50
58
  <template>
51
59
  <custom-element tag="custom-element-version" src="./npm-versions.html#npm-version"></custom-element>
52
- <custom-element-version current-version="0.0.22" package-name="@epa-wg/custom-element"></custom-element-version>
60
+ <custom-element-version
61
+ package-name="@epa-wg/custom-element"
62
+ current-version="0.0.22"
63
+ show-date="true"
64
+ ></custom-element-version>
53
65
  </template>
54
66
  </html-demo-element>
55
67
 
@@ -90,11 +102,12 @@
90
102
 
91
103
  <html-demo-element legend="5. control version in URL"
92
104
  description="">
93
- 1. <button onclick="window.location.hash = `#@epa-wg/custom-element-dist@0.0.26/storybook-static/index.html`">set in page URL</button>
94
- (can be skipped when run from unpkg.com)<br/>
105
+ 1. <button onclick="window.location.hash = `#@epa-wg/custom-element-dist@0.0.25/storybook-static/index.html`">set in page URL to version 0.0.25</button><br/>
95
106
  2. switch the package version in select and observe the URL change.
96
107
  <template>
97
- <custom-element src="./npm-versions.html#npm-version-to-url" package-name="custom-element-dist" current-version="0.0.26"></custom-element>
108
+ <custom-element src="@epa-wg/custom-element-dist/demo/npm-versions.html#npm-version-to-url"
109
+ package-name="@epa-wg/custom-element-dist"
110
+ ></custom-element>
98
111
  </template>
99
112
  </html-demo-element>
100
113