Skip to content
Snippets Groups Projects
Verified Commit 78dd2f05 authored by Luke "Jared" Bennett's avatar Luke "Jared" Bennett
Browse files

Added issuables_helper.js, tidied up droplab-dropdown JS, fixed filtered search specs

parent f0f94278
No related branches found
No related tags found
No related merge requests found
import CloseReopenReportToggle from '../close_reopen_report_toggle';
export default function initCloseReopenReport() {
const container = document.querySelector('.js-issuable-close-dropdown');
if (!container) return undefined;
const dropdownTrigger = container.querySelector('.js-issuable-close-toggle');
const dropdownList = container.querySelector('.js-issuable-close-menu');
const button = container.querySelector('.js-issuable-close-button');
const closeReopenReportToggle = new CloseReopenReportToggle({
dropdownTrigger,
dropdownList,
button,
});
closeReopenReportToggle.initDroplab();
return closeReopenReportToggle;
}
Loading
Loading
@@ -6,7 +6,7 @@ import '~/lib/utils/text_utility';
import './flash';
import './task_list';
import CreateMergeRequestDropdown from './create_merge_request_dropdown';
import CloseReopenReportToggle from './close_reopen_report_toggle';
import initCloseReopenReport from './helpers/issuables_helper';
 
class Issue {
constructor() {
Loading
Loading
@@ -29,12 +29,10 @@ class Issue {
Issue.initMergeRequests();
Issue.initRelatedBranches();
 
this.initCloseReopenReport();
this.closeButtons = $('a.btn-close');
this.reopenButtons = $('a.btn-reopen');
 
if (!this.closeReopenReportToggle) {
this.closeButtons = $('a.btn-close');
this.reopenButtons = $('a.btn-reopen');
}
this.initCloseReopenReport();
 
if (Issue.createMrDropdownWrap) {
this.createMergeRequestDropdown = new CreateMergeRequestDropdown(Issue.createMrDropdownWrap);
Loading
Loading
@@ -100,21 +98,10 @@ class Issue {
}
 
initCloseReopenReport() {
const container = document.querySelector('.js-issuable-close-dropdown');
if (!container) return;
const dropdownTrigger = container.querySelector('.js-issuable-close-toggle');
const dropdownList = container.querySelector('.js-issuable-close-menu');
const button = container.querySelector('.js-issuable-close-button');
this.closeReopenReportToggle = initCloseReopenReport();
 
this.closeReopenReportToggle = new CloseReopenReportToggle({
dropdownTrigger,
dropdownList,
button,
});
this.closeReopenReportToggle.initDroplab();
this.closeButtons = this.closeButtons.not('.issuable-close-button');
this.reopenButtons = this.reopenButtons.not('.issuable-close-button');
}
 
disableCloseReopenButton($button, shouldDisable) {
Loading
Loading
@@ -126,12 +113,9 @@ class Issue {
}
 
toggleCloseReopenButton(isClosed) {
if (this.closeReopenReportToggle) {
this.closeReopenReportToggle.updateButton(isClosed);
} else {
this.closeButtons.toggleClass('hidden', isClosed);
this.reopenButtons.toggleClass('hidden', !isClosed);
}
if (this.closeReopenReportToggle) this.closeReopenReportToggle.updateButton(isClosed);
this.closeButtons.toggleClass('hidden', isClosed);
this.reopenButtons.toggleClass('hidden', !isClosed);
}
 
static submitNoteForm(form) {
Loading
Loading
Loading
Loading
@@ -4,7 +4,7 @@
import 'vendor/jquery.waitforimages';
import './task_list';
import './merge_request_tabs';
import CloseReopenReportToggle from './close_reopen_report_toggle';
import initCloseReopenReport from './helpers/issuables_helper';
 
(function() {
this.MergeRequest = (function() {
Loading
Loading
@@ -26,7 +26,7 @@ import CloseReopenReportToggle from './close_reopen_report_toggle';
this.initTabs();
this.initMRBtnListeners();
this.initCommitMessageListeners();
this.initCloseReopenReport();
this.closeReopenReportToggle = initCloseReopenReport();
 
if ($("a.btn-close").length) {
this.taskList = new gl.TaskList({
Loading
Loading
@@ -127,24 +127,6 @@ import CloseReopenReportToggle from './close_reopen_report_toggle';
$el.text(gl.text.addDelimiter(count));
};
 
MergeRequest.prototype.initCloseReopenReport = function () {
const container = document.querySelector('.js-issuable-close-dropdown');
if (!container) return;
const dropdownTrigger = container.querySelector('.js-issuable-close-toggle');
const dropdownList = container.querySelector('.js-issuable-close-menu');
const button = container.querySelector('.js-issuable-close-button');
this.closeReopenReportToggle = new CloseReopenReportToggle({
dropdownTrigger,
dropdownList,
button,
});
this.closeReopenReportToggle.initDroplab();
};
return MergeRequest;
})();
}).call(window);
Loading
Loading
@@ -308,6 +308,7 @@
 
li {
padding: $gl-btn-padding $gl-btn-padding 2px;
cursor: pointer;
 
> a,
> button {
Loading
Loading
Loading
Loading
@@ -70,6 +70,7 @@
 
.input-token {
max-width: 200px;
padding: 0;
 
&:hover,
&:focus {
Loading
Loading
@@ -83,7 +84,6 @@
flex: 1;
-webkit-flex: 1;
max-width: inherit;
padding: 0;
}
}
 
Loading
Loading
@@ -165,6 +165,12 @@
 
.droplab-dropdown li.filtered-search-token {
padding: 0;
&:hover,
&:focus {
background-color: inherit;
color: inherit;
}
}
 
.filtered-search-term {
Loading
Loading
Loading
Loading
@@ -805,8 +805,22 @@
@include transition(border-color, color);
}
 
.issuable-close-dropdown .dropdown-menu {
min-width: 270px;
left: auto;
right: 0;
.issuable-close-dropdown {
.dropdown-menu {
min-width: 270px;
left: auto;
right: 0;
}
.description {
margin-bottom: 10px;
.text {
margin: 0;
}
}
.dropdown-toggle > .icon {
margin: 0 3px;
}
}
Loading
Loading
@@ -263,8 +263,6 @@ module IssuablesHelper
issue_url(issuable, *options)
when MergeRequest
merge_request_url(issuable, *options)
else
raise TypeError.new('unknown issuable type')
end
end
 
Loading
Loading
@@ -274,8 +272,6 @@ module IssuablesHelper
issue_button_visibility(issuable, closed)
when MergeRequest
merge_request_button_visibility(issuable, closed)
else
raise TypeError.new('unknown issuable type')
end
end
 
Loading
Loading
@@ -285,8 +281,6 @@ module IssuablesHelper
''
when MergeRequest
'put'
else
raise TypeError.new('unknown issuable type')
end
end
 
Loading
Loading
@@ -323,8 +317,6 @@ module IssuablesHelper
issue_template_names
when MergeRequest
merge_request_template_names
else
raise 'Unknown issuable type!'
end
end
 
Loading
Loading
Loading
Loading
@@ -21,10 +21,9 @@
%button.btn.btn-transparent
= icon('check', class: 'icon')
.description
%strong
%strong.title
Close
= display_issuable_type
%p
 
%li.reopen-item{ class: "#{issuable_button_visibility(issuable, false) || 'droplab-item-selected'}",
data: { text: "Reopen #{display_issuable_type}", url: reopen_issuable_url(issuable),
Loading
Loading
@@ -32,10 +31,9 @@
%button.btn.btn-transparent
= icon('check', class: 'icon')
.description
%strong
%strong.title
Reopen
= display_issuable_type
%p
 
%li.divider.droplab-item-ignore
 
Loading
Loading
@@ -44,8 +42,8 @@
%button.btn.btn-transparent
= icon('check', class: 'icon')
.description
%strong Report abuse
%p
%strong.title Report abuse
%p.text
Report
= display_issuable_type.pluralize
that are abusive, inappropriate or spam.
require 'spec_helper'
 
shared_examples 'an issuable close/reopen/report toggle' do
let(:container) { find('.issuable-close-dropdown') }
let(:human_model_name) { issuable.model_name.human.downcase }
describe 'Issuables Close/Reopen/Report toggle', :feature do
let(:user) { create(:user) }
 
it 'shows toggle' do
expect(page).to have_link("Close #{human_model_name}")
expect(page).to have_selector('.issuable-close-dropdown')
end
shared_examples 'an issuable close/reopen/report toggle' do
let(:container) { find('.issuable-close-dropdown') }
let(:human_model_name) { issuable.model_name.human.downcase }
 
it 'opens a dropdown when toggle is clicked' do
container.find('.dropdown-toggle').click
expect(container).to have_selector('.dropdown-menu')
expect(container).to have_content("Close #{human_model_name}")
expect(container).to have_content('Report abuse')
expect(container).to have_content("Report #{human_model_name.pluralize} that are abusive, inappropriate or spam.")
expect(container).to have_selector('.close-item.droplab-item-selected')
expect(container).to have_selector('.report-item')
expect(container).not_to have_selector('.report-item.droplab-item-selected')
expect(container).not_to have_selector('.reopen-item')
end
it 'shows toggle' do
expect(page).to have_link("Close #{human_model_name}")
expect(page).to have_selector('.issuable-close-dropdown')
end
it 'opens a dropdown when toggle is clicked' do
container.find('.dropdown-toggle').click
expect(container).to have_selector('.dropdown-menu')
expect(container).to have_content("Close #{human_model_name}")
expect(container).to have_content('Report abuse')
expect(container).to have_content("Report #{human_model_name.pluralize} that are abusive, inappropriate or spam.")
expect(container).to have_selector('.close-item.droplab-item-selected')
expect(container).to have_selector('.report-item')
expect(container).not_to have_selector('.report-item.droplab-item-selected')
expect(container).not_to have_selector('.reopen-item')
end
 
it 'changes the button when an item is selected' do
button = container.find('.issuable-close-button')
it 'changes the button when an item is selected' do
button = container.find('.issuable-close-button')
 
container.find('.dropdown-toggle').click
container.find('.report-item').click
container.find('.dropdown-toggle').click
container.find('.report-item').click
 
expect(container).not_to have_selector('.dropdown-menu')
expect(button).to have_content('Report abuse')
expect(container).not_to have_selector('.dropdown-menu')
expect(button).to have_content('Report abuse')
 
container.find('.dropdown-toggle').click
container.find('.close-item').click
container.find('.dropdown-toggle').click
container.find('.close-item').click
 
expect(button).to have_content("Close #{human_model_name}")
expect(button).to have_content("Close #{human_model_name}")
end
end
end
describe 'Issuables Close/Reopen/Report toggle', :feature do
let(:user) { create(:user) }
 
context 'on an issue' do
let(:project) { create(:empty_project) }
Loading
Loading
Loading
Loading
@@ -133,7 +133,7 @@ describe 'Visual tokens', js: true, feature: true do
describe 'editing milestone token' do
before do
input_filtered_search('milestone:%10.0 author:none', submit: false)
first('.tokens-container .filtered-search-token').double_click
first('.tokens-container .filtered-search-token').click
first('#js-dropdown-milestone .filter-dropdown .filter-dropdown-item')
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment