Items 62, 69, 64: group delete in one Keto transaction, dashboard view rename, permissions kept on self-refusals
CI / full-gate (push) Successful in 3m19s

This commit is contained in:
2026-11-08 23:04:18 +01:00
parent 9385f291a0
commit 428800fd62
10 changed files with 100 additions and 16 deletions
+35
View File
@@ -0,0 +1,35 @@
<%#
The built-in /dashboard starter, shown until a plugin's `dashboard` handler replaces it.
Data: chrome (PageChrome).
%><%
const nav = include("partials/nav-tree", { nodes: chrome.nav });
// These four messages carry markup (<code> spans), so they render raw — the documented
// markup-carrying case. They interpolate nothing, so there is no untrusted data to escape.
const body = `
<div class="form-page">
<section class="form-card">
<h2 class="card-title">${t("dashboard.starter.title")}</h2>
<p>${t("dashboard.starter.intro")}</p>
<p>${t("dashboard.starter.replace")}</p>
<pre class="code-block"><code>export default definePlugin({
apiVersion: "0.5.0",
// view names plugins/&lt;id&gt;/views/&lt;view&gt;.ejs, rendered in this same shell
dashboard: (ctx) =&gt; ({ view: "dashboard", data: { /* … */ } }),
});</code></pre>
<p>${t("dashboard.starter.reference")}</p>
<div class="form-actions">
<a class="btn btn-primary" href="${localeHref("/scheduling")}"><svg class="ico ico-sm" aria-hidden="true"><use href="#i-grid"/></svg>${t("dashboard.starter.browse")}</a>
</div>
</section>
</div>`;
-%>
<%- include("partials/shell", {
body,
brand: chrome.brand,
breadcrumbs: [{ label: t("dashboard.title") }],
csrfToken: chrome.csrfToken,
nav,
theme: chrome.theme,
title: t("dashboard.title"),
user: chrome.user,
}) %>