var footerJS= "";
var valueDescr = "";
if (!structKeyExists(arguments.parameters, "minLen"))
arguments.parameters.minLen = 0;
if (!structKeyExists(arguments.parameters, "maxLen"))
arguments.parameters.maxLen = 100;
if (!structKeyExists(arguments.parameters, "validationErrorMsg") || arguments.parameters.validationErrorMsg == "")
{
valueDescr = (arguments.parameters.minLen == arguments.parameters.maxLen) ? "#arguments.parameters.minLen#" : "from #arguments.parameters.minLen# to #arguments.parameters.maxLen#";
arguments.parameters.validationErrorMsg = "Please enter #valueDescr# numeric characters for the field '#arguments.parameters.label#'.";
}
if (!structKeyExists(arguments.parameters, "placeholder"))
arguments.parameters.placeholder = "";
if (!structKeyExists(arguments.parameters, "autofocus"))
arguments.parameters.autofocus = 0;
function ft_numericWithLengthControlValidate(field, isRequired, minLen, maxLen)
{
var value = field.value;
if (!isRequired && value === '')
return true;
var re = new RegExp('^[0-9]{' + minLen + ',' + maxLen + '}$');
return value.match(re);
}
function ft_numericWithLengthControlOnKeyDown(event)
{
event = event || window.event;
if (event.ctrlKey) // allow select all, cut/copy/paste, reload etc
return true;
var key = event.keyCode;
if (key === 16) // shift key by itself
return false;
if (key < 32 || key === 35 || key === 36 || key === 37 || key === 39 || key === 46) // control char, home, end, left/right arrow, fwd delete
return true;
if (!event.shiftKey && key >= 48 && key <= 57) // unshifted numeric
return true;
if (key >= 96 && key <= 105) // keypad numeric
return true;
return false;
}
if ( NOT StructKeyExists(request,"cftNumericWithLengthControl") )
{
Server.CommonSpot.UDF.resources.addFooterJS(footerJS, "Tertiary");
request.cftNumericWithLengthControl = 1;
}
writeOutput(variables.tagLib.input
(
type="text",
name=arguments.fieldName,
id=arguments.fieldDomID,
value=arguments.value,
class="#arguments.controlClass# ft_numeric-padded",
readonly=(arguments.displayMode eq "readonly"),
placeholder=arguments.parameters.placeholder,
autofocus=arguments.parameters.autofocus,
aria_describedby=arguments.describedByID,
aria_label=arguments.ariaLabel,
maxLength=arguments.parameters.maxLen,
size=arguments.parameters.maxLen,
onkeydown="return ft_numericWithLengthControlOnKeyDown(event)"
));
private string function getControlComponentName()
{
return "Text";
}
private any function getValidationJS(required string formName, required string fieldName, required boolean isRequired)
{
var jsRequired = arguments.isRequired ? "true" : "false";
return "ft_numericWithLengthControlValidate(document.#arguments.formName#.#arguments.fieldName#, #jsRequired#, #arguments.parameters.minLen#, #arguments.parameters.maxLen#)";
}
private string function getValidationMsg(required string label, string msg="")
{
return arguments.parameters.validationErrorMsg;
}