mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Add links to toggle WIP status (#14677)
* Add links to toggle PR WIP status * Allow PR author to toggle WIP status * refactors and restyling, remove links from translations Co-authored-by: Norwin <noerw@users.noreply.github.com> Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
		| @@ -197,10 +197,8 @@ func TestCantMergeWorkInProgress(t *testing.T) { | |||||||
| 		text := strings.TrimSpace(htmlDoc.doc.Find(".merge-section > .item").Last().Text()) | 		text := strings.TrimSpace(htmlDoc.doc.Find(".merge-section > .item").Last().Text()) | ||||||
| 		assert.NotEmpty(t, text, "Can't find WIP text") | 		assert.NotEmpty(t, text, "Can't find WIP text") | ||||||
|  |  | ||||||
| 		// remove <strong /> from lang | 		assert.Contains(t, text, i18n.Tr("en", "repo.pulls.cannot_merge_work_in_progress"), "Unable to find WIP text") | ||||||
| 		expected := i18n.Tr("en", "repo.pulls.cannot_merge_work_in_progress", "[wip]") | 		assert.Contains(t, text, "[wip]", "Unable to find WIP text") | ||||||
| 		replacer := strings.NewReplacer("<strong>", "", "</strong>", "") |  | ||||||
| 		assert.Equal(t, replacer.Replace(expected), text, "Unable to find WIP text") |  | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1316,7 +1316,10 @@ pulls.manually_merged_as = The pull request has been manually merged as <a rel=" | |||||||
| pulls.is_closed = The pull request has been closed. | pulls.is_closed = The pull request has been closed. | ||||||
| pulls.has_merged = The pull request has been merged. | pulls.has_merged = The pull request has been merged. | ||||||
| pulls.title_wip_desc = `<a href="#">Start the title with <strong>%s</strong></a> to prevent the pull request from being merged accidentally.` | pulls.title_wip_desc = `<a href="#">Start the title with <strong>%s</strong></a> to prevent the pull request from being merged accidentally.` | ||||||
| pulls.cannot_merge_work_in_progress = This pull request is marked as a work in progress. Remove the <strong>%s</strong> prefix from the title when it's ready | pulls.cannot_merge_work_in_progress = This pull request is marked as a work in progress.  | ||||||
|  | pulls.still_in_progress = Still in progress? | ||||||
|  | pulls.add_prefix = Add <strong>%s</strong> prefix | ||||||
|  | pulls.remove_prefix = Remove <strong>%s</strong> prefix | ||||||
| pulls.data_broken = This pull request is broken due to missing fork information. | pulls.data_broken = This pull request is broken due to missing fork information. | ||||||
| pulls.files_conflicted = This pull request has changes conflicting with the target branch. | pulls.files_conflicted = This pull request has changes conflicting with the target branch. | ||||||
| pulls.is_checking = "Merge conflict checking is in progress. Try again in few moments." | pulls.is_checking = "Merge conflict checking is in progress. Try again in few moments." | ||||||
|   | |||||||
| @@ -519,6 +519,8 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare | |||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	ctx.Data["PullRequestWorkInProgressPrefixes"] = setting.Repository.PullRequest.WorkInProgressPrefixes | ||||||
|  |  | ||||||
| 	if pull.IsWorkInProgress() { | 	if pull.IsWorkInProgress() { | ||||||
| 		ctx.Data["IsPullWorkInProgress"] = true | 		ctx.Data["IsPullWorkInProgress"] = true | ||||||
| 		ctx.Data["WorkInProgressPrefix"] = pull.GetWorkInProgressPrefix() | 		ctx.Data["WorkInProgressPrefix"] = pull.GetWorkInProgressPrefix() | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ | |||||||
| 									{{avatar .User}} | 									{{avatar .User}} | ||||||
| 								</a> | 								</a> | ||||||
| 							{{end}} | 							{{end}} | ||||||
| 							<span class="text grey"> | 							<span> | ||||||
| 								{{if .User}} | 								{{if .User}} | ||||||
| 									<a href="{{.User.HomeLink}}">{{.User.GetDisplayName}}</a> | 									<a href="{{.User.HomeLink}}">{{.User.GetDisplayName}}</a> | ||||||
| 								{{else if .Team}} | 								{{else if .Team}} | ||||||
| @@ -39,7 +39,7 @@ | |||||||
| 								</span> | 								</span> | ||||||
| 							{{end}} | 							{{end}} | ||||||
| 							{{if (and $.Permission.IsAdmin (or (eq .Review.Type 1) (eq .Review.Type 3)) (not $.Issue.IsClosed))}} | 							{{if (and $.Permission.IsAdmin (or (eq .Review.Type 1) (eq .Review.Type 3)) (not $.Issue.IsClosed))}} | ||||||
| 								<a href="#" class="ui grey poping up icon dismiss-review-btn" data-review-id="dismiss-review-{{.Review.ID}}" data-content="{{$.i18n.Tr "repo.issues.dismiss_review"}}"> | 								<a href="#" class="ui muted poping up icon dismiss-review-btn" data-review-id="dismiss-review-{{.Review.ID}}" data-content="{{$.i18n.Tr "repo.issues.dismiss_review"}}"> | ||||||
| 									{{svg "octicon-x" 16}} | 									{{svg "octicon-x" 16}} | ||||||
| 								</a> | 								</a> | ||||||
| 								<div class="ui small modal" id="dismiss-review-modal"> | 								<div class="ui small modal" id="dismiss-review-modal"> | ||||||
| @@ -172,9 +172,18 @@ | |||||||
| 					{{$.i18n.Tr "repo.pulls.data_broken"}} | 					{{$.i18n.Tr "repo.pulls.data_broken"}} | ||||||
| 				</div> | 				</div> | ||||||
| 			{{else if .IsPullWorkInProgress}} | 			{{else if .IsPullWorkInProgress}} | ||||||
| 				<div class="item"> | 				<div class="item toggle-wip df ac sb" data-title="{{.Issue.Title}}" data-wip-prefix="{{(.WorkInProgressPrefix|Escape)}}" data-update-url="{{$.RepoLink}}/issues/{{.Issue.Index}}/title"> | ||||||
|  | 					<div> | ||||||
| 						<i class="icon icon-octicon">{{svg "octicon-x"}}</i> | 						<i class="icon icon-octicon">{{svg "octicon-x"}}</i> | ||||||
| 					{{$.i18n.Tr "repo.pulls.cannot_merge_work_in_progress" (.WorkInProgressPrefix|Escape) | Str2html}} | 						{{$.i18n.Tr "repo.pulls.cannot_merge_work_in_progress" }} | ||||||
|  | 					</div> | ||||||
|  | 					<div> | ||||||
|  | 						{{if or .HasIssuesOrPullsWritePermission .IsIssuePoster}} | ||||||
|  | 							<button class="ui compact button"> | ||||||
|  | 								{{$.i18n.Tr "repo.pulls.remove_prefix" (.WorkInProgressPrefix|Escape) | Safe}} | ||||||
|  | 							</button> | ||||||
|  | 						{{end}} | ||||||
|  | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 			{{else if .Issue.PullRequest.IsChecking}} | 			{{else if .Issue.PullRequest.IsChecking}} | ||||||
| 				<div class="item"> | 				<div class="item"> | ||||||
| @@ -182,7 +191,7 @@ | |||||||
| 					{{$.i18n.Tr "repo.pulls.is_checking"}} | 					{{$.i18n.Tr "repo.pulls.is_checking"}} | ||||||
| 				</div> | 				</div> | ||||||
| 			{{else if .Issue.PullRequest.IsEmpty}} | 			{{else if .Issue.PullRequest.IsEmpty}} | ||||||
| 				<div class="item text grey"> | 				<div class="item"> | ||||||
| 					<i class="icon icon-octicon">{{svg "octicon-alert" 16}}</i> | 					<i class="icon icon-octicon">{{svg "octicon-alert" 16}}</i> | ||||||
| 					{{$.i18n.Tr "repo.pulls.is_empty"}} | 					{{$.i18n.Tr "repo.pulls.is_empty"}} | ||||||
| 				</div> | 				</div> | ||||||
| @@ -443,14 +452,14 @@ | |||||||
| 								{{svg "octicon-x"}} | 								{{svg "octicon-x"}} | ||||||
| 								{{$.i18n.Tr "repo.pulls.no_merge_desc"}} | 								{{$.i18n.Tr "repo.pulls.no_merge_desc"}} | ||||||
| 							</div> | 							</div> | ||||||
| 							<div class="item text grey"> | 							<div class="item"> | ||||||
| 								{{svg "octicon-info"}} | 								{{svg "octicon-info"}} | ||||||
| 								{{$.i18n.Tr "repo.pulls.no_merge_helper"}} | 								{{$.i18n.Tr "repo.pulls.no_merge_helper"}} | ||||||
| 							</div> | 							</div> | ||||||
| 						{{end}} | 						{{end}} | ||||||
| 					{{else}} | 					{{else}} | ||||||
| 						<div class="ui divider"></div> | 						<div class="ui divider"></div> | ||||||
| 						<div class="item text grey"> | 						<div class="item"> | ||||||
| 							{{svg "octicon-info"}} | 							{{svg "octicon-info"}} | ||||||
| 							{{$.i18n.Tr "repo.pulls.no_merge_access"}} | 							{{$.i18n.Tr "repo.pulls.no_merge_access"}} | ||||||
| 						</div> | 						</div> | ||||||
| @@ -503,7 +512,7 @@ | |||||||
| 						{{svg "octicon-x"}} | 						{{svg "octicon-x"}} | ||||||
| 						{{$.i18n.Tr "repo.pulls.cannot_auto_merge_desc"}} | 						{{$.i18n.Tr "repo.pulls.cannot_auto_merge_desc"}} | ||||||
| 					</div> | 					</div> | ||||||
| 					<div class="item text grey"> | 					<div class="item"> | ||||||
| 						{{svg "octicon-info"}} | 						{{svg "octicon-info"}} | ||||||
| 						{{$.i18n.Tr "repo.pulls.cannot_auto_merge_helper"}} | 						{{$.i18n.Tr "repo.pulls.cannot_auto_merge_helper"}} | ||||||
| 					</div> | 					</div> | ||||||
| @@ -511,11 +520,14 @@ | |||||||
| 			{{end}} | 			{{end}} | ||||||
|  |  | ||||||
| 			{{if and (gt .Issue.PullRequest.CommitsBehind 0) (not  .Issue.IsClosed) (not .Issue.PullRequest.IsChecking) (not .IsPullFilesConflicted) (not .IsPullRequestBroken) (not $canAutoMerge)}} | 			{{if and (gt .Issue.PullRequest.CommitsBehind 0) (not  .Issue.IsClosed) (not .Issue.PullRequest.IsChecking) (not .IsPullFilesConflicted) (not .IsPullRequestBroken) (not $canAutoMerge)}} | ||||||
| 				<div class="item text grey"> | 				<div class="item df ac sb"> | ||||||
|  | 					<div> | ||||||
| 						<i class="icon icon-octicon">{{svg "octicon-alert"}}</i> | 						<i class="icon icon-octicon">{{svg "octicon-alert"}}</i> | ||||||
| 						{{$.i18n.Tr "repo.pulls.outdated_with_base_branch"}} | 						{{$.i18n.Tr "repo.pulls.outdated_with_base_branch"}} | ||||||
|  | 					</div> | ||||||
|  | 					<div> | ||||||
| 						{{if .UpdateAllowed}} | 						{{if .UpdateAllowed}} | ||||||
| 						<form action="{{.Link}}/update" method="post" class="ui floating right"> | 							<form action="{{.Link}}/update" method="post"> | ||||||
| 								{{.CsrfTokenHtml}} | 								{{.CsrfTokenHtml}} | ||||||
| 								<button class="ui compact button" data-do="update"> | 								<button class="ui compact button" data-do="update"> | ||||||
| 									<span class="ui text">{{$.i18n.Tr "repo.pulls.update_branch"}}</span> | 									<span class="ui text">{{$.i18n.Tr "repo.pulls.update_branch"}}</span> | ||||||
| @@ -523,6 +535,7 @@ | |||||||
| 							</form> | 							</form> | ||||||
| 						{{end}} | 						{{end}} | ||||||
| 					</div> | 					</div> | ||||||
|  | 				</div> | ||||||
| 			{{end}} | 			{{end}} | ||||||
|  |  | ||||||
| 			{{if $.StillCanManualMerge}} | 			{{if $.StillCanManualMerge}} | ||||||
|   | |||||||
| @@ -91,6 +91,13 @@ | |||||||
| 					{{end}} | 					{{end}} | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
|  | 			{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed) (not .IsPullWorkInProgress)}} | ||||||
|  | 				<div class="toggle-wip" data-title="{{.Issue.Title}}" data-wip-prefix="{{(index .PullRequestWorkInProgressPrefixes 0| Escape)}}" data-update-url="{{$.RepoLink}}/issues/{{.Issue.Index}}/title"> | ||||||
|  | 					<a class="muted"> | ||||||
|  | 						{{.i18n.Tr "repo.pulls.still_in_progress"}} {{.i18n.Tr "repo.pulls.add_prefix" (index .PullRequestWorkInProgressPrefixes 0| Escape) | Safe}} | ||||||
|  | 					</a> | ||||||
|  | 				</div> | ||||||
|  | 			{{end}} | ||||||
| 			<div class="ui divider"></div> | 			<div class="ui divider"></div> | ||||||
| 		{{end}} | 		{{end}} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -909,6 +909,17 @@ async function initRepository() { | |||||||
|       return false; |       return false; | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |     // Toggle WIP | ||||||
|  |     $('.toggle-wip a, .toggle-wip button').on('click', async (e) => { | ||||||
|  |       e.preventDefault(); | ||||||
|  |       const {title, wipPrefix, updateUrl} = e.currentTarget.closest('.toggle-wip').dataset; | ||||||
|  |       await $.post(updateUrl, { | ||||||
|  |         _csrf: csrf, | ||||||
|  |         title: title?.startsWith(wipPrefix) ? title.substr(wipPrefix.length).trim() : `${wipPrefix.trim()} ${title}`, | ||||||
|  |       }); | ||||||
|  |       reload(); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     // Issue Comments |     // Issue Comments | ||||||
|     initIssueComments(); |     initIssueComments(); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user