taggart

Simple golang tagging filesystem webapp
Log | Files | Refs

bulk-tag.js (2175B)


      1 document.addEventListener('DOMContentLoaded', function () {
      2   const fileRangeInput = document.getElementById('file_range');
      3   if (!fileRangeInput) return;
      4 
      5   const fileForm = fileRangeInput.closest('form');
      6   if (!fileForm) return;
      7 
      8   function updateValueField() {
      9     const checkedOp = fileForm.querySelector('input[name="operation"]:checked');
     10     const valueField = fileForm.querySelector('#value');
     11     const valueLabel = fileForm.querySelector('label[for="value"]');
     12 
     13     if (!checkedOp || !valueField || !valueLabel) return;
     14 
     15     if (checkedOp.value === 'add') {
     16         valueField.required = true;
     17         valueLabel.innerHTML = 'Value: <span style="color: red;">*</span>';
     18     } else {
     19         valueField.required = false;
     20         valueLabel.innerHTML = 'Value:';
     21     }
     22 }
     23 
     24 // Set up event listeners for radio buttons inside this form
     25 fileForm.querySelectorAll('input[name="operation"]').forEach(function (radio) {
     26     radio.addEventListener('change', updateValueField);
     27 });
     28 
     29 // Initialize on page load
     30 updateValueField();
     31 
     32   // Add form validation ONLY to the fileForm (won't affect the search form)
     33   fileForm.addEventListener('submit', function (e) {
     34     const fileRange = (fileForm.querySelector('#file_range') || { value: '' }).value.trim();
     35     const category = (fileForm.querySelector('#category') || { value: '' }).value.trim();
     36     const value = (fileForm.querySelector('#value') || { value: '' }).value.trim();
     37     const checkedOp = fileForm.querySelector('input[name="operation"]:checked');
     38     const operation = checkedOp ? checkedOp.value : '';
     39 
     40     if (!fileRange) {
     41         alert('Please enter a file ID range');
     42         e.preventDefault();
     43         return;
     44     }
     45 
     46     if (!category) {
     47         alert('Please enter a category');
     48         e.preventDefault();
     49         return;
     50     }
     51 
     52     if (operation === 'add' && !value) {
     53         alert('Please enter a tag value when adding tags');
     54         e.preventDefault();
     55         return;
     56     }
     57 
     58     const rangePattern = /^[\d\s,-]+$/;
     59     if (!rangePattern.test(fileRange)) {
     60         alert('File range should only contain numbers, commas, dashes, and spaces');
     61         e.preventDefault();
     62         return;
     63     }
     64 });
     65 });