summaryrefslogtreecommitdiffstats
path: root/templates/webhook
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--templates/webhook/new.tmpl44
-rw-r--r--templates/webhook/new/dingtalk.tmpl9
-rw-r--r--templates/webhook/new/discord.tmpl17
-rw-r--r--templates/webhook/new/feishu.tmpl10
-rw-r--r--templates/webhook/new/forgejo.tmpl38
-rw-r--r--templates/webhook/new/gitea.tmpl38
-rw-r--r--templates/webhook/new/gogs.tmpl26
-rw-r--r--templates/webhook/new/matrix.tmpl32
-rw-r--r--templates/webhook/new/msteams.tmpl9
-rw-r--r--templates/webhook/new/packagist.tmpl17
-rw-r--r--templates/webhook/new/slack.tmpl26
-rw-r--r--templates/webhook/new/sourcehut_builds.tmpl39
-rw-r--r--templates/webhook/new/telegram.tmpl17
-rw-r--r--templates/webhook/new/wechatwork.tmpl9
-rw-r--r--templates/webhook/shared-settings.tmpl193
15 files changed, 524 insertions, 0 deletions
diff --git a/templates/webhook/new.tmpl b/templates/webhook/new.tmpl
new file mode 100644
index 0000000..a3fd896
--- /dev/null
+++ b/templates/webhook/new.tmpl
@@ -0,0 +1,44 @@
+<h4 class="ui top attached header">
+ {{.CustomHeaderTitle}}
+ <div class="ui right type dropdown">
+ <div class="text tw-flex tw-items-center">
+ {{.ctxData.WebhookHandler.Icon 20}}
+ {{ctx.Locale.Tr (print "repo.settings.web_hook_name_" .ctxData.HookType)}}
+ </div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ {{template "repo/settings/webhook/link_menu" .ctxData}}
+ </div>
+</h4>
+<div class="ui attached segment">
+ {{with .ctxData}}
+ <!-- the template argument cannot be dynamic -->
+ {{if eq .HookType "forgejo"}}
+ {{template "webhook/new/forgejo" .}}
+ {{else if eq .HookType "gitea"}}
+ {{template "webhook/new/gitea" .}}
+ {{else if eq .HookType "gogs"}}
+ {{template "webhook/new/gogs" .}}
+ {{else if eq .HookType "slack"}}
+ {{template "webhook/new/slack" .}}
+ {{else if eq .HookType "discord"}}
+ {{template "webhook/new/discord" .}}
+ {{else if eq .HookType "dingtalk"}}
+ {{template "webhook/new/dingtalk" .}}
+ {{else if eq .HookType "telegram"}}
+ {{template "webhook/new/telegram" .}}
+ {{else if eq .HookType "msteams"}}
+ {{template "webhook/new/msteams" .}}
+ {{else if eq .HookType "feishu"}}
+ {{template "webhook/new/feishu" .}}
+ {{else if eq .HookType "matrix"}}
+ {{template "webhook/new/matrix" .}}
+ {{else if eq .HookType "wechatwork"}}
+ {{template "webhook/new/wechatwork" .}}
+ {{else if eq .HookType "packagist"}}
+ {{template "webhook/new/packagist" .}}
+ {{else if eq .HookType "sourcehut_builds"}}
+ {{template "webhook/new/sourcehut_builds" .}}
+ {{end}}
+ {{end}}
+</div>
+{{template "repo/settings/webhook/history" .ctxData}}
diff --git a/templates/webhook/new/dingtalk.tmpl b/templates/webhook/new/dingtalk.tmpl
new file mode 100644
index 0000000..e805ead
--- /dev/null
+++ b/templates/webhook/new/dingtalk.tmpl
@@ -0,0 +1,9 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://dingtalk.com" (ctx.Locale.Tr "repo.settings.web_hook_name_dingtalk")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "dingtalk/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/discord.tmpl b/templates/webhook/new/discord.tmpl
new file mode 100644
index 0000000..455a96c
--- /dev/null
+++ b/templates/webhook/new/discord.tmpl
@@ -0,0 +1,17 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://discord.com" (ctx.Locale.Tr "repo.settings.web_hook_name_discord")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "discord/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="username">{{ctx.Locale.Tr "repo.settings.discord_username"}}</label>
+ <input id="username" name="username" value="{{.HookMetadata.Username}}" autofocus required placeholder="Forgejo">
+ </div>
+ <div class="field">
+ <label for="icon_url">{{ctx.Locale.Tr "repo.settings.discord_icon_url"}}</label>
+ <input id="icon_url" name="icon_url" value="{{.HookMetadata.IconURL}}" placeholder="https://example.com/assets/img/logo.svg">
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/feishu.tmpl b/templates/webhook/new/feishu.tmpl
new file mode 100644
index 0000000..10c2827
--- /dev/null
+++ b/templates/webhook/new/feishu.tmpl
@@ -0,0 +1,10 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://feishu.cn" (ctx.Locale.Tr "repo.settings.web_hook_name_feishu_only")}}</p>
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://larksuite.com" (ctx.Locale.Tr "repo.settings.web_hook_name_larksuite_only")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "feishu/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/forgejo.tmpl b/templates/webhook/new/forgejo.tmpl
new file mode 100644
index 0000000..cdb3334
--- /dev/null
+++ b/templates/webhook/new/forgejo.tmpl
@@ -0,0 +1,38 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://forgejo.org/docs/latest/user/webhooks/" (ctx.Locale.Tr "repo.settings.web_hook_name_forgejo")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "forgejo/new"}}" method="post">
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.http_method"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="http_method" name="http_method" value="{{if .Webhook.HTTPMethod}}{{.Webhook.HTTPMethod}}{{else}}POST{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="POST">POST</div>
+ <div class="item" data-value="GET">GET</div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.content_type"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="content_type" name="content_type" value="{{if .Webhook.ContentType}}{{.Webhook.ContentType}}{{else}}1{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="1">application/json</div>
+ <div class="item" data-value="2">application/x-www-form-urlencoded</div>
+ </div>
+ </div>
+ </div>
+ <div class="field {{if .Err_Secret}}error{{end}}">
+ <label for="secret">{{ctx.Locale.Tr "repo.settings.secret"}}</label>
+ <input id="secret" name="secret" type="password" value="{{.Webhook.Secret}}" autocomplete="off">
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/gitea.tmpl b/templates/webhook/new/gitea.tmpl
new file mode 100644
index 0000000..3926370
--- /dev/null
+++ b/templates/webhook/new/gitea.tmpl
@@ -0,0 +1,38 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://forgejo.org/docs/latest/user/webhooks/" (ctx.Locale.Tr "repo.settings.web_hook_name_gitea")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "gitea/new"}}" method="post">
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.http_method"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="http_method" name="http_method" value="{{if .Webhook.HTTPMethod}}{{.Webhook.HTTPMethod}}{{else}}POST{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="POST">POST</div>
+ <div class="item" data-value="GET">GET</div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.content_type"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="content_type" name="content_type" value="{{if .Webhook.ContentType}}{{.Webhook.ContentType}}{{else}}1{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="1">application/json</div>
+ <div class="item" data-value="2">application/x-www-form-urlencoded</div>
+ </div>
+ </div>
+ </div>
+ <div class="field {{if .Err_Secret}}error{{end}}">
+ <label for="secret">{{ctx.Locale.Tr "repo.settings.secret"}}</label>
+ <input id="secret" name="secret" type="password" value="{{.Webhook.Secret}}" autocomplete="off">
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/gogs.tmpl b/templates/webhook/new/gogs.tmpl
new file mode 100644
index 0000000..5b6cd72
--- /dev/null
+++ b/templates/webhook/new/gogs.tmpl
@@ -0,0 +1,26 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://forgejo.org/docs/latest/user/webhooks/" (ctx.Locale.Tr "repo.settings.web_hook_name_gogs")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "gogs/new"}}" method="post">
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.content_type"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="content_type" name="content_type" value="{{if .Webhook.ContentType}}{{.Webhook.ContentType}}{{else}}1{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="1">application/json</div>
+ <div class="item" data-value="2">application/x-www-form-urlencoded</div>
+ </div>
+ </div>
+ </div>
+ <div class="field {{if .Err_Secret}}error{{end}}">
+ <label for="secret">{{ctx.Locale.Tr "repo.settings.secret"}}</label>
+ <input id="secret" name="secret" type="password" value="{{.Webhook.Secret}}" autocomplete="off">
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/matrix.tmpl b/templates/webhook/new/matrix.tmpl
new file mode 100644
index 0000000..920180d
--- /dev/null
+++ b/templates/webhook/new/matrix.tmpl
@@ -0,0 +1,32 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://matrix.org/" (ctx.Locale.Tr "repo.settings.web_hook_name_matrix")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "matrix/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_HomeserverURL}}error{{end}}">
+ <label for="homeserver_url">{{ctx.Locale.Tr "repo.settings.matrix.homeserver_url"}}</label>
+ <input id="homeserver_url" name="homeserver_url" type="url" value="{{.HookMetadata.HomeserverURL}}" autofocus required>
+ </div>
+ <!-- Access Token -->
+ <div class="field required {{if .Err_AccessToken}}error{{end}}">
+ <label for="access_token">{{ctx.Locale.Tr "form.AccessToken"}}</label>
+ <input id="access_token" name="access_token" type="password" value="{{.Webhook.HeaderAuthorizationTrimPrefix "Bearer "}}" required>
+ <span class="help">{{ctx.Locale.Tr "repo.settings.matrix.access_token_helper"}}</span>
+ </div>
+ <div class="required field {{if .Err_Room}}error{{end}}">
+ <label for="room_id">{{ctx.Locale.Tr "repo.settings.matrix.room_id"}}</label>
+ <input id="room_id" name="room_id" type="text" value="{{.HookMetadata.Room}}" placeholder="!opaque_id:domain" pattern="^!.+:.+$" maxlength="255" required>
+ <span class="help">{{ctx.Locale.Tr "repo.settings.matrix.room_id_helper" ("<code>!opaque_id:example.org</code>"|SafeHTML)}}</span>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.matrix.message_type"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="message_type" name="message_type" value="{{if .HookMetadata.MessageType}}{{.HookMetadata.MessageType}}{{else}}1{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="1">m.notice</div>
+ <div class="item" data-value="2">m.text</div>
+ </div>
+ </div>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/msteams.tmpl b/templates/webhook/new/msteams.tmpl
new file mode 100644
index 0000000..535d0fc
--- /dev/null
+++ b/templates/webhook/new/msteams.tmpl
@@ -0,0 +1,9 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://teams.microsoft.com" (ctx.Locale.Tr "repo.settings.web_hook_name_msteams")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "msteams/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/packagist.tmpl b/templates/webhook/new/packagist.tmpl
new file mode 100644
index 0000000..04240bb
--- /dev/null
+++ b/templates/webhook/new/packagist.tmpl
@@ -0,0 +1,17 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://packagist.org" (ctx.Locale.Tr "repo.settings.web_hook_name_packagist")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "packagist/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_Username}}error{{end}}">
+ <label for="username">{{ctx.Locale.Tr "repo.settings.packagist_username"}}</label>
+ <input id="username" name="username" value="{{.HookMetadata.Username}}" placeholder="Forgejo" autofocus required>
+ </div>
+ <div class="required field {{if .Err_APIToken}}error{{end}}">
+ <label for="api_token">{{ctx.Locale.Tr "repo.settings.packagist_api_token"}}</label>
+ <input id="api_token" name="api_token" value="{{.HookMetadata.APIToken}}" placeholder="X5F_tZ-Wj3c1vqaU2Rky" required>
+ </div>
+ <div class="required field {{if .Err_PackageURL}}error{{end}}">
+ <label for="package_url">{{ctx.Locale.Tr "repo.settings.packagist_package_url"}}</label>
+ <input id="package_url" name="package_url" value="{{.HookMetadata.PackageURL}}" placeholder="https://packagist.org/packages/laravel/framework" required>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/slack.tmpl b/templates/webhook/new/slack.tmpl
new file mode 100644
index 0000000..cfaeb41
--- /dev/null
+++ b/templates/webhook/new/slack.tmpl
@@ -0,0 +1,26 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://slack.com" (ctx.Locale.Tr "repo.settings.web_hook_name_slack")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "slack/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ <div class="required field {{if .Err_Channel}}error{{end}}">
+ <label for="channel">{{ctx.Locale.Tr "repo.settings.slack_channel"}}</label>
+ <input id="channel" name="channel" value="{{.HookMetadata.Channel}}" placeholder="#general" required>
+ </div>
+
+ <div class="field">
+ <label for="username">{{ctx.Locale.Tr "repo.settings.slack_username"}}</label>
+ <input id="username" name="username" value="{{.HookMetadata.Username}}" placeholder="Forgejo">
+ </div>
+ <div class="field">
+ <label for="icon_url">{{ctx.Locale.Tr "repo.settings.slack_icon_url"}}</label>
+ <input id="icon_url" name="icon_url" value="{{.HookMetadata.IconURL}}" placeholder="https://example.com/img/favicon.png">
+ </div>
+ <div class="field">
+ <label for="color">{{ctx.Locale.Tr "repo.settings.slack_color"}}</label>
+ <input id="color" name="color" value="{{.HookMetadata.Color}}" placeholder="#dd4b39, good, warning, danger">
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/sourcehut_builds.tmpl b/templates/webhook/new/sourcehut_builds.tmpl
new file mode 100644
index 0000000..3bcbe1b
--- /dev/null
+++ b/templates/webhook/new/sourcehut_builds.tmpl
@@ -0,0 +1,39 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://sourcehut.org/" (ctx.Locale.Tr "repo.settings.web_hook_name_sourcehut_builds")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "sourcehut_builds/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.graphql_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{or .Webhook.URL "https://builds.sr.ht/query"}}" autofocus required>
+ </div>
+ <div class="required field {{if .Err_ManifestPath}}error{{end}}">
+ <label for="manifest_path">{{ctx.Locale.Tr "repo.settings.sourcehut_builds.manifest_path"}}</label>
+ <input id="manifest_path" name="manifest_path" type="text" value="{{or .HookMetadata.ManifestPath ".build.yml"}}" required>
+ </div>
+ <div class="field">
+ <label>{{ctx.Locale.Tr "repo.settings.sourcehut_builds.visibility"}}</label>
+ <div class="ui selection dropdown">
+ <input type="hidden" id="visibility" name="visibility" value="{{if .HookMetadata.Visibility}}{{.HookMetadata.Visibility}}{{else}}PRIVATE{{end}}">
+ <div class="default text"></div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu">
+ <div class="item" data-value="PUBLIC">PUBLIC</div>
+ <div class="item" data-value="UNLISTED">UNLISTED</div>
+ <div class="item" data-value="PRIVATE">PRIVATE</div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <div class="ui checkbox">
+ <input name="secrets" type="checkbox" {{if .HookMetadata.Secrets}}checked{{end}}>
+ <label>{{ctx.Locale.Tr "repo.settings.sourcehut_builds.secrets"}}</label>
+ <span class="help">{{ctx.Locale.Tr "repo.settings.sourcehut_builds.secrets_helper"}}</span>
+ </div>
+ </div>
+ <!-- Access Token -->
+ <div class="field required {{if .Err_AccessToken}}error{{end}}">
+ <label for="access_token">{{ctx.Locale.Tr "form.AccessToken"}}</label>
+ <input id="access_token" name="access_token" type="password" value="{{.Webhook.HeaderAuthorizationTrimPrefix "Bearer "}}" required>
+ <span class="help">{{ctx.Locale.Tr "repo.settings.sourcehut_builds.access_token_helper" "https://meta.sr.ht/oauth2/personal-token?grants=builds.sr.ht/JOBS:RW" "https://meta.sr.ht/oauth2/personal-token?grants=builds.sr.ht/JOBS:RW+builds.sr.ht/SECRETS:RO"}}</span>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/telegram.tmpl b/templates/webhook/new/telegram.tmpl
new file mode 100644
index 0000000..3627dff
--- /dev/null
+++ b/templates/webhook/new/telegram.tmpl
@@ -0,0 +1,17 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://core.telegram.org/bots" (ctx.Locale.Tr "repo.settings.web_hook_name_telegram")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "telegram/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_BotToken}}error{{end}}">
+ <label for="bot_token">{{ctx.Locale.Tr "repo.settings.bot_token"}}</label>
+ <input id="bot_token" name="bot_token" type="text" value="{{.HookMetadata.BotToken}}" autofocus required>
+ </div>
+ <div class="required field {{if .Err_ChatID}}error{{end}}">
+ <label for="chat_id">{{ctx.Locale.Tr "repo.settings.chat_id"}}</label>
+ <input id="chat_id" name="chat_id" type="text" value="{{.HookMetadata.ChatID}}" required>
+ </div>
+ <div class="field {{if .Err_ThreadID}}error{{end}}">
+ <label for="thread_id">{{ctx.Locale.Tr "repo.settings.thread_id"}}</label>
+ <input id="thread_id" name="thread_id" type="text" value="{{.HookMetadata.ThreadID}}">
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/new/wechatwork.tmpl b/templates/webhook/new/wechatwork.tmpl
new file mode 100644
index 0000000..ae9d36a
--- /dev/null
+++ b/templates/webhook/new/wechatwork.tmpl
@@ -0,0 +1,9 @@
+<p>{{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://work.weixin.qq.com" (ctx.Locale.Tr "repo.settings.web_hook_name_wechatwork")}}</p>
+<form class="ui form" action="{{.BaseLink}}/{{or .Webhook.ID "wechatwork/new"}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="required field {{if .Err_PayloadURL}}error{{end}}">
+ <label for="payload_url">{{ctx.Locale.Tr "repo.settings.payload_url"}}</label>
+ <input id="payload_url" name="payload_url" type="url" value="{{.Webhook.URL}}" autofocus required>
+ </div>
+ {{template "webhook/shared-settings" .}}
+</form>
diff --git a/templates/webhook/shared-settings.tmpl b/templates/webhook/shared-settings.tmpl
new file mode 100644
index 0000000..b6c05b7
--- /dev/null
+++ b/templates/webhook/shared-settings.tmpl
@@ -0,0 +1,193 @@
+{{$isNew:=or .PageIsSettingsHooksNew .PageIsAdminDefaultHooksNew .PageIsAdminSystemHooksNew}}
+<div class="field">
+ <fieldset class="event type">
+ <legend>{{ctx.Locale.Tr "repo.settings.event_desc"}}</legend>
+ <label>
+ <input name="events" type="radio" value="push_only" {{if or $isNew .Webhook.PushOnly}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_push_only"}}
+ </label>
+ <label>
+ <input name="events" type="radio" value="send_everything" {{if .Webhook.SendEverything}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_send_everything"}}
+ </label>
+ <label>
+ <input name="events" type="radio" value="choose_events" {{if .Webhook.ChooseEvents}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_choose"}}
+ </label>
+ <fieldset class="hide-unless-checked">
+ <!-- Repository Events -->
+ <fieldset class="simple-grid grid-2">
+ <legend>{{ctx.Locale.Tr "repo.settings.event_header_repository"}}</legend>
+ <!-- Create -->
+ <label>
+ <input name="create" type="checkbox" {{if .Webhook.Create}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_create"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_create_desc"}}</span>
+ </label>
+ <!-- Delete -->
+ <label>
+ <input name="delete" type="checkbox" {{if .Webhook.Delete}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_delete"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_delete_desc"}}</span>
+ </label>
+ <!-- Fork -->
+ <label>
+ <input name="fork" type="checkbox" {{if .Webhook.Fork}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_fork"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_fork_desc"}}</span>
+ </label>
+ <!-- Push -->
+ <label>
+ <input name="push" type="checkbox" {{if .Webhook.Push}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_push"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_push_desc"}}</span>
+ </label>
+ <!-- Repository -->
+ <label>
+ <input name="repository" type="checkbox" {{if .Webhook.Repository}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_repository"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_repository_desc"}}</span>
+ </label>
+ <!-- Release -->
+ <label>
+ <input name="release" type="checkbox" {{if .Webhook.Release}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_release"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_release_desc"}}</span>
+ </label>
+ <!-- Package -->
+ <label>
+ <input name="package" type="checkbox" {{if .Webhook.Package}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_package"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_package_desc"}}</span>
+ </label>
+ <!-- Wiki -->
+ <label>
+ <input name="wiki" type="checkbox" {{if .Webhook.Wiki}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_wiki"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_wiki_desc"}}</span>
+ </label>
+ </fieldset>
+ <!-- Issue Events -->
+ <fieldset class="simple-grid grid-2">
+ <legend>{{ctx.Locale.Tr "repo.settings.event_header_issue"}}</legend>
+ <!-- Issues -->
+ <label>
+ <input name="issues" type="checkbox" {{if .Webhook.Issues}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_issues"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_issues_desc"}}</span>
+ </label>
+ <!-- Issue Assign -->
+ <label>
+ <input name="issue_assign" type="checkbox" {{if .Webhook.IssueAssign}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_issue_assign"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_issue_assign_desc"}}</span>
+ </label>
+ <!-- Issue Label -->
+ <label>
+ <input name="issue_label" type="checkbox" {{if .Webhook.IssueLabel}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_issue_label"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_issue_label_desc"}}</span>
+ </label>
+ <!-- Issue Milestone -->
+ <label>
+ <input name="issue_milestone" type="checkbox" {{if .Webhook.IssueMilestone}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_issue_milestone"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_issue_milestone_desc"}}</span>
+ </label>
+ <!-- Issue Comment -->
+ <label>
+ <input name="issue_comment" type="checkbox" {{if .Webhook.IssueComment}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_issue_comment"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_issue_comment_desc"}}</span>
+ </label>
+ </fieldset>
+ <!-- Pull Request Events -->
+ <fieldset class="simple-grid grid-2">
+ <legend>{{ctx.Locale.Tr "repo.settings.event_header_pull_request"}}</legend>
+ <!-- Pull Request -->
+ <label>
+ <input name="pull_request" type="checkbox" {{if .Webhook.PullRequest}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_desc"}}</span>
+ </label>
+ <!-- Pull Request Assign -->
+ <label>
+ <input name="pull_request_assign" type="checkbox" {{if .Webhook.PullRequestAssign}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_assign"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_assign_desc"}}</span>
+ </label>
+ <!-- Pull Request Label -->
+ <label>
+ <input name="pull_request_label" type="checkbox" {{if .Webhook.PullRequestLabel}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_label"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_label_desc"}}</span>
+ </label>
+ <!-- Pull Request Milestone -->
+ <label>
+ <input name="pull_request_milestone" type="checkbox" {{if .Webhook.PullRequestMilestone}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_milestone"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_milestone_desc"}}</span>
+ </label>
+ <!-- Pull Request Comment -->
+ <label>
+ <input name="pull_request_comment" type="checkbox" {{if .Webhook.PullRequestComment}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_comment"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_comment_desc"}}</span>
+ </label>
+ <!-- Pull Request Review -->
+ <label>
+ <input name="pull_request_review" type="checkbox" {{if .Webhook.PullRequestReview}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_review"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_review_desc"}}</span>
+ </label>
+ <!-- Pull Request Sync -->
+ <label>
+ <input name="pull_request_sync" type="checkbox" {{if .Webhook.PullRequestSync}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_sync"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_sync_desc"}}</span>
+ </label>
+ <!-- Pull Request Review Request -->
+ <label>
+ <input name="pull_request_review_request" type="checkbox" {{if .Webhook.PullRequestReviewRequest}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_review_request"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.event_pull_request_review_request_desc"}}</span>
+ </label>
+ </fieldset>
+ </fieldset>
+ </fieldset>
+</div>
+
+<!-- Branch filter -->
+<div class="field">
+ <label for="branch_filter">{{ctx.Locale.Tr "repo.settings.branch_filter"}}</label>
+ <input id="branch_filter" name="branch_filter" type="text" value="{{or .Webhook.BranchFilter "*"}}">
+ <span class="help">{{ctx.Locale.Tr "repo.settings.branch_filter_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}</span>
+</div>
+
+{{$skipAuthorizationHeader := or (eq .HookType "sourcehut_builds") (eq .HookType "matrix")}}
+{{if not $skipAuthorizationHeader}}
+ <!-- Authorization Header -->
+ <div class="field {{if .Err_AuthorizationHeader}}error{{end}}">
+ <label for="authorization_header">{{ctx.Locale.Tr "repo.settings.authorization_header"}}</label>
+ <input id="authorization_header" name="authorization_header" type="text" value="{{.Webhook.HeaderAuthorization}}">
+ <span class="help">{{ctx.Locale.Tr "repo.settings.authorization_header_desc" ("<code>Bearer token123456</code>, <code>Basic YWxhZGRpbjpvcGVuc2VzYW1l</code>" | SafeHTML)}}</span>
+ </div>
+{{end}}
+
+<div class="divider"></div>
+
+<fieldset>
+ <label>
+ <input name="active" type="checkbox" {{if or $isNew .Webhook.IsActive}}checked{{end}}>
+ {{ctx.Locale.Tr "repo.settings.active"}}
+ <span class="help">{{ctx.Locale.Tr "repo.settings.active_helper"}}</span>
+ </label>
+ {{if $isNew}}
+ <button class="ui primary button">{{ctx.Locale.Tr "repo.settings.add_webhook"}}</button>
+ {{else}}
+ <button class="ui primary button">{{ctx.Locale.Tr "repo.settings.update_webhook"}}</button>
+ <a class="ui red delete-button button" data-url="{{.BaseLink}}/delete" data-id="{{.Webhook.ID}}">{{ctx.Locale.Tr "repo.settings.delete_webhook"}}</a>
+ {{end}}
+</fieldset>
+
+{{template "repo/settings/webhook/delete_modal" .}}