@@ -5,7 +5,7 @@ Gogs - Go Git Service [ |  | ||||
##### Current version: 0.7.12 Beta | |||||
##### Current version: 0.7.13 Beta | |||||
<table> | <table> | ||||
<tr> | <tr> | ||||
@@ -515,10 +515,13 @@ func runWeb(ctx *cli.Context) { | |||||
m.Group("", func() { | m.Group("", func() { | ||||
m.Get("/releases", repo.Releases) | m.Get("/releases", repo.Releases) | ||||
m.Get("/^:type(issues|pulls)$", repo.RetrieveLabels, repo.Issues) | m.Get("/^:type(issues|pulls)$", repo.RetrieveLabels, repo.Issues) | ||||
m.Get("/^:type(issues|pulls)$/:index", repo.ViewIssue) | |||||
m.Get("/labels/", repo.RetrieveLabels, repo.Labels) | m.Get("/labels/", repo.RetrieveLabels, repo.Labels) | ||||
m.Get("/milestones", repo.Milestones) | m.Get("/milestones", repo.Milestones) | ||||
}, middleware.RepoRef()) | |||||
}, middleware.RepoRef(), | |||||
func(ctx *middleware.Context) { | |||||
ctx.Data["PageIsList"] = true | |||||
}) | |||||
m.Get("/^:type(issues|pulls)$/:index", repo.ViewIssue) | |||||
m.Get("/branches", repo.Branches) | m.Get("/branches", repo.Branches) | ||||
m.Get("/archive/*", repo.Download) | m.Get("/archive/*", repo.Download) | ||||
@@ -17,7 +17,7 @@ import ( | |||||
"github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
) | ) | ||||
const APP_VER = "0.7.12.1116 Beta" | |||||
const APP_VER = "0.7.13.1116 Beta" | |||||
func init() { | func init() { | ||||
runtime.GOMAXPROCS(runtime.NumCPU()) | runtime.GOMAXPROCS(runtime.NumCPU()) | ||||
@@ -265,7 +265,7 @@ func (u *User) UploadAvatar(data []byte) error { | |||||
return fmt.Errorf("Decode: %v", err) | return fmt.Errorf("Decode: %v", err) | ||||
} | } | ||||
m := resize.Resize(234, 234, img, resize.NearestNeighbor) | |||||
m := resize.Resize(290, 290, img, resize.NearestNeighbor) | |||||
sess := x.NewSession() | sess := x.NewSession() | ||||
defer sessionRelease(sess) | defer sessionRelease(sess) | ||||
@@ -104,7 +104,7 @@ func New(hash string, cacheDir string) *Avatar { | |||||
expireDuration: time.Minute * 10, | expireDuration: time.Minute * 10, | ||||
reqParams: url.Values{ | reqParams: url.Values{ | ||||
"d": {"retro"}, | "d": {"retro"}, | ||||
"size": {"200"}, | |||||
"size": {"290"}, | |||||
"r": {"pg"}}.Encode(), | "r": {"pg"}}.Encode(), | ||||
imagePath: filepath.Join(cacheDir, hash+".image"), //maybe png or jpeg | imagePath: filepath.Join(cacheDir, hash+".image"), //maybe png or jpeg | ||||
} | } | ||||
@@ -194,7 +194,7 @@ func (this *service) mustInt(r *http.Request, defaultValue int, keys ...string) | |||||
func (this *service) ServeHTTP(w http.ResponseWriter, r *http.Request) { | func (this *service) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||
urlPath := r.URL.Path | urlPath := r.URL.Path | ||||
hash := urlPath[strings.LastIndex(urlPath, "/")+1:] | hash := urlPath[strings.LastIndex(urlPath, "/")+1:] | ||||
size := this.mustInt(r, 80, "s", "size") // default size = 80*80 | |||||
size := this.mustInt(r, 290, "s", "size") // default size = 290*290 | |||||
avatar := New(hash, this.cacheDir) | avatar := New(hash, this.cacheDir) | ||||
avatar.AlterImage = this.altImage | avatar.AlterImage = this.altImage | ||||
@@ -848,6 +848,9 @@ pre.raw { | |||||
.ui .text.yellow { | .ui .text.yellow { | ||||
color: #FBBD08 !important; | color: #FBBD08 !important; | ||||
} | } | ||||
.ui .text.gold { | |||||
color: #a1882b !important; | |||||
} | |||||
.ui .text.left { | .ui .text.left { | ||||
text-align: left !important; | text-align: left !important; | ||||
} | } | ||||
@@ -2688,6 +2691,23 @@ footer .container .links > *:first-child { | |||||
.user.settings .email.list .item:not(:first-child) .button { | .user.settings .email.list .item:not(:first-child) .button { | ||||
margin-top: -10px; | margin-top: -10px; | ||||
} | } | ||||
.user.profile .ui.card .username { | |||||
display: block; | |||||
} | |||||
.user.profile .ui.card .extra.content { | |||||
padding: 0; | |||||
} | |||||
.user.profile .ui.card .extra.content ul { | |||||
margin: 0; | |||||
padding: 0; | |||||
} | |||||
.user.profile .ui.card .extra.content ul li { | |||||
padding: 10px; | |||||
list-style: none; | |||||
} | |||||
.user.profile .ui.card .extra.content ul li:not(:last-child) { | |||||
border-bottom: 1px solid #eaeaea; | |||||
} | |||||
.dashboard { | .dashboard { | ||||
padding-top: 15px; | padding-top: 15px; | ||||
padding-bottom: 80px; | padding-bottom: 80px; | ||||
@@ -2820,24 +2840,26 @@ footer .container .links > *:first-child { | |||||
padding-top: 15px; | padding-top: 15px; | ||||
padding-bottom: 80px; | padding-bottom: 80px; | ||||
} | } | ||||
.explore.repositories .ui.repository.list .item { | |||||
.ui.repository.list .item { | |||||
padding-bottom: 25px; | |||||
} | |||||
.ui.repository.list .item:not(:first-child) { | |||||
border-top: 1px solid #eee; | border-top: 1px solid #eee; | ||||
padding-top: 25px; | padding-top: 25px; | ||||
padding-bottom: 25px; | |||||
} | } | ||||
.explore.repositories .ui.repository.list .item .ui.header { | |||||
.ui.repository.list .item .ui.header { | |||||
font-size: 1.5rem; | font-size: 1.5rem; | ||||
padding-bottom: 10px; | padding-bottom: 10px; | ||||
} | } | ||||
.explore.repositories .ui.repository.list .item .ui.header .metas { | |||||
.ui.repository.list .item .ui.header .metas { | |||||
color: #888; | color: #888; | ||||
font-size: 13px; | font-size: 13px; | ||||
font-weight: normal; | font-weight: normal; | ||||
} | } | ||||
.explore.repositories .ui.repository.list .item .ui.header .metas span:not(:last-child) { | |||||
.ui.repository.list .item .ui.header .metas span:not(:last-child) { | |||||
margin-right: 5px; | margin-right: 5px; | ||||
} | } | ||||
.explore.repositories .ui.repository.list .item .time { | |||||
.ui.repository.list .item .time { | |||||
font-size: 12px; | font-size: 12px; | ||||
color: #808080; | color: #808080; | ||||
} | } |
@@ -139,6 +139,9 @@ pre { | |||||
&.yellow { | &.yellow { | ||||
color: #FBBD08 !important; | color: #FBBD08 !important; | ||||
} | } | ||||
&.gold { | |||||
color: #a1882b !important; | |||||
} | |||||
&.left { | &.left { | ||||
text-align: left !important; | text-align: left !important; | ||||
@@ -1,30 +1,32 @@ | |||||
.explore { | .explore { | ||||
padding-top: 15px; | padding-top: 15px; | ||||
padding-bottom: @footer-margin * 2; | padding-bottom: @footer-margin * 2; | ||||
} | |||||
&.repositories { | |||||
.ui.repository.list { | |||||
.item { | |||||
border-top: 1px solid #eee; | |||||
padding-top: 25px; | |||||
padding-bottom: 25px; | |||||
.ui.header { | |||||
font-size: 1.5rem; | |||||
padding-bottom: 10px; | |||||
.metas { | |||||
color: #888; | |||||
font-size: 13px; | |||||
font-weight: normal; | |||||
span:not(:last-child) { | |||||
margin-right: 5px; | |||||
} | |||||
} | |||||
} | |||||
.time { | |||||
font-size: 12px; | |||||
color: #808080; | |||||
.ui.repository.list { | |||||
.item { | |||||
padding-bottom: 25px; | |||||
&:not(:first-child) { | |||||
border-top: 1px solid #eee; | |||||
padding-top: 25px; | |||||
} | |||||
.ui.header { | |||||
font-size: 1.5rem; | |||||
padding-bottom: 10px; | |||||
.metas { | |||||
color: #888; | |||||
font-size: 13px; | |||||
font-weight: normal; | |||||
span:not(:last-child) { | |||||
margin-right: 5px; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
.time { | |||||
font-size: 12px; | |||||
color: #808080; | |||||
} | |||||
} | } | ||||
} | } |
@@ -18,4 +18,29 @@ | |||||
} | } | ||||
} | } | ||||
} | } | ||||
&.profile { | |||||
.ui.card { | |||||
.username { | |||||
display: block; | |||||
} | |||||
.extra.content { | |||||
padding: 0; | |||||
ul { | |||||
margin: 0; | |||||
padding: 0; | |||||
li { | |||||
padding: 10px; | |||||
list-style: none; | |||||
&:not(:last-child) { | |||||
border-bottom: 1px solid #eaeaea; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | } |
@@ -1 +1 @@ | |||||
0.7.12.1116 Beta | |||||
0.7.13.1116 Beta |
@@ -5,7 +5,7 @@ | |||||
{{template "explore/navbar" .}} | {{template "explore/navbar" .}} | ||||
<div class="twelve wide column content"> | <div class="twelve wide column content"> | ||||
<div class="ui repository list"> | <div class="ui repository list"> | ||||
{{range $i, $v := .Repos}} | |||||
{{range .Repos}} | |||||
<div class="item"> | <div class="item"> | ||||
<div class="ui header"> | <div class="ui header"> | ||||
<a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}">{{.Owner.Name}} / {{.Name}}</a> | <a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}">{{.Owner.Name}} / {{.Name}}</a> | ||||
@@ -1,5 +1,5 @@ | |||||
<div class="ui compact small menu"> | <div class="ui compact small menu"> | ||||
{{if not .CommitsCount}} | |||||
{{if not .PageIsList}} | |||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues">{{.i18n.Tr "repo.issues"}}</a> | <a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues">{{.i18n.Tr "repo.issues"}}</a> | ||||
<a class="{{if .PageIsPullList}}active{{end}} item" href="{{.RepoLink}}/pulls">{{.i18n.Tr "repo.pulls"}}</a> | <a class="{{if .PageIsPullList}}active{{end}} item" href="{{.RepoLink}}/pulls">{{.i18n.Tr "repo.pulls"}}</a> | ||||
{{end}} | {{end}} | ||||
@@ -1,104 +1,86 @@ | |||||
{{template "ng/base/head" .}} | |||||
{{template "ng/base/header" .}} | |||||
<div class="main-wrapper"> | |||||
<div id="user-profile-page" class="container clear"> | |||||
<div class="grid-1-5 left"> | |||||
<div> | |||||
{{if and (.Owner.UseCustomAvatar) (eq .SignedUserName .Owner.Name)}} | |||||
<a href="{{AppSubUrl}}/user/settings" id="profile-avatar" original-title="{{.i18n.Tr "user.change_custom_avatar"}}"> | |||||
{{else if eq .SignedUserName .Owner.Name}} | |||||
<a href="http://gravatar.com/emails/" id="profile-avatar" original-title="{{.i18n.Tr "user.change_avatar"}}"> | |||||
{{else}} | |||||
<a id="profile-avatar"> | |||||
{{end}} | |||||
<img class="profile-avatar" src="{{.Owner.AvatarLink}}?s=234" title="{{.Owner.Name}}"/> | |||||
</a> | |||||
<div class="text-center" id="profile-name"> | |||||
{{if .Owner.FullName}}<span id="profile-fullname" class="center-block">{{.Owner.FullName}}</span><br>{{end}} | |||||
<span class="center-block" id="profile-username">{{.Owner.Name}}</span> | |||||
</div> | |||||
</div> | |||||
<div class="profile-info"> | |||||
<hr> | |||||
<ul class="list-no-style"> | |||||
{{if .Owner.Location}} | |||||
<li class="list-group-item"><i class="octicon octicon-location"></i> {{.Owner.Location}}</li> | |||||
{{end}} | |||||
{{if and .Owner.Email .IsSigned}} | |||||
<li class="list-group-item"><i class="octicon octicon-mail"></i> <a href="mailto:{{.Owner.Email}}" rel="nofollow">{{.Owner.Email}}</a></li> | |||||
{{end}} | |||||
{{if .Owner.Website}} | |||||
<li class="list-group-item"><i class="octicon octicon-link"></i> <a target="_blank" href="{{.Owner.Website}}">{{.Owner.Website}}</a></li> | |||||
{{end}} | |||||
<li class="list-group-item"><i class="octicon octicon-clock"></i> {{.i18n.Tr "user.join_on"}} {{DateFmtShort .Owner.Created}}</li> | |||||
</ul> | |||||
<hr> | |||||
<ul class="list-no-style"> | |||||
<li class="list-group-item profile-rel"> | |||||
<a class="text-black" href=""> | |||||
<strong>{{.Owner.NumFollowers}}</strong> | |||||
<p>{{.i18n.Tr "user.followers"}}</p> | |||||
</a> | |||||
</li> | |||||
<li class="list-group-item profile-rel"> | |||||
<a class="text-black" href=""> | |||||
<strong>{{.Owner.NumStars}}</strong> | |||||
<p>{{.i18n.Tr "user.starred"}}</p> | |||||
</a> | |||||
</li> | |||||
<li class="list-group-item profile-rel"> | |||||
<a class="text-black" href=""> | |||||
<strong>{{.Owner.NumFollowings}}</strong> | |||||
<p>{{.i18n.Tr "user.following"}}</p> | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
<hr> | |||||
</div> | |||||
{{template "base/head" .}} | |||||
<div class="user profile"> | |||||
<div class="ui container"> | |||||
<div class="ui grid"> | |||||
<div class="ui five wide column"> | |||||
<div class="ui card"> | |||||
{{if and (.Owner.UseCustomAvatar) (eq .SignedUserName .Owner.Name)}} | |||||
<a class="image poping up" href="{{AppSubUrl}}/user/settings" id="profile-avatar" data-content="{{.i18n.Tr "user.change_custom_avatar"}}" data-variation="inverted tiny" data-position="bottom center"> | |||||
<img src="{{.Owner.AvatarLink}}?s=290" title="{{.Owner.Name}}"/> | |||||
</a> | |||||
{{else if eq .SignedUserName .Owner.Name}} | |||||
<a class="image poping up" href="http://gravatar.com/emails/" id="profile-avatar" data-content="{{.i18n.Tr "user.change_avatar"}}" data-variation="inverted tiny" data-position="bottom center"> | |||||
<img src="{{.Owner.AvatarLink}}?s=290" title="{{.Owner.Name}}"/> | |||||
</a> | |||||
{{else}} | |||||
<span class="image"> | |||||
<img src="{{.Owner.AvatarLink}}?s=290" title="{{.Owner.Name}}"/> | |||||
</span> | |||||
{{end}} | |||||
<div class="content"> | |||||
{{if .Owner.FullName}}<span class="header text center">{{.Owner.FullName}}</span>{{end}} | |||||
<span class="username text center">{{.Owner.Name}}</span> | |||||
</div> | |||||
<div class="extra content"> | |||||
<ul class="text black"> | |||||
{{if .Owner.Location}} | |||||
<li><i class="icon octicon octicon-location"></i> {{.Owner.Location}}</li> | |||||
{{end}} | |||||
{{if and .Owner.Email .IsSigned}} | |||||
<li> | |||||
<i class="icon octicon octicon-mail"></i> | |||||
<a href="mailto:{{.Owner.Email}}" rel="nofollow">{{.Owner.Email}}</a> | |||||
</li> | |||||
{{end}} | |||||
{{if .Owner.Website}} | |||||
<li> | |||||
<i class="icon octicon octicon-link"></i> | |||||
<a target="_blank" href="{{.Owner.Website}}">{{.Owner.Website}}</a> | |||||
</li> | |||||
{{end}} | |||||
<li><i class="icon octicon octicon-clock"></i> {{.i18n.Tr "user.join_on"}} {{DateFmtShort .Owner.Created}}</li> | |||||
</ul> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="ui eleven wide column"> | |||||
<div class="ui secondary pointing menu"> | |||||
<a class="{{if ne .TabName "activity"}}active{{end}} item" href="{{.Owner.HomeLink}}"> | |||||
<i class="icon octicon octicon-repo"></i> {{.i18n.Tr "user.repositories"}} | |||||
</a> | |||||
<a class="item"> | |||||
<a class="{{if eq .TabName "activity"}}active{{end}} item" href="{{.Owner.HomeLink}}?tab=activity"> | |||||
<i class="icon octicon octicon-rss"></i> {{.i18n.Tr "user.activity"}} | |||||
</a> | |||||
</a> | |||||
</div> | </div> | ||||
<div class="grid-4-5 left"> | |||||
<div id="profile-body"> | |||||
<ul class="menu menu-line" id="profile-header"> | |||||
<li> | |||||
<a {{if not .TabName}}class="current"{{end}} href="{{.Owner.HomeLink}}"><i class="octicon octicon-repo"></i> {{.i18n.Tr "user.repositories"}}</a> | |||||
</li> | |||||
<li> | |||||
<a {{if eq .TabName "activity"}}class="current"{{end}} href="{{.Owner.HomeLink}}?tab=activity"><i class="octicon octicon-repo"></i> {{.i18n.Tr "user.activity"}}</a> | |||||
</li> | |||||
</ul> | |||||
<div class="tab-content"> | |||||
{{if eq .TabName "activity"}} | |||||
<div class="tab-pane active" id="dashboard-news"> | |||||
<br> | |||||
{{template "user/dashboard/feeds" .}} | |||||
</div> | |||||
{{else}} | |||||
<div class="tab-pane active"> | |||||
<div id="org-repo-list"> | |||||
{{range .Repos}} | |||||
{{if or (not .IsPrivate) (.HasAccess $.SignedUser)}} | |||||
<div class="org-repo-item"> | |||||
<ul class="org-repo-status right"> | |||||
<li><i class="octicon octicon-star"></i> {{.NumStars}}</li> | |||||
<li><i class="octicon octicon-git-branch"></i> {{.NumForks}}</li> | |||||
</ul> | |||||
<h2> | |||||
<a href="{{AppSubUrl}}/{{$.Owner.Name}}/{{.Name}}">{{.Name}}</a> | |||||
{{if .IsPrivate}} | |||||
<span class="text-gold"><i class="octicon octicon-lock"></i></span> | |||||
{{end}} | |||||
</h2> | |||||
<p class="org-repo-description">{{.Description}}</p> | |||||
<p class="org-repo-updated">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Updated $.i18n.Lang}}</p> | |||||
</div> | |||||
{{end}} | |||||
{{end}} | |||||
</div> | |||||
</div> | |||||
{{end}} | |||||
{{if ne .TabName "activity"}} | |||||
<div class="ui repository list"> | |||||
{{range .Repos}} | |||||
{{if or (not .IsPrivate) (.HasAccess $.SignedUser)}} | |||||
<div class="item"> | |||||
<div class="ui header"> | |||||
<a href="{{AppSubUrl}}/{{$.Owner.Name}}/{{.Name}}">{{.Name}}</a> | |||||
{{if .IsPrivate}} | |||||
<span class="text gold"><i class="icon octicon octicon-lock"></i></span> | |||||
{{end}} | |||||
<div class="ui right metas"> | |||||
<span class="text grey"><i class="octicon octicon-star"></i> {{.NumStars}}</span> | |||||
<span class="text grey"><i class="octicon octicon-git-branch"></i> {{.NumForks}}</span> | |||||
</div> | </div> | ||||
</div> | |||||
{{if .Description}}<p>{{.Description}}</p>{{end}} | |||||
<p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Updated $.i18n.Lang}}</p> | |||||
</div> | </div> | ||||
{{end}} | |||||
{{end}} | |||||
</div> | </div> | ||||
{{else}} | |||||
<br> | |||||
{{template "user/dashboard/feeds" .}} | |||||
{{end}} | |||||
</div> | </div> | ||||
</div> | |||||
</div> | </div> | ||||
{{template "ng/base/footer" .}} | |||||
{{template "base/footer" .}} |