Experimental browser for the Atmosphere
{ "uri": "at://did:plc:hwevmowznbiukdf6uk5dwrrq/sh.tangled.repo.pull/3lmpacuy4km22", "cid": "bafyreicyqufjxefvzux74aphnrwfvazcf7ubsmljamh3k4ta4dhy56iusa", "value": { "$type": "sh.tangled.repo.pull", "patch": "diff --git a/appview/pages/pages.go b/appview/pages/pages.go\nindex e0d8cbc..8c7cc93 100644\n--- a/appview/pages/pages.go\n+++ b/appview/pages/pages.go\n@@ -36,39 +36,64 @@ type Pages struct {\n \tt map[string]*template.Template\n }\n \n+\n+\n func NewPages() *Pages {\n \ttemplates := make(map[string]*template.Template)\n+\tfragmentPaths := []string{}\n \n-\t// Walk through embedded templates directory and parse all .html files\n+\t// First, collect all fragment paths\n \terr := fs.WalkDir(Files, \"templates\", func(path string, d fs.DirEntry, err error) error {\n \t\tif err != nil {\n \t\t\treturn err\n \t\t}\n \n+\t\tif !d.IsDir() && strings.HasSuffix(path, \".html\") && strings.Contains(path, \"fragments/\") {\n+\t\t\tfragmentPaths = append(fragmentPaths, path)\n+\t\t}\n+\t\treturn nil\n+\t})\n+\tif err != nil {\n+\t\tlog.Fatalf(\"walking template dir for fragments: %v\", err)\n+\t}\n+\n+\t// Load all fragments first\n+\tfor _, path := range fragmentPaths {\n+\t\tname := strings.TrimPrefix(path, \"templates/\")\n+\t\tname = strings.TrimSuffix(name, \".html\")\n+\n+\t\ttmpl, err := template.New(name).\n+\t\t\tFuncs(funcMap()).\n+\t\t\tParseFS(Files, path)\n+\t\tif err != nil {\n+\t\t\tlog.Fatalf(\"setting up fragment: %v\", err)\n+\t\t}\n+\n+\t\ttemplates[name] = tmpl\n+\t\tlog.Printf(\"loaded fragment: %s\", name)\n+\t}\n+\n+\t// Then walk through and setup the rest of the templates\n+\terr = fs.WalkDir(Files, \"templates\", func(path string, d fs.DirEntry, err error) error {\n+\t\tif err != nil {\n+\t\t\treturn err\n+\t\t}\n+\n \t\tif !d.IsDir() && strings.HasSuffix(path, \".html\") {\n \t\t\tname := strings.TrimPrefix(path, \"templates/\")\n \t\t\tname = strings.TrimSuffix(name, \".html\")\n \n-\t\t\t// add fragments as templates\n-\t\t\tif strings.HasPrefix(path, \"templates/fragments/\") {\n-\t\t\t\ttmpl, err := template.New(name).\n-\t\t\t\t\tFuncs(funcMap()).\n-\t\t\t\t\tParseFS(Files, path)\n-\t\t\t\tif err != nil {\n-\t\t\t\t\treturn fmt.Errorf(\"setting up fragment: %w\", err)\n-\t\t\t\t}\n-\n-\t\t\t\ttemplates[name] = tmpl\n-\t\t\t\tlog.Printf(\"loaded fragment: %s\", name)\n+\t\t\t// Skip fragments as they've already been loaded\n+\t\t\tif strings.Contains(path, \"fragments/\") {\n+\t\t\t\treturn nil\n \t\t\t}\n \n-\t\t\t// layouts and fragments are applied first\n-\t\t\tif !strings.HasPrefix(path, \"templates/layouts/\") &&\n-\t\t\t\t!strings.HasPrefix(path, \"templates/fragments/\") {\n+\t\t\t// Load layouts and main templates\n+\t\t\tif !strings.HasPrefix(path, \"templates/layouts/\") {\n \t\t\t\t// Add the page template on top of the base\n \t\t\t\ttmpl, err := template.New(name).\n \t\t\t\t\tFuncs(funcMap()).\n-\t\t\t\t\tParseFS(Files, \"templates/layouts/*.html\", \"templates/fragments/*.html\", path)\n+\t\t\t\t\tParseFS(Files, \"templates/layouts/*.html\", \"templates/**/fragments/*.html\", path)\n \t\t\t\tif err != nil {\n \t\t\t\t\treturn fmt.Errorf(\"setting up template: %w\", err)\n \t\t\t\t}\n@@ -76,8 +101,6 @@ func NewPages() *Pages {\n \t\t\t\ttemplates[name] = tmpl\n \t\t\t\tlog.Printf(\"loaded template: %s\", name)\n \t\t\t}\n-\n-\t\t\treturn nil\n \t\t}\n \t\treturn nil\n \t})\n@@ -200,7 +223,7 @@ type FollowFragmentParams struct {\n }\n \n func (p *Pages) FollowFragment(w io.Writer, params FollowFragmentParams) error {\n-\treturn p.executePlain(\"fragments/follow\", w, params)\n+\treturn p.executePlain(\"user/fragments/follow\", w, params)\n }\n \n type RepoActionsFragmentParams struct {\n@@ -210,7 +233,7 @@ type RepoActionsFragmentParams struct {\n }\n \n func (p *Pages) RepoActionsFragment(w io.Writer, params RepoActionsFragmentParams) error {\n-\treturn p.executePlain(\"fragments/repoActions\", w, params)\n+\treturn p.executePlain(\"repo/fragments/repoActions\", w, params)\n }\n \n type RepoDescriptionParams struct {\n@@ -218,11 +241,11 @@ type RepoDescriptionParams struct {\n }\n \n func (p *Pages) EditRepoDescriptionFragment(w io.Writer, params RepoDescriptionParams) error {\n-\treturn p.executePlain(\"fragments/editRepoDescription\", w, params)\n+\treturn p.executePlain(\"repo/fragments/editRepoDescription\", w, params)\n }\n \n func (p *Pages) RepoDescriptionFragment(w io.Writer, params RepoDescriptionParams) error {\n-\treturn p.executePlain(\"fragments/repoDescription\", w, params)\n+\treturn p.executePlain(\"repo/fragments/repoDescription\", w, params)\n }\n \n type RepoInfo struct {\n@@ -580,7 +603,7 @@ type EditIssueCommentParams struct {\n }\n \n func (p *Pages) EditIssueCommentFragment(w io.Writer, params EditIssueCommentParams) error {\n-\treturn p.executePlain(\"fragments/editIssueComment\", w, params)\n+\treturn p.executePlain(\"repo/issues/fragments/editIssueComment\", w, params)\n }\n \n type SingleIssueCommentParams struct {\n@@ -592,7 +615,7 @@ type SingleIssueCommentParams struct {\n }\n \n func (p *Pages) SingleIssueCommentFragment(w io.Writer, params SingleIssueCommentParams) error {\n-\treturn p.executePlain(\"fragments/issueComment\", w, params)\n+\treturn p.executePlain(\"repo/issues/fragments/issueComment\", w, params)\n }\n \n type RepoNewPullParams struct {\n@@ -675,7 +698,7 @@ type PullPatchUploadParams struct {\n }\n \n func (p *Pages) PullPatchUploadFragment(w io.Writer, params PullPatchUploadParams) error {\n-\treturn p.executePlain(\"fragments/pullPatchUpload\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullPatchUpload\", w, params)\n }\n \n type PullCompareBranchesParams struct {\n@@ -684,7 +707,7 @@ type PullCompareBranchesParams struct {\n }\n \n func (p *Pages) PullCompareBranchesFragment(w io.Writer, params PullCompareBranchesParams) error {\n-\treturn p.executePlain(\"fragments/pullCompareBranches\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullCompareBranches\", w, params)\n }\n \n type PullCompareForkParams struct {\n@@ -693,7 +716,7 @@ type PullCompareForkParams struct {\n }\n \n func (p *Pages) PullCompareForkFragment(w io.Writer, params PullCompareForkParams) error {\n-\treturn p.executePlain(\"fragments/pullCompareForks\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullCompareForks\", w, params)\n }\n \n type PullCompareForkBranchesParams struct {\n@@ -703,7 +726,7 @@ type PullCompareForkBranchesParams struct {\n }\n \n func (p *Pages) PullCompareForkBranchesFragment(w io.Writer, params PullCompareForkBranchesParams) error {\n-\treturn p.executePlain(\"fragments/pullCompareForksBranches\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullCompareForksBranches\", w, params)\n }\n \n type PullResubmitParams struct {\n@@ -714,7 +737,7 @@ type PullResubmitParams struct {\n }\n \n func (p *Pages) PullResubmitFragment(w io.Writer, params PullResubmitParams) error {\n-\treturn p.executePlain(\"fragments/pullResubmit\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullResubmit\", w, params)\n }\n \n type PullActionsParams struct {\n@@ -727,7 +750,7 @@ type PullActionsParams struct {\n }\n \n func (p *Pages) PullActionsFragment(w io.Writer, params PullActionsParams) error {\n-\treturn p.executePlain(\"fragments/pullActions\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullActions\", w, params)\n }\n \n type PullNewCommentParams struct {\n@@ -738,7 +761,7 @@ type PullNewCommentParams struct {\n }\n \n func (p *Pages) PullNewCommentFragment(w io.Writer, params PullNewCommentParams) error {\n-\treturn p.executePlain(\"fragments/pullNewComment\", w, params)\n+\treturn p.executePlain(\"repo/pulls/fragments/pullNewComment\", w, params)\n }\n \n func (p *Pages) Static() http.Handler {\ndiff --git a/appview/pages/templates/fragments/cloneInstructions.html b/appview/pages/templates/fragments/cloneInstructions.html\ndeleted file mode 100644\nindex bd39973..0000000\n--- a/appview/pages/templates/fragments/cloneInstructions.html\n+++ /dev/null\n@@ -1,33 +0,0 @@\n-{{ define \"fragments/cloneInstructions\" }}\n-<section class=\"mt-4 p-6 rounded bg-white dark:bg-gray-800 dark:text-white w-full mx-auto overflow-auto flex flex-col gap-4\">\n- <div class=\"flex flex-col gap-2\">\n- <strong>push</strong>\n- <div class=\"md:pl-4 overflow-x-auto whitespace-nowrap\">\n- <code class=\"dark:text-gray-100\">git remote add origin git@{{.RepoInfo.Knot}}:{{ .RepoInfo.OwnerHandle }}/{{ .RepoInfo.Name }}</code>\n- </div>\n- </div>\n-\n- <div class=\"flex flex-col gap-2\">\n- <strong>clone</strong>\n- <div class=\"md:pl-4 flex flex-col gap-2\">\n-\n- <div class=\"flex items-center gap-3\">\n- <span class=\"bg-gray-100 dark:bg-gray-700 p-1 mr-1 font-mono text-sm rounded select-none dark:text-white\">HTTP</span>\n- <div class=\"overflow-x-auto whitespace-nowrap flex-1\">\n- <code class=\"dark:text-gray-100\">git clone https://tangled.sh/{{ .RepoInfo.OwnerWithAt }}/{{ .RepoInfo.Name }}</code>\n- </div>\n- </div>\n-\n- <div class=\"flex items-center gap-3\">\n- <span class=\"bg-gray-100 dark:bg-gray-700 p-1 mr-1 font-mono text-sm rounded select-none dark:text-white\">SSH</span>\n- <div class=\"overflow-x-auto whitespace-nowrap flex-1\">\n- <code class=\"dark:text-gray-100\">git clone git@{{.RepoInfo.Knot}}:{{ .RepoInfo.OwnerHandle }}/{{ .RepoInfo.Name }}</code>\n- </div>\n- </div>\n- </div>\n- </div>\n-\n-\n- <p class=\"py-2 text-gray-500 dark:text-gray-400\">Note that for self-hosted knots, clone URLs may be different based on your setup.</p>\n-</section>\n-{{ end }}\ndiff --git a/appview/pages/templates/fragments/repoActions.html b/appview/pages/templates/fragments/repoActions.html\ndeleted file mode 100644\nindex 39b6cdb..0000000\n--- a/appview/pages/templates/fragments/repoActions.html\n+++ /dev/null\n@@ -1,41 +0,0 @@\n-{{ define \"fragments/repoActions\" }}\n-<div class=\"flex items-center gap-2 z-auto\">\n- <button id=\"starBtn\"\n- class=\"btn disabled:opacity-50 disabled:cursor-not-allowed\"\n-\n- {{ if .IsStarred }}\n- hx-delete=\"/star?subject={{.RepoAt}}&countHint={{.Stats.StarCount}}\"\n- {{ else }}\n- hx-post=\"/star?subject={{.RepoAt}}&countHint={{.Stats.StarCount}}\"\n- {{ end }}\n-\n- hx-trigger=\"click\"\n- hx-target=\"#starBtn\"\n- hx-swap=\"outerHTML\"\n- hx-disabled-elt=\"#starBtn\"\n- >\n- <div class=\"flex gap-2 items-center\">\n- {{ if .IsStarred }}\n- {{ i \"star\" \"w-4 h-4 fill-current\" }}\n- {{ else }}\n- {{ i \"star\" \"w-4 h-4\" }}\n- {{ end }}\n- <span class=\"text-sm\">\n- {{ .Stats.StarCount }}\n- </span>\n- </div>\n- </button>\n- {{ if .DisableFork }}\n- <button class=\"btn text-sm no-underline hover:no-underline flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\" disabled title=\"Empty repositories cannot be forked\">\n- {{ i \"git-fork\" \"w-4 h-4\"}}\n- fork\n- </button>\n- {{ else }}\n- <a class=\"btn text-sm no-underline hover:no-underline flex items-center gap-2\" href=\"/{{ .FullName }}/fork\">\n- {{ i \"git-fork\" \"w-4 h-4\"}}\n- fork\n- </a>\n- {{ end }}\n-</div>\n-{{ end }}\n-\ndiff --git a/appview/pages/templates/layouts/repobase.html b/appview/pages/templates/layouts/repobase.html\nindex e13120f..3afdaff 100644\n--- a/appview/pages/templates/layouts/repobase.html\n+++ b/appview/pages/templates/layouts/repobase.html\n@@ -19,9 +19,9 @@\n <a href=\"/{{ .RepoInfo.FullName }}\" class=\"font-bold\">{{ .RepoInfo.Name }}</a>\n </div>\n \n- {{ template \"fragments/repoActions\" .RepoInfo }}\n+ {{ template \"repo/fragments/repoActions\" .RepoInfo }}\n </div>\n- {{ template \"fragments/repoDescription\" . }}\n+ {{ template \"repo/fragments/repoDescription\" . }}\n </section>\n <section class=\"min-h-screen flex flex-col drop-shadow-sm\">\n <nav class=\"w-full pl-4 overflow-auto\">\ndiff --git a/appview/pages/templates/repo/commit.html b/appview/pages/templates/repo/commit.html\nindex 0185448..c5cb27d 100644\n--- a/appview/pages/templates/repo/commit.html\n+++ b/appview/pages/templates/repo/commit.html\n@@ -44,5 +44,5 @@\n {{end}}\n \n {{ define \"repoAfter\" }}\n-{{ template \"fragments/diff\" (list .RepoInfo.FullName .Diff) }}\n+{{ template \"repo/fragments/diff\" (list .RepoInfo.FullName .Diff) }}\n {{end}}\ndiff --git a/appview/pages/templates/repo/empty.html b/appview/pages/templates/repo/empty.html\nindex 3d2be28..7a5c139 100644\n--- a/appview/pages/templates/repo/empty.html\n+++ b/appview/pages/templates/repo/empty.html\n@@ -9,5 +9,5 @@\n {{ end }}\n \n {{ define \"repoAfter\" }}\n- {{ template \"fragments/cloneInstructions\" . }}\n+ {{ template \"repo/fragments/cloneInstructions\" . }}\n {{ end }}\ndiff --git a/appview/pages/templates/repo/fragments/cloneInstructions.html b/appview/pages/templates/repo/fragments/cloneInstructions.html\nnew file mode 100644\nindex 0000000..fcd866f\n--- /dev/null\n+++ b/appview/pages/templates/repo/fragments/cloneInstructions.html\n@@ -0,0 +1,51 @@\n+{{ define \"repo/fragments/cloneInstructions\" }}\n+ <section\n+ class=\"mt-4 p-6 rounded bg-white dark:bg-gray-800 dark:text-white w-full mx-auto overflow-auto flex flex-col gap-4\"\n+ >\n+ <div class=\"flex flex-col gap-2\">\n+ <strong>push</strong>\n+ <div class=\"md:pl-4 overflow-x-auto whitespace-nowrap\">\n+ <code class=\"dark:text-gray-100\"\n+ >git remote add origin\n+ git@{{ .RepoInfo.Knot }}:{{ .RepoInfo.OwnerHandle }}/{{ .RepoInfo.Name }}</code\n+ >\n+ </div>\n+ </div>\n+\n+ <div class=\"flex flex-col gap-2\">\n+ <strong>clone</strong>\n+ <div class=\"md:pl-4 flex flex-col gap-2\">\n+ <div class=\"flex items-center gap-3\">\n+ <span\n+ class=\"bg-gray-100 dark:bg-gray-700 p-1 mr-1 font-mono text-sm rounded select-none dark:text-white\"\n+ >HTTP</span\n+ >\n+ <div class=\"overflow-x-auto whitespace-nowrap flex-1\">\n+ <code class=\"dark:text-gray-100\"\n+ >git clone\n+ https://tangled.sh/{{ .RepoInfo.OwnerWithAt }}/{{ .RepoInfo.Name }}</code\n+ >\n+ </div>\n+ </div>\n+\n+ <div class=\"flex items-center gap-3\">\n+ <span\n+ class=\"bg-gray-100 dark:bg-gray-700 p-1 mr-1 font-mono text-sm rounded select-none dark:text-white\"\n+ >SSH</span\n+ >\n+ <div class=\"overflow-x-auto whitespace-nowrap flex-1\">\n+ <code class=\"dark:text-gray-100\"\n+ >git clone\n+ git@{{ .RepoInfo.Knot }}:{{ .RepoInfo.OwnerHandle }}/{{ .RepoInfo.Name }}</code\n+ >\n+ </div>\n+ </div>\n+ </div>\n+ </div>\n+\n+ <p class=\"py-2 text-gray-500 dark:text-gray-400\">\n+ Note that for self-hosted knots, clone URLs may be different based\n+ on your setup.\n+ </p>\n+ </section>\n+{{ end }}\ndiff --git a/appview/pages/templates/fragments/diff.html b/appview/pages/templates/repo/fragments/diff.html\nsimilarity index 99%\nrename from appview/pages/templates/fragments/diff.html\nrename to appview/pages/templates/repo/fragments/diff.html\nindex 50e2940..65aac0d 100644\n--- a/appview/pages/templates/fragments/diff.html\n+++ b/appview/pages/templates/repo/fragments/diff.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/diff\" }}\n+{{ define \"repo/fragments/diff\" }}\n {{ $repo := index . 0 }}\n {{ $diff := index . 1 }}\n {{ $commit := $diff.Commit }}\n@@ -172,4 +172,4 @@\n <span class=\"rounded p-1 select-none bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400\">-{{ .Deletions }}</span>\n {{ end }}\n </div>\n-{{ end }}\n+{{ end }}\n\\ No newline at end of file\ndiff --git a/appview/pages/templates/fragments/editRepoDescription.html b/appview/pages/templates/repo/fragments/editRepoDescription.html\nsimilarity index 91%\nrename from appview/pages/templates/fragments/editRepoDescription.html\nrename to appview/pages/templates/repo/fragments/editRepoDescription.html\nindex c931b9c..85d6b8c 100644\n--- a/appview/pages/templates/fragments/editRepoDescription.html\n+++ b/appview/pages/templates/repo/fragments/editRepoDescription.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/editRepoDescription\" }}\n+{{ define \"repo/fragments/editRepoDescription\" }}\n <form hx-put=\"/{{ .RepoInfo.FullName }}/description\" hx-target=\"this\" hx-swap=\"outerHTML\" class=\"flex flex-wrap gap-2\">\n <input type=\"text\" class=\"p-1\" name=\"description\" value=\"{{ .RepoInfo.Description }}\">\n <button type=\"submit\" class=\"btn p-1 flex items-center gap-2 no-underline text-sm\">\ndiff --git a/appview/pages/templates/repo/fragments/repoActions.html b/appview/pages/templates/repo/fragments/repoActions.html\nnew file mode 100644\nindex 0000000..dab8386\n--- /dev/null\n+++ b/appview/pages/templates/repo/fragments/repoActions.html\n@@ -0,0 +1,47 @@\n+{{ define \"repo/fragments/repoActions\" }}\n+ <div class=\"flex items-center gap-2 z-auto\">\n+ <button\n+ id=\"starBtn\"\n+ class=\"btn disabled:opacity-50 disabled:cursor-not-allowed\"\n+ {{ if .IsStarred }}\n+ hx-delete=\"/star?subject={{ .RepoAt }}&countHint={{ .Stats.StarCount }}\"\n+ {{ else }}\n+ hx-post=\"/star?subject={{ .RepoAt }}&countHint={{ .Stats.StarCount }}\"\n+ {{ end }}\n+\n+ hx-trigger=\"click\"\n+ hx-target=\"#starBtn\"\n+ hx-swap=\"outerHTML\"\n+ hx-disabled-elt=\"#starBtn\"\n+ >\n+ <div class=\"flex gap-2 items-center\">\n+ {{ if .IsStarred }}\n+ {{ i \"star\" \"w-4 h-4 fill-current\" }}\n+ {{ else }}\n+ {{ i \"star\" \"w-4 h-4\" }}\n+ {{ end }}\n+ <span class=\"text-sm\">\n+ {{ .Stats.StarCount }}\n+ </span>\n+ </div>\n+ </button>\n+ {{ if .DisableFork }}\n+ <button\n+ class=\"btn text-sm no-underline hover:no-underline flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n+ disabled\n+ title=\"Empty repositories cannot be forked\"\n+ >\n+ {{ i \"git-fork\" \"w-4 h-4\" }}\n+ fork\n+ </button>\n+ {{ else }}\n+ <a\n+ class=\"btn text-sm no-underline hover:no-underline flex items-center gap-2\"\n+ href=\"/{{ .FullName }}/fork\"\n+ >\n+ {{ i \"git-fork\" \"w-4 h-4\" }}\n+ fork\n+ </a>\n+ {{ end }}\n+ </div>\n+{{ end }}\ndiff --git a/appview/pages/templates/fragments/repoDescription.html b/appview/pages/templates/repo/fragments/repoDescription.html\nsimilarity index 91%\nrename from appview/pages/templates/fragments/repoDescription.html\nrename to appview/pages/templates/repo/fragments/repoDescription.html\nindex 4a6735f..3d4685a 100644\n--- a/appview/pages/templates/fragments/repoDescription.html\n+++ b/appview/pages/templates/repo/fragments/repoDescription.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/repoDescription\" }}\n+{{ define \"repo/fragments/repoDescription\" }}\n <span id=\"repo-description\" class=\"flex flex-wrap items-center gap-2 text-sm\" hx-target=\"this\" hx-swap=\"outerHTML\">\n {{ if .RepoInfo.Description }}\n {{ .RepoInfo.Description }}\ndiff --git a/appview/pages/templates/repo/index.html b/appview/pages/templates/repo/index.html\nindex 7c1d809..c54b3c4 100644\n--- a/appview/pages/templates/repo/index.html\n+++ b/appview/pages/templates/repo/index.html\n@@ -1,211 +1,248 @@\n {{ define \"title\" }}{{ .RepoInfo.FullName }} at {{ .Ref }}{{ end }}\n \n-\n {{ define \"extrameta\" }}\n- <meta name=\"vcs:clone\" content=\"https://tangled.sh/{{ .RepoInfo.FullName }}\"/>\n- <meta name=\"forge:summary\" content=\"https://tangled.sh/{{ .RepoInfo.FullName }}\">\n- <meta name=\"forge:dir\" content=\"https://tangled.sh/{{ .RepoInfo.FullName }}/tree/{ref}/{path}\">\n- <meta name=\"forge:file\" content=\"https://tangled.sh/{{ .RepoInfo.FullName }}/blob/{ref}/{path}\">\n- <meta name=\"forge:line\" content=\"https://tangled.sh/{{ .RepoInfo.FullName }}/blob/{ref}/{path}#L{line}\">\n- <meta name=\"go-import\" content=\"tangled.sh/{{ .RepoInfo.FullNameWithoutAt }} git https://tangled.sh/{{ .RepoInfo.FullName }}\">\n+ <meta\n+ name=\"vcs:clone\"\n+ content=\"https://tangled.sh/{{ .RepoInfo.FullName }}\"\n+ />\n+ <meta\n+ name=\"forge:summary\"\n+ content=\"https://tangled.sh/{{ .RepoInfo.FullName }}\"\n+ />\n+ <meta\n+ name=\"forge:dir\"\n+ content=\"https://tangled.sh/{{ .RepoInfo.FullName }}/tree/{ref}/{path}\"\n+ />\n+ <meta\n+ name=\"forge:file\"\n+ content=\"https://tangled.sh/{{ .RepoInfo.FullName }}/blob/{ref}/{path}\"\n+ />\n+ <meta\n+ name=\"forge:line\"\n+ content=\"https://tangled.sh/{{ .RepoInfo.FullName }}/blob/{ref}/{path}#L{line}\"\n+ />\n+ <meta\n+ name=\"go-import\"\n+ content=\"tangled.sh/{{ .RepoInfo.FullNameWithoutAt }} git https://tangled.sh/{{ .RepoInfo.FullName }}\"\n+ />\n {{ end }}\n \n-\n {{ define \"repoContent\" }}\n <main>\n- {{ block \"branchSelector\" . }} {{ end }}\n+ {{ block \"branchSelector\" . }}{{ end }}\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n- {{ block \"fileTree\" . }} {{ end }}\n- {{ block \"commitLog\" . }} {{ end }}\n+ {{ block \"fileTree\" . }}{{ end }}\n+ {{ block \"commitLog\" . }}{{ end }}\n </div>\n </main>\n {{ end }}\n \n {{ define \"branchSelector\" }}\n-<div class=\"flex justify-between pb-5\">\n- <select\n- onchange=\"window.location.href = '/{{ .RepoInfo.FullName }}/tree/' + encodeURIComponent(this.value)\"\n- class=\"p-1 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700\"\n- >\n- <optgroup label=\"branches\" class=\"bold text-sm\">\n- {{ range .Branches }}\n- <option\n- value=\"{{ .Reference.Name }}\"\n- class=\"py-1\"\n- {{ if eq .Reference.Name $.Ref }}\n- selected\n- {{ end }}\n- >\n- {{ .Reference.Name }}\n- </option>\n- {{ end }}\n- </optgroup>\n- <optgroup label=\"tags\" class=\"bold text-sm\">\n- {{ range .Tags }}\n- <option\n- value=\"{{ .Reference.Name }}\"\n- class=\"py-1\"\n- {{ if eq .Reference.Name $.Ref }}\n- selected\n- {{ end }}\n- >\n- {{ .Reference.Name }}\n- </option>\n- {{ else }}\n- <option class=\"py-1\" disabled>no tags found</option>\n- {{ end }}\n- </optgroup>\n- </select>\n- <a\n- href=\"/{{ .RepoInfo.FullName }}/commits/{{ .Ref | urlquery }}\"\n- class=\"ml-2 no-underline flex items-center gap-2 text-sm uppercase font-bold dark:text-white\"\n- >\n- {{ i \"logs\" \"w-4 h-4\" }}\n- {{ .TotalCommits }}\n- {{ if eq .TotalCommits 1 }}commit{{ else }}commits{{ end }}\n- </a>\n-</div>\n+ <div class=\"flex justify-between pb-5\">\n+ <select\n+ onchange=\"window.location.href = '/{{ .RepoInfo.FullName }}/tree/' + encodeURIComponent(this.value)\"\n+ class=\"p-1 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700\"\n+ >\n+ <optgroup label=\"branches\" class=\"bold text-sm\">\n+ {{ range .Branches }}\n+ <option\n+ value=\"{{ .Reference.Name }}\"\n+ class=\"py-1\"\n+ {{ if eq .Reference.Name $.Ref }}\n+ selected\n+ {{ end }}\n+ >\n+ {{ .Reference.Name }}\n+ </option>\n+ {{ end }}\n+ </optgroup>\n+ <optgroup label=\"tags\" class=\"bold text-sm\">\n+ {{ range .Tags }}\n+ <option\n+ value=\"{{ .Reference.Name }}\"\n+ class=\"py-1\"\n+ {{ if eq .Reference.Name $.Ref }}\n+ selected\n+ {{ end }}\n+ >\n+ {{ .Reference.Name }}\n+ </option>\n+ {{ else }}\n+ <option class=\"py-1\" disabled>no tags found</option>\n+ {{ end }}\n+ </optgroup>\n+ </select>\n+ <a\n+ href=\"/{{ .RepoInfo.FullName }}/commits/{{ .Ref | urlquery }}\"\n+ class=\"ml-2 no-underline flex items-center gap-2 text-sm uppercase font-bold dark:text-white\"\n+ >\n+ {{ i \"logs\" \"w-4 h-4\" }}\n+ {{ .TotalCommits }}\n+ {{ if eq .TotalCommits 1 }}commit{{ else }}commits{{ end }}\n+ </a>\n+ </div>\n {{ end }}\n \n {{ define \"fileTree\" }}\n-<div id=\"file-tree\" class=\"col-span-1 pr-2 md:border-r md:border-gray-200 dark:md:border-gray-700\">\n- {{ $containerstyle := \"py-1\" }}\n- {{ $linkstyle := \"no-underline hover:underline dark:text-white\" }}\n-\n- {{ range .Files }}\n- {{ if not .IsFile }}\n- <div class=\"{{ $containerstyle }}\">\n- <div class=\"flex justify-between items-center\">\n- <a\n- href=\"/{{ $.RepoInfo.FullName }}/tree/{{ $.Ref | urlquery }}/{{ .Name }}\"\n- class=\"{{ $linkstyle }}\"\n- >\n- <div class=\"flex items-center gap-2\">\n- {{ i \"folder\" \"w-3 h-3 fill-current\" }}\n- {{ .Name }}\n- </div>\n- </a>\n-\n- <time class=\"text-xs text-gray-500 dark:text-gray-400\"\n- >{{ timeFmt .LastCommit.When }}</time\n- >\n+ <div\n+ id=\"file-tree\"\n+ class=\"col-span-1 pr-2 md:border-r md:border-gray-200 dark:md:border-gray-700\"\n+ >\n+ {{ $containerstyle := \"py-1\" }}\n+ {{ $linkstyle := \"no-underline hover:underline dark:text-white\" }}\n+\n+ {{ range .Files }}\n+ {{ if not .IsFile }}\n+ <div class=\"{{ $containerstyle }}\">\n+ <div class=\"flex justify-between items-center\">\n+ <a\n+ href=\"/{{ $.RepoInfo.FullName }}/tree/{{ $.Ref | urlquery }}/{{ .Name }}\"\n+ class=\"{{ $linkstyle }}\"\n+ >\n+ <div class=\"flex items-center gap-2\">\n+ {{ i \"folder\" \"w-3 h-3 fill-current\" }}\n+ {{ .Name }}\n+ </div>\n+ </a>\n+\n+ <time class=\"text-xs text-gray-500 dark:text-gray-400\"\n+ >{{ timeFmt .LastCommit.When }}</time\n+ >\n+ </div>\n </div>\n- </div>\n+ {{ end }}\n {{ end }}\n- {{ end }}\n-\n- {{ range .Files }}\n- {{ if .IsFile }}\n- <div class=\"{{ $containerstyle }}\">\n- <div class=\"flex justify-between items-center\">\n- <a\n- href=\"/{{ $.RepoInfo.FullName }}/blob/{{ $.Ref | urlquery }}/{{ .Name }}\"\n- class=\"{{ $linkstyle }}\"\n- >\n- <div class=\"flex items-center gap-2\">\n- {{ i \"file\" \"w-3 h-3\" }}{{ .Name }}\n- </div>\n- </a>\n \n- <time class=\"text-xs text-gray-500 dark:text-gray-400\"\n- >{{ timeFmt .LastCommit.When }}</time\n- >\n+ {{ range .Files }}\n+ {{ if .IsFile }}\n+ <div class=\"{{ $containerstyle }}\">\n+ <div class=\"flex justify-between items-center\">\n+ <a\n+ href=\"/{{ $.RepoInfo.FullName }}/blob/{{ $.Ref | urlquery }}/{{ .Name }}\"\n+ class=\"{{ $linkstyle }}\"\n+ >\n+ <div class=\"flex items-center gap-2\">\n+ {{ i \"file\" \"w-3 h-3\" }}{{ .Name }}\n+ </div>\n+ </a>\n+\n+ <time class=\"text-xs text-gray-500 dark:text-gray-400\"\n+ >{{ timeFmt .LastCommit.When }}</time\n+ >\n+ </div>\n </div>\n- </div>\n+ {{ end }}\n {{ end }}\n- {{ end }}\n-</div>\n+ </div>\n {{ end }}\n \n-\n {{ define \"commitLog\" }}\n-<div id=\"commit-log\" class=\"hidden md:block md:col-span-1\">\n- {{ range .Commits }}\n- <div class=\"relative px-2 pb-8\">\n- <div id=\"commit-message\">\n- {{ $messageParts := splitN .Message \"\\n\\n\" 2 }}\n- <div class=\"text-base cursor-pointer\">\n- <div>\n- <div>\n- <a\n- href=\"/{{ $.RepoInfo.FullName }}/commit/{{ .Hash.String }}\"\n- class=\"inline no-underline hover:underline dark:text-white\"\n- >{{ index $messageParts 0 }}</a\n- >\n- {{ if gt (len $messageParts) 1 }}\n-\n- <button\n- class=\"py-1/2 px-1 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600\"\n- hx-on:click=\"this.parentElement.nextElementSibling.classList.toggle('hidden')\"\n- >\n- {{ i \"ellipsis\" \"w-3 h-3\" }}\n- </button>\n- {{ end }}\n- </div>\n- {{ if gt (len $messageParts) 1 }}\n- <p\n- class=\"hidden mt-1 text-sm cursor-text pb-2 dark:text-gray-300\"\n- >\n- {{ nl2br (index $messageParts 1) }}\n- </p>\n- {{ end }}\n- </div>\n- </div>\n- </div>\n+ <div id=\"commit-log\" class=\"hidden md:block md:col-span-1\">\n+ {{ range .Commits }}\n+ <div class=\"relative px-2 pb-8\">\n+ <div id=\"commit-message\">\n+ {{ $messageParts := splitN .Message \"\\n\\n\" 2 }}\n+ <div class=\"text-base cursor-pointer\">\n+ <div>\n+ <div>\n+ <a\n+ href=\"/{{ $.RepoInfo.FullName }}/commit/{{ .Hash.String }}\"\n+ class=\"inline no-underline hover:underline dark:text-white\"\n+ >{{ index $messageParts 0 }}</a\n+ >\n+ {{ if gt (len $messageParts) 1 }}\n+\n+ <button\n+ class=\"py-1/2 px-1 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600\"\n+ hx-on:click=\"this.parentElement.nextElementSibling.classList.toggle('hidden')\"\n+ >\n+ {{ i \"ellipsis\" \"w-3 h-3\" }}\n+ </button>\n+ {{ end }}\n+ </div>\n+ {{ if gt (len $messageParts) 1 }}\n+ <p\n+ class=\"hidden mt-1 text-sm cursor-text pb-2 dark:text-gray-300\"\n+ >\n+ {{ nl2br (index $messageParts 1) }}\n+ </p>\n+ {{ end }}\n+ </div>\n+ </div>\n+ </div>\n \n- <div class=\"text-xs text-gray-500 dark:text-gray-400\">\n- <span class=\"font-mono\">\n- <a\n- href=\"/{{ $.RepoInfo.FullName }}/commit/{{ .Hash.String }}\"\n- class=\"text-gray-500 dark:text-gray-400 no-underline hover:underline\"\n- >{{ slice .Hash.String 0 8 }}</a\n- >\n- </span>\n- <span\n- class=\"mx-2 before:content-['·'] before:select-none\"\n- ></span>\n- <span>\n- {{ $didOrHandle := index $.EmailToDidOrHandle .Author.Email }}\n- <a\n- href=\"{{ if $didOrHandle }}/{{ $didOrHandle }}{{ else }}mailto:{{ .Author.Email }}{{ end }}\"\n- class=\"text-gray-500 dark:text-gray-400 no-underline hover:underline\"\n- >{{ if $didOrHandle }}{{ $didOrHandle }}{{ else }}{{ .Author.Name }}{{ end }}</a\n- >\n- </span>\n- <div\n- class=\"inline-block px-1 select-none after:content-['·']\"\n- ></div>\n- <span>{{ timeFmt .Author.When }}</span>\n- {{ $tagsForCommit := index $.TagMap .Hash.String }}\n- {{ if gt (len $tagsForCommit) 0 }}\n+ <div class=\"text-xs text-gray-500 dark:text-gray-400\">\n+ <span class=\"font-mono\">\n+ <a\n+ href=\"/{{ $.RepoInfo.FullName }}/commit/{{ .Hash.String }}\"\n+ class=\"text-gray-500 dark:text-gray-400 no-underline hover:underline\"\n+ >{{ slice .Hash.String 0 8 }}</a\n+ >\n+ </span>\n+ <span\n+ class=\"mx-2 before:content-['·'] before:select-none\"\n+ ></span>\n+ <span>\n+ {{ $didOrHandle := index $.EmailToDidOrHandle .Author.Email }}\n+ <a\n+ href=\"{{ if $didOrHandle }}\n+ /{{ $didOrHandle }}\n+ {{ else }}\n+ mailto:{{ .Author.Email }}\n+ {{ end }}\"\n+ class=\"text-gray-500 dark:text-gray-400 no-underline hover:underline\"\n+ >{{ if $didOrHandle }}\n+ {{ $didOrHandle }}\n+ {{ else }}\n+ {{ .Author.Name }}\n+ {{ end }}</a\n+ >\n+ </span>\n <div\n class=\"inline-block px-1 select-none after:content-['·']\"\n ></div>\n- {{ end }}\n- {{ range $tagsForCommit }}\n- <span class=\"text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center\">\n- {{ . }}\n- </span>\n- {{ end }}\n- </div>\n- </div>\n- {{ end }}\n-</div>\n+ <span>{{ timeFmt .Author.When }}</span>\n+ {{ $tagsForCommit := index $.TagMap .Hash.String }}\n+ {{ if gt (len $tagsForCommit) 0 }}\n+ <div\n+ class=\"inline-block px-1 select-none after:content-['·']\"\n+ ></div>\n+ {{ end }}\n+ {{ range $tagsForCommit }}\n+ <span\n+ class=\"text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center\"\n+ >\n+ {{ . }}\n+ </span>\n+ {{ end }}\n+ </div>\n+ </div>\n+ {{ end }}\n+ </div>\n {{ end }}\n \n-\n {{ define \"repoAfter\" }}\n {{- if .HTMLReadme }}\n- <section class=\"mt-4 p-6 rounded bg-white dark:bg-gray-800 dark:text-white w-full mx-auto overflow-auto {{ if not .Raw }} prose dark:prose-invert dark:[&_pre]:bg-gray-900 dark:[&_code]:text-gray-300 dark:[&_pre_code]:bg-gray-900 dark:[&_pre]:border dark:[&_pre]:border-gray-700 {{ end }}\">\n- <article class=\"{{ if .Raw }}whitespace-pre{{end}}\">\n- {{ if .Raw }}\n- <pre class=\"dark:bg-gray-900 dark:text-gray-200 dark:border dark:border-gray-700 dark:p-4 dark:rounded\">{{ .HTMLReadme }}</pre>\n- {{ else }}\n- {{ .HTMLReadme }}\n- {{ end }}\n- </article>\n- </section>\n+ <section\n+ class=\"mt-4 p-6 rounded bg-white dark:bg-gray-800 dark:text-white w-full mx-auto overflow-auto {{ if not .Raw }}\n+ prose dark:prose-invert dark:[&_pre]:bg-gray-900\n+ dark:[&_code]:text-gray-300 dark:[&_pre_code]:bg-gray-900\n+ dark:[&_pre]:border dark:[&_pre]:border-gray-700\n+ {{ end }}\"\n+ >\n+ <article class=\"{{ if .Raw }}whitespace-pre{{ end }}\">\n+ {{ if .Raw }}\n+ <pre\n+ class=\"dark:bg-gray-900 dark:text-gray-200 dark:border dark:border-gray-700 dark:p-4 dark:rounded\"\n+ >\n+{{ .HTMLReadme }}</pre\n+ >\n+ {{ else }}\n+ {{ .HTMLReadme }}\n+ {{ end }}\n+ </article>\n+ </section>\n {{- end -}}\n \n- {{ template \"fragments/cloneInstructions\" . }}\n+ {{ template \"repo/fragments/cloneInstructions\" . }}\n {{ end }}\ndiff --git a/appview/pages/templates/fragments/editIssueComment.html b/appview/pages/templates/repo/issues/fragments/editIssueComment.html\nsimilarity index 97%\nrename from appview/pages/templates/fragments/editIssueComment.html\nrename to appview/pages/templates/repo/issues/fragments/editIssueComment.html\nindex 6d9d860..5be765e 100644\n--- a/appview/pages/templates/fragments/editIssueComment.html\n+++ b/appview/pages/templates/repo/issues/fragments/editIssueComment.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/editIssueComment\" }}\n+{{ define \"repo/issues/fragments/editIssueComment\" }}\n {{ with .Comment }}\n <div id=\"comment-container-{{.CommentId}}\">\n <div class=\"flex items-center gap-2 mb-2 text-gray-500 text-sm\">\ndiff --git a/appview/pages/templates/fragments/issueComment.html b/appview/pages/templates/repo/issues/fragments/issueComment.html\nsimilarity index 97%\nrename from appview/pages/templates/fragments/issueComment.html\nrename to appview/pages/templates/repo/issues/fragments/issueComment.html\nindex 1716a80..9d06479 100644\n--- a/appview/pages/templates/fragments/issueComment.html\n+++ b/appview/pages/templates/repo/issues/fragments/issueComment.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/issueComment\" }}\n+{{ define \"repo/issues/fragments/issueComment\" }}\n {{ with .Comment }}\n <div id=\"comment-container-{{.CommentId}}\">\n <div class=\"flex items-center gap-2 mb-2 text-gray-500 text-sm\">\ndiff --git a/appview/pages/templates/repo/issues/issue.html b/appview/pages/templates/repo/issues/issue.html\nindex 07b90f8..7a79970 100644\n--- a/appview/pages/templates/repo/issues/issue.html\n+++ b/appview/pages/templates/repo/issues/issue.html\n@@ -52,7 +52,7 @@\n {{ if gt $index 0 }}\n <div class=\"absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600\"></div>\n {{ end }}\n- {{ template \"fragments/issueComment\" (dict \"RepoInfo\" $.RepoInfo \"LoggedInUser\" $.LoggedInUser \"DidHandleMap\" $.DidHandleMap \"Issue\" $.Issue \"Comment\" .)}}\n+ {{ template \"repo/issues/fragments/issueComment\" (dict \"RepoInfo\" $.RepoInfo \"LoggedInUser\" $.LoggedInUser \"DidHandleMap\" $.DidHandleMap \"Issue\" $.Issue \"Comment\" .)}}\n </div>\n {{ end }}\n </section>\ndiff --git a/appview/pages/templates/fragments/pullActions.html b/appview/pages/templates/repo/pulls/fragments/pullActions.html\nsimilarity index 98%\nrename from appview/pages/templates/fragments/pullActions.html\nrename to appview/pages/templates/repo/pulls/fragments/pullActions.html\nindex 54bf14e..8869b45 100644\n--- a/appview/pages/templates/fragments/pullActions.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullActions.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullActions\" }}\n+{{ define \"repo/pulls/fragments/pullActions\" }}\n {{ $lastIdx := sub (len .Pull.Submissions) 1 }}\n {{ $roundNumber := .RoundNumber }}\n \ndiff --git a/appview/pages/templates/fragments/pullCompareBranches.html b/appview/pages/templates/repo/pulls/fragments/pullCompareBranches.html\nsimilarity index 92%\nrename from appview/pages/templates/fragments/pullCompareBranches.html\nrename to appview/pages/templates/repo/pulls/fragments/pullCompareBranches.html\nindex d1b4fce..203d016 100644\n--- a/appview/pages/templates/fragments/pullCompareBranches.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullCompareBranches.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullCompareBranches\" }}\n+{{ define \"repo/pulls/fragments/pullCompareBranches\" }}\n <div id=\"patch-upload\">\n <label for=\"targetBranch\" class=\"dark:text-white\"\n >select a branch</label\ndiff --git a/appview/pages/templates/fragments/pullCompareForks.html b/appview/pages/templates/repo/pulls/fragments/pullCompareForks.html\nsimilarity index 96%\nrename from appview/pages/templates/fragments/pullCompareForks.html\nrename to appview/pages/templates/repo/pulls/fragments/pullCompareForks.html\nindex 706bdb4..e7e3848 100644\n--- a/appview/pages/templates/fragments/pullCompareForks.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullCompareForks.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullCompareForks\" }}\n+{{ define \"repo/pulls/fragments/pullCompareForks\" }}\n <div id=\"patch-upload\">\n <label for=\"forkSelect\" class=\"dark:text-white\"\n >select a fork to compare</label\ndiff --git a/appview/pages/templates/fragments/pullCompareForksBranches.html b/appview/pages/templates/repo/pulls/fragments/pullCompareForksBranches.html\nsimilarity index 89%\nrename from appview/pages/templates/fragments/pullCompareForksBranches.html\nrename to appview/pages/templates/repo/pulls/fragments/pullCompareForksBranches.html\nindex 6722762..d2dc3bb 100644\n--- a/appview/pages/templates/fragments/pullCompareForksBranches.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullCompareForksBranches.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullCompareForksBranches\" }}\n+{{ define \"repo/pulls/fragments/pullCompareForksBranches\" }}\n <div class=\"flex flex-wrap gap-2 items-center\">\n <select\n name=\"sourceBranch\"\ndiff --git a/appview/pages/templates/fragments/pullNewComment.html b/appview/pages/templates/repo/pulls/fragments/pullNewComment.html\nsimilarity index 95%\nrename from appview/pages/templates/fragments/pullNewComment.html\nrename to appview/pages/templates/repo/pulls/fragments/pullNewComment.html\nindex 4d1b4e4..33a6f09 100644\n--- a/appview/pages/templates/fragments/pullNewComment.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullNewComment.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullNewComment\" }}\n+{{ define \"repo/pulls/fragments/pullNewComment\" }}\n <div \n id=\"pull-comment-card-{{ .RoundNumber }}\" \n class=\"bg-white dark:bg-gray-800 rounded drop-shadow-sm p-4 relative w-full flex flex-col gap-2\">\ndiff --git a/appview/pages/templates/fragments/pullPatchUpload.html b/appview/pages/templates/repo/pulls/fragments/pullPatchUpload.html\nsimilarity index 88%\nrename from appview/pages/templates/fragments/pullPatchUpload.html\nrename to appview/pages/templates/repo/pulls/fragments/pullPatchUpload.html\nindex f42d2ac..2a499d1 100644\n--- a/appview/pages/templates/fragments/pullPatchUpload.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullPatchUpload.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullPatchUpload\" }}\n+{{ define \"repo/pulls/fragments/pullPatchUpload\" }}\n <div id=\"patch-upload\">\n <textarea\n name=\"patch\"\ndiff --git a/appview/pages/templates/fragments/pullResubmit.html b/appview/pages/templates/repo/pulls/fragments/pullResubmit.html\nsimilarity index 97%\nrename from appview/pages/templates/fragments/pullResubmit.html\nrename to appview/pages/templates/repo/pulls/fragments/pullResubmit.html\nindex 0d9337b..464946e 100644\n--- a/appview/pages/templates/fragments/pullResubmit.html\n+++ b/appview/pages/templates/repo/pulls/fragments/pullResubmit.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/pullResubmit\" }}\n+{{ define \"repo/pulls/fragments/pullResubmit\" }}\n <div\n id=\"resubmit-pull-card\"\n class=\"rounded relative border bg-amber-50 dark:bg-amber-900 border-amber-200 dark:border-amber-500 px-6 py-2\">\ndiff --git a/appview/pages/templates/repo/pulls/new.html b/appview/pages/templates/repo/pulls/new.html\nindex 744df3f..be42507 100644\n--- a/appview/pages/templates/repo/pulls/new.html\n+++ b/appview/pages/templates/repo/pulls/new.html\n@@ -84,7 +84,7 @@\n </nav>\n \n <section id=\"patch-strategy\">\n- {{ template \"fragments/pullPatchUpload\" . }}\n+ {{ template \"repo/pulls/fragments/pullPatchUpload\" . }}\n </section>\n \n <div class=\"flex justify-start items-center gap-2 mt-4\">\ndiff --git a/appview/pages/templates/repo/pulls/patch.html b/appview/pages/templates/repo/pulls/patch.html\nindex c819039..38f79df 100644\n--- a/appview/pages/templates/repo/pulls/patch.html\n+++ b/appview/pages/templates/repo/pulls/patch.html\n@@ -72,6 +72,6 @@\n </div>\n \n <section>\n- {{ template \"fragments/diff\" (list .RepoInfo.FullName .Diff) }}\n+ {{ template \"repo/fragments/diff\" (list .RepoInfo.FullName .Diff) }}\n </section>\n {{ end }}\ndiff --git a/appview/pages/templates/repo/pulls/pull.html b/appview/pages/templates/repo/pulls/pull.html\nindex 57d333e..1318efb 100644\n--- a/appview/pages/templates/repo/pulls/pull.html\n+++ b/appview/pages/templates/repo/pulls/pull.html\n@@ -147,7 +147,7 @@\n {{ end }}\n \n {{ if $.LoggedInUser }}\n- {{ template \"fragments/pullActions\" (dict \"LoggedInUser\" $.LoggedInUser \"Pull\" $.Pull \"RepoInfo\" $.RepoInfo \"RoundNumber\" .RoundNumber \"MergeCheck\" $.MergeCheck \"ResubmitCheck\" $.ResubmitCheck) }}\n+ {{ template \"repo/pulls/fragments/pullActions\" (dict \"LoggedInUser\" $.LoggedInUser \"Pull\" $.Pull \"RepoInfo\" $.RepoInfo \"RoundNumber\" .RoundNumber \"MergeCheck\" $.MergeCheck \"ResubmitCheck\" $.ResubmitCheck) }}\n {{ else }}\n <div class=\"bg-white dark:bg-gray-800 rounded drop-shadow-sm px-6 py-4 w-fit dark:text-white\">\n <div class=\"absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600\"></div>\ndiff --git a/appview/pages/templates/fragments/follow.html b/appview/pages/templates/user/fragments/follow.html\nsimilarity index 91%\nrename from appview/pages/templates/fragments/follow.html\nrename to appview/pages/templates/user/fragments/follow.html\nindex 20481da..fb7b933 100644\n--- a/appview/pages/templates/fragments/follow.html\n+++ b/appview/pages/templates/user/fragments/follow.html\n@@ -1,4 +1,4 @@\n-{{ define \"fragments/follow\" }}\n+{{ define \"user/fragments/follow\" }}\n <button id=\"followBtn\"\n class=\"btn mt-2 w-full\"\n \ndiff --git a/appview/pages/templates/user/profile.html b/appview/pages/templates/user/profile.html\nindex 7ac9887..a1b7791 100644\n--- a/appview/pages/templates/user/profile.html\n+++ b/appview/pages/templates/user/profile.html\n@@ -247,7 +247,7 @@\n </div>\n \n {{ if ne .FollowStatus.String \"IsSelf\" }}\n- {{ template \"fragments/follow\" . }}\n+ {{ template \"user/fragments/follow\" . }}\n {{ end }}\n </div>\n {{ end }}\n", "title": "test patch", "pullId": 50, "targetRepo": "at://did:plc:wshs7t2adsemcrrd4snkeqli/sh.tangled.repo/3liuighjy2h22", "targetBranch": "master" } }