code.gitea.io/gitea@v1.22.3/web_src/js/features/comp/LabelEdit.js (about)

     1  import $ from 'jquery';
     2  
     3  function isExclusiveScopeName(name) {
     4    return /.*[^/]\/[^/].*/.test(name);
     5  }
     6  
     7  function updateExclusiveLabelEdit(form) {
     8    const nameInput = document.querySelector(`${form} .label-name-input`);
     9    const exclusiveField = document.querySelector(`${form} .label-exclusive-input-field`);
    10    const exclusiveCheckbox = document.querySelector(`${form} .label-exclusive-input`);
    11    const exclusiveWarning = document.querySelector(`${form} .label-exclusive-warning`);
    12  
    13    if (isExclusiveScopeName(nameInput.value)) {
    14      exclusiveField?.classList.remove('muted');
    15      exclusiveField?.removeAttribute('aria-disabled');
    16      if (exclusiveCheckbox.checked && exclusiveCheckbox.getAttribute('data-exclusive-warn')) {
    17        exclusiveWarning?.classList.remove('tw-hidden');
    18      } else {
    19        exclusiveWarning?.classList.add('tw-hidden');
    20      }
    21    } else {
    22      exclusiveField?.classList.add('muted');
    23      exclusiveField?.setAttribute('aria-disabled', 'true');
    24      exclusiveWarning?.classList.add('tw-hidden');
    25    }
    26  }
    27  
    28  export function initCompLabelEdit(selector) {
    29    if (!$(selector).length) return;
    30  
    31    // Create label
    32    $('.new-label.button').on('click', () => {
    33      updateExclusiveLabelEdit('.new-label');
    34      $('.new-label.modal').modal({
    35        onApprove() {
    36          const form = document.querySelector('.new-label.form');
    37          if (!form.checkValidity()) {
    38            form.reportValidity();
    39            return false;
    40          }
    41          $('.new-label.form').trigger('submit');
    42        },
    43      }).modal('show');
    44      return false;
    45    });
    46  
    47    // Edit label
    48    $('.edit-label-button').on('click', function () {
    49      $('#label-modal-id').val($(this).data('id'));
    50  
    51      const $nameInput = $('.edit-label .label-name-input');
    52      $nameInput.val($(this).data('title'));
    53  
    54      const $isArchivedCheckbox = $('.edit-label .label-is-archived-input');
    55      $isArchivedCheckbox[0].checked = this.hasAttribute('data-is-archived');
    56  
    57      const $exclusiveCheckbox = $('.edit-label .label-exclusive-input');
    58      $exclusiveCheckbox[0].checked = this.hasAttribute('data-exclusive');
    59      // Warn when label was previously not exclusive and used in issues
    60      $exclusiveCheckbox.data('exclusive-warn',
    61        $(this).data('num-issues') > 0 &&
    62        (!this.hasAttribute('data-exclusive') || !isExclusiveScopeName($nameInput.val())));
    63      updateExclusiveLabelEdit('.edit-label');
    64  
    65      $('.edit-label .label-desc-input').val(this.getAttribute('data-description'));
    66  
    67      const colorInput = document.querySelector('.edit-label .js-color-picker-input input');
    68      colorInput.value = this.getAttribute('data-color');
    69      colorInput.dispatchEvent(new Event('input', {bubbles: true}));
    70  
    71      $('.edit-label.modal').modal({
    72        onApprove() {
    73          const form = document.querySelector('.edit-label.form');
    74          if (!form.checkValidity()) {
    75            form.reportValidity();
    76            return false;
    77          }
    78          $('.edit-label.form').trigger('submit');
    79        },
    80      }).modal('show');
    81      return false;
    82    });
    83  
    84    $('.new-label .label-name-input').on('input', () => {
    85      updateExclusiveLabelEdit('.new-label');
    86    });
    87    $('.new-label .label-exclusive-input').on('change', () => {
    88      updateExclusiveLabelEdit('.new-label');
    89    });
    90    $('.edit-label .label-name-input').on('input', () => {
    91      updateExclusiveLabelEdit('.edit-label');
    92    });
    93    $('.edit-label .label-exclusive-input').on('change', () => {
    94      updateExclusiveLabelEdit('.edit-label');
    95    });
    96  }