mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Backport #27115 by @puni9869 Followup https://github.com/go-gitea/gitea/pull/26820 ## Archived labels UI for issue filter and issue filter actions for issues/pull request pages. Changed: * Enhanced the Issue filter and Issue filter actions UI page to seamlessly incorporate a list of archived labels. * Pagination functionality is same as before. If archived label checkbox is checked then we are adding a query string`archived=true` in the url to save the state of page. * Issue filter actions menu is separated into different template. * Adding the archived flag in issue url labels. * Pull Request page is also work the same. Outsourced: * Defer the implementation of specialized handling for archived labels to upcoming pull requests. This step will be undertaken subsequent to the successful merge of this pull request. Screenshots ### Issue page <img width="1360" alt="image" src="https://github.com/go-gitea/gitea/assets/80308335/d7efb2ef-5b2b-449d-83f0-d430a32ec432"> ### Issue page with label filter on archived label checkbox when not checked --> No archived label is there in list <img width="1249" alt="image" src="https://github.com/go-gitea/gitea/assets/80308335/ceea68ef-91f2-4693-910f-2e25e236bfc9"> ### Issue page with label filter on archived label checkbox when checked --> Show archived label in the list. <img width="710" alt="image" src="https://github.com/go-gitea/gitea/assets/80308335/2414d26b-2079-4c3c-bd9e-f2f5411bcabf"> ### Issue page with label filter on issue action menu on archived label checkbox when checked --> Show archived label in the list. <img width="409" alt="image" src="https://github.com/go-gitea/gitea/assets/80308335/259cac87-3e21-4778-99a2-a6a0b8c81178"> ### Applied the archived=true in Issue labels when archived checkbox is checked. <img width="984" alt="image" src="https://github.com/go-gitea/gitea/assets/80308335/657ce3db-c0ae-402e-b12d-3b580d3c2ed0"> --- Part of https://github.com/go-gitea/gitea/issues/25237 Signed-off-by: puni9869 <punitinani1@hotmail.com> Co-authored-by: puni9869 <80308335+puni9869@users.noreply.github.com> Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
		| @@ -1517,7 +1517,8 @@ issues.label_description = Description | |||||||
| issues.label_color = Color | issues.label_color = Color | ||||||
| issues.label_exclusive = Exclusive | issues.label_exclusive = Exclusive | ||||||
| issues.label_archive = Archive Label | issues.label_archive = Archive Label | ||||||
| issues.label_archive_tooltip= Archived labels are excluded from the label search when applying labels to an issue. Existing labels on issues remain unaffected, allowing you to retire obsolete labels without losing information. | issues.label_archived_filter = Show archived labels | ||||||
|  | issues.label_archive_tooltip = Archived labels are excluded by default from the suggestions when searching by label. | ||||||
| issues.label_exclusive_desc = Name the label <code>scope/item</code> to make it mutually exclusive with other <code>scope/</code> labels. | issues.label_exclusive_desc = Name the label <code>scope/item</code> to make it mutually exclusive with other <code>scope/</code> labels. | ||||||
| issues.label_exclusive_warning = Any conflicting scoped labels will be removed when editing the labels of an issue or pull request. | issues.label_exclusive_warning = Any conflicting scoped labels will be removed when editing the labels of an issue or pull request. | ||||||
| issues.label_count = %d labels | issues.label_count = %d labels | ||||||
|   | |||||||
| @@ -442,6 +442,11 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti | |||||||
| 	pager.AddParam(ctx, "project", "ProjectID") | 	pager.AddParam(ctx, "project", "ProjectID") | ||||||
| 	pager.AddParam(ctx, "assignee", "AssigneeID") | 	pager.AddParam(ctx, "assignee", "AssigneeID") | ||||||
| 	pager.AddParam(ctx, "poster", "PosterID") | 	pager.AddParam(ctx, "poster", "PosterID") | ||||||
|  |  | ||||||
|  | 	if ctx.FormBool("archived") { | ||||||
|  | 		ctx.Data["ShowArchivedLabels"] = true | ||||||
|  | 		pager.AddParam(ctx, "archived", "ShowArchivedLabels") | ||||||
|  | 	} | ||||||
| 	ctx.Data["Page"] = pager | 	ctx.Data["Page"] = pager | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										130
									
								
								templates/repo/issue/filter_actions.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								templates/repo/issue/filter_actions.tmpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | |||||||
|  | <div class="ui secondary filter menu"> | ||||||
|  | 	{{if not .Repository.IsArchived}} | ||||||
|  | 		<!-- Action Button --> | ||||||
|  | 		{{if .IsShowClosed}} | ||||||
|  | 			<button class="ui primary basic button issue-action" data-action="open" data-url="{{$.RepoLink}}/issues/status">{{ctx.Locale.Tr "repo.issues.action_open"}}</button> | ||||||
|  | 		{{else}} | ||||||
|  | 			<button class="ui red basic button issue-action" data-action="close" data-url="{{$.RepoLink}}/issues/status">{{ctx.Locale.Tr "repo.issues.action_close"}}</button> | ||||||
|  | 		{{end}} | ||||||
|  | 		{{if $.IsRepoAdmin}} | ||||||
|  | 			<button class="ui red button issue-action" | ||||||
|  | 				data-action="delete" data-url="{{$.RepoLink}}/issues/delete" | ||||||
|  | 				data-action-delete-confirm="{{ctx.Locale.Tr "confirm_delete_selected"}}" | ||||||
|  | 			>{{ctx.Locale.Tr "repo.issues.delete"}}</button> | ||||||
|  | 		{{end}} | ||||||
|  | 	<!-- Labels --> | ||||||
|  | 		<div class="ui {{if not .Labels}}disabled{{end}} dropdown jump item"> | ||||||
|  | 			<span class="text"> | ||||||
|  | 				{{ctx.Locale.Tr "repo.issues.action_label"}} | ||||||
|  | 			</span> | ||||||
|  | 			{{svg "octicon-triangle-down" 14 "dropdown icon"}} | ||||||
|  | 			<div class="menu"> | ||||||
|  | 				<div class="item issue-action" data-action="clear" data-url="{{$.RepoLink}}/issues/labels"> | ||||||
|  | 					{{ctx.Locale.Tr "repo.issues.new.clear_labels"}} | ||||||
|  | 				</div> | ||||||
|  | 				{{$previousExclusiveScope := "_no_scope"}} | ||||||
|  | 				{{range .Labels}} | ||||||
|  | 					{{$exclusiveScope := .ExclusiveScope}} | ||||||
|  | 					{{if and (ne $previousExclusiveScope "_no_scope") (ne $previousExclusiveScope $exclusiveScope)}} | ||||||
|  | 						<div class="divider"></div> | ||||||
|  | 					{{end}} | ||||||
|  | 					{{$previousExclusiveScope = $exclusiveScope}} | ||||||
|  | 					<div class="item issue-action gt-df gt-items-start" data-action="toggle" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/labels"> | ||||||
|  | 						{{if SliceUtils.Contains $.SelLabelIDs .ID}}{{if $exclusiveScope}}{{svg "octicon-dot-fill"}}{{else}}{{svg "octicon-check"}}{{end}}{{end}} {{RenderLabel $.Context .}} | ||||||
|  | 						{{if .IsArchived}} | ||||||
|  | 							<i data-tooltip-content={{ctx.Locale.Tr "archived"}}>{{svg "octicon-info"}}</i> | ||||||
|  | 						{{end}} | ||||||
|  | 					</div> | ||||||
|  | 				{{end}} | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<!-- Milestone --> | ||||||
|  | 		<div class="ui {{if not (or .OpenMilestones .ClosedMilestones)}}disabled{{end}} dropdown jump item"> | ||||||
|  | 			<span class="text"> | ||||||
|  | 				{{ctx.Locale.Tr "repo.issues.action_milestone"}} | ||||||
|  | 			</span> | ||||||
|  | 			{{svg "octicon-triangle-down" 14 "dropdown icon"}} | ||||||
|  | 			<div class="menu"> | ||||||
|  | 				<div class="item issue-action" data-element-id="0" data-url="{{$.Link}}/milestone"> | ||||||
|  | 				{{ctx.Locale.Tr "repo.issues.action_milestone_no_select"}} | ||||||
|  | 				</div> | ||||||
|  | 				{{if .OpenMilestones}} | ||||||
|  | 					<div class="divider"></div> | ||||||
|  | 					<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_open"}}</div> | ||||||
|  | 					{{range .OpenMilestones}} | ||||||
|  | 						<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/milestone"> | ||||||
|  | 							{{.Name}} | ||||||
|  | 						</div> | ||||||
|  | 					{{end}} | ||||||
|  | 				{{end}} | ||||||
|  | 				{{if .ClosedMilestones}} | ||||||
|  | 					<div class="divider"></div> | ||||||
|  | 					<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_open"}}</div> | ||||||
|  | 					{{range .ClosedMilestones}} | ||||||
|  | 						<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/milestone"> | ||||||
|  | 							{{.Name}} | ||||||
|  | 						</div> | ||||||
|  | 					{{end}} | ||||||
|  | 				{{end}} | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<!-- Projects --> | ||||||
|  | 		<div class="ui{{if not (or .OpenProjects .ClosedProjects)}} disabled{{end}} dropdown jump item"> | ||||||
|  | 			<span class="text"> | ||||||
|  | 				{{ctx.Locale.Tr "repo.project_board"}} | ||||||
|  | 			</span> | ||||||
|  | 			{{svg "octicon-triangle-down" 14 "dropdown icon"}} | ||||||
|  | 			<div class="menu"> | ||||||
|  | 				<div class="item issue-action" data-element-id="0" data-url="{{$.Link}}/projects"> | ||||||
|  | 				{{ctx.Locale.Tr "repo.issues.new.clear_projects"}} | ||||||
|  | 				</div> | ||||||
|  | 				{{if .OpenProjects}} | ||||||
|  | 					<div class="divider"></div> | ||||||
|  | 					<div class="header"> | ||||||
|  | 						{{ctx.Locale.Tr "repo.issues.new.open_projects"}} | ||||||
|  | 					</div> | ||||||
|  | 					{{range .OpenProjects}} | ||||||
|  | 						<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/projects"> | ||||||
|  | 							{{svg .IconName 18 "gt-mr-3"}}{{.Title}} | ||||||
|  | 						</div> | ||||||
|  | 					{{end}} | ||||||
|  | 				{{end}} | ||||||
|  | 				{{if .ClosedProjects}} | ||||||
|  | 					<div class="divider"></div> | ||||||
|  | 					<div class="header"> | ||||||
|  | 						{{ctx.Locale.Tr "repo.issues.new.closed_projects"}} | ||||||
|  | 					</div> | ||||||
|  | 					{{range .ClosedProjects}} | ||||||
|  | 						<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/projects"> | ||||||
|  | 							{{svg .IconName 18 "gt-mr-3"}}{{.Title}} | ||||||
|  | 						</div> | ||||||
|  | 					{{end}} | ||||||
|  | 				{{end}} | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  |  | ||||||
|  | 		<!-- Assignees --> | ||||||
|  | 		<div class="ui {{if not .Assignees}}disabled{{end}} dropdown jump item"> | ||||||
|  | 			<span class="text"> | ||||||
|  | 				{{ctx.Locale.Tr "repo.issues.action_assignee"}} | ||||||
|  | 			</span> | ||||||
|  | 			{{svg "octicon-triangle-down" 14 "dropdown icon"}} | ||||||
|  | 			<div class="menu"> | ||||||
|  | 				<div class="item issue-action" data-action="clear" data-url="{{$.Link}}/assignee"> | ||||||
|  | 					{{ctx.Locale.Tr "repo.issues.new.clear_assignees"}} | ||||||
|  | 				</div> | ||||||
|  | 				<div class="item issue-action" data-element-id="0" data-url="{{$.Link}}/assignee"> | ||||||
|  | 					{{ctx.Locale.Tr "repo.issues.action_assignee_no_select"}} | ||||||
|  | 				</div> | ||||||
|  | 				{{range .Assignees}} | ||||||
|  | 					<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/assignee"> | ||||||
|  | 						{{ctx.AvatarUtils.Avatar . 20}} {{.GetDisplayName}} | ||||||
|  | 					</div> | ||||||
|  | 				{{end}} | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 	{{end}} | ||||||
|  | </div> | ||||||
|  |  | ||||||
| @@ -18,10 +18,22 @@ | |||||||
| 						<i class="icon">{{svg "octicon-search" 16}}</i> | 						<i class="icon">{{svg "octicon-search" 16}}</i> | ||||||
| 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_label"}}"> | 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_label"}}"> | ||||||
| 					</div> | 					</div> | ||||||
|  | 					<div class="ui checkbox compact archived-label-filter"> | ||||||
|  | 						<input name="archived" type="checkbox" | ||||||
|  | 							id="archived-filter-checkbox" | ||||||
|  | 							{{if .ShowArchivedLabels}}checked{{end}} | ||||||
|  | 						> | ||||||
|  | 						<label for="archived-filter-checkbox"> | ||||||
|  | 							{{ctx.Locale.Tr "repo.issues.label_archived_filter"}} | ||||||
|  | 							<i class="gt-ml-2" data-tooltip-content={{ctx.Locale.Tr "repo.issues.label_archive_tooltip"}}> | ||||||
|  | 								{{svg "octicon-info"}} | ||||||
|  | 							</i> | ||||||
|  | 						</label> | ||||||
|  | 					</div> | ||||||
| 					<span class="info">{{ctx.Locale.Tr "repo.issues.filter_label_exclude" | Safe}}</span> | 					<span class="info">{{ctx.Locale.Tr "repo.issues.filter_label_exclude" | Safe}}</span> | ||||||
| 					<div class="divider"></div> | 					<div class="divider"></div> | ||||||
| 					<a class="{{if .AllLabels}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_label_no_select"}}</a> | 					<a class="{{if .AllLabels}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_label_no_select"}}</a> | ||||||
| 					<a class="{{if .NoLabel}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels=0&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_label_select_no_label"}}</a> | 					<a class="{{if .NoLabel}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels=0&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_label_select_no_label"}}</a> | ||||||
| 					{{$previousExclusiveScope := "_no_scope"}} | 					{{$previousExclusiveScope := "_no_scope"}} | ||||||
| 					{{range .Labels}} | 					{{range .Labels}} | ||||||
| 						{{$exclusiveScope := .ExclusiveScope}} | 						{{$exclusiveScope := .ExclusiveScope}} | ||||||
| @@ -29,7 +41,16 @@ | |||||||
| 							<div class="divider"></div> | 							<div class="divider"></div> | ||||||
| 						{{end}} | 						{{end}} | ||||||
| 						{{$previousExclusiveScope = $exclusiveScope}} | 						{{$previousExclusiveScope = $exclusiveScope}} | ||||||
| 						<a class="item label-filter-item gt-df gt-ac" {{if .IsArchived}}data-is-archived{{end}} href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.QueryString}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}" data-label-id="{{.ID}}">{{if .IsExcluded}}{{svg "octicon-circle-slash"}}{{else if .IsSelected}}{{if $exclusiveScope}}{{svg "octicon-dot-fill"}}{{else}}{{svg "octicon-check"}}{{end}}{{end}} | 						<a class="item label-filter-item gt-df gt-ac" {{if .IsArchived}}data-is-archived{{end}} href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.QueryString}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}" data-label-id="{{.ID}}"> | ||||||
|  | 							{{if .IsExcluded}} | ||||||
|  | 								{{svg "octicon-circle-slash"}} | ||||||
|  | 							{{else if .IsSelected}} | ||||||
|  | 								{{if $exclusiveScope}} | ||||||
|  | 									{{svg "octicon-dot-fill"}} | ||||||
|  | 								{{else}} | ||||||
|  | 									{{svg "octicon-check"}} | ||||||
|  | 								{{end}} | ||||||
|  | 							{{end}} | ||||||
| 							{{RenderLabel $.Context .}} | 							{{RenderLabel $.Context .}} | ||||||
| 							<p class="gt-ml-auto">{{template "repo/issue/labels/label_archived" .}}</p> | 							<p class="gt-ml-auto">{{template "repo/issue/labels/label_archived" .}}</p> | ||||||
| 						</a> | 						</a> | ||||||
| @@ -50,13 +71,13 @@ | |||||||
| 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_milestone"}}"> | 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_milestone"}}"> | ||||||
| 					</div> | 					</div> | ||||||
| 					<div class="divider"></div> | 					<div class="divider"></div> | ||||||
| 					<a class="{{if not $.MilestoneID}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone=0&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_milestone_all"}}</a> | 					<a class="{{if not $.MilestoneID}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone=0&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_milestone_all"}}</a> | ||||||
| 					<a class="{{if $.MilestoneID}}{{if eq $.MilestoneID -1}}active selected {{end}}{{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone=-1&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_milestone_none"}}</a> | 					<a class="{{if $.MilestoneID}}{{if eq $.MilestoneID -1}}active selected {{end}}{{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone=-1&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_milestone_none"}}</a> | ||||||
| 					{{if .OpenMilestones}} | 					{{if .OpenMilestones}} | ||||||
| 						<div class="divider"></div> | 						<div class="divider"></div> | ||||||
| 						<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_open"}}</div> | 						<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_open"}}</div> | ||||||
| 						{{range .OpenMilestones}} | 						{{range .OpenMilestones}} | ||||||
| 						<a class="{{if $.MilestoneID}}{{if eq $.MilestoneID .ID}}active selected {{end}}{{end}}item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}"> | 						<a class="{{if $.MilestoneID}}{{if eq $.MilestoneID .ID}}active selected {{end}}{{end}}item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 							{{svg "octicon-milestone" 16 "mr-2"}} | 							{{svg "octicon-milestone" 16 "mr-2"}} | ||||||
| 							{{.Name}} | 							{{.Name}} | ||||||
| 						</a> | 						</a> | ||||||
| @@ -66,7 +87,7 @@ | |||||||
| 						<div class="divider"></div> | 						<div class="divider"></div> | ||||||
| 						<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_closed"}}</div> | 						<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_closed"}}</div> | ||||||
| 						{{range .ClosedMilestones}} | 						{{range .ClosedMilestones}} | ||||||
| 						<a class="{{if $.MilestoneID}}{{if eq $.MilestoneID .ID}}active selected {{end}}{{end}}item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}"> | 						<a class="{{if $.MilestoneID}}{{if eq $.MilestoneID .ID}}active selected {{end}}{{end}}item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 							{{svg "octicon-milestone" 16 "mr-2"}} | 							{{svg "octicon-milestone" 16 "mr-2"}} | ||||||
| 							{{.Name}} | 							{{.Name}} | ||||||
| 						</a> | 						</a> | ||||||
| @@ -87,15 +108,15 @@ | |||||||
| 						<i class="icon">{{svg "octicon-search" 16}}</i> | 						<i class="icon">{{svg "octicon-search" 16}}</i> | ||||||
| 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_project"}}"> | 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_project"}}"> | ||||||
| 					</div> | 					</div> | ||||||
| 					<a class="{{if not .ProjectID}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_project_all"}}</a> | 					<a class="{{if not .ProjectID}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_project_all"}}</a> | ||||||
| 					<a class="{{if eq .ProjectID -1}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&project=-1&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_project_none"}}</a> | 					<a class="{{if eq .ProjectID -1}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&project=-1&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_project_none"}}</a> | ||||||
| 					{{if .OpenProjects}} | 					{{if .OpenProjects}} | ||||||
| 						<div class="divider"></div> | 						<div class="divider"></div> | ||||||
| 						<div class="header"> | 						<div class="header"> | ||||||
| 							{{ctx.Locale.Tr "repo.issues.new.open_projects"}} | 							{{ctx.Locale.Tr "repo.issues.new.open_projects"}} | ||||||
| 						</div> | 						</div> | ||||||
| 						{{range .OpenProjects}} | 						{{range .OpenProjects}} | ||||||
| 							<a class="{{if $.ProjectID}}{{if eq $.ProjectID .ID}}active selected{{end}}{{end}} item gt-df" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{.ID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}"> | 							<a class="{{if $.ProjectID}}{{if eq $.ProjectID .ID}}active selected{{end}}{{end}} item gt-df" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{.ID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 								{{svg .IconName 18 "gt-mr-3 gt-shrink-0"}}<span class="gt-ellipsis">{{.Title}}</span> | 								{{svg .IconName 18 "gt-mr-3 gt-shrink-0"}}<span class="gt-ellipsis">{{.Title}}</span> | ||||||
| 							</a> | 							</a> | ||||||
| 						{{end}} | 						{{end}} | ||||||
| @@ -106,7 +127,7 @@ | |||||||
| 							{{ctx.Locale.Tr "repo.issues.new.closed_projects"}} | 							{{ctx.Locale.Tr "repo.issues.new.closed_projects"}} | ||||||
| 						</div> | 						</div> | ||||||
| 						{{range .ClosedProjects}} | 						{{range .ClosedProjects}} | ||||||
| 							<a class="{{if $.ProjectID}}{{if eq $.ProjectID .ID}}active selected{{end}}{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{.ID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}"> | 							<a class="{{if $.ProjectID}}{{if eq $.ProjectID .ID}}active selected{{end}}{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{.ID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 								{{svg .IconName 18 "gt-mr-3"}}{{.Title}} | 								{{svg .IconName 18 "gt-mr-3"}}{{.Title}} | ||||||
| 							</a> | 							</a> | ||||||
| 						{{end}} | 						{{end}} | ||||||
| @@ -118,7 +139,7 @@ | |||||||
| 			<div class="ui dropdown jump item user-remote-search" data-tooltip-content="{{ctx.Locale.Tr "repo.author_search_tooltip"}}" | 			<div class="ui dropdown jump item user-remote-search" data-tooltip-content="{{ctx.Locale.Tr "repo.author_search_tooltip"}}" | ||||||
| 				data-search-url="{{if .Milestone}}{{$.RepoLink}}/issues/posters{{else}}{{$.Link}}/posters{{end}}" | 				data-search-url="{{if .Milestone}}{{$.RepoLink}}/issues/posters{{else}}{{$.Link}}/posters{{end}}" | ||||||
| 				data-selected-user-id="{{$.PosterID}}" | 				data-selected-user-id="{{$.PosterID}}" | ||||||
| 				data-action-jump-url="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={user_id}" | 				data-action-jump-url="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={user_id}{{if $.ShowArchivedLabels}}&archived=true{{end}}" | ||||||
| 			> | 			> | ||||||
| 				<span class="text"> | 				<span class="text"> | ||||||
| 					{{ctx.Locale.Tr "repo.issues.filter_poster"}} | 					{{ctx.Locale.Tr "repo.issues.filter_poster"}} | ||||||
| @@ -144,11 +165,11 @@ | |||||||
| 						<i class="icon">{{svg "octicon-search" 16}}</i> | 						<i class="icon">{{svg "octicon-search" 16}}</i> | ||||||
| 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_assignee"}}"> | 						<input type="text" placeholder="{{ctx.Locale.Tr "repo.issues.filter_assignee"}}"> | ||||||
| 					</div> | 					</div> | ||||||
| 					<a class="{{if not .AssigneeID}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_assginee_no_select"}}</a> | 					<a class="{{if not .AssigneeID}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_assginee_no_select"}}</a> | ||||||
| 					<a class="{{if eq .AssigneeID -1}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee=-1&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_assginee_no_assignee"}}</a> | 					<a class="{{if eq .AssigneeID -1}}active selected {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee=-1&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_assginee_no_assignee"}}</a> | ||||||
| 					<div class="divider"></div> | 					<div class="divider"></div> | ||||||
| 					{{range .Assignees}} | 					{{range .Assignees}} | ||||||
| 						<a class="{{if eq $.AssigneeID .ID}}active selected{{end}} item gt-df" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{.ID}}&poster={{$.PosterID}}"> | 						<a class="{{if eq $.AssigneeID .ID}}active selected{{end}} item gt-df" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{.ID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 							{{ctx.AvatarUtils.Avatar . 20}}{{template "repo/search_name" .}} | 							{{ctx.AvatarUtils.Avatar . 20}}{{template "repo/search_name" .}} | ||||||
| 						</a> | 						</a> | ||||||
| 					{{end}} | 					{{end}} | ||||||
| @@ -163,14 +184,14 @@ | |||||||
| 					</span> | 					</span> | ||||||
| 					{{svg "octicon-triangle-down" 14 "dropdown icon"}} | 					{{svg "octicon-triangle-down" 14 "dropdown icon"}} | ||||||
| 					<div class="menu"> | 					<div class="menu"> | ||||||
| 						<a class="{{if eq .ViewType "all"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=all&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_type.all_issues"}}</a> | 						<a class="{{if eq .ViewType "all"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=all&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.all_issues"}}</a> | ||||||
| 						<a class="{{if eq .ViewType "assigned"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_type.assigned_to_you"}}</a> | 						<a class="{{if eq .ViewType "assigned"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.assigned_to_you"}}</a> | ||||||
| 						<a class="{{if eq .ViewType "created_by"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_type.created_by_you"}}</a> | 						<a class="{{if eq .ViewType "created_by"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.created_by_you"}}</a> | ||||||
| 						{{if .PageIsPullList}} | 						{{if .PageIsPullList}} | ||||||
| 							<a class="{{if eq .ViewType "review_requested"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=review_requested&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_type.review_requested"}}</a> | 							<a class="{{if eq .ViewType "review_requested"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=review_requested&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.review_requested"}}</a> | ||||||
| 							<a class="{{if eq .ViewType "reviewed_by"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=reviewed_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_type.reviewed_by_you"}}</a> | 							<a class="{{if eq .ViewType "reviewed_by"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=reviewed_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.reviewed_by_you"}}</a> | ||||||
| 						{{end}} | 						{{end}} | ||||||
| 						<a class="{{if eq .ViewType "mentioned"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=mentioned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_type.mentioning_you"}}</a> | 						<a class="{{if eq .ViewType "mentioned"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type=mentioned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.mentioning_you"}}</a> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 			{{end}} | 			{{end}} | ||||||
| @@ -182,14 +203,14 @@ | |||||||
| 				</span> | 				</span> | ||||||
| 				{{svg "octicon-triangle-down" 14 "dropdown icon"}} | 				{{svg "octicon-triangle-down" 14 "dropdown icon"}} | ||||||
| 				<div class="menu"> | 				<div class="menu"> | ||||||
| 					<a class="{{if or (eq .SortType "latest") (not .SortType)}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=latest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.latest"}}</a> | 					<a class="{{if or (eq .SortType "latest") (not .SortType)}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=latest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.latest"}}</a> | ||||||
| 					<a class="{{if eq .SortType "oldest"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=oldest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.oldest"}}</a> | 					<a class="{{if eq .SortType "oldest"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=oldest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.oldest"}}</a> | ||||||
| 					<a class="{{if eq .SortType "recentupdate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=recentupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.recentupdate"}}</a> | 					<a class="{{if eq .SortType "recentupdate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=recentupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.recentupdate"}}</a> | ||||||
| 					<a class="{{if eq .SortType "leastupdate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=leastupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.leastupdate"}}</a> | 					<a class="{{if eq .SortType "leastupdate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=leastupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.leastupdate"}}</a> | ||||||
| 					<a class="{{if eq .SortType "mostcomment"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=mostcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.mostcomment"}}</a> | 					<a class="{{if eq .SortType "mostcomment"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=mostcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.mostcomment"}}</a> | ||||||
| 					<a class="{{if eq .SortType "leastcomment"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=leastcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.leastcomment"}}</a> | 					<a class="{{if eq .SortType "leastcomment"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=leastcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.leastcomment"}}</a> | ||||||
| 					<a class="{{if eq .SortType "nearduedate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=nearduedate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.nearduedate"}}</a> | 					<a class="{{if eq .SortType "nearduedate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=nearduedate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.nearduedate"}}</a> | ||||||
| 					<a class="{{if eq .SortType "farduedate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=farduedate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{ctx.Locale.Tr "repo.issues.filter_sort.farduedate"}}</a> | 					<a class="{{if eq .SortType "farduedate"}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort=farduedate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_sort.farduedate"}}</a> | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|   | |||||||
| @@ -36,132 +36,7 @@ | |||||||
| 				{{template "repo/issue/openclose" .}} | 				{{template "repo/issue/openclose" .}} | ||||||
| 			</div> | 			</div> | ||||||
| 			<div class="issue-list-toolbar-right"> | 			<div class="issue-list-toolbar-right"> | ||||||
| 				<div class="ui secondary filter menu"> | 				{{template "repo/issue/filter_actions" .}} | ||||||
| 					{{if not .Repository.IsArchived}} |  | ||||||
| 					<!-- Action Button --> |  | ||||||
| 					{{if .IsShowClosed}} |  | ||||||
| 						<button class="ui primary basic button issue-action" data-action="open" data-url="{{$.RepoLink}}/issues/status">{{ctx.Locale.Tr "repo.issues.action_open"}}</button> |  | ||||||
| 					{{else}} |  | ||||||
| 						<button class="ui red basic button issue-action" data-action="close" data-url="{{$.RepoLink}}/issues/status">{{ctx.Locale.Tr "repo.issues.action_close"}}</button> |  | ||||||
| 					{{end}} |  | ||||||
| 					{{if $.IsRepoAdmin}} |  | ||||||
| 						<button class="ui red button issue-action" |  | ||||||
| 							data-action="delete" data-url="{{$.RepoLink}}/issues/delete" |  | ||||||
| 							data-action-delete-confirm="{{ctx.Locale.Tr "confirm_delete_selected"}}" |  | ||||||
| 						>{{ctx.Locale.Tr "repo.issues.delete"}}</button> |  | ||||||
| 					{{end}} |  | ||||||
| 					<!-- Labels --> |  | ||||||
| 					<div class="ui {{if not .Labels}}disabled{{end}} dropdown jump item"> |  | ||||||
| 						<span class="text"> |  | ||||||
| 							{{ctx.Locale.Tr "repo.issues.action_label"}} |  | ||||||
| 						</span> |  | ||||||
| 						{{svg "octicon-triangle-down" 14 "dropdown icon"}} |  | ||||||
| 						<div class="menu"> |  | ||||||
| 							<div class="item issue-action" data-action="clear" data-url="{{$.RepoLink}}/issues/labels"> |  | ||||||
| 								{{ctx.Locale.Tr "repo.issues.new.clear_labels"}} |  | ||||||
| 							</div> |  | ||||||
| 							{{$previousExclusiveScope := "_no_scope"}} |  | ||||||
| 							{{range .Labels}} |  | ||||||
| 								{{$exclusiveScope := .ExclusiveScope}} |  | ||||||
| 								{{if and (ne $previousExclusiveScope "_no_scope") (ne $previousExclusiveScope $exclusiveScope)}} |  | ||||||
| 									<div class="divider"></div> |  | ||||||
| 								{{end}} |  | ||||||
| 								{{$previousExclusiveScope = $exclusiveScope}} |  | ||||||
| 								<div class="item issue-action" data-action="toggle" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/labels"> |  | ||||||
| 									{{if SliceUtils.Contains $.SelLabelIDs .ID}}{{if $exclusiveScope}}{{svg "octicon-dot-fill"}}{{else}}{{svg "octicon-check"}}{{end}}{{end}} {{RenderLabel $.Context .}} |  | ||||||
| 								</div> |  | ||||||
| 							{{end}} |  | ||||||
| 						</div> |  | ||||||
| 					</div> |  | ||||||
|  |  | ||||||
| 					<!-- Milestone --> |  | ||||||
| 					<div class="ui {{if not (or .OpenMilestones .ClosedMilestones)}}disabled{{end}} dropdown jump item"> |  | ||||||
| 						<span class="text"> |  | ||||||
| 							{{ctx.Locale.Tr "repo.issues.action_milestone"}} |  | ||||||
| 						</span> |  | ||||||
| 						{{svg "octicon-triangle-down" 14 "dropdown icon"}} |  | ||||||
| 						<div class="menu"> |  | ||||||
| 							<div class="item issue-action" data-element-id="0" data-url="{{$.Link}}/milestone"> |  | ||||||
| 							{{ctx.Locale.Tr "repo.issues.action_milestone_no_select"}} |  | ||||||
| 							</div> |  | ||||||
| 							{{if .OpenMilestones}} |  | ||||||
| 								<div class="divider"></div> |  | ||||||
| 								<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_open"}}</div> |  | ||||||
| 								{{range .OpenMilestones}} |  | ||||||
| 									<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/milestone"> |  | ||||||
| 										{{.Name}} |  | ||||||
| 									</div> |  | ||||||
| 								{{end}} |  | ||||||
| 							{{end}} |  | ||||||
| 							{{if .ClosedMilestones}} |  | ||||||
| 								<div class="divider"></div> |  | ||||||
| 								<div class="header">{{ctx.Locale.Tr "repo.issues.filter_milestone_open"}}</div> |  | ||||||
| 								{{range .ClosedMilestones}} |  | ||||||
| 									<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/milestone"> |  | ||||||
| 										{{.Name}} |  | ||||||
| 									</div> |  | ||||||
| 								{{end}} |  | ||||||
| 							{{end}} |  | ||||||
| 						</div> |  | ||||||
| 					</div> |  | ||||||
|  |  | ||||||
| 					<!-- Projects --> |  | ||||||
| 					<div class="ui{{if not (or .OpenProjects .ClosedProjects)}} disabled{{end}} dropdown jump item"> |  | ||||||
| 						<span class="text"> |  | ||||||
| 							{{ctx.Locale.Tr "repo.project_board"}} |  | ||||||
| 						</span> |  | ||||||
| 						{{svg "octicon-triangle-down" 14 "dropdown icon"}} |  | ||||||
| 						<div class="menu"> |  | ||||||
| 							<div class="item issue-action" data-element-id="0" data-url="{{$.Link}}/projects"> |  | ||||||
| 							{{ctx.Locale.Tr "repo.issues.new.clear_projects"}} |  | ||||||
| 							</div> |  | ||||||
| 							{{if .OpenProjects}} |  | ||||||
| 								<div class="divider"></div> |  | ||||||
| 								<div class="header"> |  | ||||||
| 									{{ctx.Locale.Tr "repo.issues.new.open_projects"}} |  | ||||||
| 								</div> |  | ||||||
| 								{{range .OpenProjects}} |  | ||||||
| 									<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/projects"> |  | ||||||
| 										{{svg .IconName 18 "gt-mr-3"}}{{.Title}} |  | ||||||
| 									</div> |  | ||||||
| 								{{end}} |  | ||||||
| 							{{end}} |  | ||||||
| 							{{if .ClosedProjects}} |  | ||||||
| 								<div class="divider"></div> |  | ||||||
| 								<div class="header"> |  | ||||||
| 									{{ctx.Locale.Tr "repo.issues.new.closed_projects"}} |  | ||||||
| 								</div> |  | ||||||
| 								{{range .ClosedProjects}} |  | ||||||
| 									<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/projects"> |  | ||||||
| 										{{svg .IconName 18 "gt-mr-3"}}{{.Title}} |  | ||||||
| 									</div> |  | ||||||
| 								{{end}} |  | ||||||
| 							{{end}} |  | ||||||
| 						</div> |  | ||||||
| 					</div> |  | ||||||
|  |  | ||||||
| 					<!-- Assignees --> |  | ||||||
| 					<div class="ui {{if not .Assignees}}disabled{{end}} dropdown jump item"> |  | ||||||
| 						<span class="text"> |  | ||||||
| 							{{ctx.Locale.Tr "repo.issues.action_assignee"}} |  | ||||||
| 						</span> |  | ||||||
| 						{{svg "octicon-triangle-down" 14 "dropdown icon"}} |  | ||||||
| 						<div class="menu"> |  | ||||||
| 							<div class="item issue-action" data-action="clear" data-url="{{$.Link}}/assignee"> |  | ||||||
| 								{{ctx.Locale.Tr "repo.issues.new.clear_assignees"}} |  | ||||||
| 							</div> |  | ||||||
| 							<div class="item issue-action" data-element-id="0" data-url="{{$.Link}}/assignee"> |  | ||||||
| 								{{ctx.Locale.Tr "repo.issues.action_assignee_no_select"}} |  | ||||||
| 							</div> |  | ||||||
| 							{{range .Assignees}} |  | ||||||
| 								<div class="item issue-action" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/assignee"> |  | ||||||
| 									{{ctx.AvatarUtils.Avatar . 20}} {{.GetDisplayName}} |  | ||||||
| 								</div> |  | ||||||
| 							{{end}} |  | ||||||
| 						</div> |  | ||||||
| 					</div> |  | ||||||
| 					{{end}} |  | ||||||
| 				</div> |  | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
| 		{{template "shared/issuelist" dict "." . "listType" "repo"}} | 		{{template "shared/issuelist" dict "." . "listType" "repo"}} | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| <div class="small-menu-items ui compact tiny menu"> | <div class="small-menu-items ui compact tiny menu"> | ||||||
| 	<a class="{{if not .IsShowClosed}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state=open&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&project={{.ProjectID}}&assignee={{.AssigneeID}}&poster={{.PosterID}}"> | 	<a class="{{if not .IsShowClosed}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state=open&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&project={{.ProjectID}}&assignee={{.AssigneeID}}&poster={{.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 		{{if .PageIsPullList}} | 		{{if .PageIsPullList}} | ||||||
| 			{{svg "octicon-git-pull-request" 16 "gt-mr-3"}} | 			{{svg "octicon-git-pull-request" 16 "gt-mr-3"}} | ||||||
| 		{{else}} | 		{{else}} | ||||||
| @@ -7,7 +7,7 @@ | |||||||
| 		{{end}} | 		{{end}} | ||||||
| 		{{ctx.Locale.PrettyNumber .IssueStats.OpenCount}} {{ctx.Locale.Tr "repo.issues.open_title"}} | 		{{ctx.Locale.PrettyNumber .IssueStats.OpenCount}} {{ctx.Locale.Tr "repo.issues.open_title"}} | ||||||
| 	</a> | 	</a> | ||||||
| 	<a class="{{if .IsShowClosed}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{.ViewType}}&sort={{$.SortType}}&state=closed&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&project={{.ProjectID}}&assignee={{.AssigneeID}}&poster={{.PosterID}}"> | 	<a class="{{if .IsShowClosed}}active {{end}}item" href="{{$.Link}}?q={{$.Keyword}}&type={{.ViewType}}&sort={{$.SortType}}&state=closed&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&project={{.ProjectID}}&assignee={{.AssigneeID}}&poster={{.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}"> | ||||||
| 		{{svg "octicon-check" 16 "gt-mr-3"}} | 		{{svg "octicon-check" 16 "gt-mr-3"}} | ||||||
| 		{{ctx.Locale.PrettyNumber .IssueStats.ClosedCount}} {{ctx.Locale.Tr "repo.issues.closed_title"}} | 		{{ctx.Locale.PrettyNumber .IssueStats.ClosedCount}} {{ctx.Locale.Tr "repo.issues.closed_title"}} | ||||||
| 	</a> | 	</a> | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
| 						{{end}} | 						{{end}} | ||||||
| 						<span class="labels-list gt-ml-2"> | 						<span class="labels-list gt-ml-2"> | ||||||
| 							{{range .Labels}} | 							{{range .Labels}} | ||||||
| 								<a href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}{{if ne $.listType "milestone"}}&milestone={{$.MilestoneID}}{{end}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}">{{RenderLabel $.Context .}}</a> | 								<a href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}{{if ne $.listType "milestone"}}&milestone={{$.MilestoneID}}{{end}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{RenderLabel $.Context .}}</a> | ||||||
| 							{{end}} | 							{{end}} | ||||||
| 						</span> | 						</span> | ||||||
| 					</div> | 					</div> | ||||||
|   | |||||||
| @@ -129,11 +129,13 @@ | |||||||
|  |  | ||||||
| .repository .filter.menu.labels .label-filter .menu .info { | .repository .filter.menu.labels .label-filter .menu .info { | ||||||
|   display: inline-block; |   display: inline-block; | ||||||
|   padding: 0.5rem 0.25rem; |   padding: 0.5rem 0; | ||||||
|   font-size: 12px; |   font-size: 12px; | ||||||
|   width: 100%; |   width: 100%; | ||||||
|   white-space: nowrap; |   white-space: nowrap; | ||||||
|   text-align: center; |   margin-left: 10px; | ||||||
|  |   margin-right: 8px; | ||||||
|  |   text-align: left; | ||||||
| } | } | ||||||
|  |  | ||||||
| .repository .filter.menu.labels .label-filter .menu .info code { | .repository .filter.menu.labels .label-filter .menu .info code { | ||||||
|   | |||||||
| @@ -80,3 +80,11 @@ | |||||||
| #issue-list .flex-item-body .checklist progress::-moz-progress-bar { | #issue-list .flex-item-body .checklist progress::-moz-progress-bar { | ||||||
|   background-color: var(--color-secondary-dark-4); |   background-color: var(--color-secondary-dark-4); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .archived-label-filter { | ||||||
|  |   margin-left: 10px; | ||||||
|  |   font-size: 12px; | ||||||
|  |   display: flex !important; | ||||||
|  |   margin-bottom: 8px; | ||||||
|  |   min-width: fit-content; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ function initRepoIssueListCheckboxes() { | |||||||
|       url, |       url, | ||||||
|       action, |       action, | ||||||
|       issueIDs, |       issueIDs, | ||||||
|       elementId |       elementId, | ||||||
|     ).then(() => { |     ).then(() => { | ||||||
|       window.location.reload(); |       window.location.reload(); | ||||||
|     }).catch((reason) => { |     }).catch((reason) => { | ||||||
| @@ -185,9 +185,42 @@ async function initIssuePinSort() { | |||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function initArchivedLabelFilter() { | ||||||
|  |   const archivedLabelEl = document.querySelector('#archived-filter-checkbox'); | ||||||
|  |   if (!archivedLabelEl) { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   const url = new URL(window.location.href); | ||||||
|  |   const archivedLabels = document.querySelectorAll('[data-is-archived]'); | ||||||
|  |  | ||||||
|  |   const selectedLabels = (url.searchParams.get('labels') || '') | ||||||
|  |     .split(',') | ||||||
|  |     .map((id) => id < 0 ? `${~id + 1}` : id); // selectedLabels contains -ve ids, which are excluded so convert any -ve value id to +ve | ||||||
|  |  | ||||||
|  |   const archivedElToggle = () => { | ||||||
|  |     for (const label of archivedLabels) { | ||||||
|  |       const id = label.getAttribute('data-label-id'); | ||||||
|  |       toggleElem(label, archivedLabelEl.checked || selectedLabels.includes(id)); | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   archivedElToggle(); | ||||||
|  |   archivedLabelEl.addEventListener('change', () => { | ||||||
|  |     archivedElToggle(); | ||||||
|  |     if (archivedLabelEl.checked) { | ||||||
|  |       url.searchParams.set('archived', 'true'); | ||||||
|  |     } else { | ||||||
|  |       url.searchParams.delete('archived'); | ||||||
|  |     } | ||||||
|  |     window.location.href = url.href; | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  |  | ||||||
| export function initRepoIssueList() { | export function initRepoIssueList() { | ||||||
|   if (!document.querySelectorAll('.page-content.repository.issue-list, .page-content.repository.milestone-issue-list').length) return; |   if (!document.querySelectorAll('.page-content.repository.issue-list, .page-content.repository.milestone-issue-list').length) return; | ||||||
|   initRepoIssueListCheckboxes(); |   initRepoIssueListCheckboxes(); | ||||||
|   initRepoIssueListAuthorDropdown(); |   initRepoIssueListAuthorDropdown(); | ||||||
|   initIssuePinSort(); |   initIssuePinSort(); | ||||||
|  |   initArchivedLabelFilter(); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Giteabot
					Giteabot