diff --git a/appview/pages/pages.go b/appview/pages/pages.go
index 46ce7cc4..255a6698 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 37782ed3..00000000
--- 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 }}
-
- {{ 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 2509555b..00000000
--- a/appview/pages/templates/knots.html
+++ /dev/null
@@ -1,93 +0,0 @@
-{{ define "title" }}knots{{ end }}
-{{ define "content" }}
-
-
-
register a knot
-
- Generate a key to initialize your knot server.
-
-
-
-
my knots
-
-
- {{ range .Registrations }}
- {{ if .Registered }}
-
-
-
-
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 00000000..7db6bc39
--- /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 }}
+
+ {{ 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 00000000..3edf0b54
--- /dev/null
+++ b/appview/pages/templates/knots/fragments/addMemberModal.html
@@ -0,0 +1,58 @@
+{{ define "knots/fragments/addMemberModal" }}
+
+
+
+ {{ block "addKnotMemberPopover" . }} {{ end }}
+
+{{ end }}
+
+{{ define "addKnotMemberPopover" }}
+
+{{ end }}
+
diff --git a/appview/pages/templates/knots/fragments/knotListing.html b/appview/pages/templates/knots/fragments/knotListing.html
new file mode 100644
index 00000000..8cdfac26
--- /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 00000000..748402e0
--- /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 00000000..385847c5
--- /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 00000000..7e9147c6
--- /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 250450dd..8cb70c82 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)
}