FormManager/modules/FMDatalistInput.ts
Florian Bouillon a9d86f6cae
Updated datalistinput
Support "" and Fixed some bug
2019-10-08 17:37:28 +02:00

63 lines
1.6 KiB
TypeScript

import { FMAssignInterface } from '../Interfaces';
import FormManager from "../FormManager"
import FMInput from "../FMInput"
/**
* the upgraded datalist element
* @priority 2
* @class FMDatalistInput
* @extends {FMInput}
*/
export default class FMDatalistInput extends FMInput {
datalist: HTMLDataListElement
isStrict: boolean
constructor(element: HTMLInputElement, form: FormManager) {
super(element, form)
this.isStrict = this.element.hasAttribute("data-strict")
let id = this.element.getAttribute("list")
let tmpDatalist = document.getElementById(id)
this.datalist = tmpDatalist !== undefined ? tmpDatalist as HTMLDataListElement : undefined
}
setValue(value: string) {
if (value == "") {
this.element.value = ""
return
}
if (this.datalist) {
if ((value as any).id != undefined) {
value = (value as any).id
}
let option: HTMLOptionElement = this.datalist.querySelector(`[data-value="${value}"]`)
if (option != undefined) {
this.element.value = option.value
return
}
if (option == undefined && !this.isStrict) {
this.element.value = value
return
}
if (option || !this.isStrict) {
this.element.value = value
return
}
}
}
getValue(): string {
if (this.datalist) {
let option: HTMLOptionElement = this.datalist.querySelector(`[value="${this.element.value}"]`)
if (option) return this.formatValue(option.dataset.value)
}
return this.isStrict ? undefined : this.formatValue(this.element.value)
}
}
export const FMDatalistAssignement: FMAssignInterface = {
input: FMDatalistInput,
attributes: "list",
tagName: "input"
}