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.
- package/app-public/CATCH.page.html +15 -0
- package/app-public/kempo-global.global.html +0 -6
- package/bin/cli.js +4 -21
- package/dist/admin/accounts/groups/[name]/index.page.html +114 -4
- package/dist/admin/accounts/groups/index.page.html +89 -4
- package/dist/admin/accounts/permissions/index.page.html +86 -4
- package/dist/admin/accounts/users/[id]/index.page.html +117 -3
- package/dist/admin/accounts/users/index.page.html +118 -4
- package/dist/admin/components/AddGroupControl.js +1 -5
- package/dist/admin/components/AddGroupControl.js.map +1 -1
- package/dist/admin/components/AdminTableControl.js +2 -0
- package/dist/admin/components/AdminTableControl.js.map +1 -0
- package/dist/admin/components/ClearExpiredSessionsControl.js +1 -5
- package/dist/admin/components/ClearExpiredSessionsControl.js.map +1 -1
- package/dist/admin/components/GroupDeleteSelected.js +1 -5
- package/dist/admin/components/GroupDeleteSelected.js.map +1 -1
- package/dist/admin/components/GroupRemoveRecord.js +1 -5
- package/dist/admin/components/GroupRemoveRecord.js.map +1 -1
- package/dist/admin/components/TableRowDelete.js +1 -3
- package/dist/admin/components/TableRowDelete.js.map +1 -1
- package/dist/admin/components/TableRowLink.js +1 -7
- package/dist/admin/components/TableRowLink.js.map +1 -1
- package/dist/admin/components/tableControls/AddMember.js +1 -5
- package/dist/admin/components/tableControls/AddMember.js.map +1 -1
- package/dist/admin/components/tableControls/AddPermission.js +1 -5
- package/dist/admin/components/tableControls/AddPermission.js.map +1 -1
- package/dist/admin/components/tableControls/InstallExtension.js +1 -5
- package/dist/admin/components/tableControls/InstallExtension.js.map +1 -1
- package/dist/admin/components/tableControls/UninstallExtension.js +1 -5
- package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -1
- package/dist/admin/content/fragments/edit/index.page.html +8 -1
- package/dist/admin/content/fragments/index.page.html +88 -3
- package/dist/admin/content/globals/edit/index.page.html +8 -1
- package/dist/admin/content/globals/index.page.html +103 -8
- package/dist/admin/content/pages/edit/index.page.html +8 -1
- package/dist/admin/content/pages/index.page.html +225 -28
- package/dist/admin/content/templates/edit/index.page.html +8 -1
- package/dist/admin/content/templates/index.page.html +117 -3
- package/dist/admin/default.template.html +20 -1
- package/dist/admin/extensions/index.page.html +59 -2
- package/dist/admin/icons/extension_add.svg +1 -0
- package/dist/admin/icons/extension_remove.svg +1 -0
- package/dist/admin/index.page.html +5 -1
- package/dist/admin/init.js.map +1 -1
- package/dist/admin/nav.fragment.html +84 -2
- package/dist/admin/settings/[owner]/[name]/index.page.html +110 -4
- package/dist/admin/settings/index.page.html +89 -4
- package/dist/kempo/api/admin-globals/DELETE.js +1 -1
- package/dist/kempo/api/admin-globals/DELETE.js.map +1 -1
- package/dist/kempo/api/admin-globals/GET.js +1 -1
- package/dist/kempo/api/admin-globals/GET.js.map +1 -1
- package/dist/kempo/api/admin-globals/POST.js +1 -1
- package/dist/kempo/api/admin-globals/POST.js.map +1 -1
- package/dist/kempo/api/admin-globals/[id]/GET.js +1 -1
- package/dist/kempo/api/admin-globals/[id]/GET.js.map +1 -1
- package/dist/kempo/api/admin-globals/[id]/PUT.js +1 -1
- package/dist/kempo/api/admin-globals/[id]/PUT.js.map +1 -1
- package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +1 -1
- package/dist/kempo/api/admin-globals/[id]/disable/PUT.js.map +1 -1
- package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +1 -1
- package/dist/kempo/api/admin-globals/[id]/enable/PUT.js.map +1 -1
- package/dist/kempo/api/extensions/DELETE.js +1 -1
- package/dist/kempo/api/extensions/DELETE.js.map +1 -1
- package/dist/kempo/api/extensions/POST.js +1 -1
- package/dist/kempo/api/extensions/POST.js.map +1 -1
- package/dist/kempo/api/extensions/[name]/disable/POST.js +1 -1
- package/dist/kempo/api/extensions/[name]/disable/POST.js.map +1 -1
- package/dist/kempo/api/extensions/[name]/enable/POST.js +1 -1
- package/dist/kempo/api/extensions/[name]/enable/POST.js.map +1 -1
- package/dist/kempo/api/extensions/[name]/update/POST.js +1 -1
- package/dist/kempo/api/extensions/[name]/update/POST.js.map +1 -1
- package/dist/kempo/api/extensions/[name]/update-check/GET.js +1 -1
- package/dist/kempo/api/extensions/[name]/update-check/GET.js.map +1 -1
- package/dist/kempo/api/fragments/DELETE.js +1 -1
- package/dist/kempo/api/fragments/DELETE.js.map +1 -1
- package/dist/kempo/api/fragments/GET.js +1 -1
- package/dist/kempo/api/fragments/GET.js.map +1 -1
- package/dist/kempo/api/fragments/POST.js +1 -1
- package/dist/kempo/api/fragments/POST.js.map +1 -1
- package/dist/kempo/api/fragments/disable/PUT.js +1 -1
- package/dist/kempo/api/fragments/disable/PUT.js.map +1 -1
- package/dist/kempo/api/fragments/enable/PUT.js +1 -1
- package/dist/kempo/api/fragments/enable/PUT.js.map +1 -1
- package/dist/kempo/api/fragments/file/GET.js +1 -1
- package/dist/kempo/api/fragments/file/GET.js.map +1 -1
- package/dist/kempo/api/fragments/file/PATCH.js +1 -1
- package/dist/kempo/api/fragments/file/PATCH.js.map +1 -1
- package/dist/kempo/api/fragments/file/PUT.js +1 -1
- package/dist/kempo/api/fragments/file/PUT.js.map +1 -1
- package/dist/kempo/api/fragments/lock/PUT.js +1 -1
- package/dist/kempo/api/fragments/lock/PUT.js.map +1 -1
- package/dist/kempo/api/globals/DELETE.js +1 -1
- package/dist/kempo/api/globals/DELETE.js.map +1 -1
- package/dist/kempo/api/globals/GET.js +1 -1
- package/dist/kempo/api/globals/GET.js.map +1 -1
- package/dist/kempo/api/globals/POST.js +1 -1
- package/dist/kempo/api/globals/POST.js.map +1 -1
- package/dist/kempo/api/globals/disable/PUT.js +1 -1
- package/dist/kempo/api/globals/disable/PUT.js.map +1 -1
- package/dist/kempo/api/globals/enable/PUT.js +1 -1
- package/dist/kempo/api/globals/enable/PUT.js.map +1 -1
- package/dist/kempo/api/globals/entry/GET.js +1 -1
- package/dist/kempo/api/globals/entry/GET.js.map +1 -1
- package/dist/kempo/api/globals/entry/PUT.js +1 -1
- package/dist/kempo/api/globals/entry/PUT.js.map +1 -1
- package/dist/kempo/api/globals/lock/PUT.js +1 -1
- package/dist/kempo/api/globals/lock/PUT.js.map +1 -1
- package/dist/kempo/api/pages/DELETE.js +1 -1
- package/dist/kempo/api/pages/DELETE.js.map +1 -1
- package/dist/kempo/api/pages/GET.js +1 -1
- package/dist/kempo/api/pages/GET.js.map +1 -1
- package/dist/kempo/api/pages/POST.js +1 -1
- package/dist/kempo/api/pages/POST.js.map +1 -1
- package/dist/kempo/api/pages/directories/GET.js +1 -1
- package/dist/kempo/api/pages/directories/GET.js.map +1 -1
- package/dist/kempo/api/pages/disable/PUT.js +1 -1
- package/dist/kempo/api/pages/disable/PUT.js.map +1 -1
- package/dist/kempo/api/pages/enable/PUT.js +1 -1
- package/dist/kempo/api/pages/enable/PUT.js.map +1 -1
- package/dist/kempo/api/pages/file/GET.js +1 -1
- package/dist/kempo/api/pages/file/GET.js.map +1 -1
- package/dist/kempo/api/pages/file/PATCH.js +1 -1
- package/dist/kempo/api/pages/file/PATCH.js.map +1 -1
- package/dist/kempo/api/pages/file/PUT.js +1 -1
- package/dist/kempo/api/pages/file/PUT.js.map +1 -1
- package/dist/kempo/api/pages/lock/PUT.js +1 -1
- package/dist/kempo/api/pages/lock/PUT.js.map +1 -1
- package/dist/kempo/api/pages/rescan/POST.js +2 -0
- package/dist/kempo/api/pages/rescan/POST.js.map +1 -0
- package/dist/kempo/api/pages/search/GET.js +1 -1
- package/dist/kempo/api/pages/search/GET.js.map +1 -1
- package/dist/kempo/api/pages/templates/GET.js +1 -1
- package/dist/kempo/api/pages/templates/GET.js.map +1 -1
- package/dist/kempo/api/templates/DELETE.js +1 -1
- package/dist/kempo/api/templates/DELETE.js.map +1 -1
- package/dist/kempo/api/templates/GET.js +1 -1
- package/dist/kempo/api/templates/GET.js.map +1 -1
- package/dist/kempo/api/templates/POST.js +1 -1
- package/dist/kempo/api/templates/POST.js.map +1 -1
- package/dist/kempo/api/templates/disable/PUT.js +1 -1
- package/dist/kempo/api/templates/disable/PUT.js.map +1 -1
- package/dist/kempo/api/templates/enable/PUT.js +1 -1
- package/dist/kempo/api/templates/enable/PUT.js.map +1 -1
- package/dist/kempo/api/templates/file/GET.js +1 -1
- package/dist/kempo/api/templates/file/GET.js.map +1 -1
- package/dist/kempo/api/templates/file/PATCH.js +1 -1
- package/dist/kempo/api/templates/file/PATCH.js.map +1 -1
- package/dist/kempo/api/templates/file/PUT.js +1 -1
- package/dist/kempo/api/templates/file/PUT.js.map +1 -1
- package/dist/kempo/api/templates/lock/PUT.js +1 -1
- package/dist/kempo/api/templates/lock/PUT.js.map +1 -1
- package/dist/kempo/api/user/[userid]/name/GET.js +2 -0
- package/dist/kempo/api/user/[userid]/name/GET.js.map +1 -0
- package/dist/kempo/components/UserDisplayName.js +2 -0
- package/dist/kempo/components/UserDisplayName.js.map +1 -0
- package/dist/kempo/sdk.js +1 -1
- package/dist/kempo/sdk.js.map +1 -1
- package/middleware/kempo.js +99 -25
- package/package.json +16 -9
- package/server/utils/admin-global-content/createAdminGlobalContent.js +4 -3
- package/server/utils/admin-global-content/deleteAdminGlobalContent.js +2 -2
- package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +2 -2
- package/server/utils/admin-global-content/disableAdminGlobalContent.js +2 -2
- package/server/utils/admin-global-content/enableAdminGlobalContent.js +2 -2
- package/server/utils/admin-global-content/getAdminGlobalContent.js +2 -2
- package/server/utils/admin-global-content/helpers.js +12 -1
- package/server/utils/admin-global-content/listAdminGlobalContent.js +2 -2
- package/server/utils/admin-global-content/updateAdminGlobalContent.js +2 -2
- package/server/utils/email/sendEmail.js +9 -3
- package/server/utils/extensions/uninstallExtension.js +54 -21
- package/server/utils/fragments/listFragments.js +10 -1
- package/server/utils/hooks/triggerHook.js +15 -13
- package/server/utils/pages/listPages.js +57 -7
- package/app-public/kempo-global.global-disabled.html +0 -0
- package/app-public/new-page.page.html +0 -17
- package/app-public/test.page.html +0 -21
|
@@ -1,7 +1,118 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
locked: true
|
|
3
3
|
-->
|
|
4
|
-
<page title="Users - Admin"
|
|
4
|
+
<page title="Users - 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/TcEdit.js"
|
|
37
|
+
></script>
|
|
38
|
+
<script
|
|
39
|
+
type="module"
|
|
40
|
+
src="/kempo-ui/components/controls/TcDeleteRecord.js"
|
|
41
|
+
></script>
|
|
42
|
+
<script
|
|
43
|
+
type="module"
|
|
44
|
+
src="/kempo-ui/components/controls/TcDeleteSelected.js"
|
|
45
|
+
></script>
|
|
46
|
+
<script
|
|
47
|
+
type="module"
|
|
48
|
+
src="/kempo-ui/components/Toggle.js"
|
|
49
|
+
></script>
|
|
50
|
+
<script
|
|
51
|
+
type="module"
|
|
52
|
+
src="/admin/components/TableRowLink.js"
|
|
53
|
+
></script>
|
|
54
|
+
<script
|
|
55
|
+
type="module"
|
|
56
|
+
src="/kempo/components/Permission.js"
|
|
57
|
+
></script>
|
|
58
|
+
<div
|
|
59
|
+
class="d-f mb"
|
|
60
|
+
style="align-items: center;"
|
|
61
|
+
>
|
|
62
|
+
<h1 class="flex mb0">Users</h1>
|
|
63
|
+
<k-permission has="system:user:create">
|
|
64
|
+
<button
|
|
65
|
+
id="createUserBtn"
|
|
66
|
+
class="primary"
|
|
67
|
+
>Create User</button>
|
|
68
|
+
</k-permission>
|
|
69
|
+
</div>
|
|
70
|
+
<k-table
|
|
71
|
+
id="usersTable"
|
|
72
|
+
enable-pages
|
|
73
|
+
page-size="10"
|
|
74
|
+
page-size-options="[10,25,50]"
|
|
75
|
+
placeholder="No users found."
|
|
76
|
+
filtered-placeholder="No users match your search."
|
|
77
|
+
>
|
|
78
|
+
<admin-table-row-link
|
|
79
|
+
slot="before"
|
|
80
|
+
url-pattern="/admin/accounts/users/{id}"
|
|
81
|
+
field-name="id"
|
|
82
|
+
></admin-table-row-link>
|
|
83
|
+
<div
|
|
84
|
+
slot="top"
|
|
85
|
+
class="d-f full"
|
|
86
|
+
style="align-items: center;"
|
|
87
|
+
>
|
|
88
|
+
<div>
|
|
89
|
+
<k-permission has="system:user:delete">
|
|
90
|
+
<kc-tc-delete-selected></kc-tc-delete-selected>
|
|
91
|
+
</k-permission>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
<div
|
|
95
|
+
class="d-f full"
|
|
96
|
+
style="align-items: center;"
|
|
97
|
+
>
|
|
98
|
+
<div>
|
|
99
|
+
<kc-tc-first-page></kc-tc-first-page>
|
|
100
|
+
<kc-tc-prev-page></kc-tc-prev-page>
|
|
101
|
+
<kc-tc-next-page></kc-tc-next-page>
|
|
102
|
+
<kc-tc-last-page></kc-tc-last-page>
|
|
103
|
+
</div>
|
|
104
|
+
<div class="flex"></div>
|
|
105
|
+
<div>
|
|
106
|
+
<kc-tc-page-select></kc-tc-page-select>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="flex"></div>
|
|
109
|
+
<div>
|
|
110
|
+
<kc-tc-page-size></kc-tc-page-size>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</k-table>
|
|
114
|
+
<script type="module">
|
|
115
|
+
import { getUsers, createUser, updateUser, deleteUsers, getAllCurrentUserPermissions } from '/kempo/sdk.js';
|
|
5
116
|
import { html } from '/kempo-ui/lit-all.min.js';
|
|
6
117
|
import Toast from '/kempo-ui/components/Toast.js';
|
|
7
118
|
import Dialog from '/kempo-ui/components/Dialog.js';
|
|
@@ -13,7 +124,7 @@
|
|
|
13
124
|
|
|
14
125
|
if (myPerms.has('system:user:update')) {
|
|
15
126
|
$table.setAttribute('request-edit', '');
|
|
16
|
-
const edit = document.createElement('
|
|
127
|
+
const edit = document.createElement('kc-tc-edit');
|
|
17
128
|
edit.setAttribute('slot', 'after');
|
|
18
129
|
$table.appendChild(edit);
|
|
19
130
|
}
|
|
@@ -21,7 +132,7 @@
|
|
|
21
132
|
if (myPerms.has('system:user:delete')) {
|
|
22
133
|
$table.setAttribute('request-delete', '');
|
|
23
134
|
$table.setAttribute('enable-selection', '');
|
|
24
|
-
const del = document.createElement('
|
|
135
|
+
const del = document.createElement('kc-tc-delete-record');
|
|
25
136
|
del.setAttribute('slot', 'after');
|
|
26
137
|
$table.appendChild(del);
|
|
27
138
|
}
|
|
@@ -157,4 +268,7 @@
|
|
|
157
268
|
cancelText: 'Cancel'
|
|
158
269
|
});
|
|
159
270
|
});
|
|
160
|
-
}
|
|
271
|
+
}
|
|
272
|
+
</script>
|
|
273
|
+
</content>
|
|
274
|
+
</page>
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
<button class="no-btn icon-btn" title="Add to Group">
|
|
3
|
-
<k-icon name="add"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-add-group-control",n);
|
|
1
|
+
import t from"./AdminTableControl.js";import{html as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class o extends t{connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Add to Group")}render(){return e`<k-icon name="add"></k-icon>`}}customElements.define("admin-add-group-control",o);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\AddGroupControl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\AddGroupControl.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\AddGroupControl.js","names":["AdminTableControl","html","AddGroupControl","connectedCallback","super","this","hasAttribute","title","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class AddGroupControl extends AdminTableControl {\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Add to Group';\n }\n\n render(){ return html`<k-icon name=\"add\"></k-icon>`; }\n}\n\ncustomElements.define('admin-add-group-control', AddGroupControl);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAAwBF,EAC3C,iBAAAG,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,eAC/C,CAEA,MAAAC,GAAU,OAAOP,CAAI,8BAAgC,EAGvDQ,eAAeC,OAAO,0BAA2BR","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import t from"/kempo-ui/components/controls/ButtonControl.js";export default class o extends t{get table(){return this.host}get record(){const t=this.closest(".record"),o=t?.dataset?.index;return void 0===o?null:this.host?.records?.[o]??null}}
|
|
2
|
+
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\AdminTableControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\AdminTableControl.js","names":["ButtonControl","AdminTableControl","table","this","host","record","row","closest","index","dataset","undefined","records"],"sources":["0"],"sourcesContent":["import ButtonControl from '/kempo-ui/components/controls/ButtonControl.js';\n\n/*\n Shared base for the admin's table controls.\n\n kempo-ui's Control resolves its host through closest('[controlled]'), which k-table sets on\n itself, but it deliberately leaves the per-row lookup to each control. Rather than repeat that\n lookup in every admin control, it lives here once — it is the one place coupled to k-table's row\n markup (`.record[data-index]` indexing into `host.records`).\n\n Controls that sit in a row get a `record`; controls placed at the table level get `null`.\n*/\nexport default class AdminTableControl extends ButtonControl {\n get table(){\n return this.host;\n }\n\n get record(){\n const row = this.closest('.record');\n const index = row?.dataset?.index;\n if(index === undefined) return null;\n return this.host?.records?.[index] ?? null;\n }\n}\n"],"mappings":"OAAOA,MAAmB,gEAYX,MAAMC,UAA0BD,EAC7C,SAAIE,GACF,OAAOC,KAAKC,IACd,CAEA,UAAIC,GACF,MAAMC,EAAMH,KAAKI,QAAQ,WACnBC,EAAQF,GAAKG,SAASD,MAC5B,YAAaE,IAAVF,EAA4B,KACxBL,KAAKC,MAAMO,UAAUH,IAAU,IACxC","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import e from"
|
|
2
|
-
<button class="no-btn icon-btn" title="Clear Expired Sessions">
|
|
3
|
-
<k-icon name="timer_off"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-clear-expired-sessions",n);
|
|
1
|
+
import e from"./AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class i extends e{connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Clear Expired Sessions")}render(){return t`<k-icon name="timer_off"></k-icon>`}}customElements.define("admin-clear-expired-sessions",i);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\ClearExpiredSessionsControl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\ClearExpiredSessionsControl.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\ClearExpiredSessionsControl.js","names":["AdminTableControl","html","ClearExpiredSessionsControl","connectedCallback","super","this","hasAttribute","title","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class ClearExpiredSessionsControl extends AdminTableControl {\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Clear Expired Sessions';\n }\n\n render(){ return html`<k-icon name=\"timer_off\"></k-icon>`; }\n}\n\ncustomElements.define('admin-clear-expired-sessions', ClearExpiredSessionsControl);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAAoCF,EACvD,iBAAAG,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,yBAC/C,CAEA,MAAAC,GAAU,OAAOP,CAAI,oCAAsC,EAG7DQ,eAAeC,OAAO,+BAAgCR","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import e from"
|
|
2
|
-
<button class="no-btn icon-btn" ?disabled="${0===this.deletableCount}" @click="${this.deleteSelected}">
|
|
3
|
-
<k-icon name="delete"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-group-delete-selected",s);
|
|
1
|
+
import e from"./AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class s extends e{static hostEvents=["selectionChange"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Remove Selected")}get deletableCount(){return this.table?this.table.getSelectedRecords().filter(e=>"system:Users"!==e.name).length:0}willUpdate(){this.disabled=0===this.deletableCount}handleAction(){if(!this.table)return;const e=this.table.getSelectedRecords(),t=e.filter(e=>"system:Users"!==e.name);t.length&&this.dispatchEvent(new CustomEvent("groupRemoveSelected",{detail:{records:t,systemUsersSkipped:e.some(e=>"system:Users"===e.name)},bubbles:!0}))}render(){return t`<k-icon name="delete"></k-icon>`}}customElements.define("admin-group-delete-selected",s);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\GroupDeleteSelected.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\GroupDeleteSelected.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\GroupDeleteSelected.js","names":["AdminTableControl","html","GroupDeleteSelected","static","connectedCallback","super","this","hasAttribute","title","deletableCount","table","getSelectedRecords","filter","r","name","length","willUpdate","disabled","handleAction","selected","records","dispatchEvent","CustomEvent","detail","systemUsersSkipped","some","bubbles","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class GroupDeleteSelected extends AdminTableControl {\n // Control re-renders on these host events, replacing the manual listener wiring\n static hostEvents = ['selectionChange'];\n\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Remove Selected';\n }\n\n get deletableCount(){\n if(!this.table) return 0;\n return this.table.getSelectedRecords().filter(r => r.name !== 'system:Users').length;\n }\n\n willUpdate(){\n this.disabled = this.deletableCount === 0;\n }\n\n handleAction(){\n if(!this.table) return;\n const selected = this.table.getSelectedRecords();\n const records = selected.filter(r => r.name !== 'system:Users');\n if(!records.length) return;\n this.dispatchEvent(new CustomEvent('groupRemoveSelected', {\n detail: { records, systemUsersSkipped: selected.some(r => r.name === 'system:Users') },\n bubbles: true\n }));\n }\n\n render(){ return html`<k-icon name=\"delete\"></k-icon>`; }\n}\n\ncustomElements.define('admin-group-delete-selected', GroupDeleteSelected);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAA4BF,EAE/CG,kBAAoB,CAAC,mBAErB,iBAAAC,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,kBAC/C,CAEA,kBAAIC,GACF,OAAIH,KAAKI,MACFJ,KAAKI,MAAMC,qBAAqBC,OAAOC,GAAgB,iBAAXA,EAAEC,MAAyBC,OADvD,CAEzB,CAEA,UAAAC,GACEV,KAAKW,SAAmC,IAAxBX,KAAKG,cACvB,CAEA,YAAAS,GACE,IAAIZ,KAAKI,MAAO,OAChB,MAAMS,EAAWb,KAAKI,MAAMC,qBACtBS,EAAUD,EAASP,OAAOC,GAAgB,iBAAXA,EAAEC,MACnCM,EAAQL,QACZT,KAAKe,cAAc,IAAIC,YAAY,sBAAuB,CACxDC,OAAQ,CAAEH,UAASI,mBAAoBL,EAASM,KAAKZ,GAAgB,iBAAXA,EAAEC,OAC5DY,SAAS,IAEb,CAEA,MAAAC,GAAU,OAAO1B,CAAI,iCAAmC,EAG1D2B,eAAeC,OAAO,8BAA+B3B","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import e from"
|
|
2
|
-
<button class="no-btn icon-btn" @click="${this.remove}">
|
|
3
|
-
<k-icon name="delete"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-group-remove-record",t);
|
|
1
|
+
import e from"./AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class o extends e{connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Remove from Group")}handleAction(){this.record&&"system:Users"!==this.record.name&&this.table.deleteRecord(this.record)}render(){return"system:Users"===this.record?.name?t``:t`<k-icon name="delete"></k-icon>`}}customElements.define("admin-group-remove-record",o);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\GroupRemoveRecord.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\GroupRemoveRecord.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\GroupRemoveRecord.js","names":["AdminTableControl","html","GroupRemoveRecord","connectedCallback","super","this","hasAttribute","title","handleAction","record","name","table","deleteRecord","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class GroupRemoveRecord extends AdminTableControl {\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Remove from Group';\n }\n\n handleAction(){\n if(this.record && this.record.name !== 'system:Users') this.table.deleteRecord(this.record);\n }\n\n render(){\n // system:Users is the built-in group every user belongs to and cannot be removed from\n if(this.record?.name === 'system:Users') return html``;\n return html`<k-icon name=\"delete\"></k-icon>`;\n }\n}\n\ncustomElements.define('admin-group-remove-record', GroupRemoveRecord);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAA0BF,EAC7C,iBAAAG,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,oBAC/C,CAEA,YAAAC,GACKH,KAAKI,QAA+B,iBAArBJ,KAAKI,OAAOC,MAAyBL,KAAKM,MAAMC,aAAaP,KAAKI,OACtF,CAEA,MAAAI,GAEE,MAAyB,iBAAtBR,KAAKI,QAAQC,KAAgCT,CAAI,GAC7CA,CAAI,iCACb,EAGFa,eAAeC,OAAO,4BAA6Bb","ignoreList":[]}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import{html as e}from"/kempo-ui/lit-all.min.js";import t from"
|
|
2
|
-
<slot><k-icon name="delete"></k-icon></slot>
|
|
3
|
-
</button>`}}customElements.define("admin-table-row-delete",i);
|
|
1
|
+
import{html as e}from"/kempo-ui/lit-all.min.js";import t from"./AdminTableControl.js";import o from"/kempo-ui/components/Dialog.js";import r from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class i extends t{static properties={sdkMethod:{type:String,attribute:"sdk-method"},primaryKey:{type:String,attribute:"primary-key"}};constructor(){super(),this.sdkMethod="deleteUsers",this.idField="id"}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Delete Record")}delete=()=>{this.record&&o.confirm("Are you sure you want to delete this record? This action cannot be undone.",async e=>{if(!e)return;const t=(await(import("../../kempo/sdk.js")))[this.sdkMethod];if(!t)return void r.error("Delete method not found");const[o]=await t([this.record[this.primaryKey]]);o?r.error(o.msg||"Failed to delete record"):(this.table.deleteRecord(this.record),r.success("Record deleted successfully"))})};handleAction(){this.delete()}render(){return e`<slot><k-icon name="delete"></k-icon></slot>`}}customElements.define("admin-table-row-delete",i);
|
|
4
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\TableRowDelete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\TableRowDelete.js","names":["html","
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\TableRowDelete.js","names":["html","AdminTableControl","Dialog","Toast","TableRowDelete","static","sdkMethod","type","String","attribute","primaryKey","constructor","super","this","idField","connectedCallback","hasAttribute","title","delete","record","confirm","async","confirmed","deleteMethod","error","msg","table","deleteRecord","success","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import { html } from '/kempo-ui/lit-all.min.js';\nimport AdminTableControl from './AdminTableControl.js';\nimport Dialog from '/kempo-ui/components/Dialog.js';\nimport Toast from '/kempo-ui/components/Toast.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class TableRowDelete extends AdminTableControl {\n static properties = {\n sdkMethod: { type: String, attribute: 'sdk-method' },\n primaryKey: { type: String, attribute: 'primary-key' }\n };\n\n constructor(){\n super();\n this.sdkMethod = 'deleteUsers';\n this.idField = 'id';\n }\n\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Delete Record';\n }\n\n delete = () => {\n if(!this.record) return;\n\n Dialog.confirm('Are you sure you want to delete this record? This action cannot be undone.', async (confirmed) => {\n if(!confirmed) return;\n\n const module = await import('../../kempo/sdk.js');\n const deleteMethod = module[this.sdkMethod];\n\n if(!deleteMethod){\n Toast.error('Delete method not found');\n return;\n }\n\n const [error] = await deleteMethod([this.record[this.primaryKey]]);\n\n if(error){\n Toast.error(error.msg || 'Failed to delete record');\n return;\n }\n\n this.table.deleteRecord(this.record);\n Toast.success('Record deleted successfully');\n });\n };\n\n handleAction(){ this.delete(); }\n\n render(){ return html`<slot><k-icon name=\"delete\"></k-icon></slot>`; }\n}\n\ncustomElements.define('admin-table-row-delete', TableRowDelete);\n"],"mappings":"eAASA,MAAY,kCACdC,MAAuB,gCACvBC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAAuBH,EAC1CI,kBAAoB,CAClBC,UAAW,CAAEC,KAAMC,OAAQC,UAAW,cACtCC,WAAY,CAAEH,KAAMC,OAAQC,UAAW,gBAGzC,WAAAE,GACEC,QACAC,KAAKP,UAAY,cACjBO,KAAKC,QAAU,IACjB,CAEA,iBAAAC,GACEH,MAAMG,oBACFF,KAAKG,aAAa,WAAUH,KAAKI,MAAQ,gBAC/C,CAEAC,OAAS,KACHL,KAAKM,QAETjB,EAAOkB,QAAQ,6EAA8EC,MAAOC,IAClG,IAAIA,EAAW,OAEf,MACMC,gBADsB,wBACAV,KAAKP,WAEjC,IAAIiB,EAEF,YADApB,EAAMqB,MAAM,2BAId,MAAOA,SAAeD,EAAa,CAACV,KAAKM,OAAON,KAAKH,cAElDc,EACDrB,EAAMqB,MAAMA,EAAMC,KAAO,4BAI3BZ,KAAKa,MAAMC,aAAad,KAAKM,QAC7BhB,EAAMyB,QAAQ,mCAIlB,YAAAC,GAAgBhB,KAAKK,QAAU,CAE/B,MAAAY,GAAU,OAAO9B,CAAI,8CAAgD,EAGvE+B,eAAeC,OAAO,yBAA0B5B","ignoreList":[]}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
import t from"
|
|
2
|
-
<button class="no-btn icon-btn" @click="${this.navigate}">
|
|
3
|
-
<slot>
|
|
4
|
-
<k-icon name="visibility"></k-icon>
|
|
5
|
-
</slot>
|
|
6
|
-
</button>
|
|
7
|
-
`}}customElements.define("admin-table-row-link",i);
|
|
1
|
+
import t from"./AdminTableControl.js";import{html as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class i extends t{static properties={urlPattern:{type:String,attribute:"url-pattern"},fieldName:{type:String,attribute:"field-name"}};constructor(){super(),this.fieldName="id"}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="View")}handleAction(){if(!this.record)return;const t=this.record[this.fieldName];t&&(window.location.href=this.urlPattern.replace(`{${this.fieldName}}`,t))}render(){return e`<slot><k-icon name="visibility"></k-icon></slot>`}}customElements.define("admin-table-row-link",i);
|
|
8
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\TableRowLink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\TableRowLink.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\TableRowLink.js","names":["AdminTableControl","html","TableRowLink","static","urlPattern","type","String","attribute","fieldName","constructor","super","this","connectedCallback","hasAttribute","title","handleAction","record","fieldValue","window","location","href","replace","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class TableRowLink extends AdminTableControl {\n static properties = {\n urlPattern: { type: String, attribute: 'url-pattern' },\n fieldName: { type: String, attribute: 'field-name' }\n };\n\n constructor(){\n super();\n this.fieldName = 'id';\n }\n\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'View';\n }\n\n handleAction(){\n if(!this.record) return;\n const fieldValue = this.record[this.fieldName];\n if(!fieldValue) return;\n window.location.href = this.urlPattern.replace(`{${this.fieldName}}`, fieldValue);\n }\n\n render(){ return html`<slot><k-icon name=\"visibility\"></k-icon></slot>`; }\n}\n\ncustomElements.define('admin-table-row-link', TableRowLink);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAAqBF,EACxCG,kBAAoB,CAClBC,WAAY,CAAEC,KAAMC,OAAQC,UAAW,eACvCC,UAAW,CAAEH,KAAMC,OAAQC,UAAW,eAGxC,WAAAE,GACEC,QACAC,KAAKH,UAAY,IACnB,CAEA,iBAAAI,GACEF,MAAME,oBACFD,KAAKE,aAAa,WAAUF,KAAKG,MAAQ,OAC/C,CAEA,YAAAC,GACE,IAAIJ,KAAKK,OAAQ,OACjB,MAAMC,EAAaN,KAAKK,OAAOL,KAAKH,WAChCS,IACJC,OAAOC,SAASC,KAAOT,KAAKP,WAAWiB,QAAQ,IAAIV,KAAKH,aAAcS,GACxE,CAEA,MAAAK,GAAU,OAAOrB,CAAI,kDAAoD,EAG3EsB,eAAeC,OAAO,uBAAwBtB","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import e from"
|
|
2
|
-
<button class="no-btn icon-btn" title="Add Member" @click="${this.addMember}">
|
|
3
|
-
<k-icon name="person_add"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-add-member",n);
|
|
1
|
+
import e from"../AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import o from"/kempo-ui/components/Dialog.js";import s from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";import"/kempo-ui/components/Combobox.js";import"/kempo-ui/components/Spinner.js";export default class m extends e{groupName="";addMember=()=>{let e=null;const t=document.createElement("k-combobox");t.setAttribute("placeholder","Search users..."),t.setAttribute("debounce-ms","350"),t.setAttribute("require-match",""),t.addEventListener("search",async e=>{t.searching=!0;const{searchUsers:o}=await(import("/kempo/sdk.js")),[s,m]=await o({q:e.detail.value,notInGroup:this.groupName,limit:20});t.searching=!1,!s&&m&&t.setOptions(m.users.map(e=>({label:`${e.name} (${e.email})`,value:e.id})))}),t.addEventListener("select",t=>{e=t.detail.value});const m=document.createElement("div");m.className="p",m.appendChild(t),o.create(m,{title:"Add Member",confirmText:"Add",confirmAction:async()=>{if(!e)return;const{addMemberToGroup:t}=await(import("/kempo/sdk.js")),[o]=await t(this.groupName,e);o?s.error(o.msg||"Failed to add member"):(s.success("Member added"),this.dispatchEvent(new CustomEvent("memberAdded",{bubbles:!0,composed:!0})))},cancelText:"Cancel"})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Add Member")}handleAction(){this.addMember()}render(){return t`<k-icon name="person_add"></k-icon>`}}customElements.define("admin-add-member",m);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\AddMember.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\tableControls\\AddMember.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\tableControls\\AddMember.js","names":["AdminTableControl","html","Dialog","Toast","AddMember","groupName","addMember","selectedUserId","$combobox","document","createElement","setAttribute","addEventListener","async","searching","searchUsers","err","data","q","e","detail","value","notInGroup","this","limit","setOptions","users","map","u","label","name","email","id","$wrap","className","appendChild","create","title","confirmText","confirmAction","addMemberToGroup","error","msg","success","dispatchEvent","CustomEvent","bubbles","composed","cancelText","connectedCallback","super","hasAttribute","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport '/kempo-ui/components/Combobox.js';\r\nimport '/kempo-ui/components/Spinner.js';\r\n\r\nexport default class AddMember extends AdminTableControl {\r\n groupName = '';\r\n\r\n addMember = () => {\r\n let selectedUserId = null;\r\n\r\n const $combobox = document.createElement('k-combobox');\r\n $combobox.setAttribute('placeholder', 'Search users...');\r\n $combobox.setAttribute('debounce-ms', '350');\r\n $combobox.setAttribute('require-match', '');\r\n\r\n $combobox.addEventListener('search', async e => {\r\n $combobox.searching = true;\r\n const { searchUsers } = await import('/kempo/sdk.js');\r\n const [err, data] = await searchUsers({ q: e.detail.value, notInGroup: this.groupName, limit: 20 });\r\n $combobox.searching = false;\r\n if(err || !data) return;\r\n $combobox.setOptions(data.users.map(u => ({ label: `${u.name} (${u.email})`, value: u.id })));\r\n });\r\n\r\n $combobox.addEventListener('select', e => {\r\n selectedUserId = e.detail.value;\r\n });\r\n\r\n const $wrap = document.createElement('div');\r\n $wrap.className = 'p';\r\n $wrap.appendChild($combobox);\r\n\r\n Dialog.create($wrap, {\r\n title: 'Add Member',\r\n confirmText: 'Add',\r\n confirmAction: async () => {\r\n if(!selectedUserId) return;\r\n const { addMemberToGroup } = await import('/kempo/sdk.js');\r\n const [err] = await addMemberToGroup(this.groupName, selectedUserId);\r\n if(err){ Toast.error(err.msg || 'Failed to add member'); return; }\r\n Toast.success('Member added');\r\n this.dispatchEvent(new CustomEvent('memberAdded', { bubbles: true, composed: true }));\r\n },\r\n cancelText: 'Cancel'\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Add Member';\r\n }\r\n\r\n handleAction(){ this.addMember(); }\r\n\r\n render(){ return html`<k-icon name=\"person_add\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-add-member', AddMember);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,qCACA,yCACA,iDAEQ,MAAMC,UAAkBJ,EACrCK,UAAY,GAEZC,UAAY,KACV,IAAIC,EAAiB,KAErB,MAAMC,EAAYC,SAASC,cAAc,cACzCF,EAAUG,aAAa,cAAe,mBACtCH,EAAUG,aAAa,cAAe,OACtCH,EAAUG,aAAa,gBAAiB,IAExCH,EAAUI,iBAAiB,SAAUC,UACnCL,EAAUM,WAAY,EACtB,MAAMC,YAAEA,gBAA6B,mBAC9BC,EAAKC,SAAcF,EAAY,CAAEG,EAAGC,EAAEC,OAAOC,MAAOC,WAAYC,KAAKlB,UAAWmB,MAAO,KAC9FhB,EAAUM,WAAY,GACnBE,GAAQC,GACXT,EAAUiB,WAAWR,EAAKS,MAAMC,IAAIC,IAAK,CAAGC,MAAO,GAAGD,EAAEE,SAASF,EAAEG,SAAUV,MAAOO,EAAEI,SAGxFxB,EAAUI,iBAAiB,SAAUO,IACnCZ,EAAiBY,EAAEC,OAAOC,QAG5B,MAAMY,EAAQxB,SAASC,cAAc,OACrCuB,EAAMC,UAAY,IAClBD,EAAME,YAAY3B,GAElBN,EAAOkC,OAAOH,EAAO,CACnBI,MAAO,aACPC,YAAa,MACbC,cAAe1B,UACb,IAAIN,EAAgB,OACpB,MAAMiC,iBAAEA,gBAAkC,mBACnCxB,SAAawB,EAAiBjB,KAAKlB,UAAWE,GAClDS,EAAMb,EAAMsC,MAAMzB,EAAI0B,KAAO,yBAChCvC,EAAMwC,QAAQ,gBACdpB,KAAKqB,cAAc,IAAIC,YAAY,cAAe,CAAEC,SAAS,EAAMC,UAAU,OAE/EC,WAAY,YAIhB,iBAAAC,GACEC,MAAMD,oBACF1B,KAAK4B,aAAa,WAAU5B,KAAKc,MAAQ,aAC/C,CAEA,YAAAe,GAAgB7B,KAAKjB,WAAa,CAElC,MAAA+C,GAAU,OAAOpD,CAAI,qCAAuC,EAG9DqD,eAAeC,OAAO,mBAAoBnD","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import e from"
|
|
2
|
-
<button class="no-btn icon-btn" title="Add Permission" @click="${this.addPermission}">
|
|
3
|
-
<k-icon name="lock_add"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-add-permission",t);
|
|
1
|
+
import e from"../AdminTableControl.js";import{html as o}from"/kempo-ui/lit-all.min.js";import s from"/kempo-ui/components/Dialog.js";import i from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";import"/kempo-ui/components/Combobox.js";export default class t extends e{groupName="";addPermission=async()=>{const{listPermissions:e,getGroupPermissions:o,addPermissionToGroup:t}=await(import("/kempo/sdk.js")),[[n,r],[m,a]]=await Promise.all([e({limit:1e3}),o(this.groupName)]);if(n)return void i.error(n.msg||"Failed to load permissions");if(m)return void i.error(m.msg||"Failed to load group permissions");const d=new Set(a.permissions),l=r.permissions.filter(e=>!d.has(e.name));let c=null;const p=document.createElement("k-combobox");p.setAttribute("placeholder","Search permissions..."),p.setAttribute("require-match",""),p.setOptions(l.map(e=>({label:e.name,value:e.name}))),p.addEventListener("select",e=>{c=e.detail.value});const u=document.createElement("div");u.className="p",u.appendChild(p),s.create(u,{title:"Add Permission",confirmText:"Add",confirmAction:async()=>{if(!c)return;const[e]=await t(this.groupName,c);e?i.error(e.msg||"Failed to add permission"):(i.success("Permission added"),this.dispatchEvent(new CustomEvent("permissionAdded",{bubbles:!0,composed:!0})))},cancelText:"Cancel"})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Add Permission")}handleAction(){this.addPermission()}render(){return o`<k-icon name="lock_add"></k-icon>`}}customElements.define("admin-add-permission",t);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\AddPermission.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\tableControls\\AddPermission.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\tableControls\\AddPermission.js","names":["AdminTableControl","html","Dialog","Toast","AddPermission","groupName","addPermission","async","listPermissions","getGroupPermissions","addPermissionToGroup","allErr","allData","groupErr","groupPerms","Promise","all","limit","this","error","msg","assigned","Set","permissions","available","filter","p","has","name","selectedPermName","$combobox","document","createElement","setAttribute","setOptions","map","label","value","addEventListener","e","detail","$wrap","className","appendChild","create","title","confirmText","confirmAction","err","success","dispatchEvent","CustomEvent","bubbles","composed","cancelText","connectedCallback","super","hasAttribute","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport '/kempo-ui/components/Combobox.js';\r\n\r\nexport default class AddPermission extends AdminTableControl {\r\n groupName = '';\r\n\r\n addPermission = async () => {\r\n const { listPermissions, getGroupPermissions, addPermissionToGroup } = await import('/kempo/sdk.js');\r\n\r\n const [[allErr, allData], [groupErr, groupPerms]] = await Promise.all([\r\n listPermissions({ limit: 1000 }),\r\n getGroupPermissions(this.groupName)\r\n ]);\r\n\r\n if(allErr){ Toast.error(allErr.msg || 'Failed to load permissions'); return; }\r\n if(groupErr){ Toast.error(groupErr.msg || 'Failed to load group permissions'); return; }\r\n\r\n const assigned = new Set(groupPerms.permissions);\r\n const available = allData.permissions.filter(p => !assigned.has(p.name));\r\n\r\n let selectedPermName = null;\r\n\r\n const $combobox = document.createElement('k-combobox');\r\n $combobox.setAttribute('placeholder', 'Search permissions...');\r\n $combobox.setAttribute('require-match', '');\r\n $combobox.setOptions(available.map(p => ({ label: p.name, value: p.name })));\r\n\r\n $combobox.addEventListener('select', e => {\r\n selectedPermName = e.detail.value;\r\n });\r\n\r\n const $wrap = document.createElement('div');\r\n $wrap.className = 'p';\r\n $wrap.appendChild($combobox);\r\n\r\n Dialog.create($wrap, {\r\n title: 'Add Permission',\r\n confirmText: 'Add',\r\n confirmAction: async () => {\r\n if(!selectedPermName) return;\r\n const [err] = await addPermissionToGroup(this.groupName, selectedPermName);\r\n if(err){ Toast.error(err.msg || 'Failed to add permission'); return; }\r\n Toast.success('Permission added');\r\n this.dispatchEvent(new CustomEvent('permissionAdded', { bubbles: true, composed: true }));\r\n },\r\n cancelText: 'Cancel'\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Add Permission';\r\n }\r\n\r\n handleAction(){ this.addPermission(); }\r\n\r\n render(){ return html`<k-icon name=\"lock_add\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-add-permission', AddPermission);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,qCACA,kDAEQ,MAAMC,UAAsBJ,EACzCK,UAAY,GAEZC,cAAgBC,UACd,MAAMC,gBAAEA,EAAeC,oBAAEA,EAAmBC,qBAAEA,gBAAsC,oBAE5EC,EAAQC,IAAWC,EAAUC,UAAqBC,QAAQC,IAAI,CACpER,EAAgB,CAAES,MAAO,MACzBR,EAAoBS,KAAKb,aAG3B,GAAGM,EAAkE,YAAzDR,EAAMgB,MAAMR,EAAOS,KAAO,8BACtC,GAAGP,EAA4E,YAAjEV,EAAMgB,MAAMN,EAASO,KAAO,oCAE1C,MAAMC,EAAW,IAAIC,IAAIR,EAAWS,aAC9BC,EAAYZ,EAAQW,YAAYE,OAAOC,IAAML,EAASM,IAAID,EAAEE,OAElE,IAAIC,EAAmB,KAEvB,MAAMC,EAAYC,SAASC,cAAc,cACzCF,EAAUG,aAAa,cAAe,yBACtCH,EAAUG,aAAa,gBAAiB,IACxCH,EAAUI,WAAWV,EAAUW,IAAIT,IAAK,CAAGU,MAAOV,EAAEE,KAAMS,MAAOX,EAAEE,SAEnEE,EAAUQ,iBAAiB,SAAUC,IACnCV,EAAmBU,EAAEC,OAAOH,QAG9B,MAAMI,EAAQV,SAASC,cAAc,OACrCS,EAAMC,UAAY,IAClBD,EAAME,YAAYb,GAElB5B,EAAO0C,OAAOH,EAAO,CACnBI,MAAO,iBACPC,YAAa,MACbC,cAAexC,UACb,IAAIsB,EAAkB,OACtB,MAAOmB,SAAatC,EAAqBQ,KAAKb,UAAWwB,GACtDmB,EAAM7C,EAAMgB,MAAM6B,EAAI5B,KAAO,6BAChCjB,EAAM8C,QAAQ,oBACd/B,KAAKgC,cAAc,IAAIC,YAAY,kBAAmB,CAAEC,SAAS,EAAMC,UAAU,OAEnFC,WAAY,YAIhB,iBAAAC,GACEC,MAAMD,oBACFrC,KAAKuC,aAAa,WAAUvC,KAAK2B,MAAQ,iBAC/C,CAEA,YAAAa,GAAgBxC,KAAKZ,eAAiB,CAEtC,MAAAqD,GAAU,OAAO1D,CAAI,mCAAqC,EAG5D2D,eAAeC,OAAO,uBAAwBzD","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
<button class="no-btn icon-btn" title="Install Extension" @click="${this.install}">
|
|
3
|
-
<k-icon name="deployed_code_update"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-install-extension",s);
|
|
1
|
+
import e from"../AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import n from"/kempo-ui/components/Dialog.js";import s from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class o extends e{install=async()=>{this.record&&n.confirm(`Install "${this.record.name}"?`,async e=>{if(!e)return;const{installExtension:t}=await(import("/kempo/sdk.js")),[n]=await t(this.record.name);n?s.error(n.msg||"Failed to install extension"):(s.success(`"${this.record.name}" installed successfully`),this.table.deleteRecord(this.record))})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Install Extension")}handleAction(){this.install()}render(){return t`<k-icon name="extension_add"></k-icon>`}}customElements.define("admin-install-extension",o);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\InstallExtension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\tableControls\\InstallExtension.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\tableControls\\InstallExtension.js","names":["AdminTableControl","html","Dialog","Toast","InstallExtension","install","async","this","record","confirm","name","confirmed","installExtension","error","msg","success","table","deleteRecord","connectedCallback","super","hasAttribute","title","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class InstallExtension extends AdminTableControl {\r\n install = async () => {\r\n if(!this.record) return;\r\n\r\n Dialog.confirm(`Install \"${this.record.name}\"?`, async confirmed => {\r\n if(!confirmed) return;\r\n\r\n const { installExtension } = await import('/kempo/sdk.js');\r\n const [error] = await installExtension(this.record.name);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to install extension');\r\n return;\r\n }\r\n\r\n Toast.success(`\"${this.record.name}\" installed successfully`);\r\n this.table.deleteRecord(this.record);\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Install Extension';\r\n }\r\n\r\n handleAction(){ this.install(); }\r\n\r\n render(){ return html`<k-icon name=\"extension_add\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-install-extension', InstallExtension);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAAyBJ,EAC5CK,QAAUC,UACJC,KAAKC,QAETN,EAAOO,QAAQ,YAAYF,KAAKC,OAAOE,SAAUJ,UAC/C,IAAIK,EAAW,OAEf,MAAMC,iBAAEA,gBAAkC,mBACnCC,SAAeD,EAAiBL,KAAKC,OAAOE,MAEhDG,EACDV,EAAMU,MAAMA,EAAMC,KAAO,gCAI3BX,EAAMY,QAAQ,IAAIR,KAAKC,OAAOE,gCAC9BH,KAAKS,MAAMC,aAAaV,KAAKC,YAIjC,iBAAAU,GACEC,MAAMD,oBACFX,KAAKa,aAAa,WAAUb,KAAKc,MAAQ,oBAC/C,CAEA,YAAAC,GAAgBf,KAAKF,SAAW,CAEhC,MAAAkB,GAAU,OAAOtB,CAAI,wCAA0C,EAGjEuB,eAAeC,OAAO,0BAA2BrB","ignoreList":[]}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
<button class="no-btn icon-btn" title="Uninstall Extension" @click="${this.uninstall}">
|
|
3
|
-
<k-icon name="delete"></k-icon>
|
|
4
|
-
</button>
|
|
5
|
-
`}}customElements.define("admin-uninstall-extension",s);
|
|
1
|
+
import e from"../AdminTableControl.js";import{html as n}from"/kempo-ui/lit-all.min.js";import t from"/kempo-ui/components/Dialog.js";import s from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class a extends e{uninstall=async()=>{if(!this.record)return;const e=document.createElement("div");e.className="p",e.innerHTML=`\n <p>Uninstall "${this.record.name}"?</p>\n <p class="small tc-muted">Its data is kept by default, so reinstalling restores everything.</p>\n <label class="d-f" style="gap: var(--spacer_h); align-items: center">\n <input type="checkbox" name="purge-data" />\n <span class="tc-danger">Also permanently delete all of its data</span>\n </label>\n `,t.create(e,{title:"Uninstall Extension",closeBtn:!1,overlayClose:!1,confirmText:"Uninstall",confirmClasses:"danger ml",cancelText:"Cancel",confirmAction:async()=>{const n=e.querySelector('[name="purge-data"]').checked,{uninstallExtension:t}=await(import("/kempo/sdk.js")),[a]=await t(this.record.name,n);a?s.error(a.msg||"Failed to uninstall extension"):(s.success(n?`"${this.record.name}" uninstalled and its data deleted`:`"${this.record.name}" uninstalled, its data kept`),this.table.deleteRecord(this.record))}})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Uninstall Extension")}handleAction(){this.uninstall()}render(){return n`<k-icon name="extension_remove"></k-icon>`}}customElements.define("admin-uninstall-extension",a);
|
|
6
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\UninstallExtension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\admin\\components\\tableControls\\UninstallExtension.js","names":["
|
|
1
|
+
{"version":3,"file":"src\\admin\\components\\tableControls\\UninstallExtension.js","names":["AdminTableControl","html","Dialog","Toast","UninstallExtension","uninstall","async","this","record","contents","document","createElement","className","innerHTML","name","create","title","closeBtn","overlayClose","confirmText","confirmClasses","cancelText","confirmAction","purgeData","querySelector","checked","uninstallExtension","error","msg","success","table","deleteRecord","connectedCallback","super","hasAttribute","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class UninstallExtension extends AdminTableControl {\r\n uninstall = async () => {\r\n if(!this.record) return;\r\n\r\n /*\r\n Two genuinely different operations behind one button, so the destructive one is opt-in:\r\n deregistering leaves the extension's tables, settings, groups and memberships intact and a\r\n reinstall picks up exactly where it left off, which is what you want when reinstalling to\r\n apply a fix. Purging destroys all of it — for a blog that is every post and comment.\r\n */\r\n const contents = document.createElement('div');\r\n contents.className = 'p';\r\n contents.innerHTML = `\r\n <p>Uninstall \"${this.record.name}\"?</p>\r\n <p class=\"small tc-muted\">Its data is kept by default, so reinstalling restores everything.</p>\r\n <label class=\"d-f\" style=\"gap: var(--spacer_h); align-items: center\">\r\n <input type=\"checkbox\" name=\"purge-data\" />\r\n <span class=\"tc-danger\">Also permanently delete all of its data</span>\r\n </label>\r\n `;\r\n\r\n Dialog.create(contents, {\r\n title: 'Uninstall Extension',\r\n closeBtn: false,\r\n overlayClose: false,\r\n confirmText: 'Uninstall',\r\n confirmClasses: 'danger ml',\r\n cancelText: 'Cancel',\r\n confirmAction: async () => {\r\n const purgeData = contents.querySelector('[name=\"purge-data\"]').checked;\r\n const { uninstallExtension } = await import('/kempo/sdk.js');\r\n const [error] = await uninstallExtension(this.record.name, purgeData);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to uninstall extension');\r\n return;\r\n }\r\n\r\n Toast.success(purgeData\r\n ? `\"${this.record.name}\" uninstalled and its data deleted`\r\n : `\"${this.record.name}\" uninstalled, its data kept`);\r\n this.table.deleteRecord(this.record);\r\n },\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Uninstall Extension';\r\n }\r\n\r\n handleAction(){ this.uninstall(); }\r\n\r\n render(){ return html`<k-icon name=\"extension_remove\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-uninstall-extension', UninstallExtension);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAA2BJ,EAC9CK,UAAYC,UACV,IAAIC,KAAKC,OAAQ,OAQjB,MAAMC,EAAWC,SAASC,cAAc,OACxCF,EAASG,UAAY,IACrBH,EAASI,UAAY,yBACHN,KAAKC,OAAOM,4VAQ9BZ,EAAOa,OAAON,EAAU,CACtBO,MAAO,sBACPC,UAAU,EACVC,cAAc,EACdC,YAAa,YACbC,eAAgB,YAChBC,WAAY,SACZC,cAAehB,UACb,MAAMiB,EAAYd,EAASe,cAAc,uBAAuBC,SAC1DC,mBAAEA,gBAAoC,mBACrCC,SAAeD,EAAmBnB,KAAKC,OAAOM,KAAMS,GAExDI,EACDxB,EAAMwB,MAAMA,EAAMC,KAAO,kCAI3BzB,EAAM0B,QAAQN,EACV,IAAIhB,KAAKC,OAAOM,yCAChB,IAAIP,KAAKC,OAAOM,oCACpBP,KAAKuB,MAAMC,aAAaxB,KAAKC,aAKnC,iBAAAwB,GACEC,MAAMD,oBACFzB,KAAK2B,aAAa,WAAU3B,KAAKS,MAAQ,sBAC/C,CAEA,YAAAmB,GAAgB5B,KAAKF,WAAa,CAElC,MAAA+B,GAAU,OAAOnC,CAAI,2CAA6C,EAGpEoC,eAAeC,OAAO,4BAA6BlC","ignoreList":[]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
locked: true
|
|
3
3
|
-->
|
|
4
|
-
<page title="Edit Fragment - Admin"
|
|
4
|
+
<page title="Edit Fragment - Admin">
|
|
5
|
+
<content>
|
|
6
|
+
<admin-fragment-editor></admin-fragment-editor>
|
|
7
|
+
</content>
|
|
8
|
+
<content location="head">
|
|
9
|
+
<script type="module" src="/admin/components/FragmentEditor.js"></script>
|
|
10
|
+
</content>
|
|
11
|
+
</page>
|