debian-mirror-gitlab/app/assets/javascripts/issue.js

155 lines
5.1 KiB
JavaScript
Raw Normal View History

2017-08-17 22:00:37 +05:30
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, one-var, no-underscore-dangle, one-var-declaration-per-line, object-shorthand, no-unused-vars, no-new, comma-dangle, consistent-return, quotes, dot-notation, quote-props, prefer-arrow-callback, max-len */
2017-09-10 17:25:29 +05:30
/* global Flash */
2016-09-13 17:45:13 +05:30
2017-09-10 17:25:29 +05:30
import 'vendor/jquery.waitforimages';
import '~/lib/utils/text_utility';
import './flash';
import TaskList from './task_list';
import CreateMergeRequestDropdown from './create_merge_request_dropdown';
import IssuablesHelper from './helpers/issuables_helper';
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
class Issue {
constructor() {
if ($('a.btn-close').length) {
2017-09-10 17:25:29 +05:30
this.taskList = new TaskList({
2017-08-17 22:00:37 +05:30
dataType: 'issue',
fieldName: 'description',
selector: '.detail-page-description',
onSuccess: (result) => {
document.querySelector('#task_status').innerText = result.task_status;
document.querySelector('#task_status_short').innerText = result.task_status_short;
}
});
this.initIssueBtnEventListeners();
2016-09-13 17:45:13 +05:30
}
2017-08-17 22:00:37 +05:30
Issue.$btnNewBranch = $('#new-branch');
Issue.createMrDropdownWrap = document.querySelector('.create-mr-dropdown-wrap');
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
Issue.initMergeRequests();
Issue.initRelatedBranches();
2016-09-13 17:45:13 +05:30
2017-09-10 17:25:29 +05:30
this.closeButtons = $('a.btn-close');
this.reopenButtons = $('a.btn-reopen');
this.initCloseReopenReport();
2017-08-17 22:00:37 +05:30
if (Issue.createMrDropdownWrap) {
this.createMergeRequestDropdown = new CreateMergeRequestDropdown(Issue.createMrDropdownWrap);
}
}
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
initIssueBtnEventListeners() {
const issueFailMessage = 'Unable to update this issue at this time.';
2016-09-13 17:45:13 +05:30
2017-09-10 17:25:29 +05:30
return $(document).on('click', 'a.btn-close, a.btn-reopen', (e) => {
2017-08-17 22:00:37 +05:30
var $button, shouldSubmit, url;
e.preventDefault();
e.stopImmediatePropagation();
$button = $(e.currentTarget);
shouldSubmit = $button.hasClass('btn-comment');
if (shouldSubmit) {
Issue.submitNoteForm($button.closest('form'));
}
2017-09-10 17:25:29 +05:30
this.disableCloseReopenButton($button);
2017-08-17 22:00:37 +05:30
url = $button.attr('href');
2016-09-13 17:45:13 +05:30
return $.ajax({
2017-08-17 22:00:37 +05:30
type: 'PUT',
url: url
})
.fail(() => new Flash(issueFailMessage))
.done((data) => {
2017-09-10 17:25:29 +05:30
const isClosedBadge = $('div.status-box-closed');
const isOpenBadge = $('div.status-box-open');
const projectIssuesCounter = $('.issue_counter');
2017-08-17 22:00:37 +05:30
if ('id' in data) {
$(document).trigger('issuable:change');
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
const isClosed = $button.hasClass('btn-close');
isClosedBadge.toggleClass('hidden', !isClosed);
isOpenBadge.toggleClass('hidden', isClosed);
2016-09-13 17:45:13 +05:30
2017-09-10 17:25:29 +05:30
this.toggleCloseReopenButton(isClosed);
2017-08-17 22:00:37 +05:30
let numProjectIssues = Number(projectIssuesCounter.text().replace(/[^\d]/, ''));
numProjectIssues = isClosed ? numProjectIssues - 1 : numProjectIssues + 1;
projectIssuesCounter.text(gl.text.addDelimiter(numProjectIssues));
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
if (this.createMergeRequestDropdown) {
if (isClosed) {
this.createMergeRequestDropdown.unavailable();
this.createMergeRequestDropdown.disable();
} else {
// We should check in case a branch was created in another tab
this.createMergeRequestDropdown.checkAbilityToCreateBranch();
}
}
2016-09-13 17:45:13 +05:30
} else {
2017-08-17 22:00:37 +05:30
new Flash(issueFailMessage);
2016-09-13 17:45:13 +05:30
}
2017-09-10 17:25:29 +05:30
})
.then(() => {
this.disableCloseReopenButton($button, false);
2016-09-13 17:45:13 +05:30
});
2017-08-17 22:00:37 +05:30
});
}
2017-09-10 17:25:29 +05:30
initCloseReopenReport() {
this.closeReopenReportToggle = IssuablesHelper.initCloseReopenReport();
if (this.closeButtons) this.closeButtons = this.closeButtons.not('.issuable-close-button');
if (this.reopenButtons) this.reopenButtons = this.reopenButtons.not('.issuable-close-button');
}
disableCloseReopenButton($button, shouldDisable) {
if (this.closeReopenReportToggle) {
this.closeReopenReportToggle.setDisable(shouldDisable);
} else {
$button.prop('disabled', shouldDisable);
}
}
toggleCloseReopenButton(isClosed) {
if (this.closeReopenReportToggle) this.closeReopenReportToggle.updateButton(isClosed);
this.closeButtons.toggleClass('hidden', isClosed);
this.reopenButtons.toggleClass('hidden', !isClosed);
}
2017-08-17 22:00:37 +05:30
static submitNoteForm(form) {
var noteText;
noteText = form.find("textarea.js-note-text").val();
if (noteText.trim().length > 0) {
return form.submit();
}
}
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
static initMergeRequests() {
var $container;
$container = $('#merge-requests');
return $.getJSON($container.data('url')).fail(function() {
return new Flash('Failed to load referenced merge requests');
}).done(function(data) {
if ('html' in data) {
return $container.html(data.html);
}
});
}
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
static initRelatedBranches() {
var $container;
$container = $('#related-branches');
return $.getJSON($container.data('url')).fail(function() {
return new Flash('Failed to load related branches');
}).done(function(data) {
if ('html' in data) {
return $container.html(data.html);
}
});
}
}
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
export default Issue;