new repo git hooks UI

This commit is contained in:
Unknwon 2015-08-26 18:03:30 +08:00
parent 2f2bf20aae
commit 1cb03135b7
9 changed files with 120 additions and 83 deletions

View File

@ -446,9 +446,9 @@ func runWeb(ctx *cli.Context) {
m.Post("/hooks/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost) m.Post("/hooks/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost)
m.Group("/hooks/git", func() { m.Group("/hooks/git", func() {
m.Get("", repo.GitHooks) m.Get("", repo.SettingsGitHooks)
m.Get("/:name", repo.GitHooksEdit) m.Combo("/:name").Get(repo.SettingsGitHooksEdit).
m.Post("/:name", repo.GitHooksEditPost) Post(repo.SettingsGitHooksEditPost)
}, middleware.GitHookService()) }, middleware.GitHookService())
m.Group("/keys", func() { m.Group("/keys", func() {

View File

@ -10,6 +10,8 @@ import (
"os" "os"
"path" "path"
"strings" "strings"
"github.com/Unknwon/com"
) )
// hookNames is a list of Git hooks' name that are supported. // hookNames is a list of Git hooks' name that are supported.
@ -81,8 +83,11 @@ func (h *Hook) Name() string {
// Update updates hook settings. // Update updates hook settings.
func (h *Hook) Update() error { func (h *Hook) Update() error {
if len(strings.TrimSpace(h.Content)) == 0 { if len(strings.TrimSpace(h.Content)) == 0 {
if com.IsExist(h.path) {
return os.Remove(h.path) return os.Remove(h.path)
} }
return nil
}
return ioutil.WriteFile(h.path, []byte(strings.Replace(h.Content, "\r", "", -1)), os.ModePerm) return ioutil.WriteFile(h.path, []byte(strings.Replace(h.Content, "\r", "", -1)), os.ModePerm)
} }

File diff suppressed because one or more lines are too long

View File

@ -86,8 +86,14 @@ img {
} }
} }
} }
&.green {
color: #6cc644!important;
}
&.left {
text-align: left!important;
}
&.right { &.right {
text-align: right; text-align: right!important;
} }
&.small { &.small {
font-size: 0.75em; font-size: 0.75em;

View File

@ -16,6 +16,7 @@
} }
} }
} }
.repository { .repository {
&.new.migrate, &.new.migrate,
&.new.fork { &.new.fork {
@ -58,3 +59,24 @@
} }
} }
} }
.repository.edit.hook {
form {
@input-padding: 25%!important;
.inline.field > label {
text-align: right;
width: @input-padding;
word-wrap: break-word;
}
input,
textarea {
width: 50%!important;
}
}
}
.repository.edit.hook {
form {
textarea {
width: 70%!important;
}
}
}

View File

@ -623,6 +623,17 @@
color: #666; color: #666;
} }
} }
.hook.list {
.item:not(:first-child) {
border-top: 1px solid #eaeaea;
}
.item {
padding: 10px 20px;
i {
margin-right: 5px;
}
}
}
} }
.ui.vertical.menu { .ui.vertical.menu {

View File

@ -608,7 +608,7 @@ func TriggerHook(ctx *middleware.Context) {
models.HookQueue.AddRepoID(repo.ID) models.HookQueue.AddRepoID(repo.ID)
} }
func GitHooks(ctx *middleware.Context) { func SettingsGitHooks(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsGitHooks"] = true ctx.Data["PageIsSettingsGitHooks"] = true
@ -622,7 +622,7 @@ func GitHooks(ctx *middleware.Context) {
ctx.HTML(200, GITHOOKS) ctx.HTML(200, GITHOOKS)
} }
func GitHooksEdit(ctx *middleware.Context) { func SettingsGitHooksEdit(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsGitHooks"] = true ctx.Data["PageIsSettingsGitHooks"] = true
@ -640,7 +640,7 @@ func GitHooksEdit(ctx *middleware.Context) {
ctx.HTML(200, GITHOOK_EDIT) ctx.HTML(200, GITHOOK_EDIT)
} }
func GitHooksEditPost(ctx *middleware.Context) { func SettingsGitHooksEditPost(ctx *middleware.Context) {
name := ctx.Params(":name") name := ctx.Params(":name")
hook, err := ctx.Repo.GitRepo.GetHook(name) hook, err := ctx.Repo.GitRepo.GetHook(name)
if err != nil { if err != nil {

View File

@ -1,33 +1,31 @@
{{template "ng/base/head" .}} {{template "base/head" .}}
{{template "ng/base/header" .}} <div class="repository settings edit hook">
<div id="repo-wrapper"> {{template "repo/header" .}}
{{template "repo/header_old" .}} <div class="ui container">
<div id="setting-wrapper" class="main-wrapper"> <div class="ui grid">
<div id="repo-setting" class="container clear"> {{template "repo/settings/navbar" .}}
{{template "repo/settings/nav" .}} <div class="twelve wide column content">
<div class="grid-4-5 left"> {{template "base/alert" .}}
<div class="setting-content"> <h4 class="ui top attached header">
{{template "ng/base/alert" .}} {{.i18n.Tr "repo.settings.githooks"}}
<div id="setting-content"> </h4>
<div id="repo-hooks-panel" class="panel panel-radius"> <div class="ui attached segment">
<div class="panel-header"> <p class="center">{{.i18n.Tr "repo.settings.githook_edit_desc"}}</p>
<strong>{{.i18n.Tr "repo.settings.githooks"}}</strong> <form class="ui form" action="{{.Link}}" method="post">
</div>
<form class="form form-align panel-body" id="repo-setting-form" action="{{.RepoLink}}/settings/hooks/git/{{.Hook.Name}}" method="post">
{{.CsrfTokenHtml}} {{.CsrfTokenHtml}}
<div class="text-center panel-desc">{{.i18n.Tr "repo.settings.githook_edit_desc"}}</div>
{{with .Hook}} {{with .Hook}}
<div class="field"> <div class="inline field">
<label>{{$.i18n.Tr "repo.settings.githook_name"}}</label> <label>{{$.i18n.Tr "repo.settings.githook_name"}}</label>
<label class="text-left">{{.Name}}</label> <label class="text left">{{.Name}}</label>
</div> </div>
<div class="field clear"> <div class="inline field">
<label class="left" for="content">{{$.i18n.Tr "repo.settings.githook_content"}}</label> <label for="content">{{$.i18n.Tr "repo.settings.githook_content"}}</label>
<textarea class="ipt-textarea ipt-large ipt-radius" id="content" name="content" cols="60" rows="20" wrap="off">{{if .IsActive}}{{.Content}}{{else}}{{.Sample}}{{end}}</textarea> <textarea id="content" name="content" rows="20" wrap="off">{{if .IsActive}}{{.Content}}{{else}}{{.Sample}}{{end}}</textarea>
</div> </div>
<div class="field">
<span class="form-label"></span> <div class="inline field">
<button class="btn btn-green btn-large btn-radius" id="change-reponame-btn" href="#change-reponame-modal">{{$.i18n.Tr "repo.settings.update_githook"}}</button> <label></label>
<button class="ui green button" id="change-reponame-btn" href="#change-reponame-modal">{{$.i18n.Tr "repo.settings.update_githook"}}</button>
</div> </div>
{{end}} {{end}}
</form> </form>
@ -35,7 +33,5 @@
</div> </div>
</div> </div>
</div> </div>
</div>
</div>
</div> </div>
{{template "ng/base/footer" .}} {{template "base/footer" .}}

View File

@ -1,37 +1,34 @@
{{template "ng/base/head" .}} {{template "base/head" .}}
{{template "ng/base/header" .}} <div class="repository settings hooks">
<div id="repo-wrapper"> {{template "repo/header" .}}
{{template "repo/header_old" .}} <div class="ui container">
<div id="setting-wrapper" class="main-wrapper"> <div class="ui grid">
<div id="repo-setting" class="container clear"> {{template "repo/settings/navbar" .}}
{{template "repo/settings/nav" .}} <div class="twelve wide column content">
<div class="grid-4-5 left"> {{template "base/alert" .}}
<div class="setting-content"> <h4 class="ui top attached header">
{{template "ng/base/alert" .}} {{.i18n.Tr "repo.settings.githooks"}}
<div id="setting-content"> </h4>
<div id="repo-hooks-panel" class="panel panel-radius"> <div class="ui attached table segment">
<div class="panel-header"> <div class="ui hook list">
<strong>{{.i18n.Tr "repo.settings.githooks"}}</strong> <div class="item">
{{.i18n.Tr "repo.settings.githooks_desc" | Str2html}}
</div> </div>
<ul class="panel-body setting-list">
<li>{{.i18n.Tr "repo.settings.githooks_desc" | Str2html}}</li>
{{range .Hooks}} {{range .Hooks}}
<li> <div class="item">
{{if .IsActive}} {{if .IsActive}}
<span class="left text-success"><i class="octicon octicon-check"></i></span> <span class="text success"><i class="octicon octicon-check"></i></span>
{{else}} {{else}}
<span class="left text-grey"><i class="octicon octicon-primitive-dot"></i></span> <span class="text grey"><i class="octicon octicon-primitive-dot"></i></span>
{{end}} {{end}}
<span>{{.Name}}</span> <span>{{.Name}}</span>
<a href="{{$.RepoLink}}/settings/hooks/git/{{.Name}}" class="text-blue right"><i class="fa fa-pencil"></i></a> <a href="{{$.RepoLink}}/settings/hooks/git/{{.Name}}" class="text blue ui right"><i class="fa fa-pencil"></i></a>
</li>
{{end}}
</ul>
</div> </div>
{{end}}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{{template "ng/base/footer" .}} {{template "base/footer" .}}