From 964e537479c497a5ba42799a1c1a7c430720e990 Mon Sep 17 00:00:00 2001 From: Gogs Date: Sun, 23 Mar 2014 18:13:23 +0800 Subject: append route to web --- web.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'web.go') diff --git a/web.go b/web.go index bb316a67..637ee7ce 100644 --- a/web.go +++ b/web.go @@ -18,6 +18,7 @@ import ( "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" + "github.com/gogits/gogs/modules/avatar" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/mailer" @@ -114,6 +115,9 @@ func runWeb(*cli.Context) { m.Get("/help", routers.Help) + avatarHandler := avatar.HttpHandler("public/img/avatar", "public/img/avatar/default.jpg") + m.Get("/avatar/:hash", avatarHandler.ServeHTTP) + adminReq := middleware.AdminRequire() m.Get("/admin", reqSignIn, adminReq, admin.Dashboard) m.Get("/admin/users", reqSignIn, adminReq, admin.Users) @@ -136,7 +140,6 @@ func runWeb(*cli.Context) { ignSignIn, middleware.RepoAssignment(true), repo.Single) m.Get("/:username/:reponame/commit/:commitid/**", ignSignIn, middleware.RepoAssignment(true), repo.Single) m.Get("/:username/:reponame/commit/:commitid", ignSignIn, middleware.RepoAssignment(true), repo.Single) - m.Get("/:username/:reponame", ignSignIn, middleware.RepoAssignment(true), repo.Single) m.Any("/:username/:reponame/**", ignSignIn, repo.Http) -- cgit v1.2.3 From 6bc7ae971a32b1ca6ce5332224de4023e1e6704c Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 23 Mar 2014 10:58:50 -0400 Subject: Mirror fix --- .gitignore | 3 ++- .gopmfile | 1 + conf/app.ini | 2 -- modules/base/conf.go | 4 +--- public/img/avatar/default.jpg | Bin 6951 -> 0 bytes public/img/avatar_default.jpg | Bin 0 -> 6951 bytes routers/admin/admin.go | 1 - templates/admin/config.tmpl | 1 - web.go | 2 +- 9 files changed, 5 insertions(+), 9 deletions(-) delete mode 100644 public/img/avatar/default.jpg create mode 100644 public/img/avatar_default.jpg (limited to 'web.go') diff --git a/.gitignore b/.gitignore index d201223e..425f227c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ custom/ data/ .vendor/ .idea/ -*.iml \ No newline at end of file +*.iml +public/img/avatar/ \ No newline at end of file diff --git a/.gopmfile b/.gopmfile index 6e6b59c6..bd641a17 100644 --- a/.gopmfile +++ b/.gopmfile @@ -8,6 +8,7 @@ github.com/Unknwon/com= github.com/Unknwon/cae= github.com/Unknwon/goconfig= github.com/dchest/scrypt= +github.com/nfnt/resize= github.com/lunny/xorm= github.com/gogits/logs= github.com/gogits/binding= diff --git a/conf/app.ini b/conf/app.ini index ab9f6dc4..ee44dd40 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -105,8 +105,6 @@ SESSION_ID_HASHKEY = [picture] ; The place to picture data, either "server" or "qiniu", default is "server" SERVICE = server -; For "server" only, root path of picture data, default is "data/pictures" -PATH = data/pictures [log] ; Either "console", "file", "conn", "smtp" or "database", default is "console" diff --git a/modules/base/conf.go b/modules/base/conf.go index fba05e88..b243a6ad 100644 --- a/modules/base/conf.go +++ b/modules/base/conf.go @@ -58,8 +58,7 @@ var ( SessionConfig *session.Config SessionManager *session.Manager - PictureService string - PictureRootPath string + PictureService string ) var Service struct { @@ -269,7 +268,6 @@ func NewConfigContext() { CookieRememberName = Cfg.MustValue("security", "COOKIE_REMEMBER_NAME") PictureService = Cfg.MustValue("picture", "SERVICE") - PictureRootPath = Cfg.MustValue("picture", "PATH") // Determine and create root git reposiroty path. RepoRootPath = Cfg.MustValue("repository", "ROOT") diff --git a/public/img/avatar/default.jpg b/public/img/avatar/default.jpg deleted file mode 100644 index 728ec5af..00000000 Binary files a/public/img/avatar/default.jpg and /dev/null differ diff --git a/public/img/avatar_default.jpg b/public/img/avatar_default.jpg new file mode 100644 index 00000000..728ec5af Binary files /dev/null and b/public/img/avatar_default.jpg differ diff --git a/routers/admin/admin.go b/routers/admin/admin.go index f1f951ef..0b5e3d8e 100644 --- a/routers/admin/admin.go +++ b/routers/admin/admin.go @@ -161,7 +161,6 @@ func Config(ctx *middleware.Context) { ctx.Data["SessionConfig"] = base.SessionConfig ctx.Data["PictureService"] = base.PictureService - ctx.Data["PictureRootPath"] = base.PictureRootPath ctx.Data["LogMode"] = base.LogMode ctx.Data["LogConfig"] = base.LogConfig diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl index 915c9dc0..d33a07cc 100644 --- a/templates/admin/config.tmpl +++ b/templates/admin/config.tmpl @@ -104,7 +104,6 @@
Picture Service: {{.PictureService}}
-
Picture Root Path: {{.PictureRootPath}}
diff --git a/web.go b/web.go index d055c394..4b7d4ef0 100644 --- a/web.go +++ b/web.go @@ -94,7 +94,7 @@ func runWeb(*cli.Context) { m.Get("/stars", reqSignIn, user.Stars) m.Get("/help", routers.Help) - avatarCache := avatar.HttpHandler("public/img/avatar/", "public/img/avatar/default.jpg") + avatarCache := avatar.HttpHandler("public/img/avatar/", "public/img/avatar_default.jpg") m.Get("/avatar/:hash", avatarCache.ServeHTTP) m.Group("/user", func(r martini.Router) { -- cgit v1.2.3 From b9b82cfe477bcbfd3541adfc969ff20210d56549 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 23 Mar 2014 19:09:11 -0400 Subject: Mirror updates --- .gobuild.yml | 3 ++- conf/app.ini | 2 ++ models/issue.go | 19 ++++++++++++++++--- modules/base/conf.go | 13 +++++++++++++ routers/repo/issue.go | 40 ++++++++++++++++++++++++++++++++++++++-- templates/admin/config.tmpl | 1 + templates/user/dashboard.tmpl | 2 +- templates/user/profile.tmpl | 2 +- web.go | 3 ++- 9 files changed, 76 insertions(+), 9 deletions(-) (limited to 'web.go') diff --git a/.gobuild.yml b/.gobuild.yml index d667c930..78a38f2d 100644 --- a/.gobuild.yml +++ b/.gobuild.yml @@ -4,4 +4,5 @@ filesets: - public - conf - LICENSE - - README.md \ No newline at end of file + - README.md + - README_ZH.md \ No newline at end of file diff --git a/conf/app.ini b/conf/app.ini index ee44dd40..809ea61c 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -52,6 +52,8 @@ DISENABLE_REGISTERATION = false REQUIRE_SIGNIN_VIEW = false ; Cache avatar as picture ENABLE_CACHE_AVATAR = false +; Mail notification +ENABLE_NOTIFY_MAIL = false [mailer] ENABLED = false diff --git a/models/issue.go b/models/issue.go index 929567b1..fe43a94b 100644 --- a/models/issue.go +++ b/models/issue.go @@ -58,6 +58,7 @@ func CreateIssue(userId, repoId, milestoneId, assigneeId int64, name, labels, co Content: content, } _, err = orm.Insert(issue) + // TODO: newIssueAction return issue, err } @@ -67,9 +68,9 @@ func GetIssueCount(repoId int64) (int64, error) { } // GetIssueById returns issue object by given id. -func GetIssueById(id int64) (*Issue, error) { - issue := new(Issue) - has, err := orm.Id(id).Get(issue) +func GetIssueByIndex(repoId, index int64) (*Issue, error) { + issue := &Issue{RepoId: repoId, Index: index} + has, err := orm.Get(issue) if err != nil { return nil, err } else if !has { @@ -126,6 +127,18 @@ func GetIssues(userId, repoId, posterId, milestoneId int64, page int, isClosed, return issues, err } +// UpdateIssue updates information of issue. +func UpdateIssue(issue *Issue) error { + _, err := orm.Update(issue, &Issue{RepoId: issue.RepoId, Index: issue.Index}) + return err +} + +func CloseIssue() { +} + +func ReopenIssue() { +} + // Label represents a list of labels of repository for issues. type Label struct { Id int64 diff --git a/modules/base/conf.go b/modules/base/conf.go index b243a6ad..2bf529d9 100644 --- a/modules/base/conf.go +++ b/modules/base/conf.go @@ -66,6 +66,7 @@ var Service struct { DisenableRegisteration bool RequireSignInView bool EnableCacheAvatar bool + NotifyMail bool ActiveCodeLives int ResetPwdCodeLives int } @@ -230,6 +231,17 @@ func newRegisterMailService() { log.Info("Register Mail Service Enabled") } +func newNotifyMailService() { + if !Cfg.MustBool("service", "ENABLE_NOTIFY_MAIL") { + return + } else if MailService == nil { + log.Warn("Notify Mail Service: Mail Service is not enabled") + return + } + Service.NotifyMail = true + log.Info("Notify Mail Service Enabled") +} + func NewConfigContext() { var err error workDir, err := exeDir() @@ -284,4 +296,5 @@ func NewServices() { newSessionService() newMailService() newRegisterMailService() + newNotifyMailService() } diff --git a/routers/repo/issue.go b/routers/repo/issue.go index a9d87993..e03f115e 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -67,13 +67,13 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat } func ViewIssue(ctx *middleware.Context, params martini.Params) { - issueid, err := base.StrTo(params["issueid"]).Int() + index, err := base.StrTo(params["index"]).Int() if err != nil { ctx.Handle(404, "issue.ViewIssue", err) return } - issue, err := models.GetIssueById(int64(issueid)) + issue, err := models.GetIssueByIndex(ctx.Repo.Repository.Id, int64(index)) if err != nil { if err == models.ErrIssueNotExist { ctx.Handle(404, "issue.ViewIssue", err) @@ -87,3 +87,39 @@ func ViewIssue(ctx *middleware.Context, params martini.Params) { ctx.Data["Issue"] = issue ctx.HTML(200, "issue/view") } + +func UpdateIssue(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) { + if !ctx.Repo.IsOwner { + ctx.Handle(404, "issue.UpdateIssue", nil) + return + } + + index, err := base.StrTo(params["index"]).Int() + if err != nil { + ctx.Handle(404, "issue.UpdateIssue", err) + return + } + + issue, err := models.GetIssueByIndex(ctx.Repo.Repository.Id, int64(index)) + if err != nil { + if err == models.ErrIssueNotExist { + ctx.Handle(404, "issue.UpdateIssue", err) + } else { + ctx.Handle(200, "issue.UpdateIssue", err) + } + return + } + + issue.Name = form.IssueName + issue.MilestoneId = form.MilestoneId + issue.AssigneeId = form.AssigneeId + issue.Labels = form.Labels + issue.Content = form.Content + if err = models.UpdateIssue(issue); err != nil { + ctx.Handle(200, "issue.UpdateIssue", err) + return + } + + ctx.Data["Title"] = issue.Name + ctx.Data["Issue"] = issue +} diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl index d33a07cc..1e263046 100644 --- a/templates/admin/config.tmpl +++ b/templates/admin/config.tmpl @@ -46,6 +46,7 @@
Register Email Confirmation:
Disenable Registeration:
Require Sign In View:
+
Mail Notification:
Enable Cache Avatar:

Active Code Lives: {{.Service.ActiveCodeLives}} minutes
diff --git a/templates/user/dashboard.tmpl b/templates/user/dashboard.tmpl index 6594e545..ca5fecf2 100644 --- a/templates/user/dashboard.tmpl +++ b/templates/user/dashboard.tmpl @@ -34,7 +34,7 @@
diff --git a/templates/user/profile.tmpl b/templates/user/profile.tmpl index 2d76d9bf..34223614 100644 --- a/templates/user/profile.tmpl +++ b/templates/user/profile.tmpl @@ -50,7 +50,7 @@
    {{range .Repos}}
  • -
    {{.NumStars}} {{.NumForks}}
    +
    {{.NumForks}}

    {{.LowerName}}

    diff --git a/web.go b/web.go index 4b7d4ef0..9a613dce 100644 --- a/web.go +++ b/web.go @@ -145,7 +145,8 @@ func runWeb(*cli.Context) { r.Get("/commits/:branchname", repo.Commits) r.Get("/issues", repo.Issues) r.Any("/issues/new", binding.BindIgnErr(auth.CreateIssueForm{}), repo.CreateIssue) - r.Get("/issues/:issueid", repo.ViewIssue) + r.Get("/issues/:index", repo.ViewIssue) + r.Post("/issues/:index", binding.BindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue) r.Get("/pulls", repo.Pulls) r.Get("/branches", repo.Branches) r.Get("/src/:branchname", repo.Single) -- cgit v1.2.3 From d44c44987f704e2d4343db8c252281c86adb4a71 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 24 Mar 2014 06:50:11 -0400 Subject: Fix dashboard auto-log bug --- modules/middleware/auth.go | 2 +- web.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'web.go') diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go index 82c3367c..64f75d75 100644 --- a/modules/middleware/auth.go +++ b/modules/middleware/auth.go @@ -21,7 +21,7 @@ type ToggleOptions struct { func Toggle(options *ToggleOptions) martini.Handler { return func(ctx *Context) { - if options.SignOutRequire && ctx.IsSigned { + if options.SignOutRequire && ctx.IsSigned && ctx.Req.RequestURI != "/" { ctx.Redirect("/") return } diff --git a/web.go b/web.go index 9a613dce..4236d8b3 100644 --- a/web.go +++ b/web.go @@ -88,7 +88,7 @@ func runWeb(*cli.Context) { reqSignOut := middleware.Toggle(&middleware.ToggleOptions{SignOutRequire: true}) // Routers. - m.Get("/", ignSignIn, routers.Home) + m.Get("/", reqSignIn, routers.Home) m.Get("/issues", reqSignIn, user.Issues) m.Get("/pulls", reqSignIn, user.Pulls) m.Get("/stars", reqSignIn, user.Stars) -- cgit v1.2.3 From 59bbddb3183c27cbb5fb7918cefd9bb3a763a410 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 24 Mar 2014 07:36:38 -0400 Subject: Mirror fix --- CONTRIBUTING.md | 2 ++ README.md | 6 ++++-- README_ZH.md | 10 ++++++---- gogs.go | 2 +- models/repo.go | 2 +- models/user.go | 2 +- routers/repo/pull.go | 1 + web.go | 5 +++-- 8 files changed, 19 insertions(+), 11 deletions(-) (limited to 'web.go') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1b71d531..17a3ebe6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,8 @@ > Thanks [drone](https://github.com/drone/drone) because this guidelines sheet is forked from its [CONTRIBUTING.md](https://github.com/drone/drone/blob/master/CONTRIBUTING.md). +**This document is pre^3 release, we're not ready for receiving contribution until v0.5.0 release.** + Want to hack on Gogs? Awesome! Here are instructions to get you started. They are probably not perfect, please let us know if anything feels wrong or incomplete. ## Contribution guidelines diff --git a/README.md b/README.md index 42eba636..104b7eab 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Gogs - Go Git Service [![wercker status](https://app.wercker.com/status/ad0bdb0bc450ac6f09bc56b9640a50aa/s/ "wercker status")](https://app.wercker.com/project/bykey/ad0bdb0bc450ac6f09bc56b9640a50aa) [![Build Status](https://drone.io/github.com/gogits/gogs/status.png)](https://drone.io/github.com/gogits/gogs/latest) [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/gogits/gogs/trend.png)](https://bitdeli.com/free "Bitdeli Badge") +Gogs - Go Git Service [![wercker status](https://app.wercker.com/status/ad0bdb0bc450ac6f09bc56b9640a50aa/s/ "wercker status")](https://app.wercker.com/project/bykey/ad0bdb0bc450ac6f09bc56b9640a50aa) [![Build Status](https://drone.io/github.com/gogits/gogs/status.png)](https://drone.io/github.com/gogits/gogs/latest) ===================== Gogs(Go Git Service) is a Self Hosted Git Service in the Go Programming Language. @@ -48,9 +48,11 @@ There are two ways to install Gogs: ## Acknowledgments -- Logo is inspired by [martini](https://github.com/martini-contrib). +- Logo is inspired by [martini-contrib](https://github.com/martini-contrib). +- Router and middleware mechanism of [martini](http://martini.codegangsta.io/). - Mail Service, modules design is inspired by [WeTalk](https://github.com/beego/wetalk). - System Monitor Status is inspired by [GoBlog](https://github.com/fuxiaohei/goblog). +- Usage and modification from [beego](http://beego.me) modules. ## Contributors diff --git a/README_ZH.md b/README_ZH.md index b405e041..838e30a0 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -1,4 +1,4 @@ -Gogs - Go Git Service [![wercker status](https://app.wercker.com/status/ad0bdb0bc450ac6f09bc56b9640a50aa/s/ "wercker status")](https://app.wercker.com/project/bykey/ad0bdb0bc450ac6f09bc56b9640a50aa) [![Build Status](https://drone.io/github.com/gogits/gogs/status.png)](https://drone.io/github.com/gogits/gogs/latest) [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/gogits/gogs/trend.png)](https://bitdeli.com/free "Bitdeli Badge") +Gogs - Go Git Service [![wercker status](https://app.wercker.com/status/ad0bdb0bc450ac6f09bc56b9640a50aa/s/ "wercker status")](https://app.wercker.com/project/bykey/ad0bdb0bc450ac6f09bc56b9640a50aa) [![Build Status](https://drone.io/github.com/gogits/gogs/status.png)](https://drone.io/github.com/gogits/gogs/latest) ===================== Gogs(Go Git Service) 是一个由 Go 语言编写的自助 Git 托管服务。 @@ -44,9 +44,11 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依 ## 特别鸣谢 -- Logo 基于 [martini](https://github.com/martini-contrib) 修改而来。 -- 邮件服务、模块设计基于 [WeTalk](https://github.com/beego/wetalk) 修改而来。 -- 系统监视状态基于 [GoBlog](https://github.com/fuxiaohei/goblog) 修改而来。 +- Logo 基于 [martini-contrib](https://github.com/martini-contrib) 修改而来。 +- 基于 [WeTalk](https://github.com/beego/wetalk) 修改的邮件服务和模块设计。 +- 基于 [GoBlog](https://github.com/fuxiaohei/goblog) 修改的系统监视状态。 +- [beego](http://beego.me) 模块的使用与修改。 +- [martini](http://martini.codegangsta.io/) 的路由与中间件机制。 ## 贡献成员 diff --git a/gogs.go b/gogs.go index 09b28f9b..93b7231b 100644 --- a/gogs.go +++ b/gogs.go @@ -20,7 +20,7 @@ import ( // Test that go1.2 tag above is included in builds. main.go refers to this definition. const go12tag = true -const APP_VER = "0.1.7.0323.1" +const APP_VER = "0.1.7.0324" func init() { base.AppVer = APP_VER diff --git a/models/repo.go b/models/repo.go index e27e99b0..f03d7683 100644 --- a/models/repo.go +++ b/models/repo.go @@ -387,7 +387,7 @@ func UpdateRepository(repo *Repository) error { repo.Website = repo.Website[:255] } - _, err := orm.Id(repo.Id).UseBool().Cols("description", "website").Update(repo) + _, err := orm.Id(repo.Id).UseBool().Cols("description", "website", "updated").Update(repo) return err } diff --git a/models/user.go b/models/user.go index 7fd7449c..d2ed5a90 100644 --- a/models/user.go +++ b/models/user.go @@ -211,7 +211,7 @@ func UpdateUser(user *User) (err error) { user.Website = user.Website[:255] } - _, err = orm.Id(user.Id).UseBool().Cols("website", "location", "is_active", "is_admin").Update(user) + _, err = orm.Id(user.Id).UseBool().Cols("email", "passwd", "avatar", "avatar_email", "website", "location", "is_active", "is_admin", "updated").Update(user) return err } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index d4a12a4a..16c60389 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -6,6 +6,7 @@ package repo import ( "github.com/codegangsta/martini" + "github.com/gogits/gogs/modules/middleware" ) diff --git a/web.go b/web.go index 4236d8b3..f0f81125 100644 --- a/web.go +++ b/web.go @@ -31,9 +31,10 @@ import ( var CmdWeb = cli.Command{ Name: "web", - Usage: "just run", + Usage: "Gogs web server", Description: ` -gogs web`, +gogs web server is the only thing you need to run, +and it takes care of all the other things for you`, Action: runWeb, Flags: []cli.Flag{}, } -- cgit v1.2.3 From 5e22f1437ac2466d599c242fd5e256180fa7b68e Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Mon, 24 Mar 2014 21:27:19 +0800 Subject: diff page ui --- public/css/gogs.css | 131 ++++++++++++++- public/js/app.js | 73 +++++---- routers/repo/commit.go | 6 + templates/repo/diff.tmpl | 418 +++++++++++++++++++++++++++++++++++++++++++++++ web.go | 4 +- 5 files changed, 599 insertions(+), 33 deletions(-) create mode 100644 templates/repo/diff.tmpl (limited to 'web.go') diff --git a/public/css/gogs.css b/public/css/gogs.css index 65a6c03d..ec37721f 100755 --- a/public/css/gogs.css +++ b/public/css/gogs.css @@ -798,7 +798,7 @@ html, body { margin-left: .5em; } -.commit-box .avatar { +.commit-box .avatar, .diff-head-box .avatar { width: 20px; height: 20px; margin-right: 8px; @@ -831,10 +831,137 @@ html, body { background-color: #FFF; } -.guide-box { +.guide-box, .diff-head-box { margin-top: 20px; } +.diff-head-box h4 { + margin-top: 0; + margin-bottom: 0; + line-height: 26px; +} + +.diff-head-box p { + margin-bottom: 0; +} + +.diff-head-box .sha { + margin-left: 8px; +} + +.diff-head-box a.name { + color: #444; + margin-right: 8px; +} + +.diff-head-box span.time { + color: #888; +} + +.diff-detail-box { + margin-bottom: 16px; + line-height: 30px; +} + +.diff-detail-box span.status { + display: inline-block; + width: 12px; + height: 12px; + margin-right: 8px; + vertical-align: middle; +} + +.diff-detail-box ol { + padding-left: 0; + margin-bottom: 28px; +} + +.diff-detail-box li { + list-style: none; + padding-bottom: 4px; + margin-bottom: 4px; + border-bottom: 1px dashed #DDD; + padding-left: 6px; +} + +.diff-detail-box span.status.modify { + background-color: #f0db88; +} + +.diff-detail-box span.status.add { + background-color: #b4e2b4; +} + +.diff-detail-box span.status.del { + background-color: #e9aeae; +} + +.diff-detail-box span.status.rename{ + background-color: #dad8ff; +} + +.diff-file-box .panel-heading { + padding: 10px 20px; + line-height: 26px; +} + +.diff-box .count { + margin-right: 12px; +} + +.diff-box .count .bar { + width: 40px; + display: inline-block; + margin: 2px 4px 0 4px; + vertical-align: text-top; +} + +.diff-box .file { + color: #888; +} + +#gogs-source .file-content.diff-file-box { + margin-bottom: 20px; +} + +.diff-box .count .bar .add { + background-color: #77c64a; + height: 12px; +} + +.diff-box .count .bar .del, .diff-box .count .bar { + background-color: #e75316; + height: 12px; +} + +.diff-file-box .file-body.file-code .lines-code > pre { + margin: 0; + padding: 3px; +} + +.diff-file-box .file-body.file-code .lines-num-old { + border-right: 1px solid #DDD; +} + +.diff-file-box .code-bin td { + padding: 20px; +} + +.diff-file-box .code-diff tbody tr.add-code td, .diff-file-box .code-diff tbody tr.add-code pre { + background-color: #d1ffd6 !important; + border-color: #b4e2b4 !important; +} + +.diff-file-box .code-diff tbody tr.del-code td, .diff-file-box .code-diff tbody tr.del-code pre { + background-color: #ffe2dd !important; + border-color: #e9aeae !important; +} + +.diff-file-box .code-diff tbody tr:hover td, .diff-file-box .code-diff tbody tr:hover pre { + background-color: #fff8d2 !important; + border-color: #f0db88 !important; +} + /* wrapper and footer */ #wrapper { diff --git a/public/js/app.js b/public/js/app.js index 4bf4b29e..9a58a6f2 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -2,11 +2,11 @@ var Gogits = { "PageIsSignup": false }; -(function($){ +(function ($) { // extend jQuery ajax, set csrf token value var ajax = $.ajax; $.extend({ - ajax: function(url, options) { + ajax: function (url, options) { if (typeof url === 'object') { options = url; url = undefined; @@ -17,24 +17,24 @@ var Gogits = { var headers = options.headers || {}; var domain = document.domain.replace(/\./ig, '\\.'); if (!/^(http:|https:).*/.test(url) || eval('/^(http:|https:)\\/\\/(.+\\.)*' + domain + '.*/').test(url)) { - headers = $.extend(headers, {'X-Csrf-Token':csrftoken}); + headers = $.extend(headers, {'X-Csrf-Token': csrftoken}); } options.headers = headers; var callback = options.success; - options.success = function(data){ - if(data.once){ + options.success = function (data) { + if (data.once) { // change all _once value if ajax data.once exist $('[name=_once]').val(data.once); } - if(callback){ + if (callback) { callback.apply(this, arguments); } }; return ajax(url, options); }, - changeHash: function(hash) { - if(history.pushState) { + changeHash: function (hash) { + if (history.pushState) { history.pushState(null, null, hash); } else { @@ -42,8 +42,8 @@ var Gogits = { } }, - deSelect: function() { - if(window.getSelection) { + deSelect: function () { + if (window.getSelection) { window.getSelection().removeAllRanges(); } else { document.selection.empty(); @@ -114,8 +114,8 @@ var Gogits = { $tabs.find("li:eq(0) a").tab("show"); }; // fix dropdown inside click - Gogits.initDropDown = function(){ - $('.dropdown-menu.no-propagation').on('click',function(e){ + Gogits.initDropDown = function () { + $('.dropdown-menu.no-propagation').on('click', function (e) { e.stopPropagation(); }); }; @@ -144,24 +144,24 @@ var Gogits = { node = node.wrap('
    '); node.append(''); }); - } + }; Gogits.renderCodeView = function () { - function selectRange($list, $select, $from){ + function selectRange($list, $select, $from) { $list.removeClass('active'); - if($from){ + if ($from) { var a = parseInt($select.attr('rel').substr(1)); var b = parseInt($from.attr('rel').substr(1)); var c; - if(a != b){ - if(a > b){ + if (a != b) { + if (a > b) { c = a; a = b; b = c; } var classes = []; - for(i = a; i <= b; i++) { - classes.push('.L'+i); + for (i = a; i <= b; i++) { + classes.push('.L' + i); } $list.filter(classes.join(',')).addClass('active'); $.changeHash('#L' + a + '-' + 'L' + b); @@ -175,11 +175,11 @@ var Gogits = { $(document).on('click', '.lines-num span', function (e) { var $select = $(this); var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li'); - selectRange($list, $list.filter('[rel='+$select.attr('rel')+']'), (e.shiftKey?$list.filter('.active').eq(0):null)); + selectRange($list, $list.filter('[rel=' + $select.attr('rel') + ']'), (e.shiftKey ? $list.filter('.active').eq(0) : null)); $.deSelect(); }); - $('.code-view .lines-code > pre').each(function(){ + $('.code-view .lines-code > pre').each(function () { var $pre = $(this); var $lineCode = $pre.parent(); var $lineNums = $lineCode.siblings('.lines-num'); @@ -191,20 +191,20 @@ var Gogits = { } }); - $(window).on('hashchange', function(e) { + $(window).on('hashchange',function (e) { var m = window.location.hash.match(/^#(L\d+)\-(L\d+)$/); var $list = $('.code-view ol.linenums > li'); - if(m){ - var $first = $list.filter('.'+m[1]); - selectRange($list, $first, $list.filter('.'+m[2])); - $("html, body").scrollTop($first.offset().top-200); + if (m) { + var $first = $list.filter('.' + m[1]); + selectRange($list, $first, $list.filter('.' + m[2])); + $("html, body").scrollTop($first.offset().top - 200); return; } m = window.location.hash.match(/^#(L\d+)$/); - if(m){ - var $first = $list.filter('.'+m[1]); + if (m) { + var $first = $list.filter('.' + m[1]); selectRange($list, $first); - $("html, body").scrollTop($first.offset().top-200); + $("html, body").scrollTop($first.offset().top - 200); } }).trigger('hashchange'); }; @@ -334,6 +334,21 @@ function initRepository() { return false; }); })(); + + // repo diff counter + (function () { + var $counter = $('.diff-counter'); + if ($counter.length < 1) { + return; + } + $counter.each(function (i, item) { + var $item = $(item); + var addLine = $item.find('span[data-line].add').data("line"); + var delLine = $item.find('span[data-line].del').data("line"); + var addPercent = parseFloat(addLine) / (parseFloat(addLine) + parseFloat(delLine)) * 100; + $item.find(".bar .add").css("width", addPercent + "%"); + }); + }()); } (function ($) { diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 60ee2177..e038998f 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -33,3 +33,9 @@ func Commits(ctx *middleware.Context, params martini.Params) { ctx.Data["Commits"] = commits ctx.HTML(200, "repo/commits") } + +func Diff(ctx *middleware.Context,params martini.Params){ + ctx.Data["Title"] = "commit-sha" + ctx.Data["IsRepoToolbarCommits"] = true + ctx.HTML(200,"repo/diff") +} diff --git a/templates/repo/diff.tmpl b/templates/repo/diff.tmpl new file mode 100644 index 00000000..0c6f4feb --- /dev/null +++ b/templates/repo/diff.tmpl @@ -0,0 +1,418 @@ +{{template "base/head" .}} +{{template "base/navbar" .}} +{{template "repo/nav" .}} +{{template "repo/toolbar" .}} +
    +
    +
    +
    + Browse Source +

    bsongen: support for custom tags

    +
    +
    + + commit commit-sha + +

    + + author-name + times-ago +

    +
    +
    + +
    + Show Diff Files +

    + + 5 changed files with 25 additions and 9 deletions. +

    +
      +
    1. +
      + 2 + + + + + 4 +
      + +   + gopmweb.go +
    2. +
    3. +
      + 666 + + + + + 44 +
      +   + static/img/favicon.png +
    4. +
    5. +   + static/img/favicon.png +
    6. +
    7. +   + static/img/favicon.png +
    8. +
    +
    + +
    +
    +
    + BIN + + + + + +
    + View File + data/test/bson_test/simple_type.png +
    +
    + + + + +
    +
    +
    + +
    +
    +
    + + 30 + + + + + - 4 +
    + View File + data/test/bson_test/simple_type.go +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 1 + + 1 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 2 + + 2 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 3 + + 3 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + + + + 4 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + + + + 5 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 4 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 5 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 6 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 7 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 8 + + 6 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 9 + + 7 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 10 + + 8 + +
    	"github.com/youtube/vitess/go/bson"
    +
    +
    +
    + +
    +
    +
    + + 2 + + + + + - 4 +
    + View File + data/test/bson_test/simple_type.go +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 1 + + 1 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 2 + + 2 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 3 + + 3 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + + + + 4 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + + + + 5 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 4 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 5 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 6 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 7 + + - + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 8 + + 6 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 9 + + 7 + +
    	"github.com/youtube/vitess/go/bson"
    +
    + 10 + + 8 + +
    	"github.com/youtube/vitess/go/bson"
    +
    +
    +
    + +
    +
    +
    + BIN + + + + + +
    + View File + data/test/bson_test/simple_type.png +
    +
    + + + + +
    +
    +
    +
    +
    +{{template "base/footer" .}} \ No newline at end of file diff --git a/web.go b/web.go index 9a613dce..be9378f1 100644 --- a/web.go +++ b/web.go @@ -156,8 +156,8 @@ func runWeb(*cli.Context) { }, ignSignIn, middleware.RepoAssignment(true)) // TODO: implement single commit page - // m.Get("/:username/:reponame/commit/:commitid/**", ignSignIn, middleware.RepoAssignment(true), repo.Single) - // m.Get("/:username/:reponame/commit/:commitid", ignSignIn, middleware.RepoAssignment(true), repo.Single) + m.Get("/:username/:reponame/commit/:commitid/**", ignSignIn, middleware.RepoAssignment(true), repo.Diff) + m.Get("/:username/:reponame/commit/:commitid", ignSignIn, middleware.RepoAssignment(true), repo.Diff) m.Group("/:username", func(r martini.Router) { r.Get("/:reponame", middleware.RepoAssignment(true), repo.Single) -- cgit v1.2.3