1import { Controller } from "@hotwired/stimulus"; 2var _Class = class extends Controller { 3 initialize() { 4 this.clear = this.clear.bind(this); 5 this.onInputChange = this.onInputChange.bind(this); 6 this.onDragEnter = this.onDragEnter.bind(this); 7 this.onDragLeave = this.onDragLeave.bind(this); 8 } 9 connect() { 10 this.clear(); 11 this.previewClearButtonTarget.addEventListener("click", this.clear); 12 this.inputTarget.addEventListener("change", this.onInputChange); 13 this.element.addEventListener("dragenter", this.onDragEnter); 14 this.element.addEventListener("dragleave", this.onDragLeave); 15 this.dispatchEvent("connect"); 16 } 17 disconnect() { 18 this.previewClearButtonTarget.removeEventListener("click", this.clear); 19 this.inputTarget.removeEventListener("change", this.onInputChange); 20 this.element.removeEventListener("dragenter", this.onDragEnter); 21 this.element.removeEventListener("dragleave", this.onDragLeave); 22 } 23 clear() { 24 this.inputTarget.value = ""; 25 this.inputTarget.style.display = "block"; 26 this.placeholderTarget.style.display = "block"; 27 this.previewTarget.style.display = "none"; 28 this.previewImageTarget.style.display = "none"; 29 this.previewImageTarget.style.backgroundImage = "none"; 30 this.previewFilenameTarget.textContent = ""; 31 this.dispatchEvent("clear"); 32 } 33 onInputChange(event) { 34 const file = event.target.files[0]; 35 if (typeof file === "undefined") return; 36 this.inputTarget.style.display = "none"; 37 this.placeholderTarget.style.display = "none"; 38 this.previewFilenameTarget.textContent = file.name; 39 this.previewTarget.style.display = "flex"; 40 this.previewImageTarget.style.display = "none"; 41 if (file.type && file.type.indexOf("image") !== -1) this._populateImagePreview(file); 42 this.dispatchEvent("change", file); 43 } 44 _populateImagePreview(file) { 45 if (typeof FileReader === "undefined") return; 46 const reader = new FileReader(); 47 reader.addEventListener("load", (event) => { 48 this.previewImageTarget.style.display = "block"; 49 this.previewImageTarget.style.backgroundImage = `url("${event.target.result}")`; 50 }); 51 reader.readAsDataURL(file); 52 } 53 onDragEnter() { 54 this.inputTarget.style.display = "block"; 55 this.placeholderTarget.style.display = "block"; 56 this.previewTarget.style.display = "none"; 57 } 58 onDragLeave(event) { 59 event.preventDefault(); 60 if (!this.element.contains(event.relatedTarget)) { 61 this.inputTarget.style.display = "none"; 62 this.placeholderTarget.style.display = "none"; 63 this.previewTarget.style.display = "block"; 64 } 65 } 66 dispatchEvent(name, payload = {}) { 67 this.dispatch(name, { 68 detail: payload, 69 prefix: "dropzone" 70 }); 71 } 72}; 73_Class.targets = [ 74 "input", 75 "placeholder", 76 "preview", 77 "previewClearButton", 78 "previewFilename", 79 "previewImage" 80]; 81export { _Class as default };
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.