summaryrefslogtreecommitdiff
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authorLuke "Jared" Bennett <lbennett@gitlab.com>2017-06-07 11:18:35 +0100
committerLuke "Jared" Bennett <lbennett@gitlab.com>2017-07-07 14:55:17 +0100
commitcc1e51efa7706a738e2c64693da67013638fede6 (patch)
tree4d9b6738580c05e2bbd89c0e567a30baee3fc4a3 /app/assets/javascripts
parent87d90b5b5e2fa6d0eed469db61878b942afdbee7 (diff)
downloadgitlab-ce-cc1e51efa7706a738e2c64693da67013638fede6.tar.gz
Added report issuable feature
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/close_reopen_report_toggle.js102
-rw-r--r--app/assets/javascripts/comment_type_toggle.js5
-rw-r--r--app/assets/javascripts/issue.js32
-rw-r--r--app/assets/javascripts/merge_request.js17
4 files changed, 148 insertions, 8 deletions
diff --git a/app/assets/javascripts/close_reopen_report_toggle.js b/app/assets/javascripts/close_reopen_report_toggle.js
new file mode 100644
index 00000000000..bddcef13a70
--- /dev/null
+++ b/app/assets/javascripts/close_reopen_report_toggle.js
@@ -0,0 +1,102 @@
+import DropLab from './droplab/drop_lab';
+import ISetter from './droplab/plugins/input_setter';
+
+// Todo: Remove this when fixing issue in input_setter plugin
+const InputSetter = Object.assign({}, ISetter);
+
+class CloseReopenReportToggle {
+ constructor(opts = {}) {
+ this.dropdownTrigger = opts.dropdownTrigger;
+ this.dropdownList = opts.dropdownList;
+ this.button = opts.button;
+
+ this.reopenItem = this.dropdownList.querySelector('.reopen-item');
+ this.closeItem = this.dropdownList.querySelector('.close-item');
+ }
+
+ initDroplab() {
+ this.droplab = new DropLab();
+
+ const config = this.setConfig();
+
+ this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);
+ }
+
+ updateButton(isClosed) {
+ const action = isClosed ? this.showReopen : this.showClose;
+
+ action.call(this);
+ this.button.blur();
+ }
+
+ showClose() {
+ this.closeItem.classList.remove('hidden');
+ this.closeItem.classList.add('droplab-item-selected');
+
+ this.reopenItem.classList.add('hidden');
+ this.reopenItem.classList.remove('droplab-item-selected');
+
+ this.closeItem.click();
+ }
+
+ showReopen() {
+ this.reopenItem.classList.remove('hidden');
+ this.reopenItem.classList.add('droplab-item-selected');
+
+ this.closeItem.classList.add('hidden');
+ this.closeItem.classList.remove('droplab-item-selected');
+
+ this.reopenItem.click();
+ }
+
+ setDisable(shouldDisable) {
+ if (shouldDisable) {
+ this.button.setAttribute('disabled', 'true');
+ this.dropdownTrigger.setAttribute('disabled', 'true');
+ } else {
+ this.button.removeAttribute('disabled');
+ this.dropdownTrigger.removeAttribute('disabled');
+ }
+ }
+
+ setConfig() {
+ const config = {
+ InputSetter: [
+ {
+ input: this.button,
+ valueAttribute: 'data-text',
+ inputAttribute: 'data-value',
+ },
+ {
+ input: this.button,
+ valueAttribute: 'data-text',
+ inputAttribute: 'title',
+ },
+ {
+ input: this.button,
+ valueAttribute: 'data-button-class',
+ inputAttribute: 'class',
+ },
+ {
+ input: this.dropdownTrigger,
+ valueAttribute: 'data-toggle-class',
+ inputAttribute: 'class',
+ },
+ {
+ input: this.button,
+ valueAttribute: 'data-url',
+ inputAttribute: 'href',
+ },
+ {
+ input: this.button,
+ valueAttribute: 'data-method',
+ inputAttribute: 'data-method',
+ },
+ ],
+ };
+
+ return config;
+ }
+}
+
+export default CloseReopenReportToggle;
diff --git a/app/assets/javascripts/comment_type_toggle.js b/app/assets/javascripts/comment_type_toggle.js
index df0ba86198c..c74184949df 100644
--- a/app/assets/javascripts/comment_type_toggle.js
+++ b/app/assets/javascripts/comment_type_toggle.js
@@ -1,5 +1,8 @@
import DropLab from './droplab/drop_lab';
-import InputSetter from './droplab/plugins/input_setter';
+import ISetter from './droplab/plugins/input_setter';
+
+// Todo: Remove this when fixing issue in input_setter plugin
+const InputSetter = Object.assign({}, ISetter);
class CommentTypeToggle {
constructor(opts = {}) {
diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js
index 0860e237ce1..62ffde6c93c 100644
--- a/app/assets/javascripts/issue.js
+++ b/app/assets/javascripts/issue.js
@@ -6,6 +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';
class Issue {
constructor() {
@@ -28,6 +29,8 @@ class Issue {
Issue.initMergeRequests();
Issue.initRelatedBranches();
+ this.initCloseReopenReport();
+
if (Issue.createMrDropdownWrap) {
this.createMergeRequestDropdown = new CreateMergeRequestDropdown(Issue.createMrDropdownWrap);
}
@@ -35,13 +38,11 @@ class Issue {
initIssueBtnEventListeners() {
const issueFailMessage = 'Unable to update this issue at this time.';
- const closeButtons = $('a.btn-close');
const isClosedBadge = $('div.status-box-closed');
const isOpenBadge = $('div.status-box-open');
const projectIssuesCounter = $('.issue_counter');
- const reopenButtons = $('a.btn-reopen');
- return closeButtons.add(reopenButtons).on('click', (e) => {
+ return $(document).on('click', 'a.btn-close, a.btn-reopen', (e) => {
var $button, shouldSubmit, url;
e.preventDefault();
e.stopImmediatePropagation();
@@ -50,7 +51,9 @@ class Issue {
if (shouldSubmit) {
Issue.submitNoteForm($button.closest('form'));
}
- $button.prop('disabled', true);
+
+ this.closeReopenReportToggle.setDisable(true);
+
url = $button.attr('href');
return $.ajax({
type: 'PUT',
@@ -62,11 +65,11 @@ class Issue {
$(document).trigger('issuable:change');
const isClosed = $button.hasClass('btn-close');
- closeButtons.toggleClass('hidden', isClosed);
- reopenButtons.toggleClass('hidden', !isClosed);
isClosedBadge.toggleClass('hidden', !isClosed);
isOpenBadge.toggleClass('hidden', isClosed);
+ this.closeReopenReportToggle.updateButton(isClosed);
+
let numProjectIssues = Number(projectIssuesCounter.text().replace(/[^\d]/, ''));
numProjectIssues = isClosed ? numProjectIssues - 1 : numProjectIssues + 1;
projectIssuesCounter.text(gl.text.addDelimiter(numProjectIssues));
@@ -84,11 +87,26 @@ class Issue {
new Flash(issueFailMessage);
}
- $button.prop('disabled', false);
+ this.closeReopenReportToggle.setDisable(false);
});
});
}
+ initCloseReopenReport() {
+ const container = document.querySelector('.js-issuable-close-dropdown');
+ 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();
+ }
+
static submitNoteForm(form) {
var noteText;
noteText = form.find("textarea.js-note-text").val();
diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index f93feeec1c2..c00978bfaea 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -4,6 +4,7 @@
import 'vendor/jquery.waitforimages';
import './task_list';
import './merge_request_tabs';
+import CloseReopenReportToggle from './close_reopen_report_toggle';
(function() {
this.MergeRequest = (function() {
@@ -24,6 +25,7 @@ import './merge_request_tabs';
this.initTabs();
this.initMRBtnListeners();
this.initCommitMessageListeners();
+ MergeRequest.initCloseReopenReport();
if ($("a.btn-close").length) {
this.taskList = new gl.TaskList({
dataType: 'merge_request',
@@ -119,6 +121,21 @@ import './merge_request_tabs';
$el.text(gl.text.addDelimiter(count));
};
+ MergeRequest.initCloseReopenReport = function () {
+ const container = document.querySelector('.js-issuable-close-dropdown');
+ 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 MergeRequest;
})();
}).call(window);