forked from NYANDEV/forgejo
Add compare tag dropdown to releases page (#15695)
* Add compare tag dropdown to releases page * Change defaults to be more intuitive and remove unneeded option * Fix to select branch on releases page Co-authored-by: Jonathan Tran <jon@allspice.io> Co-authored-by: Kyle D <kdumontnu@gmail.com>
This commit is contained in:
parent
1b017fe7ca
commit
5e047b9bd7
8 changed files with 78 additions and 36 deletions
|
@ -855,6 +855,7 @@ branch = Branch
|
||||||
tree = Tree
|
tree = Tree
|
||||||
clear_ref = `Clear current reference`
|
clear_ref = `Clear current reference`
|
||||||
filter_branch_and_tag = Filter branch or tag
|
filter_branch_and_tag = Filter branch or tag
|
||||||
|
find_tag = Find tag
|
||||||
branches = Branches
|
branches = Branches
|
||||||
tags = Tags
|
tags = Tags
|
||||||
issues = Issues
|
issues = Issues
|
||||||
|
@ -1913,6 +1914,7 @@ release.new_release = New Release
|
||||||
release.draft = Draft
|
release.draft = Draft
|
||||||
release.prerelease = Pre-Release
|
release.prerelease = Pre-Release
|
||||||
release.stable = Stable
|
release.stable = Stable
|
||||||
|
release.compare = Compare
|
||||||
release.edit = edit
|
release.edit = edit
|
||||||
release.ahead.commits = <strong>%d</strong> commits
|
release.ahead.commits = <strong>%d</strong> commits
|
||||||
release.ahead.target = to %s since this release
|
release.ahead.target = to %s since this release
|
||||||
|
|
|
@ -70,6 +70,11 @@ func TagsList(ctx *context.Context) {
|
||||||
func releasesOrTags(ctx *context.Context, isTagList bool) {
|
func releasesOrTags(ctx *context.Context, isTagList bool) {
|
||||||
ctx.Data["PageIsReleaseList"] = true
|
ctx.Data["PageIsReleaseList"] = true
|
||||||
ctx.Data["DefaultBranch"] = ctx.Repo.Repository.DefaultBranch
|
ctx.Data["DefaultBranch"] = ctx.Repo.Repository.DefaultBranch
|
||||||
|
ctx.Data["IsViewBranch"] = false
|
||||||
|
ctx.Data["IsViewTag"] = true
|
||||||
|
// Disable the showCreateNewBranch form in the dropdown on this page.
|
||||||
|
ctx.Data["CanCreateBranch"] = false
|
||||||
|
ctx.Data["HideBranchesInDropdown"] = true
|
||||||
|
|
||||||
if isTagList {
|
if isTagList {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.release.tags")
|
ctx.Data["Title"] = ctx.Tr("repo.release.tags")
|
||||||
|
@ -79,6 +84,13 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
|
||||||
ctx.Data["PageIsTagList"] = false
|
ctx.Data["PageIsTagList"] = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tags, err := ctx.Repo.GitRepo.GetTags()
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("GetTags", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Data["Tags"] = tags
|
||||||
|
|
||||||
writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases)
|
writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases)
|
||||||
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
|
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
|
||||||
|
|
||||||
|
|
|
@ -1,64 +1,78 @@
|
||||||
<div class="fitted item choose reference mr-1">
|
{{$release := .release}}
|
||||||
<div class="ui floating filter dropdown custom" data-can-create-branch="{{.CanCreateBranch}}" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}">
|
{{$showBranchesInDropdown := not .root.HideBranchesInDropdown}}
|
||||||
|
<div class="fitted item choose reference{{if not $release}} mr-1{{end}}">
|
||||||
|
<div class="ui floating filter dropdown custom" data-can-create-branch="{{.root.CanCreateBranch}}" data-no-results="{{.root.i18n.Tr "repo.pulls.no_results"}}">
|
||||||
<div class="ui basic small compact button" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible">
|
<div class="ui basic small compact button" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible">
|
||||||
<span class="text">
|
<span class="text">
|
||||||
|
{{if $release}}
|
||||||
|
{{.root.i18n.Tr "repo.release.compare"}}
|
||||||
|
{{else}}
|
||||||
{{svg "octicon-git-branch"}}
|
{{svg "octicon-git-branch"}}
|
||||||
{{if .IsViewBranch}}{{.i18n.Tr "repo.branch"}}{{else}}{{.i18n.Tr "repo.tree"}}{{end}}:
|
{{if .root.IsViewBranch}}{{.root.i18n.Tr "repo.branch"}}{{else}}{{.root.i18n.Tr "repo.tree"}}{{end}}:
|
||||||
<strong>{{if .IsViewBranch}}{{.BranchName}}{{else}}{{ShortSha .BranchName}}{{end}}</strong>
|
<strong>{{if .root.IsViewBranch}}{{.root.BranchName}}{{else}}{{ShortSha .root.BranchName}}{{end}}</strong>
|
||||||
|
{{end}}
|
||||||
</span>
|
</span>
|
||||||
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
||||||
</div>
|
</div>
|
||||||
<div class="data" style="display: none" data-mode="{{if .IsViewTag}}tags{{else}}branches{{end}}">
|
<div class="data" style="display: none" data-mode="{{if .root.IsViewTag}}tags{{else}}branches{{end}}">
|
||||||
{{range .Branches}}
|
{{if $showBranchesInDropdown}}
|
||||||
<div class="item branch {{if eq $.BranchName .}}selected{{end}}" data-url="{{$.RepoLink}}/{{if $.PageIsCommits}}commits{{else}}src{{end}}/branch/{{EscapePound .}}{{if $.TreePath}}/{{EscapePound $.TreePath}}{{end}}">{{.}}</div>
|
{{range .root.Branches}}
|
||||||
|
<div class="item branch {{if eq $.root.BranchName .}}selected{{end}}" data-url="{{$.root.RepoLink}}/{{if $.root.PageIsCommits}}commits{{else}}src{{end}}/branch/{{EscapePound .}}{{if $.root.TreePath}}/{{EscapePound $.root.TreePath}}{{end}}">{{.}}</div>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
{{range .root.Tags}}
|
||||||
|
{{if $release}}
|
||||||
|
<div class="item tag {{if eq $release.TagName .}}selected{{end}}" data-url="{{$.root.RepoLink}}/compare/{{EscapePound .}}...{{if $release.TagName}}{{EscapePound $release.TagName}}{{else}}{{EscapePound $release.Sha1}}{{end}}">{{.}}</div>
|
||||||
|
{{else}}
|
||||||
|
<div class="item tag {{if eq $.root.BranchName .}}selected{{end}}" data-url="{{$.root.RepoLink}}/{{if $.root.PageIsCommits}}commits{{else}}src{{end}}/tag/{{EscapePound .}}{{if $.root.TreePath}}/{{EscapePound $.root.TreePath}}{{end}}">{{.}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{range .Tags}}
|
|
||||||
<div class="item tag {{if eq $.BranchName .}}selected{{end}}" data-url="{{$.RepoLink}}/{{if $.PageIsCommits}}commits{{else}}src{{end}}/tag/{{EscapePound .}}{{if $.TreePath}}/{{EscapePound $.TreePath}}{{end}}">{{.}}</div>
|
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
<div class="menu transition" :class="{visible: menuVisible}" v-if="menuVisible" v-cloak>
|
<div class="menu transition" :class="{visible: menuVisible}" v-if="menuVisible" v-cloak>
|
||||||
<div class="ui icon search input">
|
<div class="ui icon search input">
|
||||||
<i class="icon df ac jc m-0">{{svg "octicon-filter" 16}}</i>
|
<i class="icon df ac jc m-0">{{svg "octicon-filter" 16}}</i>
|
||||||
<input name="search" ref="searchField" v-model="searchTerm" @keydown="keydown($event)" placeholder="{{.i18n.Tr "repo.filter_branch_and_tag"}}...">
|
<input name="search" ref="searchField" v-model="searchTerm" @keydown="keydown($event)" placeholder="{{if $showBranchesInDropdown}}{{.root.i18n.Tr "repo.filter_branch_and_tag"}}{{else}}{{.root.i18n.Tr "repo.find_tag"}}{{end}}...">
|
||||||
</div>
|
</div>
|
||||||
|
{{if $showBranchesInDropdown}}
|
||||||
<div class="header branch-tag-choice">
|
<div class="header branch-tag-choice">
|
||||||
<div class="ui grid">
|
<div class="ui grid">
|
||||||
<div class="two column row">
|
<div class="two column row">
|
||||||
<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()">
|
<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()">
|
||||||
<span class="text" :class="{black: mode == 'branches'}">
|
<span class="text" :class="{black: mode == 'branches'}">
|
||||||
{{svg "octicon-git-branch" 16 "mr-2"}}{{.i18n.Tr "repo.branches"}}
|
{{svg "octicon-git-branch" 16 "mr-2"}}{{.root.i18n.Tr "repo.branches"}}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()">
|
<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()">
|
||||||
<span class="text" :class="{black: mode == 'tags'}">
|
<span class="text" :class="{black: mode == 'tags'}">
|
||||||
{{svg "octicon-tag" 16 "mr-2"}}{{.i18n.Tr "repo.tags"}}
|
{{svg "octicon-tag" 16 "mr-2"}}{{.root.i18n.Tr "repo.tags"}}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{{end}}
|
||||||
<div class="scrolling menu" ref="scrollContainer">
|
<div class="scrolling menu" ref="scrollContainer">
|
||||||
<div v-for="(item, index) in filteredItems" :key="item.name" class="item" :class="{selected: item.selected, active: active == index}" @click="selectItem(item)" :ref="'listItem' + index">${ item.name }</div>
|
<div v-for="(item, index) in filteredItems" :key="item.name" class="item" :class="{selected: item.selected, active: active == index}" @click="selectItem(item)" :ref="'listItem' + index">${ item.name }</div>
|
||||||
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length">
|
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length">
|
||||||
<a href="#" @click="createNewBranch()">
|
<a href="#" @click="createNewBranch()">
|
||||||
<div v-show="createTag">
|
<div v-show="createTag">
|
||||||
<i class="reference tags icon"></i>
|
<i class="reference tags icon"></i>
|
||||||
{{.i18n.Tr "repo.tag.create_tag" `${ searchTerm }` | Safe}}
|
{{.root.i18n.Tr "repo.tag.create_tag" `${ searchTerm }` | Safe}}
|
||||||
</div>
|
</div>
|
||||||
<div v-show="!createTag">
|
<div v-show="!createTag">
|
||||||
{{svg "octicon-git-branch"}}
|
{{svg "octicon-git-branch"}}
|
||||||
{{.i18n.Tr "repo.branch.create_branch" `${ searchTerm }` | Safe}}
|
{{.root.i18n.Tr "repo.branch.create_branch" `${ searchTerm }` | Safe}}
|
||||||
</div>
|
</div>
|
||||||
<div class="text small">
|
<div class="text small">
|
||||||
{{if .IsViewBranch}}
|
{{if or .root.IsViewBranch $release}}
|
||||||
{{.i18n.Tr "repo.branch.create_from" .BranchName}}
|
{{.root.i18n.Tr "repo.branch.create_from" .root.BranchName}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{.i18n.Tr "repo.branch.create_from" (ShortSha .BranchName)}}
|
{{.root.i18n.Tr "repo.branch.create_from" (ShortSha .root.BranchName)}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<form ref="newBranchForm" action="{{.RepoLink}}/branches/_new/{{EscapePound .BranchNameSubURL}}" method="post">
|
<form ref="newBranchForm" action="{{.root.RepoLink}}/branches/_new/{{EscapePound .root.BranchNameSubURL}}" method="post">
|
||||||
{{.CsrfTokenHtml}}
|
{{.root.CsrfTokenHtml}}
|
||||||
<input type="hidden" name="new_branch_name" v-model="searchTerm">
|
<input type="hidden" name="new_branch_name" v-model="searchTerm">
|
||||||
<input type="hidden" name="create_tag" v-model="createTag">
|
<input type="hidden" name="create_tag" v-model="createTag">
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
{{template "repo/sub_menu" .}}
|
{{template "repo/sub_menu" .}}
|
||||||
<div class="ui secondary stackable menu mobile--margin-between-items">
|
<div class="ui secondary stackable menu mobile--margin-between-items">
|
||||||
{{template "repo/branch_dropdown" .}}
|
{{template "repo/branch_dropdown" dict "root" .}}
|
||||||
<div class="fitted item">
|
<div class="fitted item">
|
||||||
<a href="{{.RepoLink}}/graph" class="ui basic small compact button">
|
<a href="{{.RepoLink}}/graph" class="ui basic small compact button">
|
||||||
<span class="text">
|
<span class="text">
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
{{template "repo/sub_menu" .}}
|
{{template "repo/sub_menu" .}}
|
||||||
<div class="ui stackable secondary menu mobile--margin-between-items mobile--no-negative-margins">
|
<div class="ui stackable secondary menu mobile--margin-between-items mobile--no-negative-margins">
|
||||||
{{template "repo/branch_dropdown" .}}
|
{{template "repo/branch_dropdown" dict "root" .}}
|
||||||
{{ $n := len .TreeNames}}
|
{{ $n := len .TreeNames}}
|
||||||
{{ $l := Subtract $n 1}}
|
{{ $l := Subtract $n 1}}
|
||||||
<!-- If home page, show new PR. If not, show breadcrumb -->
|
<!-- If home page, show new PR. If not, show breadcrumb -->
|
||||||
|
|
|
@ -80,6 +80,7 @@
|
||||||
<span class="commit">
|
<span class="commit">
|
||||||
<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a>
|
<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a>
|
||||||
</span>
|
</span>
|
||||||
|
{{template "repo/branch_dropdown" dict "root" $ "release" .}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui twelve wide column detail">
|
<div class="ui twelve wide column detail">
|
||||||
|
|
|
@ -781,7 +781,8 @@ async function initRepository() {
|
||||||
});
|
});
|
||||||
|
|
||||||
// File list and commits
|
// File list and commits
|
||||||
if ($('.repository.file.list').length > 0 || ('.repository.commits').length > 0) {
|
if ($('.repository.file.list').length > 0 ||
|
||||||
|
$('.repository.commits').length > 0 || $('.repository.release').length > 0) {
|
||||||
initFilterBranchTagDropdown('.choose.reference .dropdown');
|
initFilterBranchTagDropdown('.choose.reference .dropdown');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1803,6 +1803,10 @@
|
||||||
text-align: right;
|
text-align: right;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.tag:not(.icon) {
|
.tag:not(.icon) {
|
||||||
display: block;
|
display: block;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
|
@ -1812,6 +1816,14 @@
|
||||||
display: block;
|
display: block;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.choose {
|
||||||
|
margin-top: 15px;
|
||||||
|
|
||||||
|
.button {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail {
|
.detail {
|
||||||
|
@ -1855,7 +1867,7 @@
|
||||||
width: 9px;
|
width: 9px;
|
||||||
height: 9px;
|
height: 9px;
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
z-index: 999;
|
z-index: 9;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: block;
|
display: block;
|
||||||
left: -5px;
|
left: -5px;
|
||||||
|
|
Loading…
Reference in a new issue