summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/close_reopen_report_toggle.js2
-rw-r--r--app/assets/javascripts/issue.js2
-rw-r--r--app/assets/javascripts/merge_request.js10
-rw-r--r--app/helpers/issuables_helper.rb38
-rw-r--r--app/views/shared/issuable/_close_reopen_button.html.haml11
-rw-r--r--app/views/shared/issuable/_close_reopen_report_toggle.html.haml19
-rw-r--r--spec/javascripts/close_reopen_report_toggle_spec.js7
7 files changed, 56 insertions, 33 deletions
diff --git a/app/assets/javascripts/close_reopen_report_toggle.js b/app/assets/javascripts/close_reopen_report_toggle.js
index 43467a7e277..882d20671cc 100644
--- a/app/assets/javascripts/close_reopen_report_toggle.js
+++ b/app/assets/javascripts/close_reopen_report_toggle.js
@@ -44,7 +44,7 @@ class CloseReopenReportToggle {
return isClosed ? [this.reopenItem, this.closeItem] : [this.closeItem, this.reopenItem];
}
- setDisable(shouldDisable) {
+ setDisable(shouldDisable = true) {
if (shouldDisable) {
this.button.setAttribute('disabled', 'true');
this.dropdownTrigger.setAttribute('disabled', 'true');
diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js
index 70007d4d4af..fa4d95887c6 100644
--- a/app/assets/javascripts/issue.js
+++ b/app/assets/javascripts/issue.js
@@ -57,7 +57,7 @@ class Issue {
Issue.submitNoteForm($button.closest('form'));
}
- this.disableCloseReopenButton($button, true);
+ this.disableCloseReopenButton($button);
url = $button.attr('href');
return $.ajax({
diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index cae2f290f87..a485ad25ab7 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -69,7 +69,7 @@ import CloseReopenReportToggle from './close_reopen_report_toggle';
return;
}
- _this.disableCloseReopenButton($this, true);
+ if (this.closeReopenReportToggle) this.closeReopenReportToggle.setDisable();
if (shouldSubmit) {
if ($this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')) {
@@ -145,14 +145,6 @@ import CloseReopenReportToggle from './close_reopen_report_toggle';
this.closeReopenReportToggle.initDroplab();
};
- MergeRequest.prototype.disableCloseReopenButton = function ($button, shouldDisable) {
- if (this.closeReopenReportToggle) {
- this.closeReopenReportToggle.setDisable(shouldDisable);
- } else {
- $button.prop('disabled', shouldDisable);
- }
- };
-
return MergeRequest;
})();
}).call(window);
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index 64a64958691..04133196700 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -246,21 +246,11 @@ module IssuablesHelper
end
def close_issuable_url(issuable)
- params = {}
- params[issuable.model_name.to_s.underscore] = {}
- params[issuable.model_name.to_s.underscore][:state_event] = :close
- params[:format] = :json if issuable.is_a?(Issue)
-
- issuable_url(issuable, params)
+ issuable_url(issuable, close_reopen_params(issuable, :close))
end
def reopen_issuable_url(issuable)
- params = {}
- params[issuable.model_name.to_s.underscore] = {}
- params[issuable.model_name.to_s.underscore][:state_event] = :reopen
- params[:format] = :json if issuable.is_a?(Issue)
-
- issuable_url(issuable, params)
+ issuable_url(issuable, close_reopen_params(issuable, :reopen))
end
def close_reopen_issuable_url(issuable, should_inverse = false)
@@ -278,6 +268,22 @@ module IssuablesHelper
end
end
+ def issuable_button_visibility(issuable, closed)
+ case issuable
+ when Issue then issue_button_visibility(issuable, closed)
+ when MergeRequest then merge_request_button_visibility(issuable, closed)
+ else raise 'unknown issuable type'
+ end
+ end
+
+ def issuable_close_reopen_button_method(issuable)
+ case issuable
+ when Issue then ''
+ when MergeRequest then 'put'
+ else raise 'unknown issuable type'
+ end
+ end
+
private
def sidebar_gutter_collapsed?
@@ -334,4 +340,12 @@ module IssuablesHelper
container: (is_collapsed ? 'body' : nil)
}
end
+
+ def close_reopen_params(issuable, action)
+ params = {}
+ params[issuable.model_name.to_s.underscore] = {}
+ params[issuable.model_name.to_s.underscore][:state_event] = action
+ params[:format] = :json if issuable.is_a?(Issue)
+ params
+ end
end
diff --git a/app/views/shared/issuable/_close_reopen_button.html.haml b/app/views/shared/issuable/_close_reopen_button.html.haml
index fc8729d10d4..24f0c717ff0 100644
--- a/app/views/shared/issuable/_close_reopen_button.html.haml
+++ b/app/views/shared/issuable/_close_reopen_button.html.haml
@@ -1,11 +1,14 @@
- is_current_user = current_user == issuable.author
- display_issuable_type = issuable.model_name.human.downcase
-- button_method = issuable.is_a?(MergeRequest) ? :put : nil
+- button_method = issuable_close_reopen_button_method(issuable)
- if can_update && is_current_user
- = link_to "Close #{display_issuable_type}", close_issuable_url(issuable), method: button_method, class: "hidden-xs hidden-sm btn btn-close btn-grouped #{'hidden' if issuable.closed?}", title: "Close #{display_issuable_type}"
- = link_to "Reopen #{display_issuable_type}", reopen_issuable_url(issuable), method: button_method, class: "hidden-xs hidden-sm btn btn-reopen btn-grouped #{'hidden' unless issuable.closed?}", title: "Reopen #{display_issuable_type}"
+ = link_to "Close #{display_issuable_type}", close_issuable_url(issuable), method: button_method,
+ class: "btn btn-grouped btn-close #{issuable_button_visibility(issuable, true)}", title: "Close #{display_issuable_type}"
+ = link_to "Reopen #{display_issuable_type}", reopen_issuable_url(issuable), method: button_method,
+ class: "btn btn-grouped btn-reopen #{issuable_button_visibility(issuable, false)}", title: "Reopen #{display_issuable_type}"
- elsif can_update && !is_current_user
= render 'shared/issuable/close_reopen_report_toggle', issuable: issuable
- else
- = link_to 'Report abuse', new_abuse_report_path(user_id: issuable.author.id, ref_url: issuable_url(issuable)), class: 'hidden-xs hidden-sm btn btn-grouped btn-close-color', title: 'Report abuse'
+ = link_to 'Report abuse', new_abuse_report_path(user_id: issuable.author.id, ref_url: issuable_url(issuable)),
+ class: 'hidden-xs hidden-sm btn btn-grouped btn-close-color', title: 'Report abuse'
diff --git a/app/views/shared/issuable/_close_reopen_report_toggle.html.haml b/app/views/shared/issuable/_close_reopen_report_toggle.html.haml
index 5a616c377f2..a7565fe3b20 100644
--- a/app/views/shared/issuable/_close_reopen_report_toggle.html.haml
+++ b/app/views/shared/issuable/_close_reopen_report_toggle.html.haml
@@ -4,16 +4,20 @@
- button_responsive_class = 'hidden-xs hidden-sm'
- button_class = "#{button_responsive_class} btn btn-grouped js-issuable-close-button issuable-close-button"
- toggle_class = "#{button_responsive_class} btn btn-nr dropdown-toggle js-issuable-close-toggle"
-- button_method = issuable.is_a?(MergeRequest) ? :put : nil
+- button_method = issuable_close_reopen_button_method(issuable)
.pull-left.btn-group.prepend-left-10.issuable-close-dropdown.droplab-dropdown.js-issuable-close-dropdown
- = link_to "#{display_button_action} #{display_issuable_type}", close_reopen_issuable_url(issuable), method: button_method, class: "#{button_class} btn-#{button_action}", title: "#{display_button_action} #{display_issuable_type}"
+ = link_to "#{display_button_action} #{display_issuable_type}", close_reopen_issuable_url(issuable),
+ method: button_method, class: "#{button_class} btn-#{button_action}", title: "#{display_button_action} #{display_issuable_type}"
- = button_tag type: 'button', class: "#{toggle_class} btn-#{button_action}-color", data: { 'dropdown-trigger' => '#issuable-close-menu' }, 'aria-label' => 'Toggle dropdown' do
+ = button_tag type: 'button', class: "#{toggle_class} btn-#{button_action}-color",
+ data: { 'dropdown-trigger' => '#issuable-close-menu' }, 'aria-label' => 'Toggle dropdown' do
= icon('caret-down', class: 'toggle-icon icon')
%ul#issuable-close-menu.js-issuable-close-menu.dropdown-menu{ class: button_responsive_class, data: { dropdown: true } }
- %li.close-item{ class: "#{issuable.closed? ? 'hidden' : 'droplab-item-selected'}", data: { text: "Close #{display_issuable_type}", url: close_issuable_url(issuable), button_class: "#{button_class} btn-close", toggle_class: "#{toggle_class} btn-close-color", method: button_method } }
+ %li.close-item{ class: "#{issuable_button_visibility(issuable, true) || 'droplab-item-selected'}",
+ data: { text: "Close #{display_issuable_type}", url: close_issuable_url(issuable),
+ button_class: "#{button_class} btn-close", toggle_class: "#{toggle_class} btn-close-color", method: button_method } }
%button.btn.btn-transparent
= icon('check', class: 'icon')
.description
@@ -22,7 +26,9 @@
= display_issuable_type
%p
- %li.reopen-item{ class: "#{issuable.closed? ? 'droplab-item-selected' : 'hidden'}", data: { text: "Reopen #{display_issuable_type}", url: reopen_issuable_url(issuable), button_class: "#{button_class} btn-reopen", toggle_class: "#{toggle_class} btn-reopen-color", method: button_method } }
+ %li.reopen-item{ class: "#{issuable_button_visibility(issuable, false) || 'droplab-item-selected'}",
+ data: { text: "Reopen #{display_issuable_type}", url: reopen_issuable_url(issuable),
+ button_class: "#{button_class} btn-reopen", toggle_class: "#{toggle_class} btn-reopen-color", method: button_method } }
%button.btn.btn-transparent
= icon('check', class: 'icon')
.description
@@ -33,7 +39,8 @@
%li.divider.droplab-item-ignore
- %li.report-item{ data: { text: 'Report abuse', url: new_abuse_report_path(user_id: issuable.author.id, ref_url: issuable_url(issuable)), button_class: "#{button_class} btn-close-color", toggle_class: "#{toggle_class} btn-close-color", method: '' } }
+ %li.report-item{ data: { text: 'Report abuse', url: new_abuse_report_path(user_id: issuable.author.id, ref_url: issuable_url(issuable)),
+ button_class: "#{button_class} btn-close-color", toggle_class: "#{toggle_class} btn-close-color", method: '' } }
%button.btn.btn-transparent
= icon('check', class: 'icon')
.description
diff --git a/spec/javascripts/close_reopen_report_toggle_spec.js b/spec/javascripts/close_reopen_report_toggle_spec.js
index d94f6a8a345..925e959c85a 100644
--- a/spec/javascripts/close_reopen_report_toggle_spec.js
+++ b/spec/javascripts/close_reopen_report_toggle_spec.js
@@ -198,6 +198,13 @@ describe('CloseReopenReportToggle', () => {
expect(dropdownTrigger.setAttribute).toHaveBeenCalledWith('disabled', 'true');
});
+ it('disable .button and .dropdownTrigger if shouldDisable is undefined', () => {
+ closeReopenReportToggle.setDisable();
+
+ expect(button.setAttribute).toHaveBeenCalledWith('disabled', 'true');
+ expect(dropdownTrigger.setAttribute).toHaveBeenCalledWith('disabled', 'true');
+ });
+
it('enable .button and .dropdownTrigger if shouldDisable is false', () => {
closeReopenReportToggle.setDisable(false);