mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-25 04:54:35 +00:00
7dbfed37eb
Adds per-event watch options, so a user can choose which repository notifications they receive. The watch button is now a menu with four modes: participating and mentions (the unwatched state, as on GitHub), all activity, ignore, and custom, which opens a dialog to pick issues, pull requests and releases. The same dialog is reachable from the gear icon on the watched repository list. Options apply to UI notifications and to mail. The watcher, star and fork counts moved inside their buttons, so all three share one shape, and the links to those lists moved to the repository sidebar. Assignees and requested reviewers now also receive UI notifications without having commented first. Buttons and dropdown: <img width="688" height="398" alt="image" src="https://github.com/user-attachments/assets/889b567d-086f-4a06-ac67-3a4205fc63b2" /> Modal: <img width="841" height="327" alt="Screenshot 2026-08-07 at 21 10 59" src="https://github.com/user-attachments/assets/3bedbff5-9011-4f1b-91a9-e8f5c212fb5d" /> New entries in sidebar: <img width="170" height="207" alt="Screenshot 2026-08-07 at 21 13 28" src="https://github.com/user-attachments/assets/5f5150cd-f42d-4543-bd0b-7334cf4aab0e" /> Fixes: https://github.com/go-gitea/gitea/issues/17238 Ref: https://github.com/go-gitea/gitea/issues/35492 --------- Co-authored-by: bircni <bircni@icloud.com> Co-authored-by: silverwind <me@silverwind.io>
86 lines
4.2 KiB
Handlebars
86 lines
4.2 KiB
Handlebars
<div class="repo-home-sidebar-top flex-relaxed-list">
|
|
<form class="ignore-dirty tw-flex" action="{{.RepoLink}}/search" method="get">
|
|
<div class="ui small action input tw-flex tw-flex-1">
|
|
<div class="ui input tw-flex tw-flex-1 global-shortcut-wrapper">
|
|
<input name="q" size="10" placeholder="{{ctx.Locale.Tr "search.code_kind"}}">
|
|
<kbd data-global-init="onGlobalShortcut" data-shortcut-keys="s">S</kbd>
|
|
</div>
|
|
{{template "shared/search/button"}}
|
|
</div>
|
|
</form>
|
|
|
|
<div class="flex-relaxed-list">
|
|
<div class="repo-home-sidebar-header">{{ctx.Locale.Tr "repo.repo_desc"}}</div>
|
|
|
|
<div class="repo-description tw-break-anywhere tw-gap-2">
|
|
{{- $description := .Repository.DescriptionHTML ctx -}}
|
|
{{if $description}}{{$description | RenderCodeBlock}}{{else}}{{ctx.Locale.Tr "repo.repo_no_desc"}}{{end}}
|
|
</div>
|
|
|
|
{{if .Repository.Website}}
|
|
<a class="flex-text-block" href="{{.Repository.Website}}">
|
|
{{svg "octicon-link" 16 "tw-text-text"}} <span class="tw-text-primary">{{.Repository.Website}}</span>
|
|
</a>
|
|
{{end}}
|
|
|
|
<div id="repo-topics" class="flex-text-block tw-flex-wrap tw-gap-1 tw-my-1 tw-text-text">
|
|
{{/* !!!! it SHOULD and MUST match the code in repo-home.ts */}}
|
|
{{range .Topics}}<a class="repo-topic ui large label gt-ellipsis" title={{.Name}} href="{{AppSubUrl}}/explore/repos?q={{.Name}}&topic=1">{{.Name}}</a>{{end}}
|
|
</div>
|
|
{{if and .Permission.IsAdmin (not .Repository.IsArchived)}}
|
|
<button id="manage_topic" class="btn interact-fg tw-mb-2 tw-text-12">{{ctx.Locale.Tr "repo.topic.manage_topics"}}</button>
|
|
<div class="ui form tw-hidden tw-my-2" id="topic_edit">
|
|
<div class="ui fluid multiple search selection dropdown tw-flex-wrap tw-flex-1">
|
|
<input type="hidden" name="topics" value="{{range $i, $v := .Topics}}{{.Name}}{{if Eval $i "+" 1 "<" (len $.Topics)}},{{end}}{{end}}">
|
|
{{range .Topics}}
|
|
{{/* keep the same layout as Fomantic UI generated labels */}}
|
|
<a class="ui label transition visible tw-cursor-default tw-inline-block repo-topic" data-value="{{.Name}}">{{.Name}}{{svg "octicon-x" 16 "delete icon"}}</a>
|
|
{{end}}
|
|
<div class="text"></div>
|
|
</div>
|
|
<div class="tw-my-2">
|
|
<button class="ui primary button" id="save_topic" data-link="{{.RepoLink}}/topics">{{ctx.Locale.Tr "save"}}</button>
|
|
<button class="ui basic button" id="cancel_topic_edit">{{ctx.Locale.Tr "cancel"}}</button>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if .ReadmeExist}}
|
|
<a class="flex-text-block muted" href="{{.RepoLink}}/src/{{.RefTypeNameSubURL}}/{{PathEscapeSegments .FileTreePath}}">
|
|
{{svg "octicon-book"}} {{ctx.Locale.Tr "readme"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{range $licenseGroup := .LicenseGroups}}
|
|
{{$licenseDisplayName := StringUtils.Join $licenseGroup.LicenseNames ", "}}
|
|
<a class="flex-text-block muted" title="{{$licenseDisplayName}}" href="{{$.RepoLink}}/src/{{$.Repository.DefaultBranch}}/{{PathEscapeSegments $licenseGroup.LicensePath}}">
|
|
{{svg "octicon-law"}} {{$licenseDisplayName}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .CitiationExist}}
|
|
{{template "repo/cite/cite_modal" .}}
|
|
<a class="flex-text-block muted" id="cite-repo-button">
|
|
{{svg "octicon-cross-reference"}} {{ctx.Locale.Tr "repo.cite_this_repo"}}
|
|
</a>
|
|
{{end}}
|
|
<div class="flex-text-block muted" {{if not (eq .Repository.Size 0)}}data-tooltip-content="{{.Repository.SizeDetailsString}}"{{end}}>
|
|
{{$fileSizeFormatted := FileSize .Repository.Size}}{{/* the formatted string is always "{val} {unit}" */}}
|
|
{{$fileSizeFields := StringUtils.Split $fileSizeFormatted " "}}
|
|
{{svg "octicon-database"}} <b>{{ctx.Locale.PrettyNumber (index $fileSizeFields 0)}}</b> {{index $fileSizeFields 1}}
|
|
</div>
|
|
|
|
{{if not .DisableStars}}
|
|
<a class="flex-text-block muted" href="{{.RepoLink}}/stars">
|
|
{{svg "octicon-star"}} <b>{{CountFmt .Repository.NumStars}}</b> {{ctx.Locale.Tr "repo.stars"}}
|
|
</a>
|
|
{{end}}
|
|
<a class="flex-text-block muted" href="{{.RepoLink}}/watchers">
|
|
{{svg "octicon-eye"}} <b>{{CountFmt .Repository.NumWatches}}</b> {{ctx.Locale.Tr "repo.watchers"}}
|
|
</a>
|
|
<a class="flex-text-block muted" href="{{.RepoLink}}/forks">
|
|
{{svg "octicon-repo-forked"}} <b>{{CountFmt .Repository.NumForks}}</b> {{ctx.Locale.Tr "repo.forks"}}
|
|
</a>
|
|
</div>
|
|
</div>
|