47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
|
|
import { UINode } from "./node";
|
||
|
|
|
||
|
|
export class FileInput extends UINode {
|
||
|
|
private id: string;
|
||
|
|
private titleElement: HTMLLabelElement;
|
||
|
|
private inputElement: HTMLInputElement;
|
||
|
|
public constructor(title: string, multiple: boolean = false) {
|
||
|
|
super(title);
|
||
|
|
this.id = Math.random().toString();
|
||
|
|
this.titleElement = document.createElement("label");
|
||
|
|
this.titleElement.innerText = title;
|
||
|
|
this.titleElement.id = `fileinpt_title_${this.id}`;
|
||
|
|
this.inputElement = document.createElement("input");
|
||
|
|
this.inputElement.id = `fileinpt_${this.id}`;
|
||
|
|
this.inputElement.type = "file";
|
||
|
|
if (multiple) {
|
||
|
|
this.inputElement.multiple = true;
|
||
|
|
}
|
||
|
|
this.titleElement.appendChild(this.inputElement);
|
||
|
|
this.element.appendChild(this.titleElement);
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public focus() {
|
||
|
|
this.inputElement.focus();
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
public getElement(): HTMLElement {
|
||
|
|
return this.inputElement;
|
||
|
|
}
|
||
|
|
|
||
|
|
public setText(text: string) {
|
||
|
|
this.title = text;
|
||
|
|
this.titleElement.innerText = text;
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
public getFiles(): FileList | null {
|
||
|
|
return this.inputElement.files;
|
||
|
|
}
|
||
|
|
|
||
|
|
public setAccept(accept: string) {
|
||
|
|
this.inputElement.accept = accept;
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
}
|