1var FormRulesSettings=(function(){var ConditionEvaluators=[]; 2var InputTypeParsers=[]; 3var RuleValueParsers=[]; 4var FieldSelectors=[]; 5var ActionExecutors=[]; 6function ConditionEvaluator(name,conditionEvaluator){this.name=name; 7this.conditionEvaluator=conditionEvaluator; 8}ConditionEvaluator.prototype.canProcess=function(name){return name===this.name; 9}; 10ConditionEvaluator.prototype.process=function(currentValue,ruleValue,inputType){if(!InputTypeParsers||InputTypeParsers.length===0){return false; 11}var inputTypeParser; 12for(var inputValueIndex=0; 13inputValueIndex<InputTypeParsers.length; 14inputValueIndex++){if(inputValueIndex===0||InputTypeParsers[inputValueIndex].canParse(inputType)){inputTypeParser=InputTypeParsers[inputValueIndex]; 15}}var ruleValueParsers; 16for(var ruleValueIndex=0; 17ruleValueIndex<RuleValueParsers.length; 18ruleValueIndex++){if(ruleValueIndex===0||RuleValueParsers[ruleValueIndex].canParse(inputType)){ruleValueParsers=RuleValueParsers[ruleValueIndex]; 19}}var parsedCurrentValue=inputTypeParser?inputTypeParser.parse(currentValue):currentValue; 20var parsedRuleValue=ruleValueParsers?ruleValueParsers.parse(ruleValue):ruleValue; 21return this.conditionEvaluator(parsedCurrentValue,parsedRuleValue); 22}; 23function ValueParser(inputType,parser,escape,escapeRegEx){this.inputType=inputType; 24this.parser=parser; 25this.escape=escape; 26this.escapeRegEx=escapeRegEx?escapeRegEx:/[\-\[\]{}()*+?.,\\\^$|#\s]/g; 27}ValueParser.prototype.canParse=function(inputType){return this.inputType===inputType; 28}; 29ValueParser.prototype.parse=function(value){var parsedValue=this.parser(value); 30if(this.escape===true&&typeof parsedValue==="string"){return parsedValue.replace(this.escapeRegEx,"\\$&"); 31}return parsedValue; 32}; 33function FieldSelector(fieldContainerDataSfRole,elementSelector,additionalFilter){this.fieldContainerDataSfRole=fieldContainerDataSfRole; 34this.elementSelector=elementSelector; 35this.additionalFilter=additionalFilter; 36}FieldSelector.prototype.getFieldContainerDataSfRole=function(){return this.fieldContainerDataSfRole; 37}; 38FieldSelector.prototype.getFieldValues=function(fieldContainer){if(this.additionalFilter){return $(fieldContainer).find(this.elementSelector).filter(this.additionalFilter).map(function(i,data){return $(data).val().replace(/^\s+|\s+$/g,""); 39}).get(); 40}else{return $(fieldContainer).find(this.elementSelector).map(function(i,data){return $(data).val().replace(/^\s+|\s+$/g,""); 41}).get(); 42}}; 43FieldSelector.prototype.getFieldValueElements=function(fieldContainer){return $(fieldContainer).find(this.elementSelector); 44}; 45FieldSelector.prototype.canGetValues=function(fieldContainer){return this.fieldContainerDataSfRole===fieldContainer.attr("data-sf-role"); 46}; 47return{addConditionEvaluator:function(name,conditionEvaluator){ConditionEvaluators.push(new ConditionEvaluator(name,conditionEvaluator)); 48},removeConditionEvaluator:function(name){for(var i=0; 49i<ConditionEvaluators.length; 50i++){if(ConditionEvaluators[i].name===name){ConditionEvaluators.splice(i,1); 51break; 52}}},processConditionEvaluator:function(name,inputType,currentValue,ruleValue){for(var i=0; 53i<ConditionEvaluators.length; 54i++){if(ConditionEvaluators[i].canProcess(name)){return ConditionEvaluators[i].process(currentValue,ruleValue,inputType); 55}}return false; 56},getConditionEvaluator:function(name){for(var i=0; 57i<ConditionEvaluators.length; 58i++){if(ConditionEvaluators[i].canProcess(name)){return ConditionEvaluators[i]; 59}}return null; 60},addActionExecutor:function(actionName,actionExecutor){ActionExecutors.push({actionName:actionName,actionExecutor:actionExecutor}); 61},removeActionExecutor:function(actionName){ActionExecutors=ActionExecutors.filter(function(a){return a.actionName!==actionName; 62}); 63},getActionExecutor:function(actionName){var entry=ActionExecutors.filter(function(a){return a.actionName===actionName; 64})[0]; 65if(entry){return entry.actionExecutor; 66}return null; 67},addInputTypeParser:function(inputType,parser,escape,escapeRegEx){InputTypeParsers.push(new ValueParser(inputType,parser,escape,escapeRegEx)); 68},removeInputTypeParser:function(inputType){for(var i=0; 69i<InputTypeParsers.length; 70i++){if(InputTypeParsers[i].inputType===inputType){InputTypeParsers.splice(i,1); 71break; 72}}},addRuleValueParser:function(inputType,parser,escape,escapeRegEx){RuleValueParsers.push(new ValueParser(inputType,parser,escape,escapeRegEx)); 73},removeRuleValueParser:function(inputType){for(var i=0; 74i<RuleValueParsers.length; 75i++){if(RuleValueParsers[i].inputType===inputType){RuleValueParsers.splice(i,1); 76break; 77}}},addFieldSelector:function(fieldContainerDataSfRole,elementSelector,additionalFilter){var element=FieldSelectors.map(function(e){return e.fieldContainerDataSfRole; 78}).indexOf(fieldContainerDataSfRole); 79if(element>-1){throw"Container with attribute [data-sf-role='"+fieldContainerDataSfRole+"'] have been registered already.";
80}else{FieldSelectors.push(new FieldSelector(fieldContainerDataSfRole,elementSelector,additionalFilter)); 81}},removeFieldSelector:function(fieldContainerDataSfRole){for(var i=0; 82i<FieldSelectors.length; 83i++){if(FieldSelectors[i].fieldContainerDataSfRole===fieldContainerDataSfRole){FieldSelectors.splice(i,1); 84break; 85}}},getFieldValues:function(fieldContainer){for(var i=0; 86i<FieldSelectors.length; 87i++){if(FieldSelectors[i].canGetValues(fieldContainer)){return FieldSelectors[i].getFieldValues(fieldContainer); 88}}return[]; 89},getFieldValueElements:function(fieldContainer){for(var i=0; 90i<FieldSelectors.length; 91i++){if(FieldSelectors[i].canGetValues(fieldContainer)){return FieldSelectors[i].getFieldValueElements(fieldContainer); 92}}return null; 93},getFieldsContainerNames:function(){var containers=[]; 94for(var i=0; 95i<FieldSelectors.length; 96i++){containers.push(FieldSelectors[i].getFieldContainerDataSfRole()); 97}return containers; 98}}; 99})(); 100var FormRuleConstants={Actions:{Show:"Show",Hide:"Hide",Skip:"Skip",ShowMessage:"ShowMessage",GoTo:"GoTo",SendNotification:"SendNotification"}}; 101function FormRuleActionExecutorBase(){}FormRuleActionExecutorBase.prototype.applyState=function(context,actionData){throw new Error("applyState() function not implemented"); 102}; 103FormRuleActionExecutorBase.prototype.updateState=function(context,actionData){throw new Error("updateState() function not implemented"); 104}; 105FormRuleActionExecutorBase.prototype.undoUpdateState=function(context,actionData){throw new Error("undoUpdateState() function not implemented"); 106}; 107FormRuleActionExecutorBase.prototype.isConflict=function(actionData,otherActionData){return false; 108}; 109FormRuleActionExecutorBase.prototype.getActionFieldIds=function(actionData){return[]; 110}; 111function HideShowFieldFormRuleActionExecutor(actionName){FormRuleActionExecutorBase.call(this); 112if(actionName===FormRuleConstants.Actions.Show||actionName===FormRuleConstants.Actions.Hide){this.actionName=actionName; 113}else{throw new Error("Invalid action name! Only "+FormRuleConstants.Actions.Show+" and "+FormRuleConstants.Actions.Hide+" action names are allowed"); 114}}HideShowFieldFormRuleActionExecutor.prototype=Object.create(FormRuleActionExecutorBase.prototype); 115HideShowFieldFormRuleActionExecutor.prototype.constructor=HideShowFieldFormRuleActionExecutor; 116HideShowFieldFormRuleActionExecutor.prototype.applyState=function(context,actionData){var fieldIndex=context.helper.fieldIndexOf(context.fields,actionData.target); 117var fieldControlId=context.fields[fieldIndex].FieldControlId; 118if(context.fields[fieldIndex].Visible){context.helper.showField(context,fieldControlId); 119}else{context.helper.hideField(context,fieldControlId); 120}}; 121HideShowFieldFormRuleActionExecutor.prototype.updateState=function(context,actionData){var updated=false; 122var fieldIndex=context.helper.fieldIndexOf(context.fields,actionData.target); 123if(this.actionName===FormRuleConstants.Actions.Show&&!context.fields[fieldIndex].Visible){context.fields[fieldIndex].Visible=true; 124updated=true; 125}else{if(this.actionName===FormRuleConstants.Actions.Hide&&context.fields[fieldIndex].Visible){context.fields[fieldIndex].Visible=false; 126updated=true; 127}}return updated; 128}; 129HideShowFieldFormRuleActionExecutor.prototype.undoUpdateState=function(context,actionData){var fieldIndex=context.helper.fieldIndexOf(context.fields,actionData.target); 130if(this.actionName===FormRuleConstants.Actions.Show){context.fields[fieldIndex].Visible=false; 131}else{context.fields[fieldIndex].Visible=true; 132}}; 133HideShowFieldFormRuleActionExecutor.prototype.isConflict=function(actionData,otherActionData){return(otherActionData.name===FormRuleConstants.Actions.Show||otherActionData.name===FormRuleConstants.Actions.Hide)&&actionData.target===otherActionData.target; 134}; 135HideShowFieldFormRuleActionExecutor.prototype.getActionFieldIds=function(actionData){return[actionData.target]; 136}; 137function SkipToPageFormRuleActionExecutor(){FormRuleActionExecutorBase.call(this); 138}SkipToPageFormRuleActionExecutor.prototype=Object.create(FormRuleActionExecutorBase.prototype); 139SkipToPageFormRuleActionExecutor.prototype.constructor=SkipToPageFormRuleActionExecutor; 140SkipToPageFormRuleActionExecutor.prototype.applyState=function(context,actionData){if(context.skipToPageCollection){context.formContainer.trigger("form-page-skip",[context.skipToPageCollection]); 141}}; 142SkipToPageFormRuleActionExecutor.prototype.updateState=function(context,actionData){if(!context.skipToPageCollection){context.skipToPageCollection=[]; 143}
143if(actionData.pageIndex<parseInt(actionData.target)){context.skipToPageCollection.push({SkipFromPage:actionData.pageIndex,SkipToPage:parseInt(actionData.target)}); 144return true; 145}return false; 146}; 147SkipToPageFormRuleActionExecutor.prototype.undoUpdateState=function(context,actionData){if(context.skipToPageCollection){context.skipToPageCollection=context.skipToPageCollection.filter(function(p){return p.SkipFromPage!==actionData.pageIndex||p.SkipToPage!==parseInt(actionData.target); 148}); 149}}; 150SkipToPageFormRuleActionExecutor.prototype.isConflict=function(actionData,otherActionData){return actionData.name===otherActionData.name&&actionData.pageIndex===otherActionData.pageIndex; 151}; 152function ShowMessageRuleActionExecutor(){FormRuleActionExecutorBase.call(this); 153}ShowMessageRuleActionExecutor.prototype=Object.create(FormRuleActionExecutorBase.prototype); 154ShowMessageRuleActionExecutor.prototype.constructor=ShowMessageRuleActionExecutor; 155ShowMessageRuleActionExecutor.prototype.applyState=function(context,actionData){var inputSelector='[data-sf-role="form-rules-message"]'; 156var inputElement=$(context.formContainer).find(inputSelector); 157if(this.execute){inputElement.val(actionData.target); 158}else{var currentValue=inputElement.val(); 159if(currentValue===actionData.target){inputElement.val(""); 160}}}; 161ShowMessageRuleActionExecutor.prototype.updateState=function(context,actionData){this.execute=true; 162return true; 163}; 164ShowMessageRuleActionExecutor.prototype.undoUpdateState=function(context,actionData){this.execute=false; 165}; 166ShowMessageRuleActionExecutor.prototype.isConflict=function(actionData,otherActionData){return otherActionData.name===FormRuleConstants.Actions.ShowMessage||otherActionData.name===FormRuleConstants.Actions.GoTo; 167}; 168function GoToPageRuleActionExecutor(){FormRuleActionExecutorBase.call(this); 169}GoToPageRuleActionExecutor.prototype=Object.create(FormRuleActionExecutorBase.prototype); 170GoToPageRuleActionExecutor.prototype.constructor=GoToPageRuleActionExecutor; 171GoToPageRuleActionExecutor.prototype.applyState=function(context,actionData){var inputSelector='[data-sf-role="form-rules-redirect-page"]'; 172var inputElement=$(context.formContainer).find(inputSelector); 173if(this.execute){inputElement.val(actionData.target); 174}else{var currentValue=inputElement.val(); 175if(currentValue===actionData.target){inputElement.val(""); 176}}}; 177GoToPageRuleActionExecutor.prototype.updateState=function(context,actionData){this.execute=true; 178return true; 179}; 180GoToPageRuleActionExecutor.prototype.undoUpdateState=function(context,actionData){this.execute=false; 181}; 182GoToPageRuleActionExecutor.prototype.isConflict=function(actionData,otherActionData){return otherActionData.name===FormRuleConstants.Actions.ShowMessage||otherActionData.name===FormRuleConstants.Actions.GoTo; 183}; 184function SendNotificationRuleActionExecutor(){FormRuleActionExecutorBase.call(this); 185}SendNotificationRuleActionExecutor.prototype=Object.create(FormRuleActionExecutorBase.prototype); 186SendNotificationRuleActionExecutor.prototype.constructor=SendNotificationRuleActionExecutor; 187SendNotificationRuleActionExecutor.prototype.applyState=function(context,actionData){var inputSelector='[data-sf-role="form-rules-notification-emails"]'; 188var inputElement=$(context.formContainer).find(inputSelector); 189if(context.notificationEmails){inputElement.val(context.notificationEmails.join(",")); 190}else{inputElement.val(""); 191}}; 192SendNotificationRuleActionExecutor.prototype.updateState=function(context,actionData){if(!context.notificationEmails){context.notificationEmails=[]; 193}if(context.notificationEmails.indexOf(actionData.target)===-1){context.notificationEmails.push(actionData.target); 194}return true; 195}; 196SendNotificationRuleActionExecutor.prototype.undoUpdateState=function(context,actionData){if(context.notificationEmails){var index=context.notificationEmails.indexOf(actionData.target); 197if(index!==-1){context.notificationEmails.splice(index,0); 198}}}; 199SendNotificationRuleActionExecutor.prototype.isConflict=function(actionData,otherActionData){return actionData.name===otherActionData.name&&actionData.target===otherActionData.target; 200}; 201(function addConditionEvaluators(){FormRulesSettings.addConditionEvaluator("Equal",function(currentValue,ruleValue){if(typeof currentValue==="string"){return currentValue.search(new RegExp("^"+ruleValue+"$","i"))===0; 202}return currentValue===ruleValue; 203}); 204FormRulesSettings.addConditionEvaluator("NotEqual",function(currentValue,ruleValue){if(typeof currentValue==="string"){return currentValue.search(new RegExp("^"+ruleValue+"$","i"))===-1; 205}return currentValue!==ruleValue; 206}); 207FormRulesSettings.addConditionEvaluator("Contains",function(currentValue,ruleValue){return currentValue.search(new RegExp(ruleValue,"i"))>-1; 208}); 209FormRulesSettings.addConditionEvaluator("NotContains",function(currentValue,ruleValue){return currentValue.search(new RegExp(ruleValue,"i"))===-1; 210}); 211var isFilledFunction=function(currentValue){if(typeof currentValue==="number"&¤tValue!==currentValue){return false;
212}return currentValue&¤tValue.toString().length>0; 213}; 214FormRulesSettings.addConditionEvaluator("IsFilled",isFilledFunction); 215FormRulesSettings.addConditionEvaluator("IsNotFilled",function(currentValue){return !isFilledFunction(currentValue); 216}); 217FormRulesSettings.addConditionEvaluator("FileSelected",function(currentValue){return currentValue&¤tValue.length>0; 218}); 219FormRulesSettings.addConditionEvaluator("FileNotSelected",function(currentValue){return !currentValue||currentValue.length===0; 220}); 221FormRulesSettings.addConditionEvaluator("IsGreaterThan",function(currentValue,ruleValue){return currentValue>ruleValue; 222}); 223FormRulesSettings.addConditionEvaluator("IsLessThan",function(currentValue,ruleValue){return currentValue<ruleValue; 224}); 225})(); 226(function addValueParsers(){var dateParserFunction=function(value){var dateTime=new Date(value); 227var date=new Date(dateTime.getFullYear(),dateTime.getMonth(),dateTime.getDate()); 228return date.getTime(); 229}; 230var monthParserFunction=function(value,timezoneOffset){var dateTime=new Date(value); 231if(timezoneOffset){dateTime.setTime(dateTime.getTime()+timezoneOffset); 232}var date=new Date(dateTime.getFullYear(),dateTime.getMonth()); 233return date.getTime(); 234}; 235var weekParserFunction=function(value){var date=new Date(parseInt(value.split(["-W"])[0]),0,1+(parseInt(value.split(["-W"])[1])-1)*7); 236date.setDate(date.getDate()-date.getDay()+(date.getDate()<=4?1:8)); 237return date.getTime(); 238}; 239var dateTimeParserFunction=function(value,timezoneOffset){var dateTime=new Date(value); 240var date=new Date(dateTime.getFullYear(),dateTime.getMonth(),dateTime.getDate(),dateTime.getHours(),dateTime.getMinutes()); 241if(timezoneOffset){date=new Date(date.getTime()+timezoneOffset); 242}return date.getTime(); 243}; 244var timeParserFunction=function(value,timezoneOffset){var dateTime=new Date(value); 245if(timezoneOffset){dateTime=new Date(dateTime.getTime()+timezoneOffset); 246}return dateTime.getHours()*60+dateTime.getMinutes(); 247}; 248FormRulesSettings.addInputTypeParser("text",function(value){return value; 249}); 250FormRulesSettings.addInputTypeParser("month",function(value){return monthParserFunction(value,new Date(value).getTimezoneOffset()*60000); 251}); 252FormRulesSettings.addInputTypeParser("number",function(value){return parseFloat(value)&&Number(value); 253}); 254FormRulesSettings.addInputTypeParser("datetime-local",dateTimeParserFunction); 255FormRulesSettings.addInputTypeParser("date",dateParserFunction); 256FormRulesSettings.addInputTypeParser("time",function(value){return parseInt(value.split([":"])[0])*60+parseInt(value.split([":"])[1]); 257}); 258FormRulesSettings.addInputTypeParser("week",weekParserFunction); 259FormRulesSettings.addRuleValueParser("text",function(value){return value; 260},true); 261FormRulesSettings.addRuleValueParser("month",function(value){return monthParserFunction(value,new Date(value).getTimezoneOffset()*60000); 262}); 263FormRulesSettings.addRuleValueParser("number",function(value){return parseFloat(value)&&Number(value); 264}); 265FormRulesSettings.addRuleValueParser("datetime-local",function(value){return dateTimeParserFunction(value,new Date(value).getTimezoneOffset()*60000); 266}); 267FormRulesSettings.addRuleValueParser("date",dateParserFunction); 268FormRulesSettings.addRuleValueParser("time",function(value){return timeParserFunction(value,new Date(value).getTimezoneOffset()*60000); 269}); 270FormRulesSettings.addRuleValueParser("week",weekParserFunction); 271})(); 272(function addFieldSelectors(){FormRulesSettings.addFieldSelector("text-field-container","[data-sf-role='text-field-input']"); 273FormRulesSettings.addFieldSelector("email-text-field-container","[data-sf-role='email-text-field-input']"); 274FormRulesSettings.addFieldSelector("multiple-choice-field-container","[data-sf-role='multiple-choice-field-input']",":checked"); 275FormRulesSettings.addFieldSelector("checkboxes-field-container","[data-sf-role='checkboxes-field-input']",":checked"); 276FormRulesSettings.addFieldSelector("paragraph-text-field-container","[data-sf-role='paragraph-text-field-textarea']"); 277FormRulesSettings.addFieldSelector("dropdown-list-field-container","[data-sf-role='dropdown-list-field-select']"); 278FormRulesSettings.addFieldSelector("file-field-container","[data-sf-role='single-file-input'] input[type='file']"); 279})();
280(function addActionExecutors(){var hideRuleAction=new HideShowFieldFormRuleActionExecutor(FormRuleConstants.Actions.Hide); 281FormRulesSettings.addActionExecutor(FormRuleConstants.Actions.Hide,hideRuleAction); 282var showRuleAction=new HideShowFieldFormRuleActionExecutor(FormRuleConstants.Actions.Show); 283FormRulesSettings.addActionExecutor(FormRuleConstants.Actions.Show,showRuleAction); 284var skipRuleActionExecutor=new SkipToPageFormRuleActionExecutor(); 285FormRulesSettings.addActionExecutor(FormRuleConstants.Actions.Skip,skipRuleActionExecutor); 286var showMessageRuleActionExecutor=new ShowMessageRuleActionExecutor(); 287FormRulesSettings.addActionExecutor(FormRuleConstants.Actions.ShowMessage,showMessageRuleActionExecutor); 288var goToPageRuleActionExecutor=new GoToPageRuleActionExecutor(); 289FormRulesSettings.addActionExecutor(FormRuleConstants.Actions.GoTo,goToPageRuleActionExecutor); 290var sendNotificationRuleActionExecutor=new SendNotificationRuleActionExecutor(); 291FormRulesSettings.addActionExecutor(FormRuleConstants.Actions.SendNotification,sendNotificationRuleActionExecutor); 292})(); 293(function($){var FormRulesExecutor=function(container){this._init(container); 294}; 295FormRulesExecutor.prototype={_init:function(target){this.fieldContainerSelector='[data-sf-role$="field-container"]'; 296this.separatorSelector='[data-sf-role="separator"]'; 297this.formContainerSelector=getFormContainerSelector(); 298this.skipFieldsSelector='input[type="hidden"][data-sf-role="form-rules-skip-fields"]'; 299this.hiddenFieldsSelector='input[type="hidden"][data-sf-role="form-rules-hidden-fields"]'; 300this.formContainer=$(target).closest(this.formContainerSelector); 301var separator=$(target).closest(this.separatorSelector); 302this.fieldsContainer=separator.length>0?separator:this.formContainer; 303this.pages=$(this.formContainer).find(this.separatorSelector); 304this._initializeFormRules(); 305this.iterationsMaxCount=50; 306var that=this; 307this.formContainer.on("form-page-changed",function(e,nextIndex,previousIndex){that._updateSkipPages(previousIndex,nextIndex); 308}); 309},process:function(){if(!this._hasRules()){return; 310}this.hiddenFields=this._getHiddenFields(); 311this.skipFields=this._getSkipFields(); 312var context=this._contextInitialization(); 313var updatedContext=this._evaluateFormRules(context); 314this._applyActionsState(updatedContext); 315this.hiddenFields=updatedContext.hiddenFields; 316this._setHiddenFields(this.hiddenFields); 317this._setExecutedActions(updatedContext.activeActions); 318},_hasRules:function(){return this.formRules&&this.formRules.length!==0; 319},_evaluateFormRules:function(context){var currentFieldsVisibility=$.map(context.fields,function(field){return field.Visible; 320}); 321var updatedContext=this._updateContext(context); 322var updatedFieldsVisibility=$.map(updatedContext.fields,function(field){return field.Visible; 323}); 324var noChanges=this._compareArrays(currentFieldsVisibility,updatedFieldsVisibility); 325if(context.iterationsCounter>this.iterationsMaxCount||noChanges){return updatedContext; 326}context.iterationsCounter++; 327return this._evaluateFormRules(updatedContext); 328},_updateContext:function(context){var actions=this._getRulesActionsState(context); 329for(var i=0; 330i<actions.length; 331i++){var action=actions[i]; 332var activeActionIndex=context.helper.actionItemIndexOf(context.activeActions,action.data); 333if(action.data.applyRule){var updated=action.executor.updateState(context,action.data); 334if(activeActionIndex===-1){if(updated){context.activeActions.push(action); 335}}}else{if(activeActionIndex>-1){action.executor.undoUpdateState(context,action.data); 336context.activeActions.splice(activeActionIndex,1); 337}}}return context; 338},_getRulesActionsState:function(context){var actions=[]; 339var that=this; 340var addOrUpdateAction=function(actions,currentAction,applyRule){var actionIndex=that._actionItemIndexOf(actions,currentAction.data); 341if(actionIndex===-1){if(applyRule){for(var actionIndex=0; 342actionIndex<actions.length; 343actionIndex++){if(actions[actionIndex].data.applyRule===true){actions[actionIndex].data.applyRule=!actions[actionIndex].executor.isConflict(actions[actionIndex].data,currentAction.data); 344}}}currentAction.data.applyRule=applyRule; 345actions.push(currentAction); 346}else{if(actions[actionIndex].data.applyRule===false){actions[actionIndex].data.applyRule=applyRule; 347}}}; 348for(var i=0; 349i<this.formRules.length; 350i++){var rule=this.formRules[i]; 351var applyRule=this._evaluateConditions(context,rule); 352for(var j=0; 353j<rule.actions.length; 354j++){var action=rule.actions[j]; 355addOrUpdateAction(actions,action,applyRule); 356}}return actions; 357},_applyActionsState:function(context){for(var actionIndex=0; 358actionIndex<context.activeActions.length; 359actionIndex++){var action=context.activeActions[actionIndex]; 360action.executor.applyState(context,action.data); 361}var deactivatedActions=context.executedActions.filter(function(a){return context.activeActions.indexOf(a)===-1; 362}); 363for(var deactivatedActionIndex=0; 364deactivatedActionIndex<deactivatedActions.length; 365deactivatedActionIndex++){var deactivatedAction=deactivatedActions[deactivatedActionIndex]; 366deactivatedAction.executor.applyState(context,deactivatedAction.data); 367}},_evaluateConditions:function(context,rule){var executeStatus=[]; 368for(var conditionIndex=0; 369conditionIndex<rule.conditions.length; 370conditionIndex++){var condition=rule.conditions[conditionIndex]; 371var field=this._getContextField(context,condition.data.id); 372var fieldType=this._getFieldType(condition.data.id); 373var applyRule=false; 374if(field.Visible===true&&condition.evaluator){if(field.Values&&field.Values.length>0){for(var h=0; 375h<field.Values.length; 376h++){applyRule=condition.evaluator.process(field.Values[h],condition.data.value,fieldType);
377if(applyRule){break; 378}}}else{applyRule=condition.evaluator.process(null,condition.data.value,fieldType); 379}}executeStatus.push(applyRule); 380}var execute; 381if(rule.operator==="And"){execute=this._every(executeStatus,function(e){return e; 382}); 383}else{execute=this._some(executeStatus,function(e){return e; 384}); 385}return execute; 386},_initializeFormRules:function(){this.formRules=[]; 387var formRulesElement=this.formContainer.find('input[data-sf-role="form-rules"]'); 388var deserializedFormRules=formRulesElement.length>0&&formRulesElement.val().length>0?JSON.parse(formRulesElement.val()):null; 389if(deserializedFormRules){for(var ruleIndex=0; 390ruleIndex<deserializedFormRules.length; 391ruleIndex++){var rule=deserializedFormRules[ruleIndex]; 392var newRule={operator:rule.Operator,conditions:[],actions:[]}; 393var rulePageIndex=0; 394for(var conditionIndex=0; 395conditionIndex<rule.Conditions.length; 396conditionIndex++){var condition=rule.Conditions[conditionIndex]; 397var conditionEvaluator=FormRulesSettings.getConditionEvaluator(condition.Operator); 398newRule.conditions.push({data:{id:condition.Id,value:condition.Value},evaluator:conditionEvaluator}); 399var conditionTargetPageIndex=this._getFieldPageContainerIndex(condition.Id); 400rulePageIndex=conditionTargetPageIndex&&conditionTargetPageIndex>rulePageIndex?conditionTargetPageIndex:rulePageIndex; 401}for(var actionIndex=0; 402actionIndex<rule.Actions.length; 403actionIndex++){var action=rule.Actions[actionIndex]; 404var actionExecutor=FormRulesSettings.getActionExecutor(action.Action); 405if(actionExecutor){newRule.actions.push({data:{target:action.Target,name:action.Action,pageIndex:rulePageIndex},executor:actionExecutor}); 406}}newRule.actions=this._filterConflictingRuleActions(newRule.actions); 407this.formRules.push(newRule); 408}}},_filterConflictingRuleActions:function(ruleActions){var filteredActions=[]; 409for(var i=ruleActions.length-1; 410i>=0; 411i--){if(filteredActions.filter(function(a){return ruleActions[i].executor.isConflict(ruleActions[i].data,a.data); 412}).length===0){filteredActions.push(ruleActions[i]); 413}}return filteredActions.reverse(); 414},_contextInitialization:function(){var executedActions=this._getExecutedActions(); 415return{fields:this._fieldsInitialization(),executedActions:executedActions.slice(),activeActions:executedActions.slice(),formContainer:this.formContainer,formContainerSelector:this.formContainerSelector,iterationsCounter:0,hiddenFields:this.hiddenFields,skipToPageCollection:[],helper:{showField:this._showField.bind(this),hideField:this._hideField.bind(this),getFieldElement:this._getFieldElement.bind(this),getFieldStartSelector:this._getFieldStartSelector.bind(this),getFieldEndSelector:this._getFieldEndSelector.bind(this),fieldIndexOf:this._fieldIndexOf.bind(this),arrayIndexOf:this._arrayIndexOf.bind(this),actionItemIndexOf:this._actionItemIndexOf.bind(this)}}; 416},_fieldsInitialization:function(){var fields=[]; 417var formRuleFields=this._getFormRulesFields(); 418for(var i=0; 419i<formRuleFields.length; 420i++){fields.push({FieldControlId:formRuleFields[i],Values:this._getFieldValues(formRuleFields[i]),Visible:this._arrayIndexOf(this.hiddenFields,formRuleFields[i])===-1&&this._arrayIndexOf(this.skipFields,formRuleFields[i])===-1}); 421}return fields; 422},_getFormRulesFields:function(){var fields=[]; 423for(var i=0; 424i<this.formRules.length; 425i++){for(var s=0; 426s<this.formRules[i].conditions.length; 427s++){var conditionFieldName=this.formRules[i].conditions[s].data.id; 428if(this._arrayIndexOf(fields,conditionFieldName)===-1){fields.push(conditionFieldName); 429}}for(var j=0; 430j<this.formRules[i].actions.length; 431j++){var actionFieldIds=this.formRules[i].actions[j].executor.getActionFieldIds(this.formRules[i].actions[j].data); 432if(actionFieldIds&&actionFieldIds.length>0){for(var k=0; 433k<actionFieldIds.length; 434k++){if(this._arrayIndexOf(fields,actionFieldIds[k])===-1){fields.push(actionFieldIds[k]); 435}}}}}return fields; 436},_updateSkipPages:function(previousIndex,nextIndex){if(previousIndex<nextIndex){var fieldContainerNames=FormRulesSettings.getFieldsContainerNames(); 437for(var skipPage=previousIndex+1; 438skipPage<nextIndex; 439skipPage++){for(var k=0; 440k<fieldContainerNames.length; 441k++){var fieldsContainers=this.pages.eq(skipPage).find('[data-sf-role="'+fieldContainerNames[k]+'"]'); 442for(var j=0; 443j<fieldsContainers.length; 444j++){var skippedField=FormRulesSettings.getFieldValueElements($(fieldsContainers[j])); 445if(skippedField.length){var fieldName=skippedField.first().attr("name"); 446var fieldStartWrapper=$(this.formContainer).find("script[data-sf-role-field-name='"+fieldName+"']")[0]; 447if(fieldStartWrapper){var dataSfRole=$(fieldStartWrapper).attr("data-sf-role"); 448if(dataSfRole){var fieldControlId=dataSfRole.replace("start_field_",""); 449this._skipField(fieldControlId); 450}}}}}}}else{for(var fieldIndex=this.skipFields.length-1; 451fieldIndex>=0; 452fieldIndex--){var fieldPageIndex=this._getFieldPageContainerIndex(this.skipFields[fieldIndex]); 453if(nextIndex<fieldPageIndex&&fieldPageIndex<previousIndex){this._unskipField(this.skipFields[fieldIndex]); 454}}}this._setSkipFields(this.skipFields); 455},_skipField:function(fieldControlId){var index=this._arrayIndexOf(this.skipFields,fieldControlId); 456if(index===-1){this.skipFields.push(fieldControlId); 457var fieldElement=this._getFieldElement(fieldControlId); 458fieldElement.attr("disabled","disabled"); 459}},_unskipField:function(fieldControlId){var index=this._arrayIndexOf(this.skipFields,fieldControlId); 460if(index>-1){this.skipFields.splice(index,1); 461var fieldElement=this._getFieldElement(fieldControlId); 462fieldElement.removeAttr("disabled"); 463}},_actionItemIndexOf:function(actions,actionData){for(var i=0; 464i<actions.length; 465i++){if(actions[i].data.target===actionData.target&&actions[i].data.name===actionData.name&&actions[i].data.pageIndex===actionData.pageIndex){return i; 466}}return -1; 467},_getContextField:function(context,fieldControlId){for(var i=0; 468i<context.fields.length; 469i++){if(context.fields[i].FieldControlId===fieldControlId){return context.fields[i]; 470}}return null; 471},_getFieldElement:function(fieldControlId){var scriptWrapper=$(this.formContainer).find(this._getFieldStartSelector(fieldControlId)); 472if(scriptWrapper&&scriptWrapper.length>0){var fieldAllElements=$(scriptWrapper).nextUntil(this._getFieldEndSelector(fieldControlId)); 473var fieldContainerNames=FormRulesSettings.getFieldsContainerNames(); 474if(fieldContainerNames&&fieldContainerNames.length>0){for(var i=0; 475i<fieldContainerNames.length; 476i++){var containerSelector='[data-sf-role="'+fieldContainerNames[i]+'"]'; 477var fieldContainer=fieldAllElements.filter(containerSelector); 478if(!fieldContainer||fieldContainer.length===0){fieldContainer=fieldAllElements.find(containerSelector); 479}if(fieldContainer&&fieldContainer.length>0){return FormRulesSettings.getFieldValueElements(fieldContainer); 480}}}}return $(); 481},_showField:function(context,fieldControlId){var invalidTags=["script"]; 482var index=this._arrayIndexOf(context.hiddenFields,fieldControlId); 483if(index>-1){context.hiddenFields.splice(index,1); 484var scriptWrapper=$(context.formContainer).find(this._getFieldStartSelector(fieldControlId)); 485if(scriptWrapper&&scriptWrapper.length>0){var fieldElement=this._getFieldElement(fieldControlId); 486if(fieldElement&&fieldElement.length>0){fieldElement.removeAttr("disabled"); 487}$(scriptWrapper).nextUntil(this._getFieldEndSelector(fieldControlId)).each(function(i,element){if(invalidTags.indexOf(element.tagName.toLowerCase())<0){$(element).show(); 488}}); 489}}},_hideField:function(context,fieldControlId){var index=this._arrayIndexOf(context.hiddenFields,fieldControlId); 490if(index===-1){context.hiddenFields.push(fieldControlId); 491var scriptWrapper=$(context.formContainer).find(this._getFieldStartSelector(fieldControlId)); 492if(scriptWrapper&&scriptWrapper.length>0){var fieldElement=this._getFieldElement(fieldControlId); 493if(fieldElement&&fieldElement.length>0){fieldElement.attr("disabled","disabled"); 494}$(scriptWrapper).nextUntil(this._getFieldEndSelector(fieldControlId)).each(function(i,element){$(element).hide(); 495}); 496}}},_getFieldType:function(fieldControlId){var fieldElement=this._getFieldElement(fieldControlId); 497var fieldType=fieldElement.data("sf-input-type"); 498if(!fieldType){fieldType=this._getFieldElement(fieldControlId).attr("type"); 499}return fieldType; 500},_getFieldValues:function(fieldControlId){var fieldContainer=this._getFieldContainer(fieldControlId); 501return FormRulesSettings.getFieldValues(fieldContainer); 502},_getFieldContainer:function(fieldControlId){return this._getFieldElement(fieldControlId).closest(this.fieldContainerSelector); 503},_getFieldPageContainer:function(fieldControlId){var element=this._getFieldElement(fieldControlId); 504var separator=element.closest(this.separatorSelector); 505return separator.length>0?separator:element.closest(this.formContainerSelector); 506},_getFieldPageContainerIndex:function(fieldControlId){var fieldPageContainer=this._getFieldPageContainer(fieldControlId); 507return this.pages.index(fieldPageContainer); 508},_fieldIndexOf:function(fields,fieldControlId){for(var i=0; 509i<fields.length; 510i++){if(fields[i].FieldControlId===fieldControlId){return i; 511}}return -1; 512},_getExecutedActions:function(){return this.formContainer.data("sfActions")||[]; 513},_setExecutedActions:function(actions){this.formContainer.data("sfActions",actions); 514},_getHiddenFields:function(){return this._createArrayFromCsvValue($(this.formContainer).find(this.hiddenFieldsSelector).val()); 515},_setHiddenFields:function(fields){$(this.formContainer).find(this.hiddenFieldsSelector).val(fields.join(",")); 516},_getSkipFields:function(){return this._createArrayFromCsvValue($(this.formContainer).find(this.skipFieldsSelector).val()); 517},_setSkipFields:function(fields){$(this.formContainer).find(this.skipFieldsSelector).val(fields.join(",")); 518},_createArrayFromCsvValue:function(value){var array=(value||"").split(","),newArray=[]; 519for(var i=0; 520i<array.length; 521i++){if(array[i]&&array[i]!==""){newArray.push(array[i]); 522}}return newArray; 523},_arrayIndexOf:function(array,value){for(var i=0; 524i<array.length; 525i++){if(array[i]===value){return i; 526}}return -1; 527},_compareArrays:function(array1,array2){var i=array1.length; 528if(i!==array2.length){return false;
529}while(i--){if(array1[i]!==array2[i]){return false; 530}}return true; 531},_some:function(array,func){for(var i=0; 532i<array.length; 533i++){if(func(array[i])){return true; 534}}return false; 535},_every:function(array,func){for(var i=0; 536i<array.length; 537i++){if(!func(array[i])){return false; 538}}return true; 539},_getFieldStartSelector:function(fieldControlId){return'script[data-sf-role="start_field_'+fieldControlId+'"]'; 540},_getFieldEndSelector:function(fieldControlId){return'script[data-sf-role="end_field_'+fieldControlId+'"]'; 541}}; 542var formRuleExecutorsCache=[]; 543$.fn.extend({processFormRules:function(resetElementCache){var formContainerSelector=getFormContainerSelector(); 544var formContainer=$(this).closest(formContainerSelector); 545if(formContainer&&formContainer.length>0){var formRulesExecutor=null; 546var cachedFormRulesExecutorObject=formRuleExecutorsCache.filter(function(e){return e.formContainer===formContainer[0]; 547})[0]; 548if(resetElementCache!==true&&cachedFormRulesExecutorObject){formRulesExecutor=cachedFormRulesExecutorObject.formRulesExecutor; 549}else{formRulesExecutor=new FormRulesExecutor($(this)); 550if(resetElementCache===true){formRuleExecutorsCache=formRuleExecutorsCache.filter(function(e){return e.formContainer!==cachedFormRulesExecutorObject.formContainer; 551}); 552}formRuleExecutorsCache.push({formContainer:formContainer[0],formRulesExecutor:formRulesExecutor}); 553}formRulesExecutor.process(); 554}}}); 555$(document).ready(function(){setTimeout(function(){var formContainerSelector=getFormContainerSelector(); 556var formContainers=$(formContainerSelector); 557formContainers.each(function(i,element){if(typeof $.fn.processFormRules==="function"){$(element).processFormRules(true); 558}}); 559}); 560}); 561function getFormContainerSelector(){var selector='[data-sf-role="form-container"]'; 562if($(selector).length>0){return selector; 563}return"#PublicWrapper"; 564}}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.