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; }