From 93e46553597be5ec2408373c00bfde681a337b6f Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 15 Jul 2025 15:27:39 +0100 Subject: [PATCH] appview/pages: htmx-ify knots page Change-Id: nwslswprzvmxrwzykmqxskypsvrklnkn Signed-off-by: oppiliappan --- appview/pages/pages.go | 29 +++++- appview/pages/templates/knot.html | 98 ------------------- appview/pages/templates/knots.html | 93 ------------------ appview/pages/templates/knots/dashboard.html | 63 ++++++++++++ .../knots/fragments/addMemberModal.html | 58 +++++++++++ .../knots/fragments/knotListing.html | 51 ++++++++++ .../knots/fragments/knotListingFull.html | 18 ++++ .../templates/knots/fragments/secret.html | 10 ++ appview/pages/templates/knots/index.html | 55 +++++++++++ appview/spindles/spindles.go | 2 +- 10 files changed, 283 insertions(+), 194 deletions(-) delete mode 100644 appview/pages/templates/knot.html delete mode 100644 appview/pages/templates/knots.html create mode 100644 appview/pages/templates/knots/dashboard.html create mode 100644 appview/pages/templates/knots/fragments/addMemberModal.html create mode 100644 appview/pages/templates/knots/fragments/knotListing.html create mode 100644 appview/pages/templates/knots/fragments/knotListingFull.html create mode 100644 appview/pages/templates/knots/fragments/secret.html create mode 100644 appview/pages/templates/knots/index.html diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 46ce7cc..255a669 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -278,7 +278,7 @@ type KnotsParams struct { } func (p *Pages) Knots(w io.Writer, params KnotsParams) error { - return p.execute("knots", w, params) + return p.execute("knots/index", w, params) } type KnotParams struct { @@ -286,11 +286,36 @@ type KnotParams struct { DidHandleMap map[string]string Registration *db.Registration Members []string + Repos map[string][]db.Repo IsOwner bool } func (p *Pages) Knot(w io.Writer, params KnotParams) error { - return p.execute("knot", w, params) + return p.execute("knots/dashboard", w, params) +} + +type KnotListingParams struct { + db.Registration +} + +func (p *Pages) KnotListing(w io.Writer, params KnotListingParams) error { + return p.executePlain("knots/fragments/knotListing", w, params) +} + +type KnotListingFullParams struct { + Registrations []db.Registration +} + +func (p *Pages) KnotListingFull(w io.Writer, params KnotListingFullParams) error { + return p.executePlain("knots/fragments/knotListingFull", w, params) +} + +type KnotSecretParams struct { + Secret string +} + +func (p *Pages) KnotSecret(w io.Writer, params KnotSecretParams) error { + return p.executePlain("knots/fragments/secret", w, params) } type SpindlesParams struct { diff --git a/appview/pages/templates/knot.html b/appview/pages/templates/knot.html deleted file mode 100644 index 37782ed..0000000 --- a/appview/pages/templates/knot.html +++ /dev/null @@ -1,98 +0,0 @@ -{{ define "title" }}{{ .Registration.Domain }}{{ end }} - -{{ define "content" }} -
-

{{ .Registration.Domain }}

-
- -
- {{ block "registration-info" . }} {{ end }} - {{ block "members" . }} {{ end }} - {{ block "add-member" . }} {{ end }} -
-{{ end }} - -{{ define "registration-info" }} -
-
-
opened by
-
- - {{ index $.DidHandleMap .Registration.ByDid }} {{ .Registration.ByDid }} - - {{ if eq $.LoggedInUser.Did $.Registration.ByDid }} - you - {{ end }} -
- -
opened
-
{{ template "repo/fragments/time" .Registration.Created }}
- - {{ if .Registration.Registered }} -
registered
-
{{ template "repo/fragments/time" .Registration.Registered }}
- {{ else }} -
status
-
- Pending Registration -
- {{ end }} -
- - {{ if not .Registration.Registered }} -
- -
- {{ end }} -
-{{ end }} - -{{ define "members" }} -

members

-
- {{ if .Registration.Registered }} -
- {{ range $.Members }} -
- {{ i "user" "w-4 h-4 dark:text-gray-300" }} - {{index $.DidHandleMap .}} - {{.}} - -
- {{ else }} -

No members have been added yet.

- {{ end }} -
- {{ else }} -

Members can be added after registration is complete.

- {{ end }} -
-{{ end }} - -{{ define "add-member" }} -{{ if $.IsOwner }} -

add member

-
-
- - - - -
-
-
-{{ end }} -{{ end }} diff --git a/appview/pages/templates/knots.html b/appview/pages/templates/knots.html deleted file mode 100644 index 2509555..0000000 --- a/appview/pages/templates/knots.html +++ /dev/null @@ -1,93 +0,0 @@ -{{ define "title" }}knots{{ end }} -{{ define "content" }} -
-

Knots

-
-
-

register a knot

-
-

Generate a key to initialize your knot server.

-
- - -
-
-
- -

my knots

-
-
- {{ range .Registrations }} - {{ if .Registered }} -
-
-
- {{ i "git-branch" "w-3 h-3 dark:text-gray-300" }} - -

{{ .Domain }}

-
-
-

owned by {{ .ByDid }}

-

registered {{ template "repo/fragments/time" .Registered }}

-
-
- {{ end }} - {{ else }} -

No knots registered

- {{ end }} -
-
- -

pending registrations

-
-
- {{ range .Registrations }} - {{ if not .Registered }} -
-
-
-

{{ .Domain }}

-
- - pending - -
-
-

opened by {{ .ByDid }}

-

created {{ template "repo/fragments/time" .Created }}

-
-
- -
-
- {{ end }} - {{ else }} -

No pending registrations

- {{ end }} -
-
-
-{{ end }} diff --git a/appview/pages/templates/knots/dashboard.html b/appview/pages/templates/knots/dashboard.html new file mode 100644 index 0000000..7db6bc3 --- /dev/null +++ b/appview/pages/templates/knots/dashboard.html @@ -0,0 +1,63 @@ +{{ define "title" }}{{ .Registration.Domain }}{{ end }} + +{{ define "content" }} +
+
+
+

+ {{ .Registration.Domain }} +

+ + {{ template "repo/fragments/shortTimeAgo" .Registration.Created }} + +
+
+ {{ $style := "px-2 py-1 rounded flex items-center flex-shrink-0 gap-2" }} + {{ if .Registration.Registered }} + {{ i "shield-check" "w-4 h-4" }} verified + {{ template "knots/fragments/addMemberModal" .Registration }} + {{ else }} + {{ i "shield-off" "w-4 h-4" }} pending + {{ end }} +
+
+
+
+ + {{ if .Members }} +
+
+ {{ block "knotMember" . }} {{ end }} +
+
+ {{ end }} +{{ end }} + +{{ define "knotMember" }} + {{ range .Members }} +
+
+
+ {{ i "user" "size-4" }} + {{ $user := index $.DidHandleMap . }} + {{ $user }} {{.}} +
+
+
+ {{ $repos := index $.Repos . }} + {{ range $repos }} +
+ {{ i "book-marked" "size-4" }} + + {{ .Name }} + +
+ {{ else }} +
+ No repositories created yet. +
+ {{ end }} +
+
+ {{ end }} +{{ end }} diff --git a/appview/pages/templates/knots/fragments/addMemberModal.html b/appview/pages/templates/knots/fragments/addMemberModal.html new file mode 100644 index 0000000..3edf0b5 --- /dev/null +++ b/appview/pages/templates/knots/fragments/addMemberModal.html @@ -0,0 +1,58 @@ +{{ define "knots/fragments/addMemberModal" }} + + +
+ {{ block "addKnotMemberPopover" . }} {{ end }} +
+{{ end }} + +{{ define "addKnotMemberPopover" }} +
+ +

Members can create repositories on this knot.

+ +
+ + +
+
+
+{{ end }} + diff --git a/appview/pages/templates/knots/fragments/knotListing.html b/appview/pages/templates/knots/fragments/knotListing.html new file mode 100644 index 0000000..8cdfac2 --- /dev/null +++ b/appview/pages/templates/knots/fragments/knotListing.html @@ -0,0 +1,51 @@ +{{ define "knots/fragments/knotListing" }} +
+ {{ block "listLeftSide" . }} {{ end }} + {{ block "listRightSide" . }} {{ end }} +
+{{ end }} + +{{ define "listLeftSide" }} +
+ {{ i "hard-drive" "w-4 h-4" }} + {{ if .Registered }} + + {{ .Domain }} + + {{ else }} + {{ .Domain }} + {{ end }} + + {{ template "repo/fragments/shortTimeAgo" .Created }} + +
+{{ end }} + +{{ define "listRightSide" }} +
+ {{ $style := "px-2 py-1 rounded flex items-center flex-shrink-0 gap-2 text-sm" }} + {{ if .Registered }} + {{ i "shield-check" "w-4 h-4" }} verified + {{ template "knots/fragments/addMemberModal" . }} + {{ else }} + {{ i "shield-off" "w-4 h-4" }} pending + {{ block "initializeButton" . }} {{ end }} + {{ end }} +
+{{ end }} + +{{ define "initializeButton" }} + +{{ end }} + diff --git a/appview/pages/templates/knots/fragments/knotListingFull.html b/appview/pages/templates/knots/fragments/knotListingFull.html new file mode 100644 index 0000000..748402e --- /dev/null +++ b/appview/pages/templates/knots/fragments/knotListingFull.html @@ -0,0 +1,18 @@ +{{ define "knots/fragments/knotListingFull" }} +
+

your knots

+
+ {{ range $knot := .Registrations }} + {{ template "knots/fragments/knotListing" . }} + {{ else }} +
+ no knots registered yet +
+ {{ end }} +
+
+
+{{ end }} diff --git a/appview/pages/templates/knots/fragments/secret.html b/appview/pages/templates/knots/fragments/secret.html new file mode 100644 index 0000000..385847c --- /dev/null +++ b/appview/pages/templates/knots/fragments/secret.html @@ -0,0 +1,10 @@ +{{ define "knots/fragments/secret" }} +
+

generated secret

+

Configure your knot to use this secret, and then hit initialize.

+ {{ .Secret }} +
+{{ end }} diff --git a/appview/pages/templates/knots/index.html b/appview/pages/templates/knots/index.html new file mode 100644 index 0000000..7e9147c --- /dev/null +++ b/appview/pages/templates/knots/index.html @@ -0,0 +1,55 @@ +{{ define "title" }}knots{{ end }} + +{{ define "content" }} +
+

Knots

+
+ +
+
+ {{ template "knots/fragments/knotListingFull" . }} + {{ block "register" . }} {{ end }} +
+
+{{ end }} + +{{ define "register" }} +
+

register a knot

+

Enter the hostname of your knot to generate a key.

+
+
+ + +
+ +
+
+ +
+
+{{ end }} diff --git a/appview/spindles/spindles.go b/appview/spindles/spindles.go index 250450d..8cb70c8 100644 --- a/appview/spindles/spindles.go +++ b/appview/spindles/spindles.go @@ -582,7 +582,7 @@ func (s *Spindles) removeMember(w http.ResponseWriter, r *http.Request) { l := s.Logger.With("handler", "removeMember") noticeId := "operation-error" - defaultErr := "Failed to add member. Try again later." + defaultErr := "Failed to remove member. Try again later." fail := func() { s.Pages.Notice(w, noticeId, defaultErr) } -- 2.43.0