forked from extern/egroupware
Implement regex validator
This commit is contained in:
parent
39cea7e3cb
commit
882f2a913c
@ -9,9 +9,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import {css} from "@lion/core";
|
import {css, PropertyValues} from "@lion/core";
|
||||||
import {LionInput} from "@lion/input";
|
import {LionInput} from "@lion/input";
|
||||||
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
||||||
|
import {Regex} from "../Validators/Regex";
|
||||||
|
|
||||||
export class Et2Textbox extends Et2InputWidget(LionInput)
|
export class Et2Textbox extends Et2InputWidget(LionInput)
|
||||||
{
|
{
|
||||||
@ -32,6 +33,12 @@ export class Et2Textbox extends Et2InputWidget(LionInput)
|
|||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
...super.properties,
|
...super.properties,
|
||||||
|
/**
|
||||||
|
* Perl regular expression eg. '/^[0-9][a-f]{4}$/i'
|
||||||
|
*
|
||||||
|
* Not to be confused with this.validators, which is a list of validators for this widget
|
||||||
|
*/
|
||||||
|
validator: String,
|
||||||
onkeypress: Function,
|
onkeypress: Function,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,6 +52,41 @@ export class Et2Textbox extends Et2InputWidget(LionInput)
|
|||||||
{
|
{
|
||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @param {import('@lion/core').PropertyValues } changedProperties */
|
||||||
|
updated(changedProperties : PropertyValues)
|
||||||
|
{
|
||||||
|
super.updated(changedProperties);
|
||||||
|
if(changedProperties.has('validator'))
|
||||||
|
{
|
||||||
|
// Remove all existing Pattern validators (avoids duplicates)
|
||||||
|
this.validators = (this.validators || []).filter((validator) => validator instanceof Regex)
|
||||||
|
this.validators.push(new Regex(this.validator));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get validator()
|
||||||
|
{
|
||||||
|
return this.__validator;
|
||||||
|
}
|
||||||
|
|
||||||
|
set validator(value)
|
||||||
|
{
|
||||||
|
if(typeof value == 'string')
|
||||||
|
{
|
||||||
|
let parts = value.split('/');
|
||||||
|
let flags = parts.pop();
|
||||||
|
if(parts.length < 2 || parts[0] !== '')
|
||||||
|
{
|
||||||
|
this.egw().debug(this.egw().lang("'%1' has an invalid format !!!", value));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parts.shift();
|
||||||
|
this.__validator = new RegExp(parts.join('/'), flags);
|
||||||
|
|
||||||
|
this.requestUpdate("validator");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @ts-ignore TypeScript is not recognizing that Et2Textbox is a LitElement
|
// @ts-ignore TypeScript is not recognizing that Et2Textbox is a LitElement
|
||||||
|
15
api/js/etemplate/Validators/Regex.ts
Normal file
15
api/js/etemplate/Validators/Regex.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import {Pattern} from "@lion/form-core";
|
||||||
|
|
||||||
|
export class Regex extends Pattern
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Give a message about this field being required. Could be customised according to MessageData.
|
||||||
|
* @param {MessageData | undefined} data
|
||||||
|
* @returns {Promise<string>}
|
||||||
|
*/
|
||||||
|
static async getMessage(data)
|
||||||
|
{
|
||||||
|
// TODO: This is a poor error message, it shows the REGEX
|
||||||
|
return data.formControl.egw().lang("'%1' has an invalid format !!!", data.params);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user