Darryl Miles
06/29/2024, 7:04 AMtrait
or interface to attach to any group of existing types.
external interface HasValidationApi {
val validity: ValidationState
val setCustomValidity(error: String)
// ... more items removed
}
fun hasValidationApi(ele: HTMLElement): HasValidationApi? {
return when(ele) {
is HTMLInputElement -> ele as HasValidationApi
is HTMLSelectElement -> ele as HasValidationApi
is HTMLTextAreaElement -> ele as HasValidationApi
is HTMLFieldSetElement -> ele as HasValidationApi
is HTMLButtonElement -> ele as HasValidationApi
is HTMLOutputElement -> ele as HasValidationApi
else -> null
}
}
fun validityStateMessage(validityState: ValidityState, ignoreCustomError: Boolean = true): String {
return when {
validityState.badInput -> "Bad Input"
validityState.customError && !ignoreCustomError -> "Custom Error"
validityState.patternMismatch -> "Pattern Mismatch"
// ... items removed
validityState.valid -> ""
else -> "Validity Sate Unknown"
}
}
fun onMyEventSetCustomValidity(ele: HTMLElemen) {
val e = hasValidationApi(ele)
if(e != null) {
val error = validityStateMessage(e.validity, ignoreCustomError = true)
e.setCustomValidity(error)
}
}