tenseleyflow/shithub / 447e2e2

Browse files

Move repo and org tabs into app header

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
447e2e2c79b8420fd11ff88b277e0715028b92b9
Parents
9f6ec52
Tree
3d62276

14 changed files

StatusFile+-
M internal/web/handlers/hello.go 5 0
M internal/web/handlers/orgs/avatar.go 1 0
M internal/web/handlers/orgs/orgs.go 1 0
M internal/web/handlers/orgs/teams.go 14 12
M internal/web/handlers/profile/org_profile.go 1 0
M internal/web/static/css/shithub.css 86 6
M internal/web/templates/_nav.html 43 21
A internal/web/templates/_org_subnav.html 27 0
M internal/web/templates/_repo_header.html 0 3
M internal/web/templates/_repo_subnav.html 2 2
M internal/web/templates/orgs/people.html 0 11
M internal/web/templates/orgs/profile.html 0 12
M internal/web/templates/repo/blob.html 1 9
M internal/web/templates/repo/pulls_list.html 1 9
internal/web/handlers/hello.gomodified
@@ -41,6 +41,11 @@ type helloData struct {
4141
 	// no query of its own, but the field must exist or template
4242
 	// execution errors out.
4343
 	GlobalSearchQuery string
44
+	// Repo/Org are optional nav contexts. They are nil on the home page,
45
+	// but typed data must still expose them because _nav.html probes
46
+	// these fields before deciding whether to render context tabs.
47
+	Repo any
48
+	Org  any
4449
 }
4550
 
4651
 func (h helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
internal/web/handlers/orgs/avatar.gomodified
@@ -122,6 +122,7 @@ func (h *Handlers) renderSettingsProfile(
122122
 		"CSRFToken":           middleware.CSRFTokenForRequest(r),
123123
 		"Org":                 org,
124124
 		"AvatarURL":           "/avatars/" + org.Slug,
125
+		"ActiveOrgNav":        "settings",
125126
 		"AvatarUploadEnabled": h.d.ObjectStore != nil,
126127
 		"HasAvatar":           org.AvatarObjectKey.Valid && org.AvatarObjectKey.String != "",
127128
 		"Error":               errMsg,
internal/web/handlers/orgs/orgs.gomodified
@@ -208,6 +208,7 @@ func (h *Handlers) peoplePage(w http.ResponseWriter, r *http.Request) {
208208
 		"CSRFToken":       middleware.CSRFTokenForRequest(r),
209209
 		"Org":             org,
210210
 		"AvatarURL":       "/avatars/" + url.PathEscape(org.Slug),
211
+		"ActiveOrgNav":    "people",
211212
 		"Members":         filteredMembers,
212213
 		"MemberCount":     len(members),
213214
 		"Pending":         pending,
internal/web/handlers/orgs/teams.gomodified
@@ -45,11 +45,12 @@ func (h *Handlers) teamsList(w http.ResponseWriter, r *http.Request) {
4545
 		isOwner, _ = orgs.IsOwner(r.Context(), h.deps(), org.ID, viewer.ID)
4646
 	}
4747
 	if err := h.d.Render.RenderPage(w, r, "orgs/teams_list", map[string]any{
48
-		"Title":     org.Slug + " · teams",
49
-		"CSRFToken": middleware.CSRFTokenForRequest(r),
50
-		"Org":       org,
51
-		"Teams":     visible,
52
-		"IsOwner":   isOwner,
48
+		"Title":        org.Slug + " · teams",
49
+		"CSRFToken":    middleware.CSRFTokenForRequest(r),
50
+		"Org":          org,
51
+		"ActiveOrgNav": "teams",
52
+		"Teams":        visible,
53
+		"IsOwner":      isOwner,
5354
 	}); err != nil {
5455
 		h.d.Logger.ErrorContext(r.Context(), "orgs: render", "tpl", "orgs/teams_list", "error", err)
5556
 	}
@@ -110,13 +111,14 @@ func (h *Handlers) teamView(w http.ResponseWriter, r *http.Request) {
110111
 		isOwner, _ = orgs.IsOwner(r.Context(), h.deps(), org.ID, viewer.ID)
111112
 	}
112113
 	if err := h.d.Render.RenderPage(w, r, "orgs/team_view", map[string]any{
113
-		"Title":     string(org.Slug) + "/" + string(team.Slug),
114
-		"CSRFToken": middleware.CSRFTokenForRequest(r),
115
-		"Org":       org,
116
-		"Team":      team,
117
-		"Members":   members,
118
-		"Repos":     repos,
119
-		"IsOwner":   isOwner,
114
+		"Title":        string(org.Slug) + "/" + string(team.Slug),
115
+		"CSRFToken":    middleware.CSRFTokenForRequest(r),
116
+		"Org":          org,
117
+		"ActiveOrgNav": "teams",
118
+		"Team":         team,
119
+		"Members":      members,
120
+		"Repos":        repos,
121
+		"IsOwner":      isOwner,
120122
 	}); err != nil {
121123
 		h.d.Logger.ErrorContext(r.Context(), "orgs: render", "tpl", "orgs/team_view", "error", err)
122124
 	}
internal/web/handlers/profile/org_profile.gomodified
@@ -117,6 +117,7 @@ func (h *Handlers) serveOrgProfile(w http.ResponseWriter, r *http.Request, orgID
117117
 		"OGImage":          avatarURL,
118118
 		"Org":              org,
119119
 		"AvatarURL":        avatarURL,
120
+		"ActiveOrgNav":     "overview",
120121
 		"WebsiteSafe":      safeWebsite(org.Website),
121122
 		"Repos":            repoRows,
122123
 		"PinnedRepos":      pinnedRepos,
internal/web/static/css/shithub.cssmodified
@@ -104,39 +104,113 @@ code {
104104
 }
105105
 
106106
 .shithub-nav {
107
-  display: flex;
108
-  align-items: center;
109
-  gap: 1.5rem;
110
-  padding: 0.75rem 1.25rem;
107
+  display: block;
111108
   background: var(--canvas-subtle);
112109
   border-bottom: 1px solid var(--border-default);
113110
 }
114111
 
112
+.shithub-nav-global {
113
+  display: flex;
114
+  align-items: center;
115
+  flex-wrap: wrap;
116
+  gap: 0.75rem;
117
+  min-height: 64px;
118
+  padding: 0.75rem 1rem;
119
+}
120
+
121
+.shithub-nav.has-context .shithub-nav-global {
122
+  min-height: 56px;
123
+  padding-bottom: 0.35rem;
124
+}
125
+
126
+.shithub-nav-context {
127
+  display: flex;
128
+  align-items: center;
129
+  gap: 0.55rem;
130
+  min-width: 0;
131
+}
132
+
133
+.shithub-nav-menu {
134
+  display: inline-flex;
135
+  align-items: center;
136
+  justify-content: center;
137
+  flex: 0 0 auto;
138
+  width: 32px;
139
+  height: 32px;
140
+  padding: 0;
141
+  border: 1px solid var(--border-default);
142
+  border-radius: 6px;
143
+  color: var(--fg-default);
144
+  background: transparent;
145
+  cursor: pointer;
146
+}
147
+.shithub-nav-menu:hover { background: var(--canvas-inset); }
148
+
115149
 .shithub-nav-brand {
116150
   display: flex;
117151
   align-items: center;
152
+  justify-content: center;
118153
   gap: 0.5rem;
154
+  min-height: 32px;
119155
   color: var(--fg-default);
120156
   font-weight: 600;
121
-  letter-spacing: -0.01em;
122157
 }
123158
 .shithub-nav-brand:hover { text-decoration: none; }
124159
 .shithub-nav-brand svg { color: var(--shithub-mark); }
160
+.shithub-nav.has-context .shithub-nav-brand-word { display: none; }
161
+
162
+.shithub-nav-breadcrumb {
163
+  display: inline-flex;
164
+  align-items: center;
165
+  gap: 0.45rem;
166
+  min-width: 0;
167
+  font-size: 0.95rem;
168
+  font-weight: 600;
169
+  white-space: nowrap;
170
+}
171
+.shithub-nav-breadcrumb a {
172
+  color: var(--fg-default);
173
+}
174
+.shithub-nav-breadcrumb .is-strong {
175
+  font-weight: 700;
176
+}
177
+.shithub-nav-breadcrumb span {
178
+  color: var(--fg-muted);
179
+}
125180
 
126181
 .shithub-nav-links {
127182
   display: flex;
128183
   gap: 1rem;
129
-  flex: 1;
184
+  flex: 0 0 auto;
130185
 }
131186
 .shithub-nav-links a {
132187
   color: var(--fg-default);
133188
   font-size: 0.9rem;
134189
 }
190
+.shithub-nav:not(.has-context) .shithub-nav-links { flex: 1; }
191
+.shithub-nav.has-context .shithub-nav-links { display: none; }
135192
 
136193
 .shithub-nav-actions {
137194
   display: flex;
138195
   gap: 0.5rem;
139196
   align-items: center;
197
+  flex-shrink: 0;
198
+}
199
+.shithub-nav-new {
200
+  display: inline-flex;
201
+  align-items: center;
202
+  gap: 0.35rem;
203
+}
204
+.shithub-nav-local {
205
+  padding: 0 1rem;
206
+  overflow-x: auto;
207
+  overscroll-behavior-x: contain;
208
+}
209
+.shithub-nav-local .shithub-repo-subnav,
210
+.shithub-nav-local .shithub-org-nav {
211
+  margin: 0;
212
+  padding: 0;
213
+  border-bottom: 0;
140214
 }
141215
 
142216
 /* User-menu dropdown — uses native <details>/<summary> so it works without JS. */
@@ -4944,6 +5018,12 @@ button.shithub-repo-action {
49445018
   max-width: 32rem;
49455019
   margin: 0 1rem;
49465020
 }
5021
+.shithub-nav.has-context .shithub-nav-search {
5022
+  flex: 0 1 22rem;
5023
+  max-width: 22rem;
5024
+  margin-left: auto;
5025
+  margin-right: 0.25rem;
5026
+}
49475027
 .shithub-nav-search-icon {
49485028
   position: absolute;
49495029
   left: 0.65rem;
internal/web/templates/_nav.htmlmodified
@@ -1,24 +1,39 @@
11
 {{ define "nav" -}}
2
-<header class="shithub-nav" role="banner">
3
-  <a href="/" class="shithub-nav-brand" aria-label="shithub home">
4
-    {{ octicon "shithub" }}
5
-    <span>shithub</span>
6
-  </a>
7
-  <form action="/search" method="get" class="shithub-nav-search" role="search" data-search-root>
8
-    <span class="shithub-nav-search-icon">{{ octicon "search" }}</span>
9
-    <input type="text" name="q"{{ with .GlobalSearchQuery }} value="{{ . }}"{{ end }} placeholder="Type / to search" aria-label="Search" autocomplete="off" aria-haspopup="listbox" aria-expanded="false" aria-controls="global-search-suggestions" data-search-input>
10
-    <span class="shithub-nav-search-key" aria-hidden="true">/</span>
11
-    <input type="hidden" name="type" value="repositories">
12
-    <div id="global-search-suggestions" class="shithub-nav-search-popover" data-search-results hidden></div>
13
-  </form>
14
-  <nav class="shithub-nav-links" aria-label="Primary">
15
-    <a href="/explore">Explore</a>
16
-    <a href="/about">About</a>
17
-  </nav>
18
-  <div class="shithub-nav-actions">
2
+<header class="shithub-nav{{ if .Repo }} has-context{{ else if .Org }} has-context{{ end }}" role="banner">
3
+  <div class="shithub-nav-global">
4
+    <div class="shithub-nav-context">
5
+      <button type="button" class="shithub-nav-menu" aria-label="Open navigation menu">{{ octicon "three-bars" }}</button>
6
+      <a href="/" class="shithub-nav-brand" aria-label="shithub home">
7
+        {{ octicon "shithub" }}
8
+        <span class="shithub-nav-brand-word">shithub</span>
9
+      </a>
10
+      {{ if .Repo }}
11
+      <nav class="shithub-nav-breadcrumb" aria-label="Repository">
12
+        <a href="/{{ .Owner }}">{{ .Owner }}</a>
13
+        <span aria-hidden="true">/</span>
14
+        <a href="/{{ .Owner }}/{{ .Repo.Name }}" class="is-strong">{{ .Repo.Name }}</a>
15
+      </nav>
16
+      {{ else if .Org }}
17
+      <nav class="shithub-nav-breadcrumb" aria-label="Organization">
18
+        <a href="/{{ .Org.Slug }}" class="is-strong">{{ .Org.Slug }}</a>
19
+      </nav>
20
+      {{ end }}
21
+    </div>
22
+    <form action="/search" method="get" class="shithub-nav-search" role="search" data-search-root>
23
+      <span class="shithub-nav-search-icon">{{ octicon "search" }}</span>
24
+      <input type="text" name="q"{{ with .GlobalSearchQuery }} value="{{ . }}"{{ end }} placeholder="Type / to search" aria-label="Search" autocomplete="off" aria-haspopup="listbox" aria-expanded="false" aria-controls="global-search-suggestions" data-search-input>
25
+      <span class="shithub-nav-search-key" aria-hidden="true">/</span>
26
+      <input type="hidden" name="type" value="repositories">
27
+      <div id="global-search-suggestions" class="shithub-nav-search-popover" data-search-results hidden></div>
28
+    </form>
29
+    <nav class="shithub-nav-links" aria-label="Primary">
30
+      <a href="/explore">Explore</a>
31
+      <a href="/about">About</a>
32
+    </nav>
33
+    <div class="shithub-nav-actions">
1934
   {{- if .Viewer.ID }}
2035
     <a href="/notifications" class="shithub-button shithub-button-ghost" title="Notifications" aria-label="Notifications">{{ octicon "bell" }}</a>
21
-    <a href="/new" class="shithub-button shithub-button-ghost" title="New repository">+ New</a>
36
+    <a href="/new" class="shithub-button shithub-button-ghost shithub-nav-new" title="New repository">{{ octicon "plus" }} <span class="shithub-nav-new-label">New</span></a>
2237
     <details class="shithub-user-menu">
2338
       <summary aria-label="User menu" aria-haspopup="menu">
2439
         <img src="/avatars/{{ .Viewer.Username }}" alt="" class="shithub-user-menu-avatar" width="24" height="24">
@@ -50,9 +65,6 @@
5065
         </button>
5166
         <div class="shithub-user-menu-divider" role="separator"></div>
5267
         <a role="menuitem" class="shithub-user-menu-item" href="/settings/profile">{{ octicon "gear" }} <span>Settings</span></a>
53
-        <button type="button" role="menuitem" class="shithub-user-menu-item" disabled>
54
-          {{ octicon "copilot" }} <span>Copilot settings</span>
55
-        </button>
5668
         <button type="button" role="menuitem" class="shithub-user-menu-item" disabled>
5769
           {{ octicon "beaker" }} <span>Feature preview</span>
5870
         </button>
@@ -74,6 +86,16 @@
7486
     <a href="/login" class="shithub-button shithub-button-ghost">Sign in</a>
7587
     <a href="/signup" class="shithub-button shithub-button-primary">Sign up</a>
7688
   {{- end }}
89
+    </div>
90
+  </div>
91
+  {{ if .Repo }}
92
+  <div class="shithub-nav-local">
93
+    {{ template "repo-subnav" . }}
94
+  </div>
95
+  {{ else if .Org }}
96
+  <div class="shithub-nav-local">
97
+    {{ template "org-subnav" . }}
7798
   </div>
99
+  {{ end }}
78100
 </header>
79101
 {{- end }}
internal/web/templates/_org_subnav.htmladded
@@ -0,0 +1,27 @@
1
+{{ define "org-subnav" -}}
2
+<nav class="shithub-org-nav" aria-label="Organization">
3
+  <a href="/{{ .Org.Slug }}" class="shithub-org-nav-item{{ if eq .ActiveOrgNav "overview" }} is-active{{ end }}">
4
+    {{ octicon "home" }} Overview
5
+  </a>
6
+  <a href="/{{ .Org.Slug }}#org-repositories" class="shithub-org-nav-item{{ if eq .ActiveOrgNav "repositories" }} is-active{{ end }}">
7
+    {{ octicon "repo" }} Repositories
8
+    {{ with .RepoCount }}<span class="shithub-tab-count">{{ . }}</span>{{ end }}
9
+  </a>
10
+  <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "table" }} Projects</span>
11
+  <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "package" }} Packages</span>
12
+  <a href="/{{ .Org.Slug }}/teams" class="shithub-org-nav-item{{ if eq .ActiveOrgNav "teams" }} is-active{{ end }}">
13
+    {{ octicon "people" }} Teams
14
+  </a>
15
+  <a href="/{{ .Org.Slug }}/people" class="shithub-org-nav-item{{ if eq .ActiveOrgNav "people" }} is-active{{ end }}">
16
+    {{ octicon "person" }} People
17
+    {{ with .MemberCount }}<span class="shithub-tab-count">{{ . }}</span>{{ end }}
18
+  </a>
19
+  <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "shield-check" }} Security and quality</span>
20
+  <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "pulse" }} Insights</span>
21
+  {{ if .IsOwner }}
22
+  <a href="/organizations/{{ .Org.Slug }}/settings/profile" class="shithub-org-nav-item{{ if eq .ActiveOrgNav "settings" }} is-active{{ end }}">
23
+    {{ octicon "gear" }} Settings
24
+  </a>
25
+  {{ end }}
26
+</nav>
27
+{{- end }}
internal/web/templates/_repo_header.htmlmodified
@@ -3,8 +3,6 @@
33
   <div class="shithub-repo-header-inner">
44
     <h1 class="shithub-repo-page-title">
55
       <span class="shithub-repo-title-icon">{{ octicon "repo" }}</span>
6
-      <a href="/{{ .Owner }}">{{ .Owner }}</a>
7
-      <span class="shithub-code-sep">/</span>
86
       <a href="/{{ .Owner }}/{{ .Repo.Name }}" class="shithub-repo-name">{{ .Repo.Name }}</a>
97
       {{ if eq (printf "%s" .Repo.Visibility) "private" }}<span class="shithub-pill shithub-pill-private">Private</span>{{ else }}<span class="shithub-pill">Public</span>{{ end }}
108
     </h1>
@@ -77,6 +75,5 @@
7775
       {{ end }}
7876
     </div>
7977
   </div>
80
-  {{ template "repo-subnav" . }}
8178
 </header>
8279
 {{- end }}
internal/web/templates/_repo_subnav.htmlmodified
@@ -5,11 +5,11 @@
55
   </a>
66
   <a href="/{{ .Owner }}/{{ .Repo.Name }}/issues" class="shithub-repo-subnav-tab{{ if eq .ActiveSubnav "issues" }} is-active{{ end }}">
77
     {{ octicon "issue-opened" }} Issues
8
-    {{ with .RepoCounts.Issues }}<span class="shithub-tab-count">{{ . }}</span>{{ end }}
8
+    {{ with .RepoCounts }}{{ with .Issues }}<span class="shithub-tab-count">{{ . }}</span>{{ end }}{{ end }}
99
   </a>
1010
   <a href="/{{ .Owner }}/{{ .Repo.Name }}/pulls" class="shithub-repo-subnav-tab{{ if eq .ActiveSubnav "pulls" }} is-active{{ end }}">
1111
     {{ octicon "git-pull-request" }} Pull requests
12
-    {{ with .RepoCounts.Pulls }}<span class="shithub-tab-count">{{ . }}</span>{{ end }}
12
+    {{ with .RepoCounts }}{{ with .Pulls }}<span class="shithub-tab-count">{{ . }}</span>{{ end }}{{ end }}
1313
   </a>
1414
   <a href="/{{ .Owner }}/{{ .Repo.Name }}/actions" class="shithub-repo-subnav-tab{{ if eq .ActiveSubnav "actions" }} is-active{{ end }}">
1515
     {{ octicon "play" }} Actions
internal/web/templates/orgs/people.htmlmodified
@@ -7,17 +7,6 @@
77
         <span>{{ if .Org.DisplayName }}{{ .Org.DisplayName }}{{ else }}{{ .Org.Slug }}{{ end }}</span>
88
       </a>
99
     </div>
10
-    <nav class="shithub-org-nav" aria-label="Organization">
11
-      <a href="/{{ .Org.Slug }}" class="shithub-org-nav-item">{{ octicon "home" }} Overview</a>
12
-      <a href="/{{ .Org.Slug }}#org-repositories" class="shithub-org-nav-item">{{ octicon "repo" }} Repositories</a>
13
-      <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "table" }} Projects</span>
14
-      <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "package" }} Packages</span>
15
-      <a href="/{{ .Org.Slug }}/teams" class="shithub-org-nav-item">{{ octicon "people" }} Teams</a>
16
-      <a href="/{{ .Org.Slug }}/people" class="shithub-org-nav-item is-active" aria-current="page">{{ octicon "person" }} People <span class="shithub-tab-count">{{ .MemberCount }}</span></a>
17
-      <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "shield-check" }} Security and quality</span>
18
-      <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "pulse" }} Insights</span>
19
-      {{ if .IsOwner }}<a href="/organizations/{{ .Org.Slug }}/settings/profile" class="shithub-org-nav-item">{{ octicon "gear" }} Settings</a>{{ end }}
20
-    </nav>
2110
   </header>
2211
 
2312
   <div class="shithub-org-people-layout">
internal/web/templates/orgs/profile.htmlmodified
@@ -18,18 +18,6 @@
1818
     </div>
1919
   </header>
2020
 
21
-  <nav class="shithub-org-nav" aria-label="Organization">
22
-    <a href="/{{ .Org.Slug }}" class="shithub-org-nav-item is-active">{{ octicon "home" }} Overview</a>
23
-    <a href="#org-repositories" class="shithub-org-nav-item">{{ octicon "repo" }} Repositories <span class="shithub-tab-count">{{ .RepoCount }}</span></a>
24
-    <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "table" }} Projects</span>
25
-    <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "package" }} Packages</span>
26
-    <a href="/{{ .Org.Slug }}/teams" class="shithub-org-nav-item">{{ octicon "people" }} Teams</a>
27
-    <a href="/{{ .Org.Slug }}/people" class="shithub-org-nav-item">{{ octicon "person" }} People <span class="shithub-tab-count">{{ .MemberCount }}</span></a>
28
-    <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "shield-check" }} Security and quality</span>
29
-    <span class="shithub-org-nav-item is-disabled" aria-disabled="true">{{ octicon "pulse" }} Insights</span>
30
-    {{ if .IsOwner }}<a href="/organizations/{{ .Org.Slug }}/settings/profile" class="shithub-org-nav-item">{{ octicon "gear" }} Settings</a>{{ end }}
31
-  </nav>
32
-
3321
   {{ if .Org.SuspendedAt.Valid }}
3422
   <p class="shithub-flash shithub-flash-error" role="alert">This organization is suspended. Pushes are blocked; reads continue.</p>
3523
   {{ end }}
internal/web/templates/repo/blob.htmlmodified
@@ -1,14 +1,6 @@
11
 {{ define "page" -}}
22
 <section class="shithub-repo-page">
3
-  <header class="shithub-repo-page-head">
4
-    <h1 class="shithub-repo-page-title">
5
-      <a href="/{{ .Owner }}">{{ .Owner }}</a>
6
-      <span class="shithub-code-sep">/</span>
7
-      <a href="/{{ .Owner }}/{{ .Repo.Name }}">{{ .Repo.Name }}</a>
8
-      {{ if eq (printf "%s" .Repo.Visibility) "private" }}<span class="shithub-pill shithub-pill-private">private</span>{{ else }}<span class="shithub-pill">public</span>{{ end }}
9
-    </h1>
10
-  </header>
11
-  {{ template "repo-subnav" . }}
3
+  {{ template "repo-header" . }}
124
 <section class="shithub-blob">
135
   <header class="shithub-code-head">
146
     <nav class="shithub-code-crumbs" aria-label="Breadcrumb">
internal/web/templates/repo/pulls_list.htmlmodified
@@ -1,14 +1,6 @@
11
 {{ define "page" -}}
22
 <section class="shithub-repo-page">
3
-  <header class="shithub-repo-page-head">
4
-    <h1 class="shithub-repo-page-title">
5
-      <a href="/{{ .Owner }}">{{ .Owner }}</a>
6
-      <span class="shithub-code-sep">/</span>
7
-      <a href="/{{ .Owner }}/{{ .Repo.Name }}">{{ .Repo.Name }}</a>
8
-      {{ if eq (printf "%s" .Repo.Visibility) "private" }}<span class="shithub-pill shithub-pill-private">private</span>{{ else }}<span class="shithub-pill">public</span>{{ end }}
9
-    </h1>
10
-  </header>
11
-  {{ template "repo-subnav" . }}
3
+  {{ template "repo-header" . }}
124
 <section class="shithub-pulls">
135
   <header class="shithub-issues-head">
146
     <h1>Pull requests</h1>