mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 19:38:23 +00:00 
			
		
		
		
	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:
		| @@ -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"> | ||||||
| 				{{svg "octicon-git-branch"}} | 				{{if $release}} | ||||||
| 				{{if .IsViewBranch}}{{.i18n.Tr "repo.branch"}}{{else}}{{.i18n.Tr "repo.tree"}}{{end}}: | 					{{.root.i18n.Tr "repo.release.compare"}} | ||||||
| 				<strong>{{if .IsViewBranch}}{{.BranchName}}{{else}}{{ShortSha .BranchName}}{{end}}</strong> | 				{{else}} | ||||||
|  | 					{{svg "octicon-git-branch"}} | ||||||
|  | 					{{if .root.IsViewBranch}}{{.root.i18n.Tr "repo.branch"}}{{else}}{{.root.i18n.Tr "repo.tree"}}{{end}}: | ||||||
|  | 					<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}} | 			{{end}} | ||||||
| 			{{range .Tags}} | 			{{range .root.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> | 				{{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}} | 			{{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> | ||||||
| 			<div class="header branch-tag-choice"> | 			{{if $showBranchesInDropdown}} | ||||||
| 				<div class="ui grid"> | 				<div class="header branch-tag-choice"> | ||||||
| 					<div class="two column row"> | 					<div class="ui grid"> | ||||||
| 						<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()"> | 						<div class="two column row"> | ||||||
| 							<span class="text" :class="{black: mode == 'branches'}"> | 							<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()"> | ||||||
| 								{{svg "octicon-git-branch" 16 "mr-2"}}{{.i18n.Tr "repo.branches"}} | 								<span class="text" :class="{black: mode == 'branches'}"> | ||||||
| 							</span> | 									{{svg "octicon-git-branch" 16 "mr-2"}}{{.root.i18n.Tr "repo.branches"}} | ||||||
| 						</a> | 								</span> | ||||||
| 						<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()"> | 							</a> | ||||||
| 							<span class="text" :class="{black: mode == 'tags'}"> | 							<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()"> | ||||||
| 								{{svg "octicon-tag" 16 "mr-2"}}{{.i18n.Tr "repo.tags"}} | 								<span class="text" :class="{black: mode == 'tags'}"> | ||||||
| 							</span> | 									{{svg "octicon-tag" 16 "mr-2"}}{{.root.i18n.Tr "repo.tags"}} | ||||||
| 						</a> | 								</span> | ||||||
|  | 							</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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user