import { Validator } from "./Validator" import FloatValidator from "./Validators/FloatValidator" import StringValidator from "./Validators/StringValidator" import PFloatValidator from "./Validators/PFloatValidator" import TextValidator from "./Validators/TextValidator" import DateValidator from "./Validators/DateValidator" import { TimeValidator } from "./Validators/TimeValidator" import NatValidator from "./Validators/NatValidator" import IntValidator from "./Validators/IntValidator" import PNatValidator from "./Validators/PNatValidator" import DirectionValidator from "./Validators/DirectionValidator" import WikidataValidator from "./Validators/WikidataValidator" import EmailValidator from "./Validators/EmailValidator" import UrlValidator from "./Validators/UrlValidator" import OpeningHoursValidator from "./Validators/OpeningHoursValidator" import PhoneValidator from "./Validators/PhoneValidator" import ColorValidator from "./Validators/ColorValidator" import ImageUrlValidator from "./Validators/ImageUrlValidator" import TagKeyValidator from "./Validators/TagKeyValidator" import IconValidator from "./Validators/IconValidator" import SlopeValidator from "./Validators/SlopeValidator" import CollectionTimesValidator from "./Validators/CollectionTimesValidator" import IdValidator from "./Validators/IdValidator" import FediverseValidator from "./Validators/FediverseValidator" import SimpleTagValidator from "./Validators/SimpleTagValidator" import VeloparkValidator from "./Validators/VeloparkValidator" import NameSuggestionIndexValidator from "./Validators/NameSuggestionIndexValidator" import RegexValidator from "./Validators/RegexValidator" import CurrencyValidator from "./Validators/CurrencyValidator" import TagValidator from "./Validators/TagValidator" import TranslationValidator from "./Validators/TranslationValidator" import DistanceValidator from "./Validators/DistanceValidator" export const availableValidators = [ "color", "currency", "date", "time", "direction", "distance", "email", "fediverse", "float", "icon", "id", "image", "int", "key", "nat", "nsi", "opening_hours", "pfloat", "phone", "pnat", "points_in_time", "regex", "simple_tag", "slope", "string", "tag", "text", "translation", "url", "velopark", "wikidata", ] as const export type ValidatorType = (typeof availableValidators)[number] export default class Validators { public static readonly availableTypes = availableValidators public static readonly AllValidators: ReadonlyArray = [ new StringValidator(), new FloatValidator(), new PFloatValidator(), new TextValidator(), new NatValidator(), new PNatValidator(), new IntValidator(), new DateValidator(), new TimeValidator(), new ColorValidator(), new DirectionValidator(), new SlopeValidator(), new UrlValidator(), new EmailValidator(), new PhoneValidator(), new FediverseValidator(), new ImageUrlValidator(), new OpeningHoursValidator(), new CollectionTimesValidator(), new CurrencyValidator(), new WikidataValidator(), new TagKeyValidator(), new IconValidator(), new VeloparkValidator(), new IdValidator(), new RegexValidator(), new SimpleTagValidator(), new TranslationValidator(), new TagValidator(), new NameSuggestionIndexValidator(), new DistanceValidator(), ] private static _byType = Validators._byTypeConstructor() public static HelpText(): string { const explanations: string[] = Validators.AllValidators.flatMap((type) => [ "### " + type.name, type.explanation, ]) return [ "# Available types for text fields", "The listed types here trigger a special input element. Use them in `tagrendering.freeform.type` of your tagrendering to activate them", ...explanations, ].join("\n") } private static _byTypeConstructor(): Map { const map = new Map() for (const validator of Validators.AllValidators) { map.set(validator.name, validator) } return map } static get(type: ValidatorType): Validator { return Validators._byType.get(type) } }