diff options
author | Luke "Jared" Bennett <lbennett@gitlab.com> | 2017-06-07 11:18:35 +0100 |
---|---|---|
committer | Luke "Jared" Bennett <lbennett@gitlab.com> | 2017-07-07 14:55:17 +0100 |
commit | cc1e51efa7706a738e2c64693da67013638fede6 (patch) | |
tree | 4d9b6738580c05e2bbd89c0e567a30baee3fc4a3 /app/assets/javascripts | |
parent | 87d90b5b5e2fa6d0eed469db61878b942afdbee7 (diff) | |
download | gitlab-ce-cc1e51efa7706a738e2c64693da67013638fede6.tar.gz |
Added report issuable feature
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r-- | app/assets/javascripts/close_reopen_report_toggle.js | 102 | ||||
-rw-r--r-- | app/assets/javascripts/comment_type_toggle.js | 5 | ||||
-rw-r--r-- | app/assets/javascripts/issue.js | 32 | ||||
-rw-r--r-- | app/assets/javascripts/merge_request.js | 17 |
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); |