Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var GMCS = GMCS || {}
- GMCS.FieldValidation = {
- ControlsWithRules: {},
- Init: function () {
- if (Xrm.Page.data.process) {
- Xrm.Page.data.process.addOnStageSelected(this.ApplyRules)
- Xrm.Page.data.process.addOnStageChange(this.ApplyRules)
- }
- this.ApplyRules()
- },
- ApplyRules: function() {
- var rules = GMCS.FieldValidationRules;
- if (!rules)
- return;
- try {
- Object.keys(rules).forEach(function (attributeName) {
- var attribute = Xrm.Page.getAttribute(attributeName)
- if (attribute && attribute.controls) {
- attribute.controls.forEach(function (control) {
- var controlName = control.getName();
- if (!GMCS.FieldValidation.ControlsWithRules[controlName]) {
- GMCS.FieldValidation.ApplyRule(controlName, rules[attributeName])
- GMCS.FieldValidation.ControlsWithRules[controlName] = true
- }
- })
- }
- })
- } catch (e) {
- console.error(e)
- }
- },
- ApplyRule: function (fieldName, rule) {
- var mask = GMCS.Conf.ValidationMasks[rule.maskName]
- var control = Xrm.Page.getControl(fieldName);
- var input = GMCS.FieldValidation.GetInput(fieldName)//$('#{0}_i'.format(fieldName))
- var maskSettings = mask.mask !== "email"
- ?
- {
- alias: mask.regex ? 'Regex' : undefined,
- regex: mask.regex,
- mask: mask.mask,
- greedy: !mask.nonGreedy,
- onincomplete: function() {
- if (input.inputmask('unmaskedvalue'))
- control.setNotification(rule.message, 'incomplete')
- else
- control.clearNotification('incomplete')
- },
- oncomplete: function() {
- control.clearNotification('incomplete')
- }
- }
- :
- mask.mask;
- if (!mask.unfocusedMask) {
- input.inputmask(maskSettings)
- }
- input.focus(function (e) {
- if (e.isTrigger && mask.unfocusedMask) {
- var value = input.val()
- input.val(Inputmask.unmask(input.val(), Inputmask.isValid(value, mask.unfocusedMask) ? mask.unfocusedMask : mask.mask)) //if not valid than value is not complete and partly masked
- setTimeout(function () {
- input.inputmask(maskSettings)
- }, 0)
- }
- })
- input.blur(function () {
- var attribute = control.getAttribute()
- var value = $(this).val()
- attribute.setValue(value) // otherwise attributeValue is not updated on standard forms
- setTimeout(function () {
- if (mask.unfocusedMask && input.inputmask('isComplete')) {
- input.inputmask('remove')
- var newValue = Inputmask.format(input.val(), mask.unfocusedMask)
- if (Inputmask.isValid(newValue, mask.unfocusedMask))
- attribute.setValue(newValue);
- }
- if (mask.converter && GMCS.FieldValidation.Converters[mask.converter]) {
- attribute.setValue(GMCS.FieldValidation.Converters[mask.converter](value))
- }
- }, 0)
- })
- },
- GetInput: function (fieldName) {
- return $(":input#{0}_i".format(fieldName)).val() != undefined ? $(":input#{0}_i".format(fieldName)) : $(":input#{0}".format(fieldName));
- },
- Converters: {
- "capitalize": function (value) {
- if (value != null) {
- value = value.endsWith("-") ? value.substring(0, value.length - 1) : value
- return value.split('-').map(function(part) {
- if (part != null && part != "")
- return part[0].toUpperCase() + part.substring(1)
- }).join('-')
- }
- },
- "phone": function(value) {
- return value.replace(/[^+\d]/g, '')
- }
- },
- //public
- ChangeMask: function(fieldName, maskName, message) {
- var rule = GMCS.FieldValidationRules[fieldName];
- if (!rule)
- return;
- rule.maskName = maskName;
- rule.message = message;
- Xrm.Page.getAttribute(fieldName).controls.forEach(function(control) {
- if (!Inputmask.isValid(control.getAttribute().getValue(), GMCS.Conf.ValidationMasks[rule.maskName].mask))
- control.getAttribute().setValue(null)
- GMCS.FieldValidation.ApplyRule(control.getName(), rule)
- })
- },
- RemoveMask: function(fieldName) {
- Xrm.Page.getAttribute(fieldName).controls.forEach(function (control) {
- GMCS.FieldValidation.GetInput(control.getName()).inputmask('remove')
- })
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement