From 2955bbc31b6b475862189338e9b6a14890140a91 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Nov 23 2018 09:43:22 +0000 Subject: Show a rebase button in the UI when needed The rebase button shows in two situations: - the PR can be merged via a merge commit (merge status: MERGE) - the project enforces fast-forward merge and needs to be rebased (merge status: NEEDSREBASE) A lot of the churn after that is to compensate for the use of toggleClass, since it both adds and removes, we need to explicitly remove all the class it could possibly have added and add the ones that were there before on all the different elements touched. Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/templates/repo_pull_request.html b/pagure/templates/repo_pull_request.html index f7007e8..38c1b0d 100644 --- a/pagure/templates/repo_pull_request.html +++ b/pagure/templates/repo_pull_request.html @@ -195,6 +195,9 @@ {% endif %} + {% else %} {% endif %} @@ -821,42 +824,51 @@ function showTab(){ function show_merge_status(){ function process_response(res) { $('#spinner').hide(); + $('#merge_dropdown_btn').removeClass("disabled"); + $('#merge_dropdown_btn span.fa').removeClass("fa-spin"); if (res.code == 'FFORWARD'){ $('#merge_dropdown_btn').toggleClass("btn-outline-secondary btn-success"); - $('#merge_dropdown_btn').removeClass("disabled"); $('#merge_dropdown_btn span.fa').toggleClass("fa-circle-o-notch fa-check"); - $('#merge_dropdown_btn span.fa').removeClass("fa-spin"); $('#merge_btn').addClass("btn-success"); $('#merge-alert .alert').addClass("alert-success"); - $('#merge-alert-message').append(res.message); + $('#merge-alert-message').text(res.message); + $('#merge-alert #rebase_btn').hide(); + $('#merge-alert div.small').show(); + $('#merge_btn').show(); } else if (res.code == 'MERGE') { $('#merge_dropdown_btn').toggleClass("btn-outline-secondary btn-warning"); - $('#merge_dropdown_btn').removeClass("disabled"); $('#merge_dropdown_btn span.fa').toggleClass("fa-circle-o-notch fa-check"); - $('#merge_dropdown_btn span.fa').removeClass("fa-spin"); $('#merge_btn').addClass("btn-warning"); $('#merge-alert .alert').addClass("alert-warning"); - $('#merge-alert-message').append(res.message); + $('#merge-alert-message').text(res.message); + $('#merge-alert div.small').show(); + $('#merge_btn').show(); + } + else if (res.code == 'NEEDSREBASE') { + $('#merge_dropdown_btn').toggleClass("btn-outline-secondary btn-warning"); + $('#merge_dropdown_btn span.fa').toggleClass("fa-circle-o-notch fa-times"); + $('#merge_btn').hide(); + $('#merge-alert .alert').addClass("alert-warning"); + $('#merge-alert-message').text(res.message); + $('#merge-alert div.small').hide(); } else if (res.code == 'CONFLICTS') { $('#merge_dropdown_btn').toggleClass("btn-outline-secondary btn-danger"); - $('#merge_dropdown_btn').removeClass("disabled"); $('#merge_dropdown_btn span.fa').toggleClass("fa-circle-o-notch fa-times"); - $('#merge_dropdown_btn span.fa').removeClass("fa-spin"); $('#merge_btn').hide(); $('#merge-alert .alert').addClass("alert-danger"); - $('#merge-alert-message').append(res.message); + $('#merge-alert-message').text(res.message); $('#merge-alert div.small').hide(); + $('#merge-alert #rebase_btn').hide(); } else if (res.code == 'NO_CHANGE') { $('#merge_btn').hide(); - $('#merge_dropdown_btn').removeClass("disabled"); $('#merge_dropdown_btn span.fa').toggleClass("fa-circle-o-notch fa-times"); - $('#merge_dropdown_btn span.fa').removeClass("fa-spin"); $('#merge-alert .alert').addClass("alert-secondary"); - $('#merge-alert-message').append(res.message); + $('#merge-alert-message').text(res.message); $('#merge-alert div.small').hide(); + $('#merge-alert #rebase_btn').hide(); } }; $('#spinner').show(); @@ -887,6 +899,46 @@ function show_merge_status(){ $(document).ready(function() { + $('#rebase_btn').click(function(){ + $('#merge_dropdown_btn span.fa').removeClass( + "fa-circle-o-notch fa-times fa-check").addClass( + "fa-circle-o-notch fa-fw"); + $('#merge_btn').removeClass("btn-success btn-warning btn-danger"); + $('#merge-alert .alert').removeClass("alert-success alert-warning alert-danger"); + $('#merge_dropdown_btn').addClass("disabled"); + $('#merge_dropdown_btn').removeClass( + "btn-outline-secondary btn-danger btn-warning btn-success").addClass( + "btn btn-outline-secondary btn-sm disabled dropdown-toggle"); + $('#merge_dropdown_btn span.fa').addClass("fa-spin"); + $.ajax({ + url: '{{ url_for('api_ns.api_pull_request_rebase', + repo=repo.name, + username=username, + namespace=repo.namespace, + requestid=requestid) + }}' , + type: 'POST', + data: { + csrf_token: "{{ mergeform.csrf_token.current_token }}", + }, + dataType: 'json', + success: function(res) { + show_merge_status() + }, + error: function(res) { + $('#merge_dropdown_btn').removeClass("disabled"); + $('#merge_dropdown_btn span.fa').removeClass("fa-spin"); + $('#merge_dropdown_btn').toggleClass("btn-outline-secondary btn-danger"); + $('#merge_dropdown_btn span.fa').toggleClass("fa-circle-o-notch fa-times"); + $('#merge_btn').hide(); + $('#merge-alert #rebase_btn').hide(); + $('#merge-alert .alert').addClass("alert-danger"); + $('#merge-alert-message').text('Failed to rebase this PR'); + $('#merge-alert div.small').hide(); + } + }); + }); + $( ".commit_msg_txt" ).hide(); $( ".commit_msg_btn" ).click(function() { var msgid = $( this ).attr('data-id');