summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/webhook.go20
-rw-r--r--options/locale/locale_en-US.ini13
-rw-r--r--routers/admin/hooks.go54
-rw-r--r--routers/org/setting.go1
-rw-r--r--routers/repo/webhook.go30
-rw-r--r--routers/routes/macaron.go25
-rw-r--r--templates/admin/hook_new.tmpl10
-rw-r--r--templates/admin/hooks.tmpl7
-rw-r--r--templates/admin/navbar.tmpl5
-rw-r--r--templates/repo/settings/webhook/base_list.tmpl60
-rw-r--r--templates/repo/settings/webhook/list.tmpl62
-rw-r--r--templates/repo/settings/webhook/settings.tmpl2
12 files changed, 148 insertions, 141 deletions
diff --git a/models/webhook.go b/models/webhook.go
index e0a75843db..5174bb6128 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -400,20 +400,6 @@ func GetWebhooksByOrgID(orgID int64, listOptions ListOptions) ([]*Webhook, error
return ws, sess.Find(&ws, &Webhook{OrgID: orgID})
}
-// GetDefaultWebhook returns admin-default webhook by given ID.
-func GetDefaultWebhook(id int64) (*Webhook, error) {
- webhook := &Webhook{ID: id}
- has, err := x.
- Where("repo_id=? AND org_id=? AND is_system_webhook=?", 0, 0, false).
- Get(webhook)
- if err != nil {
- return nil, err
- } else if !has {
- return nil, ErrWebhookNotExist{id}
- }
- return webhook, nil
-}
-
// GetDefaultWebhooks returns all admin-default webhooks.
func GetDefaultWebhooks() ([]*Webhook, error) {
return getDefaultWebhooks(x)
@@ -426,11 +412,11 @@ func getDefaultWebhooks(e Engine) ([]*Webhook, error) {
Find(&webhooks)
}
-// GetSystemWebhook returns admin system webhook by given ID.
-func GetSystemWebhook(id int64) (*Webhook, error) {
+// GetSystemOrDefaultWebhook returns admin system or default webhook by given ID.
+func GetSystemOrDefaultWebhook(id int64) (*Webhook, error) {
webhook := &Webhook{ID: id}
has, err := x.
- Where("repo_id=? AND org_id=? AND is_system_webhook=?", 0, 0, true).
+ Where("repo_id=? AND org_id=?", 0, 0).
Get(webhook)
if err != nil {
return nil, err
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 48a43aa901..4264d260da 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -2001,8 +2001,7 @@ dashboard = Dashboard
users = User Accounts
organizations = Organizations
repositories = Repositories
-hooks = Default Webhooks
-systemhooks = System Webhooks
+hooks = Webhooks
authentication = Authentication Sources
emails = User Emails
config = Configuration
@@ -2152,11 +2151,13 @@ repos.forks = Forks
repos.issues = Issues
repos.size = Size
-hooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here are defaults and will be copied into all new repositories. Read more in the <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks guide</a>.
-hooks.add_webhook = Add Default Webhook
-hooks.update_webhook = Update Default Webhook
+defaulthooks = Default Webhooks
+defaulthooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here are defaults and will be copied into all new repositories. Read more in the <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks guide</a>.
+defaulthooks.add_webhook = Add Default Webhook
+defaulthooks.update_webhook = Update Default Webhook
-systemhooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined will act on all repositories on the system, so please consider any performance implications this may have. Read more in the <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks guide</a>.
+systemhooks = System Webhooks
+systemhooks.desc = Webhooks automatically make HTTP POST requests to a server when certain Gitea events trigger. Webhooks defined here will act on all repositories on the system, so please consider any performance implications this may have. Read more in the <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks guide</a>.
systemhooks.add_webhook = Add System Webhook
systemhooks.update_webhook = Update System Webhook
diff --git a/routers/admin/hooks.go b/routers/admin/hooks.go
index 4697c4d933..e233e8ac00 100644
--- a/routers/admin/hooks.go
+++ b/routers/admin/hooks.go
@@ -18,30 +18,41 @@ const (
// DefaultOrSystemWebhooks renders both admin default and system webhook list pages
func DefaultOrSystemWebhooks(ctx *context.Context) {
- var ws []*models.Webhook
var err error
- // Are we looking at default webhooks?
- if ctx.Params(":configType") == "hooks" {
- ctx.Data["Title"] = ctx.Tr("admin.hooks")
- ctx.Data["Description"] = ctx.Tr("admin.hooks.desc")
- ctx.Data["PageIsAdminHooks"] = true
- ctx.Data["BaseLink"] = setting.AppSubURL + "/admin/hooks"
- ws, err = models.GetDefaultWebhooks()
- } else {
- ctx.Data["Title"] = ctx.Tr("admin.systemhooks")
- ctx.Data["Description"] = ctx.Tr("admin.systemhooks.desc")
- ctx.Data["PageIsAdminSystemHooks"] = true
- ctx.Data["BaseLink"] = setting.AppSubURL + "/admin/system-hooks"
- ws, err = models.GetSystemWebhooks()
+ ctx.Data["PageIsAdminSystemHooks"] = true
+ ctx.Data["PageIsAdminDefaultHooks"] = true
+
+ def := make(map[string]interface{}, len(ctx.Data))
+ sys := make(map[string]interface{}, len(ctx.Data))
+ for k, v := range ctx.Data {
+ def[k] = v
+ sys[k] = v
+ }
+
+ sys["Title"] = ctx.Tr("admin.systemhooks")
+ sys["Description"] = ctx.Tr("admin.systemhooks.desc")
+ sys["Webhooks"], err = models.GetSystemWebhooks()
+ sys["BaseLink"] = setting.AppSubURL + "/admin/hooks"
+ sys["BaseLinkNew"] = setting.AppSubURL + "/admin/system-hooks"
+ if err != nil {
+ ctx.ServerError("GetWebhooksAdmin", err)
+ return
}
+ def["Title"] = ctx.Tr("admin.defaulthooks")
+ def["Description"] = ctx.Tr("admin.defaulthooks.desc")
+ def["Webhooks"], err = models.GetDefaultWebhooks()
+ def["BaseLink"] = setting.AppSubURL + "/admin/hooks"
+ def["BaseLinkNew"] = setting.AppSubURL + "/admin/default-hooks"
if err != nil {
ctx.ServerError("GetWebhooksAdmin", err)
return
}
- ctx.Data["Webhooks"] = ws
+ ctx.Data["DefaultWebhooks"] = def
+ ctx.Data["SystemWebhooks"] = sys
+
ctx.HTML(200, tplAdminHooks)
}
@@ -53,14 +64,7 @@ func DeleteDefaultOrSystemWebhook(ctx *context.Context) {
ctx.Flash.Success(ctx.Tr("repo.settings.webhook_deletion_success"))
}
- // Are we looking at default webhooks?
- if ctx.Params(":configType") == "hooks" {
- ctx.JSON(200, map[string]interface{}{
- "redirect": setting.AppSubURL + "/admin/hooks",
- })
- } else {
- ctx.JSON(200, map[string]interface{}{
- "redirect": setting.AppSubURL + "/admin/system-hooks",
- })
- }
+ ctx.JSON(200, map[string]interface{}{
+ "redirect": setting.AppSubURL + "/admin/hooks",
+ })
}
diff --git a/routers/org/setting.go b/routers/org/setting.go
index 454714c7eb..05075ca820 100644
--- a/routers/org/setting.go
+++ b/routers/org/setting.go
@@ -173,6 +173,7 @@ func Webhooks(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("org.settings")
ctx.Data["PageIsSettingsHooks"] = true
ctx.Data["BaseLink"] = ctx.Org.OrgLink + "/settings/hooks"
+ ctx.Data["BaseLinkNew"] = ctx.Org.OrgLink + "/settings/hooks"
ctx.Data["Description"] = ctx.Tr("org.settings.hooks_desc")
ws, err := models.GetWebhooksByOrgID(ctx.Org.Organization.ID, models.ListOptions{})
diff --git a/routers/repo/webhook.go b/routers/repo/webhook.go
index 0c3fd1267d..5d7074b339 100644
--- a/routers/repo/webhook.go
+++ b/routers/repo/webhook.go
@@ -36,6 +36,7 @@ func Webhooks(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.hooks")
ctx.Data["PageIsSettingsHooks"] = true
ctx.Data["BaseLink"] = ctx.Repo.RepoLink + "/settings/hooks"
+ ctx.Data["BaseLinkNew"] = ctx.Repo.RepoLink + "/settings/hooks"
ctx.Data["Description"] = ctx.Tr("repo.settings.hooks_desc", "https://docs.gitea.io/en-us/webhooks/")
ws, err := models.GetWebhooksByRepoID(ctx.Repo.Repository.ID, models.ListOptions{})
@@ -54,6 +55,7 @@ type orgRepoCtx struct {
IsAdmin bool
IsSystemWebhook bool
Link string
+ LinkNew string
NewTemplate base.TplName
}
@@ -63,6 +65,7 @@ func getOrgRepoCtx(ctx *context.Context) (*orgRepoCtx, error) {
return &orgRepoCtx{
RepoID: ctx.Repo.Repository.ID,
Link: path.Join(ctx.Repo.RepoLink, "settings/hooks"),
+ LinkNew: path.Join(ctx.Repo.RepoLink, "settings/hooks"),
NewTemplate: tplHookNew,
}, nil
}
@@ -71,16 +74,18 @@ func getOrgRepoCtx(ctx *context.Context) (*orgRepoCtx, error) {
return &orgRepoCtx{
OrgID: ctx.Org.Organization.ID,
Link: path.Join(ctx.Org.OrgLink, "settings/hooks"),
+ LinkNew: path.Join(ctx.Org.OrgLink, "settings/hooks"),
NewTemplate: tplOrgHookNew,
}, nil
}
if ctx.User.IsAdmin {
// Are we looking at default webhooks?
- if ctx.Params(":configType") == "hooks" {
+ if ctx.Params(":configType") == "default-hooks" {
return &orgRepoCtx{
IsAdmin: true,
Link: path.Join(setting.AppSubURL, "/admin/hooks"),
+ LinkNew: path.Join(setting.AppSubURL, "/admin/default-hooks"),
NewTemplate: tplAdminHookNew,
}, nil
}
@@ -89,7 +94,8 @@ func getOrgRepoCtx(ctx *context.Context) (*orgRepoCtx, error) {
return &orgRepoCtx{
IsAdmin: true,
IsSystemWebhook: true,
- Link: path.Join(setting.AppSubURL, "/admin/system-hooks"),
+ Link: path.Join(setting.AppSubURL, "/admin/hooks"),
+ LinkNew: path.Join(setting.AppSubURL, "/admin/system-hooks"),
NewTemplate: tplAdminHookNew,
}, nil
}
@@ -121,8 +127,8 @@ func WebhooksNew(ctx *context.Context) {
ctx.Data["PageIsAdminSystemHooks"] = true
ctx.Data["PageIsAdminSystemHooksNew"] = true
} else if orCtx.IsAdmin {
- ctx.Data["PageIsAdminHooks"] = true
- ctx.Data["PageIsAdminHooksNew"] = true
+ ctx.Data["PageIsAdminDefaultHooks"] = true
+ ctx.Data["PageIsAdminDefaultHooksNew"] = true
} else {
ctx.Data["PageIsSettingsHooks"] = true
ctx.Data["PageIsSettingsHooksNew"] = true
@@ -139,7 +145,7 @@ func WebhooksNew(ctx *context.Context) {
"IconURL": setting.AppURL + "img/favicon.png",
}
}
- ctx.Data["BaseLink"] = orCtx.Link
+ ctx.Data["BaseLink"] = orCtx.LinkNew
ctx.HTML(200, orCtx.NewTemplate)
}
@@ -187,7 +193,7 @@ func GiteaHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) {
ctx.ServerError("getOrgRepoCtx", err)
return
}
- ctx.Data["BaseLink"] = orCtx.Link
+ ctx.Data["BaseLink"] = orCtx.LinkNew
if ctx.HasError() {
ctx.HTML(200, orCtx.NewTemplate)
@@ -241,7 +247,7 @@ func newGogsWebhookPost(ctx *context.Context, form auth.NewGogshookForm, kind mo
ctx.ServerError("getOrgRepoCtx", err)
return
}
- ctx.Data["BaseLink"] = orCtx.Link
+ ctx.Data["BaseLink"] = orCtx.LinkNew
if ctx.HasError() {
ctx.HTML(200, orCtx.NewTemplate)
@@ -537,7 +543,7 @@ func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) {
if form.HasInvalidChannel() {
ctx.Flash.Error(ctx.Tr("repo.settings.add_webhook.invalid_channel_name"))
- ctx.Redirect(orCtx.Link + "/slack/new")
+ ctx.Redirect(orCtx.LinkNew + "/slack/new")
return
}
@@ -632,12 +638,10 @@ func checkWebhook(ctx *context.Context) (*orgRepoCtx, *models.Webhook) {
w, err = models.GetWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
} else if orCtx.OrgID > 0 {
w, err = models.GetWebhookByOrgID(ctx.Org.Organization.ID, ctx.ParamsInt64(":id"))
- } else if orCtx.IsSystemWebhook {
- w, err = models.GetSystemWebhook(ctx.ParamsInt64(":id"))
- } else {
- w, err = models.GetDefaultWebhook(ctx.ParamsInt64(":id"))
+ } else if orCtx.IsAdmin {
+ w, err = models.GetSystemOrDefaultWebhook(ctx.ParamsInt64(":id"))
}
- if err != nil {
+ if err != nil || w == nil {
if models.IsErrWebhookNotExist(err) {
ctx.NotFound("GetWebhookByID", nil)
} else {
diff --git a/routers/routes/macaron.go b/routers/routes/macaron.go
index 66c39b7f82..d331e4ca83 100644
--- a/routers/routes/macaron.go
+++ b/routers/routes/macaron.go
@@ -370,19 +370,9 @@ func RegisterMacaronRoutes(m *macaron.Macaron) {
m.Post("/delete", admin.DeleteRepo)
})
- m.Group("/^:configType(hooks|system-hooks)$", func() {
+ m.Group("/hooks", func() {
m.Get("", admin.DefaultOrSystemWebhooks)
m.Post("/delete", admin.DeleteDefaultOrSystemWebhook)
- m.Get("/:type/new", repo.WebhooksNew)
- m.Post("/gitea/new", bindIgnErr(auth.NewWebhookForm{}), repo.GiteaHooksNewPost)
- m.Post("/gogs/new", bindIgnErr(auth.NewGogshookForm{}), repo.GogsHooksNewPost)
- m.Post("/slack/new", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksNewPost)
- m.Post("/discord/new", bindIgnErr(auth.NewDiscordHookForm{}), repo.DiscordHooksNewPost)
- m.Post("/dingtalk/new", bindIgnErr(auth.NewDingtalkHookForm{}), repo.DingtalkHooksNewPost)
- m.Post("/telegram/new", bindIgnErr(auth.NewTelegramHookForm{}), repo.TelegramHooksNewPost)
- m.Post("/matrix/new", bindIgnErr(auth.NewMatrixHookForm{}), repo.MatrixHooksNewPost)
- m.Post("/msteams/new", bindIgnErr(auth.NewMSTeamsHookForm{}), repo.MSTeamsHooksNewPost)
- m.Post("/feishu/new", bindIgnErr(auth.NewFeishuHookForm{}), repo.FeishuHooksNewPost)
m.Get("/:id", repo.WebHooksEdit)
m.Post("/gitea/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost)
m.Post("/gogs/:id", bindIgnErr(auth.NewGogshookForm{}), repo.GogsHooksEditPost)
@@ -395,6 +385,19 @@ func RegisterMacaronRoutes(m *macaron.Macaron) {
m.Post("/feishu/:id", bindIgnErr(auth.NewFeishuHookForm{}), repo.FeishuHooksEditPost)
})
+ m.Group("/^:configType(default-hooks|system-hooks)$", func() {
+ m.Get("/:type/new", repo.WebhooksNew)
+ m.Post("/gitea/new", bindIgnErr(auth.NewWebhookForm{}), repo.GiteaHooksNewPost)
+ m.Post("/gogs/new", bindIgnErr(auth.NewGogshookForm{}), repo.GogsHooksNewPost)
+ m.Post("/slack/new", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksNewPost)
+ m.Post("/discord/new", bindIgnErr(auth.NewDiscordHookForm{}), repo.DiscordHooksNewPost)
+ m.Post("/dingtalk/new", bindIgnErr(auth.NewDingtalkHookForm{}), repo.DingtalkHooksNewPost)
+ m.Post("/telegram/new", bindIgnErr(auth.NewTelegramHookForm{}), repo.TelegramHooksNewPost)
+ m.Post("/matrix/new", bindIgnErr(auth.NewMatrixHookForm{}), repo.MatrixHooksNewPost)
+ m.Post("/msteams/new", bindIgnErr(auth.NewMSTeamsHookForm{}), repo.MSTeamsHooksNewPost)
+ m.Post("/feishu/new", bindIgnErr(auth.NewFeishuHookForm{}), repo.FeishuHooksNewPost)
+ })
+
m.Group("/auths", func() {
m.Get("", admin.Authentications)
m.Combo("/new").Get(admin.NewAuthSource).Post(bindIgnErr(auth.AuthenticationForm{}), admin.NewAuthSourcePost)
diff --git a/templates/admin/hook_new.tmpl b/templates/admin/hook_new.tmpl
index c6f02ee20e..9b251ec4cb 100644
--- a/templates/admin/hook_new.tmpl
+++ b/templates/admin/hook_new.tmpl
@@ -4,10 +4,14 @@
<div class="ui container">
{{template "base/alert" .}}
<h4 class="ui top attached header">
- {{if .PageIsAdminHooksNew}}
- {{.i18n.Tr "admin.hooks.add_webhook"}}
+ {{if .PageIsAdminDefaultHooksNew}}
+ {{.i18n.Tr "admin.defaulthooks.add_webhook"}}
+ {{else if .PageIsAdminSystemHooksNew}}
+ {{.i18n.Tr "admin.systemhooks.add_webhook"}}
+ {{else if .Webhook.IsSystemWebhook}}
+ {{.i18n.Tr "admin.systemhooks.update_webhook"}}
{{else}}
- {{.i18n.Tr "admin.hooks.update_webhook"}}
+ {{.i18n.Tr "admin.defaulthooks.update_webhook"}}
{{end}}
<div class="ui right">
{{if eq .HookType "gitea"}}
diff --git a/templates/admin/hooks.tmpl b/templates/admin/hooks.tmpl
index c09c6fcafe..a23cff4342 100644
--- a/templates/admin/hooks.tmpl
+++ b/templates/admin/hooks.tmpl
@@ -2,7 +2,12 @@
<div class="page-content admin hooks">
{{template "admin/navbar" .}}
<div class="ui container">
- {{template "repo/settings/webhook/list" .}}
+ {{template "base/alert" .}}
+
+ {{template "repo/settings/webhook/base_list" .SystemWebhooks}}
+ {{template "repo/settings/webhook/base_list" .DefaultWebhooks}}
+
+ {{template "repo/settings/webhook/delete_modal" .}}
</div>
</div>
{{template "base/footer" .}}
diff --git a/templates/admin/navbar.tmpl b/templates/admin/navbar.tmpl
index 8c895b8c27..953076d808 100644
--- a/templates/admin/navbar.tmpl
+++ b/templates/admin/navbar.tmpl
@@ -12,12 +12,9 @@
<a class="{{if .PageIsAdminRepositories}}active{{end}} item" href="{{AppSubUrl}}/admin/repos">
{{.i18n.Tr "admin.repositories"}}
</a>
- <a class="{{if .PageIsAdminHooks}}active{{end}} item" href="{{AppSubUrl}}/admin/hooks">
+ <a class="{{if or .PageIsAdminDefaultHooks .PageIsAdminSystemHooks}}active{{end}} item" href="{{AppSubUrl}}/admin/hooks">
{{.i18n.Tr "admin.hooks"}}
</a>
- <a class="{{if .PageIsAdminSystemHooks}}active{{end}} item" href="{{AppSubUrl}}/admin/system-hooks">
- {{.i18n.Tr "admin.systemhooks"}}
- </a>
<a class="{{if .PageIsAdminAuthentications}}active{{end}} item" href="{{AppSubUrl}}/admin/auths">
{{.i18n.Tr "admin.authentication"}}
</a>
diff --git a/templates/repo/settings/webhook/base_list.tmpl b/templates/repo/settings/webhook/base_list.tmpl
new file mode 100644
index 0000000000..b978a6a19c
--- /dev/null
+++ b/templates/repo/settings/webhook/base_list.tmpl
@@ -0,0 +1,60 @@
+<h4 class="ui top attached header">
+ {{.Title}}
+ <div class="ui right">
+ <div class="ui floating1 jump dropdown">
+ <div class="ui blue tiny button">{{.i18n.Tr "repo.settings.add_webhook"}}</div>
+ <div class="menu">
+ <a class="item" href="{{.BaseLinkNew}}/gitea/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/gitea.svg">Gitea
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/gogs/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/gogs.ico">Gogs
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/slack/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/slack.png">Slack
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/discord/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/discord.png">Discord
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/dingtalk/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/dingtalk.ico">Dingtalk
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/telegram/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/telegram.png">Telegram
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/msteams/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/msteams.png">Microsoft Teams
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/feishu/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/feishu.png">Feishu
+ </a>
+ <a class="item" href="{{.BaseLinkNew}}/matrix/new">
+ <img width="20" height="20" src="{{StaticUrlPrefix}}/img/matrix.svg">Matrix
+ </a>
+ </div>
+ </div>
+ </div>
+</h4>
+<div class="ui attached segment">
+ <div class="ui list">
+ <div class="item">
+ {{.Description | Str2html}}
+ </div>
+ {{range .Webhooks}}
+ <div class="item">
+ {{if eq .LastStatus 1}}
+ <span class="text green mr-3">{{svg "octicon-check"}}</span>
+ {{else if eq .LastStatus 2}}
+ <span class="text red mr-3">{{svg "octicon-alert"}}</span>
+ {{else}}
+ <span class="text grey mr-3">{{svg "octicon-dot-fill"}}</span>
+ {{end}}
+ <a class="dont-break-out" href="{{$.BaseLink}}/{{.ID}}">{{.URL}}</a>
+ <div class="ui right">
+ <span class="text blue px-2"><a href="{{$.BaseLink}}/{{.ID}}">{{svg "octicon-pencil"}}</a></span>
+ <span class="text red px-2"><a class="delete-button" data-url="{{$.Link}}/delete" data-id="{{.ID}}">{{svg "octicon-trashcan"}}</a></span>
+ </div>
+ </div>
+ {{end}}
+ </div>
+</div>
diff --git a/templates/repo/settings/webhook/list.tmpl b/templates/repo/settings/webhook/list.tmpl
index 5efd6d4a3c..507f5e1f67 100644
--- a/templates/repo/settings/webhook/list.tmpl
+++ b/templates/repo/settings/webhook/list.tmpl
@@ -1,63 +1,5 @@
{{template "base/alert" .}}
-<h4 class="ui top attached header">
- {{.i18n.Tr "repo.settings.hooks"}}
- <div class="ui right">
- <div class="ui floating1 jump dropdown">
- <div class="ui blue tiny button">{{.i18n.Tr "repo.settings.add_webhook"}}</div>
- <div class="menu">
- <a class="item" href="{{.BaseLink}}/gitea/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/gitea.svg">Gitea
- </a>
- <a class="item" href="{{.BaseLink}}/gogs/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/gogs.ico">Gogs
- </a>
- <a class="item" href="{{.BaseLink}}/slack/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/slack.png">Slack
- </a>
- <a class="item" href="{{.BaseLink}}/discord/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/discord.png">Discord
- </a>
- <a class="item" href="{{.BaseLink}}/dingtalk/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/dingtalk.ico">Dingtalk
- </a>
- <a class="item" href="{{.BaseLink}}/telegram/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/telegram.png">Telegram
- </a>
- <a class="item" href="{{.BaseLink}}/msteams/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/msteams.png">Microsoft Teams
- </a>
- <a class="item" href="{{.BaseLink}}/feishu/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/feishu.png">Feishu
- </a>
- <a class="item" href="{{.BaseLink}}/matrix/new">
- <img width="20" height="20" src="{{StaticUrlPrefix}}/img/matrix.svg">Matrix
- </a>
- </div>
- </div>
- </div>
-</h4>
-<div class="ui attached segment">
- <div class="ui list">
- <div class="item">
- {{.Description | Str2html}}
- </div>
- {{range .Webhooks}}
- <div class="item">
- {{if eq .LastStatus 1}}
- <span class="text green mr-3">{{svg "octicon-check"}}</span>
- {{else if eq .LastStatus 2}}
- <span class="text red mr-3">{{svg "octicon-alert"}}</span>
- {{else}}
- <span class="text grey mr-3">{{svg "octicon-dot-fill"}}</span>
- {{end}}
- <a class="dont-break-out" href="{{$.BaseLink}}/{{.ID}}">{{.URL}}</a>
- <div class="ui right">
- <span class="text blue px-2"><a href="{{$.BaseLink}}/{{.ID}}">{{svg "octicon-pencil"}}</a></span>
- <span class="text red px-2"><a class="delete-button" data-url="{{$.Link}}/delete" data-id="{{.ID}}">{{svg "octicon-trashcan"}}</a></span>
- </div>
- </div>
- {{end}}
- </div>
-</div>
+
+{{template "repo/settings/webhook/base_list" .}}
{{template "repo/settings/webhook/delete_modal" .}}
diff --git a/templates/repo/settings/webhook/settings.tmpl b/templates/repo/settings/webhook/settings.tmpl
index de74dab05d..934794b539 100644
--- a/templates/repo/settings/webhook/settings.tmpl
+++ b/templates/repo/settings/webhook/settings.tmpl
@@ -1,4 +1,4 @@
-{{$isNew:=or .PageIsSettingsHooksNew .PageIsAdminHooksNew}}
+{{$isNew:=or .PageIsSettingsHooksNew .PageIsAdminDefaultHooksNew .PageIsAdminSystemHooksNew}}
<div class="field">
<h4>{{.i18n.Tr "repo.settings.event_desc"}}</h4>
<div class="grouped event type fields">