kempo 4.2.19 → 4.2.21

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 (176) hide show
  1. package/app-public/CATCH.page.html +15 -0
  2. package/app-public/kempo-global.global.html +0 -6
  3. package/bin/cli.js +4 -21
  4. package/dist/admin/accounts/groups/[name]/index.page.html +114 -4
  5. package/dist/admin/accounts/groups/index.page.html +89 -4
  6. package/dist/admin/accounts/permissions/index.page.html +86 -4
  7. package/dist/admin/accounts/users/[id]/index.page.html +117 -3
  8. package/dist/admin/accounts/users/index.page.html +118 -4
  9. package/dist/admin/components/AddGroupControl.js +1 -5
  10. package/dist/admin/components/AddGroupControl.js.map +1 -1
  11. package/dist/admin/components/AdminTableControl.js +2 -0
  12. package/dist/admin/components/AdminTableControl.js.map +1 -0
  13. package/dist/admin/components/ClearExpiredSessionsControl.js +1 -5
  14. package/dist/admin/components/ClearExpiredSessionsControl.js.map +1 -1
  15. package/dist/admin/components/GroupDeleteSelected.js +1 -5
  16. package/dist/admin/components/GroupDeleteSelected.js.map +1 -1
  17. package/dist/admin/components/GroupRemoveRecord.js +1 -5
  18. package/dist/admin/components/GroupRemoveRecord.js.map +1 -1
  19. package/dist/admin/components/TableRowDelete.js +1 -3
  20. package/dist/admin/components/TableRowDelete.js.map +1 -1
  21. package/dist/admin/components/TableRowLink.js +1 -7
  22. package/dist/admin/components/TableRowLink.js.map +1 -1
  23. package/dist/admin/components/tableControls/AddMember.js +1 -5
  24. package/dist/admin/components/tableControls/AddMember.js.map +1 -1
  25. package/dist/admin/components/tableControls/AddPermission.js +1 -5
  26. package/dist/admin/components/tableControls/AddPermission.js.map +1 -1
  27. package/dist/admin/components/tableControls/InstallExtension.js +1 -5
  28. package/dist/admin/components/tableControls/InstallExtension.js.map +1 -1
  29. package/dist/admin/components/tableControls/UninstallExtension.js +1 -5
  30. package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -1
  31. package/dist/admin/content/fragments/edit/index.page.html +8 -1
  32. package/dist/admin/content/fragments/index.page.html +88 -3
  33. package/dist/admin/content/globals/edit/index.page.html +8 -1
  34. package/dist/admin/content/globals/index.page.html +103 -8
  35. package/dist/admin/content/pages/edit/index.page.html +8 -1
  36. package/dist/admin/content/pages/index.page.html +225 -28
  37. package/dist/admin/content/templates/edit/index.page.html +8 -1
  38. package/dist/admin/content/templates/index.page.html +117 -3
  39. package/dist/admin/default.template.html +20 -1
  40. package/dist/admin/extensions/index.page.html +59 -2
  41. package/dist/admin/icons/extension_add.svg +1 -0
  42. package/dist/admin/icons/extension_remove.svg +1 -0
  43. package/dist/admin/index.page.html +5 -1
  44. package/dist/admin/init.js.map +1 -1
  45. package/dist/admin/nav.fragment.html +84 -2
  46. package/dist/admin/settings/[owner]/[name]/index.page.html +110 -4
  47. package/dist/admin/settings/index.page.html +89 -4
  48. package/dist/kempo/api/admin-globals/DELETE.js +1 -1
  49. package/dist/kempo/api/admin-globals/DELETE.js.map +1 -1
  50. package/dist/kempo/api/admin-globals/GET.js +1 -1
  51. package/dist/kempo/api/admin-globals/GET.js.map +1 -1
  52. package/dist/kempo/api/admin-globals/POST.js +1 -1
  53. package/dist/kempo/api/admin-globals/POST.js.map +1 -1
  54. package/dist/kempo/api/admin-globals/[id]/GET.js +1 -1
  55. package/dist/kempo/api/admin-globals/[id]/GET.js.map +1 -1
  56. package/dist/kempo/api/admin-globals/[id]/PUT.js +1 -1
  57. package/dist/kempo/api/admin-globals/[id]/PUT.js.map +1 -1
  58. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +1 -1
  59. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js.map +1 -1
  60. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +1 -1
  61. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js.map +1 -1
  62. package/dist/kempo/api/extensions/DELETE.js +1 -1
  63. package/dist/kempo/api/extensions/DELETE.js.map +1 -1
  64. package/dist/kempo/api/extensions/POST.js +1 -1
  65. package/dist/kempo/api/extensions/POST.js.map +1 -1
  66. package/dist/kempo/api/extensions/[name]/disable/POST.js +1 -1
  67. package/dist/kempo/api/extensions/[name]/disable/POST.js.map +1 -1
  68. package/dist/kempo/api/extensions/[name]/enable/POST.js +1 -1
  69. package/dist/kempo/api/extensions/[name]/enable/POST.js.map +1 -1
  70. package/dist/kempo/api/extensions/[name]/update/POST.js +1 -1
  71. package/dist/kempo/api/extensions/[name]/update/POST.js.map +1 -1
  72. package/dist/kempo/api/extensions/[name]/update-check/GET.js +1 -1
  73. package/dist/kempo/api/extensions/[name]/update-check/GET.js.map +1 -1
  74. package/dist/kempo/api/fragments/DELETE.js +1 -1
  75. package/dist/kempo/api/fragments/DELETE.js.map +1 -1
  76. package/dist/kempo/api/fragments/GET.js +1 -1
  77. package/dist/kempo/api/fragments/GET.js.map +1 -1
  78. package/dist/kempo/api/fragments/POST.js +1 -1
  79. package/dist/kempo/api/fragments/POST.js.map +1 -1
  80. package/dist/kempo/api/fragments/disable/PUT.js +1 -1
  81. package/dist/kempo/api/fragments/disable/PUT.js.map +1 -1
  82. package/dist/kempo/api/fragments/enable/PUT.js +1 -1
  83. package/dist/kempo/api/fragments/enable/PUT.js.map +1 -1
  84. package/dist/kempo/api/fragments/file/GET.js +1 -1
  85. package/dist/kempo/api/fragments/file/GET.js.map +1 -1
  86. package/dist/kempo/api/fragments/file/PATCH.js +1 -1
  87. package/dist/kempo/api/fragments/file/PATCH.js.map +1 -1
  88. package/dist/kempo/api/fragments/file/PUT.js +1 -1
  89. package/dist/kempo/api/fragments/file/PUT.js.map +1 -1
  90. package/dist/kempo/api/fragments/lock/PUT.js +1 -1
  91. package/dist/kempo/api/fragments/lock/PUT.js.map +1 -1
  92. package/dist/kempo/api/globals/DELETE.js +1 -1
  93. package/dist/kempo/api/globals/DELETE.js.map +1 -1
  94. package/dist/kempo/api/globals/GET.js +1 -1
  95. package/dist/kempo/api/globals/GET.js.map +1 -1
  96. package/dist/kempo/api/globals/POST.js +1 -1
  97. package/dist/kempo/api/globals/POST.js.map +1 -1
  98. package/dist/kempo/api/globals/disable/PUT.js +1 -1
  99. package/dist/kempo/api/globals/disable/PUT.js.map +1 -1
  100. package/dist/kempo/api/globals/enable/PUT.js +1 -1
  101. package/dist/kempo/api/globals/enable/PUT.js.map +1 -1
  102. package/dist/kempo/api/globals/entry/GET.js +1 -1
  103. package/dist/kempo/api/globals/entry/GET.js.map +1 -1
  104. package/dist/kempo/api/globals/entry/PUT.js +1 -1
  105. package/dist/kempo/api/globals/entry/PUT.js.map +1 -1
  106. package/dist/kempo/api/globals/lock/PUT.js +1 -1
  107. package/dist/kempo/api/globals/lock/PUT.js.map +1 -1
  108. package/dist/kempo/api/pages/DELETE.js +1 -1
  109. package/dist/kempo/api/pages/DELETE.js.map +1 -1
  110. package/dist/kempo/api/pages/GET.js +1 -1
  111. package/dist/kempo/api/pages/GET.js.map +1 -1
  112. package/dist/kempo/api/pages/POST.js +1 -1
  113. package/dist/kempo/api/pages/POST.js.map +1 -1
  114. package/dist/kempo/api/pages/directories/GET.js +1 -1
  115. package/dist/kempo/api/pages/directories/GET.js.map +1 -1
  116. package/dist/kempo/api/pages/disable/PUT.js +1 -1
  117. package/dist/kempo/api/pages/disable/PUT.js.map +1 -1
  118. package/dist/kempo/api/pages/enable/PUT.js +1 -1
  119. package/dist/kempo/api/pages/enable/PUT.js.map +1 -1
  120. package/dist/kempo/api/pages/file/GET.js +1 -1
  121. package/dist/kempo/api/pages/file/GET.js.map +1 -1
  122. package/dist/kempo/api/pages/file/PATCH.js +1 -1
  123. package/dist/kempo/api/pages/file/PATCH.js.map +1 -1
  124. package/dist/kempo/api/pages/file/PUT.js +1 -1
  125. package/dist/kempo/api/pages/file/PUT.js.map +1 -1
  126. package/dist/kempo/api/pages/lock/PUT.js +1 -1
  127. package/dist/kempo/api/pages/lock/PUT.js.map +1 -1
  128. package/dist/kempo/api/pages/rescan/POST.js +2 -0
  129. package/dist/kempo/api/pages/rescan/POST.js.map +1 -0
  130. package/dist/kempo/api/pages/search/GET.js +1 -1
  131. package/dist/kempo/api/pages/search/GET.js.map +1 -1
  132. package/dist/kempo/api/pages/templates/GET.js +1 -1
  133. package/dist/kempo/api/pages/templates/GET.js.map +1 -1
  134. package/dist/kempo/api/templates/DELETE.js +1 -1
  135. package/dist/kempo/api/templates/DELETE.js.map +1 -1
  136. package/dist/kempo/api/templates/GET.js +1 -1
  137. package/dist/kempo/api/templates/GET.js.map +1 -1
  138. package/dist/kempo/api/templates/POST.js +1 -1
  139. package/dist/kempo/api/templates/POST.js.map +1 -1
  140. package/dist/kempo/api/templates/disable/PUT.js +1 -1
  141. package/dist/kempo/api/templates/disable/PUT.js.map +1 -1
  142. package/dist/kempo/api/templates/enable/PUT.js +1 -1
  143. package/dist/kempo/api/templates/enable/PUT.js.map +1 -1
  144. package/dist/kempo/api/templates/file/GET.js +1 -1
  145. package/dist/kempo/api/templates/file/GET.js.map +1 -1
  146. package/dist/kempo/api/templates/file/PATCH.js +1 -1
  147. package/dist/kempo/api/templates/file/PATCH.js.map +1 -1
  148. package/dist/kempo/api/templates/file/PUT.js +1 -1
  149. package/dist/kempo/api/templates/file/PUT.js.map +1 -1
  150. package/dist/kempo/api/templates/lock/PUT.js +1 -1
  151. package/dist/kempo/api/templates/lock/PUT.js.map +1 -1
  152. package/dist/kempo/api/user/[userid]/name/GET.js +2 -0
  153. package/dist/kempo/api/user/[userid]/name/GET.js.map +1 -0
  154. package/dist/kempo/components/UserDisplayName.js +2 -0
  155. package/dist/kempo/components/UserDisplayName.js.map +1 -0
  156. package/dist/kempo/sdk.js +1 -1
  157. package/dist/kempo/sdk.js.map +1 -1
  158. package/middleware/kempo.js +99 -25
  159. package/package.json +16 -9
  160. package/server/utils/admin-global-content/createAdminGlobalContent.js +4 -3
  161. package/server/utils/admin-global-content/deleteAdminGlobalContent.js +2 -2
  162. package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +2 -2
  163. package/server/utils/admin-global-content/disableAdminGlobalContent.js +2 -2
  164. package/server/utils/admin-global-content/enableAdminGlobalContent.js +2 -2
  165. package/server/utils/admin-global-content/getAdminGlobalContent.js +2 -2
  166. package/server/utils/admin-global-content/helpers.js +12 -1
  167. package/server/utils/admin-global-content/listAdminGlobalContent.js +2 -2
  168. package/server/utils/admin-global-content/updateAdminGlobalContent.js +2 -2
  169. package/server/utils/email/sendEmail.js +9 -3
  170. package/server/utils/extensions/uninstallExtension.js +54 -21
  171. package/server/utils/fragments/listFragments.js +10 -1
  172. package/server/utils/hooks/triggerHook.js +15 -13
  173. package/server/utils/pages/listPages.js +57 -7
  174. package/app-public/kempo-global.global-disabled.html +0 -0
  175. package/app-public/new-page.page.html +0 -17
  176. package/app-public/test.page.html +0 -21
@@ -1,7 +1,88 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Fragments - Admin"><content><script type="module" src="/kempo-ui/components/Table.js"></script><script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script><script type="module" src="/kempo-ui/components/Icon.js"></script><script type="module" src="/admin/components/TableRowLink.js"></script><script type="module" src="/kempo/components/Permission.js"></script><div class="d-f mb" style="align-items: center; gap: var(--spacer);"><h1 class="flex mb0">Fragments</h1><k-permission has="system:fragments:create"><button id="createFragmentBtn" class="primary">Create Fragment</button></k-permission></div><h2>Custom Fragments</h2><k-table id="customTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No custom fragments have been created yet."><admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link><div slot="top" class="d-f full" style="align-items: center;"><div><k-permission has="system:fragments:delete"><k-tc-delete-selected></k-tc-delete-selected></k-permission></div></div><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><h2>Extension Fragments</h2><k-table id="extensionTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No extension fragments installed."><admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><h2>System Fragments</h2><k-table id="systemTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No system fragments found."><admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><script type="module">import { listFragments, listDirectories, createFragment, deleteFragments, getAllCurrentUserPermissions } from '/kempo/sdk.js';
4
+ <page title="Fragments - Admin">
5
+ <content>
6
+ <script type="module" src="/kempo-ui/components/Table.js"></script>
7
+ <script type="module" src="/kempo-ui/components/controls/TcFirstPage.js"></script>
8
+ <script type="module" src="/kempo-ui/components/controls/TcPrevPage.js"></script>
9
+ <script type="module" src="/kempo-ui/components/controls/TcNextPage.js"></script>
10
+ <script type="module" src="/kempo-ui/components/controls/TcLastPage.js"></script>
11
+ <script type="module" src="/kempo-ui/components/controls/TcPageSelect.js"></script>
12
+ <script type="module" src="/kempo-ui/components/controls/TcPageSize.js"></script>
13
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteRecord.js"></script>
14
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteSelected.js"></script>
15
+ <script type="module" src="/kempo-ui/components/Icon.js"></script>
16
+ <script type="module" src="/admin/components/TableRowLink.js"></script>
17
+ <script type="module" src="/kempo/components/Permission.js"></script>
18
+
19
+ <div class="d-f mb" style="align-items: center; gap: var(--spacer);">
20
+ <h1 class="flex mb0">Fragments</h1>
21
+ <k-permission has="system:fragments:create">
22
+ <button id="createFragmentBtn" class="primary">Create Fragment</button>
23
+ </k-permission>
24
+ </div>
25
+
26
+ <h2>Custom Fragments</h2>
27
+ <k-table id="customTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No custom fragments have been created yet.">
28
+ <admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link>
29
+ <div slot="top" class="d-f full" style="align-items: center;">
30
+ <div>
31
+ <k-permission has="system:fragments:delete">
32
+ <kc-tc-delete-selected></kc-tc-delete-selected>
33
+ </k-permission>
34
+ </div>
35
+ </div>
36
+ <div class="d-f full" style="align-items: center;">
37
+ <div>
38
+ <kc-tc-first-page></kc-tc-first-page>
39
+ <kc-tc-prev-page></kc-tc-prev-page>
40
+ <kc-tc-next-page></kc-tc-next-page>
41
+ <kc-tc-last-page></kc-tc-last-page>
42
+ </div>
43
+ <div class="flex"></div>
44
+ <div><kc-tc-page-select></kc-tc-page-select></div>
45
+ <div class="flex"></div>
46
+ <div><kc-tc-page-size></kc-tc-page-size></div>
47
+ </div>
48
+ </k-table>
49
+
50
+ <h2>Extension Fragments</h2>
51
+ <k-table id="extensionTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No extension fragments installed.">
52
+ <admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link>
53
+ <div class="d-f full" style="align-items: center;">
54
+ <div>
55
+ <kc-tc-first-page></kc-tc-first-page>
56
+ <kc-tc-prev-page></kc-tc-prev-page>
57
+ <kc-tc-next-page></kc-tc-next-page>
58
+ <kc-tc-last-page></kc-tc-last-page>
59
+ </div>
60
+ <div class="flex"></div>
61
+ <div><kc-tc-page-select></kc-tc-page-select></div>
62
+ <div class="flex"></div>
63
+ <div><kc-tc-page-size></kc-tc-page-size></div>
64
+ </div>
65
+ </k-table>
66
+
67
+ <h2>System Fragments</h2>
68
+ <k-table id="systemTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No system fragments found.">
69
+ <admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link>
70
+ <div class="d-f full" style="align-items: center;">
71
+ <div>
72
+ <kc-tc-first-page></kc-tc-first-page>
73
+ <kc-tc-prev-page></kc-tc-prev-page>
74
+ <kc-tc-next-page></kc-tc-next-page>
75
+ <kc-tc-last-page></kc-tc-last-page>
76
+ </div>
77
+ <div class="flex"></div>
78
+ <div><kc-tc-page-select></kc-tc-page-select></div>
79
+ <div class="flex"></div>
80
+ <div><kc-tc-page-size></kc-tc-page-size></div>
81
+ </div>
82
+ </k-table>
83
+
84
+ <script type="module">
85
+ import { listFragments, listDirectories, createFragment, deleteFragments, getAllCurrentUserPermissions } from '/kempo/sdk.js';
5
86
  import { html } from '/kempo-ui/lit-all.min.js';
6
87
  import Dialog from '/kempo-ui/components/Dialog.js';
7
88
  import Toast from '/kempo-ui/components/Toast.js';
@@ -47,7 +128,7 @@
47
128
  if(myPerms.has('system:fragments:delete')){
48
129
  $customTable.setAttribute('request-delete', '');
49
130
  $customTable.setAttribute('enable-selection', '');
50
- const del = document.createElement('k-tc-delete-record');
131
+ const del = document.createElement('kc-tc-delete-record');
51
132
  del.setAttribute('slot', 'after');
52
133
  $customTable.appendChild(del);
53
134
  }
@@ -166,4 +247,8 @@
166
247
  updateSlug();
167
248
  });
168
249
  $dialog.querySelector('#dlg-name').addEventListener('input', updateSlug);
169
- });</script></content></page>
250
+ });
251
+ </script>
252
+ </content>
253
+ </page>
254
+
@@ -1,4 +1,11 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Edit Global Content - Admin"><content><admin-global-content-editor></admin-global-content-editor></content><content location="head"><script type="module" src="/admin/components/GlobalContentEditor.js"></script></content></page>
4
+ <page title="Edit Global Content - Admin">
5
+ <content>
6
+ <admin-global-content-editor></admin-global-content-editor>
7
+ </content>
8
+ <content location="head">
9
+ <script type="module" src="/admin/components/GlobalContentEditor.js"></script>
10
+ </content>
11
+ </page>
@@ -1,7 +1,89 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Global Content - Admin"><content><script type="module" src="/kempo-ui/components/Table.js"></script><script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script><script type="module" src="/kempo-ui/components/Icon.js"></script><script type="module" src="/admin/components/TableRowLink.js"></script><script type="module" src="/kempo/components/Permission.js"></script><div class="d-f mb" style="align-items: center; gap: var(--spacer);"><h1 class="flex mb0">Global Content</h1><k-permission has="system:globals:create"><button id="createGlobalBtn" class="primary">Create Global Content</button></k-permission></div><h2>Custom</h2><k-table id="customTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No custom global content has been created yet."><admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link><div slot="top" class="d-f full" style="align-items: center;"><div><k-permission has="system:globals:delete"><k-tc-delete-selected></k-tc-delete-selected></k-permission></div></div><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><h2>Extensions</h2><k-table id="extensionTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No extension global content installed."><admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><h2>System</h2><k-table id="systemTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No system global content found."><admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><script type="module">import { listGlobalContent, listTemplates, createGlobalContent, deleteGlobalContent, getAllCurrentUserPermissions } from '/kempo/sdk.js';
4
+ <page title="Global Content - Admin">
5
+ <content>
6
+ <script type="module" src="/kempo-ui/components/Table.js"></script>
7
+ <script type="module" src="/kempo-ui/components/controls/TcFirstPage.js"></script>
8
+ <script type="module" src="/kempo-ui/components/controls/TcPrevPage.js"></script>
9
+ <script type="module" src="/kempo-ui/components/controls/TcNextPage.js"></script>
10
+ <script type="module" src="/kempo-ui/components/controls/TcLastPage.js"></script>
11
+ <script type="module" src="/kempo-ui/components/controls/TcPageSelect.js"></script>
12
+ <script type="module" src="/kempo-ui/components/controls/TcPageSize.js"></script>
13
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteRecord.js"></script>
14
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteSelected.js"></script>
15
+ <script type="module" src="/kempo-ui/components/Icon.js"></script>
16
+ <script type="module" src="/kempo-ui/components/Combobox.js"></script>
17
+ <script type="module" src="/admin/components/TableRowLink.js"></script>
18
+ <script type="module" src="/kempo/components/Permission.js"></script>
19
+
20
+ <div class="d-f mb" style="align-items: center; gap: var(--spacer);">
21
+ <h1 class="flex mb0">Global Content</h1>
22
+ <k-permission has="system:globals:create">
23
+ <button id="createGlobalBtn" class="primary">Create Global Content</button>
24
+ </k-permission>
25
+ </div>
26
+
27
+ <h2>Custom</h2>
28
+ <k-table id="customTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No custom global content has been created yet.">
29
+ <admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link>
30
+ <div slot="top" class="d-f full" style="align-items: center;">
31
+ <div>
32
+ <k-permission has="system:globals:delete">
33
+ <kc-tc-delete-selected></kc-tc-delete-selected>
34
+ </k-permission>
35
+ </div>
36
+ </div>
37
+ <div class="d-f full" style="align-items: center;">
38
+ <div>
39
+ <kc-tc-first-page></kc-tc-first-page>
40
+ <kc-tc-prev-page></kc-tc-prev-page>
41
+ <kc-tc-next-page></kc-tc-next-page>
42
+ <kc-tc-last-page></kc-tc-last-page>
43
+ </div>
44
+ <div class="flex"></div>
45
+ <div><kc-tc-page-select></kc-tc-page-select></div>
46
+ <div class="flex"></div>
47
+ <div><kc-tc-page-size></kc-tc-page-size></div>
48
+ </div>
49
+ </k-table>
50
+
51
+ <h2>Extensions</h2>
52
+ <k-table id="extensionTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No extension global content installed.">
53
+ <admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link>
54
+ <div class="d-f full" style="align-items: center;">
55
+ <div>
56
+ <kc-tc-first-page></kc-tc-first-page>
57
+ <kc-tc-prev-page></kc-tc-prev-page>
58
+ <kc-tc-next-page></kc-tc-next-page>
59
+ <kc-tc-last-page></kc-tc-last-page>
60
+ </div>
61
+ <div class="flex"></div>
62
+ <div><kc-tc-page-select></kc-tc-page-select></div>
63
+ <div class="flex"></div>
64
+ <div><kc-tc-page-size></kc-tc-page-size></div>
65
+ </div>
66
+ </k-table>
67
+
68
+ <h2>System</h2>
69
+ <k-table id="systemTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No system global content found.">
70
+ <admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link>
71
+ <div class="d-f full" style="align-items: center;">
72
+ <div>
73
+ <kc-tc-first-page></kc-tc-first-page>
74
+ <kc-tc-prev-page></kc-tc-prev-page>
75
+ <kc-tc-next-page></kc-tc-next-page>
76
+ <kc-tc-last-page></kc-tc-last-page>
77
+ </div>
78
+ <div class="flex"></div>
79
+ <div><kc-tc-page-select></kc-tc-page-select></div>
80
+ <div class="flex"></div>
81
+ <div><kc-tc-page-size></kc-tc-page-size></div>
82
+ </div>
83
+ </k-table>
84
+
85
+ <script type="module">
86
+ import { listGlobalContent, listTemplates, listFragments, createGlobalContent, deleteGlobalContent, getAllCurrentUserPermissions } from '/kempo/sdk.js';
5
87
  import { html } from '/kempo-ui/lit-all.min.js';
6
88
  import Dialog from '/kempo-ui/components/Dialog.js';
7
89
  import Toast from '/kempo-ui/components/Toast.js';
@@ -49,7 +131,7 @@
49
131
  if(myPerms.has('system:globals:delete')){
50
132
  $customTable.setAttribute('request-delete', '');
51
133
  $customTable.setAttribute('enable-selection', '');
52
- const del = document.createElement('k-tc-delete-record');
134
+ const del = document.createElement('kc-tc-delete-record');
53
135
  del.setAttribute('slot', 'after');
54
136
  $customTable.appendChild(del);
55
137
  }
@@ -86,7 +168,7 @@
86
168
  */
87
169
 
88
170
  document.getElementById('createGlobalBtn')?.addEventListener('click', async () => {
89
- const [tplError, tplData] = await listTemplates();
171
+ const [[tplError, tplData], [fragError, fragData]] = await Promise.all([listTemplates(), listFragments()]);
90
172
  const locations = new Set();
91
173
  if(!tplError && tplData?.templates){
92
174
  for(const t of tplData.templates){
@@ -95,6 +177,11 @@
95
177
  }
96
178
  }
97
179
  }
180
+ if(!fragError && fragData?.fragments){
181
+ for(const f of fragData.fragments){
182
+ for(const loc of (f.locations || [])) locations.add(loc);
183
+ }
184
+ }
98
185
  const locationOptions = [...locations].sort();
99
186
 
100
187
  const $dialog = Dialog.create(html`
@@ -105,10 +192,7 @@
105
192
  </div>
106
193
  <div class="mb">
107
194
  <label class="d-b mb-sm">Location</label>
108
- <input type="text" id="dlg-location" class="full" list="dlg-location-list" placeholder="scripts" required>
109
- <datalist id="dlg-location-list">
110
- ${locationOptions.map(l => html`<option value="${l}">`)}
111
- </datalist>
195
+ <div id="dlg-location-wrap"></div>
112
196
  <p class="mt-sm muted"><small>The template location to inject this content into.</small></p>
113
197
  </div>
114
198
  <div>
@@ -149,4 +233,15 @@
149
233
  },
150
234
  cancelText: 'Cancel'
151
235
  });
152
- });</script></content></page>
236
+
237
+ const $combobox = document.createElement('k-combobox');
238
+ $combobox.id = 'dlg-location';
239
+ $combobox.className = 'full';
240
+ $combobox.setAttribute('placeholder', 'scripts');
241
+ $combobox.setOptions(locationOptions);
242
+ $dialog.querySelector('#dlg-location-wrap').appendChild($combobox);
243
+ });
244
+ </script>
245
+ </content>
246
+ </page>
247
+
@@ -1,4 +1,11 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Edit Page - Admin"><content><admin-page-editor></admin-page-editor></content><content location="head"><script type="module" src="/admin/components/PageEditor.js"></script></content></page>
4
+ <page title="Edit Page - Admin">
5
+ <content>
6
+ <admin-page-editor></admin-page-editor>
7
+ </content>
8
+ <content location="head">
9
+ <script type="module" src="/admin/components/PageEditor.js"></script>
10
+ </content>
11
+ </page>
@@ -1,7 +1,174 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Pages - Admin"><content><script type="module" src="/kempo-ui/components/Table.js"></script><script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script><script type="module" src="/kempo-ui/components/Icon.js"></script><script type="module" src="/admin/components/TableRowLink.js"></script><script type="module" src="/kempo/components/Permission.js"></script><div class="d-f mb" style="align-items: center; gap: var(--spacer);"><h1 class="flex mb0">Pages</h1><k-permission has="system:pages:create"><button id="createPageBtn" class="primary">Create Page</button></k-permission></div><h2>Custom Pages</h2><k-table id="customTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No custom pages have been created yet."><admin-table-row-link slot="before" url-pattern="/admin/content/pages/edit?path={editPath}" field-name="editPath"></admin-table-row-link><div slot="top" class="d-f full" style="align-items: center;"><div><k-permission has="system:pages:delete"><k-tc-delete-selected></k-tc-delete-selected></k-permission></div></div><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><h2>Extension Pages</h2><k-table id="extensionTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No extension pages installed."><admin-table-row-link slot="before" url-pattern="/admin/pages/edit?path={editPath}" field-name="editPath"></admin-table-row-link><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><h2>System Pages</h2><k-table id="systemTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No system pages found."><admin-table-row-link slot="before" url-pattern="/admin/pages/edit?path={editPath}" field-name="editPath"></admin-table-row-link><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><script type="module">import { listPages, listTemplates, listDirectories, createPage, deletePages, getAllCurrentUserPermissions } from '/kempo/sdk.js';
4
+ <page title="Pages - Admin">
5
+ <content>
6
+ <script
7
+ type="module"
8
+ src="/kempo-ui/components/Table.js"
9
+ ></script>
10
+ <script
11
+ type="module"
12
+ src="/kempo-ui/components/controls/TcFirstPage.js"
13
+ ></script>
14
+ <script
15
+ type="module"
16
+ src="/kempo-ui/components/controls/TcPrevPage.js"
17
+ ></script>
18
+ <script
19
+ type="module"
20
+ src="/kempo-ui/components/controls/TcNextPage.js"
21
+ ></script>
22
+ <script
23
+ type="module"
24
+ src="/kempo-ui/components/controls/TcLastPage.js"
25
+ ></script>
26
+ <script
27
+ type="module"
28
+ src="/kempo-ui/components/controls/TcPageSelect.js"
29
+ ></script>
30
+ <script
31
+ type="module"
32
+ src="/kempo-ui/components/controls/TcPageSize.js"
33
+ ></script>
34
+ <script
35
+ type="module"
36
+ src="/kempo-ui/components/controls/TcDeleteRecord.js"
37
+ ></script>
38
+ <script
39
+ type="module"
40
+ src="/kempo-ui/components/controls/TcDeleteSelected.js"
41
+ ></script>
42
+ <script
43
+ type="module"
44
+ src="/kempo-ui/components/Icon.js"
45
+ ></script>
46
+ <script
47
+ type="module"
48
+ src="/admin/components/TableRowLink.js"
49
+ ></script>
50
+ <script
51
+ type="module"
52
+ src="/kempo/components/Permission.js"
53
+ ></script>
54
+ <div class="d-f mb">
55
+ <h1 class="flex mb0">Pages</h1>
56
+ <div class="flex"></div>
57
+ <div>
58
+ <span id="scanInfo" class="muted"></span>
59
+ <button id="rescanBtn">Rescan</button>
60
+ <k-permission has="system:pages:create">
61
+ <button
62
+ id="createPageBtn"
63
+ class="primary"
64
+ >Create Page</button>
65
+ </k-permission>
66
+ </div>
67
+ </div>
68
+
69
+ <h2>Custom Pages</h2>
70
+ <k-table
71
+ id="customTable"
72
+ enable-pages
73
+ page-size="25"
74
+ page-size-options="[10,25,50,100]"
75
+ placeholder="No custom pages have been created yet."
76
+ >
77
+ <admin-table-row-link
78
+ slot="before"
79
+ url-pattern="/admin/content/pages/edit?path={editPath}"
80
+ field-name="editPath"
81
+ ></admin-table-row-link>
82
+ <div
83
+ slot="top"
84
+ class="d-f full"
85
+ style="align-items: center;"
86
+ >
87
+ <div>
88
+ <k-permission has="system:pages:delete">
89
+ <kc-tc-delete-selected></kc-tc-delete-selected>
90
+ </k-permission>
91
+ </div>
92
+ </div>
93
+ <div
94
+ class="d-f full"
95
+ style="align-items: center;"
96
+ >
97
+ <div>
98
+ <kc-tc-first-page></kc-tc-first-page>
99
+ <kc-tc-prev-page></kc-tc-prev-page>
100
+ <kc-tc-next-page></kc-tc-next-page>
101
+ <kc-tc-last-page></kc-tc-last-page>
102
+ </div>
103
+ <div class="flex"></div>
104
+ <div><kc-tc-page-select></kc-tc-page-select></div>
105
+ <div class="flex"></div>
106
+ <div><kc-tc-page-size></kc-tc-page-size></div>
107
+ </div>
108
+ </k-table>
109
+
110
+ <h2>Extension Pages</h2>
111
+ <k-table
112
+ id="extensionTable"
113
+ enable-pages
114
+ page-size="25"
115
+ page-size-options="[10,25,50,100]"
116
+ placeholder="No extension pages installed."
117
+ >
118
+ <admin-table-row-link
119
+ slot="before"
120
+ url-pattern="/admin/pages/edit?path={editPath}"
121
+ field-name="editPath"
122
+ ></admin-table-row-link>
123
+ <div
124
+ class="d-f full"
125
+ style="align-items: center;"
126
+ >
127
+ <div>
128
+ <kc-tc-first-page></kc-tc-first-page>
129
+ <kc-tc-prev-page></kc-tc-prev-page>
130
+ <kc-tc-next-page></kc-tc-next-page>
131
+ <kc-tc-last-page></kc-tc-last-page>
132
+ </div>
133
+ <div class="flex"></div>
134
+ <div><kc-tc-page-select></kc-tc-page-select></div>
135
+ <div class="flex"></div>
136
+ <div><kc-tc-page-size></kc-tc-page-size></div>
137
+ </div>
138
+ </k-table>
139
+
140
+ <h2>System Pages</h2>
141
+ <k-table
142
+ id="systemTable"
143
+ enable-pages
144
+ page-size="25"
145
+ page-size-options="[10,25,50,100]"
146
+ placeholder="No system pages found."
147
+ >
148
+ <admin-table-row-link
149
+ slot="before"
150
+ url-pattern="/admin/pages/edit?path={editPath}"
151
+ field-name="editPath"
152
+ ></admin-table-row-link>
153
+ <div
154
+ class="d-f full"
155
+ style="align-items: center;"
156
+ >
157
+ <div>
158
+ <kc-tc-first-page></kc-tc-first-page>
159
+ <kc-tc-prev-page></kc-tc-prev-page>
160
+ <kc-tc-next-page></kc-tc-next-page>
161
+ <kc-tc-last-page></kc-tc-last-page>
162
+ </div>
163
+ <div class="flex"></div>
164
+ <div><kc-tc-page-select></kc-tc-page-select></div>
165
+ <div class="flex"></div>
166
+ <div><kc-tc-page-size></kc-tc-page-size></div>
167
+ </div>
168
+ </k-table>
169
+
170
+ <script type="module">
171
+ import { listPages, rescanPages, listTemplates, listDirectories, createPage, deletePages, getAllCurrentUserPermissions } from '/kempo/sdk.js';
5
172
  import { html } from '/kempo-ui/lit-all.min.js';
6
173
  import Dialog from '/kempo-ui/components/Dialog.js';
7
174
  import Toast from '/kempo-ui/components/Toast.js';
@@ -12,7 +179,7 @@
12
179
  const myPerms = new Set(permData?.permissions ?? []);
13
180
 
14
181
  const fields = [
15
- { name: 'lockedBadge', label: '', size: 40, formatter: v => v },
182
+ { name: 'locked', label: '', size: 40, calculator: r => r.locked ? html`<k-icon name="lock"></k-icon>` : html`` },
16
183
  { name: 'name', label: 'Name', size: 200 },
17
184
  { name: 'url', label: 'URL', size: 250 },
18
185
  { name: 'author', label: 'Author', size: 150 },
@@ -30,39 +197,66 @@
30
197
  const $extensionTable = document.getElementById('extensionTable');
31
198
  const $systemTable = document.getElementById('systemTable');
32
199
 
33
- const loadPages = async () => {
34
- const [error, data] = await listPages();
200
+ const $scanInfo = document.getElementById('scanInfo');
201
+ const $rescanBtn = document.getElementById('rescanBtn');
202
+ let scannedAt = null;
203
+
204
+ const formatAge = ts => {
205
+ const s = Math.floor((Date.now() - ts) / 1000);
206
+ if(s < 60) return `${s}s ago`;
207
+ if(s < 3600) return `${Math.floor(s / 60)}m ago`;
208
+ return `${Math.floor(s / 3600)}h ago`;
209
+ };
210
+
211
+ const updateScanInfo = () => {
212
+ $scanInfo.textContent = scannedAt ? `Scanned ${formatAge(scannedAt)}` : '';
213
+ };
214
+
215
+ setInterval(updateScanInfo, 1000);
216
+
217
+ const toEditPath = p => ({ ...p, editPath: p.file.replace(/\.page\.html$/, '') });
218
+
219
+ const initTable = async ($table, tableFields, owner) => {
220
+ const [error, data] = await listPages({ owner, showHidden: false, offset: 0, limit: 25 });
35
221
  if(error){
36
222
  Toast.error(error.msg || 'Failed to load pages');
37
- return;
223
+ return null;
38
224
  }
39
- const toEditPath = p => ({ ...p, editPath: p.file.replace(/\.page\.html$/, ''), lockedBadge: p.locked ? '<k-icon name="lock"></k-icon>' : '' });
40
- const sortPages = pages => pages.slice().sort((a, b) => {
41
- const aPath = a.file.replace(/\.page\.html$/, '');
42
- const bPath = b.file.replace(/\.page\.html$/, '');
43
- const aDir = aPath.includes('/') ? aPath.split('/').slice(0, -1).join('/') : '';
44
- const bDir = bPath.includes('/') ? bPath.split('/').slice(0, -1).join('/') : '';
45
- if(aPath === 'index' || aPath === '') return -1;
46
- if(bPath === 'index' || bPath === '') return 1;
47
- if(aDir !== bDir){
48
- if(!aDir) return -1;
49
- if(!bDir) return 1;
50
- return aDir.localeCompare(bDir);
51
- }
52
- return aPath.localeCompare(bPath);
53
- });
54
- const custom = sortPages(data.pages.filter(p => p.owner === 'custom').map(toEditPath));
55
- const extension = sortPages(data.pages.filter(p => p.owner !== 'custom' && p.owner !== 'system').map(toEditPath));
56
- const system = sortPages(data.pages.filter(p => p.owner === 'system').map(toEditPath));
57
- $customTable.setData({ records: custom, fields });
58
- $extensionTable.setData({ records: extension, fields: extensionFields });
59
- $systemTable.setData({ records: system, fields });
225
+ $table.setData({ records: data.pages.map(toEditPath), fields: tableFields });
226
+ if(data.total > data.pages.length){
227
+ $table.setupFetchRecords(data.total, async (start, count) => {
228
+ const [, d] = await listPages({ owner, showHidden: false, offset: start, limit: count });
229
+ return (d?.pages || []).map(toEditPath);
230
+ });
231
+ }
232
+ return data.scannedAt;
233
+ };
234
+
235
+ const loadPages = async () => {
236
+ const results = await Promise.all([
237
+ initTable($customTable, fields, 'custom'),
238
+ initTable($extensionTable, extensionFields, 'extension'),
239
+ initTable($systemTable, fields, 'system')
240
+ ]);
241
+ scannedAt = results.find(r => r != null) ?? null;
242
+ updateScanInfo();
60
243
  };
61
244
 
245
+ $rescanBtn.addEventListener('click', async () => {
246
+ $rescanBtn.disabled = true;
247
+ const [error] = await rescanPages();
248
+ if(error){
249
+ $rescanBtn.disabled = false;
250
+ Toast.error(error.msg || 'Rescan failed');
251
+ return;
252
+ }
253
+ window.location.reload();
254
+ });
255
+
62
256
  if(myPerms.has('system:pages:delete')){
63
257
  $customTable.setAttribute('request-delete', '');
64
258
  $customTable.setAttribute('enable-selection', '');
65
- const del = document.createElement('k-tc-delete-record');
259
+ const del = document.createElement('kc-tc-delete-record');
66
260
  del.setAttribute('slot', 'after');
67
261
  $customTable.appendChild(del);
68
262
  }
@@ -215,4 +409,7 @@
215
409
  updateSlug();
216
410
  });
217
411
  $dialog.querySelector('#dlg-name').addEventListener('input', updateSlug);
218
- });</script></content></page>
412
+ });
413
+ </script>
414
+ </content>
415
+ </page>
@@ -1,4 +1,11 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Edit Template - Admin"><content><admin-template-editor></admin-template-editor></content><content location="head"><script type="module" src="/admin/components/TemplateEditor.js"></script></content></page>
4
+ <page title="Edit Template - Admin">
5
+ <content>
6
+ <admin-template-editor></admin-template-editor>
7
+ </content>
8
+ <content location="head">
9
+ <script type="module" src="/admin/components/TemplateEditor.js"></script>
10
+ </content>
11
+ </page>