Skip to content

Commit 972b3bf

Browse files
mrsdizziezeripath
andauthored
Split dashboard elements into separate template files (#10885)
* Split dashboard elements into separate template files No code change just Move Heatmap and Repo list/search into separate template files (like feeds and navbar already are). This will let a user more easily replace dashboard.tmpl without regularly becoming out of sync with fixes or changes to the actual code. Fixes #10870 * End file with an empty line Co-authored-by: zeripath <[email protected]>
1 parent bdfe4e2 commit 972b3bf

File tree

3 files changed

+119
-117
lines changed

3 files changed

+119
-117
lines changed

templates/user/dashboard/dashboard.tmpl

Lines changed: 2 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -6,126 +6,11 @@
66
<div class="ui mobile reversed stackable grid">
77
<div class="ui container ten wide column">
88
{{if .EnableHeatmap}}
9-
<div id="user-heatmap" style="padding-right: 40px">
10-
<activity-heatmap :locale="locale" :suburl="suburl" :user="heatmapUser">
11-
<div slot="loading">
12-
<div class="ui active centered inline indeterminate text loader" id="loading-heatmap">{{.i18n.Tr "user.heatmap.loading"}}</div>
13-
</div>
14-
</activity-heatmap>
15-
<div class="ui divider"></div>
16-
</div>
9+
{{template "user/dashboard/heatmap" .}}
1710
{{end}}
1811
{{template "user/dashboard/feeds" .}}
1912
</div>
20-
<div id="app" class="six wide column">
21-
<repo-search
22-
:search-limit="searchLimit"
23-
:suburl="suburl"
24-
:uid="uid"
25-
:more-repos-link="'{{.ContextUser.HomeLink}}'"
26-
{{if not .ContextUser.IsOrganization}}
27-
:organizations="[
28-
{{range .ContextUser.Orgs}}
29-
{name: '{{.Name}}', num_repos: '{{.NumRepos}}'},
30-
{{end}}
31-
]"
32-
:is-organization="false"
33-
:organizations-total-count="{{.ContextUser.GetOrganizationCount}}"
34-
:can-create-organization="{{.SignedUser.CanCreateOrganization}}"
35-
{{end}}
36-
inline-template
37-
v-cloak
38-
>
39-
<div>
40-
<div v-if="!isOrganization" class="ui two item tabable menu">
41-
<a :class="{item: true, active: tab === 'repos'}" @click="changeTab('repos')">{{.i18n.Tr "repository"}}</a>
42-
<a :class="{item: true, active: tab === 'organizations'}" @click="changeTab('organizations')">{{.i18n.Tr "organization"}}</a>
43-
</div>
44-
<div v-show="tab === 'repos'" class="ui tab active list dashboard-repos">
45-
<h4 class="ui top attached header">
46-
{{.i18n.Tr "home.my_repos"}} <span class="ui grey label">${reposTotalCount}</span>
47-
{{if or (not .ContextUser.IsOrganization) .IsOrganizationOwner}}
48-
<div class="ui right">
49-
<a class="poping up" :href="suburl + '/repo/create{{if .ContextUser.IsOrganization}}?org={{.ContextUser.ID}}{{end}}'" data-content="{{.i18n.Tr "new_repo"}}" data-variation="tiny inverted" data-position="left center">
50-
<i class="plus icon"></i>
51-
<span class="sr-only">{{.i18n.Tr "new_repo"}}</span>
52-
</a>
53-
</div>
54-
{{end}}
55-
</h4>
56-
<div class="ui attached secondary segment repos-search">
57-
<div class="ui fluid icon input" :class="{loading: isLoading}">
58-
<input @input="searchRepos(reposFilter)" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}">
59-
<i class="search icon"></i>
60-
</div>
61-
<div class="ui secondary tiny pointing borderless menu center aligned grid repos-filter">
62-
<a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')">
63-
{{.i18n.Tr "all"}}
64-
<div v-show="reposFilter === 'all'" class="ui circular mini grey label">${repoTypeCount}</div>
65-
</a>
66-
<a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')">
67-
{{.i18n.Tr "sources"}}
68-
<div v-show="reposFilter === 'sources'" class="ui circular mini grey label">${repoTypeCount}</div>
69-
</a>
70-
<a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')">
71-
{{.i18n.Tr "forks"}}
72-
<div v-show="reposFilter === 'forks'" class="ui circular mini grey label">${repoTypeCount}</div>
73-
</a>
74-
<a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')">
75-
{{.i18n.Tr "mirrors"}}
76-
<div v-show="reposFilter === 'mirrors'" class="ui circular mini grey label">${repoTypeCount}</div>
77-
</a>
78-
<a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')">
79-
{{.i18n.Tr "collaborative"}}
80-
<div v-show="reposFilter === 'collaborative'" class="ui circular mini grey label">${repoTypeCount}</div>
81-
</a>
82-
</div>
83-
</div>
84-
<div class="ui attached table segment">
85-
<ul class="repo-owner-name-list">
86-
<li v-for="repo in repos" :class="{'private': repo.private}" v-show="showRepo(repo, reposFilter)">
87-
<a :href="suburl + '/' + repo.full_name">
88-
<svg :class="'svg ' + repoClass(repo)" width="16" height="16" aria-hidden="true"><use :xlink:href="'#' + repoClass(repo)" /></svg>
89-
<strong class="text truncate item-name">${repo.full_name}</strong>
90-
<i v-if="repo.archived" class="archive icon archived-icon"></i>
91-
<span class="ui right text light grey">
92-
${repo.stars_count} <span class="rear">{{svg "octicon-star" 16}}</span>
93-
</span>
94-
</a>
95-
</li>
96-
<li v-if="showMoreReposLink">
97-
<a :href="moreReposLink">{{.i18n.Tr "home.show_more_repos"}}</a>
98-
</li>
99-
</ul>
100-
</div>
101-
</div>
102-
<div v-if="!isOrganization" v-show="tab === 'organizations'" class="ui tab active list">
103-
<h4 class="ui top attached header">
104-
{{.i18n.Tr "home.my_orgs"}} <span class="ui grey label">${organizationsTotalCount}</span>
105-
<div v-if="canCreateOrganization" class="ui right">
106-
<a class="poping up" :href="suburl + '/org/create'" data-content="{{.i18n.Tr "new_org"}}" data-variation="tiny inverted" data-position="left center">
107-
<i class="plus icon"></i>
108-
<span class="sr-only">{{.i18n.Tr "new_org"}}</span>
109-
</a>
110-
</div>
111-
</h4>
112-
<div class="ui attached table segment">
113-
<ul class="repo-owner-name-list">
114-
<li v-for="org in organizations">
115-
<a :href="suburl + '/' + org.name">
116-
{{svg "octicon-organization" 16}}
117-
<strong class="text truncate item-name">${org.name}</strong>
118-
<span class="ui right text light grey">
119-
${org.num_repos} <span class="rear">{{svg "octicon-repo" 16}}</span>
120-
</span>
121-
</a>
122-
</li>
123-
</ul>
124-
</div>
125-
</div>
126-
</div>
127-
</repo-search>
128-
</div>
13+
{{template "user/dashboard/repolist" .}}
12914
</div>
13015
</div>
13116
</div>

templates/user/dashboard/heatmap.tmpl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<div id="user-heatmap" style="padding-right: 40px">
2+
<activity-heatmap :locale="locale" :suburl="suburl" :user="heatmapUser">
3+
<div slot="loading">
4+
<div class="ui active centered inline indeterminate text loader" id="loading-heatmap">{{.i18n.Tr "user.heatmap.loading"}}</div>
5+
</div>
6+
</activity-heatmap>
7+
<div class="ui divider"></div>
8+
</div>
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<div id="app" class="six wide column">
2+
<repo-search
3+
:search-limit="searchLimit"
4+
:suburl="suburl"
5+
:uid="uid"
6+
:more-repos-link="'{{.ContextUser.HomeLink}}'"
7+
{{if not .ContextUser.IsOrganization}}
8+
:organizations="[
9+
{{range .ContextUser.Orgs}}
10+
{name: '{{.Name}}', num_repos: '{{.NumRepos}}'},
11+
{{end}}
12+
]"
13+
:is-organization="false"
14+
:organizations-total-count="{{.ContextUser.GetOrganizationCount}}"
15+
:can-create-organization="{{.SignedUser.CanCreateOrganization}}"
16+
{{end}}
17+
inline-template
18+
v-cloak
19+
>
20+
<div>
21+
<div v-if="!isOrganization" class="ui two item tabable menu">
22+
<a :class="{item: true, active: tab === 'repos'}" @click="changeTab('repos')">{{.i18n.Tr "repository"}}</a>
23+
<a :class="{item: true, active: tab === 'organizations'}" @click="changeTab('organizations')">{{.i18n.Tr "organization"}}</a>
24+
</div>
25+
<div v-show="tab === 'repos'" class="ui tab active list dashboard-repos">
26+
<h4 class="ui top attached header">
27+
{{.i18n.Tr "home.my_repos"}} <span class="ui grey label">${reposTotalCount}</span>
28+
{{if or (not .ContextUser.IsOrganization) .IsOrganizationOwner}}
29+
<div class="ui right">
30+
<a class="poping up" :href="suburl + '/repo/create{{if .ContextUser.IsOrganization}}?org={{.ContextUser.ID}}{{end}}'" data-content="{{.i18n.Tr "new_repo"}}" data-variation="tiny inverted" data-position="left center">
31+
<i class="plus icon"></i>
32+
<span class="sr-only">{{.i18n.Tr "new_repo"}}</span>
33+
</a>
34+
</div>
35+
{{end}}
36+
</h4>
37+
<div class="ui attached secondary segment repos-search">
38+
<div class="ui fluid icon input" :class="{loading: isLoading}">
39+
<input @input="searchRepos(reposFilter)" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}">
40+
<i class="search icon"></i>
41+
</div>
42+
<div class="ui secondary tiny pointing borderless menu center aligned grid repos-filter">
43+
<a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')">
44+
{{.i18n.Tr "all"}}
45+
<div v-show="reposFilter === 'all'" class="ui circular mini grey label">${repoTypeCount}</div>
46+
</a>
47+
<a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')">
48+
{{.i18n.Tr "sources"}}
49+
<div v-show="reposFilter === 'sources'" class="ui circular mini grey label">${repoTypeCount}</div>
50+
</a>
51+
<a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')">
52+
{{.i18n.Tr "forks"}}
53+
<div v-show="reposFilter === 'forks'" class="ui circular mini grey label">${repoTypeCount}</div>
54+
</a>
55+
<a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')">
56+
{{.i18n.Tr "mirrors"}}
57+
<div v-show="reposFilter === 'mirrors'" class="ui circular mini grey label">${repoTypeCount}</div>
58+
</a>
59+
<a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')">
60+
{{.i18n.Tr "collaborative"}}
61+
<div v-show="reposFilter === 'collaborative'" class="ui circular mini grey label">${repoTypeCount}</div>
62+
</a>
63+
</div>
64+
</div>
65+
<div class="ui attached table segment">
66+
<ul class="repo-owner-name-list">
67+
<li v-for="repo in repos" :class="{'private': repo.private}" v-show="showRepo(repo, reposFilter)">
68+
<a :href="suburl + '/' + repo.full_name">
69+
<svg :class="'svg ' + repoClass(repo)" width="16" height="16" aria-hidden="true"><use :xlink:href="'#' + repoClass(repo)" /></svg>
70+
<strong class="text truncate item-name">${repo.full_name}</strong>
71+
<i v-if="repo.archived" class="archive icon archived-icon"></i>
72+
<span class="ui right text light grey">
73+
${repo.stars_count} <span class="rear">{{svg "octicon-star" 16}}</span>
74+
</span>
75+
</a>
76+
</li>
77+
<li v-if="showMoreReposLink">
78+
<a :href="moreReposLink">{{.i18n.Tr "home.show_more_repos"}}</a>
79+
</li>
80+
</ul>
81+
</div>
82+
</div>
83+
<div v-if="!isOrganization" v-show="tab === 'organizations'" class="ui tab active list">
84+
<h4 class="ui top attached header">
85+
{{.i18n.Tr "home.my_orgs"}} <span class="ui grey label">${organizationsTotalCount}</span>
86+
<div v-if="canCreateOrganization" class="ui right">
87+
<a class="poping up" :href="suburl + '/org/create'" data-content="{{.i18n.Tr "new_org"}}" data-variation="tiny inverted" data-position="left center">
88+
<i class="plus icon"></i>
89+
<span class="sr-only">{{.i18n.Tr "new_org"}}</span>
90+
</a>
91+
</div>
92+
</h4>
93+
<div class="ui attached table segment">
94+
<ul class="repo-owner-name-list">
95+
<li v-for="org in organizations">
96+
<a :href="suburl + '/' + org.name">
97+
{{svg "octicon-organization" 16}}
98+
<strong class="text truncate item-name">${org.name}</strong>
99+
<span class="ui right text light grey">
100+
${org.num_repos} <span class="rear">{{svg "octicon-repo" 16}}</span>
101+
</span>
102+
</a>
103+
</li>
104+
</ul>
105+
</div>
106+
</div>
107+
</div>
108+
</repo-search>
109+
</div>

0 commit comments

Comments
 (0)