Browse Source

update repo list page within user profile

tags/v1.21.7
avadesian 4 years ago
parent
commit
508bcdead8
5 changed files with 55 additions and 86 deletions
  1. +4
    -0
      modules/structs/repo.go
  2. +10
    -4
      routers/api/v1/repo/repo.go
  3. +30
    -79
      templates/user/dashboard/repo_list_dashboard.tmpl
  4. +1
    -2
      templates/user/profile.tmpl
  5. +10
    -1
      web_src/js/index.js

+ 4
- 0
modules/structs/repo.go View File

@@ -5,6 +5,7 @@
package structs package structs


import ( import (
"html/template"
"time" "time"
) )


@@ -75,6 +76,7 @@ type Repository struct {
Created time.Time `json:"created_at"` Created time.Time `json:"created_at"`
// swagger:strfmt date-time // swagger:strfmt date-time
Updated time.Time `json:"updated_at"` Updated time.Time `json:"updated_at"`
TimeSinceUnixUpdatedHtml template.HTML `json:"timeSinceUnixUpdatedHtml"`
Permissions *Permission `json:"permissions,omitempty"` Permissions *Permission `json:"permissions,omitempty"`
HasIssues bool `json:"has_issues"` HasIssues bool `json:"has_issues"`
InternalTracker *InternalTracker `json:"internal_tracker,omitempty"` InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
@@ -88,6 +90,8 @@ type Repository struct {
AllowRebaseMerge bool `json:"allow_rebase_explicit"` AllowRebaseMerge bool `json:"allow_rebase_explicit"`
AllowSquash bool `json:"allow_squash_merge"` AllowSquash bool `json:"allow_squash_merge"`
AvatarURL string `json:"avatar_url"` AvatarURL string `json:"avatar_url"`
PrimaryLanguage string `json:"primaryLanguage"`
PrimaryLanguageColor string `json:"primaryLanguageColor"`
} }


// CreateRepoOption options when creating repository // CreateRepoOption options when creating repository


+ 10
- 4
routers/api/v1/repo/repo.go View File

@@ -6,20 +6,20 @@
package repo package repo


import ( import (
"fmt"
"net/http"
"strings"

"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation" "code.gitea.io/gitea/modules/validation"
"code.gitea.io/gitea/routers/api/v1/utils" "code.gitea.io/gitea/routers/api/v1/utils"
repo_service "code.gitea.io/gitea/services/repository" repo_service "code.gitea.io/gitea/services/repository"
"fmt"
"net/http"
"strings"
) )


var searchOrderByMap = map[string]map[string]models.SearchOrderBy{ var searchOrderByMap = map[string]map[string]models.SearchOrderBy{
@@ -199,6 +199,7 @@ func Search(ctx *context.APIContext) {
} }


results := make([]*api.Repository, len(repos)) results := make([]*api.Repository, len(repos))

for i, repo := range repos { for i, repo := range repos {
if err = repo.GetOwner(); err != nil { if err = repo.GetOwner(); err != nil {
ctx.JSON(http.StatusInternalServerError, api.SearchError{ ctx.JSON(http.StatusInternalServerError, api.SearchError{
@@ -215,6 +216,11 @@ func Search(ctx *context.APIContext) {
}) })
} }
results[i] = repo.APIFormat(accessMode) results[i] = repo.APIFormat(accessMode)
results[i].TimeSinceUnixUpdatedHtml = timeutil.TimeSinceUnix(repo.UpdatedUnix,ctx.Language())
if repo.PrimaryLanguage != nil {
results[i].PrimaryLanguage = repo.PrimaryLanguage.Language
results[i].PrimaryLanguageColor = repo.PrimaryLanguage.Color
}
} }


ctx.SetLinkHeader(int(count), opts.PageSize) ctx.SetLinkHeader(int(count), opts.PageSize)


+ 30
- 79
templates/user/dashboard/repo_list_dashboard.tmpl View File

@@ -4,7 +4,7 @@
<div class="ui clearing divider"></div> <div class="ui clearing divider"></div>
<div id="app" class="six wide column"> <div id="app" class="six wide column">
<repo-search <repo-search
:search-limit="searchLimit"
:search-limit=100
:suburl="suburl" :suburl="suburl"
:uid="uid" :uid="uid"
:more-repos-link="'{{.ContextUser.HomeLink}}'" :more-repos-link="'{{.ContextUser.HomeLink}}'"
@@ -90,90 +90,41 @@
</div> </div>
<div class="ui attached table segment"> <div class="ui attached table segment">
<ul class="repo-owner-name-list"> <ul class="repo-owner-name-list">
<div class="ui repository list">
{{range .Repos}}
<div class="item">
<div class="ui header">
{{if .RelAvatarLink}}
<img class="ui avatar image" src="{{.RelAvatarLink}}">
{{end}}
<a class="name" href="{{.Link}}">
{{if or $.PageIsExplore $.PageIsProfileStarList }}{{if .Owner}}{{.Owner.Name}} / {{end}}{{end}}{{.Name}}
{{if .IsArchived}}<i class="archive icon archived-icon"></i>{{end}}
</a>
{{if .IsPrivate}}
<span class="middle text gold">{{svg "octicon-lock" 16}}</span>
{{else if .IsFork}}
<span class="middle">{{svg "octicon-repo-forked" 16}}</span>
{{else if .IsMirror}}
<span class="middle">{{svg "octicon-repo-clone" 16}}</span>
{{else if .Owner}}
{{if .Owner.Visibility.IsPrivate}}
<span class="text gold">{{svg "octicon-lock" 16}}</span>
{{end}}
{{end}}
<div class="ui right metas">
{{if .PrimaryLanguage }}
<span class="text grey"><i class="color-icon" style="background-color: {{.PrimaryLanguage.Color}}"></i>{{ .PrimaryLanguage.Language }}</span>
{{end}}
<span class="text grey">{{svg "octicon-star" 16}} {{.NumStars}}</span>
<span class="text grey">{{svg "octicon-git-branch" 16}} {{.NumForks}}</span>
</div>
</div>
<div class="description">
{{if .DescriptionHTML}}<p class="has-emoji">{{.DescriptionHTML}}</p>{{end}}
{{if .Topics }}
<div class="ui tags">
{{range .Topics}}
{{if ne . "" }}<a href="{{AppSubUrl}}/explore/repos?q={{.}}&topic=1"><div class="ui small label topic">{{.}}</div></a>{{end}}
{{end}}
</div>
{{end}}
<p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSinceUnix .UpdatedUnix $.i18n.Lang}}</p>
<div class="ui repository list" v-for="repo in repos">
<div class="item">
<div class="ui header">
{{if .RelAvatarLink}}
<img class="ui avatar image" src="{{.RelAvatarLink}}">
{{end}}
<a class="name" :href="repo.html_url">
${repo.full_name}
<i v-if="repo.archived" class="archive icon archived-icon"></i>
</a>
<span v-if="repo.private" class="middle text gold">{{svg "octicon-lock" 16}}</span>
<span v-if="repo.fork" class="middle">{{svg "octicon-repo-forked" 16}}</span>
<span v-if="repo.mirror" class="middle">{{svg "octicon-repo-clone" 16}}</span>
<div class="ui right metas">
<span v-if="repo.primaryLanguage" class="text grey">
<i class="color-icon" v-bind:style="{backgroundColor: repo.primaryLanguageColor}"></i>
${repo.primaryLanguage}
</span>
<span class="text grey">{{svg "octicon-star" 16}} ${repo.stars_count}</span>
<span class="text grey">{{svg "octicon-git-branch" 16}} ${repo.forks_count}</span>
</div> </div>
</div> </div>
{{else}}
<div>
{{$.i18n.Tr "explore.repo_no_results"}}
</div>
{{end}}
</div>
{# <li v-for="repo in repos" :class="{'private': repo.private}" v-show="showRepo(repo)">
<a :href="suburl + '/' + repo.full_name">
<svg :class="'svg ' + repoClass(repo)" width="16" height="16" aria-hidden="true"><use :xlink:href="'#' + repoClass(repo)" /></svg>
<strong class="text truncate item-name">${repo.full_name}</strong>
<i v-if="repo.archived" class="archive icon archived-icon"></i>
<span class="ui right text light grey">
${repo.stars_count} <span class="rear">{{svg "octicon-star" 16}}</span>
</span>
</a>
</li>
<li v-if="showMoreReposLink">
<div class="center">
<div class="ui borderless pagination menu narrow">
<a class="item navigation" :class="{'disabled': page === 1}"
@click="changePage(1)" title="{{$.i18n.Tr "admin.first_page"}}">
<i class="angle double left icon"></i>
</a>
<a class="item navigation" :class="{'disabled': page === 1}"
@click="changePage(page - 1)" title="{{$.i18n.Tr "repo.issues.previous"}}">
<i class="left arrow icon"></i>
</a>
<a class="active item">${page}</a>
<a class="item navigation" :class="{'disabled': page === finalPage}"
@click="changePage(page + 1)" title="{{$.i18n.Tr "repo.issues.next"}}">
<i class="icon right arrow"></i>
</a>
<a class="item navigation" :class="{'disabled': page === finalPage}"
@click="changePage(finalPage)" title="{{$.i18n.Tr "admin.last_page"}}">
<i class="angle double right icon"></i>
</a>
<div class="description">
<p v-if="repo.description" class="has-emoji">${repo.description}</p>
<p class="time" >{{$.i18n.Tr "org.repo_updated"}}<span v-html="repo.timeSinceUnixUpdatedHtml"></span>
</p>
</div> </div>
</div> </div>
</li> #}
</div>
<div v-if="repos.length==0">
{{$.i18n.Tr "explore.repo_no_results"}}
</div>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</repo-search> </repo-search>
</div>
</div>

+ 1
- 2
templates/user/profile.tmpl View File

@@ -141,8 +141,7 @@
{{template "explore/dataset_list" .}} {{template "explore/dataset_list" .}}
{{template "base/paginate" .}} {{template "base/paginate" .}}
{{else}} {{else}}
{{template "user/dashboard/repo_list_dashboard" .}}
{{template "base/paginate" .}}
{{template "user/dashboard/repo_list_dashboard" .}}
{{end}} {{end}}
</div> </div>
</div> </div>


+ 10
- 1
web_src/js/index.js View File

@@ -3324,7 +3324,16 @@ function initVueComponents() {
self.$refs.search.focus(); self.$refs.search.focus();
}); });
}, },

updated: function () {
$('.time-since').each(function () {
$(this)
.addClass('poping up')
.attr('data-content', $(this).attr('title'))
.attr('data-variation', 'inverted tiny')
.attr('title', '');
});
$('.poping.up').popup();
},
methods: { methods: {
changeTab(t) { changeTab(t) {
this.tab = t; this.tab = t;


Loading…
Cancel
Save