{"version":3,"sources":["../../config-wrap-start-default.js","paychex.framework.angular.forms/textInput/Constants.js","paychex.framework.angular.forms/validation/FormStateMixin.js","paychex.framework.angular.forms/validation/Constants.js","paychex.framework.angular.forms/validation/PermissionStrings.js","paychex.framework.angular.forms/validation/AdvancedSecurityMixin.js","paychex.framework.angular.forms/validation/FormElementMixin.js","paychex.framework.angular.forms/textInput/TextInputController.js","paychex.framework.angular.forms/textInput/textInput.tpl.html.js","paychex.framework.angular.forms/validation/FormElementScopeMixin.js","paychex.framework.angular.forms/textInput/TextInputDirective.js","paychex.framework.angular.forms/validation/FormValidationGeneratorService.js","paychex.framework.angular.forms/validation/FormValidationService.js","paychex.framework.angular.forms/validation/FormSecurityService.js","paychex.framework.angular.forms/validation/PngSecurityIdDirective.js","paychex.framework.angular.forms/validation/PngSecurityScopeDirective.js","paychex.framework.angular.forms/validation/PngValidationIdDirective.js","paychex.framework.angular.forms/validation/PngValidationIfDirective.js","paychex.framework.angular.forms/validation/PngMaskDirective.js","paychex.framework.angular.forms/validation/PngMaskFilter.js","paychex.framework.angular.forms/validation/PngRemoveClassDirective.js","paychex.framework.angular.forms/validation/PngValidationWatchDirective.js","paychex.framework.angular.forms/validation/PaychexMessageFactory.js","paychex.framework.angular.forms/filters/PngToKeysFilter.js","paychex.framework.angular.forms/filters/PngNoValueFilter.js","paychex.framework.angular.forms/advsec/FormSecurity.js","paychex.framework.angular.forms/advsec/ClientEntitlementsService.js","paychex.framework.angular.forms/advsec/InternalClientEntitlementsService.js","paychex.framework.angular.forms/advsec/module.js","paychex.framework.angular.forms/validation/module.js","paychex.framework.angular.forms/errorModelMixin/Constants.js","paychex.framework.angular.forms/errorModelMixin/ErrorModelMixinDirective.js","paychex.framework.angular.forms/errorModelMixin/module.js","paychex.framework.angular.forms/parsers/ParsersDirective.js","paychex.framework.angular.forms/parsers/ValidatorsDirective.js","paychex.framework.angular.forms/parsers/module.js","paychex.framework.angular.forms/formatters/FormattersDirective.js","paychex.framework.angular.forms/formatters/module.js","paychex.framework.angular.forms/form/Constants.js","paychex.framework.angular.forms/form/FormRegisterRequest.js","paychex.framework.angular.forms/form/FormController.js","paychex.framework.angular.forms/form/form.tpl.html.js","paychex.framework.angular.forms/form/FormDirective.js","paychex.framework.angular.forms/form/FormTabChangeChecker.js","paychex.framework.angular.forms/form/FormManager.js","paychex.framework.angular.forms/form/DirtyContentDirective.js","paychex.framework.angular.forms/form/ResetOnCancelDirective.js","paychex.framework.angular.forms/form/ResetMdDatepickerOnCancelDirective.js","paychex.framework.angular.forms/form/ResetModelsOnCancelDirective.js","paychex.framework.angular.forms/form/form-submit-button.tpl.html.js","paychex.framework.angular.forms/form/FormSubmitButtonController.js","paychex.framework.angular.forms/form/FormSubmitButtonDirective.js","paychex.framework.angular.forms/form/form-submit-split-button.tpl.html.js","paychex.framework.angular.forms/form/FormSubmitSplitButtonController.js","paychex.framework.angular.forms/form/FormSubmitSplitButtonDirective.js","paychex.framework.angular.forms/form/form-cancel-button.tpl.html.js","paychex.framework.angular.forms/form/FormCancelButtonController.js","paychex.framework.angular.forms/form/FormCancelButtonDirective.js","paychex.framework.angular.forms/form/form-edit-button.tpl.html.js","paychex.framework.angular.forms/form/FormEditButtonController.js","paychex.framework.angular.forms/form/FormEditButtonDirective.js","paychex.framework.angular.forms/form/form-component-group.tpl.html.js","paychex.framework.angular.forms/form/FormComponentGroupController.js","paychex.framework.angular.forms/form/FormComponentGroupDirective.js","paychex.framework.angular.forms/form/minimal-form.tpl.html.js","paychex.framework.angular.forms/form/MinimalFormDirective.js","paychex.framework.angular.forms/form/minimal-error-form.tpl.html.js","paychex.framework.angular.forms/form/MinimalErrorFormDirective.js","paychex.framework.angular.forms/form/standard-form-buttons.tpl.html.js","paychex.framework.angular.forms/form/StandardFormButtonsDirective.js","paychex.framework.angular.forms/form/FormGroupingDirective.js","paychex.framework.angular.forms/form/FormStateObservable.js","paychex.framework.angular.forms/form/NeverDirtyDirective.js","paychex.framework.angular.forms/form/NoBrowserValidationDirective.js","paychex.framework.angular.forms/form/translations/forms-en.js","paychex.framework.angular.forms/form/translations/forms-es.js","paychex.framework.angular.forms/form/module.js","paychex.framework.angular.forms/textInput/module.js","paychex.framework.angular.forms/valueConverter/ValueConverterDirective.js","paychex.framework.angular.forms/valueConverter/module.js","paychex.framework.angular.forms/toggle/Constants.js","paychex.framework.angular.forms/toggle/ToggleController.js","paychex.framework.angular.forms/toggle/toggle.tpl.html.js","paychex.framework.angular.forms/toggle/ToggleDirective.js","paychex.framework.angular.forms/toggle/module.js","paychex.framework.angular.forms/formErrorDisplay/Constants.js","paychex.framework.angular.forms/formErrorDisplay/FormErrorDisplayController.js","paychex.framework.angular.forms/formErrorDisplay/formErrorDisplay.tpl.html.js","paychex.framework.angular.forms/formErrorDisplay/FormErrorDirective.js","paychex.framework.angular.forms/formErrorDisplay/module.js","paychex.framework.angular.forms/radioButton/Constants.js","paychex.framework.angular.forms/radioButton/RadioButtonController.js","paychex.framework.angular.forms/radioButton/radioButton.tpl.html.js","paychex.framework.angular.forms/radioButton/RadioButtonDirective.js","paychex.framework.angular.forms/radioButton/module.js","paychex.framework.angular.forms/select/Constants.js","paychex.framework.angular.forms/select/SelectController.js","paychex.framework.angular.forms/select/select.tpl.html.js","paychex.framework.angular.forms/select/SelectDirective.js","paychex.framework.angular.forms/select/emptyOption.tpl.html.js","paychex.framework.angular.forms/select/nativeEmptyOption.tpl.html.js","paychex.framework.angular.forms/select/EmptyOptionDirective.js","paychex.framework.angular.forms/select/module.js","paychex.framework.angular.forms/datePicker/Constants.js","paychex.framework.angular.forms/datePicker/DatePickerController.js","paychex.framework.angular.forms/datePicker/datePicker.tpl.html.js","paychex.framework.angular.forms/datePicker/DatePickerDirective.js","paychex.framework.angular.forms/datePicker/DateRangePickerController.js","paychex.framework.angular.forms/datePicker/dateRangePicker.tpl.html.js","paychex.framework.angular.forms/datePicker/DateRangePickerDirective.js","paychex.framework.angular.forms/datePicker/CalendarMonthMixin.js","paychex.framework.angular.forms/datePicker/DateMaskFilter.js","paychex.framework.angular.forms/datePicker/DateMaskDirective.js","paychex.framework.angular.forms/datePicker/module.js","paychex.framework.angular.forms/userControls/personName/PersonNameController.js","paychex.framework.angular.forms/userControls/personName/personName.tpl.html.js","paychex.framework.angular.forms/validation/FormElementModelWatcher.js","paychex.framework.angular.forms/userControls/personName/PersonNameDirective.js","paychex.framework.angular.forms/userControls/personName/module.js","paychex.framework.angular.forms/userControls/birthDate/birthDate.tpl.html.js","paychex.framework.angular.forms/userControls/birthDate/BirthDateDirective.js","paychex.framework.angular.forms/userControls/birthDate/BirthDateController.js","paychex.framework.angular.forms/userControls/birthDate/module.js","paychex.framework.angular.forms/userControls/personAddress/PersonAddressController.js","paychex.framework.angular.forms/userControls/personAddress/personAddress.tpl.html.js","paychex.framework.angular.forms/userControls/personAddress/PersonAddressDirective.js","paychex.framework.angular.forms/masking/Constants.js","paychex.framework.angular.forms/masking/MaskFunctions.js","paychex.framework.angular.forms/masking/FixedMaskFilter.js","paychex.framework.angular.forms/masking/FullMaskFilter.js","paychex.framework.angular.forms/masking/PrefixMaskFilter.js","paychex.framework.angular.forms/masking/ReplaceMaskFilter.js","paychex.framework.angular.forms/masking/SuffixReplaceMaskFilter.js","paychex.framework.angular.forms/masking/module.js","paychex.framework.angular.forms/userControls/personAddress/module.js","paychex.framework.angular.forms/userControls/pngPassword/PngPasswordController.js","paychex.framework.angular.forms/userControls/pngPassword/pngPassword.tpl.html.js","paychex.framework.angular.forms/userControls/pngPassword/PngPasswordDirective.js","paychex.framework.angular.forms/userControls/pngPassword/module.js","paychex.framework.angular.forms/core/DetectFieldFocusDirective.js","paychex.framework.angular.forms/core/LabeledValueController.js","paychex.framework.angular.forms/core/labeled-value.tpl.html.js","paychex.framework.angular.forms/core/LabeledValueDirective.js","paychex.framework.angular.forms/core/EditableComponentController.js","paychex.framework.angular.forms/core/editable-component.tpl.html.js","paychex.framework.angular.forms/core/EditableComponentDirective.js","paychex.framework.angular.forms/core/edit-label.tpl.html.js","paychex.framework.angular.forms/core/EditLabelDirective.js","paychex.framework.angular.forms/core/fieldErrorDisplay.tpl.html.js","paychex.framework.angular.forms/core/FieldErrorDisplayDirective.js","paychex.framework.angular.forms/core/FieldErrorDisplayController.js","paychex.framework.angular.forms/core/BlurFilterDirective.js","paychex.framework.angular.forms/core/DeviceDependentSelectDirective.js","paychex.framework.angular.forms/core/module.js","paychex.framework.angular.forms/userControls/pngGenderList/gender-list.tpl.html.js","paychex.framework.angular.forms/userControls/pngGenderList/GenderListComponent.js","paychex.framework.angular.forms/userControls/pngGenderList/module.js","paychex.framework.angular.forms/userControls/pngRelationshipList/relationship-list.tpl.html.js","paychex.framework.angular.forms/userControls/pngRelationshipList/RelationshipListComponent.js","paychex.framework.angular.forms/userControls/pngRelationshipList/module.js","paychex.framework.angular.forms/userControls/pngStateList/state-list.tpl.html.js","paychex.framework.angular.forms/userControls/pngStateList/allStates.js","paychex.framework.angular.forms/userControls/pngStateList/StateListComponent.js","paychex.framework.angular.forms/userControls/pngStateList/module.js","paychex.framework.angular.forms/userControls/translations/userControls-en.js","paychex.framework.angular.forms/userControls/translations/userControls-es.js","paychex.framework.angular.forms/userControls/module.js","paychex.framework.angular.forms/checkBox/Constants.js","paychex.framework.angular.forms/checkBox/CheckBoxController.js","paychex.framework.angular.forms/checkBox/checkBox.tpl.html.js","paychex.framework.angular.forms/checkBox/CheckBoxDirective.js","paychex.framework.angular.forms/checkBox/module.js","paychex.framework.angular.forms/button/Constants.js","paychex.framework.angular.forms/button/ButtonController.js","paychex.framework.angular.forms/button/button.tpl.html.js","paychex.framework.angular.forms/button/ButtonDirective.js","paychex.framework.angular.forms/button/module.js","paychex.framework.angular.forms/optionSelectWrapper/Constants.js","paychex.framework.angular.forms/optionSelectWrapper/MappedOptionGeneratorFactory.js","paychex.framework.angular.forms/optionSelectWrapper/OptionSelectWrapperController.js","paychex.framework.angular.forms/optionSelectWrapper/optionSelectWrapper.tpl.html.js","paychex.framework.angular.forms/optionSelectWrapper/OptionSelectWrapperDirective.js","paychex.framework.angular.forms/optionSelectWrapper/module.js","paychex.framework.angular.forms/yesNoRadioButtons/Constants.js","paychex.framework.angular.forms/yesNoRadioButtons/YesNoRadioButtonsController.js","paychex.framework.angular.forms/yesNoRadioButtons/yesNoRadioButtons.tpl.html.js","paychex.framework.angular.forms/yesNoRadioButtons/YesNoRadioButtonsDirective.js","paychex.framework.angular.forms/yesNoRadioButtons/module.js","paychex.framework.angular.forms/module.js","../../config-wrap-end-default.js"],"names":["ns","define","TextInputControllerName","TextInputDirectiveName","_","angular","Errors","$scope","self","this","listeners","overridenProperties","readOnly","undefined","originalValue","ngModel","$on","event","data","securityId","id","val","edit","cancel","submit","FormValidationGeneratorService","FormSecurityService","SecurityIdDirective","ValidationIdDirective","FormValidationService","FormValidationFactoryService","MaskDirective","MaskFilter","NoValueFilter","PERMISSIONS_ATTRIBUTE","VISIBLE_KEY","ENABLED_KEY","ENABLE_FULL_KEY","PERFORM_KEY","MASKED_KEY","PARTIAL_MASK_KEY","Constants","permissionsToString","permissions","result","visible","masked","partialMask","enabled","enableFull","perform","stringToPermissions","advSecString","getLookupValue","advsecVals","propName","indexOf","$","permissionStrings","lookupPermissions","element","closest","attr","applyLookupMixin","calculateSecurityValue","defaultValue","clearPropertyDefault","isPropertyDefaulted","prop","recomputeIsDisabled","isDisabled","recomputeMasked","typeOfMasking","numberOfMaskedCharacters","numberOfPartialMaskedCharacters","applyListenMixin","isDefaultedStatus","ignoreSecurity","isDisabledLeastRestrictive","disabled","FormStateMixin","AdvancedSecurityMixin","elementType","isRequired","call","removeListeners","toRemove","forOwn","removeFn","key","isString","forEach","repeat","isNil","validationIf","elementId","uniqueId","onFocus","isFunction","noop","onBlur","onKeyup","formatters","readOnlyFormatters","maxChars","restrict","restrictRegex","formElementMixin","ngDependencies","Constructor","$element","$onInit","ngModelOptions","merge","allowInvalid","getterSetter","modelOptions","placeholder","find","$inject","validationId","name","label","payxautoid","securityLeastRestrictive","parsers","validators","validationWatch","helpIconTooltip","pngSecurityClient","inputTemplate","deviceProfile","advancedSecurityMixin","formElementScopeMixin","$parse","controllerAs","controller","template","replace","scope","bindToController","type","numberOfDisplayCharacters","hint","hintif","require","compile","attributes","pre","directiveAttrs","toLowerCase","isDesktop","post","controllers","textInputCtrl","ngModelCtrl","formCtrl","ngModelController","bindableViewValue","newValue","arguments","length","$setViewValue","$viewValue","assign","editMode","Moment","validateRequired","value","validation","trim","parseConfigDateToMoment","stringDate","regex","RegExp","exec","dates","year","month","date","momentObj","keys","isNumber","parseInt","amount","add","slice","rules","minLength","rule","number","modelValue","viewValue","elm","$emit","regexString","str","required","removeAttr","isEmpty","allowNegative","bool","minValue","minimumValue","maxValue","maximumValue","precision","precisionAmount","compiledRegex","test","dateFormatValue","format","isValid","minimumDate","minDate","minMomentDate","compareDate","isAfter","isSame","maximumDate","maxDate","maxMomentDate","isBefore","minDigits","minDigit","maxDigits","maxDigit","expression","exp","createValidator","ruleType","property","Promise","rulesHaveBeenSet","deferred","defer","getRules","throw","getRulesAsync","resolve","promise","setRules","newRules","isArray","splice","apply","concat","difference","getRule","ClientEntitlementsService","getGlobalStateFormSecurity","ssoCaid","getFormSecurity","setSsoCaid","argSsoCaid","getSsoCaid","setComponentPermissions","permissionObject","SECURITY_DISABLED","clearComponentPermissions","getCompPerms","guid","leastRestrictiveBool","fs","getComponentPermissions","enableEmployeeSecurityMode","disableEmployeeSecurityMode","getAccessGroupInfo","registerListener","callback","priority","attrs","securityIdController","evaluatedID","evaluatedLeastRestrictive","evaluatedClientId","formSecurity","$eval","pngSecurityId","pngSecurityLeastRestrictive","evaluatedId","advSecPerms","$broadcast","securityScopeController","registeredName","link","pngValidationId","validationRule","reduce","index","$validators","PngSecurityIfDirective","checkValidationIf","newVal","Object","$validate","$setValidity","$watch","ex","applyFormatters","displayValue","forEachRight","formatter","e","message","DeviceProfile","mask","String","fromCharCode","ctrl","elementLookup","$render","start","end","cursorAtEnd","$$rawModelValue","fullMask","ngDisabled","getBrowserProfile","context","selectionStart","selectionEnd","code","document","activeElement","pngMask","shownCharacters","toString","Array","join","substring","$formatters","fieldLength","setSelectionRange","$viewChangeListeners","push","on","off","$observe","input","maskAmount","PngRemoveClassDirective","passedObject","pngRemoveClass","condition","removeClass","nameOfClass","PngValidationWatchDirective","pngValidationWatch","PaychexMessageFactory","TranslationService","createMessageObject","status","actionable","messageId","messageText","messageStatus","shortMessage","isActionable","translateAndCreateMessageObject","translate","spread","translatedMessage","translateParams","messageParams","map","param","generateMessage","messageParameters","then","translations","severity","DEFAULT_SEVERITY","createMessageFromValidationId","ruleSet","toUpperCase","aOffsets","aInvertMask","aComponentsLookupMap","aBitmapContextType","aAccessGroupsInfo","isInitialized","bitstring","parseComponentBitstring","bitstringToObject","retrieveComponentBitstring","returnObj","tempBitString","invertMasking","offsets","split","i","invertMask","componentsLookupMap","offset","combine","guidArray","operator","rawString","finalBits","currentBits","mostRestrictive","a","b","leastRestrictive","removeListener","subscriberId","subscribers","employeeSecurityModeEnabled","bitmapContextType","accessGroupsInfo","caid","bitmapData","version","mergeV0Data","newOffsets","newInvertMask","newComponentsLookupMap","newBitmapContextType","newAccessGroupsInfo","offsetAdjustment","adjustedLookup","mapValues","v","compareFn","versionResults","finalBitstring","bit","currentBitstring","perms","FormSecurity","populateLookups","userApplicationEntitlements","accessGroupLookup","permissionTranslations","charAt","componentTranslations","hasAccessGroups","hasVendorsInGroup","hasWorkersInGroup","formSecurityLookup","v1ComponentsLookupMap","v1Offsets","v1InvertMask","entitlementDefer","isV0Client","bitmapContextTypes","waitForEntitlements","InternalClientEntitlementsService","internalClientCaid","internalVersion","ces","module","service","PngSecurityIdDirective","PngSecurityScopeDirective","PngValidationIdDirective","PngValidationIfDirective","PngMaskDirective","PngMaskFilter","PngToKeysFilter","PngNoValueFilter","advsecModule","directive","filter","ErrorModelMixinDirectiveName","errors","$error","ErrorModelMixinDirective","ParsersDirective","isObject","parser","$parsers","ValidatorsDirective","FormattersDirective","FormControllerName","FormDirectiveName","FormTabChangeCheckerName","FormManager","PRE_SUBMIT_ACTION","SUBMIT_ACTION","EDIT_ACTION","CANCEL_ACTION","RESET_ACTION","SET_ORIGINAL_ACTION","formId","dirtyPrompt","isDirty","reset","setOriginal","getErrors","getFormComponentController","getFormStateObservable","setPristine","setDirty","setValidation","getFormController","triggerSubmit","Rx","ErrorHandler","FormRegisterRequest","FormConstants","Logger","NAME_SPACE","log","get","$timeout","$animate","emitFormStateObservableForAll","eventId","isErrored","subject","Subject","isIE","saveInProgress","submitSuccess","payloadData","action","form","$setSubmitted","$setPristine","$setUntouched","stayInEditMode","onNext","forceSubmit","$invalid","editable","submitPromise","submitFunction","isPromise","catch","Types","UserCancellation","Validation","error","errorId","createErrorHandler","done","editSuccess","node","blur","editFunction","cancelSuccess","cancelFunction","resetSuccess","setOriginalSuccess","chain","flatMap","has","$setTouched","onCompleted","unregister","formValidationErrors","setFieldErrors","currentValue","asObservable","editableOverride","editButtonDisabled","register","$dirty","$valid","componentName","$setDirty","forceEditMode","formTemplate","headerTextEdit","headerTextView","contains","transclude","FormTabChangeChecker","pngMdTabsController","pngFormController","changeVetoedCallback","pngFormTabChange","mdPreDeselect","$$subject","$$observable","$$registrationSubject","$$registrationObservable","internal","forms","findDirty","ids","dirtyForm","defaultDirtyPrompt","debug","request","isFormDirty","setDefaultDirtyPrompt","getDefaultDirtyPrompt","dirtyPromptAll","isFormValid","acc","getValidationErrors","editForm","validateForm","cancelForm","resetForm","setOriginalForm","submitForm","getFormStateObservableForAll","source","disposable","subscribe","dispose","err","reject","DirtyContentDirective","pngDirtyContent","allNgModelElements","allNgModelControllers","k","is","formStateMixin","ResetOnCancelDirective","resetCtrl","ngModelExpr","originalModelValue","ResetMdDatepickerOnCancelDirective","ctrls","pngBlurFilter","originalViewValue","dateViewValue","$modelValue","drop","Date","ResetModelsOnCancelDirective","FormSubmitButtonController","bindings","buttonText","danger","affirmative","forceButtonDisabled","FormSubmitSplitButtonController","autoId","menuStyle","menuPositionMode","menuOffset","sideButtonFunction","FormCancelButtonController","FormEditButtonController","FormComponentGroupController","MinimalFormController","editButtonText","cancelButtonText","submitButtonText","subscription","formStateObservable","disableFormGrouping","pngFormGroupingDisabled","jquerySelector","pngFormGrouping","show","hide","Observable","create","observer","next","NeverDirtyDirective","Function","prototype","NoBrowserValidationDirective","elem","formElement","setAttribute","forms.actionButton.done","forms.actionButton.cancel","forms.actionButton.edit","forms.actionButton.save","forms.datePicker.placeholder","validation.date.must.be.after.1900","validation.date.too.far.out","FormController","FormDirective","FormSubmitButtonDirective","FormSubmitSplitButtonDirective","FormCancelButtonDirective","FormEditButtonDirective","FormComponentGroupDirective","MinimalFormDirective","MinimalErrorFormDirective","StandardFormButtonsDirective","FormGroupingDirective","FormStateObservable","localizationModule","component","run","LocaleService","addTranslationPath","TextInputController","TextInputDirective","validationModule","modelMixinModule","parsersModule","formattersModule","formModule","ValueConverterDirective","valueConverters","toView","bind","fromView","ToggleControllerName","ToggleDirectiveName","oldVal","ngChange","mdNoInk","ngTrueValue","ngFalseValue","ariaLabel","invertLabel","ToggleController","ToggleDirective","ValidationModule","FormErrorDisplayControllerName","FormErrorDisplayDirectiveName","FormErrorDisplayController","formatMessages","preTransMessages","size","messages","model","object","msg","all","values","validationMessages","isEqual","ranOnce","formErrorDisplayTemplate","FormErrorDirective","RadioButtonControllerName","RadioButtonDirectiveName","unregisterWatch","obj","unregisterWatchRepeat","horizontal","radioButtonCtrl","RadioButtonController","RadioButtonDirective","SelectControllerName","SelectDirectiveName","mobileDevice","isMobile","trackBy","changeFunction","locale","selectOptionValue","item","optionValue","optionDisplay","readOnlyValue","returnVal","matched","optionArray","option","selectTemplate","showEmptyOption","selectCtrl","emptyOptionTemplate","nativeEmptyOptionTemplate","EmptyOptionDirective","ngMaterial","ngAnimate","ngAria","SelectController","SelectDirective","ErrorModelModule","LocalizationModule","DatePickerControllerName","DatePickerDirectiveName","DateRangePickerControllerName","DateRangePickerDirectiveName","DateMaskDirectiveName","DateMaskFilterName","CalendarMonthDirectiveName","response","mdPlaceholder","datePickerTemplate","mdMinDate","mdMaxDate","datePickerCtrl","moment","generateId","startDate","endDate","elementIdList","startOf","momentToId","valueOf","calendarElement","calendarCtrl","elementList","displayDate","$parent","calendarButton","addClass","actualMaskAmount","formatDate","pngDateMask","DatePickerController","DatePickerDirective","DateRangePickerController","DateRangePickerDirective","CalendarMonthMixin","DateMaskFilter","DateMaskDirective","ErrorModelMixinModule","PersonNameController","desktopDevice","first","last","middle","preferred","prefix","suffix","forcePrimitive","shouldSyncModel","modelVal","isUndefined","persist","$$lastCommittedViewValue","convert","rollback","unshift","primitiveObject","personNameTemplate","formElementModelWatcher","PersonNameDirective","hideDetailFields","textInputModule","birthDateTemplate","BirthDateDirective","dateFormat","viewAge","birthDateController","BirthDateController","updateValidations","calculateAge","dateSet","age","diff","unRegisterWatch","unRegisterDisableWatch","birthDate","datePickerModule","selectModule","PersonAddressController","hasBeenCancelled","wasInitiallyRequired","US_CODE","CANADA_CODE","OTHER_COUNTRY_CODE","translationComplete","viewOnly","disableCountry","showPobox","stateName","provinceName","countryName","attentionFlag","poBoxRequiredValidator","address.poBox.required.text","isFieldRequired","stateProvinceModelOptions","$watchCollection","oldValue","addressHasChanged","address1","address2","attention","buildingDept","city","country","poBox","state","zip","zipExt","province","postalCode","canadianPostalCode","isAddressEmpty","canAddressBeDeleted","addressChanged","address","placeHolder","addressPoBox","usDropDown","canadaDropDown","unregisterShowPobox","addressPo","addressPoDropDown","skipAddressChange","setSelectedCountryCode","setIsAddressFlag","isAddress","$onChanges","changedModel","flag","selectedCountryCode","usObject","canadaObject","isUSA","isCanada","showZip","showState","showPostalCode","showCanadianPostalCode","showProvince","onChangeCountry","onChangeAddress","postalCodeFormatter","canadianPostalCodeFormatter","len","canadianPostalCodeParser","stateParser","stateVal","stateCollection","stateFormatter","provinceParser","provinceCollection","countryFormatter","countryParser","countryCollection","it","onInitialEdit","_hasAddress","poBoxSelected","initReadOnlyMode","personAddressTemplate","PersonAddressDirective","modelUpdated","addressController","MASK_CHAR","maskOfLength","n","fixedMaskFilter","doMaskingArg","fullMaskFilter","prefixMaskFilter","replaceMaskFilter","maskSection","valueSection","doMasking","suffixReplaceMaskFilter","MaskFunctions","FixedMaskFilter","FullMaskFilter","PrefixMaskFilter","ReplaceMaskFilter","SuffixReplaceMaskFilter","formMaskingModule","PngPasswordController","unregisterClearConfirmValue","confirmNewValue","confirmValueValidations","currentValueValidations","doNotMatchMessage","currentAndNewValueMustNotMatchMessage","pngPasswordeTemplate","PngPasswordDirective","newValueValidations","validRegex","maximumLength","currentValueLabel","newValueLabel","reEnterNewValueLabel","maskingModule","LabeledValueController","labeledValueTemplate","LabeledValueDirective","args","fullLabel","EditableComponentController","init","payload","editableComponentTemplate","EditableComponentDirective","readOnlyMode","editCompCtrl","editLabelTemplate","EditLabelDirective","mdNoFloat","fieldErrorDisplayTemplate","errorsFor","disableRequiredValidation","pngMessagesOrder","fieldErrorCtrl","formController","pngMessagesSingle","hasOwnProperty","pngFormCtrl","pngMessagesOrderFunction","FieldErrorDisplayController","BlurFilterDirective","$filter","blurFilterArgs","isDatePicker","filterArguments","pngBlurFilterController","filterFn","applyBlur","cursorPosition","calendarDateVal","getCursorPosition","getDate","dateController","setCursorPosition","tagName","position","Error","unregisterBlurFilterArgs","renameNodes","oldName","newName","each","ix","newNode","append","contents","nodeName","nodeValue","replaceWith","DeviceDependentSelectDirective","$compile","after","select","unwatch","hasClass","selectElems","selectCtrls","ngModelCtrls","isInvalid","$touched","invalid","mdSelect","$isEmpty","ngMessages","DetectFieldFocusDirective","FieldErrorDisplayDirective","formErrorDisplayModule","GenderListComponent","genderLabel","onChange","angularMaterial","coreModule","RelationshipListComponent","codes","relationshipLabel","stateKey","stateValue","stateListTemplate","allStates","StateListComponent","stateLabel","formsCoreModule","forms.usercontrols.personname.first","forms.usercontrols.personname.last","forms.usercontrols.personname.middle","forms.usercontrols.personname.name","forms.usercontrols.personname.preferred","forms.usercontrols.personname.prefix","forms.usercontrols.personname.suffix","forms.usercontrols.birthDate.label","forms.usercontrols.birthDate.age","forms.usercontrols.birthDate.month","forms.usercontrols.birthDate.day","forms.usercontrols.birthDate.year","forms.usercontrols.birthDate.placeholder","forms.usercontrols.personaddress.address1","forms.usercontrols.personaddress.address2","forms.usercontrols.personaddress.poBox","forms.usercontrols.personaddress.city","forms.usercontrols.personaddress.state","forms.usercontrols.personaddress.province","forms.usercontrols.personaddress.zip","forms.usercontrols.personaddress.zipExt","forms.usercontrols.personaddress.postalCode","forms.usercontrols.personaddress.country","forms.usercontrols.personaddress.address","forms.usercontrols.personaddress.attention","forms.usercontrols.personaddress.buildingDept","forms.usercontrols.personaddress.emptyState.placeHolder","forms.usercontrols.pngPassword.current.label","forms.usercontrols.pngPassword.new.label","forms.usercontrols.pngPassword.confirm.label","forms.usercontrols.pngPassword.Password","forms.usercontrols.pngPassword.newValueAndrenterValueDoNotMatch.Password","forms.usercontrols.pngPassword.newValue.minLength.Password","forms.usercontrols.pngPassword.newValue.maxLength.Password","forms.usercontrols.pngPassword.newValue.allowsAlphaNumericValuesOnly.Password","forms.usercontrols.pngPassword.currentAndNewValueMustNotMatchMessage.Password","forms.userControls.yesNoRadioButtons.yesOption","forms.userControls.yesNoRadioButtons.noOption","forms.userControls.select.noneOption","mindate","maxdate","validation.field.required","valid","date.range.invalid","maxlength","forms.usercontrols.noneSelected","forms.usercontrols.genderList.gender","forms.usercontrols.genderList.required","forms.usercontrols.genderList.female","forms.usercontrols.genderList.male","forms.usercontrols.relationshipList.relationship","forms.usercontrols.relationshipList.required","forms.usercontrols.relationshipList.husband","forms.usercontrols.relationshipList.wife","forms.usercontrols.relationshipList.son","forms.usercontrols.relationshipList.daughter","forms.usercontrols.relationshipList.domestic_partner","forms.usercontrols.relationshipList.domestic_partner_son","forms.usercontrols.relationshipList.domestic_partner_daughter","forms.usercontrols.relationshipList.same_gender_son","forms.usercontrols.relationshipList.same_gender_daughter","characterlimit","required.dynamic","forms.usercontrols.stateList.state","forms.usercontrols.pngPassword.currentPassword","forms.usercontrols.pngPassword.newPassword","forms.usercontrols.pngPassword.confirmPassword","personNameModule","birthDateModule","personAddressModule","pngPasswordModule","pngGenderListModule","pngRelationshipModule","pngStateListModule","CheckBoxControllerName","CheckBoxDirectiveName","checkBoxTemplate","CheckBoxController","CheckBoxDirective","PngCheckboxModule","ButtonControllerName","ButtonDirectiveName","buttonClass","buttonMode","ButtonController","ButtonDirective","PngButtonModule","OptionSelectControllerName","OptionSelectDirectiveName","TreeNode","MappedOptionGeneratorFactory","generateTreeStructure","sourceArray","getId","getParent","getDisplay","nodes","treeRoots","choice","entity","parentId","parent","addChild","buildFlatHierarchy","generateArrayStructure","secondaryDisplay","getSecondaryData","opt","dataObject","doRemap","mappedArray","generateMapping","createSearchFilter","properties","searchString","searchRegex","consecutiveSpaceRegex","included","includes","onFilterCallback","$searchVal","$list","onSelectApply","$selections","selection","selectType","showSecondaryDisplay","registerRemapTrigger","optionSelectWrapperTemplate","headerText","singleTreeSelect","noneSelectedOptionText","fieldLabel","target","OptionSelectWrapperController","OptionSelectWrapperDirective","YesNoRadioButtonsControllerName","YesNoRadioButtonsDirectiveName","yesOption","noOption","radioButtonData","title","YesNoRadioButtonsController","YesNoRadioButtonsDirective","RadioButtonModule","valueConverterModule","toggleModule","errorModelMixinModule","radioButtonModule","userControlsModule","checkBoxModule","buttonModule","optionSelectWrapperModule","yesNoRadioButtonsModule"],"mappings":"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","file":"paychex.framework.angular.forms.min.js","sourcesContent":["(function(ns) {\r\n\r\n /* jshint strict : false */\r\n","\n (function () {\n 'use strict';\n \n define(ns+'/textInput/Constants',[], function () {\n return {\n TextInputControllerName: 'PngTextInputController',\n TextInputDirectiveName: 'pngTextInput'\n };\n \n });\n \n }());\n","\n \r\n define(ns+'/validation/FormStateMixin',['lodash', 'angular', 'paychex.core/Errors'], function (_, angular, Errors) {\r\n 'use strict';\r\n \r\n /**\r\n * Used for all form elements\r\n * @class paychex.framework.angular.forms.validation.FormElementMixin\r\n */\r\n return function mixin($scope) {\r\n var self = this, listeners = {};\r\n \r\n var overridenProperties = {\r\n readOnly: this.readOnly !== undefined,\r\n };\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} readOnly Whether an interactive form element is shown or just a label with the value\r\n */\r\n this.readOnly = this.readOnly === undefined ? true : this.readOnly;\r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {object} originalValue the original value of the control.\r\n */\r\n this.originalValue = self.ngModel || null;\r\n \r\n /**\r\n * Setter for the readOnly attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setReadOnlyAttr\r\n * @private\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The security id that this event refers to\r\n * @param {Boolean} data.val The value to set read only to\r\n * @listens $scope:readOnly\r\n */\r\n if (!overridenProperties.readOnly) {\r\n listeners.readOnly = $scope.$on('readOnly', function setReadOnlyAttr(event, data) {\r\n if (!self.securityId || data.id === self.securityId) {\r\n self.readOnly = data.val;\r\n }\r\n });\r\n }\r\n \r\n \r\n /**\r\n * Set the read only flag to false to put form in edit mode.\r\n * Called on Edit form button click.\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setEditMode\r\n * @private\r\n * @param {event} event\r\n * @listens $scope:edit\r\n */\r\n listeners.edit = $scope.$on('edit', function setEditMode(event) {\r\n self.readOnly = false;\r\n self.originalValue = self.ngModel;\r\n });\r\n \r\n /**\r\n * Set the read only flag to true and reset control data to the original value.\r\n * Called on Cancel form button click.\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method cancelEdit\r\n * @private\r\n * @param {event} event\r\n * @listens $scope:cancel\r\n */\r\n listeners.cancel = $scope.$on('cancel', function cancelEdit(event) {\r\n if (self.originalValue !== undefined && self.ngModel !== self.originalValue) {\r\n self.ngModel = self.originalValue;\r\n }\r\n self.readOnly = true;\r\n });\r\n \r\n /**\r\n * Set the read only flag to true and set the original data to the control data.\r\n * Called on Done form button click.\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method submit\r\n * @private\r\n * @param {event} event\r\n * @listens $scope:submit\r\n */\r\n listeners.submit = $scope.$on('submit', function submit(event) {\r\n self.originalValue = self.ngModel;\r\n self.readOnly = true;\r\n });\r\n };\r\n });\r\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/validation/Constants',[], function () {\n return {\n FormValidationGeneratorService: 'FormValidationGeneratorService',\n FormSecurityService: 'FormSecurityService',\n SecurityIdDirective: 'pngSecurityId',\n ValidationIdDirective: 'pngValidationId',\n FormValidationService: 'FormValidationService',\n FormValidationFactoryService: 'FormValidationFactoryService',\n MaskDirective: 'pngMask',\n MaskFilter: 'pngMaskFilter',\n NoValueFilter: 'pngNoValueFilter',\n PERMISSIONS_ATTRIBUTE: 'data-advsec',\n VISIBLE_KEY: 'v',\n ENABLED_KEY: 'e',\n ENABLE_FULL_KEY: 'f',\n PERFORM_KEY: 'p',\n MASKED_KEY: 'm',\n PARTIAL_MASK_KEY: 'n'\n };\n \n });\n \n }());\n \n","\n (function() {\r\n 'use strict';\r\n \r\n define(ns+'/validation/PermissionStrings',[ns+'/validation/Constants'], function(Constants) {\r\n return {\r\n permissionsToString: function permissionsToString(permissions) {\r\n var result = '';\r\n if (permissions.visible || permissions.masked || permissions.partialMask) {\r\n result += Constants.VISIBLE_KEY;\r\n }\r\n if (permissions.enabled) {\r\n result += Constants.ENABLED_KEY;\r\n }\r\n if (permissions.enableFull) {\r\n result += Constants.ENABLE_FULL_KEY;\r\n }\r\n if (permissions.perform) {\r\n result += Constants.PERFORM_KEY;\r\n }\r\n if (permissions.masked) {\r\n result += Constants.MASKED_KEY;\r\n }\r\n if (permissions.partialMask) {\r\n result += Constants.PARTIAL_MASK_KEY;\r\n }\r\n \r\n return result;\r\n },\r\n stringToPermissions: function stringToPermissions(advSecString) {\r\n if (advSecString === null || advSecString === undefined) {\r\n return undefined;\r\n }\r\n \r\n return {\r\n visible: this.getLookupValue(advSecString, 'visible'), // note: not exactly the same as the original permissions due to masked/partialMask logic\r\n enabled: this.getLookupValue(advSecString, 'enabled'),\r\n enableFull: this.getLookupValue(advSecString, 'enableFull'),\r\n perform: this.getLookupValue(advSecString, 'perform'),\r\n masked: this.getLookupValue(advSecString, 'masked'),\r\n partialMask: this.getLookupValue(advSecString, 'partialMask'),\r\n };\r\n },\r\n getLookupValue: function getLookupValue(/*String*/ advsecVals, propName) {\r\n if (advsecVals === undefined) {\r\n return undefined;\r\n }\r\n \r\n if (propName === 'enabled') { return advsecVals.indexOf(Constants.ENABLED_KEY) !== -1; }\r\n else if (propName === 'visible') { return advsecVals.indexOf(Constants.VISIBLE_KEY) !== -1; }\r\n else if (propName === 'enableFull') { return advsecVals.indexOf(Constants.ENABLE_FULL_KEY) !== -1; }\r\n else if (propName === 'perform') { return advsecVals.indexOf(Constants.PERFORM_KEY) !== -1; }\r\n else if (propName === 'masked') { return advsecVals.indexOf(Constants.MASKED_KEY) !== -1; }\r\n else if (propName === 'partialMask') { return advsecVals.indexOf(Constants.PARTIAL_MASK_KEY) !== -1; }\r\n else { return undefined; }\r\n }\r\n };\r\n });\r\n })();\r\n \n","\n \r\n define(ns+'/validation/AdvancedSecurityMixin',['jquery','lodash', 'angular', 'paychex.core/Errors',ns+'/validation/Constants',ns+'/validation/PermissionStrings'], function ($, _, angular, Errors, Constants, permissionStrings) {\r\n 'use strict';\r\n \r\n \r\n function lookupPermissions(element) {\r\n return $(element).closest('['+ Constants.PERMISSIONS_ATTRIBUTE +']').attr(Constants.PERMISSIONS_ATTRIBUTE);\r\n }\r\n \r\n /**\r\n * Used for all form elements\r\n * @class paychex.framework.angular.forms.validation.FormElementMixin\r\n */\r\n return {\r\n \r\n lookupPermissions: lookupPermissions,\r\n \r\n // Note: I would like to have a separation between the indicator that the user has 'masked' access\r\n // and how many characters should be 'masked' by the component. Currently the \r\n // controllers masked attribute fills both these roles. Attempts to segregate them met with\r\n // lots of problems providing backwards compatibility.\r\n //\r\n applyLookupMixin: function applyNewMixin(element) {\r\n var advsecVals = lookupPermissions(element);\r\n \r\n \r\n var self = this;\r\n \r\n //\r\n // The 'Listen' mixin is (usually) applied in the controller constructor.\r\n // The 'Lookup' mixin is (usually) applied in the link function.\r\n // Therefore the Listen mixin will run first and it will apply defaults and wait for notification.\r\n // However, if the controller's current values are the defaults (since we have not received notification), \r\n // we want to overwrite those defaults with the actual security permissions from the lookup.\r\n // Thus we need to know if the current value is a default or not.\r\n // Lastly, we still need to allow a user to directly specify a value (e.g. visible=\"false\")\r\n // This function handles the logic of whether or not to overwrite the value with the lookup.\r\n // \r\n var calculateSecurityValue = function calculateSecurityValue(propName, defaultValue) {\r\n \r\n // this check allows manually overwriting logic when you want to hard code a value\r\n if (self[propName] === undefined) {\r\n if (permissionStrings.getLookupValue(advsecVals,propName) === undefined) {\r\n // case 1: no value is specified, and we don't have a security context above us in the DOM, so we need to provide the default\r\n self[propName] = defaultValue;\r\n } else {\r\n // case 2: no value specified, but we have a security context in the DOM so we get the correct value from it\r\n self[propName] = permissionStrings.getLookupValue(advsecVals,propName);\r\n self.clearPropertyDefault(propName);\r\n }\r\n } else if (self.isPropertyDefaulted(propName) && permissionStrings.getLookupValue(advsecVals,propName) !== undefined) {\r\n // case 3: a value has been specified, but it is just the default from the listenMixin, so as long as\r\n // we have a security context in the DOM, we can safely overwrite it (it isn't a manually specified value)\r\n self[propName] = permissionStrings.getLookupValue(advsecVals,propName);\r\n self.clearPropertyDefault(propName);\r\n }\r\n };\r\n \r\n // if the ListenMixin is applied, these functions will be defined and the LookupMixin will use them to\r\n // determine whether or not the current values are defaults (so security hasn't been applied and we should\r\n // overwrite them) or actual values (in which case we should leave them alone).\r\n // If the ListenMixin is not applied, these will not exist so we create these \"stub\" implementations\r\n if (this.isPropertyDefaulted === undefined) {\r\n this.isPropertyDefaulted = function isPropertyDefault(prop) {\r\n return true; // if we don't have then listen mixin then we want to apply the values\r\n };\r\n }\r\n \r\n if (this.clearPropertyDefault === undefined) {\r\n this.clearPropertyDefault = function clearPropertyDefault(prop) {\r\n // no-op: nothing to do - stub \r\n };\r\n }\r\n \r\n \r\n // Any time multiple properties depend on a single attribute (enabled/disabled, masked/partialMask)\r\n // we need save the \"defaulted\" status since applying the first property will reset it.\r\n \r\n // need this check before calculating 'enabled' as it will clear the default status\r\n var recomputeIsDisabled = this.isDisabled === undefined || this.isPropertyDefaulted('enabled');\r\n // need this check to know if we're changing masked due to partial masking\r\n var recomputeMasked = this.masked === undefined || this.isPropertyDefaulted('masked');\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} isDisabled Whether the interactable part of the form element is disabled\r\n */\r\n calculateSecurityValue('enabled', true);\r\n \r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} isDisabled Whether the interactable part of the form element is disabled\r\n */\r\n this.isDisabled = recomputeIsDisabled ? !this.enabled : this.isDisabled; // NOTE: enabled must be set first!!!!!\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} perform mainly used on the remote side\r\n */\r\n calculateSecurityValue('perform', false);\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} visible Whether the entire form element including label is visible\r\n */\r\n calculateSecurityValue('visible',true);\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {number} masked The number of characters to mask\r\n */\r\n calculateSecurityValue('masked', false);\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {Boolean} partialMask Whether the form element is partially masked\r\n */\r\n calculateSecurityValue('partialMask', 0); // this should probably default to false, but preserving 0 for backwards compatibility\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {Boolean} enableFull Whether the form element is fully displayed\r\n */\r\n calculateSecurityValue('enableFull', false);\r\n \r\n // would prefer this in the FormElementMixin to keep security and formatting separate, but need to fix the order of execution (controller constructor versus linking)\r\n if (this.masked === false) { // if the user passed a number manually then this would not be true or false\r\n this.masked = 0;\r\n } else if (this.masked === true) {\r\n this.typeOfMasking = 'masked';\r\n this.masked = this.numberOfMaskedCharacters;\r\n }\r\n \r\n // recomputeMasked keeps us from overwriting a manually specified (masked=\"4\") value\r\n //if (this.partialMask) {\r\n if (recomputeMasked && this.partialMask) {\r\n this.typeOfMasking = 'partialMask';\r\n this.masked = this.numberOfPartialMaskedCharacters;\r\n }\r\n },\r\n applyListenMixin: function applyOldMixin($scope) {\r\n var self = this, listeners = {};\r\n \r\n var overridenProperties = {\r\n perform: this.perform !== undefined,\r\n isDisabled: this.isDisabled !== undefined,\r\n visible: this.visible !== undefined,\r\n masked: this.masked !== undefined,\r\n };\r\n \r\n var isDefaultedStatus = {\r\n perform: true,\r\n enabled: true,\r\n visible: true,\r\n masked: true,\r\n partialMask: true,\r\n enableFull: true\r\n };\r\n \r\n this.isPropertyDefaulted = function isPropertyDefault(prop) {\r\n return isDefaultedStatus[prop];\r\n };\r\n \r\n this.clearPropertyDefault = function clearPropertyDefault(prop) {\r\n isDefaultedStatus[prop] = false;\r\n };\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} isDisabled Whether the interactable part of the form element is disabled\r\n */\r\n if (this.isDisabled === undefined) {\r\n this.isDisabled = false;\r\n this.enabled = !this.isDisabled;\r\n } else {\r\n self.clearPropertyDefault('enabled');\r\n }\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} perform mainly used on the remote side\r\n */\r\n if (this.perform === undefined) {\r\n this.perform = false;\r\n } else {\r\n self.clearPropertyDefault('perform');\r\n }\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {boolean} visible Whether the entire form element including label is visible\r\n */\r\n if (this.visible === undefined) {\r\n this.visible = true;\r\n } else {\r\n self.clearPropertyDefault('visible');\r\n }\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {number} masked The number of characters to mask\r\n */\r\n if (this.masked === undefined) {\r\n this.masked = 0;\r\n } else {\r\n self.clearPropertyDefault('masked');\r\n }\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {Boolean} partialMask Whether the form element is partially masked\r\n */\r\n if (this.partialMask === undefined) {\r\n this.partialMask = 0;\r\n } else {\r\n self.clearPropertyDefault('partialMask');\r\n }\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {Boolean} enableFull Whether the form element is fully displayed\r\n */\r\n if (this.enableFull === undefined) {\r\n this.enableFull = false;\r\n } else {\r\n self.clearPropertyDefault('enableFull');\r\n }\r\n \r\n /**\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @property {String} securityId The security ID for advanced security.\r\n */\r\n this.securityId = this.securityId || false;\r\n \r\n \r\n if (!this.ignoreSecurity) {\r\n /**\r\n * Setter for the isDisabled attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setDisabledAttr\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The security id that this event refers to\r\n * @param {Boolean} data.val The value to set isDisabled to\r\n * @listens $scope:disabled\r\n */\r\n if (!overridenProperties.isDisabled || this.isDisabledLeastRestrictive) {\r\n listeners.disabled = $scope.$on('disabled', function setDisabledAttr(event, data) {\r\n if (!self.securityId || data.id === self.securityId) {\r\n \r\n self.isDisabled = data.val || self.isDisabled;\r\n self.enabled = !self.isDisabled;\r\n self.clearPropertyDefault('enabled');\r\n \r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Setter for the perform attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setPerformAttr\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The security id that this event refers to\r\n * @param {Boolean} data.val The value to set perform to\r\n * @listens $scope:perform\r\n */\r\n if (!overridenProperties.perform) {\r\n listeners.perform = $scope.$on('perform', function setPerformAttr(event, data) {\r\n self.perform = data.val;\r\n self.clearPropertyDefault('perform');\r\n });\r\n }\r\n \r\n \r\n /**\r\n * Setter for the visible attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setVisibleAttr\r\n * @private\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The security id that this event refers to\r\n * @param {Boolean} data.val The value to set visible to\r\n * @listens $scope:visible\r\n */\r\n if (!overridenProperties.visible) {\r\n listeners.visible = $scope.$on('visible', function setVisibleAttr(event, data) {\r\n if (!self.securityId || data.id === self.securityId) {\r\n self.visible = data.val;\r\n self.clearPropertyDefault('visible');\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Setter for the masked attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setMaskedAttr\r\n * @private\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The security id that this event refers to\r\n * @param {Number} data.val The amount of characters that will be masked in the input\r\n * @listens $scope:masked\r\n */\r\n if (!overridenProperties.masked) {\r\n listeners.masked = $scope.$on('masked', function setMaskedAttr(event, data) {\r\n if (!self.securityId || data.id === self.securityId) {\r\n if (data.val) {\r\n self.typeOfMasking = 'masked';\r\n self.masked = self.numberOfMaskedCharacters;\r\n } else {\r\n if (self.typeOfMasking === 'masked') {\r\n self.masked = 0;\r\n }\r\n }\r\n self.clearPropertyDefault('masked');\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Setter for the partialMask attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setPartial\r\n * @private\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The validation id that this event refers to\r\n * @param {Boolean} data.val Indicates Whether an element is partially masked\r\n * @listens $scope:partialMask\r\n */\r\n if (!overridenProperties.masked) {\r\n listeners.partialMask = $scope.$on('partialMask', function setPartialAttr(event, data) {\r\n if (!self.securityId || data.id === self.securityId) {\r\n if (data.val) {\r\n self.partialMask = true;\r\n self.typeOfMasking = 'partialMask';\r\n self.masked = self.numberOfPartialMaskedCharacters;\r\n } else {\r\n self.partialMask = false;\r\n if (self.typeOfMasking === 'partialMask') {\r\n self.masked = 0;\r\n }\r\n }\r\n self.clearPropertyDefault('partialMask');\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Setter for the enableFull attribute.\r\n *\r\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\r\n * @method setFull\r\n * @private\r\n * @param {event} event\r\n * @param {Object} data The payload\r\n * @param {String} data.id The validation id that this event refers to\r\n * @param {Boolean} data.val True if the element is fully displayed\r\n * @listens $scope:enableFull\r\n */\r\n listeners.enableFull = $scope.$on('enableFull', function setFullAttr(event, data) {\r\n if (!self.securityId || data.id === self.securityId) {\r\n self.enableFull = data.val;\r\n self.clearPropertyDefault('enableFull');\r\n }\r\n });\r\n }\r\n }\r\n };\r\n });\r\n \n","\n define(ns+'/validation/FormElementMixin',['lodash', 'angular', 'paychex.core/Errors',ns+'/validation/FormStateMixin',ns+'/validation/AdvancedSecurityMixin'], \n function (_, angular, Errors, FormStateMixin, AdvancedSecurityMixin) {\n 'use strict';\n \n /**\n * Used for all form elements\n * @class paychex.framework.angular.forms.validation.FormElementMixin\n */\n return function mixin($scope, elementType) {\n var self = this;\n \n var overridenProperties = {\n isRequired: this.isRequired !== undefined\n };\n \n FormStateMixin.call(this, $scope);\n AdvancedSecurityMixin.applyListenMixin.call(this,$scope);\n \n \n var listeners = {};\n \n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @method removeListeners\n * @param {String|Array} toRemove a string (or array of strings) corresponding to particular\n * scope event listeners to remove. Note that 'all' is also acceptable,\n * and will remove all scope listeners registered in this Mixin (but not\n * listeners defined elsewhere)\n * @description\n * Allows the removal of one or more scope $on listeners defined in this mixin. Those listeners are:\n * - edit\n * - cancel\n * - disabled\n * - enabled\n * - perform\n * - readOnly\n * - visible\n * - restrict\n * - masked\n * - partialMask\n * - ngRequired\n * - maxChars\n */ \n $scope.removeListeners = function removeListeners (toRemove) {\n if (toRemove === 'all') {\n _.forOwn(listeners, function (removeFn, key) {\n removeFn();\n delete listeners[key];\n });\n }\n else {\n if (_.isString(toRemove)) {\n toRemove = [toRemove];\n }\n toRemove.forEach(function (key) {\n if (listeners[key] !== undefined) {\n listeners[key]();\n delete listeners[key];\n }\n });\n }\n };\n \n \n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {boolean} isDisabledLeastRestrictive when overriding isDisabled as false, do we still want to consider adv security enablement?\n */\n this.isDisabledLeastRestrictive = this.isDisabledLeastRestrictive === undefined ? false : this.isDisabledLeastRestrictive;\n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {Boolean} isRequired Whether the form element is required\n */\n this.isRequired = this.isRequired === undefined ? false : this.isRequired;\n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {Array} repeat An array of objects to ng-repeat over for a component\n */\n this.repeat = this.repeat === undefined ? [] : this.repeat;\n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {Boolean} isNil Flag if the value is null.\n */\n this.isNil = this.isNil === undefined ? true : this.isNil;\n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {boolean} validationIf Toggle validation.\n */\n this.validationIf = this.validationIf === undefined ? true : this.validationIf;\n \n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {string} elementId unique elementId\n */\n this.elementId = _.uniqueId(elementType + '-');\n \n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {function} onFocus function to call when the element gets focus.\n */\n this.onFocus = _.isFunction(this.onFocus) ? this.onFocus : angular.noop;\n \n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {function} onBlur function to call when the element loses focus.\n */\n this.onBlur = _.isFunction(this.onBlur) ? this.onBlur : angular.noop;\n \n /**\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @property {function} onKeyup function to call when the element has key up event.\n */\n this.onKeyup = _.isFunction(this.onKeyup) ? this.onKeyup : angular.noop;\n \n // for backwards compatibility, if you have not specified read only formatters, then\n // the edit mode formatters \"formatters\" will be used for both\n if (this.formatters && this.readOnlyFormatters === undefined) {\n this.readOnlyFormatters = this.formatters;\n }\n \n /**\n * Setter for the max chars attribute.\n *\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @method setMaxChars\n * @private\n * @param {event} event\n * @param {Object} data The payload\n * @param {String} data.id The validation id that this event refers to\n * @param {Number} data.val The maximum number of characters allowed\n * @listens $scope:maxChars\n */\n listeners.maxChars = $scope.$on('maxChars', function setMaxChars(event, data) {\n self.maxChars = data.val;\n });\n \n /**\n * Setter for the restrict attribute.\n *\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @method setRestrictRegex\n * @private\n * @param {event} event\n * @param {Object} data The payload\n * @param {String} data.id The security id that this event refers to\n * @param {String} data.val The string representation of a regex to set the restrict attribute to\n * @listens $scope:restrict\n */\n listeners.restrict = $scope.$on('restrict', function setRestrictRegex(event, data) {\n self.restrictRegex = data.val;\n });\n \n \n /**\n * Setter for the isRequired attribute.\n *\n * @memberof paychex.framework.angular.forms.validation.FormElementMixin\n * @method setRequired\n * @private\n * @param {event} event\n * @param {Object} data The payload\n * @param {String} data.id The validation id that this event refers to\n * @param {Boolean} data.val True if the element is required\n * @listens $scope:ngRequired\n */\n if (!overridenProperties.isRequired) {\n listeners.isRequired = $scope.$on('isRequired', function setRequired(event, data) {\n self.isRequired = data.val;\n });\n }\n };\n });\n \n","\n \n \n (function () {\n 'use strict';\n define(ns+'/textInput/TextInputController',['lodash', ns+'/validation/FormElementMixin'], function (_, formElementMixin) {\n \n var ngDependencies = ['$scope', '$element'];\n \n /**\n * The basic text input controller.\n * @class paychex.framework.angular.forms.textInput.pngTextInput#TextInputController\n * @mixes paychex.framework.angular.forms.validation.FormElementMixin\n */\n var Constructor = function textInputControllerConstructor($scope, $element) {\n var self = this;\n self.$onInit = function $onInit() {\n formElementMixin.call(self, $scope, 'text-input');\n self.ngModelOptions = _.merge({allowInvalid:true, getterSetter:true}, self.modelOptions);\n \n // Handle IE bug where the form is set dirty if placeholder attribute is not passed a value\n // https://github.com/angular/angular/issues/14440\n if (self.placeholder) {\n $element.find('input').attr('placeholder', self.placeholder);\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n define(ns+'/textInput/textInput.tpl.html',[],function(){\r\n 'use strict';\r\n return '
{{textInputCtrl.ngModelController.$viewValue | pngMaskFilter : textInputCtrl.masked : textInputCtrl.readOnlyFormatters : !textInputCtrl.partialMask : textInputCtrl.isNil : textInputCtrl.isDisabled : textInputCtrl.numberOfDisplayCharacters | pngNoValueFilter}}
';\r\n });\n","\n define(ns+'/validation/FormElementScopeMixin',[], function () {\n 'use strict';\n \n /**\n * Used in conjuction with the paychex.framework.angular.forms.validation.FormElementMixin .\n * Simply bindToController: _.merge({}, formElementScopeMixin),\n *\n * @class paychex.framework.angular.forms.validation.FormElementScopeMixin\n *\n * @param {String} ng-model\n * @param {Boolean} [read-only=false] Whether an interactive form element is shown or just a label with the value\n * @param {Boolean} [isDisabled=false] Whether the interactable part of the form element is disabled\n * @param {Boolean} [visible=true] Whether the entire form element including label is visible\n * @param {String} [security-id] This is specified to automatically set all the security attributes for a given form element\n * @param {Boolean} [masked=false] The number of characters to mask\n * @param {String} [validation-id] This is specified to automatically set all the validation attributes for a given form element\n * @param {Number} [number-of-masked-characters=0] The number of characters to mask with if masked is true\n * @param {Number} [number-of-partial-masked-characters=0] The number of characters to mask with if partial-masked is true\n * @param {String} name The form element's unique name\n * @param {Boolean} [isRequired=false] True if the element is required for the form\n * @param {String} label The label text that goes next to the form element\n * @param {Object} repeat For looping around the group of elements\n * @param {Number} [partial=false] Number of an element that is partially masked, sourced from DTO rather than UI\n * @param {Boolean} [full=false] Whether an element is fully displayed(Should be treated same as enabled, to meet UX expectations)\n * @param {Boolean} [ignore-security] If set to true, parent's security id will be ignored\n * @param {Boolean} [is-nil=true] If set to false, even if the ngModel is undefined, it will still be masked\n * @param {Function[]} formatters An array of formatters which takes in a value and returns the formatted value\n * @param {String} payxautoid A payxautoid which will be accessible in the template of the individual form components\n * @param {Function[]} parsers An array of parsers which takes in a value on keystroke and returns the formatted value\n * @param {Function} [on-focus] Function to call when the input element gets focus.\n * @param {Function} [on-blur] Function to call when the input element loses focus.\n * @param {Function} [on-keyup] Function to call when the input element has a key up event.\n * @param {String} [help-icon-tool-tip]\n * @param {String} [png-security-client] ssoCaid to apply to ClientEntitlementsService\n */\n return {\n ngModel: '=',\n readOnly: '=?',\n isDisabled: '=?',\n isDisabledLeastRestrictive: '=?',\n visible: '=?',\n securityId: '=?',\n masked: '=?',\n validationId: '=?',\n validationIf: '=?',\n numberOfMaskedCharacters: '=?',\n numberOfPartialMaskedCharacters: '=?',\n name: '=?',\n isRequired: '=?',\n label : '=?',\n repeat: '=?',\n partialMask: '=?',\n enableFull: '=?',\n ignoreSecurity: '=?',\n isNil: '=?',\n formatters : '=?',\n readOnlyFormatters: '=?',\n payxautoid: '@?',\n securityLeastRestrictive : '=?',\n parsers : '=?',\n validators: '=?',\n validationWatch: '&?',\n onFocus: '=?',\n onBlur: '=?',\n onKeyup: '=?',\n helpIconTooltip: '=?',\n pngSecurityClient: '=?'\n };\n \n });\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/textInput/TextInputDirective',['angular',\n 'lodash',\n ns+'/textInput/Constants',\n ns+'/textInput/textInput.tpl.html',\n 'paychex.core/DeviceProfile',\n ns+'/validation/AdvancedSecurityMixin',\n ns+'/validation/FormElementScopeMixin'],\n function (angular,\n _,\n Constants,\n inputTemplate,\n deviceProfile,\n advancedSecurityMixin,\n formElementScopeMixin) {\n var ngDependencies = ['$parse'];\n \n /**\n * @class paychex.framework.angular.forms.textInput.pngTextInput\n * @mixes paychex.framework.angular.forms.validation.FormElementScopeMixin\n * @param {String} [placeholder] The string to place inside the input box when empty, if this is undefined, the transcluded label will be placed inside the input box\n * @param {String} [restrict-regex] The string representation of a regex to set the restrict attribute to\n * @param {Number} [max-chars] The most characters allowed in the text input\n * @param (Function) [parser] Function pointer to a formatting function to be called on each keystroke\n * @param {String} [type] The string representation of input type for the field to allow better input control and validation, some of which are particularly useful for mobile users than desktop.\n */\n var Constructor = function textInputDirectiveConstructor($parse) {\n return {\n controllerAs: 'textInputCtrl',\n controller: Constants.TextInputControllerName,\n template: inputTemplate,\n replace: true,\n scope: {},\n bindToController: _.merge({\n maxChars: '=?',\n restrictRegex: '=?',\n placeholder: '=?',\n type: '@?',\n numberOfDisplayCharacters: '=?',\n modelOptions: '=?',\n hint: '=?',\n hintif: '=?'\n }, formElementScopeMixin),\n require: ['pngTextInput', 'ngModel', '?^pngForm', '?^pngMinForm'],\n compile: function compile(element, attributes) {\n return {\n pre: function preLink(scope, element, directiveAttrs /*, controllers */) {\n var type = directiveAttrs.type;\n /* As desktop browsers(IE, Chrome, Firefox) displays number spinners for input elements of type='number'; it will only apply to mobile/tablet devices as it uses Numbers keyboard.*/\n if (type !== undefined && type !== null && (type.toLowerCase() !== 'number' || !deviceProfile.isDesktop())) {\n element.find('input').attr('type', directiveAttrs.type);\n }\n },\n post: function postLink(scope, element, attributes, controllers) {\n var textInputCtrl = controllers[0],\n ngModelCtrl = controllers[1],\n formCtrl = controllers[2] || controllers[3];\n advancedSecurityMixin.applyLookupMixin.call(textInputCtrl, element);\n \n scope.textInputCtrl.ngModelController = ngModelCtrl;\n scope.textInputCtrl.bindableViewValue = function(newValue) {\n // if there are >0 arguments this is a setter\n // if there are 0 this is a getter\n return arguments.length ? ngModelCtrl.$setViewValue(newValue) : ngModelCtrl.$viewValue;\n };\n \n if (formCtrl && (attributes.readOnly === undefined || $parse(attributes.readOnly).assign)) { \n textInputCtrl.readOnly = !formCtrl.editMode;\n }\n }\n };\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n define(ns+'/validation/FormValidationGeneratorService',['lodash', 'lib.moment'], function (_, Moment) {\n \n \n 'use strict';\n \n var ngDependencies = [];\n \n /**\n * Creates validators based upon the rules passed in.\n * @class paychex.framework.angular.forms.validation.FormValidationGeneratorService\n */\n var Constructor = function formValidationGeneratorServiceConstructor() {\n \n /**\n * Validates with if the field is required and value.\n * @memberOf paychex.framework.angular.forms.validation.FormValidationGeneratorService\n * @private\n * @param {Object} value The value of the field\n * @param {boolean} validation Validation result from the caller\n * @returns {boolean}\n */\n function validateRequired(value, validation) {\n var isEmpty = value === undefined || value === null || (_.isString(value) && value.trim().length === 0);\n if (isEmpty) {\n return true;\n }\n else {\n return validation;\n }\n }\n \n /**\n * Converts a date string from the backend service into a moment object.\n * @memberOf paychex.framework.angular.forms.validation.FormValidationGeneratorService\n * @private\n * @param {String} stringDate The string to convert into a moment object\n * @returns {Moment}\n */\n function parseConfigDateToMoment(stringDate) {\n var regex = new RegExp('y=(.+) m=(.+) d=(.+)'),\n result = regex.exec(stringDate),\n dates = {\n year: result[1],\n month: result[2],\n date: result[3]\n },\n momentObj = new Moment('1200-1-1', 'YYYY-DD-MM');\n \n \n _.forEach(_.keys(dates), function (key) {\n var value = dates[key];\n if (_.isNumber(+value) && parseInt(value, 10) !== 0) {\n var amount = parseInt(value, 10);\n if (key === 'month') {\n --amount;\n }\n momentObj[key](amount);\n }\n else if (value.indexOf('+') > -1) {\n momentObj[key](new Moment()[key]());\n momentObj.add(parseInt(value.slice(1), 10), key);\n } else if (parseInt(value, 10) === 0) {\n momentObj[key](new Moment()[key]());\n }\n \n });\n return momentObj;\n }\n \n var rules = {\n minLength: function minLength(rule) {\n \n var number = rule.value;\n return function minLengthValidator(modelValue, viewValue) {\n var validation = (viewValue !== undefined && viewValue !== null && viewValue.length >= +number);\n \n return validateRequired(viewValue, validation);\n };\n },\n /**\n * Scope maximum characters event\n *\n * @memberOf $scope\n * @event $scope:maxChars\n * @type {object}\n * @property {Number} val The maximum number of characters an input should have\n * @property {String} id The validation id associated with the component\n */\n maxChars: function maxChars(rule, elm, scope) {\n var number = rule.value;\n var validationId = elm.attr('png-validation-id');\n if (scope && validationId) {\n scope.$emit('maxChars', {val: +number, id: validationId});\n }\n return function maxCharsValidator() {\n //There are no message id's for any maxlength validation rules. So, here we rely on the browser to enforce maxlength.\n return true;\n };\n },\n /**\n * Scope restrict characters event\n * See http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/TextInput.html#restrict\n *\n * @memberOf $scope\n * @event $scope:restrict\n * @type {object}\n * @property {String} val A regex string that lists the range of characters allowed to be input into the element\n * @property {String} id The validation id associated with the component\n */\n restrict: function restrict(rule, elm, scope) {\n function escapeRestrictStr(str) {\n return str.replace(/[\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\$\\|]/g, '\\\\$&');\n }\n \n var regexString = rule.value;\n var validationId = elm.attr('png-validation-id');\n if (scope && validationId) {\n var restrictRegex = '^[' + escapeRestrictStr(regexString) + ']*$';\n scope.$emit('restrict', {val: restrictRegex, id: validationId});\n }\n return function restrictValidator() {\n //Here we use ng-pattern-restrict, to prevent the user from inputting anything invalid.\n return true;\n };\n },\n /**\n * Scope required event\n *\n * @memberOf $scope\n * @event $scope:required\n * @type {object}\n * @property {boolean} val Indicates whether the form element should be required.\n * @property {String} id The validation id associated with the component\n */\n required: function required(rule, elm, scope) {\n var isRequired = rule.value && rule.value !== 'false';\n var validationId = elm.attr('png-validation-id');\n \n if (isRequired) {\n elm.attr('required', true);\n if (scope && validationId) {\n scope.$emit('isRequired', {val: true, id: validationId});\n }\n } else {\n elm.removeAttr('required');\n if (scope && validationId) {\n scope.$emit('isRequired', {val: false, id: validationId});\n }\n }\n return function requiredValidator(value) {\n var isEmpty = value === undefined || value === null || (_.isString(value) && value.trim().length === 0);\n return !isRequired || !isEmpty;\n };\n },\n allowNegative: function allowNegative(rule) {\n var bool = rule.value;\n return function allowNegativeValidator(value) {\n var validation = value !== undefined && value !== null && +value >= 0;\n if (!bool) {\n return validateRequired(value, validation);\n } else {\n return true;\n }\n };\n },\n minValue: function minValue(rule) {\n var minimumValue = rule.value;\n return function minValueValidator(value) {\n var validation = value !== undefined && value !== null && +value >= +minimumValue;\n return validateRequired(value, validation);\n };\n },\n maxValue: function maxValue(rule) {\n var maximumValue = rule.value;\n return function maxValueValidator(value) {\n var validation = value !== undefined && value !== null && +value <= +maximumValue;\n return validateRequired(value, validation);\n };\n },\n precision: function precision(rule) {\n var precisionAmount = rule.value;\n var compiledRegex = new RegExp('^[-]?\\\\d+\\.?\\\\d{0,' + precisionAmount + '}$');\n return function precisionValidator(value) {\n var validation = value !== undefined && value !== null && compiledRegex.test(value);\n return validateRequired(value, validation);\n };\n },\n dateFormatValue: function dateFormatValue(rule) {\n var format = rule.value;\n return function dateFormatValidator(value) {\n var validation = value !== undefined && value !== null && new Moment(value, format.replace('EEE', 'ddd'), true).isValid();\n //TODO: Double check to make sure this is the right format\n return validateRequired(value, validation);\n };\n },\n minimumDate: function minimumDate(rule) {\n var minDate = rule.value;\n var minMomentDate = parseConfigDateToMoment(minDate);\n return function minDateValidator(value) {\n var compareDate = new Moment(value, 'MM/DD/YYYY', true),\n validation = value !== undefined && value !== null && compareDate.isValid() && compareDate.isAfter(minMomentDate) || compareDate.isSame(minMomentDate);\n return validateRequired(value, validation);\n };\n },\n maximumDate: function maximumDate(rule) {\n var maxDate = rule.value;\n var maxMomentDate = parseConfigDateToMoment(maxDate);\n return function maxDateValidator(value) {\n var compareDate = new Moment(value, 'MM/DD/YYYY', true),\n validation = value !== undefined && value !== null && compareDate.isValid() && compareDate.isBefore(maxMomentDate) || compareDate.isSame(maxMomentDate);\n return validateRequired(value, validation);\n };\n },\n minDigits: function minDigits(rule) {\n var minDigit = rule.value;\n return function minDigitsValidator(value) {\n var validation = value !== undefined && value !== null && ('' + value).length >= minDigit;\n return validateRequired(value, validation);\n };\n },\n maxDigits: function maxDigits(rule, elm, scope) {\n var maxDigit = rule.value;\n var validationId = elm.attr('png-validation-id');\n if (scope && validationId) {\n scope.$emit('maxChars', {val: +maxDigit, id: validationId});\n }\n return function maxDigitsValidator(value) {\n var validation = value !== undefined && value !== null && ('' + value).length <= maxDigit;\n return validateRequired(value, validation);\n };\n },\n expression: function expression(rule) {\n var exp = rule.value;\n var compiledRegex = new RegExp(exp);\n return function expressionValidator(value) {\n var validation = value !== undefined && value !== null && compiledRegex.test(value);\n return validateRequired(value, validation);\n };\n }\n };\n \n /**\n * Returns a function that can be used as an angular validator, if a rule property does not match anything,\n * a function is returned that always returns true.\n * @memberOf paychex.framework.angular.forms.validation.FormValidationGeneratorService\n * @param {Object} rule\n * @param {String} rule.property The type of rule to be generated\n * @param {String|Number|Date|Regex} rule.value The configuration for the rule to be generated\n * @param {boolean} isRequired The element is a required field\n * @param {DOMElement} elm The dom element associated with the form component\n * @returns {Function} returnFunction A function that takes in a value to validate and then returns either\n * true for a valid value or false for an invalid value.\n */\n this.createValidator = function createValidator(rule, elm, scope) {\n var ruleType = rule.property;\n //If there isn't a validator, just return a function that returns true so it doesn't fail validation\n if (rules[ruleType]) {\n return rules[ruleType](rule, elm, scope);\n } else {\n return function () {\n return true;\n };\n }\n };\n \n };\n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n \n });\n \n","\n define(ns+'/validation/FormValidationService',['lodash', 'paychex.core/Promise', 'paychex.core/Errors'], function (_, Promise, Errors) {\n 'use strict';\n \n var ngDependencies = [];\n \n /**\n * Handles the retrieval of the validation rules\n * @class paychex.framework.angular.forms.validation.FormValidationService\n */\n var Constructor = function formValidationServiceConstructor () {\n var rulesHaveBeenSet = false,\n rules = [],\n deferred = Promise.defer();\n \n /**\n * Returns an array containing the rules from the remote call.\n * @memberOf paychex.framework.angular.forms.validation.FormValidationService\n */\n this.getRules = function getRules() {\n if (!rulesHaveBeenSet) {\n Errors.throw('attempted to get rules but no rules have been set');\n }\n return rules;\n };\n \n /**\n * Returns a Promise which resolves with an array containing the rules from the remote call.\n * @memberOf paychex.framework.angular.forms.validation.FormValidationService\n */\n this.getRulesAsync = function getRulesAsync () {\n if (rules.length > 0) {\n return Promise.resolve(rules);\n }\n else {\n return deferred.promise;\n }\n };\n \n /**\n * Sets the rules for later retrieval in generating the validators.\n * @memberOf paychex.framework.angular.forms.validation.FormValidationService\n */\n this.setRules = function setRules(newRules){\n if (!_.isArray(newRules)) {\n Errors.throw('rules must be of type Array');\n }\n rulesHaveBeenSet = true;\n if (rules.length === 0) {\n rules.splice.apply(rules, [0, 0].concat(newRules));\n deferred.resolve(newRules);\n }\n else {\n rules.splice.apply(rules, [rules.length, 0].concat(_.difference(newRules, rules)));\n }\n };\n \n /**\n * Gets a particular rule by validationId\n * @memberOf paychex.framework.angular.forms.validation.FormValidationService\n */\n this.getRule = function getRule(validationId) {\n return _.find(this.getRules(), {'id' : validationId});\n };\n };\n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n \n });\n \n","\n \n define(ns+'/validation/FormSecurityService',[\n 'lodash',\n 'paychex.core/Errors'\n ], function (_,\n Errors\n ) {\n 'use strict';\n \n var ngDependencies = ['ClientEntitlementsService'];\n \n /**\n * Handles all the retrieval and parsing of the security bit strings for a form element.\n * @class paychex.framework.angular.forms.validation.FormSecurityService\n * @param $q\n */\n var Constructor = function FormSecurityServiceConstructor(ClientEntitlementsService) {\n var self = this, ssoCaid = null;\n \n function getGlobalStateFormSecurity() {\n if (ssoCaid === null) {\n Errors.throw('EntitlementsException','No selected client specified in FormSecurityService');\n } else {\n return ClientEntitlementsService.getFormSecurity(ssoCaid);\n }\n }\n \n this.setSsoCaid = function setSsoCaid(argSsoCaid) {\n ssoCaid = argSsoCaid;\n };\n \n this.getSsoCaid = function getSsoCaid() {\n return ssoCaid;\n };\n \n /**\n * Sets the internal cache to the remote security object\n * @function setComponentPermissions\n * @param permissionObject The remote security object\n * @param permissionObject.permissionTranslations\n * @param permissionObject.bitmapContextTypes\n * @param permissionObject.componentTranslations\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n */\n this.setComponentPermissions = function setComponentPermissions(permissionObject) {\n ClientEntitlementsService.setComponentPermissions(permissionObject);\n };\n \n /*\n * Constant that is both no specification but also means that security is currently disabled\n * Note that this only works if you make sure to compare the permissions with the instance that you\n * got it from\n */\n this.SECURITY_DISABLED = {};\n \n /**\n * Clears the internal cache for all security objects\n * @function clearComponentPermissions\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n */\n this.clearComponentPermissions = function clearComponentPermissions() {\n // TODO: probably don't want this to work this way now - we may not need to clear since we can store multiple clients\n //getGlobalStateFormSecurity().clearComponentPermissions();\n };\n \n this.getCompPerms = function getCompPerms(guid, leastRestrictiveBool) {\n // Since consumer code uses strict comparison for SECURITY_DISABLED (===), we need to make sure and return\n // the instance from this service, not the instance from the delegate FormSecurity\n var result, fs = getGlobalStateFormSecurity();\n result = fs.getCompPerms(guid, leastRestrictiveBool);\n return result === fs.SECURITY_DISABLED ? this.SECURITY_DISABLED : result;\n };\n \n /**\n * Returns a promise that is fulfilled with an object representing the permissions for the given argument.\n * @function getComponentPermissions\n * @param guid {String|Object|Array} The form component ID, can either be a string, an array of strings, or an object\n * where each key of the object has a value that is an array of guid strings (ex: {v0 : ['guid1, 'guid2'], v1 : ['guid3']})\n * @param [leastRestrictiveBool] {Boolean} If true, when comparing multiple guids, the function will return the least\n * restrictive permissions from all the guids provided, defaults to false\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n * @returns {Object} An object representing the permissions decoded from the bitstring\n */\n this.getComponentPermissions = function getComponentPermissions(guid, leastRestrictiveBool) {\n return getGlobalStateFormSecurity().getComponentPermissions(guid, leastRestrictiveBool);\n };\n \n /**\n * Turns on Employee Security Mode.\n * @function enableEmployeeSecurityMode\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n * @returns {boolean} An boolean indicating the current state of employeeSecurityModeEnabled\n */\n this.enableEmployeeSecurityMode = function enableEmployeeSecurityMode () {\n return getGlobalStateFormSecurity().enableEmployeeSecurityMode();\n };\n \n /**\n * Turns off Employee Security Mode.\n * @function enableEmployeeSecurityMode\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n * @returns {boolean} An boolean indicating the current state of employeeSecurityModeEnabled\n */\n this.disableEmployeeSecurityMode = function disableEmployeeSecurityMode () {\n return getGlobalStateFormSecurity().disableEmployeeSecurityMode();\n };\n \n /**\n * Returns the access Groups Info object, which contains if groups are applied to the user.\n * @function getAccessGroupInfo\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n * @returns {Object} An object with informationa about the Access Group applied to the user for the current client.\n */\n this.getAccessGroupInfo = function getAccessGroupInfo () {\n return getGlobalStateFormSecurity().getAccessGroupInfo();\n };\n \n \n /**\n * Registers a callback which will fire whenever the component permissions are updated\n * @function registerListener\n * @param {Function} callback The callback to fire whenever the component permissions are changed\n * @memberOf paychex.framework.angular.forms.validation.FormSecurityService\n * @returns {Function} The unsubscribe function\n */\n this.registerListener = function registerListener(callback) {\n return getGlobalStateFormSecurity().registerListener(callback);\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n \n \n });\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/validation/PngSecurityIdDirective',[\n 'angular', \n ns+'/validation/Constants',\n ns+'/validation/PermissionStrings',\n ns+'/validation/AdvancedSecurityMixin'], \n function (angular, Constants, permissionStrings, advancedSecurityMixin) {\n var ngDependencies = [\n Constants.FormSecurityService,\n 'ClientEntitlementsService'\n ];\n \n /**\n * @class paychex.framework.angular.forms.validation.pngSecurityId\n * @ngdoc directive\n * @description Handles broadcasting events to the scope for the various security settings.\n * @param {String|Array|Object} pngSecurityId the string representation of the png security id or an array of png security id's, or an\n * @param {Boolean} pngSecurityLeastRestrictive If set to true, overrides the FormSecurityService to take the\n * least restrictive of an array of guids rather than most restrictive\n *\n *\n */\n var Constructor = function pngSecurityIdDirectiveConstructor(FormSecurityService, ClientEntitlementsService) {\n return {\n restrict: 'A',\n priority: 700, // greater priority than the 'ng-if'\n controllerAs: 'securityIdController',\n controller: function() {\n // just need an empty object - this is a constructor invoked with 'new'\n } ,\n compile: function() {\n return {\n // since the AdvancedSecurityMixin will typically be applied in the post-link function,\n // and because post-link is applied bottom-up, we need to apply the security\n // lookup in the pre-link phase (top-down) to make sure it is done before the mixin runs.\n // If it were applied in the postlink function, it would be after all the child directives ran\n pre: function pngSecurityIdDirectiveLink(scope, elm, attrs, securityIdController) {\n var permissions, evaluatedID, evaluatedLeastRestrictive, evaluatedClientId, formSecurity;\n \n if (attrs.pngSecurityClient) {\n evaluatedClientId = scope.$eval(attrs.pngSecurityClient);\n }\n \n if (attrs.pngSecurityId) {\n evaluatedID = scope.$eval(attrs.pngSecurityId);\n evaluatedLeastRestrictive = scope.$eval(attrs.pngSecurityLeastRestrictive);\n \n if (evaluatedID) {\n \n // determine if we should use the default global state security, or the id the directive is asking for\n formSecurity = evaluatedClientId ? ClientEntitlementsService.getFormSecurity(evaluatedClientId) : FormSecurityService;\n \n // These could also be stored as data attributes on the element, then use jquery to find them\n // rather than requiring a directive dependency\n permissions = formSecurity.getCompPerms(evaluatedID, evaluatedLeastRestrictive);\n if (permissions !== formSecurity.SECURITY_DISABLED) {\n securityIdController.evaluatedId = evaluatedID;\n securityIdController.permissions = permissions;\n elm.attr(Constants.PERMISSIONS_ATTRIBUTE, permissionStrings.permissionsToString(permissions));\n scope.advSecPerms = permissions;\n } else {\n // This is to handle the case when security is disabled for employee mode and\n // components are using the advSecPerms scope parameter\n scope.advSecPerms = {\n visible: true,\n enabled: true,\n perform: true,\n masked: false,\n partialMask: false,\n enableFull: true\n };\n }\n } \n }\n },\n post: function pngSecurityIdDirectiveLink(scope, elm, attrs, securityIdController) {\n var permissions = securityIdController.permissions || {};\n var evaluatedID = securityIdController.evaluatedId;\n /**\n * Scope visible event\n *\n * @memberOf $scope\n * @event $scope:visible\n * @type {object}\n * @property {boolean} val Indicates whether the form element should be visible.\n * @property {String} id The security id associated with the component\n */\n if(permissions.visible !== undefined){\n //Even if visibility is set to false, if masking is enabled, we still show the component\n var visible = (permissions.visible) || (permissions.masked) || (permissions.partialMask);\n scope.$broadcast('visible', {val: visible, id: evaluatedID});\n }\n /**\n * Scope disabled event\n *\n * @memberOf $scope\n * @event $scope:disabled\n * @type {object}\n * @property {boolean} val Indicates whether the form element should be disabled.\n * @property {String} id The security id associated with the component\n */\n if(permissions.enabled !== undefined) {\n scope.$broadcast('disabled', {val: !permissions.enabled, id: evaluatedID});\n }\n /**\n * Scope read only event\n *\n * @memberOf $scope\n * @event $scope:perform\n * @type {object}\n * @property {boolean} val Indicates whether the form element should be read only.\n * @property {String} id The security id associated with the component\n */\n if(permissions.perform !== undefined) {\n scope.$broadcast('perform', {val: permissions.perform, id: evaluatedID});\n }\n /**\n * Scope visible event\n *\n * @memberOf $scope\n * @event $scope:masked\n * @type {object}\n * @property {Number} val Indicates the number of characters that should be masked in the component\n * @property {String} id The security id associated with the component\n */\n if(permissions.masked !== undefined) {\n scope.$broadcast('masked', {val: permissions.masked, id: evaluatedID});\n }\n /**\n * Scope partially visible event\n *\n * @memberOf $scope\n * @event $scope:masked\n * @type {object}\n * @property {Boolean} val Indicates Whether an element is partially masked\n * @property {String} id The security id associated with the component\n */\n if(permissions.partialMask !== undefined) {\n scope.$broadcast('partialMask', {val: permissions.partialMask, id: evaluatedID});\n }\n /**\n * Scope enabled full event\n *\n * @memberOf $scope\n * @event $scope:masked\n * @type {object}\n * @property {Number} val Indicates whether an element is fully displayed\n * @property {String} id The security id associated with the component\n */\n if(permissions.enableFull !== undefined) {\n scope.$broadcast('enableFull', {val: permissions.enableFull, id: evaluatedID});\n }\n \n }\n };\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/validation/PngSecurityScopeDirective',[\n 'angular', \n ns+'/validation/PermissionStrings',\n ns+'/validation/AdvancedSecurityMixin'], \n function (angular, permissionStrings, advancedSecurityMixin) {\n var ngDependencies = [\n ];\n \n var Constructor = function pngSecurityIdDirectiveConstructor() {\n return {\n restrict: 'A',\n priority: 700, // greater priority than the 'ng-if'\n controllerAs: 'securityScopeController',\n controller: function() {\n // just need an empty object - this is a constructor invoked with 'new'\n } ,\n compile: function() {\n return {\n // since the AdvancedSecurityMixin will typically be applied in the post-link function,\n // and because post-link is applied bottom-up, we need to apply the security\n // lookup in the pre-link phase (top-down) to make sure it is done before the mixin runs.\n // If it were applied in the postlink function, it would be after all the child directives ran\n pre: function pngSecurityIdDirectiveLink(scope, elm, attrs, securityScopeController) {\n var permissions, evaluatedID, evaluatedLeastRestrictive;\n permissions = permissionStrings.stringToPermissions(advancedSecurityMixin.lookupPermissions(elm));\n \n securityScopeController.permissions = permissions;\n scope.advSecPerms = permissions;\n }\n };\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n Constructor.registeredName = 'pngSecurityScope';\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n \n \n (function () {\n 'use strict';\n \n define(ns+'/validation/PngValidationIdDirective',['angular', 'lodash', ns+'/validation/Constants'], function (angular, _, Constants) {\n var ngDependencies = [\n Constants.FormValidationService,\n Constants.FormValidationGeneratorService\n ];\n \n /**\n * @class paychex.framework.angular.forms.validation.pngValidationId\n * @ngdoc directive\n * @description Handles adding validation rules to the ng-model on this element. The element that this is put on must also have an ng-model\n * @param {String} pngValidationId the string representation of the png validation id\n *\n */\n var Constructor = function pngValidationIdDirectiveConstructor(FormValidationService, FormValidationGeneratorService) {\n return {\n priority: 500,\n require: 'ngModel',\n link: function pngValidationIdDirectiveLink(scope, elm, attrs, ngModel) {\n function parseResponse(validationId) {\n var validationRule = FormValidationService.getRule(validationId);\n \n if (validationRule) {\n _.reduce(validationRule.rules, function (validators, rule, index) {\n validators[attrs.pngValidationId + '.' + index] = FormValidationGeneratorService.createValidator(rule, elm, scope);\n return validators;\n }, ngModel.$validators);\n }\n }\n \n // TODO: attrs.$observe on pngValidationId?\n if (attrs.pngValidationId) {\n parseResponse(attrs.pngValidationId);\n }\n }\n };\n };\n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n","\n /**\n * @author: cbauer\n * Date: 2016-02-02\n */\n \n define(ns+'/validation/PngValidationIfDirective',[], function () {\n 'use strict';\n \n var ngDependencies = [\n 'FormValidationService'\n ];\n \n var registeredName = 'pngValidationIf';\n \n var PngSecurityIfDirective = function PngSecurityIfDirective (FormValidationService) {\n return {\n priority: 599, // we need to be before ng-if!\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, element, attrs, ngModel) {\n var validators = {};\n \n function checkValidationIf (newVal) {\n if (!newVal || newVal === 'false') {\n Object.keys(ngModel.$validators).forEach(function (key) {\n validators[key] = ngModel.$validators[key];\n ngModel.$setValidity(key, true);\n delete ngModel.$validators[key];\n });\n }\n else {\n Object.keys(validators).forEach(function (key) {\n ngModel.$validators[key] = validators[key];\n delete validators[key];\n });\n ngModel.$validate();\n }\n }\n \n // need to handle the case where the png-validation-id validators get added\n // after the validation-if is set to false\n if (attrs.pngValidationId) {\n checkValidationIf(scope.$eval(attrs[registeredName]));\n }\n \n scope.$watch(function () {\n try {\n return scope.$eval(attrs[registeredName]);\n }\n catch (ex) {\n // TODO: is this the expected behavior?\n // If parsing pngValidationIf failed, make sure that validation is turned on\n return true;\n }\n }, checkValidationIf);\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n PngSecurityIfDirective.$inject = ngDependencies;\n PngSecurityIfDirective.registeredName = registeredName;\n return PngSecurityIfDirective;\n });\n \n","\n \n (function () {\n 'use strict';\n \n define(ns+'/validation/PngMaskDirective',['angular', 'lodash'], function (angular, _) {\n var ngDependencies = ['$parse', 'DeviceProfile'], applyFormatters;\n \n applyFormatters = function applyFormatters(formatters, displayValue, modelValue, masked) {\n var result = displayValue;\n \n _.forEachRight(formatters, function (formatter) {\n try {\n result = formatter(result, modelValue, masked);\n } catch (e) {\n // angular's type=\"number\" processing adds a formatter that will throw an exception\n // if it sees something that is not a number (like a mask character)\n if (!e.message || e.message.indexOf('[ngModel:numfmt]') !== 0) {\n throw e;\n }\n }\n });\n \n return result;\n };\n \n /**\n * @class paychex.framework.angular.forms.validation.pngMask\n * @ngdoc directive\n * @description pngMask directive is used with input form elements, handling the rendering of the masked characters\n * and the removal of the masked characters when a user has focus on the input element. This directive requires\n * an ngModel attribute on the same element\n *\n * @param {Number} pngMask The number of characters to mask\n */\n var Constructor = function pngMaskDirectiveConstructor($parse, DeviceProfile) {\n return {\n priority: 600,\n require: ['ngModel'],\n link: function pngMaskDirectiveLink(scope, element, attrs, controllers) {\n var mask = String.fromCharCode(0x2022),\n elm = angular.element(element.find('input')) || elm,\n ctrl = controllers[0],\n displayValue = mask,\n elementLookup = element.find('input'),\n renderReference = ctrl.$render;\n \n if (elementLookup.length === 1) {\n elm = angular.element(elementLookup);\n }\n else {\n elm = element;\n }\n \n ctrl.$render = function pngMaskRender() {\n var displayValue = ctrl.$$rawModelValue, start, end, cursorAtEnd,\n fullMask = $parse(attrs.fullMask)(scope),\n isDisabled = $parse(attrs.ngDisabled)(scope);\n if(DeviceProfile.getBrowserProfile().name.toLowerCase() !== 'firefox') {\n try {\n start = element.context.selectionStart;\n end = element.context.selectionEnd;\n } catch (e) {\n /* e.code:11 - Failed to read the 'selectionStart' property from 'HTMLInputElement': The input element's type ('number') does not support selection.\n * Catch errors in selectionStart, selectionEnd and setSelectionRange in latest Chrome…for input types which doesn't support them.\n * */\n \n if(e.code !== 11){\n throw e;\n }\n }\n if(start){\n cursorAtEnd = (start >= String(displayValue).length);\n }\n }\n \n \n if (document.activeElement !== elm[0] && attrs.pngMask > 0) {\n var shownCharacters;\n if (displayValue !== undefined && displayValue !== null) {\n displayValue = displayValue.toString();\n shownCharacters = displayValue.length - +attrs.pngMask;\n } else {\n shownCharacters = 0;\n }\n \n if (!fullMask && isDisabled) {\n /*\n * When partially masked and disabled, the remote only sends the end of the string.\n * So, for example. SSN partially masks the first 5 chars, when also disabled, the remote only sends 4 chars of the SSN.\n * This only applies when the field is not editable, when editable we don't deal with this scenario.\n */\n if (displayValue) {\n displayValue = new Array(+attrs.pngMask + 1).join(mask) + displayValue;\n }\n }\n else if (shownCharacters > 0 && !fullMask) {\n displayValue = new Array(+attrs.pngMask + 1).join(mask) + displayValue.substring(displayValue.length - (displayValue.length - +attrs.pngMask));\n } else {\n displayValue = new Array(+attrs.pngMask + 1).join(mask);\n }\n \n if (ctrl.$formatters) {\n displayValue = applyFormatters(ctrl.$formatters, displayValue);\n }\n \n elm.val(displayValue);\n \n } else {\n if (ctrl.$formatters) {\n displayValue = applyFormatters(ctrl.$formatters, displayValue);\n }\n elm.val(displayValue);\n }\n \n // Only modify the cursor if the element is focused because for IE setSelectionRange, selectionStart will not work if the current element doesn't have an\n // input value so we are running the below piece of code only when the current focused element is an input element.\n // Also we are byPassing this for Firefox to avoid cursor & MaxLength issue. In Firefox setSelectionRange causes the cursor to jump to the beginning of the line\n //and it doesn't recognize maxLength attribute.\n if (document.activeElement === elm[0] && DeviceProfile.getBrowserProfile().name.toLowerCase() !== 'firefox') {\n // Set the cursor back to original location due to the value being completely replaced.\n if (!cursorAtEnd) {\n try {\n element.context.setSelectionRange(start, end);\n } catch (e) {\n if (e.code !== 11) {\n throw e;\n }\n }\n } else {\n //Included for strange behavior in IE where cursor jumps to the front of the text...\n try {\n var fieldLength = String(displayValue).length;\n element.context.setSelectionRange(fieldLength, fieldLength);\n } catch (e) {\n if (e.code !== 11) {\n throw e;\n }\n }\n }\n }\n \n };\n \n var onBlur = function maskOnBlue() {\n var displayValue = ctrl.$$rawModelValue,\n fullMask = $parse(attrs.fullMask)(scope);\n \n if (document.activeElement !== elm[0] && attrs.pngMask > 0) {\n var shownCharacters;\n if (displayValue !== undefined && displayValue !== null) {\n displayValue = displayValue.toString();\n shownCharacters = displayValue.length - +attrs.pngMask;\n } else {\n shownCharacters = 0;\n }\n \n if (shownCharacters > 0 && !fullMask) {\n displayValue = new Array(+attrs.pngMask + 1).join(mask) + displayValue.substring(displayValue.length - (displayValue.length - +attrs.pngMask));\n } else {\n displayValue = new Array(+attrs.pngMask + 1).join(mask);\n }\n \n if (ctrl.$formatters) {\n displayValue = applyFormatters(ctrl.$formatters, displayValue);\n }\n \n elm.val(displayValue);\n \n } else {\n if (ctrl.$formatters) {\n displayValue = applyFormatters(ctrl.$formatters, displayValue);\n }\n elm.val(displayValue);\n }\n };\n \n \n ctrl.$viewChangeListeners.push(ctrl.$render);\n //When the user focuses, un-star the form\n elm.on('focus', ctrl.$render);\n elm.on('blur', onBlur);\n \n scope.$on('$destroy', function destroyFunction() {\n elm.off('focus', ctrl.$render);\n elm.off('blur', onBlur);\n });\n \n displayValue = applyFormatters(ctrl.$formatters, displayValue);\n elm.val(displayValue);\n \n attrs.$observe('pngMask', ctrl.$render);\n }\n \n \n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n (function () {\n 'use strict';\n define(ns+'/validation/PngMaskFilter',['lodash'], function (_) {\n /**\n * @class paychex.framework.angular.forms.validation.pngMaskFilter\n * @description pngMaskFilter Is a filter used to convert a given piece of text (usually in a span or label) into\n * a masked version of it.\n *\n * @param {String} input The string to mask\n * @param {Number} maskAmount The number of characters to mask\n * @param {Function[]} formatters An array of functions that take in the displayValue, the original value, and whether the input is masked,\n * and returns the formatted value\n * @param {Boolean} fullMask Flag to do a partial or full mask\n * @param {Boolean} isNil Flag if the value is empty or not\n */\n return function filterWrapper() {\n return function pngMaskFilter(input, maskAmount, formatters, fullMask, isNil, isDisabled, numberOfDisplayCharacters) {\n var mask = String.fromCharCode(0x2022),\n displayValue = input + '';\n \n // Nothing to mask.\n if (input === null || input === undefined) {\n // Nothing to mask.\n if (isNil) {\n return input;\n }\n \n displayValue = '';\n }\n \n if (maskAmount === undefined || maskAmount === 0) {\n if (formatters) {\n _.forEachRight(formatters, function (formatter) {\n displayValue = formatter(displayValue, input);\n });\n }\n \n return displayValue;\n }\n var shownCharacters = displayValue.length - maskAmount;\n \n // Partial Masking\n if (!fullMask) {\n if (numberOfDisplayCharacters > 0) {\n /*\n * When partially masked and enabled, the remote sends the whole string\n * For example, in the Direct Deposit View, when the user has permissions to edit the view\n * the remote sends the whole account number even when the permissions to view the account number is partial mask\n * This applies number of partial masked characters + number of display characters to be displayed (in this case 3 for bank account)\n * numberOfDisplayCharacters and numberOfPartialMaskedCharacters must be passed\n * */\n displayValue = new Array(maskAmount + 1).join(mask) + displayValue.substring(displayValue.length - numberOfDisplayCharacters);\n \n }\n else if (isDisabled) {\n /*\n * When partially masked and disabled, the remote only sends the end of the string.\n * So, for example. SSN partially masks the first 5 chars, when also disabled, the remote only sends 4 chars of the SSN.\n * This only applies when the field is not editable, when editable we don't deal with this scenario.\n */\n if (displayValue) {\n displayValue = new Array(maskAmount + 1).join(mask) + displayValue;\n }\n }\n else if (shownCharacters > 0) {\n displayValue = new Array(maskAmount + 1).join(mask) + displayValue.substring(displayValue.length - (displayValue.length - maskAmount));\n }\n else if (displayValue.length > 0) {\n /*\n * Only show partial mask when there are some display characters,\n * otherwise show emDash (by returning empty string)\n */\n displayValue = new Array(maskAmount + 1).join(mask);\n }\n }\n // Full Masking\n else {\n displayValue = new Array(maskAmount + 1).join(mask);\n }\n \n if (formatters) {\n _.forEachRight(formatters, function (formatter) {\n displayValue = formatter(displayValue, input, maskAmount > 0);\n });\n }\n \n return displayValue;\n };\n };\n });\n \n }());\n \n","\n \n define(ns+'/validation/PngRemoveClassDirective',[], function () {\n 'use strict';\n var registeredName = 'pngRemoveClass';\n var ngDependencies = [];\n var PngRemoveClassDirective = function PngRemoveClassDirective () {\n \n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n var passedObject = scope.$eval(attrs.pngRemoveClass);\n if(passedObject.condition){\n element.removeClass(passedObject.nameOfClass);\n }\n }\n };\n };\n PngRemoveClassDirective.$inject = ngDependencies;\n PngRemoveClassDirective.registeredName = registeredName;\n return PngRemoveClassDirective;\n });\n","\n (function() {\r\n 'use strict';\r\n \r\n define(ns+'/validation/PngValidationWatchDirective',[],\r\n function() {\r\n var PngValidationWatchDirective, ngDependencies;\r\n \r\n ngDependencies = [];\r\n \r\n PngValidationWatchDirective = function PngValidationWatchDirective() {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function pngValidationWatchDirectiveLink(scope, element, attrs, ngModelController) {\r\n \r\n // do not add another watch if one isn't required\r\n if (attrs.pngValidationWatch !== undefined && attrs.pngValidationWatch !== '') {\r\n scope.$watch(attrs.pngValidationWatch,\r\n function watchChangeValidator() {\r\n ngModelController.$validate();\r\n });\r\n }\r\n }\r\n };\r\n };\r\n \r\n PngValidationWatchDirective.registeredName = 'pngValidationWatch';\r\n PngValidationWatchDirective.$inject = ngDependencies;\r\n \r\n return PngValidationWatchDirective;\r\n });\r\n })();\r\n \n","\n \n define(ns+'/validation/PaychexMessageFactory',[\n \t'paychex.core/Promise'\n ], function (\n \tPromise\n ) {\n \t'use strict';\n \n \tvar ngDependencies = ['TranslationService', 'FormValidationService'];\n \n \t/**\n \t * Service that manages all registered forms in the application.\n \t * @class paychex.framework.angular.forms.validation.PaychexMessageFactory\n \t */\n \tvar PaychexMessageFactory = function (TranslationService, FormValidationService) {\n \n \t\tvar DEFAULT_SEVERITY = 'WARNING';\n \n \t\t// actually create the fake message object\n \t\tfunction createMessageObject (id, message, status, actionable) {\n \t\t\treturn {\n \t\t\t\tmessageId: id,\n \t\t\t\tmessageText: message,\n \t\t\t\tmessageStatus: status,\n \t\t\t\tshortMessage: message,\n \t\t\t\tisActionable: actionable\n \t\t\t};\n \t\t}\n \n \t\tfunction translateAndCreateMessageObject(id, message, status, actionable) {\n \t\t\treturn TranslationService.translate([message])\n \t\t\t\t.spread(function (translatedMessage) {\n \t\t\t\t\treturn createMessageObject(id, translatedMessage, status, actionable);\n \t\t\t\t});\n \t\t}\n \n \t\t// if there are individual parameters that end up as args to the main message string\n \t\t// we must translate them first\n \t\tfunction translateParams (messageParams, value) {\n \t\t\tif (messageParams && messageParams.length > 0) {\n \t\t\t\treturn TranslationService.translate(messageParams.map(function (param) {\n \t\t\t\t\tif (param.type === 'label') {\n \t\t\t\t\t\treturn param.value;\n \t\t\t\t\t}\n \t\t\t\t\telse if (param.type === 'ref') {\n \t\t\t\t\t\treturn value;\n \t\t\t\t\t}\n \t\t\t\t}));\n \t\t\t}\n \t\t\treturn Promise.resolve([]);\n \t\t}\n \n \t\t// generate a \"PaychexMessage\" using the rule and the translation keys\n \t\tfunction generateMessage (rule) {\n \t\t\treturn translateParams(rule.messageParameters, rule.value)\n \t\t\t\t.then(function finalTranslation (translations) {\n \t\t\t\t\treturn TranslationService.translate(rule.messageId, translations);\n \t\t\t\t})\n \t\t\t\t.then(function createMessage (translatedMessage) {\n \t\t\t\t\treturn createMessageObject(\n \t\t\t\t\t\trule.messageId,\n \t\t\t\t\t\ttranslatedMessage,\n \t\t\t\t\t\trule.severity ? rule.severity : DEFAULT_SEVERITY,\n \t\t\t\t\t\t!!rule.isActionable\n \t\t\t\t\t);\n \t\t\t\t});\n \t\t}\n \n \t\treturn {\n \t\t\t/**\n \t\t\t * @function createMessageFromValidationId\n \t\t\t * @memberOf paychex.framework.angular.forms.validation.PaychexMessageFactory\n \t\t\t * @param {string} validationId validationId GUID\n \t\t\t * @param {number|string} index index of the particular rule associated with the Guid\n \t\t\t * @return {Promise} a Promise that resolves with the PaychexMessage as the value\n \t\t\t * @description\n \t\t\t * takes in a validationId and index and creates a \"PaychexMessage\" corresponding to the error\n \t\t\t */\n \t\t\tcreateMessageFromValidationId: function createMessageFromValidationId (validationId, index) {\n \t\t\t\tvar ruleSet = FormValidationService.getRule(validationId);\n \t\t\t\tif (!ruleSet || !ruleSet.rules) {\n \t\t\t\t\t// not a paychex message\n \t\t\t\t\treturn translateAndCreateMessageObject(\n \t\t\t\t\t\tvalidationId,\n \t\t\t\t\t\tvalidationId,\n \t\t\t\t\t\tDEFAULT_SEVERITY,\n \t\t\t\t\t\tfalse\n \t\t\t\t\t);\n \t\t\t\t}\n \t\t\t\tvar rule = ruleSet.rules[index];\n \t\t\t\tif (!rule.messageId) {\n \t\t\t\t\t// if there is no messageId, return validation key as message\n \t\t\t\t\treturn translateAndCreateMessageObject(\n \t\t\t\t\t\tvalidationId,\n \t\t\t\t\t\tvalidationId,\n \t\t\t\t\t\trule.severity ? rule.severity.toUpperCase() : DEFAULT_SEVERITY,\n \t\t\t\t\t\tfalse\n \t\t\t\t\t);\n \t\t\t\t}\n \t\t\t\t// if there is a messageId, create the message object\n \t\t\t\treturn generateMessage(rule);\n \t\t\t}\n \t\t};\n \t};\n \n \tPaychexMessageFactory.$inject = ngDependencies;\n \tPaychexMessageFactory.registeredName = 'PaychexMessageFactory';\n \n \treturn PaychexMessageFactory;\n });\n","\n (function() {\n 'use strict';\n \n define(ns+'/filters/PngToKeysFilter',[], function () {\n \n /**\n * @class paychex.framework.angular.forms.validation.pngToKeysFilter\n * @description pngToKeysFilter Used to change an object value to an array.\n * @param {Object} input The object to change\n */\n var Constructor = function filterWrapper() {\n return function (input) {\n return Object.keys(input || {});\n };\n };\n Constructor.registeredName = 'pngToKeysFilter';\n // Public constructor.\n return Constructor;\n });\n })();\n","\n (function () {\n 'use strict';\n define(ns+'/filters/PngNoValueFilter',[], function () {\n /**\n * @class paychex.framework.angular.forms.validation.pngNoValueFilter\n * @description pngNoValueFilter Used to change a null value to the null display character.\n * @param {String} input The string to check\n */\n return function filterWrapper() {\n return function pngNoValueFilter(input) {\n return (input === null || input === undefined || input === '') ?\n String.fromCharCode(0x2014) :\n input;\n };\n };\n });\n }());\n","\n define(ns+'/advsec/FormSecurity',[\n 'lodash',\n 'paychex.core/Errors',\n 'paychex.core/Promise'\n ], function (_,\n Errors,\n Promise) {\n 'use strict';\n \n /**\n * Handles all the retrieval and parsing of the security bit strings for a form element.\n * @class paychex.framework.angular.forms.advsec.FormSecurity\n */\n var Constructor = function FormSecurityConstructor(aOffsets, aInvertMask, aComponentsLookupMap, aBitmapContextType, aAccessGroupsInfo) {\n //var Constructor = function FormSecurityConstructor(offsets, invertMask, componentsLookupMap, bitmapContextType, accessGroupsInfo) {\n var employeeSecurityModeEnabled = false,\n self = this,\n offsets = aOffsets,\n invertMask = aInvertMask,\n componentsLookupMap = aComponentsLookupMap, \n bitmapContextType = aBitmapContextType, \n accessGroupsInfo = aAccessGroupsInfo,\n ssoCaid = bitmapContextType.caid, // each FormSecurity instance supports data for a single client\n bitstring = bitmapContextType.bitmapData,\n version = bitmapContextType.version;\n \n \n //Unique id that is incremented for each subscriber\n var subscriberId = 0,\n //A map of subscriber id's to callbacks\n subscribers = {};\n \n /**\n * Returns true if this FormSecurity instance has been populated with entitlements data or\n * false if it is still in the default state.\n */\n function isInitialized() {\n return !!bitstring;\n }\n \n /**\n * Takes a guid and returns the permissions it denotes\n * @param guid {String} The form component ID\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {Object} An object representing the permissions decoded from the bitstring\n */\n function parseComponentBitstring(guid) {\n return bitstringToObject(retrieveComponentBitstring(guid));\n }\n \n /**\n * Converts a bitstring into a javascript permission object\n * @param bitstring {String}\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {Object} An object representing the permissions decoded from the bitstring\n */\n function bitstringToObject(bitstring) {\n var returnObj = {},\n tempBitString = invertMasking(bitstring);\n \n _.forEach(offsets, function offsetToProperty(val, key) {\n //Some keys have spaces in them, so we remove it.\n key = key.replace(' ', '');\n returnObj[key] = (+tempBitString.slice(val, 1 + val) === 1);\n });\n \n return returnObj;\n }\n \n \n /**\n * Inverts all the masking bits on a given component's bitstring\n * @param bitstring {String} The bitstring to invert\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {String} The bitstring with any masking bits inverted\n */\n function invertMasking(bitstring) {\n var tempBitString = bitstring.split('');\n for (var i = 0; i < tempBitString.length; ++i) {\n /*jshint -W016 */\n tempBitString[i] = tempBitString[i] ^ invertMask[i];\n /*jshint +W016 */\n }\n return tempBitString.join('');\n }\n \n /**\n * Takes a guid and returns the raw bitstring for the component\n * @param guid {String}\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {String} The n-digit bitstring\n */\n function retrieveComponentBitstring(guid) {\n \n //We need a hardcoded GUID that gives the default permissions\n if (guid === 'FX8675309X1337X12345') {\n //Yes, this is all ones, the masking bits will be inverted before returning\n return '111111';\n }\n \n \n if (componentsLookupMap[guid] === undefined) {\n return '';\n }\n \n var offset = componentsLookupMap[guid].offset;\n return invertMasking(bitstring.slice(offset, offset + Object.keys(offsets).length));\n }\n \n /*\n * Constant that is both no specification but also means that security is currently disabled\n */\n this.SECURITY_DISABLED = {};\n \n // since different apps have different components, we need to merge their bitmap strings and adjust the component lookup when they are loaded separately\n // THIS CODE NEEDS TO BE REMOVED WHEN V0 CLIENTS NO LONGER NEED TO BE SUPPORTED\n this.mergeV0Data = function mergeV0Data(newOffsets, newInvertMask, newComponentsLookupMap, newBitmapContextType, newAccessGroupsInfo) {\n var offsetAdjustment, adjustedLookup;\n \n if (newBitmapContextType.caid !== ssoCaid) {\n Errors.throw('Cannot merge data for two different clients:', ssoCaid, newBitmapContextType.caid);\n } else if (newBitmapContextType.version !== 'V0' || (version !== 'V0' && isInitialized())) {\n Errors.throw('Merging is only intended for v0 data');\n }\n \n // since FormSecurity instances get created before setComponentPermission is called, we don't know if they are v0 or v1\n // and the initial instances defaults to v1\n // in the case of a default it is acceptable to merge v0, but we need to convert this instance so we don't update the\n // shared lookups used for v1.\n if (isInitialized()) {\n // TODO: this could be more efficient - we will copy all the PNG-SSO component permissions\n // that are in both the old and the new. We probably have all the information needed to only copy\n // the components that are new and compute the offsets\n offsetAdjustment = bitstring.length;\n adjustedLookup = _.mapValues(newComponentsLookupMap, function(v) { return {offset: v.offset + offsetAdjustment}; });\n \n bitstring = bitstring + newBitmapContextType.bitmapData;\n _.assign(componentsLookupMap, adjustedLookup);\n } else {\n offsets = newOffsets;\n invertMask = newInvertMask;\n componentsLookupMap = newComponentsLookupMap;\n bitmapContextType = newBitmapContextType;\n accessGroupsInfo = newAccessGroupsInfo;\n bitstring = bitmapContextType.bitmapData;\n version = bitmapContextType.version;\n }\n };\n \n /**\n * Clears the internal cache for all security objects\n * @function clearComponentPermissions\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n */\n this.clearComponentPermissions = function clearComponentPermissions() {\n offsets = {};\n componentsLookupMap = {};\n accessGroupsInfo = {};\n bitstring = '';\n };\n \n this.getCompPerms = function getCompPerms(guid, leastRestrictiveBool) {\n if (!employeeSecurityModeEnabled) {\n var compareFn = mostRestrictive;\n if (leastRestrictiveBool) {\n compareFn = leastRestrictive;\n }\n \n if (_.isArray(guid)) {\n return combine(guid, compareFn);\n } else if (_.isString(guid)) {\n return parseComponentBitstring(guid);\n } else {\n var versionResults = [],\n finalBitstring = [];\n _.forOwn(guid, function reduceIndividualVersionPermissions(bit) {\n versionResults.push(combine(bit, compareFn, true));\n });\n \n _.forEach(versionResults, function findMostPermissiveVersion(currentBitstring) {\n for (var i = 0; i < currentBitstring.length; ++i) {\n if (finalBitstring[i] === undefined) {\n finalBitstring[i] = currentBitstring[i];\n } else {\n /*jshint -W016 */\n finalBitstring[i] = finalBitstring[i] | currentBitstring[i];\n /*jshint +W016 */\n }\n }\n });\n return bitstringToObject(finalBitstring.join(''));\n }\n }\n // when in employee security mode, return an empty object so that the pngSecurityIdDirective will not\n // attempt to set security levels based on Advanced Security GUIDs\n // \n // Basically, this shuts off the pngSecurityIdDirective. Employee Security is managed by the\n // pngEmployeeSecurityDirective located in app_party/html/src/shared/employeeSecurity\n //\n // This change was made as part of HMAP-838\n else {\n return this.SECURITY_DISABLED;\n }\n };\n \n /**\n * Returns a promise that is fulfilled with an object representing the permissions for the given argument.\n * @function getComponentPermissions\n * @param guid {String|Object|Array} The form component ID, can either be a string, an array of strings, or an object\n * where each key of the object has a value that is an array of guid strings (ex: {v0 : ['guid1, 'guid2'], v1 : ['guid3']})\n * @param [leastRestrictiveBool] {Boolean} If true, when comparing multiple guids, the function will return the least\n * restrictive permissions from all the guids provided, defaults to false\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {Object} An object representing the permissions decoded from the bitstring\n */\n this.getComponentPermissions = function getComponentPermissions(guid, leastRestrictiveBool) {\n var perms = this.getCompPerms(guid, leastRestrictiveBool); \n return Promise.resolve(perms);\n };\n \n /**\n * Turns on Employee Security Mode.\n * @function enableEmployeeSecurityMode\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {boolean} An boolean indicating the current state of employeeSecurityModeEnabled\n */\n this.enableEmployeeSecurityMode = function enableEmployeeSecurityMode () {\n employeeSecurityModeEnabled = true;\n return employeeSecurityModeEnabled;\n };\n \n /**\n * Turns off Employee Security Mode.\n * @function enableEmployeeSecurityMode\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {boolean} An boolean indicating the current state of employeeSecurityModeEnabled\n */\n this.disableEmployeeSecurityMode = function disableEmployeeSecurityMode () {\n employeeSecurityModeEnabled = false;\n return employeeSecurityModeEnabled;\n };\n \n /**\n * Returns the access Groups Info object, which contains if groups are applied to the user.\n * @function getAccessGroupInfo\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {Object} An object with informationa about the Access Group applied to the user for the current client.\n */\n this.getAccessGroupInfo = function getAccessGroupInfo () {\n return accessGroupsInfo;\n };\n \n /**\n * Returns a permission object for the given guidArray\n * @param guidArray {Array} An array of guids to determine the permissions\n * @param operator {Function} The operator to perform on a given character of the bitstring (Function that takes two characters as arguments and returns the result of the operation)\n * @param [rawString] {Boolean} When true, returns the raw bitstring rather than a permission object\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {Object} An object representing the permissions decoded from the bitstring or the raw bitstring\n */\n function combine(guidArray, operator, rawString) {\n var finalBits = [];\n \n _.forEach(guidArray, function reduceBitstringsToSingleString(guid) {\n var currentBits = retrieveComponentBitstring(guid).split('');\n \n // when processing a v1 user with a v0 guid (or vice versa),\n // there will be no entry in the data, so the componentBitString will come back '' and the split() will turn it into []\n // If finalBits hasn't been populated (since the guids aren't recognized), just overwrite\n // Otherwise (else branch) finalBits[2] for [] would be undefined, and the most restrictive would convert it to false.\n // This shows up as the DEFAULT_PERMISSIONS_GUID having to be first in the list,\n // Note this hasn't been an issue when using LEAST restrictive, which is what we do when there are real guids for both v1 and v0.\n // Long Story short (too late), this should work with unknown guids and DEFAULT_PERMISSIONS_GUID in any order now.\n if (finalBits.length === 0) {\n finalBits = currentBits;\n } else {\n for (var i = 0; i < currentBits.length; ++i) {\n finalBits[i] = operator(currentBits[i], finalBits[i]);\n }\n }\n });\n \n if (rawString) {\n return finalBits.join('');\n }\n \n return bitstringToObject(finalBits.join(''));\n }\n \n /**\n * Operator used for combine function, returns the least permissive\n * @param a {String}\n * @param b {String}\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {number}\n */\n function mostRestrictive(a, b) {\n /*jshint -W016 */\n return a & b;\n /*jshint +W016 */\n }\n \n /**\n * Operator used for combine function, returns the most permissive\n * @param a {String}\n * @param b {String}\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {number}\n */\n function leastRestrictive(a, b) {\n /*jshint -W016 */\n return a | b;\n /*jshint +W016 */\n }\n \n /**\n * Registers a callback which will fire whenever the component permissions are updated\n * @function registerListener\n * @param {Function} callback The callback to fire whenever the component permissions are changed\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n * @returns {Function} The unsubscribe function\n */\n this.registerListener = function registerListener(callback) {\n var id = subscriberId++;\n subscribers[id] = callback;\n return function unsub() {\n removeListener(id);\n };\n };\n \n /**\n * Removes a specified listener from the callback list\n * @param {Number} subscriberId The unique subscriber id to unsub\n * @private\n * @memberOf paychex.framework.angular.forms.advsec.FormSecurity\n */\n function removeListener(subscriberId) {\n delete subscribers[subscriberId];\n }\n \n };\n \n // Publish the constructor\n return Constructor;\n \n \n });\n \n","\n (function() {\n 'use strict';\n define(ns+'/advsec/ClientEntitlementsService',[ 'lodash',\n 'paychex.core/Errors',\n 'paychex.core/Promise',\n ns+'/advsec/FormSecurity'], function( _, Errors, Promise, FormSecurity) {\n var ngDependencies = [];\n \n function ClientEntitlementsService() {\n var formSecurityLookup = {},\n v1ComponentsLookupMap = {}, // since all v1 components are the same we can cache and share them between instances\n v1Offsets = {},\n v1InvertMask = {},\n entitlementDefer = Promise.defer();\n \n function populateLookups(userApplicationEntitlements, invertMask, componentsLookupMap, offsets, accessGroupLookup) {\n \n _.forEach(userApplicationEntitlements.permissionTranslations, function populatePermissionTranslations(val) {\n if (val.id.toLowerCase().indexOf('mask') > -1 || val.id.toLowerCase().indexOf('partial') > -1) {\n invertMask[+val.offset] = 1;\n } else {\n invertMask[+val.offset] = 0;\n }\n \n offsets[val.id.charAt(0).toLowerCase() + val.id.slice(1)] = +val.offset;\n });\n \n _.forEach(userApplicationEntitlements.componentTranslations, function populateComponentTranslations(val) {\n componentsLookupMap[val.guid] = {offset: (+val.offset)};\n });\n \n _.forEach(userApplicationEntitlements.hasAccessGroups, function populateComponentTranslations(val) {\n accessGroupLookup[val.caid] = {\n hasAccessGroups: val.hasAccessGroups,\n hasVendorsInGroup: val.hasVendorsInGroup,\n hasWorkersInGroup: val.hasWorkersInGroup\n };\n });\n }\n \n this.getFormSecurity = function getFormSecurity(ssoCaid) {\n if (!formSecurityLookup[ssoCaid]) {\n // Dashboard loads the people tile before the entitlements have been set by launch party\n // I would like to eventually require that setComponentPermissions be called before allowing FormSecurity instances to be returned\n // but for now I think we need this \"default\" behavior\n // Note: This is being added back in due to V0 clients remaining in production - will have to have a larger discussion about a more permanent \"better\" fix.\n formSecurityLookup[ssoCaid] = new FormSecurity(v1Offsets, v1InvertMask, v1ComponentsLookupMap, {version: 'V1', caid: ssoCaid, bitmapData: ''});\n }\n \n return formSecurityLookup[ssoCaid];\n };\n \n this.setComponentPermissions = function setComponentPermissions( userApplicationEntitlements ) {\n // Note: this implementation depends on the fact that all data in the entitlements is for the same version\n var isV0Client = userApplicationEntitlements.bitmapContextTypes[0].version === 'V0';\n \n // we cannot share an instance between v0 and v1 - \n // multi-version checks depend on the fact that the other version (e.g. v0 for v1 client)\n // do not have components loaded in the lookup\n // This will share an instance between v1 clients, but create separate instances for v0 clients\n var invertMask = isV0Client ? {} : v1InvertMask,\n componentsLookupMap = isV0Client ? {} : v1ComponentsLookupMap,\n offsets = isV0Client ? {} : v1Offsets,\n accessGroupLookup = {};\n \n // this could be further optimized to skip the v1 lookups if they've already been loaded\n populateLookups(userApplicationEntitlements, invertMask, componentsLookupMap, offsets, accessGroupLookup);\n \n \n // Populate v1 offset and componentLookUp since it is being shared across all clients\n _.forEach(userApplicationEntitlements.bitmapContextTypes, function populateBitmapContextTypes(val) {\n if (isV0Client && formSecurityLookup[val.caid]) {\n formSecurityLookup[val.caid].mergeV0Data(offsets, invertMask, componentsLookupMap, val, accessGroupLookup[val.caid]);\n } else {\n formSecurityLookup[val.caid] = new FormSecurity(offsets, invertMask, componentsLookupMap, val, accessGroupLookup[val.caid]);\n }\n });\n \n entitlementDefer.resolve();\n };\n \n \n /**\n * Returns a Promise that will resolve when the entitlements have been set (after setComponentPermissions\n * has been called). Useful if you have logic early in global application lifecycle (in a config() or run()\n * of a module that gets pre-loaded for example) and you want to wait for landing to pre-load the entitlements\n * before querying for component permissions.\n *\n * @return {Promise} A promise that will be resolved when the entitlements have been loaded into the\n * ClientEntitlementsService.\n * @example\n *\n * ClientEntitlementsService.waitForEntitlements()\n * .then(function entitlementsLoaded(){\n * var addressPermissions = ClientEntitlementsService.getFormSecurity('00DK9EXIHXNI4RNBDENW').getCompPerms('00K2YZNBHR0OVC17LJSY');\n * self.showAddress = addressPermissions.visible;\n * });\n */\n this.waitForEntitlements = function waitForEntitlements(){\n return entitlementDefer.promise;\n };\n }\n \n ClientEntitlementsService.registeredName = 'ClientEntitlementsService';\n ClientEntitlementsService.$inject = ngDependencies;\n return ClientEntitlementsService;\n \n });\n })();\n \n","\n (function() {\n 'use strict';\n define(ns+'/advsec/InternalClientEntitlementsService',[\n 'paychex.core/Errors',\n 'paychex.core/Promise',\n ns+'/advsec/ClientEntitlementsService'\n ], function(\n Errors,\n Promise,\n ClientEntitlementsService) {\n var ngDependencies = [];\n \n /**\n * !!DEPRECATED!! - This service is no longer being used but is being left here so that we can refer to the old\n * implementation if necessary.\n *\n * @deprecated\n * @constructor\n */\n function InternalClientEntitlementsService() {\n var internalClientCaid,\n internalVersion,\n ces = new ClientEntitlementsService(),\n entitlementDefer = Promise.defer();\n \n this.getFormSecurity = function getFormSecurity(/*ssoCaid*/) {\n if(!internalClientCaid) {\n Errors.throw('Cannot provide security for internal SSO CAID as it was never set');\n }\n return ces.getFormSecurity(internalClientCaid);\n };\n \n this.setComponentPermissions = function setComponentPermissions( userApplicationEntitlements ) {\n if ( !userApplicationEntitlements || \n !userApplicationEntitlements.bitmapContextTypes ||\n userApplicationEntitlements.bitmapContextTypes <= 0) {\n Errors.throw('InternalClientEntitlementsService.setComponentPermissions requires non-empty bitmaps');\n }\n \n // internal users can change security version without restarting the application\n // Since we cannot merge data between versions we need to reset the instance when this happens\n // to prevent both merge errors and invalid data\n //\n // Also note that like the ClientEntitlementsService, this implementation assumes that all bitmapContextTypes\n // in the array have the same version!\n if (userApplicationEntitlements.bitmapContextTypes[0].version !== internalVersion) {\n ces = new ClientEntitlementsService();\n }\n \n internalClientCaid = userApplicationEntitlements.bitmapContextTypes[0].caid;\n internalVersion = userApplicationEntitlements.bitmapContextTypes[0].version;\n \n // Resolve the promise to indicate that entitlements are ready\n entitlementDefer.resolve();\n \n return ces.setComponentPermissions(userApplicationEntitlements);\n };\n \n /**\n * Returns a Promise that will resolve when the entitlements have been set (after setComponentPermissions\n * has been called). Useful if you have logic early in global application lifecycle (in a config() or run()\n * of a module that gets pre-loaded for example) and you want to wait for landing to pre-load the entitlements\n * before querying for component permissions.\n *\n * @return {Promise} A promise that will be resolved when the entitlements have been loaded into the\n * InternalClientEntitlementsService.\n * @example\n *\n * // Note that this example uses 'ClientEntitlementsService' as the name of the injectable since the DI\n * // container determines which of the entitlements service to inject at runtime (internal or external)\n * ClientEntitlementsService.waitForEntitlements()\n * .then(function entitlementsLoaded(){\n * var addressPermissions = ClientEntitlementsService.getFormSecurity('00DK9EXIHXNI4RNBDENW').getCompPerms('00K2YZNBHR0OVC17LJSY');\n * self.showAddress = addressPermissions.visible;\n * });\n */\n this.waitForEntitlements = function waitForEntitlements(){\n return entitlementDefer.promise;\n };\n \n }\n \n // Register service as ClientEntitlementsService, for seamless transition between internal and external\n InternalClientEntitlementsService.registeredName = 'ClientEntitlementsService';\n InternalClientEntitlementsService.$inject = ngDependencies;\n return InternalClientEntitlementsService;\n \n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/advsec/module',[\n 'angular',\n ns+'/advsec/ClientEntitlementsService',\n ns+'/advsec/InternalClientEntitlementsService'\n ], function (\n angular,\n ClientEntitlementsService\n ) {\n /**\n * Internal Security expects you to use the \"Internal User's Client\" ssoCaid. However as Internal users, we have\n * no concept of selected client's belonging to us, unlike external. To fix this, when Internal we are going to\n * delegate to the InternalClientEntitlementsService which will ignore any passed in ssoCaid's and replace it\n * with the \"Internal User's Client\" ssoCaid. If External, continue business as normal.\n *\n * Default to True for unit test compatibility.\n */\n return angular.module(ns+'.advsec', [\n 'ng'\n ])\n .service(ClientEntitlementsService.registeredName, ClientEntitlementsService)\n ;\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/validation/module',[\n 'angular',\n ns+'/validation/Constants',\n ns+'/validation/FormValidationGeneratorService',\n ns+'/validation/FormValidationService',\n ns+'/validation/FormSecurityService',\n ns+'/validation/PngSecurityIdDirective',\n ns+'/validation/PngSecurityScopeDirective',\n ns+'/validation/PngValidationIdDirective',\n ns+'/validation/PngValidationIfDirective',\n ns+'/validation/PngMaskDirective',\n ns+'/validation/PngMaskFilter',\n ns+'/validation/PngRemoveClassDirective',\n ns+'/validation/PngValidationWatchDirective',\n ns+'/validation/PaychexMessageFactory',\n ns+'/filters/PngToKeysFilter',\n ns+'/filters/PngNoValueFilter',\n ns+'/advsec/module'\n ], function (angular,\n Constants,\n FormValidationGeneratorService,\n FormValidationService,\n FormSecurityService,\n PngSecurityIdDirective,\n PngSecurityScopeDirective,\n PngValidationIdDirective,\n PngValidationIfDirective,\n PngMaskDirective,\n PngMaskFilter,\n PngRemoveClassDirective,\n PngValidationWatchDirective,\n PaychexMessageFactory,\n PngToKeysFilter,\n PngNoValueFilter,\n advsecModule) {\n return angular.module(ns+'.validation', ['ng', advsecModule.name])\n .service(Constants.FormValidationGeneratorService, FormValidationGeneratorService)\n .service(Constants.FormSecurityService, FormSecurityService)\n .service(Constants.FormValidationService, FormValidationService)\n .service(PaychexMessageFactory.registeredName, PaychexMessageFactory)\n .directive(Constants.SecurityIdDirective, PngSecurityIdDirective)\n .directive(Constants.ValidationIdDirective, PngValidationIdDirective)\n .directive(PngValidationIfDirective.registeredName, PngValidationIfDirective)\n .directive(PngValidationWatchDirective.registeredName, PngValidationWatchDirective)\n .directive(Constants.MaskDirective, PngMaskDirective)\n .filter(Constants.MaskFilter, PngMaskFilter)\n .directive(PngRemoveClassDirective.registeredName, PngRemoveClassDirective)\n .filter(PngToKeysFilter.registeredName, PngToKeysFilter)\n .filter(Constants.NoValueFilter, PngNoValueFilter)\n .directive(PngSecurityScopeDirective.registeredName, PngSecurityScopeDirective);\n }\n );\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/errorModelMixin/Constants',[], function () {\n return {\n ErrorModelMixinDirectiveName: 'pngErrorModelMixin'\n };\n });\n }());\n","\n (function () {\n 'use strict';\n \n define(ns+'/errorModelMixin/ErrorModelMixinDirective',['angular', ns+'/errorModelMixin/Constants'], function (angular, Constants) {\n var ngDependencies = [];\n \n /**\n * @class paychex.framework.angular.forms.errorModelMixin.errorModelMixin\n */\n var Constructor = function () {\n return {\n require: 'ngModel',\n link: function pngValidationMessagesDirectiveLink(scope, elm, attrs, controller) {\n scope[attrs[Constants.ErrorModelMixinDirectiveName]].errors = controller.$error;\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n \n","\n (function () {\n 'use strict';\n \n define(ns+'/errorModelMixin/module',[\n 'angular',\n ns+'/errorModelMixin/Constants',\n ns+'/errorModelMixin/ErrorModelMixinDirective'\n ], function (angular,\n Constants,\n ErrorModelMixinDirective) {\n \n return angular.module(ns+'.errorModelMixin', ['ng'])\n .directive(Constants.ErrorModelMixinDirectiveName, ErrorModelMixinDirective);\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/parsers/ParsersDirective',['lodash'], function (_) {\n var ngDependencies = ['$parse'];\n var registeredName = 'pngParsers';\n \n /**\n * @class paychex.framework.angular.forms.parser.ParsersDirective\n * @param {Function[]} The list of functions that will format a string value input from form.\n * @returns {String} A transformed string based on the formatting rules defined by the parser functions.\n * @description Function must have a value parameter and return the formatted value.\n * ex. capitalize every letter input\n * <png-text-input ng-model=\"parserModel\" name=\"parserTest\" png-parsers=\"parserList\">\n *\n * var parserList = [function parserFunction(value){\n * return value.toUpperCase();\n * }];\n */\n function ParsersDirective($parse) {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1, // required to work with md-datepicker/input[date] directive\n link: function (scope, element, attrs, ngModel) {\n var parsers = scope.parsers; // Mixin value.\n \n // This will catch if it was thru the standalone.\n if(!parsers){\n parsers = $parse(attrs[registeredName])(scope);\n }\n \n // Check if it is either an array or object.\n if(_.isArray(parsers) || _.isObject(parsers)){\n // Push function at the end of the $parsers list.\n _.forEach(parsers, function pushParser(parser){\n if(!!parser && _.isFunction(parser)) {\n ngModel.$parsers.push(parser);\n }\n });\n }\n }\n };\n }\n \n ParsersDirective.registeredName = registeredName;\n ParsersDirective.$inject = ngDependencies;\n \n return ParsersDirective;\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/parsers/ValidatorsDirective',['lodash'], function (_) {\n var ngDependencies = ['$parse'];\n var registeredName = 'pngValidators';\n \n /**\n * @class paychex.framework.angular.forms.parsers.ValidatorsDirective\n * @param {Object} The object of validators (see ngModelController $validators - these will be merged into the ngModelController.$validators object\n * @description Attaches validators to the ngModel on the same dom element\n * ex. capitalize every letter input\n * <input ng-model=\"validatorModel\" name=\"validatorTest\" png-validators=\"validatorList\">\n *\n * var validators = {someKey: validatorFunction(value){\n * return !value && value.length > 5; // some boolean expression\n * };\n */\n function ValidatorsDirective($parse) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, element, attrs, ngModel) {\n var validators = scope.validators; // Mixin value.\n \n // This will catch if it was thru the standalone.\n if(!validators){\n validators = $parse(attrs[registeredName])(scope);\n }\n \n _.merge(ngModel.$validators, validators);\n }\n };\n }\n \n ValidatorsDirective.registeredName = registeredName;\n ValidatorsDirective.$inject = ngDependencies;\n \n return ValidatorsDirective;\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/parsers/module',[\n 'angular',\n ns+'/parsers/ParsersDirective',\n ns+'/parsers/ValidatorsDirective'\n ], function (\n angular,\n ParsersDirective,\n ValidatorsDirective\n ) {\n /**\n * @namespace paychex.framework.angular.forms.parsers\n * @description\n * This class contains the Parsers directive\n */\n return angular.module(ns+'.parsers', ['ng'])\n .directive(ParsersDirective.registeredName, ParsersDirective)\n .directive(ValidatorsDirective.registeredName, ValidatorsDirective);\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/formatters/FormattersDirective',['lodash'], function (_) {\n var ngDependencies = ['$parse'];\n var registeredName = 'pngFormatters';\n \n /**\n * @class paychex.framework.angular.forms.formatters.FormattersDirective\n * @param {Function[]} The list of functions that will format a string value input from form.\n * @returns {String} A transformed string based on the formatting rules defined by the formatters functions.\n * @description Function must have a value parameter and return the formatted value.\n * ex. capitalize every letter input\n * <png-text-input ng-model=\"formatterModel\" name=\"formatterTest\" png-formatters=\"formatterList\">\n *\n * var formaterList = [function formatterFunction(value){\n * return value.toUpperCase();\n * }];\n */\n function FormattersDirective($parse) {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 2, // based on ng-model and md-datepicker priority\n link: function (scope, element, attrs, ngModel) {\n var formatters = scope.formatters; // Mixin value.\n \n // This will catch if it was thru the standalone.\n if(!formatters){\n \tformatters = $parse(attrs[registeredName])(scope);\n }\n \n // Check if it is either an array or object.\n if(_.isArray(formatters) || _.isObject(formatters)){\n // Push function at the end of the $formatters list.\n _.forEach(formatters, function fromModelToView(formatter){\n if(!!formatter && _.isFunction(formatter)) {\n ngModel.$formatters.push(formatter);\n }\n });\n }\n }\n };\n }\n \n FormattersDirective.registeredName = registeredName;\n FormattersDirective.$inject = ngDependencies;\n \n return FormattersDirective;\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/formatters/module',[\n 'angular',\n ns+'/formatters/FormattersDirective'\n ], function (\n angular,\n FormattersDirective\n ) {\n /**\n * @namespace paychex.framework.angular.forms.formatters\n * @description\n * This class contains the Formatters directive\n */\n return angular.module(ns+'.formatters', ['ng'])\n .directive(FormattersDirective.registeredName, FormattersDirective);\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/form/Constants',[], function () {\n return {\n FormControllerName: 'PngFormController',\n FormDirectiveName: 'pngForm',\n FormTabChangeCheckerName: 'pngFormTabChange',\n FormManager: 'FormManager',\n PRE_SUBMIT_ACTION: 'pre-submit',\n SUBMIT_ACTION: 'submit',\n EDIT_ACTION: 'edit',\n CANCEL_ACTION: 'cancel',\n RESET_ACTION: 'reset',\n SET_ORIGINAL_ACTION: 'setOriginal'\n };\n });\n \n }());\n \n","\n define(ns+'/form/FormRegisterRequest',[], function () {\n 'use strict';\n \n /**\n * Used to document the minimum required params for registering a form.\n * @class paychex.framework.angular.forms.form.FormRegisterRequest\n * @param {String} [formId] Unique ID of the form.\n * @param {Function} [dirtyPrompt] The callback to be used when the form is dirty. This is to override the\n * default function that is defined in common. The dirtyPrompt must return a promise that is either\n * resolved or rejected when the handler is finished.\n * @param {Function} [isDirty] Returns boolean [true] if this form is dirty, or [false] if pristine.\n * @param {Function} [cancel] Cancel form callback. Used to reset the form to original values.\n * @param {Function} [reset] Used to reset the form to original values.\n * @param {Function} [setOriginal] set the original values that will be cancelled to\n * @param {Function} [getErrors] returns an object consisting of the validation errors for this form.\n * @param {Function} [isValid] returns boolean [true] if this form is valid, or [false] if invalid.\n * @param {Function} [submit] returns a boolean and helps in triggering the submit-function attribute functionality outside png-forms.\n * @param {Function} [edit] Changes the form into edit mode.\n * @param {Function} [getFormComponentController] Get ng-model controller for form component by name.\n * @param {Function} [getFormStateObservable] function to get an Rx.Observable for the form's state.\n * @param {Function} [setPristine] set the form to a pristine\n * @param {Function} [setDirty] set the form to a dirty state\n * @param {Function} [setValidation] update the valid state of the form\n * @param {function} [getFormController] get the FormController instance\n */\n var Constructor = function FormRegisterRequestConstructor(\n formId, dirtyPrompt, isDirty, cancel, reset, setOriginal, getErrors, isValid, submit, edit,\n getFormComponentController, getFormStateObservable, setPristine, setDirty, setValidation,\n getFormController\n ) {\n this.formId = formId;\n this.dirtyPrompt = dirtyPrompt;\n this.isDirty = isDirty;\n this.cancel = cancel;\n this.reset = reset;\n this.setOriginal = setOriginal;\n this.getErrors = getErrors;\n this.isValid = isValid;\n this.triggerSubmit = submit;\n this.edit = edit;\n this.getFormComponentController = getFormComponentController;\n this.getFormStateObservable = getFormStateObservable;\n this.setPristine = setPristine;\n this.setDirty = setDirty;\n this.setValidation = setValidation;\n this.getFormController = getFormController;\n };\n \n // Publish the constructor\n return Constructor;\n });\n \n","\n define(ns+'/form/FormController',[\n 'angular',\n 'lodash',\n 'lib.rxjs',\n 'paychex.core/Promise',\n 'paychex.core/Errors',\n 'paychex.framework.angular.ui2/pngError/ErrorHandler',\n ns+'/form/FormRegisterRequest',\n ns+'/form/Constants',\n 'paychex.core/Logger'\n ], function (\n angular,\n _,\n Rx,\n Promise,\n Errors,\n ErrorHandler,\n FormRegisterRequest,\n FormConstants,\n Logger\n ) {\n 'use strict';\n \n var NAME_SPACE = ns+'.FormController',\n log = Logger.get(NAME_SPACE),\n ngDependencies = [\n '$scope',\n '$timeout',\n '$animate',\n 'FormManager',\n '$element',\n 'FormSecurityService',\n 'DeviceProfile'\n ];\n \n /**\n * @class paychex.framework.angular.forms.form.pngForm#FormController\n */\n var Constructor = function pngFormControllerConstructor($scope, $timeout, $animate, FormManager, $element, FormSecurityService, DeviceProfile) {\n var self = this,\n /**\n * @description\n * Emits a payload which consists of the following:\n * {\n * source: ''\n * id: ''\n * data: {}\n * }\n * @function emitFormStateObservableForAll\n * @param {string} eventId Identifies the event Id or name to be emitted\n * @param {object} data Identifies the data for the payload to be emitted\n * @private\n */\n emitFormStateObservableForAll = function emitFormStateObservableForAll(eventId, data) {\n FormManager.emitFormStateObservableForAll(NAME_SPACE, eventId, _.merge({\n formId: self.formId\n }, data));\n };\n \n \n \n self.isErrored = false;\n \n \n self.subject = new Rx.Subject();\n \n self.isIE = DeviceProfile.getBrowserProfile().name.toLowerCase() === 'ie';\n \n // WORKAROUND for save button disablement issue with png-button!\n // See pngButton.js and form-submit-button's ng-disabled expression\n // Because $ctrl.formCtrl.saveInProgress is undefined, the ng-disabled expression evaluates to undefined.\n // pngButton.js does not handle undefined ng-disabled values correctly!\n self.saveInProgress = false;\n \n var submitSuccess = function submitSuccess() {\n var payloadData = {\n action: FormConstants.SUBMIT_ACTION,\n readOnly: true\n };\n \n self.form.$setSubmitted();\n self.saveInProgress = false;\n \n $animate.enabled(false);\n \n /**\n * Scope done(submit) button clicked event\n *\n * @memberOf $scope\n * @event $scope:submit\n */\n $scope.$broadcast(FormConstants.SUBMIT_ACTION);\n \n // Set this to pristine after submit broadcast,\n // as submit dirties form again.\n self.form.$setPristine();\n self.form.$setUntouched();\n \n $timeout(function () {\n $animate.enabled(true);\n });\n \n self.editMode = !!self.stayInEditMode;\n if (self.stayInEditMode) {\n self.edit();\n }\n \n self.subject.onNext(payloadData);\n emitFormStateObservableForAll('FormControllerSubmitSuccess', payloadData);\n };\n \n /**\n * Calls the provided submit function with a reference to the current form if the form is valid.\n * @memberof paychex.framework.angular.forms.form.pngForm#FormController\n * @param forceSubmit is a boolean, checks for readonly state of the form\n */\n self.submit = function submit(forceSubmit) {\n if (self.form.$invalid || (!forceSubmit && !self.editable) ) {\n return;\n }\n \n self.isErrored = false;\n $scope.$broadcast(FormConstants.PRE_SUBMIT_ACTION);\n var submitPromise = self.submitFunction(self.form, self.formId);\n self.saveInProgress = true;\n if(Promise.isPromise(submitPromise)) {\n submitPromise\n .then(submitSuccess)\n .catch(Errors.Types.UserCancellation, function userCancellationErrorHandler(/*error*/) {\n self.saveInProgress = false;\n return undefined;\n })\n // There are validation errors, stay in edit mode so user can resolve them and submit again\n // Don't propagate error\n .catch(Errors.Types.Validation, function validationErrorHandler(error) {\n // This appears to set the form $submitted equal to true, as well\n // as add the class ng-submitted\n self.form.$setSubmitted(true);\n self.saveInProgress = false;\n })\n .catch(function reusableErrorCatch(error) {\n self.isErrored = true;\n if(self.errorId) {\n ErrorHandler.createErrorHandler(self.errorId)(error);\n }else{\n return error;\n }\n })\n .done();\n } else {\n Errors.throw('Expected return value of FormController.submitFunction to be a promise', {formId: self.formId, securityId: self.securityId});\n }\n \n };\n \n var editSuccess = function editSuccess(){\n var payloadData = {\n action: FormConstants.EDIT_ACTION,\n readOnly: false\n };\n /**\n * Scope edit button clicked event\n *\n * @memberOf $scope\n * @event $scope:edit\n */\n $scope.$broadcast(FormConstants.EDIT_ACTION);\n \n self.editMode = true;\n \n // Fix for IE11 CUE caused by trying to blur the body element\n if (self.isIE) {\n if (document.activeElement && document.activeElement.node !== 'BODY') {\n // prevents mobile keyboards from automatically opening/fields getting auto focus\n document.activeElement.blur();\n }\n } else {\n document.activeElement.blur();\n }\n \n self.subject.onNext(payloadData);\n emitFormStateObservableForAll('FormControllerEditSuccess', payloadData);\n };\n \n self.edit = function setEditMode() {\n if (!self.editable) {\n return;\n }\n $animate.enabled(false);\n \n if (_.isFunction(self.editFunction)) {\n // Edit function is defined, invoke callback.\n var promise = self.editFunction(self.form, self.formId);\n if (Promise.isPromise(promise)) {\n // Result of edit function is a promise\n promise\n .then(editSuccess)\n .catch (function editError(error) {\n log.error(error);\n })\n .done();\n } else {\n Errors.throw('Expected return value of FormController.editFunction to be a promise', {formId: self.formId, securityId: self.securityId});\n }\n } else {\n editSuccess();\n }\n \n $timeout(function () {\n $animate.enabled(true);\n });\n };\n \n var cancelSuccess = function cancelSuccess() {\n var payloadData = {\n action: FormConstants.CANCEL_ACTION,\n readOnly: true\n };\n /**\n * Scope cancel button clicked event\n *\n * @memberOf $scope\n * @event $scope:cancel\n */\n $scope.$broadcast(FormConstants.CANCEL_ACTION);\n \n // Set this to pristine after cancel broadcast,\n // as cancel sets the inputs back to original value\n // and dirties form again.\n self.form.$setPristine();\n self.form.$setUntouched();\n self.editMode = !!self.stayInEditMode;\n if (self.stayInEditMode) {\n self.edit();\n }\n \n self.subject.onNext(payloadData);\n emitFormStateObservableForAll('FormControllerCancelSuccess', payloadData);\n };\n \n self.cancel = function cancelEdit() {\n if (!self.editable) {\n return;\n }\n $animate.enabled(false);\n \n if (_.isFunction(self.cancelFunction)) {\n // Cancel function is defined, invoke callback.\n var promise = self.cancelFunction(self.form, self.formId);\n if (Promise.isPromise(promise)) {\n // Result of cancel function is a promise\n promise\n .then(cancelSuccess)\n .catch(Errors.Types.UserCancellation, function userCancellation() {\n // swallow\n })\n .catch (function cancelError(error) {\n log.error(error);\n })\n .done();\n } else {\n Errors.throw('Expected return value of FormController.cancelFunction to be a promise', {formId: self.formId, securityId: self.securityId});\n }\n } else {\n cancelSuccess();\n }\n \n $timeout(function () {\n $animate.enabled(true);\n });\n };\n \n var resetSuccess = function resetSuccess() {\n var payloadData = {\n action: FormConstants.RESET_ACTION,\n readOnly: false\n };\n /**\n *\n * @memberOf $scope\n * @event $scope:reset\n */\n $scope.$broadcast(FormConstants.RESET_ACTION);\n \n // Set this to pristine after reset broadcast,\n // as reset sets the inputs back to original value\n self.form.$setPristine();\n self.editMode = true;\n \n self.subject.onNext(payloadData);\n emitFormStateObservableForAll('FormControllerResetSuccess', payloadData);\n };\n \n self.reset = function resetEdit() {\n if (!self.editable) {\n return;\n }\n $animate.enabled(false);\n \n resetSuccess();\n \n $timeout(function () {\n $animate.enabled(true);\n });\n };\n \n var setOriginalSuccess = function setOriginalSuccess() {\n var payloadData = {\n action: FormConstants.SET_ORIGINAL_ACTION,\n readOnly: false\n };\n /**\n * @memberOf $scope\n * @event $scope:setOriginal\n */\n $scope.$broadcast(FormConstants.SET_ORIGINAL_ACTION);\n \n self.editMode = true;\n self.subject.onNext(payloadData);\n emitFormStateObservableForAll('FormControllerSetOriginalSuccess', payloadData);\n };\n \n self.setOriginal = function setOriginalMode() {\n if (!self.editable) {\n return;\n }\n $animate.enabled(false);\n \n setOriginalSuccess();\n \n $timeout(function () {\n $animate.enabled(true);\n });\n };\n \n self.setValidation = function setValidation() {\n _.chain(self.form.$error)\n .flatMap(function doFlatten(error) {\n return error;\n })\n .forEach(function doLoop(value) {\n if (_.has(value, '$touched')){\n value.$setTouched();\n }\n })\n .value();\n };\n \n self.editMode = false;\n \n $scope.$on('readOnly', function setFormReadOnlyAttr(event, data) {\n if (data.id === self.securityId) {\n self.readOnly = data.val;\n }\n });\n \n $scope.$on('requestEdit', function requestEditForm(event, data) {\n if (self.editMode === false) {\n self.edit();\n }\n });\n \n $element.on('$destroy', function onDestroyFormController() {\n self.subject.onCompleted();\n FormManager.unregister(self.formId);\n });\n \n // form validation errors\n var formValidationErrors = {};\n \n /**\n * @method setFieldErrors\n * @memberOf paychex.framework.angular.forms.form.pngForm#FormController\n * @instance\n * @param {String} id the formElementId of the form field\n * @param {Array} errors the new value of the errors array after the model has changed\n * @param {*} val the new value of the form field\n * @return {Object|null} the formValidationErrors object associated with the field\n * @description\n * This function provides a way for the FormErrorDisplayController to update the list of errors\n * on a given field. If errors is an array of length > 1 (implying that there are validation errors),\n * will return the formValidationErrors object corresponding to this field. If errors is an empty array,\n * will return null\n */\n self.setFieldErrors = function setFieldErrors(id, errors, val) {\n if (errors.length > 0) {\n formValidationErrors[id] = {\n elementId: id,\n element: angular.element('[form-element-id=' + id + ']'),\n errors: errors,\n currentValue: val\n };\n return formValidationErrors[id];\n }\n else {\n delete formValidationErrors[id];\n return null;\n }\n };\n \n self.getFormStateObservable = function getFormStateObservable() {\n return self.subject.asObservable();\n };\n \n self.$onInit = function $onInit() {\n \n /**\n * @memberof paychex.framework.angular.forms.form.FormController\n * @property {String} securityId The security ID for advanced security.\n */\n self.securityId = self.securityId || false;\n \n /**\n * @property {Boolean} securityLeastRestrictive security is least (true) or most (false) restrictive. The\n * default is true\n */\n self.securityLeastRestrictive = self.securityLeastRestrictive === undefined ? false : self.securityLeastRestrictive;\n \n self.editableOverride = self.editable !== undefined;\n \n if (self.securityId) {\n FormSecurityService.getComponentPermissions(\n self.securityId,\n self.securityLeastRestrictive\n ).then(function getComponentResponse(permissions) {\n if (permissions.enabled !== undefined && !self.editableOverride) {\n self.editable = permissions.enabled;\n }\n });\n }\n \n if (self.editable === undefined) {\n self.editable = true;\n }\n \n self.editButtonDisabled = self.editButtonDisabled === undefined ? false : self.editButtonDisabled;\n \n \n FormManager.register(\n new FormRegisterRequest(\n self.formId,\n self.dirtyPrompt,\n function isDirty() {\n return self.form.$dirty && !self.isErrored;\n },\n function cancel() {\n if (self.editMode) {\n self.cancel();\n }\n },\n function reset() {\n if (self.editMode) {\n self.reset();\n }\n },\n function setOriginal() {\n if (self.editMode) {\n self.setOriginal();\n }\n },\n function getErrors() {\n return formValidationErrors;\n },\n function isValid() {\n return self.form.$valid;\n },\n function triggerSubmit() {\n return self.submit(true);\n },\n function edit() {\n if (!self.editMode) {\n self.edit();\n }\n },\n function getFormComponentController(componentName) {\n return self.form[componentName];\n },\n function getFormStateObservable() {\n return self.getFormStateObservable();\n },\n function setPristine() {\n return self.form.$setPristine();\n },\n function setDirty() {\n return self.form.$setDirty();\n },\n function setValidation() {\n self.setValidation();\n },\n function getFormController() {\n return self;\n }\n ));\n \n if (this.forceEditMode) {\n self.edit();\n }\n };\n \n };\n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n","\n define(ns+'/form/form.tpl.html',[],function(){\r\n 'use strict';\r\n return '
';\r\n });\n","\n (function () {\n 'use strict';\n \n define(ns+'/form/FormDirective',[\n 'lodash',\n 'angular',\n ns+'/form/Constants',\n ns+'/form/form.tpl.html'\n ], function (\n _,\n angular,\n Constants,\n formTemplate\n ) {\n \n \n var ngDependencies = [];\n \n /**\n * @class paychex.framework.angular.forms.form.pngForm\n * @ngdoc directive\n * @description pngForm directive is meant to wrap all the form controls one uses.\n *\n * @param {Function} submitFunction The callback for when a user submits the form.\n * The submitFunction is passed a reference to the form object.\n * The submitFunction must return a promise that is either resolved or rejected when the remote submit\n * call is finished.\n * @param {String} [headerTextEdit] The text that will appear in the header when form is in edit mode.\n * @param {String} [headerTextView] The text that will appear in the header when form is in read only mode.\n * @param {String} [payxautoid] The id that is used for test automation as well as uniquely identify form.\n * @param {Function} [dirtyPrompt] The callback to be used when the form is dirty. This is to override the\n * default function that is defined in common. The dirtyPrompt must return a promise that is either\n * resolved or rejected when the handler is finished.\n * @param {String} [formId] Unique identifier for the form. All forms that need to be managed by the FormManager\n * must contain a formId.\n * @param {Function} [cancelFunction] The callback to be used when the form is cancelled. This function must\n * return a promise, in case it fails and wants to stop a cancel from continuing.\n * @param {Boolean} [editButtonDisabled] The edit button will disabled when the editButtonDisabled sets to true.\n * @param {Function} [editFunction] The callback to be used when the form is in edit mode. This function must\n * return a promise, in case it fails and wants to stop an edit from continuing.\n */\n var Constructor = function pngFormDirectiveConstructor() {\n return {\n controller: Constants.FormControllerName,\n controllerAs: 'formCtrl',\n scope: {},\n bindToController: {\n submitFunction: '=?',\n editable: '=?',\n headerTextEdit: '@?',\n headerTextView: '@?',\n payxautoid: '@?',\n dirtyPrompt: '=?',\n formId: '@?',\n securityId: '=?',\n securityLeastRestrictive: '=?',\n cancelFunction: '=?',\n editButtonDisabled: '=?',\n editFunction: '=?'\n },\n link: function (scope, element) {\n \n // BUGFIX for focus on read-only elements in IE:\n // check if the currently focused element is a descendent of the form element\n // and blur if necessary\n // NOTE: Must use [0] to get an HTMLElement object, not a jqLite object\n if (scope.formCtrl.editMode === false && element[0].contains(document.activeElement)) {\n document.activeElement.blur();\n }\n \n },\n template: formTemplate,\n replace: true,\n transclude: true\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n (function() {\r\n 'use strict';\r\n \r\n define(ns+'/form/FormTabChangeChecker',[], function() {\r\n var ngDependencies = ['$parse'];\r\n \r\n var FormTabChangeChecker = function FormsTabChangeChecker($parse) {\r\n return {\r\n restrict: 'A',\r\n require: ['?^pngMdTabs','pngForm'],\r\n link: function formsTabChangeCheckerLink(scope, element, attrs, controllers) {\r\n var pngMdTabsController = controllers[0],\r\n pngFormController = controllers[1],\r\n changeVetoedCallback = attrs.pngFormTabChange ? $parse(attrs.pngFormTabChange)(scope) : function noop() {};\r\n \r\n // if the mdtabs controller is not found we will continue and nothing will be changed (e.g. for \r\n // EEJ the directive that contains the form may be used outside the tabs as part of\r\n // portability or a journey)\r\n if (pngMdTabsController) {\r\n pngMdTabsController.mdPreDeselect = function formsTabChangeCheckerTabsPreDeselect() {\r\n if (!pngFormController.form.$dirty) {\r\n return true;\r\n }\r\n else {\r\n changeVetoedCallback();\r\n return false;\r\n }\r\n };\r\n }\r\n \r\n }\r\n };\r\n };\r\n \r\n FormTabChangeChecker.$inject = ngDependencies;\r\n \r\n return FormTabChangeChecker;\r\n });\r\n })();\r\n \n","\n \n define(ns+'/form/FormManager',[\n 'jquery',\n 'lodash',\n 'paychex.core/Promise',\n 'paychex.core/Logger',\n 'lib.rxjs'\n ], function (\n $,\n _,\n Promise,\n Logger,\n Rx) {\n 'use strict';\n \n var ngDependencies = [],\n log = Logger.get(ns+'.FormManager'),\n $$subject = new Rx.Subject(),\n $$observable = $$subject.asObservable(),\n // since some consumers are not appropriately checking source/event ids, we need a separate observable for this\n $$registrationSubject = new Rx.Subject(),\n $$registrationObservable = $$registrationSubject.asObservable(),\n internal = {\n \n /**\n * The internal forms list.\n * @memberof paychex.framework.angular.forms.form.FormManager.internal\n */\n forms: {},\n \n /**\n * Determine if the form is dirty or not.\n * @memberof paychex.framework.angular.forms.form.FormManager.internal\n * @method findDirty\n * @param {String/Array} [ids] The unique id of the form, or list of ids.\n * @return {FormRegisterRequest} The dirty request, or the first dirty\n * request in a list.\n */\n findDirty: function findDirty(ids) {\n var dirtyForm,\n form;\n \n if (_.isString(ids)) {\n form = internal.forms[ids];\n \n if (form && form.isDirty()) {\n dirtyForm = form;\n }\n }\n else if (_.isArray(ids)) {\n _.forEach(ids, function eachForm(id) {\n form = internal.forms[id];\n \n // Return the first dirty form.\n if (form && form.isDirty()) {\n dirtyForm = form;\n return false;\n }\n });\n }\n \n return dirtyForm;\n },\n \n /**\n * Application default function that is invoked when the form is dirty.\n * @memberof paychex.framework.angular.forms.form.FormManager.internal\n * @method defaultDirtyPrompt\n * @return {Promise} Dirty handler promise if the form is dirty, otherwise a resolved promise. The default\n * dirty handler of the application, a modal popup, will be displayed and promise returned. Promise is resolved\n * when the prompt is accepted.\n */\n defaultDirtyPrompt: function () {\n return Promise.resolve();\n }\n \n };\n \n /**\n * Service that manages all registered forms in the application.\n * @class paychex.framework.angular.forms.form.FormManager\n */\n var Constructor = function FormManager() {\n var self = this;\n \n log.debug('FormManager constructor called');\n \n /**\n * Register the form with the manager. Only register the form if it has a formId.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method register\n * @param {FormRegisterRequest} [request]\n */\n this.register = function register(request) {\n if (request.formId) {\n internal.forms[request.formId] = request;\n $$registrationSubject.onNext(request);\n log.debug('Successfully registered form ' + request.formId);\n } else {\n log.debug('Form is missing formId and will be unmanaged');\n }\n };\n \n /**\n * Unregister the form with the manager.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method unregister\n * @param {String} [id] The unique id of the form.\n */\n this.unregister = function unregister(id) {\n delete internal.forms[id];\n log.debug('Successfully unregistered form ' + id);\n };\n \n /**\n * Determine if the form is dirty or not.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method isDirty\n * @param {String} [id] The unique id of the form.\n * @return {Boolean} True if the form is dirty, false if the form is pristine.\n */\n this.isDirty = function isDirty(id) {\n var isFormDirty = !!internal.findDirty(id);\n \n if (isFormDirty) {\n log.debug('Form ' + id + ' is dirty');\n } else {\n log.debug('Form ' + id + ' is NOT dirty');\n }\n \n return isFormDirty;\n };\n \n \n /**\n * Handle the form if it is dirty.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method dirtyPrompt\n * @param {String} [id] The unique id of the form.\n * @return {Promise} Dirty handler promise if the form is dirty, otherwise a resolved promise. The default\n * dirty handler of the application, a modal popup, will be displayed and promise returned. Promise is resolved\n * when the prompt is accepted.\n */\n this.dirtyPrompt = function dirtyPrompt(id) {\n var promise = Promise.resolve(),\n dirtyForm = internal.findDirty(id);\n \n // If there is an override dirty prompt from the form, use that, otherwise use the default prompt.\n if (dirtyForm) {\n log.debug('Found dirty form ' + id);\n \n if (dirtyForm.dirtyPrompt) {\n log.debug('Calling custom form dirty prompt');\n } else {\n log.debug('Calling default form dirty prompt');\n }\n \n // Invoke the dirty prompt.\n promise = dirtyForm.dirtyPrompt ? dirtyForm.dirtyPrompt() : internal.defaultDirtyPrompt();\n } else {\n log.debug('Did not find dirty form ' + id);\n }\n \n // If the user is leaving the form, cancel the form to reset to original values.\n return promise.then(function userLeaving(result) {\n // Call the dirty form cancel, hopefully reverting to original values.\n if (dirtyForm && dirtyForm.cancel) {\n dirtyForm.cancel();\n }\n \n return result;\n });\n };\n \n /**\n * Set the application default prompt.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method setDefaultDirtyPrompt\n * @param {Function} [dirtyPrompt] The default dirty prompt function. Must return a promise.\n */\n this.setDefaultDirtyPrompt = function setDefaultDirtyPrompt(dirtyPrompt) {\n internal.defaultDirtyPrompt = dirtyPrompt;\n log.debug('Successfully set default dirty prompt');\n };\n \n /**\n * Get the application default prompt.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method getDefaultDirtyPrompt\n * @returns {Function} The default dirty prompt function.\n */\n this.getDefaultDirtyPrompt = function getDefaultDirtyPrompt() {\n log.debug('getDefaultDirtyPrompt');\n return internal.defaultDirtyPrompt;\n };\n \n /**\n * If any managed form is dirty, return promise from form for dirty prompt. This is going to return the first\n * dirty prompt handler of the first form it finds that is dirty. If this is managed correctly, there should\n * only be one dirty form at a time in the application, or every form uses the same dirty prompt handler.\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @method dirtyPrompt\n * @return {Promise} Dirty handler promise if the form is dirty, otherwise a resolved promise. The default\n * dirty handler of the application, a modal popup, will be displayed and promise returned. Promise is resolved\n * when the prompt is accepted.\n */\n this.dirtyPromptAll = function dirtyPromptAll() {\n log.debug('Calling dirty prompt all');\n return self.dirtyPrompt(_.keys(internal.forms));\n };\n \n /**\n * @method isValid\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @param {String} [formId] A string corresponding to the formId of which the validity should be checked.\n * If not passed, isValid() will return a map of all formIds to their own state\n * @return {Boolean|Object} either a boolean corresponding to whether the specified form is valid, or\n * an object where the keys are the formIds and the values are booleans of each form's validity state\n * @description\n * This function provides a way to query the validity state of one or all png-form instances\n */\n this.isValid = function isValid (formId) {\n function isFormValid(formId) {\n var form = internal.forms[formId];\n return _.result(form, 'isValid');\n }\n if (!!formId) {\n return isFormValid(formId);\n } else {\n return _.reduce(internal.forms, function (acc, form, id) {\n acc[id] = isFormValid(id);\n return acc;\n }, {});\n }\n };\n \n /**\n * @method getValidationErrors\n * @memberof paychex.framework.angular.forms.form.FormManager\n * @param {String} [formId] A string corresponding to the formId from which validation errors should be extracted\n * If not passed, getValidationErrors() will return a map of all formIds to their own validation errors\n * @return {Object} if formId is passed, returns an object where the key is the elementId and th\n * value is an object of the form\n * `{ elementId: string, element: HTMLElement, errors: Array, currentVal: * }` where elementId is the\n * formElementId, the element is the DOM element, errors is an array of error objects, and currentVal is\n * the current value of the field,\n * If formId is undefined, returns an object where the keys are the formIds and the values are\n * objects of the type listed above\n * @description\n * This function provides a way to query the validation errors of one or all png-form instances. By maintaining\n * a reference to the DOM node that caused the error, future triple-M integration should be possible down to the\n * individual field level\n */\n this.getValidationErrors = function getValidationErrors (formId) {\n function formValidationErrors(formId) {\n var form = internal.forms[formId];\n return _.result(form, 'getErrors');\n }\n if (!!formId) {\n return formValidationErrors(formId);\n }\n else {\n return _.reduce(internal.forms, function (acc, form, id) {\n acc[id] = formValidationErrors(id);\n return acc;\n }, {});\n }\n };\n \n this.editForm = function editForm(formId) {\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].edit();\n }\n };\n \n this.validateForm = function validateForm(formId) {\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].setValidation();\n }\n };\n \n this.setPristine = function setPristine(formId) {\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].setPristine();\n }\n };\n \n this.setDirty = function setDirty(formId) {\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].setDirty();\n }\n };\n \n this.cancelForm = function cancelForm (formId) {\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].cancel();\n }\n };\n \n this.resetForm = function resetForm (formId) {\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].reset();\n }\n };\n \n this.setOriginalForm = function setOriginalForm( formId){\n if (!!formId && internal.forms[formId]) {\n internal.forms[formId].setOriginal();\n }\n };\n \n this.submitForm = function submitForm( formId ) {\n if (!!formId && internal.forms[formId]) {\n return internal.forms[formId].triggerSubmit();\n }\n };\n \n this.getFormComponentController = function getFormComponentController(formId, componentName) {\n if (!!formId && !!componentName && internal.forms[formId]) {\n return internal.forms[formId].getFormComponentController(componentName);\n }\n };\n \n this.getFormStateObservable = function getFormStateObservable(formId) {\n if (!!formId && internal.forms[formId] && _.isFunction(internal.forms[formId].getFormStateObservable)) {\n return internal.forms[formId].getFormStateObservable();\n }\n };\n \n /**\n * @description\n * Returns an observable\n * @function getFormStateObservableForAll\n * @returns {object} returns an observable\n */\n this.getFormStateObservableForAll = function getFormStateObservableForAll() {\n return $$observable;\n };\n \n /**\n * @description\n * Emits a payload which consists of the following:\n * {\n * source: ''\n * id: ''\n * data: {}\n * }\n * @function emitFormStateObservableForAll\n * @param {string} source Identifies the source (who invoked it) of the emit\n * @param {string} eventId Identifies the event Id or name\n * @param {string} data Identifies the data to be emitted\n */\n this.emitFormStateObservableForAll = function emitFormStateObservableForAll(source, eventId, data) {\n $$subject.onNext({\n source: source,\n id: eventId,\n data: data\n });\n };\n \n this.getFormController = function(formId) {\n var defer,\n formCtrl = internal.forms[formId];\n if (formCtrl) {\n return Promise.resolve(formCtrl.getFormController());\n } else {\n defer = Promise.defer();\n // we can't find the form or the form doesn't have a controller yet, so it may not have been compiled\n var disposable = $$registrationObservable\n .filter(function formRegFilter (request) { return request.formId === formId; })\n .map(function formRegMap(request) {\n var ctrl = request.getFormController();\n return ctrl;\n })\n .subscribe(function formRegSub(ctrl) {\n // toPromise(Promise) not working? problem with our promise implementation?\n defer.resolve(ctrl);\n disposable.dispose();\n }, function formRegErr(err) {\n defer.reject(err);\n disposable.dispose();\n });\n return defer.promise;\n }\n };\n \n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n","\n define(ns+'/form/DirtyContentDirective',[\n 'angular'\n ], function (angular) {\n 'use strict';\n \n var ngDependencies = ['$parse'],\n /**\n *\n * @descsription\n * Provides all child ngModels to detect for a dirty state\n * @see {@Link DirtyContentDirective}\n *\n * */\n DirtyContentDirective = function dirtyContentDirective($parse) {\n \n var ddo = {\n restrict: 'A',\n pngDirtyContent: '=',\n link: function dirtyContentLink(scope, element, attr, controller) {\n var allNgModelElements = element.find('[ng-model]'),\n allNgModelControllers = allNgModelElements.map(function getAllNgModelControllers(k, e) {\n return angular.element(e).controller('ngModel');\n });\n \n scope.$watch(function detectDirty() {\n return allNgModelControllers.is(function watchForDirty(k, e) {\n return e.$dirty;\n });\n }, function provideValue(newVal) {\n $parse(attr.pngDirtyContent).assign(scope, newVal);\n });\n }\n };\n \n return ddo;\n };\n \n // set the angular dependencies to work with minified code\n DirtyContentDirective.$inject = ngDependencies;\n DirtyContentDirective.registeredName = 'pngDirtyContent';\n \n // Publish the constructor\n return DirtyContentDirective;\n });\n","\n (function() {\r\n 'use strict';\r\n \r\n define(ns+'/form/ResetOnCancelDirective',[ns+'/validation/FormStateMixin'], function(formStateMixin) {\r\n var ngDependencies = ['$parse'];\r\n \r\n function ResetOnCancelDirective($parse) {\r\n return {\r\n restrict: 'A',\r\n controller: function() {\r\n // just used to keep state\r\n },\r\n link: function resetOnCancelLink(scope, element, attr, resetCtrl) {\r\n var ngModelExpr = $parse(attr.ngModel);\r\n \r\n var cancel=function() {\r\n ngModelExpr.assign(scope, resetCtrl.originalModelValue);\r\n };\r\n var edit=function() {\r\n resetCtrl.originalModelValue = ngModelExpr(scope);\r\n };\r\n scope.$on('cancel',cancel);\r\n scope.$on('reset',cancel);\r\n scope.$on('edit',edit);\r\n scope.$on('setOriginal',edit);\r\n \r\n }\r\n };\r\n }\r\n \r\n ResetOnCancelDirective.registeredName = 'pngResetOnCancel';\r\n ResetOnCancelDirective.$inject = ngDependencies;\r\n return ResetOnCancelDirective;\r\n });\r\n })();\r\n \n","\n define(ns+'/form/ResetMdDatepickerOnCancelDirective',['lodash', 'paychex.core/Errors'], function (_, Errors) {\n 'use strict';\n \n var ngDependencies = ['$parse'];\n \n // we could probably \"extend\" the core ResetOnCancelDirective so you don't have to apply both, but then they are coupled\n function ResetMdDatepickerOnCancelDirective($parse) {\n return {\n require: ['pngResetMdDatepickerOnCancel', 'ngModel', '?pngBlurFilter'],\n restrict: 'A',\n controller: function () {\n // just used to keep state\n },\n link: function resetOnCancelLink(scope, element, attr, ctrls) {\n var ngModelExpr = $parse(attr.ngModel),\n resetCtrl = ctrls[0],\n ngModelCtrl = ctrls[1],\n pngBlurFilter = ctrls[2];\n \n var cancel = function () {\n ngModelExpr.assign(scope, resetCtrl.originalModelValue);\n \n // This is required to reset the text box inside the md-datepicker\n // specifically when it has an invalid value in it\n scope.$broadcast('md-calendar-change', resetCtrl.originalViewValue);\n };\n scope.$on('cancel', cancel);\n scope.$on('reset', cancel);\n \n var edit = function () {\n // 1) md-datepicker adds a type=\"date\", \n // 2) which causes angular to add a formatter that turns dates into strings\n // 3) when we broadcast the md-calendar-change above, we need the JS date\n // 4) But, we can't always use the model value because it might not be a JS date (could be a calendarDate for example)\n // 5) So, we apply all the formatters EXCEPT the last one that convers it to a string\n \n // initialize to the model in case the only formatters in angulars and the loop below does nothing\n var dateViewValue = ngModelCtrl.$modelValue;\n \n // grab the original model value\n resetCtrl.originalModelValue = ngModelExpr(scope);\n \n // _.drop to get skip the last Date -> String formatter\n // _.forEachRight since formatters are applied right to left\n _.forEachRight(_.drop(ngModelCtrl.$formatters, 1), function (formatter) {\n dateViewValue = formatter.call({}, dateViewValue);\n });\n \n if (_.isNil(dateViewValue) || (dateViewValue instanceof Date)) {\n resetCtrl.originalViewValue = dateViewValue;\n } else {\n Errors.throw('ResetMdDatepickerOnCancelDirective: unable to get an initial view model of type Date');\n }\n \n if(pngBlurFilter){\n pngBlurFilter.onBlur();\n }\n };\n scope.$on('edit', edit);\n scope.$on('setOriginal', edit);\n }\n };\n }\n \n ResetMdDatepickerOnCancelDirective.registeredName = 'pngResetMdDatepickerOnCancel';\n ResetMdDatepickerOnCancelDirective.$inject = ngDependencies;\n return ResetMdDatepickerOnCancelDirective;\n });\n \n","\n (function() {\r\n 'use strict';\r\n \r\n define(ns+'/form/ResetModelsOnCancelDirective',[ns+'/validation/FormStateMixin'], function(formStateMixin) {\r\n var ngDependencies = ['$parse'];\r\n \r\n function ResetModelsOnCancelDirective($parse) {\r\n return {\r\n restrict: 'A',\r\n priority: 1, // needs to compile before png-form (default 0)\r\n compile: function resetModelsOnCancelCompile(element) {\r\n // Find all the ng-models we have and apply the png-reset-on-cancel directive\r\n //\r\n // We would like to do this in the png-form directive but\r\n // 1) would it impact existing forms? Probably not, but...\r\n // 2) (more importantly) the compile phase/pre-link in the png-form directive doesn't have the\r\n // transcluded content, and in the post-link it is too late to add more directives\r\n element.find('md-datepicker[ng-model]').attr('png-reset-md-datepicker-on-cancel','');\r\n element.find('[ng-model]:not(md-datepicker)').attr('png-reset-on-cancel','');\r\n }\r\n };\r\n }\r\n \r\n ResetModelsOnCancelDirective.registeredName = 'pngResetModelsOnCancel';\r\n ResetModelsOnCancelDirective.$inject = ngDependencies;\r\n return ResetModelsOnCancelDirective;\r\n });\r\n })();\r\n \n","\n define(ns+'/form/form-submit-button.tpl.html',[],function(){\r\n 'use strict';\r\n return '';\r\n });\n","\n define(ns+'/form/FormSubmitButtonController',['paychex.core/Errors'], function(Errors) {\r\n 'use strict';\r\n \r\n var ngDependencies = ['FormManager'];\r\n \r\n function FormSubmitButtonController(FormManager) {\r\n var self = this;\r\n this.$onInit = function() {\r\n \r\n // if we're not inside a form, then we need to use the form id to find the controller\r\n if (!self.formCtrl) {\r\n if (!self.formId) {\r\n Errors.throw('form-id is a required attribute when the submit button is not inside a ');\r\n } else {\r\n FormManager.getFormController(self.formId).then(function(formCtrl) {\r\n self.formCtrl = formCtrl;\r\n }).done();\r\n }\r\n }\r\n };\r\n }\r\n \r\n FormSubmitButtonController.registeredName = 'FormSubmitButtonController';\r\n FormSubmitButtonController.$inject = ngDependencies;\r\n return FormSubmitButtonController;\r\n });\r\n \n","\n (function () {\r\n 'use strict';\r\n \r\n /**\r\n * Directive to generate a png-button component that integrates with the form's disabled and\r\n * loading states, and runs the form submit function when clicked on it.\r\n *\r\n * Includes optional bindings to edit the button text and add custom classes for the button color and also forcibly changing the button state to disabled.\r\n *\r\n * @class paychex.framework.angular.forms.form.FormSubmitButtonDirective\r\n * @type {object}\r\n * @property {Object} require Required controllers\r\n * @property {string} require.formCtrl The controller needed to get the submit function, state, and save in progress of the form.\r\n * @property {Object} bindings Component bindings\r\n * @property {string} bindings.buttonText Optional text for the form submit button, defaults to the 'forms.actionButton.save' translation\r\n * @property {boolean} bindings.danger Optional class to be applied to the png-button color\r\n * @property {boolean} bindings.affirmative Optional class to be applied to the png-button color\r\n * @property {boolean} bindings.forceButtonDisabled optional boolean value for force disabling the button\r\n * @example The simplest example of the png-form-submit-button. The directive does not require any attributes.\r\n * \r\n * \r\n *\r\n * @example Another example of the png-form-submit-button. The directive now takes the button-text attribute.\r\n * \r\n * \r\n *\r\n * @example Another example of the png-form-submit-button. The directive now takes the class for changing the color of the button to danger.\r\n * \r\n * \r\n *\r\n * @example Another example of the png-form-submit-button. The directive disables the button based on the boolean value passed to the directive\r\n * \r\n * \r\n */\r\n define(ns+'/form/FormSubmitButtonDirective',[\r\n ns+'/form/form-submit-button.tpl.html',\r\n ns+'/form/FormSubmitButtonController'\r\n ], function (template, FormSubmitButtonController) {\r\n return {\r\n registeredName: 'pngFormSubmitButton',\r\n template: template,\r\n controller: FormSubmitButtonController,\r\n require: {\r\n formCtrl: '?^pngMinForm'\r\n },\r\n bindings: {\r\n buttonText: '@',\r\n danger: '<',\r\n affirmative: '<',\r\n forceButtonDisabled: '
';\r\n });\n","\n (function() {\n 'use strict';\n define(ns+'/form/FormSubmitSplitButtonController',[], function() {\n \n var ngDependencies = [];\n \n function FormSubmitSplitButtonController() {\n }\n \n FormSubmitSplitButtonController.registeredName = 'FormSubmitSplitButtonController';\n FormSubmitSplitButtonController.$inject = ngDependencies;\n return FormSubmitSplitButtonController;\n });\n })();\n","\n define(ns+'/form/FormSubmitSplitButtonDirective',[\n ns+'/form/form-submit-split-button.tpl.html',\n ns+'/form/FormSubmitSplitButtonController'\n ], function (\n template,\n FormSubmitSplitButtonController\n ) {\n 'use strict';\n \n /**\n * Directive to generate a png-split-button component with a primary button that integrates with the form's disabled and\n * loading states, and runs the form submit function when clicked just like the primary button of the FormSubmitButtonDirective.\n *\n * Includes optional bindings to edit the style and placement of the md-menu element that is generated by the\n * png-split-button component. <md-menu-item> elements contained in the <form-submit-split-button-directive> element\n * are transcluded to the png-split-button component's md-menu-content element.\n * @class paychex.framework.angular.forms.form.FormSubmitSplitButtonDirective\n * @type {Object}\n * @property {Object} require Required controllers\n * @property {string} require.formCtrl The controller needed to get the submit function, state, and save in progress of the form.\n * @property {Object} bindings Component bindings\n * @property {string} bindings.autoId Optional auto id for the split button that also becomes the prefix for the split button menu auto ids\n * @property {string} bindings.buttonText Optional text for the form submit button, defaults to the 'forms.actionButton.save' translation\n * @property {string} bindings.menuStyle Optional class to be applied to the md-menu-content element\n * @property {string} bindings.menuPositionMode Optional value for the md-menu element's md-position-mode attribute - [see docs]{@link https://material.angularjs.org/latest/api/directive/mdMenu#target-mode}\n * @property {string} bindings.menuOffset Optional value to offset the md-menu content with x/y values - [see docs]{@link https://material.angularjs.org/latest/api/directive/mdMenu#menu-offsets}\n * @property {string} bindings.sideButtonFunction Callback function that is called when the dropdown menu split button is clicked\n * @property {boolean} transclude Enables transcluding of the menu options for the split button dropdown menu\n * @example The simplest example of the png-form-submit-split-button. The directive does not require any attributes and only needs a menu item to be transcluded.\n * \n * \n * \n * \n * \n * \n *\n * @example Another example of the png-form-submit-split-button with an auto-id for the split button and menu components, and options to position the split button menu options.\n * \n * \n * \n * \n * \n * \n *\n * @example A complicated example, with a function that runs when the split button menu button is clicked (side-button-function), custom button text, split button menu styles and positioning options, and multiple menu items with their own disabled states.\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n */\n return {\n registeredName: 'pngFormSubmitSplitButton',\n template: template,\n controller: FormSubmitSplitButtonController,\n require: {\n formCtrl: '^pngMinForm'\n },\n bindings: {\n autoId: '@?',\n buttonText: '@',\n menuStyle: '@?',\n menuPositionMode: '@?',\n menuOffset: '@?',\n sideButtonFunction: '&?'\n },\n transclude: true\n };\n });\n \n","\n define(ns+'/form/form-cancel-button.tpl.html',[],function(){\r\n 'use strict';\r\n return '';\r\n });\n","\n define(ns+'/form/FormCancelButtonController',['paychex.core/Errors'], function(Errors) {\r\n 'use strict';\r\n \r\n var ngDependencies = ['FormManager'];\r\n \r\n function FormCancelButtonController(FormManager) {\r\n var self = this;\r\n self.$onInit = function() {\r\n // if we're not inside a form, then we need to use the form id to find the controller\r\n if (!self.formCtrl) {\r\n if (!self.formId) {\r\n Errors.throw('form-id is a required attribute when the cancel button is not inside a ');\r\n } else {\r\n FormManager.getFormController(self.formId).then(function(formCtrl) {\r\n self.formCtrl = formCtrl;\r\n }).done();\r\n }\r\n }\r\n };\r\n }\r\n \r\n FormCancelButtonController.registeredName = 'FormCancelButtonController';\r\n FormCancelButtonController.$inject = ngDependencies;\r\n return FormCancelButtonController;\r\n });\r\n \r\n \n","\n define(ns+'/form/FormCancelButtonDirective',[ns+'/form/form-cancel-button.tpl.html',\r\n ns+'/form/FormCancelButtonController'],\r\n function (template, FormCancelButtonController) {\r\n 'use strict';\r\n \r\n return {\r\n registeredName: 'pngFormCancelButton',\r\n template: template,\r\n controller: FormCancelButtonController,\r\n require: {\r\n formCtrl: '?^pngMinForm'\r\n },\r\n bindings: {\r\n formId: '@',\r\n buttonText: '@?'\r\n }\r\n };\r\n });\n","\n define(ns+'/form/form-edit-button.tpl.html',[],function(){\r\n 'use strict';\r\n return '';\r\n });\n","\n define(ns+'/form/FormEditButtonController',['paychex.core/Errors'], function(Errors) {\r\n 'use strict';\r\n \r\n var ngDependencies = ['FormManager'];\r\n \r\n function FormEditButtonController(FormManager) {\r\n var self = this;\r\n self.$onInit = function() {\r\n var self = this;\r\n // if we're not inside a form, then we need to use the form id to find the controller\r\n if (!self.formCtrl) {\r\n if (!self.formId) {\r\n Errors.throw('form-id is a required attribute when the edit button is not inside a ');\r\n } else {\r\n FormManager.getFormController(self.formId).then(function(formCtrl) {\r\n self.formCtrl = formCtrl;\r\n }).done();\r\n }\r\n }\r\n };\r\n }\r\n \r\n FormEditButtonController.registeredName = 'FormEditButtonController';\r\n FormEditButtonController.$inject = ngDependencies;\r\n return FormEditButtonController;\r\n });\r\n \r\n \n","\n define(ns+'/form/FormEditButtonDirective',[ns+'/form/form-edit-button.tpl.html',\r\n ns+'/form/FormEditButtonController'], \r\n function(template, FormEditButtonController) {\r\n 'use strict';\r\n \r\n return {\r\n registeredName: 'pngFormEditButton',\r\n template: template,\r\n controller: FormEditButtonController,\r\n require: {\r\n formCtrl: '?^pngMinForm'\r\n },\r\n bindings: {\r\n formId: '@',\r\n buttonText: '@?'\r\n }\r\n };\r\n });\r\n \n","\n define(ns+'/form/form-component-group.tpl.html',[],function(){\r\n 'use strict';\r\n return '
';\r\n });\n","\n (function () {\n 'use strict';\n define(ns+'/form/FormComponentGroupController',[], function () {\n var ngDependencies = [];\n \n function FormComponentGroupController() {}\n \n FormComponentGroupController.registeredName = 'FormComponentGroupController';\n FormComponentGroupController.$inject = ngDependencies;\n return FormComponentGroupController;\n });\n })();\n \n \n","\n (function() {\n 'use strict';\n define(ns+'/form/FormComponentGroupDirective',[ns+'/form/form-component-group.tpl.html',\n ns+'/form/FormComponentGroupController'],\n function(template, FormComponentGroupController) {\n return {\n registeredName: 'pngFormComponentGroup',\n template: template,\n transclude: true,\n controller: FormComponentGroupController\n };\n });\n })();\n \n","\n define(ns+'/form/minimal-form.tpl.html',[],function(){\r\n 'use strict';\r\n return '
';\r\n });\n","\n (function() {\r\n 'use strict';\r\n define(ns+'/form/MinimalFormDirective',[ns+'/form/minimal-form.tpl.html',\r\n ns+'/form/FormController'], \r\n function(template, MinimalFormController) {\r\n return {\r\n registeredName: 'pngMinForm',\r\n template: template,\r\n transclude: true,\r\n controller: MinimalFormController,\r\n // Note: can't use the default $ctrl here since the existing FormController uses the\r\n // form name 'formCtrl.form' to get the angular formController set onto the \r\n // paychex form controller. See any instance of self.form in the paychex FormController.\r\n controllerAs: 'formCtrl', \r\n bindings: {\r\n submitFunction: '<',\r\n editFunction: '<',\r\n cancelFunction: '<',\r\n dirtyPrompt: '<',\r\n forceEditMode: '
';\r\n });\n","\n define(ns+'/form/MinimalErrorFormDirective',[ns+'/form/minimal-error-form.tpl.html'],\n function (template) {\n 'use strict';\n \n return {\n registeredName: 'pngMinErrorForm',\n template: template,\n transclude: true,\n controller: function controller(){},\n // Note: can't use the default $ctrl here since the existing FormController uses the\n // form name 'formCtrl.form' to get the angular formController set onto the \n // paychex form controller. See any instance of self.form in the paychex FormController.\n controllerAs: 'minFormCtrl',\n bindings: {\n submitFunction: '<',\n editFunction: '<',\n cancelFunction: '<',\n dirtyPrompt: '<',\n forceEditMode: '
';\r\n });\n","\n define(ns+'/form/StandardFormButtonsDirective',[ns+'/form/standard-form-buttons.tpl.html'], \r\n function(template) {\r\n 'use strict';\r\n \r\n return {\r\n registeredName: 'pngStdFormButtons',\r\n controller: function StandardFormButtonsController() {\r\n // only used for bindings\r\n },\r\n template: template,\r\n bindings: {\r\n formId: '@',\r\n editButtonText: '@?',\r\n cancelButtonText: '@?',\r\n submitButtonText: '@?'\r\n }\r\n };\r\n });\r\n \n","\n define(ns+'/form/FormGroupingDirective',[\n 'angular',\n 'lodash',\n 'jquery'\n ], function (\n angular,\n _,\n $\n ) {\n 'use strict';\n \n var ngDependencies = ['FormManager'];\n \n /**\n *\n * Add this directive to your png-form or png-min-form and assign a group name to hide other forms within\n * the group when one form in the group is in edit mode. Show all forms again when exiting edit mode.\n *\n * You can also add this directive to any element that is not a form, and it will be hidden when any form\n * in the group goes into edit mode. In this use case formId is not required.\n *\n * Example:\n * \n *
\n * \n \n * \n * \n * \n *\n *
\n * \n *
\n */\n var Constructor = function (FormManager) {\n return {\n require: [],\n restrict: 'A',\n link: function (scope, element, attrs) {\n var formStateObservable = FormManager.getFormStateObservable(attrs.formId),\n subscription;\n \n \n // currently only evaluated at link time, doesn't support dynamic changes\n var disableFormGrouping = attrs.pngFormGroupingDisabled ? scope.$eval(attrs.pngFormGroupingDisabled) : false;\n \n if (formStateObservable && !disableFormGrouping) {\n subscription = formStateObservable.subscribe(function onNext(event) {\n var jquerySelector = '[png-form-grouping=' + attrs.pngFormGrouping + '][form-id!=' + attrs.formId + ']';\n if (event.readOnly) {\n $(jquerySelector).show();\n } else {\n $(jquerySelector).hide();\n }\n });\n \n scope.$on('$destroy', function onDestroy() {\n subscription.dispose();\n });\n }\n }\n };\n };\n \n Constructor.registeredName = 'pngFormGrouping';\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n","\n define(ns+'/form/FormStateObservable',[\n 'lib.rxjs'\n ], function (\n Rx\n ) {\n 'use strict';\n \n return function createFormStateObservable($scope) {\n var self = this;\n this.readOnly = true;\n return Rx.Observable.create(function (observer) {\n $scope.$on('edit', function () {\n self.readOnly = false;\n observer.next({\n action: 'edit',\n readOnly: self.readOnly\n });\n });\n \n $scope.$on('cancel', function () {\n self.readOnly = true;\n observer.next({\n action: 'cancel',\n readOnly: self.readOnly\n });\n });\n \n $scope.$on('submit', function () {\n self.readOnly = true;\n observer.next({\n action: 'submit',\n readOnly: self.readOnly\n });\n });\n \n });\n };\n });\n \n","\n define(ns+'/form/NeverDirtyDirective',[], function () {\n 'use strict';\n \n var ngDependencies = [];\n var NeverDirtyDirective = function neverDirtyDirective() {\n return {\n require: ['ngModel'],\n restrict: 'A',\n link: function neverDirtyLink(scope, element, attrs, controllers) {\n var ngModel = controllers[0];\n ngModel.$setDirty = Function.prototype; // no-op\n }\n };\n };\n \n NeverDirtyDirective.$inject = ngDependencies;\n NeverDirtyDirective.registeredName = 'pngNeverDirty';\n return NeverDirtyDirective;\n });\n","\n define(ns+'/form/NoBrowserValidationDirective',['angular'], function (angular) {\n 'use strict';\n \n var ngDependencies = [];\n var NoBrowserValidationDirective = function noBrowserValidationDirective() {\n return {\n restrict: 'A',\n link: function noBrowserValidation(scope, elem) {\n var formElement = angular.element(elem[0]).find('form');\n if(formElement[0]) {\n formElement[0].setAttribute('novalidate', '');\n }\n }\n };\n };\n \n NoBrowserValidationDirective.$inject = ngDependencies;\n NoBrowserValidationDirective.registeredName = 'pngNoBrowserValidation';\n return NoBrowserValidationDirective;\n });\n","\n (function () {\n 'use strict';\n \n define(ns+'/form/translations/forms-en',[], function () {\n return {\n 'forms.actionButton.done' : 'Done',\n 'forms.actionButton.cancel' : 'Cancel',\n 'forms.actionButton.edit' : 'Edit',\n 'forms.actionButton.save' : 'Save',\n \n 'forms.datePicker.placeholder' : 'Enter Date',\n \n 'validation.date.must.be.after.1900': 'Must be after 1/1/1900',\n 'validation.date.too.far.out': 'That\\'s too far out'\n };\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/form/translations/forms-es',[], function () {\n return {\n 'forms.actionButton.done' : 'Hecho',\n 'forms.actionButton.cancel' : 'Cancelar',\n 'forms.actionButton.edit' : 'Editar',\n 'forms.actionButton.save' : 'Guardar',\n \n 'forms.datePicker.placeholder': 'Ingrese la fecha'\n };\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/form/module',[\n 'angular',\n ns+'/form/Constants',\n ns+'/form/FormController',\n ns+'/form/FormDirective',\n ns+'/form/FormTabChangeChecker',\n ns+'/form/FormManager',\n ns+'/form/DirtyContentDirective',\n ns+'/form/ResetOnCancelDirective',\n ns+'/form/ResetMdDatepickerOnCancelDirective',\n ns+'/form/ResetModelsOnCancelDirective',\n ns+'/form/FormSubmitButtonDirective',\n ns+'/form/FormSubmitButtonController',\n ns+'/form/FormSubmitSplitButtonDirective',\n ns+'/form/FormSubmitSplitButtonController',\n ns+'/form/FormCancelButtonDirective',\n ns+'/form/FormCancelButtonController',\n ns+'/form/FormEditButtonDirective',\n ns+'/form/FormEditButtonController',\n ns+'/form/FormComponentGroupDirective',\n ns+'/form/FormComponentGroupController',\n ns+'/form/MinimalFormDirective',\n ns+'/form/MinimalErrorFormDirective',\n ns+'/form/StandardFormButtonsDirective',\n ns+'/form/FormGroupingDirective',\n ns+'/form/FormStateObservable',\n ns+'/form/NeverDirtyDirective',\n ns+'/form/NoBrowserValidationDirective',\n 'paychex.framework.angular.localization/module',\n ns+'/form/translations/forms-en',\n ns+'/form/translations/forms-es'\n ], function (angular,\n Constants,\n FormController,\n FormDirective,\n FormTabChangeChecker,\n FormManager,\n DirtyContentDirective,\n ResetOnCancelDirective,\n ResetMdDatepickerOnCancelDirective,\n ResetModelsOnCancelDirective,\n FormSubmitButtonDirective,\n FormSubmitButtonController,\n FormSubmitSplitButtonDirective,\n FormSubmitSplitButtonController,\n FormCancelButtonDirective,\n FormCancelButtonController,\n FormEditButtonDirective,\n FormEditButtonController,\n FormComponentGroupDirective,\n FormComponentGroupController,\n MinimalFormDirective,\n MinimalErrorFormDirective,\n StandardFormButtonsDirective,\n FormGroupingDirective,\n FormStateObservable, // Needed just to get included in forms requirejs bundle\n NeverDirtyDirective,\n NoBrowserValidationDirective,\n localizationModule) {\n \n return angular.module(ns+'.form', ['ng', localizationModule.name])\n .controller(Constants.FormControllerName, FormController)\n .directive(Constants.FormTabChangeCheckerName, FormTabChangeChecker)\n .directive(Constants.FormDirectiveName, FormDirective)\n .directive(DirtyContentDirective.registeredName, DirtyContentDirective)\n .directive(ResetOnCancelDirective.registeredName, ResetOnCancelDirective)\n .directive(ResetMdDatepickerOnCancelDirective.registeredName, ResetMdDatepickerOnCancelDirective)\n .directive(ResetModelsOnCancelDirective.registeredName, ResetModelsOnCancelDirective)\n .directive(FormGroupingDirective.registeredName, FormGroupingDirective)\n .directive(NeverDirtyDirective.registeredName, NeverDirtyDirective)\n .directive(NoBrowserValidationDirective.registeredName, NoBrowserValidationDirective)\n .service(Constants.FormManager, FormManager)\n .controller(FormSubmitButtonController.registeredName, FormSubmitButtonController)\n .component(FormSubmitButtonDirective.registeredName, FormSubmitButtonDirective)\n .controller(FormSubmitSplitButtonController.registeredName, FormSubmitSplitButtonController)\n .component(FormSubmitSplitButtonDirective.registeredName, FormSubmitSplitButtonDirective)\n .controller(FormCancelButtonController.registeredName, FormCancelButtonController)\n .component(FormCancelButtonDirective.registeredName, FormCancelButtonDirective)\n .controller(FormEditButtonController.registeredName, FormEditButtonController)\n .component(FormEditButtonDirective.registeredName, FormEditButtonDirective)\n .controller(FormComponentGroupController.registeredName, FormComponentGroupController)\n .component(FormComponentGroupDirective.registeredName, FormComponentGroupDirective)\n .component(MinimalFormDirective.registeredName, MinimalFormDirective)\n .component(MinimalErrorFormDirective.registeredName, MinimalErrorFormDirective)\n .component(StandardFormButtonsDirective.registeredName, StandardFormButtonsDirective)\n .run([\n 'LocaleService',\n function (LocaleService) {\n LocaleService.addTranslationPath(ns+'/form/translations/forms-{localeId}');\n }]);\n });\n })();\n \n","\n (function () {\n 'use strict';\n \n define(ns+'/textInput/module',[\n 'angular',\n ns+'/textInput/Constants',\n ns+'/textInput/TextInputController',\n ns+'/textInput/TextInputDirective',\n ns+'/validation/module',\n ns+'/errorModelMixin/module',\n ns+'/parsers/module',\n ns+'/formatters/module',\n ns+'/form/module',\n 'lib.ngPatternRestrict'\n ], function (\n angular,\n Constants,\n TextInputController,\n TextInputDirective,\n validationModule,\n modelMixinModule,\n parsersModule,\n formattersModule,\n formModule\n ) {\n \n return angular.module(ns+'.textInput', [\n 'ng',\n validationModule.name,\n modelMixinModule.name,\n 'ngPatternRestrict',\n parsersModule.name,\n formattersModule.name,\n formModule.name\n ])\n .controller(Constants.TextInputControllerName, TextInputController)\n .directive(Constants.TextInputDirectiveName, TextInputDirective);\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/valueConverter/ValueConverterDirective',[], function () {\n var ngDependencies = ['$parse'];\n var registeredName = 'pngValueConverter';\n \n /**\n * @class paychex.framework.angular.forms.valueConverter.ValueConverterDirective\n * @param {Object} valueConverter An object containing one or both of the following properties: toView, fromView\n * @returns {Object} The Directive Definition Object for the ValueConverter directive\n * @description\n * the valueConverter directive expects a parameter with one or both of the following properties:\n *\n * - `toView`: function(value) { }\n * - `fromView`: function (value) { }\n *\n * @example MyController.js\n *\n * // form expects an object of the form { first: String, last: String }\n * // but our model has an extra level in it\n * this.model = {\n * name: {\n * first: 'John',\n * last: 'Hancock'\n * }\n * };\n *\n * this.valueConverters = {\n * // convert from the model to the view\n * toView: function (value) {\n * return value.name;\n * },\n * // convert from the view to the model\n * fromView: function (value) {\n * return {\n * name: {\n * first: value.first,\n * last: value.last\n * }\n * }\n * }\n * };\n *\n * @example template.html\n *\n * <div ng-controller=\"MyController as myCtrl\">\n * <my-form ng-model=\"myCtrl.model\" png-value-converter=\"myCtrl.valueConverters\"></my-form>\n * </div>\n *\n */\n function ValueConverterDirective($parse) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, element, attrs, ngModel) {\n var valueConverters = $parse(attrs[registeredName])(scope);\n \n if (!!valueConverters && !!valueConverters.toView && typeof valueConverters.toView === 'function') {\n ngModel.$formatters.push(valueConverters.toView.bind(ngModel));\n }\n if (!!valueConverters && !!valueConverters.fromView && typeof valueConverters.fromView === 'function') {\n ngModel.$parsers.push(valueConverters.fromView.bind(ngModel));\n }\n }\n };\n }\n \n ValueConverterDirective.registeredName = registeredName;\n ValueConverterDirective.$inject = ngDependencies;\n \n return ValueConverterDirective;\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/valueConverter/module',[\n 'angular',\n ns+'/valueConverter/ValueConverterDirective'\n ], function (\n angular,\n ValueConverterDirective\n ) {\n /**\n * @namespace paychex.framework.angular.forms.valueConverter\n * @description\n * This class contains the ValueConverter directive\n */\n return angular.module(ns+'.valueConverter', ['ng'])\n .directive(ValueConverterDirective.registeredName, ValueConverterDirective);\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/toggle/Constants',[], function () {\n return {\n ToggleControllerName: 'PngToggleController',\n ToggleDirectiveName: 'pngToggle'\n };\n \n });\n \n }());\n","\n \n (function () {\n 'use strict';\n define(ns+'/toggle/ToggleController',[ns+'/validation/FormElementMixin'], function (formElementMixin) {\n \n var ngDependencies = ['$scope'];\n \n /**\n * The basic toggle controller.\n * @class paychex.framework.angular.forms.toggle.pngToggle#ToggleController\n * @mixes paychex.framework.angular.forms.validation.FormElementMixin\n */\n var Constructor = function toggleControllerConstructor($scope) {\n var self = this;\n \n self.$onInit = function $onInit() {\n /**\n * -> ngChange callback gets invoked twice\n * This is needed because ngChange on the mdSwitch gets invoked before ngModel gets updated.\n */\n $scope.$watch('toggleCtrl.ngModel', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n self.ngChange(newVal);\n }\n });\n \n formElementMixin.call(self, $scope);\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n // Publish the constructor\n return Constructor;\n });\n \n }());\n","\n define(ns+'/toggle/toggle.tpl.html',[],function(){\r\n 'use strict';\r\n return '
{{::toggleCtrl.label}}
{{::toggleCtrl.label}} {{toggleCtrl.ngModel | pngMaskFilter : toggleCtrl.masked : toggleCtrl.formatters : !toggleCtrl.partialMask}}
';\r\n });\n","\n (function () {\n 'use strict';\n \n define(ns+'/toggle/ToggleDirective',['angular', 'lodash', ns+'/toggle/Constants', ns+'/toggle/toggle.tpl.html', ns+'/validation/FormElementScopeMixin'], function (angular, _, Constants, inputTemplate, formElementScopeMixin) {\n var ngDependencies = [];\n \n /**\n * @class paychex.framework.angular.forms.toggle.pngToggle\n * @mixes paychex.framework.angular.forms.validation.FormElementScopeMixin\n */\n var Constructor = function () {\n return {\n controllerAs: 'toggleCtrl',\n controller: Constants.ToggleControllerName,\n template: inputTemplate,\n replace: true,\n scope: {},\n bindToController: _.merge({\n ngChange: '&',\n mdNoInk: '=?',\n ngTrueValue: '=',\n ngFalseValue: '=',\n ariaLabel: '@',\n invertLabel: ' 0){\n // reset the display\n self.messages = {};\n \n // {'key': true/false} -> {'key', Promise}\n preTransMessages = _.mapValues(errors, function(value, key) {\n if(key && key.indexOf('00') === 0){\n // key likely looks like GUID.2\n // createMessageFromValidationId expects its params to be (GUID, 2)\n // so call .split(',') to get the array and call the function with it.\n return PaychexMessageFactory.createMessageFromValidationId.apply(null, key.split('.'));\n } else {\n return PaychexMessageFactory.createMessageFromValidationId(key);\n }\n });\n \n // {key: Promise} -> {key: String}\n _.forOwn(preTransMessages, function(value,key,object) {\n value.then(function(msg) {\n self.messages[key] = msg.messageText;\n });\n });\n \n // keeping this integration the way it worked before\n Promise.all(_.values(preTransMessages))\n .then(function (validationMessages) {\n \n // if formCtrl exists (i.e. this field exists within a png-form), it will update the\n // errors on the field and then return\n if (self.formCtrl) {\n self.formCtrl.setFieldErrors(\n self.elementId,\n validationMessages,\n self.model\n );\n }\n }).done();\n }\n else {\n self.messages = {};\n \n if (self.formCtrl) {\n self.formCtrl.setFieldErrors(\n self.elementId,\n [],\n self.model\n );\n }\n \n return self.messages;\n }\n }\n \n // call the formatMessages function if the errors object has changed\n // this is cleaned up in the directive link function\n $scope.$watch(function errorDisplayWatchFn () {\n return self.errors;\n }, function (newVal, oldVal) {\n if (!_.isEqual(newVal, oldVal) || !self.ranOnce) {\n self.ranOnce = true;\n formatMessages(newVal);\n }\n }, true);\n \n };\n \n // Set the angular dependencies to work with minified code\n FormErrorDisplayController.$inject = ngDependencies;\n // Publish the constructor\n return FormErrorDisplayController;\n });\n \n }());\n \n","\n define(ns+'/formErrorDisplay/formErrorDisplay.tpl.html',[],function(){\r\n 'use strict';\r\n return '
{{v}}
';\r\n });\n","\n (function () {\n 'use strict';\n \n define(ns+'/formErrorDisplay/FormErrorDirective',['angular', ns+'/formErrorDisplay/Constants', ns+'/formErrorDisplay/formErrorDisplay.tpl.html'], function (angular, Constants, formErrorDisplayTemplate) {\n var ngDependencies = [];\n \n /**\n * @class paychex.framework.angular.forms.toggle.pngToggle\n * @param {String} ng-model\n * @param {Boolean} [read-only=false] Whether an interactive form element is shown or just a label with the value\n * @param {Boolean} [disabled=false] Whether the interactable part of the form element is disabled\n * @param {Boolean} [visible=true] Whether the entire form element including label is visible\n * @param {String} [security-id] This is specified to automatically set all the security attributes for a given form element\n * @param {Boolean} [masked=false] The number of characters to mask\n * @param {String} [validation-id] This is specified to automatically set all the validation attributes for a given form element\n * @param {Number} [number-of-masked-characters=0] The number of characters to mask with if masked is true\n */\n var Constructor = function () {\n var controllerAs = 'formErrorCtrl';\n return {\n controllerAs: controllerAs,\n controller: Constants.FormErrorDisplayControllerName,\n template: formErrorDisplayTemplate,\n replace: true,\n scope: {},\n require: '^?pngForm',\n bindToController: {\n model: '=',\n errors: '=?',\n elementId: '@?',\n payxautoid: '@?'\n },\n link: function (scope, element, attrs, FormController) {\n //element.on('$destroy', scope.$destroy);\n scope[controllerAs].formCtrl = FormController;\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n \n","\n (function () {\n 'use strict';\n \n define(ns+'/formErrorDisplay/module',[\n 'angular',\n ns+'/formErrorDisplay/Constants',\n ns+'/formErrorDisplay/FormErrorDisplayController',\n ns+'/formErrorDisplay/FormErrorDirective'\n ], function (angular,\n Constants,\n FormErrorDisplayController,\n FormErrorDirective) {\n \n return angular.module(ns+'.formErrorDisplay', ['ng'])\n .controller(Constants.FormErrorDisplayControllerName, FormErrorDisplayController)\n .directive(Constants.FormErrorDisplayDirectiveName, FormErrorDirective);\n });\n })();\n","\n \n (function () {\n 'use strict';\n \n define(ns+'/radioButton/Constants',[], function () {\n return {\n RadioButtonControllerName: 'PngRadioButtonController',\n RadioButtonDirectiveName: 'pngRadioButton'\n };\n \n });\n \n }());\n","\n \n (function () {\n 'use strict';\n define(ns+'/radioButton/RadioButtonController',[\n 'lodash',\n ns+'/validation/FormElementMixin'\n ], function (\n _,\n formElementMixin\n ) {\n var ngDependencies = ['$scope', '$element'];\n \n /**\n * The basic RadioButton controller.\n * @class paychex.framework.angular.forms.radioButton.pngRadioButton#RadioButtonController\n * @mixes paychex.framework.angular.forms.validation.FormElementMixin\n */\n var Constructor = function radioButtonControllerConstructor($scope, $element) {\n var self = this;\n self.$onInit = function $onInit() {\n formElementMixin.call(self, $scope, 'radio-group');\n self.displayValue = undefined;\n var unregisterWatch = $scope.$watch('radioButtonCtrl.ngModel', function (newVal) {\n self.displayValue = _.result(_.find(self.repeat, function(obj) {\n return obj.value === newVal;\n }), 'label');\n }, true);\n $element.on('$destroy', unregisterWatch);\n var unregisterWatchRepeat = $scope.$watch('radioButtonCtrl.repeat', function () {\n self.displayValue = _.result(_.find(self.repeat, function(obj) {\n return obj.value === self.ngModel;\n }), 'label');\n }, true);\n $element.on('$destroy', unregisterWatchRepeat);\n };\n return self;\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n // Publish the constructor\n return Constructor;\n });\n \n }());\n","\n define(ns+'/radioButton/radioButton.tpl.html',[],function(){\r\n 'use strict';\r\n return '
{{::item.label | pngMaskFilter : radioButtonCtrl.masked : radioButtonCtrl.formatters : !radioButtonCtrl.partialMask }}
{{radioButtonCtrl.displayValue | pngMaskFilter : radioButtonCtrl.masked : radioButtonCtrl.formatters : !radioButtonCtrl.partialMask | pngNoValueFilter}}
';\r\n });\n","\n \n (function () {\n 'use strict';\n \n define(ns+'/radioButton/RadioButtonDirective',['angular',\n 'lodash',\n ns+'/radioButton/Constants',\n ns+'/radioButton/radioButton.tpl.html',\n ns+'/validation/FormElementScopeMixin',\n ns+'/validation/AdvancedSecurityMixin'\n ], function (angular,\n _,\n Constants,\n inputTemplate,\n formElementScopeMixin,\n advancedSecurityMixin\n ) {\n var ngDependencies = [];\n \n /**\n * @class paychex.framework.angular.forms.radioButton.pngRadioButton\n * @mixes paychex.framework.angular.forms.validation.FormElementScopeMixin\n */\n var Constructor = function () {\n return {\n controllerAs: 'radioButtonCtrl',\n controller: Constants.RadioButtonControllerName,\n template: inputTemplate,\n replace: true,\n scope: {},\n require: ['pngRadioButton'],\n bindToController: _.merge({\n horizontal: '=?' // horizontal layout\n }, formElementScopeMixin),\n link: function (scope, element, attr, controllers) {\n var radioButtonCtrl = controllers[0];\n \n advancedSecurityMixin.applyLookupMixin.call(radioButtonCtrl, element);\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n \n","\n \n (function () {\n 'use strict';\n \n define(ns+'/radioButton/module',[\n 'angular',\n ns+'/radioButton/Constants',\n ns+'/radioButton/RadioButtonController',\n ns+'/radioButton/RadioButtonDirective',\n ns+'/validation/module'\n ], function (angular,\n Constants,\n RadioButtonController,\n RadioButtonDirective,\n ValidationModule) {\n \n return angular.module(ns+'.radioButton',\n ['ng', ValidationModule.name])\n .controller(Constants.RadioButtonControllerName, RadioButtonController)\n .directive(Constants.RadioButtonDirectiveName, RadioButtonDirective);\n });\n })();\n","\n (function () {\n 'use strict';\n \n define(ns+'/select/Constants',[], function () {\n return {\n SelectControllerName: 'PngSelectController',\n SelectDirectiveName: 'pngSelect'\n };\n \n });\n \n }());\n","\n \n \n (function () {\n 'use strict';\n define(ns+'/select/SelectController',[\n 'lodash',\n ns+'/validation/FormElementMixin'\n ], function (\n _,\n formElementMixin\n ) {\n \n var ngDependencies = ['$scope', 'TranslationService', 'DeviceProfile'];\n \n /**\n * The basic text input controller.\n * @class paychex.framework.angular.forms.select.pngSelect#SelectController\n * @mixes paychex.framework.angular.forms.validation.FormElementMixin\n */\n var Constructor = function selectControllerConstructor($scope, TranslationService, DeviceProfile) {\n var self = this;\n self.$onInit = function $onInit() {\n self.mobileDevice = DeviceProfile.isMobile();\n \n /**\n * Use model option of trackBy to set the select list initially if the model is an object.\n */\n if (self.trackBy) {\n self.modelOptions = {trackBy: '$value.' + self.trackBy};\n }\n else if (_.isObject(self.ngModel)) {\n self.modelOptions = {trackBy: '$value.$$hashKey'};\n }\n else {\n self.modelOptions = {};\n }\n \n /**\n * ng-change does not work with md-select.\n */\n if (typeof(self.changeFunction) === typeof(Function)) {\n $scope.$watch('selectCtrl.ngModel', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n self.changeFunction();\n }\n });\n }\n formElementMixin.call(self, $scope, 'select');\n \n if (!!self.label) {\n TranslationService.translate([\n self.label\n ]).then(function (values) {\n self.locale = {\n label: values[0]\n };\n });\n }\n };\n \n /**\n * Use either the object or the value out of the option array.\n */\n self.selectOptionValue = function getSelectOptionValue(item) {\n return item && self.optionValue && !self.trackBy ? item[self.optionValue] : item;\n };\n \n /**\n * Get the displayed value of the item\n * @param item\n * @returns displayed value\n */\n self.displayValue = function displayValue(item) {\n if (_.isFunction(self.optionDisplay)) {\n return self.optionDisplay(item);\n } else {\n if (item) {\n return item[self.optionDisplay];\n }\n return item;\n }\n };\n \n /**\n * Lookup the value if the model is an object.\n */\n self.readOnlyValue = function getReadOnlyValue() {\n var returnVal;\n \n if (self.ngModel) {\n if (self.trackBy) {\n returnVal = self.displayValue(self.ngModel);\n } else {\n var matched = _.find(self.optionArray, function (option) {\n return self.optionValue ? option[self.optionValue] === self.ngModel : _.isEqual(option, self.ngModel);\n });\n return matched ? self.displayValue(matched) : matched;\n }\n }\n \n return returnVal;\n };\n \n \n };\n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n define(ns+'/select/select.tpl.html',[],function(){\r\n 'use strict';\r\n return '
{{selectCtrl.placeholder || selectCtrl.locale.label || selectCtrl.label | pngMaskFilter : selectCtrl.masked : selectCtrl.formatters : !selectCtrl.partialMask}}{{::selectCtrl.displayValue(item) | pngMaskFilter : selectCtrl.masked : selectCtrl.formatters : !selectCtrl.partialMask}}
{{selectCtrl.readOnlyValue() | pngMaskFilter : selectCtrl.masked : selectCtrl.formatters : !selectCtrl.partialMask | pngNoValueFilter}}
';\r\n });\n","\n \n \n (function () {\n 'use strict';\n \n define(ns+'/select/SelectDirective',['angular', 'lodash', ns+'/select/Constants', ns+'/select/select.tpl.html', ns+'/validation/FormElementScopeMixin', ns+'/validation/AdvancedSecurityMixin'],\n function (angular, _, Constants, selectTemplate, formElementScopeMixin, advancedSecurityMixin) {\n var ngDependencies = ['$parse'];\n \n /**\n * @class paychex.framework.angular.forms.select.pngSelect\n * @mixes paychex.framework.angular.forms.validation.FormElementScopeMixin\n * @param optionArray {Array} An array of the objects to populate the options\n * @param optionValue {String} The key of the property that will be set to the ngModel\n * @param optionDisplay {String} The key of the property that will be displayed to the user\n * @param changeFunction {Function} The function that will be called when the selection changes\n */\n var Constructor = function selectDirectiveConstructor($parse) {\n return {\n controllerAs: 'selectCtrl',\n controller: Constants.SelectControllerName,\n template: selectTemplate,\n replace: true,\n scope: {},\n require: ['pngSelect', '?^pngForm', '?^pngMinForm'],\n bindToController: _.merge({\n 'optionArray': '=',\n 'optionValue': '=?',\n 'optionDisplay': '=?',\n 'changeFunction': '&?',\n 'trackBy': '@?',\n 'placeholder' : '=?',\n 'showEmptyOption': '=?'\n }, formElementScopeMixin),\n link: function (scope, element, attr, controllers) {\n var selectCtrl = controllers[0],\n formCtrl = controllers[1] || controllers[2];\n \n if (formCtrl && (attr.readOnly === undefined || $parse(attr.readOnly).assign)) { \n \n selectCtrl.readOnly = !formCtrl.editMode;\n }\n advancedSecurityMixin.applyLookupMixin.call(selectCtrl, element);\n }\n };\n };\n \n // Set the angular dependencies to work with minified code\n Constructor.$inject = ngDependencies;\n \n // Publish the constructor\n return Constructor;\n });\n \n }());\n \n","\n define(ns+'/select/emptyOption.tpl.html',[],function(){\r\n 'use strict';\r\n return '';\r\n });\n","\n define(ns+'/select/nativeEmptyOption.tpl.html',[],function(){\r\n 'use strict';\r\n return '';\r\n });\n","\n (function () {\n 'use strict';\n define(ns+'/select/EmptyOptionDirective',[\n ns+'/select/emptyOption.tpl.html',\n ns+'/select/nativeEmptyOption.tpl.html'\n ], function (\n emptyOptionTemplate,\n nativeEmptyOptionTemplate\n ) {\n var ngDependencies = ['DeviceProfile'];\n /**\n * @name EmptyOptionDirective\n * @namespace paychex.framework.angular.forms.select.EmptyOptionDirective\n * @description This directive will create the appropriate option based on the type of the\n * device. For desktop devices it will use and for phone devices it\n * will use