summaryrefslogtreecommitdiffstats
path: root/web_src
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2024-01-15 09:40:52 +0800
committerGitHub <noreply@github.com>2024-01-15 09:40:52 +0800
commitfbf29f29b5225be8e5e682e45b6977e7dda9b318 (patch)
tree5de5ad91653a3d11032cdaee7d3e5459ba4fef30 /web_src
parent6e29242ebb22bfd775f408ca6b9c03f7572e6658 (diff)
downloadgitea-fbf29f29b5225be8e5e682e45b6977e7dda9b318.tar.gz
gitea-fbf29f29b5225be8e5e682e45b6977e7dda9b318.zip
Modernize merge button (#28140) (#28786)
Backport #28140 by @earl-warren - Make use of the `form-fetch-action` for the merge button, which will automatically prevent the action from happening multiple times and show a nice loading indicator as user feedback while the merge request is being processed by the server. - Adjust the merge PR code to JSON response as this is required for the `form-fetch-action` functionality. - Resolves https://codeberg.org/forgejo/forgejo/issues/774 - Likely resolves the cause of https://codeberg.org/forgejo/forgejo/issues/1688#issuecomment-1313044 (cherry picked from commit 4ec64c19507caefff7ddaad722b1b5792b97cc5a) Co-authored-by: Earl Warren <109468362+earl-warren@users.noreply.github.com> Co-authored-by: Gusted <postmaster@gusted.xyz>
Diffstat (limited to 'web_src')
-rw-r--r--web_src/js/components/PullRequestMergeForm.vue74
1 files changed, 36 insertions, 38 deletions
diff --git a/web_src/js/components/PullRequestMergeForm.vue b/web_src/js/components/PullRequestMergeForm.vue
index 03d1f99683..aef4c8b5ac 100644
--- a/web_src/js/components/PullRequestMergeForm.vue
+++ b/web_src/js/components/PullRequestMergeForm.vue
@@ -90,48 +90,46 @@ export default {
<!-- eslint-disable-next-line vue/no-v-html -->
<div v-if="mergeForm.hasPendingPullRequestMerge" v-html="mergeForm.hasPendingPullRequestMergeTip" class="ui info message"/>
- <div class="ui form" v-if="showActionForm">
- <form :action="mergeForm.baseLink+'/merge'" method="post">
- <input type="hidden" name="_csrf" :value="csrfToken">
- <input type="hidden" name="head_commit_id" v-model="mergeForm.pullHeadCommitID">
- <input type="hidden" name="merge_when_checks_succeed" v-model="autoMergeWhenSucceed">
- <input type="hidden" name="force_merge" v-model="forceMerge">
-
- <template v-if="!mergeStyleDetail.hideMergeMessageTexts">
- <div class="field">
- <input type="text" name="merge_title_field" v-model="mergeTitleFieldValue">
- </div>
- <div class="field">
- <textarea name="merge_message_field" rows="5" :placeholder="mergeForm.mergeMessageFieldPlaceHolder" v-model="mergeMessageFieldValue"/>
- <template v-if="mergeMessageFieldValue !== mergeForm.defaultMergeMessage">
- <button @click.prevent="clearMergeMessage" class="btn gt-mt-2 gt-p-2 interact-fg" :data-tooltip-content="mergeForm.textClearMergeMessageHint">
- {{ mergeForm.textClearMergeMessage }}
- </button>
- </template>
- </div>
- </template>
-
- <div class="field" v-if="mergeStyle === 'manually-merged'">
- <input type="text" name="merge_commit_id" :placeholder="mergeForm.textMergeCommitId">
+ <form class="ui form form-fetch-action" v-if="showActionForm" :action="mergeForm.baseLink+'/merge'" method="post">
+ <input type="hidden" name="_csrf" :value="csrfToken">
+ <input type="hidden" name="head_commit_id" v-model="mergeForm.pullHeadCommitID">
+ <input type="hidden" name="merge_when_checks_succeed" v-model="autoMergeWhenSucceed">
+ <input type="hidden" name="force_merge" v-model="forceMerge">
+
+ <template v-if="!mergeStyleDetail.hideMergeMessageTexts">
+ <div class="field">
+ <input type="text" name="merge_title_field" v-model="mergeTitleFieldValue">
</div>
-
- <button class="ui button" :class="mergeButtonStyleClass" type="submit" name="do" :value="mergeStyle">
- {{ mergeStyleDetail.textDoMerge }}
- <template v-if="autoMergeWhenSucceed">
- {{ mergeForm.textAutoMergeButtonWhenSucceed }}
+ <div class="field">
+ <textarea name="merge_message_field" rows="5" :placeholder="mergeForm.mergeMessageFieldPlaceHolder" v-model="mergeMessageFieldValue"/>
+ <template v-if="mergeMessageFieldValue !== mergeForm.defaultMergeMessage">
+ <button @click.prevent="clearMergeMessage" class="btn gt-mt-2 gt-p-2 interact-fg" :data-tooltip-content="mergeForm.textClearMergeMessageHint">
+ {{ mergeForm.textClearMergeMessage }}
+ </button>
</template>
- </button>
+ </div>
+ </template>
- <button class="ui button merge-cancel" @click="toggleActionForm(false)">
- {{ mergeForm.textCancel }}
- </button>
+ <div class="field" v-if="mergeStyle === 'manually-merged'">
+ <input type="text" name="merge_commit_id" :placeholder="mergeForm.textMergeCommitId">
+ </div>
- <div class="ui checkbox gt-ml-2" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed">
- <input name="delete_branch_after_merge" type="checkbox" v-model="deleteBranchAfterMerge" id="delete-branch-after-merge">
- <label for="delete-branch-after-merge">{{ mergeForm.textDeleteBranch }}</label>
- </div>
- </form>
- </div>
+ <button class="ui button" :class="mergeButtonStyleClass" type="submit" name="do" :value="mergeStyle">
+ {{ mergeStyleDetail.textDoMerge }}
+ <template v-if="autoMergeWhenSucceed">
+ {{ mergeForm.textAutoMergeButtonWhenSucceed }}
+ </template>
+ </button>
+
+ <button class="ui button merge-cancel" @click="toggleActionForm(false)">
+ {{ mergeForm.textCancel }}
+ </button>
+
+ <div class="ui checkbox gt-ml-2" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed">
+ <input name="delete_branch_after_merge" type="checkbox" v-model="deleteBranchAfterMerge" id="delete-branch-after-merge">
+ <label for="delete-branch-after-merge">{{ mergeForm.textDeleteBranch }}</label>
+ </div>
+ </form>
<div v-if="!showActionForm" class="gt-df">
<!-- the merge button -->