From 968261d502ad51f9bcf16e105b0a9a4a2bfd52f7 Mon Sep 17 00:00:00 2001 From: juprodh Date: Fri, 17 Jul 2026 10:18:25 +0800 Subject: [PATCH] Consolidate the members management surface --- src/lib/i18n/en.ts | 1 + src/lib/i18n/fr.ts | 1 + src/lib/i18n/index.ts | 1 + src/lib/i18n/ja.ts | 1 + src/server/routes/membership.ts | 1 + src/views/members.ts | 18 +++++++++++++++--- src/views/settings.ts | 2 +- 7 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lib/i18n/en.ts b/src/lib/i18n/en.ts index 78de66b..7c404bf 100644 --- a/src/lib/i18n/en.ts +++ b/src/lib/i18n/en.ts @@ -148,6 +148,7 @@ export const en: Messages = { approve: "Approve", remove: "Remove", confirmRemoveMember: "Remove this member from the wiki?", + manageMembers: "Manage members", role: "Role", joined: "Joined", requested: "Requested", diff --git a/src/lib/i18n/fr.ts b/src/lib/i18n/fr.ts index 94ad002..987f5c0 100644 --- a/src/lib/i18n/fr.ts +++ b/src/lib/i18n/fr.ts @@ -150,6 +150,7 @@ export const fr: PartialMessages = { approve: "Approuver", remove: "Supprimer", confirmRemoveMember: "Retirer ce membre du wiki ?", + manageMembers: "Gérer les membres", role: "Rôle", joined: "Rejoint", requested: "Demandé", diff --git a/src/lib/i18n/index.ts b/src/lib/i18n/index.ts index 48de604..d90e5be 100644 --- a/src/lib/i18n/index.ts +++ b/src/lib/i18n/index.ts @@ -145,6 +145,7 @@ export interface Messages { approve: string; remove: string; confirmRemoveMember: string; + manageMembers: string; role: string; joined: string; requested: string; diff --git a/src/lib/i18n/ja.ts b/src/lib/i18n/ja.ts index f2eccc4..2c092a7 100644 --- a/src/lib/i18n/ja.ts +++ b/src/lib/i18n/ja.ts @@ -153,6 +153,7 @@ export const ja: PartialMessages = { approve: "承認", remove: "削除", confirmRemoveMember: "このメンバーをウィキから削除しますか?", + manageMembers: "メンバーを管理", role: "役割", joined: "参加日", requested: "申請日", diff --git a/src/server/routes/membership.ts b/src/server/routes/membership.ts index 519f387..2a4e27a 100644 --- a/src/server/routes/membership.ts +++ b/src/server/routes/membership.ts @@ -47,6 +47,7 @@ export const membershipRoutes = new Elysia() return htmlResponse( membersPage(ctx.wiki.name, ctx.wiki.did, members, profiles, { ...wikiLayoutOptions(ctx), + wikiSlug: ctx.wiki.slug, }), ); }) diff --git a/src/views/members.ts b/src/views/members.ts index 1c09fe1..922fa7d 100644 --- a/src/views/members.ts +++ b/src/views/members.ts @@ -1,10 +1,11 @@ +import { canManage } from "../lib/access.ts"; import { escapeHtml } from "../lib/html.ts"; import { t } from "../lib/i18n/index.ts"; import type { ProfileInfo } from "../lib/profile.ts"; -import { profileUrl } from "../lib/urls.ts"; +import { profileUrl, settingsUrl } from "../lib/urls.ts"; import type { MembershipRow } from "../server/db/queries/index.ts"; import { type LayoutOptions, layout } from "./layout.ts"; -import { THEME } from "./theme/index.ts"; +import { outlineSmallButtonClass, THEME } from "./theme/index.ts"; function renderMemberCard( m: MembershipRow, @@ -86,10 +87,21 @@ export function membersPage( ? `
${cards}
` : `

${msg.access.noMembers}

`; + // Admins manage members in wiki settings; this directory links there. + const handle = options.ownerHandle ?? ""; + const slug = options.wikiSlug ?? ""; + const manageLink = + handle && slug && canManage(options.accessLevel ?? "none") + ? `${msg.access.manageMembers}` + : ""; + return layout( `${msg.access.members} — ${wikiName}`, `
-

${msg.access.members}

+
+

${msg.access.members}

+ ${manageLink} +
${body}
`, options, diff --git a/src/views/settings.ts b/src/views/settings.ts index afbdcf6..c9bd829 100644 --- a/src/views/settings.ts +++ b/src/views/settings.ts @@ -203,7 +203,7 @@ function renderMembersSection( .join("\n"); return ` -
+

${msg.access.members}

-- 2.51.2