Files
authentik/web/src/elements/AkControlElement.ts
2025-07-10 22:47:22 +00:00

43 lines
1.0 KiB
TypeScript

import { AKElement } from "#elements/Base";
/**
* @class - prototype for all of our hand-made input elements
*
* Ensures that the `data-ak-control` property is always set, so that
* scrapers can find it easily, and adds a corresponding method for
* extracting the value.
*
*/
export class AkControlElement<T = string | string[]> extends AKElement {
constructor() {
super();
this.dataset.akControl = "true";
}
json(): T {
throw new Error("Controllers using this protocol must override this method");
}
get toJson(): T {
return this.json();
}
get isValid(): boolean {
return true;
}
}
export function isControlElement(element: Element | HTMLElement): element is AkControlElement {
if (!(element instanceof HTMLElement)) return false;
if (element instanceof AkControlElement) return true;
return "dataset" in element && element.dataset.akControl === "true";
}
declare global {
interface HTMLElementTagNameMap {
"[data-ak-control]": AkControlElement;
}
}