diff --git a/scripts/start-server.js b/scripts/start-server.js
index f09c458..6c15037 100755
--- a/scripts/start-server.js
+++ b/scripts/start-server.js
@@ -38,4 +38,6 @@ passthrough.select = orm.select
await discord.cloud.connect()
console.log("Discord gateway started")
sync.require("../src/web/server")
+
+ require("../src/stdin")
})()
diff --git a/src/web/pug/guild.pug b/src/web/pug/guild.pug
index 51b2c99..4fce9a2 100644
--- a/src/web/pug/guild.pug
+++ b/src/web/pug/guild.pug
@@ -67,7 +67,7 @@ block body
option(value="admin") Admin
input(type="hidden" name="guild_id" value=guild_id)
.grid--row-start2
- button.s-btn.s-btn__filled.htmx-indicator Invite
+ button.s-btn.s-btn__filled Invite
div
!= svg
@@ -78,13 +78,13 @@ block body
h3.mt32.fs-category Linked channels
.s-card.bs-sm.p0
- form.s-table-container(method="post" action="/api/unlink" hx-post="/api/unlink" hx-trigger="submit" hx-disabled-elt="this" hx-confirm="Unlink these channels?\nIt may take a moment to clean up Matrix resources.")
+ form.s-table-container(method="post" action="/api/unlink" hx-confirm="Do you want to unlink these channels?\nIt may take a moment to clean up Matrix resources.")
input(type="hidden" name="guild_id" value=guild_id)
table.s-table.s-table__bx-simple
each row in linkedChannelsWithDetails
tr
td.w40: +discord(row.channel)
- td.p2: button.s-btn.s-btn__muted.s-btn__xs(name="channel_id" value=row.channel.id)!= icons.Icons.IconLinkSm
+ td.p2: button.s-btn.s-btn__muted.s-btn__xs(name="channel_id" value=row.channel.id hx-post="/api/unlink" hx-trigger="click" hx-disabled-elt="this")!= icons.Icons.IconLinkSm
td: +matrix(row)
else
tr
@@ -100,16 +100,16 @@ block body
- let value = !!select("guild_active", "autocreate", {guild_id}).pluck().get()
input(type="hidden" name="guild_id" value=guild_id)
input.s-toggle-switch.order-last#autocreate(name="autocreate" type="checkbox" hx-post="/api/autocreate" hx-indicator="#autocreate-loading" hx-disabled-elt="this" checked=value)
- .is-loading#autocreate-loading
+ #autocreate-loading
h3.mt32.fs-category Privacy level
.s-card
- form(hx-post="/api/privacy-level" hx-trigger="change" hx-indicator="#privacy-level-loading" hx-disabled-elt="this")
+ form(hx-post="/api/privacy-level" hx-trigger="change" hx-indicator="#privacy-level-loading" hx-disabled-elt="input")
input(type="hidden" name="guild_id" value=guild_id)
.d-flex.ai-center.mb4
label.s-label.fl-grow1
| How people can join on Matrix
- span.is-loading#privacy-level-loading
+ span#privacy-level-loading
.s-toggle-switch.s-toggle-switch__multiple.s-toggle-switch__incremental.d-grid.gx16.ai-center(style="grid-template-columns: auto 1fr")
input(type="radio" name="level" value="directory" id="privacy-level-directory" checked=(privacy_level === 2))
label.d-flex.gx8.jc-center.grid--row-start3(for="privacy-level-directory")
@@ -134,23 +134,23 @@ block body
p.s-description.m0 Publicly listed in directory, like Discord server discovery
h3.mt32.fs-category Manually link channels
- form.d-flex.g16.ai-start(hx-post="/api/link" hx-trigger="submit" hx-disabled-elt="this")
+ form.d-flex.g16.ai-start(hx-post="/api/link" hx-trigger="submit" hx-disabled-elt="input, button" hx-indicator="#link-button")
.fl-grow2.s-btn-group.fd-column.w40
each channel in unlinkedChannels
- input.s-btn--radio(type="radio" name="discord" id=channel.id value=channel.id)
+ input.s-btn--radio(type="radio" name="discord" required id=channel.id value=channel.id)
label.s-btn.s-btn__muted.ta-left.truncate(for=channel.id)
+discord(channel, true, "Announcement")
else
.s-empty-state.p8 All Discord channels are linked.
.fl-grow1.s-btn-group.fd-column.w30
each room in unlinkedRooms
- input.s-btn--radio(type="radio" name="matrix" id=room.room_id value=room.room_id)
+ input.s-btn--radio(type="radio" name="matrix" required id=room.room_id value=room.room_id)
label.s-btn.s-btn__muted.ta-left.truncate(for=room.room_id)
+matrix(room, true)
else
.s-empty-state.p8 All Matrix rooms are linked.
input(type="hidden" name="guild_id" value=guild_id)
div
- button.s-btn.s-btn__icon.s-btn__filled.htmx-indicator
+ button.s-btn.s-btn__icon.s-btn__filled#link-button
!= icons.Icons.IconMerge
= ` Link`
diff --git a/src/web/pug/includes/template.pug b/src/web/pug/includes/template.pug
index 909244f..eaa0ee5 100644
--- a/src/web/pug/includes/template.pug
+++ b/src/web/pug/includes/template.pug
@@ -16,7 +16,7 @@ html(lang="en")
link(rel="stylesheet" type="text/css" href=rel("/static/stacks.min.css"))
- meta(name="htmx-config" content='{"indicatorClass":"is-loading"}')
+ meta(name="htmx-config" content='{"requestClass":"is-loading"}')
style.
.themed {
--theme-base-primary-color-h: 266;
diff --git a/src/web/routes/guild-settings.js b/src/web/routes/guild-settings.js
index 1c33854..7c7d4c6 100644
--- a/src/web/routes/guild-settings.js
+++ b/src/web/routes/guild-settings.js
@@ -2,7 +2,7 @@
const assert = require("assert/strict")
const {z} = require("zod")
-const {defineEventHandler, sendRedirect, useSession, createError, readValidatedBody} = require("h3")
+const {defineEventHandler, useSession, createError, readValidatedBody} = require("h3")
const {as, db, sync} = require("../../passthrough")
const {reg} = require("../../matrix/read-registration")
diff --git a/src/web/routes/link.js b/src/web/routes/link.js
index 52c750c..193d7a3 100644
--- a/src/web/routes/link.js
+++ b/src/web/routes/link.js
@@ -63,6 +63,7 @@ as.router.post("/api/link", defineEventHandler(async event => {
// Sync room data and space child
await createRoom.syncRoom(parsedBody.discord)
+ setResponseHeader(event, "HX-Refresh", "true")
return null // 204
}))