forked from MapComplete/MapComplete
		
	Refactoring: move all code files into a src directory
This commit is contained in:
		
							parent
							
								
									de99f56ca8
								
							
						
					
					
						commit
						e75d2789d2
					
				
					 389 changed files with 0 additions and 12 deletions
				
			
		
							
								
								
									
										91
									
								
								src/UI/Input/FileSelectorButton.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/UI/Input/FileSelectorButton.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| import BaseUIElement from "../BaseUIElement" | ||||
| import { InputElement } from "./InputElement" | ||||
| import { UIEventSource } from "../../Logic/UIEventSource" | ||||
| 
 | ||||
| /** | ||||
|  * @deprecated | ||||
|  */ | ||||
| export default class FileSelectorButton extends InputElement<FileList> { | ||||
|     private static _nextid | ||||
|     private readonly _value = new UIEventSource<FileList>(undefined) | ||||
|     private readonly _label: BaseUIElement | ||||
|     private readonly _acceptType: string | ||||
|     private readonly allowMultiple: boolean | ||||
|     private readonly _labelClasses: string | ||||
| 
 | ||||
|     constructor( | ||||
|         label: BaseUIElement, | ||||
|         options?: { | ||||
|             acceptType: "image/*" | string | ||||
|             allowMultiple: true | boolean | ||||
|             labelClasses?: string | ||||
|         } | ||||
|     ) { | ||||
|         super() | ||||
|         this._label = label | ||||
|         this._acceptType = options?.acceptType ?? "image/*" | ||||
|         this._labelClasses = options?.labelClasses ?? "" | ||||
|         this.SetClass("block cursor-pointer") | ||||
|         label.SetClass("cursor-pointer") | ||||
|         this.allowMultiple = options?.allowMultiple ?? true | ||||
|     } | ||||
| 
 | ||||
|     GetValue(): UIEventSource<FileList> { | ||||
|         return this._value | ||||
|     } | ||||
| 
 | ||||
|     IsValid(t: FileList): boolean { | ||||
|         return true | ||||
|     } | ||||
| 
 | ||||
|     protected InnerConstructElement(): HTMLElement { | ||||
|         const self = this | ||||
|         const el = document.createElement("form") | ||||
|         const label = document.createElement("label") | ||||
|         label.appendChild(this._label.ConstructElement()) | ||||
|         label.classList.add(...this._labelClasses.split(" ").filter((t) => t !== "")) | ||||
|         el.appendChild(label) | ||||
| 
 | ||||
|         const actualInputElement = document.createElement("input") | ||||
|         actualInputElement.style.cssText = "display:none" | ||||
|         actualInputElement.type = "file" | ||||
|         actualInputElement.accept = this._acceptType | ||||
|         actualInputElement.name = "picField" | ||||
|         actualInputElement.multiple = this.allowMultiple | ||||
|         actualInputElement.id = "fileselector" + FileSelectorButton._nextid | ||||
|         FileSelectorButton._nextid++ | ||||
| 
 | ||||
|         label.htmlFor = actualInputElement.id | ||||
| 
 | ||||
|         actualInputElement.onchange = () => { | ||||
|             if (actualInputElement.files !== null) { | ||||
|                 self._value.setData(actualInputElement.files) | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         el.addEventListener("submit", (e) => { | ||||
|             if (actualInputElement.files !== null) { | ||||
|                 self._value.setData(actualInputElement.files) | ||||
|             } | ||||
|             e.preventDefault() | ||||
|         }) | ||||
| 
 | ||||
|         el.appendChild(actualInputElement) | ||||
| 
 | ||||
|         el.addEventListener("dragover", (event) => { | ||||
|             event.stopPropagation() | ||||
|             event.preventDefault() | ||||
|             // Style the drag-and-drop as a "copy file" operation.
 | ||||
|             event.dataTransfer.dropEffect = "copy" | ||||
|         }) | ||||
| 
 | ||||
|         el.addEventListener("drop", (event) => { | ||||
|             event.stopPropagation() | ||||
|             event.preventDefault() | ||||
|             const fileList = event.dataTransfer.files | ||||
|             this._value.setData(fileList) | ||||
|         }) | ||||
| 
 | ||||
|         return el | ||||
|     } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue