mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	Remove duplicate logic in initListSubmits (#12660)
* Remove duplicate logic in initListSubmits Using the same logic to handle Choosing reviewers and assignees as choosing label. It's the first step of #10926. Signed-off-by: a1012112796 <1012112796@qq.com> * fix choose block * fix nit * try fix bug * simple code Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		| @@ -1516,10 +1516,11 @@ func updatePullReviewRequest(ctx *context.Context) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	reviewID := ctx.QueryInt64("id") | 	reviewID := ctx.QueryInt64("id") | ||||||
| 	event := ctx.Query("is_add") | 	action := ctx.Query("action") | ||||||
|  |  | ||||||
| 	if event != "add" && event != "remove" { | 	// TODO: Not support 'clear' now | ||||||
| 		ctx.ServerError("updatePullReviewRequest", fmt.Errorf("is_add should not be \"%s\"", event)) | 	if action != "attach" && action != "detach" { | ||||||
|  | 		ctx.Status(403) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -1532,19 +1533,20 @@ func updatePullReviewRequest(ctx *context.Context) { | |||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			err = isLegalReviewRequest(reviewer, ctx.User, event == "add", issue) | 			err = isLegalReviewRequest(reviewer, ctx.User, action == "attach", issue) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				ctx.ServerError("isLegalRequestReview", err) | 				ctx.ServerError("isLegalRequestReview", err) | ||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			err = issue_service.ReviewRequest(issue, ctx.User, reviewer, event == "add") | 			err = issue_service.ReviewRequest(issue, ctx.User, reviewer, action == "attach") | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				ctx.ServerError("ReviewRequest", err) | 				ctx.ServerError("ReviewRequest", err) | ||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			ctx.ServerError("updatePullReviewRequest", fmt.Errorf("%d in %d is not Pull Request", issue.ID, issue.Repo.ID)) | 			ctx.Status(403) | ||||||
|  | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -49,7 +49,7 @@ | |||||||
| 								{{end}} | 								{{end}} | ||||||
|  |  | ||||||
| 								{{if $canChoose }} | 								{{if $canChoose }} | ||||||
| 									<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}remove{{else}}add{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | 									<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}true{{else}}false{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||||
| 										{{svg "octicon-sync" 16}} | 										{{svg "octicon-sync" 16}} | ||||||
| 									</a> | 									</a> | ||||||
| 								{{end}} | 								{{end}} | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ | |||||||
| 					{{svg "octicon-gear" 16}} | 					{{svg "octicon-gear" 16}} | ||||||
| 				{{end}} | 				{{end}} | ||||||
| 			</span> | 			</span> | ||||||
| 			<div class="filter menu" data-action="" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | 			<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||||
| 				<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_reviewer_title"}}</div> | 				<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_reviewer_title"}}</div> | ||||||
| 				{{if .Reviewers}} | 				{{if .Reviewers}} | ||||||
| 					<div class="ui icon search input"> | 					<div class="ui icon search input"> | ||||||
| @@ -44,7 +44,7 @@ | |||||||
| 						{{$canChoose = true}} | 						{{$canChoose = true}} | ||||||
| 					{{end}} | 					{{end}} | ||||||
|  |  | ||||||
| 					<a class="{{if not $canChoose}}ui poping up{{end}} item {{if $checked}} checked {{end}}" href="#" data-id="{{.ID}}" data-id-selector="#review_request_{{.ID}}" data-can-change="{{if not $canChoose}}block{{end}}" {{if not $canChoose}} data-content="{{$.i18n.Tr "repo.issues.remove_request_review_block"}}"{{end}} data-is-checked="{{if $checked}}add{{else}}remove{{end}}"> | 					<a class="{{if not $canChoose}}ui poping up{{end}} item {{if $checked}} checked {{end}} {{if not $canChoose}}ban-change{{end}}" href="#" data-id="{{.ID}}" data-id-selector="#review_request_{{.ID}}" {{if not $canChoose}} data-content="{{$.i18n.Tr "repo.issues.remove_request_review_block"}}"{{end}}> | ||||||
| 						<span class="octicon-check {{if not $checked}}invisible{{end}}">{{svg "octicon-check" 16}}</span> | 						<span class="octicon-check {{if not $checked}}invisible{{end}}">{{svg "octicon-check" 16}}</span> | ||||||
| 						<span class="text"> | 						<span class="text"> | ||||||
| 							<img class="ui avatar image" src="{{.RelAvatarLink}}"> {{.GetDisplayName}} | 							<img class="ui avatar image" src="{{.RelAvatarLink}}"> {{.GetDisplayName}} | ||||||
| @@ -78,7 +78,7 @@ | |||||||
| 							{{end}} | 							{{end}} | ||||||
|  |  | ||||||
| 							{{if $canChoose}} | 							{{if $canChoose}} | ||||||
| 								<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}remove{{else}}add{{end}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | 								<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}true{{else}}false{{end}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||||
| 									{{svg "octicon-sync" 16}} | 									{{svg "octicon-sync" 16}} | ||||||
| 								</a> | 								</a> | ||||||
| 							{{end}} | 							{{end}} | ||||||
| @@ -244,7 +244,7 @@ | |||||||
| 					{{svg "octicon-gear" 16}} | 					{{svg "octicon-gear" 16}} | ||||||
| 				{{end}} | 				{{end}} | ||||||
| 			</span> | 			</span> | ||||||
| 			<div class="filter menu" data-action="" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee"> | 			<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee"> | ||||||
| 				<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_assignees_title"}}</div> | 				<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_assignees_title"}}</div> | ||||||
| 				<div class="ui icon search input"> | 				<div class="ui icon search input"> | ||||||
| 					<i class="search icon"></i> | 					<i class="search icon"></i> | ||||||
|   | |||||||
| @@ -157,7 +157,7 @@ function initLabelEdit() { | |||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  |  | ||||||
| function updateIssuesMeta(url, action, issueIds, elementId, isAdd) { | function updateIssuesMeta(url, action, issueIds, elementId) { | ||||||
|   return new Promise(((resolve) => { |   return new Promise(((resolve) => { | ||||||
|     $.ajax({ |     $.ajax({ | ||||||
|       type: 'POST', |       type: 'POST', | ||||||
| @@ -167,7 +167,6 @@ function updateIssuesMeta(url, action, issueIds, elementId, isAdd) { | |||||||
|         action, |         action, | ||||||
|         issue_ids: issueIds, |         issue_ids: issueIds, | ||||||
|         id: elementId, |         id: elementId, | ||||||
|         is_add: isAdd |  | ||||||
|       }, |       }, | ||||||
|       success: resolve |       success: resolve | ||||||
|     }); |     }); | ||||||
| @@ -373,21 +372,20 @@ function initCommentForm() { | |||||||
|     const $list = $(`.ui.${outerSelector}.list`); |     const $list = $(`.ui.${outerSelector}.list`); | ||||||
|     const $noSelect = $list.find('.no-select'); |     const $noSelect = $list.find('.no-select'); | ||||||
|     const $listMenu = $(`.${selector} .menu`); |     const $listMenu = $(`.${selector} .menu`); | ||||||
|     let hasLabelUpdateAction = $listMenu.data('action') === 'update'; |     let hasUpdateAction = $listMenu.data('action') === 'update'; | ||||||
|     const labels = {}; |     const items = {}; | ||||||
|  |  | ||||||
|     $(`.${selector}`).dropdown('setting', 'onHide', () => { |     $(`.${selector}`).dropdown('setting', 'onHide', () => { | ||||||
|       hasLabelUpdateAction = $listMenu.data('action') === 'update'; // Update the var |       hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var | ||||||
|       if (hasLabelUpdateAction) { |       if (hasUpdateAction) { | ||||||
|         const promises = []; |         const promises = []; | ||||||
|         Object.keys(labels).forEach((elementId) => { |         Object.keys(items).forEach((elementId) => { | ||||||
|           const label = labels[elementId]; |           const item = items[elementId]; | ||||||
|           const promise = updateIssuesMeta( |           const promise = updateIssuesMeta( | ||||||
|             label['update-url'], |             item['update-url'], | ||||||
|             label.action, |             item.action, | ||||||
|             label['issue-id'], |             item['issue-id'], | ||||||
|             elementId, |             elementId, | ||||||
|             label['is-checked'] |  | ||||||
|           ); |           ); | ||||||
|           promises.push(promise); |           promises.push(promise); | ||||||
|         }); |         }); | ||||||
| @@ -395,67 +393,49 @@ function initCommentForm() { | |||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     $listMenu.find('.item:not(.no-select)').on('click', function () { |     $listMenu.find('.item:not(.no-select)').on('click', function (e) { | ||||||
|       // we don't need the action attribute when updating assignees |       e.preventDefault(); | ||||||
|       if (selector === 'select-assignees-modify' || selector === 'select-reviewers-modify') { |       if ($(this).hasClass('ban-change')) { | ||||||
|         // UI magic. We need to do this here, otherwise it would destroy the functionality of |  | ||||||
|         // adding/removing labels |  | ||||||
|  |  | ||||||
|         if ($(this).data('can-change') === 'block') { |  | ||||||
|         return false; |         return false; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var | ||||||
|       if ($(this).hasClass('checked')) { |       if ($(this).hasClass('checked')) { | ||||||
|         $(this).removeClass('checked'); |         $(this).removeClass('checked'); | ||||||
|         $(this).find('.octicon-check').addClass('invisible'); |         $(this).find('.octicon-check').addClass('invisible'); | ||||||
|           $(this).data('is-checked', 'remove'); |         if (hasUpdateAction) { | ||||||
|         } else { |           if (!($(this).data('id') in items)) { | ||||||
|           $(this).addClass('checked'); |             items[$(this).data('id')] = { | ||||||
|           $(this).find('.octicon-check').removeClass('invisible'); |  | ||||||
|           $(this).data('is-checked', 'add'); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         updateIssuesMeta( |  | ||||||
|           $listMenu.data('update-url'), |  | ||||||
|           '', |  | ||||||
|           $listMenu.data('issue-id'), |  | ||||||
|           $(this).data('id'), |  | ||||||
|           $(this).data('is-checked') |  | ||||||
|         ); |  | ||||||
|         $listMenu.data('action', 'update'); // Update to reload the page when we updated items |  | ||||||
|         return false; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       if ($(this).hasClass('checked')) { |  | ||||||
|         $(this).removeClass('checked'); |  | ||||||
|         $(this).find('.octicon-check').addClass('invisible'); |  | ||||||
|         if (hasLabelUpdateAction) { |  | ||||||
|           if (!($(this).data('id') in labels)) { |  | ||||||
|             labels[$(this).data('id')] = { |  | ||||||
|               'update-url': $listMenu.data('update-url'), |               'update-url': $listMenu.data('update-url'), | ||||||
|               action: 'detach', |               action: 'detach', | ||||||
|               'issue-id': $listMenu.data('issue-id'), |               'issue-id': $listMenu.data('issue-id'), | ||||||
|             }; |             }; | ||||||
|           } else { |           } else { | ||||||
|             delete labels[$(this).data('id')]; |             delete items[$(this).data('id')]; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } else { |       } else { | ||||||
|         $(this).addClass('checked'); |         $(this).addClass('checked'); | ||||||
|         $(this).find('.octicon-check').removeClass('invisible'); |         $(this).find('.octicon-check').removeClass('invisible'); | ||||||
|         if (hasLabelUpdateAction) { |         if (hasUpdateAction) { | ||||||
|           if (!($(this).data('id') in labels)) { |           if (!($(this).data('id') in items)) { | ||||||
|             labels[$(this).data('id')] = { |             items[$(this).data('id')] = { | ||||||
|               'update-url': $listMenu.data('update-url'), |               'update-url': $listMenu.data('update-url'), | ||||||
|               action: 'attach', |               action: 'attach', | ||||||
|               'issue-id': $listMenu.data('issue-id'), |               'issue-id': $listMenu.data('issue-id'), | ||||||
|             }; |             }; | ||||||
|           } else { |           } else { | ||||||
|             delete labels[$(this).data('id')]; |             delete items[$(this).data('id')]; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       // TODO: Which thing should be done for choosing review requests | ||||||
|  |       // to make choosed items be shown on time here? | ||||||
|  |       if (selector === 'select-reviewers-modify' || selector === 'select-assignees-modify') { | ||||||
|  |         return false; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       const listIds = []; |       const listIds = []; | ||||||
|       $(this).parent().find('.item').each(function () { |       $(this).parent().find('.item').each(function () { | ||||||
|         if ($(this).hasClass('checked')) { |         if ($(this).hasClass('checked')) { | ||||||
| @@ -473,23 +453,26 @@ function initCommentForm() { | |||||||
|       $($(this).parent().data('id')).val(listIds.join(',')); |       $($(this).parent().data('id')).val(listIds.join(',')); | ||||||
|       return false; |       return false; | ||||||
|     }); |     }); | ||||||
|     $listMenu.find('.no-select.item').on('click', function () { |     $listMenu.find('.no-select.item').on('click', function (e) { | ||||||
|       if (hasLabelUpdateAction || selector === 'select-assignees-modify') { |       e.preventDefault(); | ||||||
|  |       if (hasUpdateAction) { | ||||||
|         updateIssuesMeta( |         updateIssuesMeta( | ||||||
|           $listMenu.data('update-url'), |           $listMenu.data('update-url'), | ||||||
|           'clear', |           'clear', | ||||||
|           $listMenu.data('issue-id'), |           $listMenu.data('issue-id'), | ||||||
|           '', |           '', | ||||||
|           '' |  | ||||||
|         ).then(reload); |         ).then(reload); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       $(this).parent().find('.item').each(function () { |       $(this).parent().find('.item').each(function () { | ||||||
|         $(this).removeClass('checked'); |         $(this).removeClass('checked'); | ||||||
|         $(this).find('.octicon').addClass('invisible'); |         $(this).find('.octicon').addClass('invisible'); | ||||||
|         $(this).data('is-checked', 'remove'); |  | ||||||
|       }); |       }); | ||||||
|  |  | ||||||
|  |       if (selector === 'select-reviewers-modify' || selector === 'select-assignees-modify') { | ||||||
|  |         return false; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       $list.find('.item').each(function () { |       $list.find('.item').each(function () { | ||||||
|         $(this).addClass('hide'); |         $(this).addClass('hide'); | ||||||
|       }); |       }); | ||||||
| @@ -521,7 +504,6 @@ function initCommentForm() { | |||||||
|           '', |           '', | ||||||
|           $menu.data('issue-id'), |           $menu.data('issue-id'), | ||||||
|           $(this).data('id'), |           $(this).data('id'), | ||||||
|           $(this).data('is-checked') |  | ||||||
|         ).then(reload); |         ).then(reload); | ||||||
|       } |       } | ||||||
|       switch (input_id) { |       switch (input_id) { | ||||||
| @@ -552,7 +534,6 @@ function initCommentForm() { | |||||||
|           '', |           '', | ||||||
|           $menu.data('issue-id'), |           $menu.data('issue-id'), | ||||||
|           $(this).data('id'), |           $(this).data('id'), | ||||||
|           $(this).data('is-checked') |  | ||||||
|         ).then(reload); |         ).then(reload); | ||||||
|       } |       } | ||||||
|  |  | ||||||
| @@ -672,10 +653,9 @@ function initIssueComments() { | |||||||
|     event.preventDefault(); |     event.preventDefault(); | ||||||
|     updateIssuesMeta( |     updateIssuesMeta( | ||||||
|       url, |       url, | ||||||
|       '', |       isChecked === 'true' ? 'attach' : 'detach', | ||||||
|       issueId, |       issueId, | ||||||
|       id, |       id, | ||||||
|       isChecked |  | ||||||
|     ).then(reload); |     ).then(reload); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user