1import { getRequiredElement } from "./utilities.js?v=2.2.2.0"; 2import { getFilesAsync } from "./fileInput.js?v=2.2.2.0"; 3 4const _instances = []; 5export function initialize(element, elementId) { 6 element = getRequiredElement(element, elementId); 7 8 if (!element) 9 return; 10 11 _instances[elementId] = element; 12 initializeDropZone(element); 13} 14 15export function destroy(element, elementId) { 16 var instances = _instances || {}; 17 delete instances[elementId]; 18} 19 20function initializeDropZone(element) { 21 let fileInput = setFileInput(element); 22 if (fileInput) { 23 element.addEventListener("dragenter", async (e) => await onDragHover(e, element), false); 24 element.addEventListener("dragover", async (e) => await onDragHover(e, element), false); 25 element.addEventListener("dragleave", onDragLeave); 26 element.addEventListener("drop", async (e) => await onDrop(e, element), false); 27 element.addEventListener('paste', (e) => onPaste(e, element)); 28 } 29} 30 31function onDragHover(e, element) { 32 if (element.fileInput.disabled) { 33 e.dataTransfer.dropEffect = "none"; 34 if (element.fileInput == e.target) { 35 //Fallback to FileInput behavior 36 return; 37 } 38 39 } 40 e.preventDefault(); 41} 42 43function onDragLeave(e) { 44 e.preventDefault(); 45} 46 47async function onDrop(e, element) { 48 e.preventDefault(); 49 let fileInput = getFileInput(element); 50 51 if (fileInput.disabled) 52 return; 53 54 let _files = await getFilesAsync(e.dataTransfer, fileInput.webkitdirectory, fileInput.multiple); 55 fileInput.files = _files; 56 57 const event = new Event('change', { bubbles: true }); 58 fileInput.dispatchEvent(event); 59} 60 61function onPaste(e, element) { 62 let fileInput = getFileInput(element); 63 64 fileInput.files = e.clipboardData.files; 65 const event = new Event('change', { bubbles: true }); 66 fileInput.dispatchEvent(event); 67} 68 69function setFileInput(element) { 70 let fileInput = element.querySelector("input[type=file]"); 71 _instances[element.id].fileInput = fileInput; 72 return fileInput; 73} 74 75function getFileInput(element) { 76 return _instances[element.id].fileInput; 77}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.