summaryrefslogtreecommitdiffstats
path: root/web_src/js/features/comp
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/features/comp')
-rw-r--r--web_src/js/features/comp/LabelEdit.js69
1 files changed, 60 insertions, 9 deletions
diff --git a/web_src/js/features/comp/LabelEdit.js b/web_src/js/features/comp/LabelEdit.js
index df294078fa..313d406821 100644
--- a/web_src/js/features/comp/LabelEdit.js
+++ b/web_src/js/features/comp/LabelEdit.js
@@ -1,26 +1,64 @@
import $ from 'jquery';
import {initCompColorPicker} from './ColorPicker.js';
+function isExclusiveScopeName(name) {
+ return /.*[^/]\/[^/].*/.test(name);
+}
+
+function updateExclusiveLabelEdit(form) {
+ const nameInput = $(`${form} .label-name-input`);
+ const exclusiveField = $(`${form} .label-exclusive-input-field`);
+ const exclusiveCheckbox = $(`${form} .label-exclusive-input`);
+ const exclusiveWarning = $(`${form} .label-exclusive-warning`);
+
+ if (isExclusiveScopeName(nameInput.val())) {
+ exclusiveField.removeClass('muted');
+ if (exclusiveCheckbox.prop('checked') && exclusiveCheckbox.data('exclusive-warn')) {
+ exclusiveWarning.removeClass('gt-hidden');
+ } else {
+ exclusiveWarning.addClass('gt-hidden');
+ }
+ } else {
+ exclusiveField.addClass('muted');
+ exclusiveWarning.addClass('gt-hidden');
+ }
+}
+
export function initCompLabelEdit(selector) {
if (!$(selector).length) return;
+ initCompColorPicker();
+
// Create label
- const $newLabelPanel = $('.new-label.segment');
$('.new-label.button').on('click', () => {
- $newLabelPanel.show();
- });
- $('.new-label.segment .cancel').on('click', () => {
- $newLabelPanel.hide();
+ updateExclusiveLabelEdit('.new-label');
+ $('.new-label.modal').modal({
+ onApprove() {
+ $('.new-label.form').trigger('submit');
+ }
+ }).modal('show');
+ return false;
});
- initCompColorPicker();
-
+ // Edit label
$('.edit-label-button').on('click', function () {
$('.edit-label .color-picker').minicolors('value', $(this).data('color'));
$('#label-modal-id').val($(this).data('id'));
- $('.edit-label .new-label-input').val($(this).data('title'));
- $('.edit-label .new-label-desc-input').val($(this).data('description'));
+
+ const nameInput = $('.edit-label .label-name-input');
+ nameInput.val($(this).data('title'));
+
+ const exclusiveCheckbox = $('.edit-label .label-exclusive-input');
+ exclusiveCheckbox.prop('checked', this.hasAttribute('data-exclusive'));
+ // Warn when label was previously not exclusive and used in issues
+ exclusiveCheckbox.data('exclusive-warn',
+ $(this).data('num-issues') > 0 &&
+ (!this.hasAttribute('data-exclusive') || !isExclusiveScopeName(nameInput.val())));
+ updateExclusiveLabelEdit('.edit-label');
+
+ $('.edit-label .label-desc-input').val($(this).data('description'));
$('.edit-label .color-picker').val($(this).data('color'));
$('.edit-label .minicolors-swatch-color').css('background-color', $(this).data('color'));
+
$('.edit-label.modal').modal({
onApprove() {
$('.edit-label.form').trigger('submit');
@@ -28,4 +66,17 @@ export function initCompLabelEdit(selector) {
}).modal('show');
return false;
});
+
+ $('.new-label .label-name-input').on('input', () => {
+ updateExclusiveLabelEdit('.new-label');
+ });
+ $('.new-label .label-exclusive-input').on('change', () => {
+ updateExclusiveLabelEdit('.new-label');
+ });
+ $('.edit-label .label-name-input').on('input', () => {
+ updateExclusiveLabelEdit('.edit-label');
+ });
+ $('.edit-label .label-exclusive-input').on('change', () => {
+ updateExclusiveLabelEdit('.edit-label');
+ });
}