ATProto Browser

ATProto Browser

Experimental browser for the Atmosphere

Record data

{
  "uri": "at://did:plc:hwevmowznbiukdf6uk5dwrrq/sh.tangled.repo.pull/3lmpacuhnkx22",
  "cid": "bafyreicewezzipp2lye4eubu75l6v5kowbeijko3c7avfsca6wbnyuqloe",
  "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": 49,
    "targetRepo": "at://did:plc:wshs7t2adsemcrrd4snkeqli/sh.tangled.repo/3liuighjy2h22",
    "targetBranch": "master"
  }
}