@@ -3,7 +3,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra | |||
![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true) | |||
##### Current version: 0.8.19 | |||
##### Current version: 0.8.20 | |||
| Web | UI | Preview | | |||
|:-------------:|:-------:|:-------:| |
@@ -17,7 +17,7 @@ import ( | |||
"github.com/gogits/gogs/modules/setting" | |||
) | |||
const APP_VER = "0.8.19.0111" | |||
const APP_VER = "0.8.20.0111" | |||
func init() { | |||
runtime.GOMAXPROCS(runtime.NumCPU()) |
@@ -90,54 +90,66 @@ func (a *Action) AfterSet(colName string, _ xorm.Cell) { | |||
} | |||
} | |||
func (a Action) GetOpType() int { | |||
func (a *Action) GetOpType() int { | |||
return int(a.OpType) | |||
} | |||
func (a Action) GetActUserName() string { | |||
func (a *Action) GetActUserName() string { | |||
return a.ActUserName | |||
} | |||
func (a Action) GetActEmail() string { | |||
func (a *Action) ShortActUserName() string { | |||
return base.EllipsisString(a.ActUserName, 20) | |||
} | |||
func (a *Action) GetActEmail() string { | |||
return a.ActEmail | |||
} | |||
func (a Action) GetRepoUserName() string { | |||
func (a *Action) GetRepoUserName() string { | |||
return a.RepoUserName | |||
} | |||
func (a Action) GetRepoName() string { | |||
func (a *Action) ShortRepoUserName() string { | |||
return base.EllipsisString(a.RepoUserName, 20) | |||
} | |||
func (a *Action) GetRepoName() string { | |||
return a.RepoName | |||
} | |||
func (a Action) GetRepoPath() string { | |||
return path.Join(a.RepoUserName, a.RepoName) | |||
func (a *Action) ShortRepoName() string { | |||
return base.EllipsisString(a.RepoName, 33) | |||
} | |||
func (a *Action) GetRepoPath() string { | |||
return path.Join(a.ShortRepoUserName(), a.ShortRepoName()) | |||
} | |||
func (a Action) GetRepoLink() string { | |||
func (a *Action) GetRepoLink() string { | |||
if len(setting.AppSubUrl) > 0 { | |||
return path.Join(setting.AppSubUrl, a.GetRepoPath()) | |||
} | |||
return "/" + a.GetRepoPath() | |||
} | |||
func (a Action) GetBranch() string { | |||
func (a *Action) GetBranch() string { | |||
return a.RefName | |||
} | |||
func (a Action) GetContent() string { | |||
func (a *Action) GetContent() string { | |||
return a.Content | |||
} | |||
func (a Action) GetCreate() time.Time { | |||
func (a *Action) GetCreate() time.Time { | |||
return a.Created | |||
} | |||
func (a Action) GetIssueInfos() []string { | |||
func (a *Action) GetIssueInfos() []string { | |||
return strings.SplitN(a.Content, "|", 2) | |||
} | |||
func (a Action) GetIssueTitle() string { | |||
func (a *Action) GetIssueTitle() string { | |||
index := com.StrTo(a.GetIssueInfos()[0]).MustInt64() | |||
issue, err := GetIssueByIndex(a.RepoID, index) | |||
if err != nil { | |||
@@ -147,7 +159,7 @@ func (a Action) GetIssueTitle() string { | |||
return issue.Name | |||
} | |||
func (a Action) GetIssueContent() string { | |||
func (a *Action) GetIssueContent() string { | |||
index := com.StrTo(a.GetIssueInfos()[0]).MustInt64() | |||
issue, err := GetIssueByIndex(a.RepoID, index) | |||
if err != nil { |
@@ -429,13 +429,8 @@ func (u *User) DisplayName() string { | |||
return u.Name | |||
} | |||
// ShortName returns shorted user name with given maximum length, | |||
// it adds "..." at the end if user name has more length than maximum. | |||
func (u *User) ShortName(length int) string { | |||
if len(u.Name) < length { | |||
return u.Name | |||
} | |||
return u.Name[:length] + "..." | |||
return base.EllipsisString(u.Name, length) | |||
} | |||
// IsUserExist checks if given user name exist, |
@@ -453,6 +453,15 @@ func Subtract(left interface{}, right interface{}) interface{} { | |||
} | |||
} | |||
// EllipsisString returns a truncated short string, | |||
// it appends '...' in the end of the length of string is too large. | |||
func EllipsisString(str string, length int) string { | |||
if len(str) < length { | |||
return str | |||
} | |||
return str[:length-3] + "..." | |||
} | |||
// StringsToInt64s converts a slice of string to a slice of int64. | |||
func StringsToInt64s(strs []string) []int64 { | |||
ints := make([]int64, len(strs)) |
@@ -3057,6 +3057,18 @@ footer .container .links > *:first-child { | |||
margin-right: 6px; | |||
color: #888; | |||
} | |||
.feeds .list .repo-owner-name-list .item-name { | |||
max-width: 70%; | |||
margin-bottom: -4px; | |||
} | |||
.feeds .list #collaborative-repo-list .owner-and-repo { | |||
max-width: 80%; | |||
margin-bottom: -5px; | |||
} | |||
.feeds .list #collaborative-repo-list .owner-name { | |||
max-width: 120px; | |||
margin-bottom: -5px; | |||
} | |||
.admin { | |||
padding-top: 15px; | |||
padding-bottom: 80px; | |||
@@ -3117,6 +3129,9 @@ footer .container .links > *:first-child { | |||
font-size: 1.5rem; | |||
padding-bottom: 10px; | |||
} | |||
.ui.repository.list .item .ui.header .name { | |||
word-break: break-all; | |||
} | |||
.ui.repository.list .item .ui.header .metas { | |||
color: #888; | |||
font-size: 13px; |
@@ -123,5 +123,23 @@ | |||
} | |||
} | |||
} | |||
.repo-owner-name-list { | |||
.item-name { | |||
max-width: 70%; | |||
margin-bottom: -4px; | |||
} | |||
} | |||
#collaborative-repo-list { | |||
.owner-and-repo { | |||
max-width: 80%; | |||
margin-bottom: -5px; | |||
} | |||
.owner-name { | |||
max-width: 120px; | |||
margin-bottom: -5px; | |||
} | |||
} | |||
} | |||
} |
@@ -15,6 +15,11 @@ | |||
.ui.header { | |||
font-size: 1.5rem; | |||
padding-bottom: 10px; | |||
.name { | |||
word-break: break-all; | |||
} | |||
.metas { | |||
color: #888; | |||
font-size: 13px; |
@@ -1 +1 @@ | |||
0.8.19.0111 | |||
0.8.20.0111 |
@@ -2,7 +2,7 @@ | |||
{{range .Repos}} | |||
<div class="item"> | |||
<div class="ui header"> | |||
<a href="{{AppSubUrl}}/{{if .Owner}}{{.Owner.Name}}{{else if $.Org}}{{$.Org.Name}}{{else}}{{$.Owner.Name}}{{end}}/{{.Name}}">{{if $.PageIsExplore}}{{.Owner.Name}} / {{end}}{{.Name}}</a> | |||
<a class="name" href="{{AppSubUrl}}/{{if .Owner}}{{.Owner.Name}}{{else if $.Org}}{{$.Org.Name}}{{else}}{{$.Owner.Name}}{{end}}/{{.Name}}">{{if $.PageIsExplore}}{{.Owner.Name}} / {{end}}{{.Name}}</a> | |||
{{if .IsPrivate}} | |||
<span class="text gold"><i class="icon octicon octicon-lock"></i></span> | |||
{{else if .IsFork}} |
@@ -22,12 +22,12 @@ | |||
</div> | |||
</h4> | |||
<div class="ui attached table segment"> | |||
<ul> | |||
<ul class="repo-owner-name-list"> | |||
{{range .Repos}} | |||
<li {{if .IsPrivate}}class="private"{{end}}> | |||
<a href="{{AppSubUrl}}/{{$.ContextUser.Name}}/{{.Name}}"> | |||
<i class="icon octicon octicon-{{if .IsPrivate}}lock{{else if .IsFork}}repo-forked{{else if .IsMirror}}repo-clone{{else}}repo{{end}}"></i> | |||
<strong>{{.Name}}</strong> | |||
<strong class="text truncate item-name">{{.Name}}</strong> | |||
<span class="ui right text light grey"> | |||
<i class="octicon octicon-star"></i>{{.NumStars}} | |||
</span> | |||
@@ -42,12 +42,14 @@ | |||
{{.i18n.Tr "home.collaborative_repos"}} <span class="ui grey label">{{.CollaborateCount}}</span> | |||
</h4> | |||
<div class="ui attached table segment"> | |||
<ul> | |||
<ul id="collaborative-repo-list"> | |||
{{range .CollaborativeRepos}} | |||
<li {{if .IsPrivate}}class="private"{{end}}> | |||
<a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}"> | |||
<i class="icon octicon octicon-{{if .IsPrivate}}lock{{else if .IsFork}}repo-forked{{else if .IsMirror}}repo-clone{{else}}repo{{end}}"></i> | |||
{{.Owner.Name}} / <strong>{{.Name}}</strong> | |||
<span class="text truncate owner-and-repo"> | |||
<span class="text truncate owner-name">{{.Owner.Name}}</span> / <strong>{{.Name}}</strong> | |||
</span> | |||
<span class="ui right text light grey"> | |||
<i class="octicon octicon-star"></i>{{.NumStars}} | |||
</span> | |||
@@ -68,12 +70,12 @@ | |||
</div> | |||
</h4> | |||
<div class="ui attached table segment"> | |||
<ul> | |||
<ul class="repo-owner-name-list"> | |||
{{range .ContextUser.Orgs}} | |||
<li> | |||
<a href="{{AppSubUrl}}/{{.Name}}"> | |||
<i class="icon octicon octicon-organization"></i> | |||
<strong>{{.ShortName 20}}</strong> | |||
<strong class="text truncate item-name">{{.Name}}</strong> | |||
<span class="ui right text light grey"> | |||
<i class="octicon octicon-repo"></i>{{.NumRepos}} | |||
</span> | |||
@@ -93,12 +95,12 @@ | |||
</div> | |||
</h4> | |||
<div class="ui attached table segment"> | |||
<ul> | |||
<ul class="repo-owner-name-list"> | |||
{{range .Mirrors}} | |||
<li {{if .IsPrivate}}class="private"{{end}}> | |||
<a href="{{AppSubUrl}}/{{$.ContextUser.Name}}/{{.Name}}"> | |||
<i class="icon octicon octicon-repo-clone"></i> | |||
<strong>{{.Name}}</strong> | |||
<strong class="text truncate item-name">{{.Name}}</strong> | |||
<span class="ui right text light grey"> | |||
<i class="octicon octicon-sync"></i>{{.Interval}}H | |||
</span> |
@@ -7,7 +7,7 @@ | |||
<div class="ui fifteen wide column"> | |||
<div class="{{if eq .GetOpType 5}}push news{{end}}"> | |||
<p> | |||
<a href="{{AppSubUrl}}/{{.GetActUserName}}">{{.GetActUserName}}</a> | |||
<a href="{{AppSubUrl}}/{{.GetActUserName}}">{{.ShortActUserName}}</a> | |||
{{if eq .GetOpType 1}} | |||
{{$.i18n.Tr "action.create_repo" .GetRepoLink .GetRepoPath | Str2html}} | |||
{{else if eq .GetOpType 2}} |