diff --git a/assets/js/tools.js b/assets/js/tools.js index 468ea7c..1bb2b17 100644 --- a/assets/js/tools.js +++ b/assets/js/tools.js @@ -1180,9 +1180,16 @@ function setupUpload() { if (e.dataTransfer?.files?.length) handleFiles(e.dataTransfer.files); }); + // Stop label-for and the input itself from bubbling into the zone click + // handler — otherwise the picker opens twice (native + programmatic). + const _uploadLabel = els.uploadZone.querySelector('label[for="' + els.uploadInput.id + '"]'); + if (_uploadLabel) _uploadLabel.addEventListener('click', (e) => e.stopPropagation()); + els.uploadInput.addEventListener('click', (e) => e.stopPropagation()); els.uploadZone.addEventListener('click', (e) => { if (e.target === els.uploadClear || els.uploadClear?.contains(e.target)) return; - if (e.target.tagName === 'LABEL') return; + if (e.target === els.uploadInput) return; + const lbl = e.target.closest && e.target.closest('label'); + if (lbl && lbl.getAttribute('for') === els.uploadInput.id) return; els.uploadInput.click(); }); @@ -2268,11 +2275,17 @@ function setupAudio() { if (e.dataTransfer?.files?.length) handleAudioFiles(e.dataTransfer.files); }); + // Stop label-for and the input itself from bubbling into the zone click + // handler — otherwise the picker opens twice (native + programmatic). + const _audioLabel = els.audioZone.querySelector('label[for="' + els.audioInput.id + '"]'); + if (_audioLabel) _audioLabel.addEventListener('click', (e) => e.stopPropagation()); + els.audioInput.addEventListener('click', (e) => e.stopPropagation()); els.audioZone.addEventListener('click', (e) => { if (e.target === els.audioClear || els.audioClear?.contains(e.target)) return; if (e.target === els.audioInput) return; - if (e.target.tagName === 'LABEL') return; - if (e.target.closest('#audioFileInfo') && e.target.tagName !== 'LABEL') return; + const lbl = e.target.closest && e.target.closest('label'); + if (lbl && lbl.getAttribute('for') === els.audioInput.id) return; + if (e.target.closest('#audioFileInfo')) return; els.audioInput.click(); });