{"version":3,"sources":["app/rules/rules.ts","app/app.ts","app/config.exceptionHandler.ts","app/config.routes.ts","app/config.ts","app/rules/ruleService.ts","app/application/application.ts","app/application/applicationModal.ts","app/application/confirmation.ts","app/application/rdsSaveDialog.ts","app/application/saveDialog.ts","app/services/crossroadsStorage.ts","app/services/advant-auth.ts","app/common/common.ts","app/common/commonConfigProvider.ts","app/common/commonfactory.ts","app/common/logger.ts","app/common/spinner.ts","app/directives/advAccordion.ts","app/directives/advAccordionGroup.ts","app/directives/advAffix.ts","app/directives/advCcPayment.ts","app/directives/advCollege.ts","app/directives/advCopy.ts","app/directives/advDateInput.ts","app/directives/advDisplay.ts","app/directives/advDocument.ts","app/directives/advFieldDisplay.ts","app/directives/advFormField.ts","app/directives/advFormGroup.ts","app/directives/advFormSection.ts","app/directives/advHighSchool.ts","app/directives/advHtmlCompile.ts","app/directives/advInfiniteScroll.ts","app/directives/advMajor.ts","app/directives/advPrecision.ts","app/directives/advRLCPSonsoringHighSchool.ts","app/directives/advScrollTo.ts","app/directives/advSelect.ts","app/directives/advShowHide.ts","app/directives/advSpinner.ts","app/directives/advTab.ts","app/directives/advTabContentTransclude.ts","app/directives/advTabHeadingTransclude.ts","app/directives/AdvTabsetController.ts","app/directives/advTabset.ts","app/directives/advTerm.ts","app/directives/advValidateSection.ts","app/directives/cfncDirectAdmission.ts","app/directives/cfncRcn.ts","app/directives/checkList.ts","app/directives/checkListDefault.ts","app/directives/dynamicName.ts","app/directives/homeSchoolCeeb.ts","app/directives/input.ts","app/directives/transcriptSchoolCeeb.ts","app/directives/transcriptStudentId.ts","app/directives/userLink.ts","app/directives/validSubmit.ts","app/home/home.ts","app/layout/shell.ts","app/login/loggedout.ts","app/login/login.ts","app/login/logout.ts","app/login/logoutDialog.ts","app/login/logoutModal.ts","app/rules/advRule.ts","app/services/authInterceptor.ts","app/services/collegeLookup.ts","app/services/helper.ts","app/services/highSchoolLookup.ts","app/services/payeezyService.ts","app/services/rlcpSponsoringSchoolLookup.ts","app/services/routemediator.ts","app/services/schoolDistrictLookup.ts","app/services/stateLookup.ts","app/services/userApplicationService.ts"],"names":["Advant","Crossroads","Rules","angular","module","run","$q","$rootScope","app","config","$httpProvider","$locationProvider","authenticationProvider","advConfig","html5Mode","clientId","useFullRefreshForLoginUrl","useFullRefreshForRedirect","apiUrls","apiHost","interceptors","push","AuthInterceptor","serviceId","events","login","logout","reloadUser","$logProvider","debugEnabled","cfg","controllerActivateSuccessEvent","controllerActivateSuccess","spinnerToggleEvent","spinnerToggle","loginEvent","logoutEvent","reloadUserEvent","RestangularProvider","setBaseUrl","addResponseInterceptor","data","operation","what","url","response","deferred","extractedData","indexOf","results","totalCount","totalPages","$compileProvider","debugInfoEnabled","$route","$http","$location","Restangular","authentication","routemediator","setRoutingHandlers","$on","event","next","appInsights","startTrackPage","$$route","title","current","pagePath","stopTrackPage","defaults","headers","common","Authorization","accessToken","withCredentials","configuration","getIdFromElem","elem","hasOwnProperty","split","IdleProvider","KeepaliveProvider","idle","timeout","interval","extendExceptionHandler","$delegate","logger","appErrorPrefix","logError","getLogFn","exception","cause","message","errorData","msg","$provide","decorator","routeConfigurator","$routeProvider","routes","setRoute","r","when","subNavs","forEach","sn","RouteConfig","this","templateUrl","caseInsensitiveMatch","settings","advantRoutes","constant","Config","docTitle","authCookieName","rdsUrl","keyCodes","backspace","tab","enter","esc","space","pageup","pagedown","end","home","left","up","right","down","insert","del","storage","error","storeChanged","wipChanged","remoteServiceName","version","RuleService","helper","_this","getPropertiesToWatch","ruleSet","propertyNames","groups","group","groupPropertyNames","_","map","rules","value","key","toCamelCase","uniqueArray","concat","groupRightValues","regEx","groupRightProperties","match","exec","length","getRule","applicationDefinitionId","ruleId","all","getList","then","result","find","id","reason","console","log","rule","defer","resolve","promise","compareOperator","LessThan","LessThanEqualTo","Equal","GreaterThan","GreaterThanEqualTo","NotEqual","Contains","DoesNotContain","StartsWith","EndsWith","IsNull","IsNotNull","joinOperator","None","And","Or","prototype","array","a","i","j","splice","getAndEvalRuleSet","evalRuleSet","isSelected","ruleGroupJoinOperator","evalRuleGroup","ruleGroup","ruleJoinOperator","evalRule","jScriptRegEx","codeLeftValue","leftValue","rightValue","valueRightValue","toLowerCase","undefined","replace","field","fieldName","expression","eval","compareValues","operator","isDate","isString","moment","isValid","isBefore","isSame","isArray","toString","isAfter","slice","factory","Application","$scope","$routeParams","$sce","$modal","userApplicationService","ruleService","$anchorScroll","payeezyService","$interval","errors","transcriptInfo","sendTranscript","canSendTranscript","today","Date","isUpperCase","isNaN","toUpperCase","convertCase","charAt","chars","hasNext","join","onCreate","paymentForm","authorizeSession","callback","method","appDef","status","submitting","checkCanSendTranscript","studentIdFieldKey","studentId","canReceiveTranscripts","schoolCeeb","one","get","getAppResponse","appId","customGET","userApplication","applicationResponse","modelState","applicationClosed","closed","getMajors","majors","queryParams","page","pageSize","sortBy","sortDirection","filter","withHttpConfig","cache","stripRestangular","getMajorLists","majorLists","getPaymentInfo","paymentInfo","showPayment","paymentMethod","getAppPaymentInfo","availableCardTypes","drop","getUserData","user","autoSave","put","submit","startedSubmitting","cancel","intervalPromise","customPUT","path","trackEvent","ApplicationDefinitionId","Name","name","UserApplicationId","UserApplicationSubmitDuration","performance","now","ga","exceptionMessage","parseSubmittalMessage","submittalMessage","fee","calculateFee","dynamicFees","dynamicFee","validateSection","section","serviceResult","defered","wordCount","text","apploadStart","loading","$broadcast","show","authenticate","controllerId","saving","userInfo","getUser","activate","stylesheets","baseStyleSheet","link","self","activateController","getAppDef","apploadComplete","ApplicationFormLoadTime","applicationMessageEnabled","showApplicationMessage","organization","program","application","form","sections","hasBeenLoaded","logoPath","appStyleSheet","active","flatten","fields","studentIdField","mostRecentHighSchoolCeeb","saveApplication","startedSaving","applicationForm","$submitted","$invalid","confirmation","backdrop","controller","SaveDialog","controllerAs","locals","local","confirm","UserApplicationSaveDuration","hide","saveApplicationAndOpenRDS","RdsSaveDialog","saveApplicationWithoutConfirmation","window","open","reject","submitApplication","cardNumber","payment","transcript","paymentFields","onSuccess","clientToken","reset","token","onError","onSubmit","setActiveSection","currentSection","trackPageView","isSectionValid","groupsCompiled","compiled","isRequired","type","definition","acceptedPayments","noPaymentRuleId","noPaymentRule","checkRuleId","checkRule","creditCardRuleId","creditCardRule","feeWaiverRuleId","feeWaiverRule","payLaterRuleId","payLaterRule","render","snippet","trustAsHtml","getChoiceLabel","fieldKey","choiceListId","choiceList","choices","finishApplication","warning","content","activeTab","applicationMessage","scope","close","$inject","ApplicationModal","$uibModalInstance","appData","userApp","applicationDefinition","dismiss","Confirmation","$uibModal","userApplicationId","LoginController","openApplicationModal","size","yes","no","CrossroadsStorage","userName","firstName","lastName","fullName","tenant","loginProvider","hasRegistered","timeZone","refreshToken","redirectTarget","rememberMe","ctpEligible","cteEligible","cihsEligible","rcn","dateOfBirth","refreshTokenExpiresIn","expiresOn","AuthenticationFactory","urls","getToken","exchangeToken","formHeader","Content-Type","api","register","changePassword","forcePasswordChange","externalLogins","registerExternal","cfncLogin","formEncode","param","obj","subValue","fullSubName","innerObj","query","Array","Object","subName","encodeURIComponent","substr","isObject","String","getUserInfo","returnUrl","getExternalLogins","site","AuthenticationProvider","registerThenLogin","usePopups","providerUrls","postLogout","cfncHostLogin","closeOAuthWindow","$get","$timeout","$window","$cookies","Idle","dialogs","AuthenticationProviderService","authProvider","checkLogin","clearUserInfo","sessionStorage","auth","access_token","refresh_token","loginHandler","warn","setLogoutTimer","refreshTokenExpiresOn","logoutTimer","getItemFromStorage","item","localStorage","getItem","warningDialog","create","initialize","persist","removeItem","utc","handleExternalData","externalData","provider","setAuthenticatedUserContext","redirectAuthenticated","externalUser","search","hash","parseQueryString","JSON","parse","setUserInfo","reloadUserHandler","logins","q","pair","separatorIndex","escapedKey","escapedValue","pairs","decodeURIComponent","newTarget","grant_type","client_id","redirect","protocol","host","location","href","loginWithExternal","loginWindow","externalLoginWindowTimer","closeWatcher","closeOAuthWindowHandler","stringify","clearAuthenticatedUserContext","remove","domain","logoutHandler","registerHandler","loginInfo","password","cookie","absUrl","args","_i","arguments","apply","authService","CommonServiceProvider","CommonFactory","commonConfig","throttles","promises","eventArgs","createSearchThrottle","viewmodel","list","filteredList","delay","filterFn","filterInputTimeout","searchNow","debouncedThrottle","immediate","isNumber","val","test","textContains","searchText","Logger","$log","source","showToast","logIt","logWarning","logSuccess","toastType","write","toastr","success","info","moduleId","fnName","logFn","SpinnerService","spinnerHide","spinnerShow","closeOthers","$attrs","accordionConfig","openGroup","isDefined","$eval","isOpen","addGroup","groupScope","removeGroup","index","directive","transclude","element","attrs","advAccordionGroup","$parse","$animate","$compile","getBlockNodes","nodes","blockNodes","node","endNode","nextSibling","jQuery","call","accordionCtrl","headerChildScope","clone","newScope","headerBlock","querySelector","append","parent","childScope","block","previousElements","$destroy","headerPreviousElements","panel","activePanel","openClass","panelClass","$watch","toggleClass","toggleOpen","$event","isDisabled","which","$id","Math","floor","random","headingId","panelId","displayRule","$parent","alreadyLoaded","loadedGetter","loadedSetter","assign","ruleProperties","ruleProperty","advResponse","newValue","oldValue","originalScope","localResponse","display","$evalAsync","require","priority","heading","setHeading","AdvAffix","$affix","affix","offsetTop","offsetBottom","offsetParent","offsetUnpin","options","target","destroy","restrict","advAffix","AdvCcPayment","card","selector","cvv","exp","placeholder","styles","input","font-size","color","background",".card","font-family",".valid",".invalidcc","@media screen and (max-width: 700px)","input:-webkit-autofill","-webkit-box-shadow","input.valid:-webkit-autofill","-webkit-text-fill-color","input.invalid:-webkit-autofill","input::placeholder","classes","empty","focus","invalid","valid","hooks","preFlowHook","firstdata","createPaymentForm","directiveId","AdvCollege","$document","$uibPosition","collegeLookup","stateLookup","ngModel","ceebField","typeField","streetField","street2Field","cityField","stateField","countryField","postalField","$schoolSearch","colleges","searchFilter","selectedSchool","unlistedSchool","state","stateList","schoolName","clear","schoolNameWatch","searchWatch","stateWatch","lookupBox","first","schoolField","schoolFinder","schoolList","schoolId","getStates","disableFields","turnOnSchoolNameWatch","listenScope","turnOnWatches","turnOffWatches","turnOffJustSearchWatches","click","preventDefault","position","css","top","$digest","sortByRelevance","scrollTop","getColleges","selectSchoolNotInList","enableFields","addClass","selectSchool","college","$applyAsync","ceebCode","ceebFieldDisabled","typeFieldDisabled","address","street1","streetFieldDisabled","street2","street2FieldDisabled","city","cityFieldDisabled","stateFieldDisabled","country","countryFieldDisabled","zip","postalFieldDisabled","nextPage","clearFields","attr","removeAttr","advCopy","template","tElement","tAttrs","cssClass","copyFields","on","localScope","copyField","copyToKey","copyFromKey","advDateInput","validDate","dateValue","inputFormat","dateMomentValue","validBaseMinDate","validMinDate","minDate","minValue","diff","validMaxDate","maxDate","maxValue","ngModelCtrl","$formatters","unshift","modelValue","modelMoment","ISO_8601","format","$validators","date","viewValue","$isEmpty","isUndefined","baseMin","$parsers","toISOString","advDisplay","showHide","ELEMENT_NODE","extractElementNode","elm","nodeType","domInsert","parentElement","afterElement","afterNode","parentNode","previousElementSibling","after","prepend","AdvDocument","Upload","ngModelController","uploaded","viewLink","uploadDocument","$files","$setTouched","$setValidity","file","uploading","maxFileSizeInMB","acceptedMimeTypes","upload","viewDocument","httpPath","openFile","clearDocument","AdvFieldDisplay","parsed","advFieldDisplay","html","getStringValue","loadIf","contents","isCompiled","AdvFormField","isType","isResponseHidden","maskField","re","RegExp","maskFormat","maskedResponse","showResponse","hideResponse","AdvFormGroup","formattedLayout","equals","showHtml","layout","compileLayout","formattedHtml","AdvFormSection","AdvHighSchool","highSchoolLookup","highSchools","getHighSchools","highSchool","highSchoolType","AdvHtmlCompile","advHtmlCompile","AdvInfiniteScroll","lengthThreshold","scrollThreshold","timeThreshold","handler","advInfiniteScroll","lastRemaining","parseInt","isFunction","noop","bind","remaining","scrollHeight","clientHeight","AdvMajor","q$","model","currentTerm","availableTerms","required","ctrl","selectedMajorResponse","elemName","majorlist","$watchCollection","activeMajors","getSelectedMajor","majorFormat","getMajorList","majorCode","getMajorCode","code","getMajorValue","nameField","nameAndCodeField","majorId","majorList","includes","majorListIds","rulePromises","uniqBy","selectedMajor","major","advPrecision","maxPrecision","precisionRegex","AdvRLCPSonsoringHighSchool","rlcpSchoolLookup","schoolDistrictLookup","schoolDistrictNameField","schoolDistrictNumberField","schoolNameField","schoolCeebCodeField","schoolNumberField","errorModel","rlcpSponsoringSchoolSearch","schoolDistrictName","schoolDistrictNumber","schoolCeebCode","schoolNumber","districts","schools","selectedDistrict","leaName","leaNumber","orientation","hsPage","dPage","districtSearch","dTotalPages","getSchoolDistricts","schoolSearch","district","hsTotalPages","getRLCPSponsoringSchools","selectDistrict","clearSchool","clearDistrict","school","$modelValue","loadMoreDistricts","$select","stopPropagation","loadMoreSchools","$error","newvalue","oldvalue","rlcpSponsoringSchoolLookup","AdvScrollTo","clickEvent","speed","scrollSpeed","clickEventAction","ngClick","off","e","scrollEnabled","$apply","$","animate","isFinite","advScrollTo","offset","done","advSelect","dir","multiple","advModel","advRequired","advRule","showEmptyOption","selected","label","emptyOption","default","parsedValue","test2","test3","test1","advShowHide","AdvSpinner","spinner","advSpinner","stop","Spinner","spin","advTab","tabsetCtrl","disabled","disable","tabs","max","t","select","addTab","removeTab","$transcludeFn","onSelect","onDeselect","advTabContentTransclude","isTabHeading","headingElement","tagName","hasAttribute","advTabHeadingTransclude","AdvTabsetController","findTabIndex","currentIndex","destroyed","previousIndex","oldIndex","previousSelected","findIndex","sort","t1","t2","newActiveIndex","arrayIndex","newActiveTabIndex","navigateNextPrev","advTabset","vertical","justified","bindToController","AdvTerm","appdef","term","getTermList","defaultT","isDefault","anyDefault","AdvValidateSection","advValidateSection","validateUsing","useServerValidation","cfncDirectAdmission","checkEligibility","studentNumber","params","$viewValue","$render","highSchoolNameField","highSchoolName","dpiNumberField","dpiNumber","lastNameField","studentNumberField","cfncRcn","validValues","getFullYear","firstNameField","dob","dobField","rcnRange","checkRcnFieldsMatch","$setViewValue","oScope","last","CheckList","compile","postLink","getter","checkList","setter","checklistChange","checkListValue","comparator","checkListRequired","checklistRequired","currentModel","modelHasValue","checklistComparator","add","newArray","checked","contains","arr","checkListDefault","defaultValue","defaultArray","DynamicName","$element","dynamicName","$set","homeSchoolCeeb","updateField","ceebCodeField","$filter","attributes","maskFieldType","TranscriptSchoolCeeb","transcriptSchoolCeeb","App","TranscriptStudentId","transcriptStudentId","$viewChangeListeners","UserLink","logoff","eventData","ValidSubmit","fn","validSubmit","$valid","Home","Shell","showSplash","topBarIsCollapsed","sideBarIsCollapsed","isApplication","busyMessage","isBusy","spinnerOptions","radius","lines","width","corners","trail","watch","copyrightYear","vm","toggleSpinner","originalPath","LoggedOut","closeWindow","busy","loginForm","error_description","loginExternal","externalLoginInfo","LogOut","referrer","postMessage","timer","LogoutDialog","LogoutModal","intervalLogout","tokenExpiresOn","AdvRule","$validate","ruleIsValid","cloneDeep","$injector","request","responseError","rejection","throttledRefresh","retryHttpRequest","throttle","trailing","CollegeLookup","loadingColleges","startRow","endRow","searchColleges","debounce","sortValue","service","Helper","responseType","headerValues","filename","contentType","blob","Blob","saveAs","entityType","baseType","HighSchoolLookup","loadingHighSchools","searchHighSchools","PayeezyService","padNumber","num","str","createToken","apikey","apiKey","js_security_key","jsToken","ta_token","taToken","credit_card.type","cardType","credit_card.cardholder_name","credit_card.card_number","credit_card.exp_date","expireMonth","expireYear","credit_card.cvv","cvv2","trustAsResourceUrl","jsonp","Error","messages","description","RLCPSponsoringSchoolLookup","loadingSchools","searchSchools","RouteMediator","handleRouteChangeError","updateDocTitle","handleRoutingErrors","previous","SchoolDistrictLookup","searchSchoolDistricts","abbreviation","UserApplicationService","$resource","applicationDefiniton","update"],"mappings":"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","file":"app.js","sourcesContent":["\r\n\r\nnamespace Advant.Crossroads.Rules {\r\n \r\n interface IRules extends angular.IModule { }\r\n // create the module and define its dependencies.\r\n var rules: IRules = angular.module(\"rules\", [\"restangular\"]);\r\n\r\n /* tslint:disable: no-empty */\r\n // execute bootstrapping code and any dependencies.\r\n rules.run([\"$q\", \"$rootScope\", ($q, $rootScope) => {\r\n\r\n }]);\r\n}","/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface Iapp extends angular.IModule { }\r\n\r\n // create the module and define its dependencies.\r\n var app: Iapp = angular.module(\"app\", [\r\n // angular modules \r\n \"ngResource\", // $resource for REST queries\r\n \"ngAnimate\", // animations\r\n \"ngRoute\", // routing\r\n \"ngSanitize\",\r\n \"ngTouch\",\r\n \"ngMessages\",\r\n \"ngCookies\",\r\n\r\n // custom modules \r\n \"authentication\",\r\n \"rules\",\r\n \"common\",\r\n\r\n // 3rd Party Modules\r\n \"ui.bootstrap\",\r\n \"mgcrea.ngStrap\",\r\n \"ui.select\",\r\n \"restangular\",\r\n \"ngFileUpload\",\r\n \"ngIdle\",\r\n \"dialogs.main\"\r\n ]);\r\n\r\n app.config([\"$httpProvider\", \"$locationProvider\", \"authenticationProvider\", \"config\",\r\n ($httpProvider: angular.IHttpProvider, $locationProvider: angular.ILocationProvider, authenticationProvider: AuthenticationProvider, advConfig: ICrossroadsConfig) => {\r\n $locationProvider.html5Mode(true);\r\n\r\n authenticationProvider.clientId = \"CrossRoadsLocal\";\r\n authenticationProvider.useFullRefreshForLoginUrl = true;\r\n authenticationProvider.useFullRefreshForRedirect = true;\r\n\r\n authenticationProvider.apiUrls.apiHost = advConfig.apiHost;\r\n $httpProvider.interceptors.push(AuthInterceptor.serviceId);\r\n\r\n authenticationProvider.events.login = advConfig.events.login;\r\n authenticationProvider.events.logout = advConfig.events.logout;\r\n authenticationProvider.events.reloadUser = advConfig.events.reloadUser;\r\n\r\n }]);\r\n\r\n app.config([\"$logProvider\", ($logProvider) => {\r\n // turn debugging off/on (no info or warn)\r\n if ($logProvider.debugEnabled) {\r\n $logProvider.debugEnabled(true);\r\n }\r\n }]);\r\n\r\n //#region Configure the common services via commonConfig\r\n app.config([\"commonConfigProvider\", \"config\", (cfg: ICommonServiceProvider, advConfig: ICrossroadsConfig) => {\r\n cfg.config.controllerActivateSuccessEvent = advConfig.events.controllerActivateSuccess;\r\n cfg.config.spinnerToggleEvent = advConfig.events.spinnerToggle;\r\n cfg.config.loginEvent = advConfig.events.login;\r\n cfg.config.logoutEvent = advConfig.events.logout;\r\n cfg.config.reloadUserEvent = advConfig.events.reloadUser;\r\n }]);\r\n //#endregion\r\n\r\n //#region Configure the Restangular Service\r\n app.config([\"RestangularProvider\", \"config\", (RestangularProvider: Restangular.IProvider, advConfig: ICrossroadsConfig) => {\r\n RestangularProvider.setBaseUrl(advConfig.apiHost);\r\n\r\n // add a response interceptor\r\n RestangularProvider.addResponseInterceptor((data, operation, what, url, response, deferred) => {\r\n var extractedData;\r\n // .. to look for getList operations\r\n if (operation === \"getList\" &&\r\n (url.indexOf(\"/rules\")\r\n || url.indexOf(\"/majors\")\r\n || url.indexOf(\"/highSchools\")\r\n || url.indexOf(\"/colleges\")\r\n || url.indexOf(\"/majorlists\")\r\n || url.indexOf(\"/districts\"))) {\r\n // .. and handle the data and meta data\r\n extractedData = data.results;\r\n extractedData.totalCount = data.totalCount;\r\n extractedData.totalPages = data.totalPages;\r\n return extractedData;\r\n }\r\n\r\n return data;\r\n });\r\n }]);\r\n //#endregion\r\n\r\n app.config([\"$compileProvider\", ($compileProvider) => {\r\n $compileProvider.debugInfoEnabled(false);\r\n }]);\r\n\r\n // execute bootstrapping code and any dependencies.\r\n app.run([\"$route\", \"$q\", \"$rootScope\", \"$http\", \"$location\", \"Restangular\", \"authentication\", \"routemediator\",\r\n ($route, $q, $rootScope, $http: angular.IHttpService, $location: angular.ILocationService, Restangular, authentication: IAuthenticationProviderService, routemediator: IRouteMediator) => {\r\n // include $route to kick start the router.\r\n routemediator.setRoutingHandlers();\r\n\r\n $rootScope.$on(\"$routeChangeStart\", (event, next: any) => {\r\n appInsights.startTrackPage(next.$$route.title);\r\n\r\n });\r\n\r\n $rootScope.$on(\"$routeChangeSuccess\", (event, current: any) => {\r\n var pagePath = `CrossRoads${$location.url()}`;\r\n\r\n appInsights.stopTrackPage(current.$$route.title, pagePath);\r\n\r\n });\r\n\r\n /* tslint:disable: no-string-literal */\r\n ($http.defaults.headers.common).Authorization = \"Bearer \" + authentication.accessToken();\r\n $http.defaults.withCredentials = true;\r\n\r\n Restangular.configuration.getIdFromElem = (elem: Restangular.IElement) => {\r\n if (elem.hasOwnProperty(\"tenantName\")) {\r\n return elem[\"tenantName\"];\r\n } else if (elem.hasOwnProperty(\"applicationDefinitionId\")) {\r\n var appId: string = elem[\"applicationDefinitionId\"];\r\n var id = appId.split(\"/\")[5];\r\n return id;\r\n } else {\r\n return elem[\"id\"];\r\n }\r\n };\r\n }]);\r\n\r\n\r\n app.config([\"IdleProvider\", \"KeepaliveProvider\", (IdleProvider, KeepaliveProvider) => {\r\n // configure Idle settings\r\n IdleProvider.idle(1800); // in seconds\r\n IdleProvider.timeout(60); // in seconds \r\n KeepaliveProvider.interval(2); // in seconds\r\n }\r\n ]);\r\n}","\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n // configure by setting an optional string value for appErrorPrefix.\r\n // Accessible via config.appErrorPrefix (via config value).\r\n function extendExceptionHandler($delegate: any, config: any, logger: any) {\r\n var appErrorPrefix = config.appErrorPrefix;\r\n var logError = logger.getLogFn(\"app\", \"error\");\r\n return (exception, cause) => {\r\n $delegate(exception, cause);\r\n if (appErrorPrefix && exception.message && exception.message.indexOf(appErrorPrefix) === 0) { return; }\r\n\r\n var errorData = { exception: exception, cause: cause };\r\n var msg = appErrorPrefix + exception.message;\r\n logError(msg, errorData, true);\r\n };\r\n }\r\n\r\n angular.module(\"app\").config([\"$provide\", $provide => {\r\n $provide.decorator(\"$exceptionHandler\",\r\n [\"$delegate\", \"config\", \"logger\", extendExceptionHandler]);\r\n }]);\r\n\r\n // extend the $exceptionHandler service to also display a toast.\r\n}","\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IRouteConfigSettings {\r\n navOrder?: number;\r\n content?: string;\r\n }\r\n\r\n export interface IRouteConfig {\r\n templateUrl?: string;\r\n title?: string;\r\n section?: string;\r\n settings: IRouteConfigSettings;\r\n caseInsensitiveMatch?: boolean;\r\n controller?: string;\r\n controllerAs?: string;\r\n reloadOnSearch?: boolean;\r\n }\r\n\r\n export interface IRoute {\r\n url?: string;\r\n config?: IRouteConfig;\r\n subNavs?: Array;\r\n }\r\n\r\n\r\n export class RouteConfig {\r\n routes: Array;\r\n constructor() {\r\n this.routes = [\r\n {\r\n url: \"/login\",\r\n config: {\r\n templateUrl: \"/app/login/login.html\",\r\n title: \"Login\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }, {\r\n url: \"/login/:tenant\",\r\n config: {\r\n title: \"Login\",\r\n templateUrl: \"/app/login/loginForm.html\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }, {\r\n url: \"/application/completed/userApplications/:userApplicationId\",\r\n config: {\r\n templateUrl: \"/app/application/confirmation.html\",\r\n title: \"Completed Application\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }, {\r\n url: \"/application/:organization/:program/:application\",\r\n config: {\r\n templateUrl: \"/app/application/application.html\",\r\n title: \"Complete Application\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }, {\r\n url: \"/application/loggedout\",\r\n config: {\r\n templateUrl: \"/app/login/loggedout.html\",\r\n title: \"Logged Out\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }, {\r\n url: \"/application/logout\",\r\n config: {\r\n templateUrl: \"/app/login/logout.html\",\r\n title: \"Log Out\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }, {\r\n url: \"/\",\r\n config: {\r\n templateUrl: \"/app/home/home.html\",\r\n title: \"Home\",\r\n caseInsensitiveMatch: true,\r\n settings: {}\r\n }\r\n }\r\n ];\r\n }\r\n }\r\n\r\n var app = angular.module(\"app\");\r\n var advantRoutes = new RouteConfig();\r\n\r\n // collect the routes\r\n angular.module(\"app\").constant(\"routes\", advantRoutes.routes);\r\n\r\n // configure the routes and route resolvers\r\n function routeConfigurator($routeProvider: any, routes: any) {\r\n function setRoute(r: IRoute) {\r\n\r\n if (r.url) {\r\n $routeProvider.when(r.url, r.config);\r\n }\r\n if (r.subNavs) {\r\n r.subNavs.forEach(sn => setRoute(sn));\r\n }\r\n return $routeProvider;\r\n }\r\n\r\n routes.forEach(r=> setRoute(r));\r\n\r\n // $routeProvider.otherwise({ redirectTo: \"/\" });\r\n }\r\n\r\n angular.module(\"app\").config([\"$routeProvider\", \"routes\", routeConfigurator]);\r\n}","/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IStorageEvents {\r\n error: string;\r\n storeChanged: string;\r\n wipChanged: string;\r\n }\r\n\r\n export interface ICrossroadsEvents {\r\n controllerActivateSuccess: string;\r\n spinnerToggle: string;\r\n storage: IStorageEvents;\r\n login: string;\r\n logout: string;\r\n reloadUser: string;\r\n }\r\n\r\n export interface IKeyCodes {\r\n backspace: number;\r\n tab: number;\r\n enter: number;\r\n esc: number;\r\n space: number;\r\n pageup: number;\r\n pagedown: number;\r\n end: number;\r\n home: number;\r\n left: number;\r\n up: number;\r\n right: number;\r\n down: number;\r\n insert: number;\r\n del: number;\r\n }\r\n\r\n export interface ICrossroadsConfig {\r\n appErrorPrefix: string;\r\n docTitle: string;\r\n events: ICrossroadsEvents;\r\n keyCodes: IKeyCodes;\r\n remoteServiceName: string;\r\n version: string;\r\n apiHost: string;\r\n authCookieName: string;\r\n rdsUrl: string;\r\n }\r\n\r\n\r\n export class Config implements ICrossroadsConfig {\r\n appErrorPrefix: string;\r\n docTitle: string;\r\n events: ICrossroadsEvents;\r\n keyCodes: IKeyCodes;\r\n remoteServiceName: string;\r\n version: string;\r\n apiHost: string;\r\n authCookieName: string;\r\n rdsUrl: string;\r\n\r\n\r\n constructor() {\r\n this.apiHost = \"https://localhost:44353\";\r\n this.appErrorPrefix = \"[Crossroads Error]\";\r\n this.docTitle = \"CrossRoads: \";\r\n this.authCookieName = \".CfncIdentityLocal\";\r\n this.rdsUrl = \"https://testncresidency.cfnc.org\";\r\n\r\n this.keyCodes = {\r\n backspace: 8,\r\n tab: 9,\r\n enter: 13,\r\n esc: 27,\r\n space: 32,\r\n pageup: 33,\r\n pagedown: 34,\r\n end: 35,\r\n home: 36,\r\n left: 37,\r\n up: 38,\r\n right: 39,\r\n down: 40,\r\n insert: 45,\r\n del: 46\r\n };\r\n\r\n this.events = {\r\n controllerActivateSuccess: \"controller.activateSuccess\",\r\n spinnerToggle: \"spinner.toggle\",\r\n storage: {\r\n error: \"store.error\",\r\n storeChanged: \"store.changed\",\r\n wipChanged: \"wip.changed\"\r\n },\r\n logout: \"auth.logout\",\r\n login: \"auth.login\",\r\n reloadUser: \"auth.reloadUser\"\r\n };\r\n\r\n\r\n\r\n this.remoteServiceName = \"/breeze/Breeze\";\r\n\r\n this.version = \"1.0.0\";\r\n }\r\n }\r\n angular.module(\"app\").constant(\"config\", new Config());\r\n}","/// \r\n\r\nnamespace Advant.Crossroads.Rules {\r\n \"use strict\";\r\n\r\n export interface IRuleService {\r\n evalRuleSet(ruleSet: IRuleSet, value: any): boolean;\r\n getAndEvalRuleSet(applicationDefinitionId: string, ruleId: string, value): angular.IPromise;\r\n getPropertiesToWatch(ruleSet: IRuleSet): string[];\r\n }\r\n\r\n export class RuleService implements IRuleService {\r\n static serviceId: string = \"ruleService\";\r\n private compareOperator: ICompareOperator;\r\n private joinOperator: IJoinOperator;\r\n rules: Array;\r\n\r\n constructor(private $q: angular.IQService, private Restangular: Restangular.IService, private helper: IHelper) {\r\n this.compareOperator = {\r\n LessThan: \"LessThan\",\r\n LessThanEqualTo: \"LessThanEqualTo\",\r\n Equal: \"Equal\",\r\n GreaterThan: \"GreaterThan\",\r\n GreaterThanEqualTo: \"GreaterThanEqualTo\",\r\n NotEqual: \"NotEqual\",\r\n Contains: \"Contains\",\r\n DoesNotContain: \"DoesNotContain\",\r\n StartsWith: \"StartsWith\",\r\n EndsWith: \"EndsWith\",\r\n IsNull: \"IsNull\",\r\n IsNotNull: \"IsNotNull\"\r\n };\r\n\r\n this.joinOperator = {\r\n None: \"None\",\r\n And: \"And\",\r\n Or: \"Or\"\r\n };\r\n }\r\n\r\n uniqueArray(array: any[]): any[] {\r\n var a = array.concat();\r\n for (var i = 0; i < a.length; ++i) {\r\n for (var j = i + 1; j < a.length; ++j) {\r\n if (a[i] === a[j]) {\r\n a.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n return a;\r\n\r\n }\r\n\r\n getPropertiesToWatch = (ruleSet: IRuleSet): string[] => {\r\n var propertyNames = [];\r\n angular.forEach(ruleSet.groups, (group: IRuleGroup) => {\r\n var groupPropertyNames = _.map(group.rules, \"codeLeftValue\");\r\n angular.forEach(groupPropertyNames, (value, key) => {\r\n groupPropertyNames[key] = this.helper.toCamelCase(value);\r\n });\r\n propertyNames = this.uniqueArray(propertyNames.concat(groupPropertyNames));\r\n\r\n var groupRightValues = _.map(group.rules, \"valueRightValue\");\r\n var regEx = /\\[\\[([^)]*)\\]\\]/;\r\n var groupRightProperties = [];\r\n\r\n angular.forEach(groupRightValues, (value, key) => {\r\n if (value && value.match(regEx)) {\r\n groupRightProperties.push(this.helper.toCamelCase(regEx.exec(value)[1]));\r\n }\r\n });\r\n\r\n if (groupRightProperties.length > 0) {\r\n propertyNames = this.uniqueArray(propertyNames.concat(groupRightProperties));\r\n }\r\n });\r\n\r\n return propertyNames;\r\n };\r\n\r\n getAndEvalRuleSet(applicationDefinitionId: string, ruleId: string, value): angular.IPromise {\r\n var getRule = this.getRule(applicationDefinitionId, ruleId);\r\n return getRule.then((result) => {\r\n return this.evalRuleSet(result, value);\r\n });\r\n }\r\n\r\n evalRuleSet(ruleSet: IRuleSet, value: any): boolean {\r\n if (!ruleSet) {\r\n return false;\r\n }\r\n ruleSet.isSelected = false;\r\n if (ruleSet.groups.length > 1) {\r\n switch (ruleSet.groups[1].ruleGroupJoinOperator) {\r\n case this.joinOperator.And:\r\n if (this.evalRuleGroup(ruleSet.groups[0], value) && this.evalRuleGroup(ruleSet.groups[1], value)) {\r\n ruleSet.isSelected = true;\r\n }\r\n break;\r\n case this.joinOperator.Or:\r\n if (this.evalRuleGroup(ruleSet.groups[0], value) || this.evalRuleGroup(ruleSet.groups[1], value)) {\r\n ruleSet.isSelected = true;\r\n }\r\n break;\r\n default:\r\n ruleSet.isSelected = false;\r\n break;\r\n }\r\n\r\n if (ruleSet.groups.length > 2) {\r\n for (var i = 2; i < ruleSet.groups.length; i++) {\r\n switch (ruleSet.groups[i].ruleGroupJoinOperator) {\r\n case this.joinOperator.And:\r\n if (ruleSet.isSelected && this.evalRuleGroup(ruleSet.groups[i], value)) {\r\n ruleSet.isSelected = true;\r\n } else {\r\n ruleSet.isSelected = false;\r\n }\r\n break;\r\n case this.joinOperator.Or:\r\n if (ruleSet.isSelected || this.evalRuleGroup(ruleSet.groups[i], value)) {\r\n ruleSet.isSelected = true;\r\n } else {\r\n ruleSet.isSelected = false;\r\n }\r\n break;\r\n default:\r\n ruleSet.isSelected = false;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n ruleSet.isSelected = this.evalRuleGroup(ruleSet.groups[0], value);\r\n }\r\n\r\n return ruleSet.isSelected;\r\n }\r\n\r\n evalRuleGroup(ruleGroup: IRuleGroup, value: any): boolean {\r\n ruleGroup.isSelected = false;\r\n if (ruleGroup.rules.length > 1) {\r\n switch (ruleGroup.rules[1].ruleJoinOperator) {\r\n case this.joinOperator.And:\r\n if (this.evalRule(ruleGroup.rules[0], value) && this.evalRule(ruleGroup.rules[1], value)) {\r\n ruleGroup.isSelected = true;\r\n }\r\n break;\r\n case this.joinOperator.Or:\r\n if (this.evalRule(ruleGroup.rules[0], value) || this.evalRule(ruleGroup.rules[1], value)) {\r\n ruleGroup.isSelected = true;\r\n }\r\n break;\r\n default:\r\n ruleGroup.isSelected = false;\r\n break;\r\n }\r\n\r\n if (ruleGroup.rules.length > 2) {\r\n for (var i = 1; i < ruleGroup.rules.length; i++) {\r\n switch (ruleGroup.rules[i].ruleJoinOperator) {\r\n case this.joinOperator.And:\r\n if (ruleGroup.isSelected && this.evalRule(ruleGroup.rules[i], value)) {\r\n ruleGroup.isSelected = true;\r\n } else {\r\n ruleGroup.isSelected = false;\r\n }\r\n break;\r\n case this.joinOperator.Or:\r\n if (ruleGroup.isSelected || this.evalRule(ruleGroup.rules[i], value)) {\r\n ruleGroup.isSelected = true;\r\n } else {\r\n ruleGroup.isSelected = false;\r\n }\r\n break;\r\n default:\r\n ruleGroup.isSelected = false;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n ruleGroup.isSelected = this.evalRule(ruleGroup.rules[0], value);\r\n }\r\n\r\n return ruleGroup.isSelected;\r\n }\r\n\r\n evalRule(rule: IRule, value: any): boolean {\r\n if (rule && value) {\r\n var regEx = /\\[\\[([^)]*)\\]\\]/g;\r\n var jScriptRegEx = /{{([^}]*)}}/g;\r\n var codeLeftValue = this.helper.toCamelCase(rule.codeLeftValue);\r\n var leftValue = value[codeLeftValue];\r\n var rightValue = rule.valueRightValue;\r\n\r\n if (rightValue) {\r\n if (rightValue.toLowerCase() === \"null\") {\r\n rightValue = undefined;\r\n } else {\r\n if (rightValue.match(regEx)) {\r\n // if the right value contains a field lookup. IE [[FieldKey]] then it will use regex\r\n // to find the value inside the brackets and than use that as the lookup in the json object\r\n\r\n rightValue = rightValue.replace(regEx, (key, field) => {\r\n var fieldName = this.helper.toCamelCase(field);\r\n\r\n return value[fieldName];\r\n });\r\n }\r\n\r\n if (rightValue.match(jScriptRegEx)) {\r\n // if the right value contains a field lookup. IE [[FieldKey]] then it will use regex\r\n // to find the value inside the brackets and than use that as the lookup in the json object\r\n rightValue = rightValue.replace(jScriptRegEx, (key, expression) => {\r\n var result = eval(expression);\r\n return result;\r\n });\r\n }\r\n }\r\n }\r\n\r\n rule.isSelected = this.compareValues(leftValue, rightValue, rule.compareOperator);\r\n return rule.isSelected;\r\n\r\n }\r\n\r\n return false;\r\n\r\n }\r\n\r\n compareValues(leftValue: any, rightValue: any, operator: string): boolean {\r\n\r\n var result: boolean;\r\n var isDate = false;\r\n\r\n\r\n if (leftValue && (_.isString(leftValue) || _.isDate(leftValue)) && moment(leftValue).isValid()) {\r\n leftValue = moment((leftValue).replace(/T\\d{2}:\\d{2}:\\d{2}.\\d*Z/g, \"\"));\r\n if (rightValue && (_.isString(rightValue) || _.isDate(rightValue))) {\r\n rightValue = moment(rightValue);\r\n } else {\r\n rightValue = null;\r\n }\r\n isDate = true;\r\n }\r\n\r\n switch (operator) {\r\n case this.compareOperator.LessThan:\r\n if (isDate) {\r\n result = (leftValue).isBefore(rightValue, \"day\");\r\n } else {\r\n result = leftValue < rightValue;\r\n }\r\n break;\r\n case this.compareOperator.LessThanEqualTo:\r\n if (isDate) {\r\n result = (leftValue).isBefore(rightValue, \"day\") || (leftValue).isSame(rightValue, \"day\");\r\n } else {\r\n result = leftValue <= rightValue;\r\n }\r\n break;\r\n case this.compareOperator.Equal:\r\n if (isDate) {\r\n result = (leftValue).isSame(rightValue, \"day\");\r\n } else {\r\n if (_.isArray(leftValue)) {\r\n result = leftValue.toString() === rightValue;\r\n } else {\r\n result = leftValue === rightValue;\r\n }\r\n }\r\n break;\r\n case this.compareOperator.GreaterThan:\r\n if (isDate) {\r\n result = (leftValue).isAfter(rightValue, \"day\");\r\n } else {\r\n result = leftValue > rightValue;\r\n }\r\n break;\r\n case this.compareOperator.GreaterThanEqualTo:\r\n if (isDate) {\r\n result = (leftValue).isAfter(rightValue, \"day\") || (leftValue).isSame(rightValue, \"day\");\r\n } else {\r\n result = leftValue >= rightValue;\r\n }\r\n break;\r\n case this.compareOperator.NotEqual:\r\n if (isDate) {\r\n result = !(leftValue).isSame(rightValue, \"day\");\r\n } else {\r\n if (_.isArray(leftValue)) {\r\n result = leftValue.toString() !== rightValue;\r\n } else {\r\n result = leftValue !== rightValue;\r\n }\r\n }\r\n break;\r\n case this.compareOperator.Contains:\r\n if (!leftValue) {\r\n result = leftValue === rightValue;\r\n } else {\r\n result = leftValue.indexOf(rightValue) >= 0;\r\n }\r\n break;\r\n case this.compareOperator.DoesNotContain:\r\n if (!leftValue) {\r\n result = leftValue !== rightValue;\r\n } else {\r\n result = leftValue.indexOf(rightValue) < 0;\r\n }\r\n break;\r\n case this.compareOperator.StartsWith:\r\n if (leftValue) {\r\n result = leftValue.indexOf(rightValue) === 0;\r\n } else {\r\n result = false;\r\n }\r\n break;\r\n case this.compareOperator.EndsWith:\r\n if (leftValue) {\r\n result = leftValue.slice(rightValue.length) === rightValue;\r\n } else {\r\n result = false;\r\n }\r\n break;\r\n case this.compareOperator.IsNull:\r\n result = (typeof leftValue === \"undefined\") || leftValue === null || leftValue === \"\";\r\n break;\r\n case this.compareOperator.IsNotNull:\r\n result = (typeof leftValue !== \"undefined\") && leftValue != null && leftValue !== \"\";\r\n break;\r\n default:\r\n result = false;\r\n break;\r\n }\r\n\r\n\r\n return result;\r\n }\r\n\r\n getRule = (applicationDefinitionId: string, ruleId: string): angular.IPromise => {\r\n if (!this.rules) {\r\n return this.Restangular.all(applicationDefinitionId).all(\"rules\").getList().then((result) => {\r\n this.rules = result;\r\n var rule = _.find(this.rules, { \"id\": ruleId });\r\n return rule;\r\n }, (reason) => {\r\n console.log(\"Error Getting Rules\");\r\n });\r\n }\r\n var rule = _.find(this.rules, { \"id\": ruleId });\r\n var deferred = this.$q.defer();\r\n deferred.resolve(rule);\r\n return deferred.promise;\r\n };\r\n }\r\n\r\n angular.module(\"rules\").factory(RuleService.serviceId, [\"$q\", \"Restangular\", \"helper\", ($q, Restangular, helper) =>\r\n new RuleService($q, Restangular, helper)\r\n ]);\r\n\r\n}","/// \r\n/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IApplicationRouteParams extends angular.route.IRouteParamsService {\r\n organization: string;\r\n program: string;\r\n application: string;\r\n }\r\n\r\n interface IApplicationScope extends angular.IScope {\r\n vm: Application;\r\n applicationForm: angular.IFormController;\r\n modal: any;\r\n }\r\n\r\n interface IApplicationRootScope extends angular.IScope {\r\n stylesheets: Array;\r\n }\r\n\r\n interface ITranscriptInfo {\r\n schoolCeeb?: string;\r\n studentId?: string;\r\n sendTranscript: boolean;\r\n }\r\n\r\n interface IApplication {\r\n loading: boolean;\r\n appDef: IApplicationDefinition;\r\n userApplication: IUserApplication;\r\n response: angular.resource.IResource;\r\n closed: boolean;\r\n paymentInfo: IPaymentViewModel;\r\n logoPath: string;\r\n currentSection: string;\r\n userInfo: IUserInfoModel;\r\n user: any;\r\n showPayment: (type: string) => boolean;\r\n majors: Array;\r\n majorLists: Array;\r\n submitting: boolean;\r\n saving: boolean;\r\n transcriptInfo: ITranscriptInfo;\r\n canSendTranscript: boolean;\r\n today: Date;\r\n fee: number;\r\n submittalMessage: string;\r\n studentIdFieldKey: string;\r\n }\r\n\r\n class Application implements IApplication {\r\n static controllerId: string = \"application\";\r\n intervalPromise: angular.IPromise;\r\n static $inject: any = [\"$scope\", \"$rootScope\", \"$routeParams\", \"$location\", \"$sce\", \"$http\", \"$modal\", \"authentication\",\r\n \"common\", \"config\", \"userApplicationService\", \"Restangular\", \"ruleService\", \"$anchorScroll\", \"payeezyService\", \"$interval\"];\r\n loading: boolean;\r\n errors: Array = [];\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n appDef: IApplicationDefinition;\r\n userApplication: IUserApplication;\r\n response: angular.resource.IResource;\r\n paymentInfo: IPaymentViewModel;\r\n currentSection: string;\r\n userInfo: IUserInfoModel;\r\n logoPath: string;\r\n closed: boolean;\r\n majors: Array;\r\n majorLists: Array;\r\n submitting: boolean;\r\n saving: boolean;\r\n transcriptInfo: ITranscriptInfo = { sendTranscript: false };\r\n canSendTranscript: boolean = false;\r\n today = new Date();\r\n fee: number;\r\n submittalMessage: string;\r\n apploadStart: number;\r\n apploadComplete: number;\r\n paymentForm: any;\r\n user: any;\r\n activeTab: number;\r\n studentIdFieldKey: string;\r\n\r\n constructor(private $scope: IApplicationScope,\r\n private $rootScope: IApplicationRootScope,\r\n private $routeParams: IApplicationRouteParams,\r\n private $location: angular.ILocationService,\r\n private $sce: angular.ISCEService,\r\n private $http: angular.IHttpService,\r\n private $modal: mgcrea.ngStrap.modal.IModalService,\r\n private authentication: IAuthenticationProviderService,\r\n private common: ICommonService,\r\n private config: ICrossroadsConfig,\r\n private userApplicationService: IUserApplicationService,\r\n private Restangular: Restangular.IService,\r\n private ruleService: Rules.IRuleService,\r\n private $anchorScroll: angular.IAnchorScrollService,\r\n private payeezyService: IPayeezyService,\r\n private $interval: angular.IIntervalService) {\r\n\r\n this.apploadStart = performance.now();\r\n this.loading = true;\r\n this.common.$broadcast(config.events.spinnerToggle, { show: true });\r\n this.response = null;\r\n\r\n this.authentication.authenticate().then((result) => {\r\n if (result) {\r\n this.closed = false;\r\n this.log = common.logger.getLogFn(Application.controllerId);\r\n this.logError = common.logger.getLogFn(Application.controllerId, \"error\");\r\n this.submitting = false;\r\n this.saving = false;\r\n\r\n this.userInfo = this.authentication.getUser();\r\n this.activate();\r\n this.$rootScope.stylesheets = [];\r\n var baseStyleSheet = {\r\n link: \"/content/application.css\"\r\n };\r\n\r\n this.$rootScope.stylesheets.push(baseStyleSheet);\r\n this.intervalPromise = this.$interval(this.autoSave, 300000);\r\n }\r\n else {\r\n return;\r\n }\r\n });\r\n }\r\n\r\n private activate() {\r\n var self = this;\r\n this.common.activateController([this.getUserData(), this.getAppDef()], Application.controllerId)\r\n .then(() => {\r\n self.log(\"Activated Application Screen\");\r\n this.loading = false;\r\n this.apploadComplete = performance.now();\r\n\r\n if (this.userApplication) {\r\n appInsights.trackEvent(\"UserApplicationFormLoaded\",\r\n {\r\n ApplicationDefinitionId: this.appDef.applicationDefinitionId,\r\n Name: this.appDef.name,\r\n UserApplicationId: this.userApplication.id\r\n },\r\n { \"ApplicationFormLoadTime\": this.apploadComplete - this.apploadStart });\r\n }\r\n\r\n if (this.appDef.applicationMessageEnabled) {\r\n this.showApplicationMessage();\r\n }\r\n });\r\n\r\n }\r\n\r\n private isUpperCase = (value: string): boolean => {\r\n if (!isNaN(value * 1)) {\r\n return false;\r\n } else {\r\n if (value === value.toUpperCase()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n\r\n private convertCase = (value: string): string => {\r\n if (!value) {\r\n return value;\r\n }\r\n\r\n if (!this.isUpperCase(value.charAt(0))) {\r\n return value;\r\n }\r\n\r\n var chars = value.split(\"\");\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var hasNext = (i + 1 < chars.length);\r\n\r\n if (i > 0 && hasNext && !this.isUpperCase(chars[i + 1])) {\r\n break;\r\n }\r\n\r\n chars[i] = chars[i].toLowerCase();\r\n }\r\n\r\n return chars.join(\"\");\r\n };\r\n\r\n onCreate = (paymentForm) => {\r\n\r\n this.paymentForm = paymentForm;\r\n };\r\n authorizeSession = (callback: any) => {\r\n\r\n\r\n this.$http({\r\n method: \"POST\",\r\n url: this.config.apiHost + \"/\" + this.appDef.applicationDefinitionId + \"/payments/authorizeSession\"\r\n }).then((response: any) => {\r\n if (response.status >= 200 && response.status < 300) {\r\n callback(response.data);\r\n }\r\n },\r\n (response) => {\r\n this.submitting = false;\r\n this\r\n .logError(\"An error occurred while trying to authorize your card. This is NOT normally an issue with your credit card. Please try again or contact us at 866-866-CFNC(2362) if the error continues.\", response, true);\r\n });\r\n };\r\n\r\n checkCanSendTranscript = (): void => {\r\n if (this.studentIdFieldKey) {\r\n this.transcriptInfo.studentId = this.response[this.convertCase(this.studentIdFieldKey)];\r\n }\r\n\r\n if (this.appDef.canReceiveTranscripts && this.transcriptInfo.studentId && this.transcriptInfo.schoolCeeb) {\r\n this.Restangular.all(\"transcripts\").one(\"canSend\").get({ studentId: this.transcriptInfo.studentId, schoolCeeb: this.transcriptInfo.schoolCeeb }).then((result) => {\r\n this.canSendTranscript = result;\r\n }, (reason) => {\r\n this.canSendTranscript = false;\r\n this.logError(\"Failed to check transcript status\", reason, false);\r\n });\r\n } else {\r\n this.canSendTranscript = false;\r\n }\r\n };\r\n\r\n\r\n getAppDef() {\r\n return this.Restangular.all(\"application\")\r\n .customGET(\"/\" + this.$routeParams.organization + \"/\" + this.$routeParams.program + \"/\" + this.$routeParams.application).then((result) => {\r\n this.log(\"Retrieved Application Definition\");\r\n\r\n return this.getAppResponse(result.applicationDefinitionId).then(() => {\r\n angular.forEach(result.form.sections, (section) => { section.hasBeenLoaded = false; });\r\n this.appDef = result;\r\n this.logoPath = this.config.apiHost + \"/application/\" + this.appDef.applicationDefinitionId + \"/logo\";\r\n\r\n var appStyleSheet = {\r\n link: this.config.apiHost + \"/application/\" + this.appDef.applicationDefinitionId + \"/stylesheet\"\r\n };\r\n\r\n this.$rootScope.stylesheets.push(appStyleSheet);\r\n\r\n var application: any = this.appDef;\r\n\r\n if (application && application.form && application.form.sections.length > 0) {\r\n application.form.sections[0].active = true;\r\n }\r\n\r\n if (this.closed)\r\n return;\r\n\r\n if (this.response) {\r\n var groups = _.flatten(_.map(this.appDef.form.sections, \"groups\"));\r\n angular.forEach(groups, (group: IGroup) => {\r\n angular.forEach(group.fields, (field: IInputField) => {\r\n if (field.studentIdField) {\r\n this.studentIdFieldKey = field.key;\r\n this.transcriptInfo.studentId = this.response[this.convertCase(field.key)];\r\n }\r\n if (field.mostRecentHighSchoolCeeb) {\r\n this.transcriptInfo.schoolCeeb = this.response[this.convertCase(field.key)];\r\n }\r\n });\r\n });\r\n\r\n this.checkCanSendTranscript();\r\n }\r\n\r\n // returns a promise that will complete when all of the other data request are finished.\r\n return this.common.$q.all([this.getAppPaymentInfo(), this.getMajors(), this.getMajorLists()]);\r\n });\r\n\r\n }, (reason) => {\r\n this.logError(\"Failed to Retrieve Application Definition\", reason, true);\r\n });\r\n }\r\n\r\n getAppResponse = (appId) => {\r\n return this.Restangular.one(\"userApplications\").customGET(\"current/applicationDefinition?appDefId=\" + appId).then((result) => {\r\n this.log(\"Retrieved user's application response.\");\r\n this.userApplication = result;\r\n this.response = result.applicationResponse;\r\n }, (reason) => {\r\n if (reason.data && reason.data.modelState && reason.data.modelState.applicationClosed) {\r\n this.closed = true;\r\n } else {\r\n this.logError(\"Failed to retrieve the user's application response.\", reason);\r\n }\r\n });\r\n };\r\n\r\n getMajors = (): angular.IPromise> => {\r\n this.majors = [];\r\n var queryParams = {\r\n page: 1,\r\n pageSize: 128,\r\n sortBy: \"Name\",\r\n sortDirection: \"ASC\",\r\n filter: \"\"\r\n };\r\n\r\n\r\n return this.Restangular.one(this.appDef.applicationDefinitionId).withHttpConfig({ cache: true }).getList(\"majors\", queryParams).then((result) => {\r\n this.majors = this.Restangular.stripRestangular(result);\r\n return result;\r\n }, (reason) => {\r\n this.logError(\"An error occurred while getting the majors\", reason);\r\n return this.majors;\r\n });\r\n };\r\n\r\n getMajorLists = (): angular.IPromise> => {\r\n this.majorLists = [];\r\n\r\n return this.Restangular.all(this.appDef.applicationDefinitionId).all(\"majorlists\").withHttpConfig({ cache: true }).getList().then((result) => {\r\n this.majorLists = _.forEach(result, (value) => {\r\n value.id = value.id.toLowerCase();\r\n });\r\n return this.majorLists;\r\n }, (reason) => {\r\n this.logError(\"An error occurred while getting the major lists\", reason);\r\n return this.majorLists;\r\n });\r\n };\r\n\r\n getPaymentInfo = () => {\r\n return this.Restangular.all(\"userApplications\").one(\"paymentOptions\").get().then((result) => {\r\n this.log(\"Retrieved payment options\");\r\n this.paymentInfo = result;\r\n if (this.showPayment(\"NoPayment\")) {\r\n this.paymentInfo.paymentMethod = 'NoPayment';\r\n }\r\n }, (reason) => {\r\n this.logError(\"Failed to retrieve payment options\", reason);\r\n });\r\n };\r\n\r\n getAppPaymentInfo = () => {\r\n return this.Restangular.one(\"userApplications\").customGET(\"applicationPaymentOptions?appDefId=\" + this.appDef.applicationDefinitionId).then((result) => {\r\n this.log(\"Retrieved payment options\");\r\n console.log(result);\r\n this.paymentInfo = result;\r\n this.paymentInfo.availableCardTypes = _.drop(this.paymentInfo.availableCardTypes);\r\n if (this.showPayment(\"NoPayment\")) {\r\n this.paymentInfo.paymentMethod = 'NoPayment';\r\n }\r\n }, (reason) => {\r\n this.logError(\"Failed to retrieve payment options\", reason);\r\n });\r\n };\r\n\r\n getUserData = () => {\r\n return this.Restangular.all(\"account\").one(\"fullUserInfo\").get().then((result) => {\r\n this.log(\"Retrieved user data\");\r\n this.user = result;\r\n }, (reason) => {\r\n this.logError(\"Failed to retrieve user\", reason);\r\n });\r\n };\r\n\r\n saveApplication() {\r\n var startedSaving = performance.now();\r\n var form: any = this.$scope.applicationForm;\r\n form.$submitted = true;\r\n this.saving = true;\r\n if (this.$scope.applicationForm.$invalid) {\r\n var confirmation = this.$modal({\r\n templateUrl: \"adv/template/saveConfirmation.html\",\r\n backdrop: \"static\",\r\n controller: SaveDialog.controllerId,\r\n controllerAs: \"vm\",\r\n locals: {\r\n local: {\r\n confirm: () => {\r\n this.log(\"Saving Application\", this.userApplication, false);\r\n this.userApplication.put()\r\n .then(() => {\r\n // save was succesful\r\n this.saving = false;\r\n appInsights.trackEvent(\"UserApplicationSaved\",\r\n {\r\n ApplicationDefinitionId: this.appDef.applicationDefinitionId,\r\n Name: this.appDef.name,\r\n UserApplicationId: this.userApplication.id\r\n },\r\n {\r\n \"UserApplicationSaveDuration\": performance.now() - startedSaving\r\n });\r\n this.log(\"Application saved successfully\", \"Application saved successfully\", true);\r\n confirmation.hide();\r\n },\r\n (reason) => {\r\n this.saving = false;\r\n this.logError(\"An error occurred while trying to save your application.\",\r\n reason);\r\n confirmation.hide();\r\n });\r\n },\r\n cancel: () => {\r\n // user canceled the dialog\r\n this.saving = false;\r\n appInsights.trackEvent(\"UserApplicationSaveCanceled\",\r\n {\r\n ApplicationDefinitionId: this.appDef.applicationDefinitionId,\r\n Name: this.appDef.name,\r\n UserApplicationId: this.userApplication.id\r\n });\r\n confirmation.hide();\r\n }\r\n }\r\n }\r\n });\r\n\r\n } else {\r\n this.userApplication.put().then(() => {\r\n this.saving = false;\r\n appInsights.trackEvent(\"UserApplicationSaved\",\r\n {\r\n ApplicationDefinitionId: this.appDef.applicationDefinitionId,\r\n Name: this.appDef.name,\r\n UserApplicationId: this.userApplication.id\r\n },\r\n {\r\n \"UserApplicationSaveDuration\": performance.now() - startedSaving\r\n });\r\n this.log(\"Application saved successfully\", \"Application saved successfully\", true);\r\n }, (reason) => {\r\n this.logError(\"An error occurred while trying to save your application.\", reason);\r\n });\r\n }\r\n\r\n }\r\n\r\n saveApplicationAndOpenRDS() {\r\n var confirmation = this.$modal({\r\n templateUrl: \"adv/template/rdsSaveConfirmation.html\",\r\n controller: RdsSaveDialog.controllerId,\r\n controllerAs: \"vm\",\r\n locals: {\r\n local: {\r\n confirm: () => {\r\n this.log(\"Saving Application\", this.userApplication, false);\r\n this.saveApplicationWithoutConfirmation().then(() => {\r\n window.open(this.config.rdsUrl, \"_blank\");\r\n });\r\n },\r\n cancel: () => {\r\n // user canceled the dialog\r\n this.saving = false;\r\n confirmation.hide();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n saveApplicationWithoutConfirmation(): ng.IPromise {\r\n var defer = this.common.$q.defer();\r\n\r\n this.saving = true;\r\n this.log(\"Saving Application\", this.userApplication, false);\r\n this.userApplication.put()\r\n .then(() => {\r\n // save was succesful\r\n this.saving = false;\r\n this.log(\"Application saved successfully\", \"Application saved successfully\", true);\r\n defer.resolve();\r\n },\r\n (reason) => {\r\n this.saving = false;\r\n this.logError(\"An error occurred while trying to save your application.\",\r\n reason);\r\n defer.reject(reason);\r\n });\r\n return defer.promise;\r\n }\r\n\r\n autoSave = () => {\r\n if (!this.closed) {\r\n this.userApplication.put()\r\n .then(() => {\r\n },\r\n (reason) => {\r\n });\r\n }\r\n }\r\n\r\n submitApplication() {\r\n var startedSubmitting = performance.now();\r\n var form: any = this.$scope.applicationForm;\r\n form.$submitted = true;\r\n this.submitting = true;\r\n var confirmation = this.$modal({\r\n templateUrl: \"submitConfirmation.html\",\r\n backdrop: \"static\",\r\n controller: SaveDialog.controllerId,\r\n controllerAs: \"vm\",\r\n locals: {\r\n local: {\r\n confirm: () => {\r\n if (this.paymentInfo.cardNumber) {\r\n this.paymentInfo.cardNumber = this.paymentInfo.cardNumber.replace(/\\D/g, \"\");\r\n }\r\n\r\n var value = {\r\n application: this.userApplication,\r\n payment: this.paymentInfo,\r\n transcript: this.transcriptInfo\r\n };\r\n if (this.paymentInfo.paymentMethod === \"CreditCard\" && this.appDef.paymentFields && this.appDef.paymentFields.name === \"Payeezy\") {\r\n const onSuccess = (clientToken) => {\r\n console.log(`submit success; clientToken=\"${clientToken}\"`);\r\n this.paymentForm.reset(() => { });\r\n value.payment.token = clientToken;\r\n this.submit(value, startedSubmitting);\r\n };\r\n\r\n const onError = (error) => {\r\n if (error.message && error.message === \"form validation failed\") {\r\n error.message =\r\n \"Credit card information is invalid. Please fix any errors and try again.\";\r\n }\r\n this.submitting = false;\r\n this\r\n .logError(error.message, error, true);\r\n };\r\n\r\n this.paymentForm.onSubmit(onSuccess, onError);\r\n } else {\r\n this.submit(value, startedSubmitting);\r\n }\r\n\r\n confirmation.hide();\r\n },\r\n cancel: () => {\r\n // user canceled the dialog\r\n this.submitting = false;\r\n confirmation.hide();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n submit = (value, startedSubmitting: number) => {\r\n this.$interval.cancel(this.intervalPromise);\r\n\r\n this.Restangular.one(this.userApplication.id)\r\n .one(\"submit\")\r\n .customPUT(value)\r\n .then(() => {\r\n this.submitting = false;\r\n this.$location.path(\"/application/completed/\" + this.userApplication.id);\r\n appInsights.trackEvent(\"UserApplicationSubmitted\",\r\n {\r\n ApplicationDefinitionId: this.appDef.applicationDefinitionId,\r\n Name: this.appDef.name,\r\n UserApplicationId: this.userApplication.id\r\n },\r\n {\r\n \"UserApplicationSubmitDuration\": performance.now() - startedSubmitting\r\n });\r\n\r\n this.common.ga('send', 'event', 'application', 'submit', 'Submit College App', '1');\r\n },\r\n (reason) => {\r\n if (reason.status === 400 && reason.data && reason.data.message) {\r\n this.logError(reason.data.message, reason, true);\r\n } if (reason.data && reason.data.exceptionMessage === \"The card type is invalid\") {\r\n this\r\n .logError(\"The type of credit card provided is not accepted by this institution. Please try another card.\", reason, true);\r\n } else {\r\n this\r\n .logError(\"An unknown error has occurred while trying to submit your application. Please save and try again later.\", reason, true);\r\n }\r\n this.submitting = false;\r\n this.$interval(this.autoSave, 300000);\r\n });\r\n };\r\n\r\n setActiveSection(section: any) {\r\n if (section !== \"Submit Application\") {\r\n\r\n this.currentSection = section.text;\r\n section.hasBeenLoaded = true;\r\n } else {\r\n this.calculateFee();\r\n this.parseSubmittalMessage();\r\n this.checkCanSendTranscript();\r\n this.currentSection = section;\r\n }\r\n if (this.userApplication) {\r\n appInsights.trackPageView(`CrossRoads: ${this.appDef.name} - ${this.currentSection}`, this.$location.url(), {\r\n ApplicationDefinitionId: this.appDef.applicationDefinitionId,\r\n Name: this.appDef.name,\r\n UserApplicationId: this.userApplication.id\r\n });\r\n }\r\n\r\n }\r\n\r\n parseSubmittalMessage = () => {\r\n this.submittalMessage = this.appDef.submittalMessage.replace(\"[[Fee]]\", this.fee ? this.fee.toString() : \"0\");\r\n };\r\n\r\n calculateFee = () => {\r\n if (this.closed || this.showPayment(\"NoPayment\")) {\r\n return;\r\n }\r\n var dynamicFees = this.appDef.dynamicFees;\r\n\r\n for (var i = 0; i < dynamicFees.length; i++) {\r\n var dynamicFee = dynamicFees[i];\r\n if (!dynamicFee.ruleId || this.ruleService.evalRuleSet(dynamicFee.ruleSet, this.userApplication.applicationResponse)) {\r\n this.fee = dynamicFee.fee;\r\n break;\r\n }\r\n }\r\n };\r\n\r\n validateSection = (section: ISection): angular.IPromise => {\r\n if (section && this.userApplication) {\r\n return this.Restangular.one(this.userApplication.id).one(section.name).one(\"validate\").customPUT(this.userApplication).then((serviceResult: boolean) => {\r\n return serviceResult;\r\n }, reason => {\r\n this.logError(\"An unknown error has occurred while trying to validate an unloaded section.\", reason, true);\r\n return false;\r\n });\r\n } else {\r\n var defered = this.common.$q.defer();\r\n defered.resolve(false);\r\n return defered.promise;\r\n }\r\n };\r\n\r\n isSectionValid(section: ISection): boolean {\r\n var groupsCompiled = _.map(section.groups, \"isCompiled\");\r\n var compiled = true;\r\n angular.forEach(groupsCompiled, (value: boolean) => {\r\n if (!value) {\r\n compiled = false;\r\n }\r\n });\r\n\r\n return compiled;\r\n }\r\n\r\n\r\n /**\r\n * Method used by RequiredIf properties to evaluate the result of the provided rule\r\n * @param ruleSet The rule that is assigned to the RequiredIf parameter of field\r\n * @returns {boolean} True if the field should be required otherwise false\r\n */\r\n isRequired(ruleSet: Rules.IRuleSet): boolean {\r\n return this.ruleService.evalRuleSet(ruleSet, this.userApplication.applicationResponse);\r\n }\r\n\r\n showPayment(type: string) {\r\n var definition: any = this.appDef;\r\n var result = definition.acceptedPayments.indexOf(type) > -1;\r\n\r\n if (result) {\r\n switch (type) {\r\n case \"NoPayment\":\r\n if (definition.noPaymentRuleId) {\r\n result = this.ruleService.evalRuleSet(definition.noPaymentRule, this.userApplication.applicationResponse);\r\n }\r\n break;\r\n case \"Check\":\r\n if (definition.checkRuleId) {\r\n result = this.ruleService.evalRuleSet(definition.checkRule, this.userApplication.applicationResponse);\r\n }\r\n break;\r\n case \"CreditCard\":\r\n if (definition.creditCardRuleId) {\r\n result = this.ruleService.evalRuleSet(definition.creditCardRule, this.userApplication.applicationResponse);\r\n }\r\n break;\r\n case \"FeeWaiver\":\r\n if (definition.feeWaiverRuleId) {\r\n result = this.ruleService.evalRuleSet(definition.feeWaiverRule, this.userApplication.applicationResponse);\r\n }\r\n break;\r\n case \"PayLater\":\r\n if (definition.payLaterRuleId) {\r\n result = this.ruleService.evalRuleSet(definition.payLaterRule, this.userApplication.applicationResponse);\r\n }\r\n break;\r\n default:\r\n result = false;\r\n }\r\n }\r\n\r\n if (!result && this.paymentInfo.paymentMethod == type) {\r\n this.paymentInfo.paymentMethod = null\r\n }\r\n\r\n return result;\r\n }\r\n\r\n render(snippet) {\r\n return this.$sce.trustAsHtml(snippet);\r\n }\r\n\r\n wordCount = (text: string): number => {\r\n var s = text ? text.split(/\\s+/).length : 0;\r\n return s;\r\n };\r\n\r\n logout = () => {\r\n this.$location.path(\"/application/logout\");\r\n //this.authentication.logout();\r\n };\r\n\r\n getChoiceLabel(fieldKey) {\r\n var field: any;\r\n var choiceListId;\r\n this.appDef.form.sections.forEach((section) => {\r\n section.groups.forEach((group: any) => {\r\n if (group.fields.hasOwnProperty(fieldKey)) {\r\n field = group.fields[fieldKey];\r\n if (field.hasOwnProperty(\"choiceListId\")) {\r\n choiceListId = field.choiceListId.replace(\"C\", \"c\");\r\n }\r\n }\r\n });\r\n });\r\n\r\n if (choiceListId) {\r\n var choiceList = this.appDef[\"choiceLists\"][choiceListId];\r\n var choiceLabel = _.result(_.find(choiceList.choices, { value: this.response[fieldKey] }), \"label\");\r\n return choiceLabel;\r\n } else {\r\n return \"\";\r\n }\r\n\r\n\r\n }\r\n\r\n finishApplication() {\r\n let form = this.$scope.applicationForm;\r\n form.$submitted = true;\r\n if (!form.$invalid) {\r\n this.setActiveSection('Submit Application');\r\n this.activeTab = this.appDef.form.sections.length\r\n }\r\n else {\r\n var warning = this.$modal({\r\n title: \"Unable to Continue\",\r\n content: \"Some fields on your application are invalid or incomplete. Please return to pages without a checkmark indicator and correct the questions in red to complete your application.\",\r\n locals: {\r\n local: {\r\n cancel: () => {\r\n warning.hide();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n showApplicationMessage() {\r\n var applicationMessage = this.$modal({\r\n scope: this.$scope,\r\n controllerAs: \"vm\",\r\n templateUrl: \"adv/template/applicationMessage.html\",\r\n backdrop: \"static\",\r\n locals: {\r\n local: {\r\n close: () => {\r\n applicationMessage.hide();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(Application.controllerId, Application);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IApplicationModalScope extends ng.IScope {\r\n close: () => void;\r\n userApplication: any;\r\n applicationDefinition: any;\r\n }\r\n\r\n interface IApplicationModal {\r\n\r\n }\r\n\r\n interface IApplicationData { userApp: Advant.Crossroads.IUserApplicationViewModel; appDef: Advant.Crossroads.IApplicationDefinition }\r\n\r\n class ApplicationModal implements IApplicationModal {\r\n static $inject: Array = [\"$uibModalInstance\", \"common\", \"$scope\", \"Restangular\", \"appData\"];\r\n static controllerId: string = \"applicationModal\";\r\n userApplication: any;\r\n applicationDefinition: any;\r\n logError: (msg, data?, showHowl?) => void;\r\n\r\n constructor(private $uibModalInstance: ng.ui.bootstrap.IModalServiceInstance,\r\n private common: ICommonService,\r\n private $scope: IApplicationModalScope,\r\n private Restangular: Restangular.IService,\r\n appData: IApplicationData) {\r\n this.logError = common.logger.getLogFn(ApplicationModal.controllerId, \"error\");\r\n $scope.close = () => this.close();\r\n $scope.userApplication = appData.userApp; \r\n $scope.applicationDefinition = appData.appDef; \r\n }\r\n\r\n close() { \r\n this.$uibModalInstance.dismiss();\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(ApplicationModal.controllerId, ApplicationModal);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IConfirmationRouteParams extends angular.route.IRouteParamsService {\r\n userApplicationId: string;\r\n }\r\n\r\n interface IConfirmationScope extends angular.IScope {\r\n vm: Confirmation;\r\n applicationForm: angular.IFormController;\r\n }\r\n\r\n interface IConfirmationRootScope extends angular.IScope {\r\n stylesheets: Array;\r\n }\r\n\r\n interface IConfirmation {\r\n loading: boolean;\r\n appDef: IApplicationDefinition;\r\n userApplication: IUserApplication;\r\n }\r\n\r\n class Confirmation implements IConfirmation {\r\n static controllerId: string = \"confirmation\";\r\n static $inject: any = [\r\n \"$scope\", \"$rootScope\", \"$routeParams\", \"$location\", \"$sce\", \"$uibModal\", \"authentication\",\r\n \"common\", \"config\", \"userApplicationService\", \"Restangular\"\r\n ];\r\n loading: boolean;\r\n errors: Array = [];\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n appDef: IApplicationDefinition;\r\n userApplication: IUserApplication;\r\n response: angular.resource.IResource;\r\n paymentInfo: angular.resource.IResource;\r\n currentSection: string;\r\n userInfo: IUserInfoModel;\r\n logoPath: string;\r\n closed: boolean;\r\n majors: Array;\r\n majorLists: Array;\r\n\r\n\r\n constructor(private $scope: IConfirmationScope,\r\n private $rootScope: IConfirmationRootScope,\r\n private $routeParams: IConfirmationRouteParams,\r\n private $location: angular.ILocationService,\r\n private $sce: angular.ISCEService,\r\n private $uibModal: angular.ui.bootstrap.IModalService,\r\n private authentication: IAuthenticationProviderService,\r\n private common: ICommonService,\r\n private config: Advant.Crossroads.ICrossroadsConfig,\r\n private userApplicationService: IUserApplicationService,\r\n private Restangular: Restangular.IService) {\r\n\r\n this.loading = true;\r\n\r\n this.authentication.authenticate().then((result) => {\r\n if (result) {\r\n this.closed = false;\r\n this.log = common.logger.getLogFn(LoginController.controllerId);\r\n this.logError = common.logger.getLogFn(LoginController.controllerId, \"error\");\r\n\r\n\r\n this.activate();\r\n this.$rootScope.stylesheets = [];\r\n var baseStyleSheet = {\r\n link: \"/content/application.css\"\r\n };\r\n\r\n this.$rootScope.stylesheets.push(baseStyleSheet);\r\n this.userInfo = this.authentication.getUser();\r\n }\r\n else {\r\n return;\r\n }\r\n\r\n });\r\n }\r\n\r\n private activate() {\r\n var self = this;\r\n this.common.activateController([\r\n this.getAppResponse()\r\n .then(this.getAppDef)\r\n ], Confirmation.controllerId)\r\n .then(result => {\r\n self.loading = false;\r\n self.log(\"Activated Confirmation Screen\");\r\n });\r\n }\r\n\r\n getAppDef = () => {\r\n return this.Restangular.all(\"application\")\r\n .customGET(this.userApplication.applicationDefinitionId).then((result) => {\r\n this.log(\"Retrieved Application Definition\");\r\n this.appDef = result;\r\n this.logoPath = this.config.apiHost + \"/application/\" + this.appDef.applicationDefinitionId + \"/logo\";\r\n\r\n var appStyleSheet = {\r\n link: this.config.apiHost + \"/application/\" + this.appDef.applicationDefinitionId + \"/stylesheet\"\r\n };\r\n\r\n this.$rootScope.stylesheets.push(appStyleSheet);\r\n\r\n }, (reason) => {\r\n this.logError(\"Failed to Retrieve Application Definition\", reason, true);\r\n });\r\n }\r\n\r\n getAppResponse = () => {\r\n return this.Restangular.one(\"userApplications\", this.$routeParams.userApplicationId).get().then((result) => {\r\n this.log(\"Retrieved user's application response.\");\r\n this.userApplication = result;\r\n this.response = result.applicationResponse;\r\n }, (reason) => {\r\n if (reason.data && reason.data.modelState && reason.data.modelState.applicationClosed) {\r\n this.closed = true;\r\n } else {\r\n this.logError(\"Failed to retrieve the user's application response.\", reason);\r\n }\r\n });\r\n };\r\n\r\n openApplicationModal() {\r\n var appData = { appDef: this.appDef, userApp: this.userApplication };\r\n var modalInstance = this.$uibModal.open({\r\n templateUrl: '/app/application/applicationModal.html',\r\n controller: 'applicationModal',\r\n size: 'xlg',\r\n resolve: {\r\n appData: function () { return appData; }\r\n }\r\n });\r\n\r\n modalInstance.result.then(() => { }, () => { });\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(Confirmation.controllerId, Confirmation);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n export interface IRdsSaveDialogScope extends mgcrea.ngStrap.modal.IModalScope {\r\n yes: () => void;\r\n no: () => void;\r\n }\r\n\r\n export interface IRdsSaveDialog {\r\n\r\n }\r\n\r\n export class RdsSaveDialog implements IRdsSaveDialog {\r\n static controllerId: string = \"rdsSaveDialog\";\r\n static $inject: any = [\"local\"];\r\n\r\n constructor(private local) {\r\n }\r\n\r\n yes() {\r\n this.local.confirm();\r\n }\r\n\r\n no() {\r\n this.local.cancel();\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(RdsSaveDialog.controllerId, RdsSaveDialog);\r\n}\r\n","/// \r\nnamespace Advant.Crossroads {\r\n export interface ISaveDialogScope extends mgcrea.ngStrap.modal.IModalScope {\r\n yes: () => void;\r\n no: () => void;\r\n }\r\n\r\n export interface ISaveDialog {\r\n\r\n }\r\n\r\n export class SaveDialog implements ISaveDialog {\r\n static controllerId: string = \"saveDialog\";\r\n static $inject: any = [\"local\"];\r\n\r\n constructor(private local) {\r\n }\r\n\r\n yes() {\r\n this.local.confirm();\r\n }\r\n\r\n no() {\r\n this.local.cancel();\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(SaveDialog.controllerId, SaveDialog);\r\n}\r\n","namespace Advant.Crossroads {\r\n export class CrossroadsStorage {\r\n public static userName: string = \"userInfo.userName\";\r\n public static firstName = \"userInfo.firstName\";\r\n public static lastName: string = \"userInfo.lastName\";\r\n public static fullName: string = \"userInfo.fullName\";\r\n public static tenant: string = \"userInfo.tenant\";\r\n public static loginProvider: string = \"userInfo.loginProvider\";\r\n public static hasRegistered: string = \"userInfo.hasRegistered\";\r\n public static timeZone: string = \"userInfo.timeZone\";\r\n public static accessToken: string = \"accessToken\";\r\n public static refreshToken: string = \"refreshToken\";\r\n public static redirectTarget: string = \"redirectTarget\";\r\n public static rememberMe: string = \"rememberMe\";\r\n public static ctpEligible = \"ctpEligible\";\r\n public static cteEligible = \"cteEligible\";\r\n public static cihsEligible = \"cihsEligible\";\r\n public static rcn = \"rcn\";\r\n public static dateOfBirth = \"dateOfBirth\";\r\n public static refreshTokenExpiresIn = \"refreshTokenExpiresIn\";\r\n public static expiresOn = \"expiresOn\";\r\n }\r\n} ","/// \r\nnamespace Advant.Crossroads {\r\n /* tslint:disable: no-string-literal */\r\n export interface IAuthUrls {\r\n apiHost: string;\r\n site: string;\r\n register: string;\r\n login: string;\r\n logout: string;\r\n userInfo: string;\r\n changePassword: string;\r\n forcePasswordChange: string;\r\n externalLogins: string;\r\n registerExternal: string;\r\n cfncLogin: string;\r\n exchangeToken: string;\r\n }\r\n\r\n export interface IAuthenticationFactory {\r\n getUserInfo(accessToken: string): angular.IPromise>;\r\n login(data: ILoginModel): angular.IPromise>;\r\n refreshToken(data: IRefreshTokenModel): angular.IPromise>;\r\n logout(accessToken: string): angular.IPromise>;\r\n register(data: RegistrationModel): angular.IPromise>;\r\n changePassword(data: any): angular.IPromise>;\r\n forcePasswordChange(data: any): angular.IPromise>;\r\n getExternalLogins(clientId: string): angular.IPromise>;\r\n registerExternal(accesToken: string, data: any): angular.IPromise>;\r\n getToken(clientId: string): angular.IPromise>;\r\n }\r\n\r\n export interface IAuthenticationProviderUrls {\r\n login: string;\r\n registerExternal: string;\r\n postLogout: string;\r\n home: string;\r\n cfncHostLogin: string;\r\n }\r\n\r\n export interface IAuthenticationEvents {\r\n login: string;\r\n logout: string;\r\n register: string;\r\n reloadUser: string;\r\n closeOAuthWindow: string;\r\n }\r\n\r\n export interface IAuthenticationProviderService {\r\n user: any;\r\n externalUser: any;\r\n externalLogins: Array;\r\n cfncLogin(accessToken): angular.IPromise>;\r\n login(data: ILoginModel): angular.IPromise>;\r\n refreshToken(): angular.IPromise>;\r\n loginWithExternal(login: IExternalLoginViewModel, data: ILoginModel): angular.IPromise>;\r\n logout(): angular.IPromise>;\r\n register(data: RegistrationModel): angular.IPromise>;\r\n registerExternal(): angular.IPromise>;\r\n changePassword(data: any): angular.IPromise>;\r\n forcePasswordChange(data: any): angular.IPromise>;\r\n authenticate(): angular.IPromise>;\r\n redirectAuthenticated(url: string): void;\r\n getUser(): IUserInfoModel;\r\n accessToken: (accessToken?: string, refreshToken?: string, persist?: boolean) => string;\r\n setLogoutTimer: () => void;\r\n checkLogin: () => void;\r\n }\r\n\r\n // angular authorization factory\r\n export class AuthenticationFactory implements IAuthenticationFactory {\r\n private formHeader: any;\r\n\r\n static $inject: any = [\"$http\", \"authentication.urls\"];\r\n\r\n constructor(private $http: angular.IHttpService, private urls: IAuthUrls) {\r\n this.formHeader = { \"Content-Type\": \"application/x-www-form-urlencoded\" };\r\n\r\n var api = this.urls.apiHost;\r\n if (api) {\r\n this.urls.login = api + this.urls.login;\r\n this.urls.register = api + this.urls.register;\r\n this.urls.logout = api + this.urls.logout;\r\n this.urls.userInfo = api + this.urls.userInfo;\r\n this.urls.changePassword = api + this.urls.changePassword;\r\n this.urls.forcePasswordChange = api + this.urls.forcePasswordChange;\r\n this.urls.externalLogins = api + this.urls.externalLogins;\r\n this.urls.registerExternal = api + this.urls.registerExternal;\r\n this.urls.cfncLogin = api + this.urls.cfncLogin;\r\n this.urls.exchangeToken = api + this.urls.exchangeToken;\r\n }\r\n }\r\n\r\n // Form Encode login data\r\n private formEncode(data: any) {\r\n var param = obj => {\r\n var query = \"\";\r\n var subValue, fullSubName, innerObj, i;\r\n angular.forEach(obj, (value, name: any) => {\r\n if (value instanceof Array) {\r\n for (i = 0; i < value.length; ++i) {\r\n subValue = value[i];\r\n fullSubName = name + \"[\" + i + \"]\";\r\n innerObj = {};\r\n innerObj[fullSubName] = subValue;\r\n query += param(innerObj) + \"&\";\r\n }\r\n } else if (value instanceof Object) {\r\n angular.forEach(value, (subValue, subName) => {\r\n fullSubName = name + \"[\" + subName + \"]\";\r\n innerObj = {};\r\n innerObj[fullSubName] = subValue;\r\n query += param(innerObj) + \"&\";\r\n });\r\n } else if (value !== undefined && value !== null) {\r\n query += encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \"&\";\r\n }\r\n });\r\n\r\n return query.length ? query.substr(0, query.length - 1) : query;\r\n };\r\n return angular.isObject(data) && String(data) !== \"[object File]\" ? param(data) : data;\r\n }\r\n\r\n getUserInfo(accessToken: string): angular.IPromise> {\r\n return this.$http({ url: this.urls.userInfo, method: \"GET\", headers: { \"Authorization\": \"Bearer \" + accessToken } });\r\n }\r\n\r\n cfncLogin(accessToken: string, clientId: string, returnUrl: string): angular.IPromise> {\r\n return this.$http({ url: this.urls.cfncLogin + \"?provider=Bearer&client_id=\" + clientId + \"&redirect_uri=\" + returnUrl, method: \"GET\", headers: { \"Authorization\": \"Bearer \" + accessToken } });\r\n }\r\n\r\n login(data: ILoginModel): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.login, data: this.formEncode(data), headers: this.formHeader });\r\n }\r\n\r\n refreshToken(data: IRefreshTokenModel): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.login, data: this.formEncode(data), headers: this.formHeader });\r\n }\r\n\r\n logout(accessToken: string): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.logout, headers: { \"Authorization\": \"Bearer \" + accessToken } });\r\n }\r\n\r\n register(data: RegistrationModel): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.register, data: data });\r\n }\r\n\r\n changePassword(data: any): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.changePassword, data: data });\r\n }\r\n\r\n forcePasswordChange(data: any): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.forcePasswordChange, data: data });\r\n }\r\n\r\n getExternalLogins(clientId: string): angular.IPromise> {\r\n return this.$http({\r\n method: \"GET\",\r\n url: this.urls.externalLogins + \"?returnUrl=\" + encodeURIComponent(this.urls.site) + \"&clientId=\" + clientId + \"&generateState=true\"\r\n });\r\n }\r\n\r\n registerExternal(accessToken: string, data: any): angular.IPromise> {\r\n return this.$http({ method: \"POST\", url: this.urls.registerExternal, data: data, headers: { \"Authorization\": \"Bearer \" + accessToken } });\r\n }\r\n\r\n getToken = (clientId: string): angular.IPromise => {\r\n return this.$http({ url: this.urls.exchangeToken + \"?clientId=\" + clientId, method: \"GET\" });\r\n };\r\n }\r\n\r\n export class AuthenticationProvider {\r\n registerThenLogin: boolean = true;\r\n usePopups: boolean = false;\r\n useFullRefreshForLoginUrl = true;\r\n useFullRefreshForRedirect = false;\r\n providerUrls: IAuthenticationProviderUrls = {\r\n login: \"/login\",\r\n registerExternal: \"/registerExternal\",\r\n postLogout: \"https://localhost:44373/Identity/Account/Logout\",\r\n home: \"/\",\r\n cfncHostLogin: \"https://localhost:44373/Identity/Account/Login\"\r\n };\r\n events: IAuthenticationEvents = {\r\n login: null,\r\n logout: null,\r\n register: null,\r\n reloadUser: null,\r\n closeOAuthWindow: null\r\n };\r\n clientId: string;\r\n\r\n\r\n $get: Array;\r\n\r\n constructor(public apiUrls: IAuthUrls) {\r\n this.clientId = \"CrossRoadsLocal\";\r\n\r\n this.$get = [\"authentication.api\", \"$rootScope\", \"$q\", \"$http\", \"$location\", \"$timeout\", \"$window\", \"$cookies\", \"$uibModal\", \"config\", \"Idle\", \"dialogs\",\r\n (api, $rootScope, $q, $http, $location, $timeout, $window, $cookies, $uibModal, config, Idle, dialogs) => {\r\n return new AuthenticationProviderService(api, this, $rootScope, $q, $http, $location, $timeout, $window, $cookies, $uibModal, config, Idle, dialogs);\r\n }];\r\n }\r\n }\r\n\r\n export class AuthenticationProviderService implements IAuthenticationProviderService {\r\n private externalLoginWindowTimer: any;\r\n\r\n user: IUserInfoModel;\r\n externalUser: any;\r\n externalLogins: Array;\r\n\r\n logoutTimer: angular.IPromise;\r\n warningDialog: angular.ui.bootstrap.IModalServiceInstance;\r\n\r\n constructor(private api: AuthenticationFactory,\r\n private authProvider: AuthenticationProvider,\r\n private $rootScope: angular.IRootScopeService,\r\n private $q: angular.IQService,\r\n private $http: angular.IHttpService,\r\n private $location: angular.ILocationService,\r\n private $timeout: angular.ITimeoutService,\r\n private $window: angular.IWindowService,\r\n private $cookies: angular.cookies.ICookiesService,\r\n private $uibModal: angular.ui.bootstrap.IModalService,\r\n private config: ICrossroadsConfig,\r\n private Idle: angular.idle.IIdleService,\r\n private dialogs: angular.dialogs.IDialogService) {\r\n\r\n\r\n $rootScope.$on(\"IdleStart\", () => {\r\n this.warningDialog = this.dialogs.create(\"/app/login/logoutDialog.html\", \"logoutDialog\");\r\n });\r\n\r\n $rootScope.$on(\"IdleEnd\", () => {\r\n this.warningDialog.close();\r\n });\r\n\r\n $rootScope.$on(\"IdleTimeout\", () => {\r\n this.warningDialog.close();\r\n this.logout();\r\n });\r\n\r\n this.initialize();\r\n }\r\n\r\n checkLogin = () => {\r\n var cookie = this.$cookies.get(this.config.authCookieName);\r\n if (!cookie) {\r\n this.user = null;\r\n this.clearUserInfo();\r\n this.accessToken(\"clear\");\r\n } else if (!this.accessToken()) {\r\n this.exchangeToken();\r\n }\r\n };\r\n\r\n accessToken(accessToken?: string, refreshToken?: string, persist?: boolean, expiresOn?: string): string {\r\n if (accessToken) {\r\n if (accessToken === \"clear\") {\r\n localStorage.removeItem(CrossroadsStorage.accessToken);\r\n sessionStorage.removeItem(CrossroadsStorage.accessToken);\r\n } else {\r\n if (persist) {\r\n localStorage[CrossroadsStorage.refreshToken] = refreshToken;\r\n } else {\r\n sessionStorage[CrossroadsStorage.refreshToken] = refreshToken;\r\n }\r\n sessionStorage[CrossroadsStorage.expiresOn] = expiresOn ? moment.utc(expiresOn, \"ddd, DD MMM YYYY HH:mm:ss\") : null;\r\n sessionStorage[CrossroadsStorage.accessToken] = accessToken;\r\n }\r\n }\r\n return sessionStorage[CrossroadsStorage.accessToken] || localStorage[CrossroadsStorage.accessToken];\r\n }\r\n\r\n private handleExternalData(externalData: any, provider: string, rememberMe: boolean): angular.IPromise {\r\n var deferred = this.$q.defer();\r\n\r\n // return if there was an error\r\n if (externalData.error) {\r\n deferred.reject({ message: externalData.error });\r\n } else {\r\n // get user info and login or show external register screen\r\n this.api.getUserInfo(externalData.access_token).then(user => {\r\n if (user.data.hasRegistered) {\r\n this.accessToken(externalData.access_token);\r\n this.user = user.data;\r\n appInsights.setAuthenticatedUserContext(user.data.userName);\r\n this.redirectAuthenticated(this.redirectTarget() || this.authProvider.providerUrls.home);\r\n if (this.authProvider.events.login) {\r\n this.loginHandler(user.data);\r\n }\r\n deferred.resolve(this.user);\r\n } else {\r\n this.externalUser = user.data;\r\n this.externalUser.access_token = externalData.access_token;\r\n this.externalUser.provider = provider;\r\n\r\n if (rememberMe != null) {\r\n localStorage[CrossroadsStorage.rememberMe] = rememberMe;\r\n }\r\n\r\n this.$location.path(this.authProvider.providerUrls.registerExternal);\r\n deferred.reject();\r\n }\r\n });\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n private initialize(): void {\r\n if (this.$location.search().access_token && !this.accessToken()) {\r\n this.cfncLogin(this.$location.search().access_token);\r\n }\r\n if (this.$location.hash().indexOf(\"access_token\") !== -1) {\r\n var externalData = this.parseQueryString(this.$location.hash());\r\n var login = \"CFNC\";\r\n var rememberMe = false;\r\n if (localStorage[CrossroadsStorage.rememberMe]) {\r\n rememberMe = JSON.parse(localStorage[CrossroadsStorage.rememberMe]);\r\n delete localStorage[CrossroadsStorage.rememberMe];\r\n }\r\n delete localStorage[CrossroadsStorage.loginProvider];\r\n this.handleExternalData(externalData, login, rememberMe);\r\n }\r\n\r\n // check for access token and get user info\r\n if (this.accessToken()) {\r\n this.api.getUserInfo(this.accessToken()).then((user) => {\r\n this.user = user.data;\r\n this.setUserInfo(user.data);\r\n if (this.authProvider.events.reloadUser) {\r\n this.reloadUserHandler(user.data);\r\n }\r\n });\r\n }\r\n\r\n // fetch list of external logins\r\n this.api.getExternalLogins(this.authProvider.clientId).then((logins) => {\r\n this.externalLogins = logins.data;\r\n });\r\n }\r\n\r\n private parseQueryString(q: string): any {\r\n var data = {};\r\n var pair, separatorIndex, escapedKey, escapedValue, key, value;\r\n\r\n if (q === null) {\r\n return data;\r\n }\r\n\r\n var pairs = q.split(\"&\");\r\n\r\n for (var i = 0; i < pairs.length; i++) {\r\n pair = pairs[i];\r\n separatorIndex = pair.indexOf(\"=\");\r\n\r\n if (separatorIndex === -1) {\r\n escapedKey = pair;\r\n escapedValue = null;\r\n } else {\r\n escapedKey = pair.substr(0, separatorIndex);\r\n escapedValue = pair.substr(separatorIndex + 1);\r\n }\r\n\r\n key = decodeURIComponent(escapedKey);\r\n value = decodeURIComponent(escapedValue);\r\n\r\n data[key] = value;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private redirectTarget(newTarget?: string): string {\r\n if (newTarget === \"clear\") {\r\n sessionStorage.removeItem(CrossroadsStorage.redirectTarget);\r\n return null;\r\n }\r\n if (newTarget) {\r\n console.log(\"Changing redirectTarget to:\" + newTarget);\r\n sessionStorage[CrossroadsStorage.redirectTarget] = newTarget;\r\n }\r\n return sessionStorage[CrossroadsStorage.redirectTarget];\r\n }\r\n\r\n private setUserInfo(userInfo: IUserInfoModel) {\r\n sessionStorage[CrossroadsStorage.userName] = userInfo.userName;\r\n sessionStorage[CrossroadsStorage.firstName] = userInfo.firstName;\r\n sessionStorage[CrossroadsStorage.lastName] = userInfo.lastName;\r\n sessionStorage[CrossroadsStorage.fullName] = userInfo.fullName;\r\n sessionStorage[CrossroadsStorage.tenant] = userInfo.tenant;\r\n sessionStorage[CrossroadsStorage.hasRegistered] = userInfo.hasRegistered;\r\n sessionStorage[CrossroadsStorage.loginProvider] = userInfo.loginProvider;\r\n sessionStorage[CrossroadsStorage.timeZone] = userInfo.timeZone;\r\n sessionStorage[CrossroadsStorage.ctpEligible] = userInfo.ctpEligible;\r\n sessionStorage[CrossroadsStorage.cteEligible] = userInfo.cteEligible;\r\n sessionStorage[CrossroadsStorage.cihsEligible] = userInfo.cihsEligible;\r\n sessionStorage[CrossroadsStorage.rcn] = userInfo.rcn;\r\n sessionStorage[CrossroadsStorage.dateOfBirth] = userInfo.dateOfBirth;\r\n }\r\n\r\n private clearUserInfo() {\r\n sessionStorage.removeItem(CrossroadsStorage.userName);\r\n sessionStorage.removeItem(CrossroadsStorage.firstName);\r\n sessionStorage.removeItem(CrossroadsStorage.lastName);\r\n sessionStorage.removeItem(CrossroadsStorage.fullName);\r\n sessionStorage.removeItem(CrossroadsStorage.tenant);\r\n sessionStorage.removeItem(CrossroadsStorage.hasRegistered);\r\n sessionStorage.removeItem(CrossroadsStorage.loginProvider);\r\n sessionStorage.removeItem(CrossroadsStorage.timeZone);\r\n sessionStorage.removeItem(CrossroadsStorage.ctpEligible);\r\n sessionStorage.removeItem(CrossroadsStorage.cteEligible);\r\n sessionStorage.removeItem(CrossroadsStorage.cihsEligible);\r\n sessionStorage.removeItem(CrossroadsStorage.rcn);\r\n sessionStorage.removeItem(CrossroadsStorage.dateOfBirth);\r\n\r\n }\r\n\r\n getUserInfo(): angular.IPromise {\r\n var deferred = this.$q.defer();\r\n var userInfo: IUserInfoModel;\r\n var auth = this;\r\n this.api.getUserInfo(this.accessToken()).then(result => {\r\n userInfo = result.data;\r\n auth.setUserInfo(userInfo);\r\n deferred.resolve(userInfo);\r\n }, reason => {\r\n deferred.reject(reason);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n getUser = (): IUserInfoModel => {\r\n var userInfo: IUserInfoModel;\r\n if (sessionStorage[CrossroadsStorage.userName]) {\r\n userInfo = {\r\n userName: sessionStorage[CrossroadsStorage.userName],\r\n firstName: sessionStorage[CrossroadsStorage.firstName],\r\n lastName: sessionStorage[CrossroadsStorage.lastName],\r\n fullName: sessionStorage[CrossroadsStorage.fullName],\r\n tenant: sessionStorage[CrossroadsStorage.tenant],\r\n hasRegistered: sessionStorage[CrossroadsStorage.hasRegistered],\r\n loginProvider: sessionStorage[CrossroadsStorage.loginProvider],\r\n timeZone: sessionStorage[CrossroadsStorage.timeZone],\r\n ctpEligible: sessionStorage[CrossroadsStorage.ctpEligible] === \"true\",\r\n cteEligible: sessionStorage[CrossroadsStorage.cteEligible] === \"true\",\r\n cihsEligible: sessionStorage[CrossroadsStorage.cihsEligible] === \"true\",\r\n rcn: sessionStorage[CrossroadsStorage.rcn],\r\n dateOfBirth: sessionStorage[CrossroadsStorage.dateOfBirth],\r\n };\r\n } else {\r\n return this.user;\r\n }\r\n return userInfo;\r\n };\r\n\r\n public exchangeToken = (): angular.IPromise> => {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n var clientId = this.authProvider.clientId;\r\n var auth = this;\r\n\r\n this.api.getToken(clientId).then((result) => {\r\n auth.accessToken(result.data.access_token, result.data.refresh_token, false, result.data[\".expires\"]);\r\n sessionStorage[CrossroadsStorage.refreshTokenExpiresIn] = result.data[\"cfi:refreshExpiresIn\"];\r\n auth.getUserInfo()\r\n .then((userInfo: any) => {\r\n auth.user = userInfo;\r\n if (auth.authProvider.events.login) {\r\n this.loginHandler(userInfo);\r\n }\r\n deferred.resolve(result);\r\n }, (reason) => {\r\n deferred.reject(reason);\r\n });\r\n\r\n\r\n },\r\n (reason) => {\r\n console.warn(reason);\r\n deferred.reject(reason);\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n\r\n login(data: ILoginModel): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n var auth = this;\r\n\r\n data.grant_type = \"password\";\r\n data.client_id = this.authProvider.clientId;\r\n if (!data.tenant) {\r\n data.tenant = \"AdvantSystems\";\r\n }\r\n\r\n this.api.login(data)\r\n .then(result => {\r\n auth.accessToken(result.data.access_token, result.data.refresh_token, data.rememberMe, result.data[\".expires\"]);\r\n sessionStorage[CrossroadsStorage.refreshTokenExpiresIn] = result.data[\"cfi:refreshExpiresIn\"];\r\n sessionStorage[CrossroadsStorage.rememberMe] = data.rememberMe;\r\n auth.getUserInfo()\r\n .then((userInfo: any) => {\r\n auth.user = userInfo;\r\n auth.redirectAuthenticated(this.redirectTarget() || this.authProvider.providerUrls.home);\r\n if (auth.authProvider.events.login) {\r\n this.loginHandler(userInfo);\r\n }\r\n });\r\n deferred.resolve(result);\r\n },\r\n reason => {\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n cfncLogin(accessToken: string): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n var auth = this;\r\n var redirect = encodeURIComponent(this.$location.protocol() + \"://\" + this.$location.host() + this.$location.path());\r\n\r\n window.location.href = this.authProvider.apiUrls.cfncLogin + \"?provider=CFNC&response_type=token&client_id=\" + this.authProvider.clientId + \"&redirect_uri=\" + redirect + \"&access_token=\" + accessToken;\r\n\r\n this.api.cfncLogin(accessToken, this.authProvider.clientId, redirect)\r\n .then(result => {\r\n auth.accessToken(result.data.access_token, result.data.refresh_token);\r\n auth.getUserInfo()\r\n .then((userInfo: any) => {\r\n auth.user = userInfo;\r\n appInsights.setAuthenticatedUserContext(userInfo.userName);\r\n auth.redirectAuthenticated(this.redirectTarget() || this.authProvider.providerUrls.home);\r\n if (auth.authProvider.events.login) {\r\n this.loginHandler(userInfo);\r\n }\r\n });\r\n\r\n\r\n deferred.resolve(result);\r\n },\r\n reason => {\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n loginWithExternal(login: IExternalLoginViewModel, data?: ILoginModel): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n var self = this;\r\n if (this.authProvider.usePopups) {\r\n var loginWindow: Window = window.open(this.authProvider.apiUrls.apiHost + login.url, \"frame\", \"resizeable,height=510,width=380\");\r\n var auth = this;\r\n // Watch for close event\r\n this.$timeout.cancel(this.externalLoginWindowTimer);\r\n this.externalLoginWindowTimer = this.$timeout((closeWatcher) => {\r\n if (!loginWindow.closed) {\r\n auth.externalLoginWindowTimer = auth.$timeout(closeWatcher, 500);\r\n return;\r\n }\r\n // closeOAuthWindow handler - passes external_data if there is any\r\n if (auth.authProvider.events.closeOAuthWindow) {\r\n this.closeOAuthWindowHandler(window.sessionStorage[\"external_data\"]);\r\n }\r\n\r\n // return if the window was closed and external data wasn't added\r\n if (typeof (window.sessionStorage[\"external_data\"]) === \"undefined\") {\r\n deferred.reject();\r\n return;\r\n }\r\n\r\n // move external_data from global to local\r\n var externalData = window.sessionStorage[\"external_data\"];\r\n window.sessionStorage.removeItem(\"external_data\");\r\n\r\n deferred.resolve(self.handleExternalData(externalData, login.url, data.rememberMe));\r\n }, 500);\r\n } else {\r\n if (data != null && data.rememberMe != null) {\r\n localStorage[CrossroadsStorage.rememberMe] = JSON.stringify(data.rememberMe);\r\n }\r\n localStorage[CrossroadsStorage.loginProvider] = JSON.stringify(login);\r\n window.location.href = this.authProvider.apiUrls.apiHost + login.url;\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n refreshToken(): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n var auth = this;\r\n var data: IRefreshTokenModel = {\r\n grant_type: \"refresh_token\",\r\n client_id: this.authProvider.clientId,\r\n refresh_token: localStorage[CrossroadsStorage.refreshToken] || sessionStorage[CrossroadsStorage.refreshToken]\r\n };\r\n\r\n this.api.refreshToken(data)\r\n .then((result) => {\r\n auth.accessToken(result.data.access_token, result.data.refresh_token, sessionStorage[CrossroadsStorage.rememberMe], result.data[\".expires\"]);\r\n\r\n deferred.resolve(result);\r\n }, (reason) => {\r\n this.logout();\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n logout(): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n\r\n this.user = null;\r\n this.clearUserInfo();\r\n appInsights.clearAuthenticatedUserContext();\r\n this.$cookies.remove(this.config.authCookieName, { domain: \".cfnc.org\" });\r\n this.accessToken(\"clear\");\r\n this.redirectTarget(\"clear\");\r\n\r\n if (this.authProvider.events.logout) {\r\n this.logoutHandler();\r\n }\r\n \r\n window.location.href = this.authProvider.providerUrls.postLogout;\r\n\r\n deferred.resolve();\r\n\r\n return deferred.promise;\r\n }\r\n\r\n register(data: RegistrationModel): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n\r\n this.api.register(data).then(result => {\r\n if (this.authProvider.events.register) {\r\n this.registerHandler();\r\n }\r\n\r\n if (this.authProvider.registerThenLogin) {\r\n var loginInfo: ILoginModel = {\r\n grant_type: \"password\",\r\n userName: data.userName,\r\n password: data.password,\r\n rememberMe: false\r\n };\r\n this.login(loginInfo).then(user => {\r\n deferred.resolve(user);\r\n },\r\n reason => {\r\n deferred.reject(reason);\r\n });\r\n } else {\r\n deferred.resolve();\r\n }\r\n }, reason => {\r\n deferred.reject(reason);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n setLogoutTimer = () => {\r\n var timer = 28 * 60 * 1000; //28 minutes\r\n var refreshTokenExpiresOn: any = new Date(sessionStorage[CrossroadsStorage.expiresOn]);\r\n console.log(refreshTokenExpiresOn);\r\n this.$timeout.cancel(this.logoutTimer);\r\n this.logoutTimer = this.$timeout(() => {\r\n console.log(\"inside timeout\");\r\n if (sessionStorage[CrossroadsStorage.expiresOn]) {\r\n var expiresOn: any = new Date(sessionStorage[CrossroadsStorage.expiresOn]);\r\n if (expiresOn - refreshTokenExpiresOn == 0) {\r\n var modalInstance = this.$uibModal.open({\r\n templateUrl: '/app/login/logoutModal.html',\r\n controller: 'logoutModal',\r\n backdrop: 'static',\r\n resolve: {\r\n data: function () { }\r\n }\r\n });\r\n }\r\n else {\r\n this.setLogoutTimer();\r\n }\r\n }\r\n else {\r\n this.logout();\r\n }\r\n\r\n\r\n }, timer);\r\n\r\n\r\n };\r\n\r\n getItemFromStorage = (item) => {\r\n if (sessionStorage[CrossroadsStorage.rememberMe]) {\r\n return localStorage.getItem(item);\r\n } else {\r\n return sessionStorage.getItem(item);\r\n }\r\n };\r\n\r\n registerExternal(): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n\r\n if (!this.externalUser) {\r\n deferred.reject();\r\n } else {\r\n this.api.registerExternal(this.externalUser.access_token, this.externalUser).then(result => {\r\n deferred.resolve(this.loginWithExternal(this.externalUser.provider));\r\n }, reason => {\r\n deferred.reject(reason);\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n changePassword(data): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n\r\n this.api.changePassword(data).then(result => {\r\n deferred.resolve();\r\n }, reason => {\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n forcePasswordChange(data): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n\r\n this.api.forcePasswordChange(data).then(result => {\r\n deferred.resolve();\r\n }, reason => {\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n authenticate(): angular.IPromise> {\r\n var deferred: angular.IDeferred = this.$q.defer();\r\n\r\n var cookie = this.$cookies.get(this.config.authCookieName);\r\n\r\n if (cookie && !this.accessToken()) {\r\n this.exchangeToken().then(() => {\r\n deferred.resolve(true);\r\n }, () => {\r\n deferred.resolve(false);\r\n });\r\n } else {\r\n if (!cookie) {\r\n this.user = null;\r\n this.clearUserInfo();\r\n this.accessToken(\"clear\");\r\n }\r\n\r\n if (this.accessToken()) {\r\n deferred.resolve(true);\r\n } else {\r\n if (!this.redirectTarget()) {\r\n this.redirectTarget(this.$location.path());\r\n }\r\n if (this.$location.search().access_token && !this.accessToken()) {\r\n deferred.resolve(false);\r\n } else {\r\n if (this.$location.path().indexOf(this.authProvider.providerUrls.login) === -1) {\r\n if (this.authProvider.useFullRefreshForLoginUrl) {\r\n //redirect to cfnc login page\r\n this.$window.location.href = this.authProvider.providerUrls.cfncHostLogin + \"?returnUrl=\" + encodeURIComponent(this.$location.absUrl());\r\n } else {\r\n this.$location.path(this.authProvider.providerUrls.login);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return deferred.promise;\r\n }\r\n\r\n redirectAuthenticated(url: string): void {\r\n if (!this.accessToken()) {\r\n return;\r\n }\r\n if (this.redirectTarget()) {\r\n this.redirectTarget(\"clear\");\r\n }\r\n\r\n if (this.authProvider.useFullRefreshForRedirect) {\r\n this.$window.location.href = url;\r\n } else {\r\n this.$location.hash(\"\");\r\n this.$location.path(url);\r\n }\r\n }\r\n\r\n $broadcast(...args: any[]) {\r\n return this.$rootScope.$broadcast.apply(this.$rootScope, arguments);\r\n }\r\n\r\n loginHandler(userInfo: IUserInfoModel) {\r\n this.$broadcast(this.authProvider.events.login, { authService: this, userInfo: userInfo });\r\n }\r\n\r\n reloadUserHandler(userInfo: IUserInfoModel) {\r\n this.$broadcast(this.authProvider.events.reloadUser, { authService: this, userInfo: userInfo });\r\n }\r\n\r\n logoutHandler() {\r\n this.$broadcast(this.authProvider.events.logout, { authService: this });\r\n }\r\n\r\n registerHandler() {\r\n this.$broadcast(this.authProvider.events.register, { authService: this });\r\n }\r\n\r\n closeOAuthWindowHandler(externalData: any) {\r\n this.$broadcast(this.authProvider.events.closeOAuthWindow, { authService: this, externalData: externalData });\r\n }\r\n }\r\n}\r\n\r\nangular.module(\"authentication\", [])\r\n .constant(\"authentication.urls\", {\r\n site: \"/\",\r\n register: \"/account/register\",\r\n login: \"/token\",\r\n logout: \"/account/logout\",\r\n userInfo: \"/account/userInfo\",\r\n changePassword: \"/account/changePassword\",\r\n forcePasswordChange: \"/account/forcePasswordChange\",\r\n externalLogins: \"/account/externalLogins\",\r\n registerExternal: \"/account/registerExternal\",\r\n cfncLogin: \"/account/CfncLogin\",\r\n exchangeToken: \"/account/gettoken\"\r\n })\r\n .factory(\"authentication.api\", [\"$http\", \"authentication.urls\", ($http, urls) => new Advant.Crossroads.AuthenticationFactory($http, urls)])\r\n .provider(\"authentication\", [\"authentication.urls\", urls => new Advant.Crossroads.AuthenticationProvider(urls)]);","/// \r\n\r\ninterface ICommon extends angular.IModule { }\r\n\r\n// create the module and define its dependencies.\r\nvar common: ICommon = angular.module(\"common\", [\"authentication\"]);\r\n\r\n\r\n/* tslint:disable: no-empty */\r\n// execute bootstrapping code and any dependencies.\r\ncommon.run([\"$q\", \"$rootScope\", ($q, $rootScope) => {\r\n\r\n}]);\r\n\r\n","/// \r\nnamespace Advant.Crossroads {\r\n export interface ICommonConfig {\r\n controllerActivateSuccessEvent?: string;\r\n spinnerToggleEvent?: string;\r\n loginEvent?: string;\r\n logoutEvent?: string;\r\n reloadUserEvent?: string;\r\n }\r\n\r\n export interface ICommonServiceProvider extends ng.IServiceProvider {\r\n config: ICommonConfig;\r\n }\r\n\r\n export class CommonServiceProvider implements ICommonServiceProvider {\r\n config: ICommonConfig = {\r\n // these are the properties we need to set\r\n // controllerActivateSuccessEvent: \"\",\r\n // spinnerToggleEvent: \"\" \r\n };\r\n\r\n $get = () => {\r\n return this.config;\r\n };\r\n }\r\n\r\n // must configure the common service and set its \r\n // events via the commonConfigProvider\r\n angular.module(\"common\").provider(\"commonConfig\",() =>\r\n new CommonServiceProvider()\r\n );\r\n\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n export interface ICommonService {\r\n $broadcast: (...args: any[]) => any;\r\n loginHandler: (auth: IAuthenticationProviderService, userInfo: IUserInfoModel) => void;\r\n reloadUserHandler: (auth: IAuthenticationProviderService, userInfo: IUserInfoModel) => void;\r\n activateController: (promises, controllerId) => angular.IPromise;\r\n createSearchThrottle: (viewmodel, list, filteredList, filter, delay) => any;\r\n debouncedThrottle: (key, callback, delay, immediate) => void;\r\n isNumber: (val) => boolean;\r\n logger: ILogger; // for accessibility\r\n textContains: (text, searchText) => boolean;\r\n $q: angular.IQService;\r\n ga: (command: string, event: string, eventCategory?: string, eventAction?: string, eventLabel?: string, eventValue?: string, fieldObject?: any) => void;\r\n }\r\n\r\n export class CommonFactory implements ICommonService {\r\n static serviceId: string = \"common\";\r\n private throttles = {};\r\n ga = (window as any).ga;\r\n\r\n constructor(public $q: angular.IQService,\r\n private $rootScope: angular.IRootScopeService,\r\n private $timeout: angular.ITimeoutService,\r\n private commonConfig: ICommonConfig,\r\n public logger: ILogger) {\r\n\r\n }\r\n\r\n activateController(promises, controllerId) {\r\n var self = this;\r\n return self.$q.all(promises).then(eventArgs => {\r\n var data = { controllerId: controllerId };\r\n this.$broadcast(this.commonConfig.controllerActivateSuccessEvent, data);\r\n });\r\n }\r\n\r\n $broadcast(...args: any[]) {\r\n return this.$rootScope.$broadcast.apply(this.$rootScope, arguments);\r\n }\r\n\r\n loginHandler(auth: IAuthenticationProviderService, userInfo: IUserInfoModel) {\r\n this.$broadcast(this.commonConfig.loginEvent, { userInfo: userInfo });\r\n }\r\n\r\n reloadUserHandler(auth: IAuthenticationProviderService, userInfo: IUserInfoModel) {\r\n this.$broadcast(this.commonConfig.reloadUserEvent, { userInfo: userInfo });\r\n }\r\n\r\n createSearchThrottle(viewmodel, list, filteredList, filter, delay) {\r\n // custom delay or use default\r\n delay = +delay || 300;\r\n // if only vm and list parameters were passed, set others by naming convention \r\n if (!filteredList) {\r\n // assuming list is named sessions,\r\n // filteredList is filteredSessions\r\n filteredList = \"filtered\" + list[0].toUpperCase() + list.substr(1).toLowerCase(); // string\r\n // filter function is named sessionFilter\r\n filter = list + \"Filter\"; // function in string form\r\n }\r\n\r\n // create the filtering function we will call from here\r\n var filterFn = () => {\r\n // translates to ...\r\n // vm.filteredSessions \r\n // = vm.sessions.filter(function(item( { returns vm.sessionFilter (item) } );\r\n viewmodel[filteredList] = viewmodel[list].filter(item => viewmodel[filter](item));\r\n };\r\n\r\n return (() => {\r\n // wrapped in outer IFFE so we can use closure \r\n // over filterInputTimeout which references the timeout\r\n var filterInputTimeout;\r\n\r\n // return what becomes the \"applyFilter\" function in the controller\r\n return function (searchNow) {\r\n if (filterInputTimeout) {\r\n this.$timeout.cancel(filterInputTimeout);\r\n filterInputTimeout = null;\r\n }\r\n if (searchNow || !delay) {\r\n filterFn();\r\n } else {\r\n filterInputTimeout = this.$timeout(filterFn, delay);\r\n }\r\n };\r\n })();\r\n }\r\n\r\n debouncedThrottle(key, callback, delay, immediate) {\r\n var defaultDelay = 1000;\r\n delay = delay || defaultDelay;\r\n if (this.throttles[key]) {\r\n this.$timeout.cancel(this.throttles[key]);\r\n this.throttles[key] = undefined;\r\n }\r\n if (immediate) {\r\n callback();\r\n } else {\r\n this.throttles[key] = this.$timeout(callback, delay);\r\n }\r\n }\r\n\r\n isNumber(val) {\r\n // negative or positive\r\n return /^[-]?\\d+$/.test(val);\r\n }\r\n\r\n textContains(text, searchText) {\r\n return text && -1 !== text.toLowerCase().indexOf(searchText.toLowerCase());\r\n }\r\n }\r\n\r\n common.factory(CommonFactory.serviceId, [\"$q\", \"$rootScope\", \"$timeout\", \"commonConfig\", \"logger\", ($q, $rootScope, $timeout, commonConfig, logger) =>\r\n new CommonFactory($q, $rootScope, $timeout, commonConfig, logger)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n export interface ILogger {\r\n getLogFn: (moduleId, fnName?) => (msg, data?, showToast?) => void;\r\n log: (message, data?, source?, showToast?) => void;\r\n logWarning: (message, data?, source?, showToast?) => void;\r\n logSuccess: (message, data?, source?, showToast?) => void;\r\n logError: (message, data?, source?, showToast?) => void;\r\n }\r\n\r\n\r\n export class Logger implements ILogger {\r\n static serviceId: string = \"logger\";\r\n\r\n\r\n constructor(private $log: ng.ILogService) {\r\n }\r\n\r\n public getLogFn(moduleId, fnName?) {\r\n fnName = fnName || \"log\";\r\n switch (fnName.toLowerCase()) { // convert aliases\r\n case \"success\":\r\n fnName = \"logSuccess\"; break;\r\n case \"error\":\r\n fnName = \"logError\"; break;\r\n case \"warn\":\r\n fnName = \"logWarning\"; break;\r\n case \"warning\":\r\n fnName = \"logWarning\"; break;\r\n }\r\n\r\n var logFn = this[fnName] || this.log;\r\n return (msg, data?, showToast?) => {\r\n logFn(msg, data, moduleId, (showToast === undefined) ? false : showToast);\r\n };\r\n }\r\n\r\n public log = (message, data?, source?, showToast?) => {\r\n this.logIt(message, data, source, showToast, \"info\");\r\n };\r\n\r\n public logWarning = (message, data?, source?, showToast?) => {\r\n this.logIt(message, data, source, showToast, \"warning\");\r\n };\r\n\r\n public logSuccess = (message, data?, source?, showToast?) => {\r\n this.logIt(message, data, source, showToast, \"success\");\r\n };\r\n\r\n public logError = (message, data?, source?, showToast?) => {\r\n appInsights.trackEvent(\"CrossroadsError\", { message: message, data: data, source: source });\r\n this.logIt(message, data, source, showToast, \"error\");\r\n };\r\n\r\n private logIt = (message, data, source, showToast, toastType) => {\r\n var write = (toastType === \"error\") ? this.$log.error : this.$log.log;\r\n source = source ? \"[\" + source + \"] \" : \"\";\r\n write(source, message, data);\r\n if (showToast) {\r\n if (toastType === \"error\") {\r\n toastr.error(message);\r\n } else if (toastType === \"warning\") {\r\n toastr.warning(message);\r\n } else if (toastType === \"success\") {\r\n toastr.success(message);\r\n } else {\r\n toastr.info(message);\r\n }\r\n }\r\n };\r\n }\r\n\r\n\r\n common.factory(Logger.serviceId, [\"$log\", ($log) =>\r\n new Logger($log)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface ISpinnerService {\r\n spinnerHide: () => void;\r\n spinnerShow: () => void;\r\n }\r\n\r\n export class SpinnerService implements ISpinnerService {\r\n static serviceId: string = \"spinner\";\r\n\r\n constructor(private common: ICommonService, private commonConfig: ICommonConfig) {\r\n }\r\n\r\n spinnerHide() { this.spinnerToggle(false); }\r\n\r\n spinnerShow() { this.spinnerToggle(true); }\r\n\r\n private spinnerToggle(show) {\r\n // injects a show property to the IAngularEvent type this is picked up by the shell controller\r\n this.common.$broadcast(this.commonConfig.spinnerToggleEvent, { show: show });\r\n }\r\n }\r\n common.factory(SpinnerService.serviceId, [\"common\", \"commonConfig\", (common, commonConfig) =>\r\n new SpinnerService(common, commonConfig)\r\n ]);\r\n}\r\n","angular.module(\"app\")\r\n .constant(\"advAccordionConfig\",\r\n {\r\n closeOthers: true\r\n });\r\n\r\nangular.module(\"app\")\r\n .controller(\"AdvAccordionController\",\r\n [\r\n \"$scope\", \"$attrs\", \"advAccordionConfig\", function($scope, $attrs, accordionConfig) {\r\n // This array keeps track of the accordion groups\r\n this.groups = [];\r\n\r\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\r\n this.closeOthers = function(openGroup) {\r\n var closeOthers = angular.isDefined($attrs.closeOthers)\r\n ? $scope.$eval($attrs.closeOthers)\r\n : accordionConfig.closeOthers;\r\n if (closeOthers) {\r\n angular.forEach(this.groups,\r\n function(group) {\r\n if (group !== openGroup) {\r\n group.isOpen = false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n // This is called from the accordion-group directive to add itself to the accordion\r\n this.addGroup = function(groupScope) {\r\n this.groups.push(groupScope);\r\n\r\n groupScope.$on(\"$destroy\",\r\n event => {\r\n this.removeGroup(groupScope);\r\n });\r\n };\r\n\r\n // This is called from the accordion-group directive when to remove itself\r\n this.removeGroup = function(group) {\r\n var index = this.groups.indexOf(group);\r\n if (index !== -1) {\r\n this.groups.splice(index, 1);\r\n }\r\n };\r\n }\r\n ])\r\n\r\n// The accordion directive simply sets up the directive controller\r\n// and adds an accordion CSS class to itself element.\r\n .directive(\"advAccordion\",\r\n () => ({\r\n controller: \"AdvAccordionController\",\r\n controllerAs: \"accordion\",\r\n transclude: true,\r\n templateUrl(element, attrs:any) {\r\n return attrs.templateUrl || \"/app/directives/advAccordion.html\";\r\n }\r\n }));\r\n","/// \r\n/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvAccordionGroup extends angular.IDirective {\r\n }\r\n\r\n interface IAdvAccordionGroupScope extends angular.IScope {\r\n openClass: string;\r\n panelClass: string;\r\n toggleOpen: ($event: any) => void;\r\n isDisabled: boolean;\r\n isOpen: boolean;\r\n headingId: string;\r\n panelId: string;\r\n group: IGroup;\r\n panel: { activePanel: number };\r\n }\r\n\r\n interface IAdvAccordionGroupAttributes extends angular.IAttributes {\r\n openClass: string;\r\n panelClass: string;\r\n advResponse: string;\r\n displayRule: string;\r\n hasBeenLoaded: string;\r\n templateUrl: string;\r\n\r\n }\r\n\r\n advAccordionGroup.$inject = [\"$parse\", \"$animate\", \"$compile\", \"ruleService\"];\r\n function advAccordionGroup($parse: angular.IParseService, $animate: angular.animate.IAnimateService, $compile: angular.ICompileService, ruleService: Rules.IRuleService): IAdvAccordionGroup {\r\n return {\r\n require: \"^advAccordion\", // We need this directive to be inside an accordion\r\n priority: 500,\r\n transclude: {\r\n \"heading\": \"?advAccordionHeading\"\r\n }, // It transcludes the contents of the directive into the template\r\n replace: true, // The element containing the directive will be replaced with the template\r\n templateUrl: (element, attrs: IAdvAccordionGroupAttributes) => {\r\n return attrs.templateUrl || \"/app/directives/advAccordionGroup.html\";\r\n },\r\n scope: {\r\n heading: \"@\", // Interpolate the heading attribute onto this scope\r\n isOpen: \"=?\",\r\n isDisabled: \"=?\"\r\n },\r\n controller: () => {\r\n return {\r\n heading: \"\",\r\n setHeading: function (element) {\r\n this.heading = element;\r\n }\r\n }\r\n },\r\n\r\n link: link\r\n }\r\n\r\n /**\r\n * Return the DOM siblings between the first and last node in the given array.\r\n * @param {Array} array like object\r\n * @returns {Array} the inputted object or a jqLite collection containing the nodes\r\n */\r\n function getBlockNodes(nodes) {\r\n // TODO(perf): update `nodes` instead of creating a new object?\r\n var node = nodes[0];\r\n var endNode = nodes[nodes.length - 1];\r\n var blockNodes;\r\n var slice = [].slice;\r\n\r\n for (var i = 1; node !== endNode && (node = node.nextSibling); i++) {\r\n if (blockNodes || nodes[i] !== node) {\r\n if (!blockNodes) {\r\n blockNodes = jQuery(slice.call(nodes, 0, i));\r\n }\r\n blockNodes.push(node);\r\n }\r\n }\r\n\r\n return blockNodes || nodes;\r\n }\r\n\r\n\r\n function link(scope: IAdvAccordionGroupScope, element: angular.IAugmentedJQuery, attrs: IAdvAccordionGroupAttributes, accordionCtrl, transclude) {\r\n\r\n var block, childScope, previousElements;\r\n var headerBlock, headerChildScope, headerPreviousElements;\r\n scope.panel = { activePanel: 0 };\r\n\r\n scope.openClass = attrs.openClass || \"panel-open\";\r\n scope.panelClass = attrs.panelClass || \"panel-default\";\r\n if (!scope.isOpen) {\r\n scope.panel.activePanel = -1;\r\n }\r\n\r\n scope.$watch(\"panel.activePanel\", (value) => {\r\n scope.isOpen = value === 0;\r\n element.toggleClass(scope.openClass, scope.isOpen);\r\n if (value === 0) {\r\n accordionCtrl.closeOthers(scope);\r\n }\r\n });\r\n\r\n scope.toggleOpen = ($event) => {\r\n if (!scope.isDisabled) {\r\n if (!$event || $event.which === 32) {\r\n scope.isOpen = !scope.isOpen;\r\n }\r\n }\r\n };\r\n\r\n var id = \"accordiongroup-\" + scope.$id + \"-\" + Math.floor(Math.random() * 10000);\r\n scope.headingId = id + \"-tab\";\r\n scope.panelId = id + \"-panel\";\r\n\r\n var displayRule: IDynamicDisplayRule = $parse(attrs.displayRule)(scope.$parent);\r\n if (displayRule) {\r\n var loadedGetter = $parse(attrs.hasBeenLoaded);\r\n var loadedSetter: any = loadedGetter.assign;\r\n var alreadyLoaded;\r\n\r\n var ruleProperties = ruleService.getPropertiesToWatch(displayRule.rule);\r\n\r\n angular.forEach(ruleProperties, (ruleProperty) => {\r\n scope.$parent.$watch(attrs.advResponse + \".\" + ruleProperty, (newValue, oldValue, originalScope: IAdvAccordionGroupScope) => {\r\n var localResponse = $parse(attrs.advResponse)(originalScope);\r\n var result = ruleService.evalRuleSet(displayRule.rule, localResponse);\r\n\r\n if (result) {\r\n if (displayRule.display === \"Show\") {\r\n show();\r\n } else {\r\n hide();\r\n }\r\n } else {\r\n if (displayRule.display === \"Show\") {\r\n hide();\r\n } else {\r\n show();\r\n }\r\n }\r\n\r\n scope.$evalAsync(() => {\r\n // If the section the group is in has not been loaded then \r\n // go ahead and load the whole section so we can reflect validation\r\n // changes\r\n alreadyLoaded = loadedGetter(scope);\r\n if (!alreadyLoaded) {\r\n loadedSetter(scope, true);\r\n }\r\n });\r\n }, true);\r\n });\r\n } else {\r\n show();\r\n }\r\n\r\n function show() {\r\n accordionCtrl.addGroup(scope);\r\n\r\n if (!headerChildScope) {\r\n transclude((clone, newScope) => {\r\n headerChildScope = newScope;\r\n // Note: We only need the first/last node of the cloned nodes.\r\n // However, we need to keep the reference to the jqlite wrapper as it might be changed later\r\n // by a directive with templateUrl when its template arrives.\r\n headerBlock = {\r\n clone: clone\r\n };\r\n angular.element(element[0].querySelector(\"[adv-accordion-transclude]\")).append(clone);\r\n\r\n }, element.parent(), \"heading\");\r\n }\r\n if (!childScope) {\r\n transclude((clone, newScope) => {\r\n childScope = newScope;\r\n // Note: We only need the first/last node of the cloned nodes.\r\n // However, we need to keep the reference to the jqlite wrapper as it might be changed later\r\n // by a directive with templateUrl when its template arrives.\r\n block = {\r\n clone: clone\r\n };\r\n angular.element(element[0].querySelector(\"[ng-body-transclude]\")).append(clone);\r\n }, element.parent());\r\n }\r\n element.show();\r\n\r\n }\r\n\r\n function hide() {\r\n accordionCtrl.removeGroup(scope);\r\n if (previousElements) {\r\n previousElements.remove();\r\n previousElements = null;\r\n }\r\n if (childScope) {\r\n childScope.$destroy();\r\n childScope = null;\r\n }\r\n if (block) {\r\n previousElements = getBlockNodes(block.clone);\r\n previousElements.remove();\r\n previousElements = null;\r\n block = null;\r\n }\r\n if (headerPreviousElements) {\r\n headerPreviousElements.remove();\r\n headerPreviousElements = null;\r\n }\r\n if (headerChildScope) {\r\n headerChildScope.$destroy();\r\n headerChildScope = null;\r\n }\r\n if (headerBlock) {\r\n headerPreviousElements = getBlockNodes(headerBlock.clone);\r\n headerPreviousElements.remove();\r\n headerPreviousElements = null;\r\n headerBlock = null;\r\n }\r\n\r\n element.hide();\r\n }\r\n\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advAccordionGroup\", advAccordionGroup);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvAffix extends angular.IDirective {\r\n }\r\n\r\n interface IAdvAffixScope extends angular.IScope {\r\n advAffix: boolean;\r\n }\r\n\r\n interface IAdvAffixAttributes extends angular.IAttributes {\r\n AdvAffix: string;\r\n DataOffsetTop: string;\r\n offsetTop: number;\r\n offsetBottom: number;\r\n offsetParent: number;\r\n offsetUnpin: number;\r\n }\r\n\r\n AdvAffix.$inject = [\"$window\", \"$parse\", \"$affix\"];\r\n function AdvAffix($window: angular.IWindowService, $parse: angular.IParseService, $affix: mgcrea.ngStrap.affix.IAffixService): IAdvAffix {\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n scope: {\r\n advAffix: \"=\"\r\n }\r\n\r\n }\r\n\r\n function link(scope: IAdvAffixScope, element: angular.IAugmentedJQuery, attrs: IAdvAffixAttributes) {\r\n\r\n var offsetTop = attrs.offsetTop != null ? attrs.offsetTop : 0;\r\n var offsetBottom = attrs.offsetBottom != null ? attrs.offsetBottom : 0;\r\n var offsetParent = attrs.offsetParent != null ? attrs.offsetParent : 0;\r\n var offsetUnpin = attrs.offsetUnpin != null ? attrs.offsetUnpin : 0;\r\n var affix: mgcrea.ngStrap.affix.IAffix;\r\n\r\n\r\n scope.$watch(\"advAffix\", (newValue: any, oldValue:any) => {\r\n if (newValue) {\r\n\r\n // Using a generic object because $affix type definition is incorrect. The 4 offset properties are expected to be numbers but are used like strings.\r\n // target is missing from the type definition and is required but is not defaulted to anything. using angular.element will return the \r\n // jquery object that affix needs to function properly.\r\n var options: any = {\r\n offsetTop: offsetTop,\r\n offsetBottom: offsetBottom,\r\n offsetParent: offsetParent,\r\n offsetUnpin: offsetUnpin,\r\n target: angular.element($window)\r\n };\r\n\r\n affix = $affix(element, options);\r\n }\r\n\r\n if (!newValue && affix != null){\r\n affix.destroy();\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advAffix\", AdvAffix);\r\n}","namespace Advant.Crossroads {\r\n\r\n interface IAdvCcPayment extends angular.IDirective {\r\n }\r\n\r\n interface IAdvCcPaymenScope extends ng.IScope {\r\n onCreate: any;\r\n authorizeSession: any;\r\n\r\n }\r\n\r\n class AdvCcPayment implements IAdvCcPayment {\r\n static directiveId: string = \"advCcPayment\";\r\n templateUrl = \"/app/directives/advCcPayment.html\";\r\n restrict: string = \"E\";\r\n scope: any = {\r\n authorizeSession: \"=\",\r\n onCreate: \"=\"\r\n };\r\n constructor(private helper: IHelper) {\r\n }\r\n\r\n config = {\r\n fields: {\r\n card: {\r\n selector: \"[data-cc-card]\",\r\n },\r\n cvv: {\r\n selector: \"[data-cc-cvv]\",\r\n },\r\n exp: {\r\n selector: \"[data-cc-exp]\",\r\n },\r\n name: {\r\n selector: \"[data-cc-name]\",\r\n placeholder: \"Full Name\",\r\n }\r\n },\r\n // css classes to be injected into the iframes.\r\n // the properties allowed are restricted via whitelist.\r\n // further, unrestricted styling can be applied to the div's in which the iframes are injected.\r\n\r\n styles: {\r\n input: {\r\n 'font-size': \"14px\",\r\n color: \"rgb(85,85,85)\",\r\n background: \"black\",\r\n },\r\n '.card': {\r\n 'font-family': \"monospace\",\r\n },\r\n '.valid': {\r\n color: \"#43B02A\",\r\n },\r\n '.invalidcc': {\r\n color: \"#C01324\",\r\n },\r\n '@media screen and (max-width: 700px)': {\r\n input: {\r\n 'font-size': \"14px\",\r\n }\r\n },\r\n 'input:-webkit-autofill': {\r\n '-webkit-box-shadow': \"0 0 0 50px white inset\"\r\n },\r\n 'input.valid:-webkit-autofill': {\r\n '-webkit-text-fill-color': \"#43B02A\"\r\n },\r\n 'input.invalid:-webkit-autofill': {\r\n '-webkit-text-fill-color': \"#C01324\"\r\n },\r\n 'input::placeholder': {\r\n color: \"#aaa\"\r\n }\r\n },\r\n // these values correspond to css class names defined above\r\n classes: {\r\n empty: \"empty\",\r\n focus: \"focus\",\r\n invalid: \"invalidcc\",\r\n valid: \"valid\"\r\n }\r\n };\r\n\r\n\r\n\r\n link = (scope: IAdvCcPaymenScope, element, attrs) => {\r\n const hooks = {\r\n\r\n preFlowHook: scope.authorizeSession,\r\n\r\n };\r\n\r\n (window as any).firstdata.createPaymentForm(this.config, hooks, scope.onCreate);\r\n };\r\n }\r\n\r\n angular.module(\"app\").directive(AdvCcPayment.directiveId, [\"helper\", helper =>\r\n new AdvCcPayment(helper)\r\n ]);\r\n}","namespace Advant.Crossroads {\r\n\r\n interface ICollegeSearch {\r\n colleges: ICollege[];\r\n searchFilter: string;\r\n selectedSchool: ICollege;\r\n state: string;\r\n schoolName: string;\r\n stateList: any;\r\n unlistedSchool: boolean;\r\n search?: () => void;\r\n selectSchool?: (college: ICollege) => void;\r\n selectSchoolNotInList?: () => void;\r\n nextPage?: () => void;\r\n clear: (event: angular.IAngularEvent) => void;\r\n close: () => void;\r\n\r\n }\r\n\r\n interface IAdvCollege extends angular.IDirective {\r\n }\r\n\r\n interface IAdvCollegeScope extends angular.IScope {\r\n $schoolSearch: ICollegeSearch;\r\n ngModel: any;\r\n ceebField: any;\r\n typeField: any;\r\n streetField: any;\r\n street2Field: any;\r\n cityField: any;\r\n stateField: any;\r\n countryField: any;\r\n postalField: any;\r\n }\r\n\r\n class AdvCollege implements IAdvCollege {\r\n static directiveId: string = \"advCollege\";\r\n restrict: string = \"EA\";\r\n priority = 1;\r\n templateUrl: string = \"/app/directives/advCollege.html\";\r\n scope: any = {\r\n ngModel: \"=\",\r\n ceebField: \"=\",\r\n typeField: \"=\",\r\n streetField: \"=\",\r\n street2Field: \"=\",\r\n cityField: \"=\",\r\n stateField: \"=\",\r\n countryField: \"=\",\r\n postalField: \"=\",\r\n placeholder: \"@\"\r\n }\r\n\r\n constructor(private $document: angular.IDocumentService,\r\n private $uibPosition: angular.ui.bootstrap.IPositionService,\r\n private $parse: angular.IParseService,\r\n private $timeout: angular.ITimeoutService,\r\n private collegeLookup: ICollegeLookup,\r\n private stateLookup: IStateLookup) {\r\n }\r\n\r\n link = (scope: IAdvCollegeScope, element: JQuery, attrs) => {\r\n scope.$schoolSearch = {\r\n colleges: null,\r\n searchFilter: null,\r\n selectedSchool: null,\r\n unlistedSchool: false,\r\n state: \"NC\",\r\n stateList: null,\r\n schoolName: scope.ngModel,\r\n clear: null,\r\n close: null\r\n };\r\n\r\n var lookupBox = element.find(\"[name = 'schoolLookupBox']\").first();\r\n var schoolField = element.find(\"[name = 'schoolNameField']\").first();\r\n var schoolFinder = element.find(\"[name = 'schoolFinder']\").first();\r\n var schoolList = lookupBox.find(\".school-list\").first();\r\n var schoolId = this.$parse(attrs.ngModel + \"Id\")(scope.$parent);\r\n\r\n var schoolNameWatch, searchWatch, stateWatch;\r\n\r\n scope.$schoolSearch.stateList = this.stateLookup.getStates();\r\n scope.$schoolSearch.unlistedSchool = !schoolId && scope.ngModel;\r\n\r\n if (!scope.$schoolSearch.unlistedSchool) {\r\n this.disableFields(attrs);\r\n };\r\n\r\n var turnOnSchoolNameWatch = () => {\r\n schoolNameWatch = scope.$watch((listenScope: IAdvCollegeScope) => { return listenScope.$schoolSearch.schoolName; }, (newValue) => { scope.ngModel = newValue; });\r\n };\r\n\r\n if (scope.$schoolSearch.unlistedSchool) {\r\n turnOnSchoolNameWatch();\r\n }\r\n\r\n var turnOnWatches = () => {\r\n turnOnSchoolNameWatch();\r\n\r\n searchWatch = scope.$watch((listenScope: IAdvCollegeScope) => { return listenScope.$schoolSearch.searchFilter; }, () => {\r\n scope.$schoolSearch.search();\r\n });\r\n\r\n stateWatch = scope.$watch((listenScope: IAdvCollegeScope) => { return listenScope.$schoolSearch.state; }, (newValue, oldValue) => {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n this.collegeLookup.state = newValue;\r\n scope.$schoolSearch.search();\r\n });\r\n }\r\n\r\n var turnOffWatches = () => {\r\n schoolNameWatch();\r\n searchWatch();\r\n stateWatch();\r\n }\r\n\r\n var turnOffJustSearchWatches = () => {\r\n searchWatch();\r\n stateWatch();\r\n }\r\n\r\n schoolField.click((event) => {\r\n event.preventDefault();\r\n var position = this.$uibPosition.position(element);\r\n lookupBox.css({ top: (position.top - 320 < -150 ? position.top + 60 : position.top - 400), left: position.left + 20 });\r\n if (!scope.$schoolSearch.unlistedSchool) {\r\n lookupBox.toggleClass(\"hidden\");\r\n scope.$schoolSearch.search();\r\n turnOnWatches();\r\n }\r\n });\r\n\r\n schoolFinder.click((event) => {\r\n event.preventDefault();\r\n schoolNameWatch();\r\n lookupBox.toggleClass(\"hidden\");\r\n scope.$schoolSearch.search();\r\n turnOnWatches();\r\n scope.$schoolSearch.unlistedSchool = false;\r\n scope.$digest();\r\n });\r\n\r\n scope.$schoolSearch.search = () => {\r\n this.collegeLookup.state = scope.$schoolSearch.state;\r\n this.collegeLookup.searchFilter = scope.$schoolSearch.searchFilter;\r\n if (scope.$schoolSearch.searchFilter) {\r\n this.collegeLookup.sortByRelevance = true;\r\n } else {\r\n this.collegeLookup.sortByRelevance = false;\r\n }\r\n\r\n this.collegeLookup.page = 1;\r\n schoolList.scrollTop(0);\r\n this.collegeLookup.getColleges().then((result) => {\r\n scope.$schoolSearch.colleges = result;\r\n });\r\n };\r\n\r\n scope.$schoolSearch.selectSchoolNotInList = () => {\r\n this.$parse(attrs.ngModel + \"Id\").assign(scope.$parent, null);\r\n scope.$schoolSearch.schoolName = \"\";\r\n scope.$schoolSearch.unlistedSchool = true;\r\n this.enableFields(attrs);\r\n turnOffJustSearchWatches();\r\n lookupBox.addClass(\"hidden\");\r\n };\r\n\r\n scope.$schoolSearch.selectSchool = (college: ICollege) => {\r\n scope.ngModel = college.name;\r\n this.$parse(attrs.ngModel + \"Id\").assign(scope.$parent, college.id);\r\n scope.$applyAsync(attrs.ngModel + \"Id\");\r\n scope.$schoolSearch.schoolName = college.name;\r\n scope.$schoolSearch.unlistedSchool = false;\r\n\r\n if (angular.isDefined(attrs.ceebField)) {\r\n scope.ceebField = college.ceebCode;\r\n if (college.ceebCode == null || college.ceebCode == \"\")\r\n attrs.ceebFieldDisabled = false;\r\n else\r\n attrs.ceebFieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.typeField)) {\r\n scope.typeField = college.type;\r\n if (college.type == null)\r\n attrs.typeFieldDisabled = false;\r\n else\r\n attrs.typeFieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.streetField)) {\r\n scope.streetField = college.address.street1;\r\n if (college.address.street1 == null || college.address.street1 == \"\")\r\n attrs.streetFieldDisabled = false;\r\n else\r\n attrs.streetFieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.street2Field)) {\r\n scope.street2Field = college.address.street2;\r\n if (college.address.street2 == null || college.address.street2 == \"\")\r\n attrs.street2FieldDisabled = false;\r\n else\r\n attrs.street2FieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.cityField)) {\r\n scope.cityField = college.address.city;\r\n if (college.address.city == null || college.address.city == \"\")\r\n attrs.cityFieldDisabled = false;\r\n else\r\n attrs.cityFieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.stateField)) {\r\n scope.stateField = college.address.state;\r\n if (college.address.state == null || college.address.state == \"\")\r\n attrs.stateFieldDisabled = false;\r\n else\r\n attrs.stateFieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.countryField)) {\r\n //scope.countryField = college.address.country || \"US\";\r\n scope.countryField = college.address.country;\r\n if (college.address.country == null || college.address.country == \"\")\r\n attrs.countryFieldDisabled = false;\r\n else\r\n attrs.countryFieldDisabled = true;\r\n }\r\n\r\n if (angular.isDefined(attrs.postalField)) {\r\n scope.postalField = college.address.zip;\r\n if (college.address.zip == null || college.address.zip == \"\")\r\n attrs.postalFieldDisabled = false;\r\n else\r\n attrs.postalFieldDisabled = true;\r\n }\r\n\r\n this.disableFields(attrs);\r\n turnOffWatches();\r\n lookupBox.addClass(\"hidden\");\r\n };\r\n\r\n scope.$schoolSearch.nextPage = () => {\r\n if (this.collegeLookup.totalPages > this.collegeLookup.page) {\r\n this.collegeLookup.page += 1;\r\n this.collegeLookup.getColleges().then((result) => {\r\n scope.$schoolSearch.colleges = scope.$schoolSearch.colleges.concat(result);\r\n });\r\n }\r\n };\r\n\r\n scope.$schoolSearch.clear = (event: angular.IAngularEvent) => {\r\n event.preventDefault();\r\n\r\n scope.$schoolSearch.schoolName = null;\r\n this.$parse(attrs.ngModel + \"Id\").assign(scope.$parent, null);\r\n this.$parse(attrs.ngModel).assign(scope.$parent, null);\r\n\r\n this.clearFields(scope, attrs);\r\n };\r\n\r\n scope.$schoolSearch.close = () => {\r\n turnOffWatches();\r\n lookupBox.addClass(\"hidden\");\r\n };\r\n }\r\n\r\n disableFields = (attrs) => {\r\n // Have to run this code in $timeout because we need to run after the last $digest cycle in case any of these fields\r\n // are hidden\r\n this.$timeout(() => {\r\n if (angular.isDefined(attrs.ceebFieldDisabled) && attrs.ceebFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.ceebField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.typeFieldDisabled) && attrs.typeFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.typeField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.streetFieldDisabled) && attrs.streetFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.streetField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.street2FieldDisabled) && attrs.street2FieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.street2Field + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.cityFieldDisabled) && attrs.cityFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.cityField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.stateFieldDisabled) && attrs.stateFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").css(\"pointerEvents\", \"none\");\r\n }\r\n if (angular.isDefined(attrs.countryFieldDisabled) && attrs.countryFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").css(\"pointerEvents\", \"none\");\r\n }\r\n if (angular.isDefined(attrs.postalFieldDisabled) && attrs.stateFieldDisabled == true) {\r\n this.$document.find(\"[ng-model='\" + attrs.postalField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n });\r\n };\r\n\r\n clearFields = (scope, attrs) => {\r\n if (angular.isDefined(attrs.ceebField)) {\r\n scope.ceebField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.typeField)) {\r\n scope.typeField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.streetField)) {\r\n scope.streetField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.street2Field)) {\r\n scope.street2Field = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.cityField)) {\r\n scope.cityField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.stateField)) {\r\n scope.stateField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.countryField)) {\r\n scope.countryField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.postalField)) {\r\n scope.postalField = null;\r\n }\r\n\r\n };\r\n\r\n enableFields = (attrs) => {\r\n // Have to run this code in $timeout because we need to run after the last $digest cycle in case any of these fields\r\n // are hidden\r\n this.$timeout(() => {\r\n if (angular.isDefined(attrs.ceebFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.ceebField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.typeFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.typeField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.streetFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.streetField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.street2FieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.street2Field + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.cityFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.cityField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.stateFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").css(\"pointerEvents\", \"\");\r\n }\r\n if (angular.isDefined(attrs.countryFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").css(\"pointerEvents\", \"\");\r\n }\r\n if (angular.isDefined(attrs.postalFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.postalField + \"']\").removeAttr(\"disabled\");\r\n }\r\n });\r\n };\r\n }\r\n\r\n angular.module(\"app\").directive(AdvCollege.directiveId, [\"$document\", \"$uibPosition\", \"$parse\", \"$timeout\", \"collegeLookup\", \"stateLookup\",\r\n ($document, $uibPosition, $parse, $timeout, collegeLookup, stateLookup) =>\r\n new AdvCollege($document, $uibPosition, $parse, $timeout, collegeLookup, stateLookup)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvCopy extends angular.IDirective {\r\n }\r\n\r\n interface IAdvCopyScope extends angular.IScope {\r\n }\r\n\r\n interface IAdvCopyAttributes extends angular.IAttributes {\r\n copyFields: string;\r\n advResponse: any;\r\n title: string;\r\n cssClass: string;\r\n }\r\n\r\n advCopy.$inject = [\"$parse\", \"helper\"];\r\n function advCopy($parse: angular.IParseService, helper: IHelper): IAdvCopy {\r\n\r\n var template = (tElement, tAttrs: IAdvCopyAttributes) => {\r\n return ``;\r\n };\r\n\r\n var link = (scope: IAdvCopyScope, element: angular.IAugmentedJQuery, attrs: IAdvCopyAttributes) => {\r\n var copyFields: IDynamicCopyFields[] = $parse(attrs.copyFields)(scope);\r\n\r\n element.on(\"click\", (event) => {\r\n var localResponse = $parse(attrs.advResponse)(scope);\r\n scope.$applyAsync((localScope) => {\r\n angular.forEach(copyFields, (copyField: IDynamicCopyFields) => {\r\n localResponse[helper.toCamelCase(copyField.copyToKey)] = localResponse[helper.toCamelCase(copyField.copyFromKey)];\r\n });\r\n });\r\n });\r\n };\r\n\r\n\r\n return {\r\n restrict: \"EA\",\r\n template: template,\r\n link: link,\r\n replace: true\r\n }\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(\"advCopy\", advCopy);\r\n}","\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvDateInput extends angular.IDirective {\r\n\r\n }\r\n\r\n interface IAdvDateInputScope extends angular.IScope {\r\n }\r\n\r\n interface IAdvDateInputAttributes extends angular.IAttributes {\r\n minDate: string;\r\n maxDate: string;\r\n advDateInput: string;\r\n }\r\n\r\n function advDateInput($parse: angular.IParseService): IAdvDateInput {\r\n var validDate = (dateValue: string, inputFormat: string): boolean => {\r\n var dateMomentValue: moment.Moment;\r\n\r\n if (angular.isDate(dateValue)) {\r\n dateMomentValue = moment.utc(dateValue);\r\n } else {\r\n dateMomentValue = moment.utc(dateValue, inputFormat, true);\r\n } \r\n\r\n return dateMomentValue.isValid();\r\n };\r\n\r\n var validBaseMinDate = (dateValue: string, inputFormat: string): boolean => {\r\n var dateMomentValue: moment.Moment;\r\n\r\n if (angular.isDate(dateValue)) {\r\n dateMomentValue = moment.utc(dateValue);\r\n } else {\r\n dateMomentValue = moment.utc(dateValue, inputFormat, true);\r\n }\r\n\r\n if (moment(dateMomentValue).isBefore(\"1899-12-31\")) {\r\n return false;\r\n }\r\n\r\n return dateMomentValue.isValid();\r\n };\r\n\r\n var validMinDate = (dateValue, inputFormat, minDate) => {\r\n var dateMomentValue: moment.Moment;\r\n\r\n if (angular.isDate(dateValue)) {\r\n dateMomentValue = moment.utc(dateValue);\r\n } else {\r\n dateMomentValue = moment.utc(dateValue, inputFormat, true);\r\n }\r\n\r\n var minValue = moment(minDate);\r\n if (dateMomentValue.diff(minValue) > -1) {\r\n return true;\r\n\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n var validMaxDate = (dateValue, inputFormat, maxDate) => {\r\n var dateMomentValue: moment.Moment;\r\n\r\n if (angular.isDate(dateValue)) {\r\n dateMomentValue = moment.utc(dateValue);\r\n } else {\r\n dateMomentValue = moment.utc(dateValue, inputFormat, true);\r\n }\r\n\r\n var maxValue = moment(maxDate);\r\n if (dateMomentValue.diff(maxValue) < 1) {\r\n return true;\r\n\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: (scope: IAdvDateInputScope, element, attrs: IAdvDateInputAttributes, ngModelCtrl: angular.INgModelController) => {\r\n ngModelCtrl.$formatters.unshift((modelValue) => {\r\n if (modelValue) {\r\n var modelMoment = moment(modelValue, moment.ISO_8601, true);\r\n if (modelMoment.isValid()) {\r\n return modelMoment.utc().format(attrs.advDateInput);\r\n }\r\n return modelValue;\r\n }\r\n return modelValue;\r\n });\r\n var minDate = $parse(attrs.minDate)(scope) || undefined;\r\n var maxDate = $parse(attrs.maxDate)(scope) || undefined;\r\n\r\n (ngModelCtrl.$validators as any).date = (modelValue, viewValue) => {\r\n return ngModelCtrl.$isEmpty(viewValue) || validDate(viewValue, attrs.advDateInput);\r\n }; \r\n\r\n (ngModelCtrl.$validators as any).minDate = (modelValue, viewValue) => {\r\n return ngModelCtrl.$isEmpty(viewValue) || angular.isUndefined(minDate) || !validDate(viewValue, attrs.advDateInput) || validMinDate(viewValue, attrs.advDateInput, minDate);\r\n };\r\n\r\n (ngModelCtrl.$validators as any).maxDate = (modelValue, viewValue) => {\r\n return ngModelCtrl.$isEmpty(viewValue) || angular.isUndefined(maxDate) || !validDate(viewValue, attrs.advDateInput) || validMaxDate(viewValue, attrs.advDateInput, maxDate);\r\n };\r\n\r\n (ngModelCtrl.$validators as any).baseMin = (modelValue, viewValue) => {\r\n return ngModelCtrl.$isEmpty(viewValue) || validBaseMinDate(viewValue, attrs.advDateInput);\r\n };\r\n\r\n ngModelCtrl.$parsers.unshift((viewValue) => {\r\n if (viewValue) {\r\n var dateMomentValue: moment.Moment;\r\n\r\n if (angular.isDate(viewValue)) {\r\n dateMomentValue = moment.utc(viewValue);\r\n } else {\r\n dateMomentValue = moment.utc(viewValue, attrs.advDateInput, true);\r\n }\r\n\r\n if (dateMomentValue.isValid()) {\r\n return dateMomentValue.utc().toISOString();\r\n } else {\r\n return viewValue;\r\n }\r\n }\r\n return viewValue;\r\n });\r\n }\r\n };\r\n }\r\n\r\n advDateInput.$inject = [\"$parse\"];\r\n angular.module(\"app\").directive(\"advDateInput\", advDateInput);\r\n\r\n}","/// \r\n/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvDisplay extends angular.IDirective {\r\n }\r\n\r\n interface IAdvDisplayScope extends angular.IScope {\r\n section: ISection;\r\n group: IGroup;\r\n advResponse: any;\r\n }\r\n\r\n advDisplay.$inject = [\"$parse\", \"$timeout\", \"ruleService\"];\r\n function advDisplay($parse: angular.IParseService,\r\n $timeout: angular.ITimeoutService,\r\n ruleService: Rules.IRuleService): IAdvDisplay {\r\n\r\n var link = (scope: IAdvDisplayScope, element: angular.IAugmentedJQuery, attrs, controller, transclude) => {\r\n var block: { clone }, childScope: any, previousElements;\r\n\r\n var displayRule: IDynamicDisplayRule = $parse(attrs.advDisplay)(scope);\r\n\r\n if (displayRule) {\r\n var ruleProperties = ruleService.getPropertiesToWatch(displayRule.rule);\r\n\r\n angular.forEach(ruleProperties, (ruleProperty) => {\r\n scope.$watch(attrs.advResponse + \".\" + ruleProperty, (newValue, oldValue, originalScope: IAdvDisplayScope) => {\r\n showHide(originalScope);\r\n }, true);\r\n });\r\n }\r\n\r\n var ELEMENT_NODE = 1;\r\n\r\n var extractElementNode = (element) => {\r\n for (var i = 0; i < element.length; i++) {\r\n var elm = element[i];\r\n if (elm.nodeType === ELEMENT_NODE) {\r\n return elm;\r\n }\r\n }\r\n }\r\n\r\n var domInsert = (element, parentElement, afterElement) => {\r\n // if for some reason the previous element was removed\r\n // from the dom sometime before this code runs then let's\r\n // just stick to using the parent element as the anchor\r\n if (afterElement) {\r\n var afterNode = extractElementNode(afterElement);\r\n if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) {\r\n afterElement = null;\r\n }\r\n }\r\n afterElement ? afterElement.after(element) : parentElement.prepend(element);\r\n }\r\n\r\n /**\r\n * Return the DOM siblings between the first and last node in the given array.\r\n * @param {Array} array like object\r\n * @returns {Array} the inputted object or a jqLite collection containing the nodes\r\n */\r\n function getBlockNodes(nodes) {\r\n // TODO(perf): update `nodes` instead of creating a new object?\r\n var node = nodes[0];\r\n var endNode = nodes[nodes.length - 1];\r\n var blockNodes;\r\n var slice = [].slice;\r\n\r\n for (var i = 1; node !== endNode && (node = node.nextSibling); i++) {\r\n if (blockNodes || nodes[i] !== node) {\r\n if (!blockNodes) {\r\n blockNodes = jQuery(slice.call(nodes, 0, i));\r\n }\r\n blockNodes.push(node);\r\n }\r\n }\r\n\r\n return blockNodes || nodes;\r\n }\r\n\r\n var show = () => {\r\n if (!childScope) {\r\n transclude((clone, newScope) => {\r\n childScope = newScope;\r\n // Note: We only need the first/last node of the cloned nodes.\r\n // However, we need to keep the reference to the jqlite wrapper as it might be changed later\r\n // by a directive with templateUrl when its template arrives.\r\n block = {\r\n clone: clone\r\n };\r\n domInsert(clone, element.parent(), element);\r\n\r\n });\r\n }\r\n };\r\n\r\n var hide = () => {\r\n if (previousElements) {\r\n previousElements.remove();\r\n previousElements = null;\r\n }\r\n if (childScope) {\r\n childScope.$destroy();\r\n childScope = null;\r\n }\r\n if (block) {\r\n previousElements = getBlockNodes(block.clone);\r\n previousElements.remove();\r\n previousElements = null;\r\n block = null;\r\n }\r\n };\r\n\r\n var ELEMENT_NODE = 1;\r\n\r\n var domInsert = (element, parentElement, afterElement) => {\r\n // if for some reason the previous element was removed\r\n // from the dom sometime before this code runs then let's\r\n // just stick to using the parent element as the anchor\r\n if (afterElement) {\r\n var afterNode = extractElementNode(afterElement);\r\n if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) {\r\n afterElement = null;\r\n }\r\n }\r\n afterElement ? afterElement.after(element) : parentElement.prepend(element);\r\n }\r\n\r\n var extractElementNode = (element) => {\r\n for (var i = 0; i < element.length; i++) {\r\n var elm = element[i];\r\n if (elm.nodeType === ELEMENT_NODE) {\r\n return elm;\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n var showHide = (originalScope: IAdvDisplayScope) => {\r\n scope.$evalAsync(() => {\r\n var localResponse = $parse(attrs.advResponse)(originalScope);\r\n var result = ruleService.evalRuleSet(displayRule.rule, localResponse);\r\n if (result) {\r\n if (displayRule.display === \"Show\") {\r\n show();\r\n } else {\r\n hide();\r\n }\r\n } else {\r\n if (displayRule.display === \"Show\") {\r\n hide();\r\n\r\n } else {\r\n show();\r\n }\r\n }\r\n });\r\n };\r\n\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n transclude: \"element\",\r\n priority: 999,\r\n link: link\r\n }\r\n }\r\n\r\n\r\n angular.module(\"app\").directive(\"advDisplay\", advDisplay);\r\n}","/// \r\n/// \r\n/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvDocumentAttributes extends angular.IAttributes {\r\n }\r\n\r\n interface IAdvDocument extends angular.IDirective {\r\n\r\n }\r\n\r\n interface IAdvDocumentScope extends angular.IScope {\r\n field: IDocumentUploadField;\r\n viewLink: string;\r\n ngModel: any;\r\n userApplicationId: string;\r\n uploadDocument: ($files) => void;\r\n clearDocument: () => void;\r\n viewDocument: () => void;\r\n uploading: boolean;\r\n uploaded: boolean;\r\n modelController: angular.INgModelController;\r\n hasDocument: boolean;\r\n }\r\n\r\n class AdvDocument implements IAdvDocument {\r\n static directiveId: string = \"advDocument\";\r\n templateUrl: string = \"/app/directives/advDocument.html\";\r\n restrict: string = \"E\";\r\n require = \"?ngModel\";\r\n scope: any = {\r\n field: \"=\",\r\n ngModel: \"=\",\r\n userApplicationId: \"=\"\r\n };\r\n\r\n constructor(private $http: angular.IHttpService, private Upload: angular.angularFileUpload.IUploadService, private config: Advant.Crossroads.ICrossroadsConfig, private helper: IHelper, private Restangular: Restangular.IService) {\r\n }\r\n\r\n link = (scope: IAdvDocumentScope, element, attrs: IAdvDocumentAttributes, ngModelController: angular.INgModelController) => {\r\n scope.uploaded = false;\r\n\r\n scope.$watch(\"field\", (newValue: any, oldValue, originalScope) => {\r\n scope.viewLink = this.config.apiHost + \"/\" + scope.userApplicationId + \"/attachment/\" + scope.field.key;\r\n });\r\n\r\n scope.$watch(\"userApplicationId\", (newValue: any, oldValue, originalScope) => {\r\n scope.viewLink = this.config.apiHost + \"/\" + scope.userApplicationId + \"/attachment/\" + scope.field.key;\r\n this.Restangular.one(scope.userApplicationId + \"/attachment/\" + scope.field.key + \"/exists\").get().then((result) => {\r\n scope.uploaded = result;\r\n }, (reason) => {\r\n });\r\n });\r\n\r\n scope.uploadDocument = ($files: any): void => {\r\n ngModelController.$setTouched();\r\n ngModelController.$setValidity(\"uploadType\", true);\r\n ngModelController.$setValidity(\"uploadSize\", true);\r\n\r\n var file = $files[0];\r\n if (file) {\r\n scope.uploading = true;\r\n var convertedSize = (file.size / 1024.0) / 1024.0;\r\n if (convertedSize > scope.field.maxFileSizeInMB) {\r\n ngModelController.$setValidity(\"uploadSize\", false);\r\n scope.uploading = false;\r\n }\r\n else if (scope.field.acceptedMimeTypes.split(\",\").indexOf(file.type) == -1) {\r\n ngModelController.$setValidity(\"uploadType\", false);\r\n scope.uploading = false;\r\n }\r\n else {\r\n this.Upload.upload({\r\n url: this.config.apiHost + \"/\" + scope.userApplicationId + \"/attachment/\" + scope.field.key,\r\n method: \"POST\",\r\n file: file\r\n }).then((response) => {\r\n scope.ngModel = response.data;\r\n scope.uploading = false;\r\n scope.uploaded = true;\r\n }, (reason) => {\r\n scope.uploading = false;\r\n if (reason.exceptionMessage && reason.exceptionMessage === \"File type is not allowed\") {\r\n ngModelController.$setValidity(\"uploadType\", false);\r\n }\r\n if (reason.exceptionMessage && reason.exceptionMessage.indexOf(\"File is too large\") > -1) {\r\n ngModelController.$setValidity(\"uploadSize\", false);\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n scope.uploading = false;\r\n }\r\n \r\n\r\n };\r\n\r\n scope.viewDocument = (): void => {\r\n var httpPath = scope.viewLink;\r\n this.helper.openFile(httpPath);\r\n };\r\n scope.clearDocument = (): void => {\r\n scope.ngModel = null;\r\n scope.uploaded = false;\r\n };\r\n }\r\n }\r\n angular.module(\"app\").directive(AdvDocument.directiveId, [\"$http\", \"Upload\", \"config\", \"helper\", \"Restangular\", ($http, Upload, config, helper, Restangular) =>\r\n new AdvDocument($http, Upload, config, helper, Restangular)\r\n ]);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvFieldDisplay extends angular.IDirective {\r\n\r\n }\r\n\r\n interface IAdvFieldDisplayScope extends angular.IScope {\r\n\r\n }\r\n\r\n class AdvFieldDisplay implements IAdvFieldDisplay {\r\n static directiveId: string = \"advFieldDisplay\";\r\n restrict: string = \"A\";\r\n replace: boolean = true;\r\n template: string;\r\n\r\n constructor(private $compile: angular.ICompileService, private $parse: angular.IParseService, private $timeout: angular.ITimeoutService) {\r\n }\r\n\r\n link = (scope: IAdvFieldDisplayScope, element, attrs) => {\r\n var delay: any = 0;\r\n if (attrs.delay) {\r\n delay = this.$parse(attrs.delay)(scope);\r\n }\r\n var parsed = this.$parse(attrs.advFieldDisplay);\r\n element.html(this.getStringValue(parsed, scope));\r\n var compiled = false;\r\n\r\n if (attrs.loadIf) {\r\n scope.$watch(attrs.loadIf, (newValue) => {\r\n if (newValue && !compiled) {\r\n scope.$evalAsync(() => {\r\n this.$compile(element.contents())(scope);\r\n compiled = true;\r\n if (attrs.isCompiled) {\r\n var isCompiled = this.$parse(attrs.isCompiled);\r\n isCompiled.assign(scope, compiled);\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n scope.$evalAsync(() => {\r\n this.$compile(element.contents())(scope);\r\n compiled = true;\r\n if (attrs.isCompiled) {\r\n var isCompiled = this.$parse(attrs.isCompiled);\r\n isCompiled.assign(scope, compiled);\r\n }\r\n });\r\n }\r\n };\r\n\r\n private getStringValue(parsed: angular.ICompiledExpression, scope: IAdvFieldDisplayScope) {\r\n return (parsed(scope) || \"\").toString();\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(AdvFieldDisplay.directiveId, [\"$compile\", \"$parse\", \"$timeout\", ($compile, $parse, $timeout: angular.ITimeoutService, $q: angular.IQService) =>\r\n new AdvFieldDisplay($compile, $parse, $timeout)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n\r\n interface IAdvFormField extends ng.IDirective {\r\n }\r\n\r\n interface IAdvFormFieldScope extends ng.IScope {\r\n field: IField;\r\n response: any;\r\n fieldKey: string;\r\n maskedResponse: string;\r\n isResponseHidden: boolean;\r\n\r\n showResponse(): void;\r\n hideResponse(): void;\r\n }\r\n\r\n class AdvFormField implements IAdvFormField {\r\n static directiveId: string = \"advFormField\";\r\n templateUrl = \"/app/directives/advFormField.html\";\r\n restrict: string = \"E\";\r\n scope: any = {\r\n field: \"=\",\r\n response: \"=\"\r\n };\r\n\r\n constructor(private helper: IHelper) {\r\n }\r\n\r\n link = (scope: IAdvFormFieldScope, element, attrs) => {\r\n scope.$watch(\"field\", (newValue: IField, oldValue: IField, originalScope: IAdvFormFieldScope) => {\r\n originalScope.fieldKey = this.toCamelCase(newValue.key);\r\n if (originalScope.response) {\r\n if (this.helper.isType(scope.field.type, \"DocumentUploadField\")) {\r\n if (originalScope.response[originalScope.fieldKey]) {\r\n originalScope.response[originalScope.fieldKey] = \"Document has been attached\";\r\n }\r\n }\r\n if (this.helper.isType(scope.field.type, \"DateField\")) {\r\n if (originalScope.response[originalScope.fieldKey]) {\r\n originalScope.response[originalScope.fieldKey] = moment.utc(originalScope.response[originalScope.fieldKey]).format(\"L\");\r\n }\r\n }\r\n\r\n scope.isResponseHidden = scope.field.maskField;\r\n }\r\n\r\n if (scope.field.maskField && originalScope.response[originalScope.fieldKey]) {\r\n let re = new RegExp(scope.field.maskFormat, \"g\");\r\n scope.maskedResponse = originalScope.response[originalScope.fieldKey].replace(re, \"x\");\r\n }\r\n });\r\n\r\n scope.showResponse = () => {\r\n scope.isResponseHidden = false;\r\n };\r\n\r\n scope.hideResponse = () => {\r\n scope.isResponseHidden = true;\r\n }\r\n };\r\n\r\n isUpperCase = (value: string): boolean => {\r\n if (!isNaN(value * 1)) {\r\n return false;\r\n } else {\r\n if (value === value.toUpperCase()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n\r\n toCamelCase = (value: string): string => {\r\n if (!value) {\r\n return value;\r\n }\r\n\r\n if (!this.isUpperCase(value.charAt(0))) {\r\n return value;\r\n }\r\n\r\n var chars = value.split(\"\");\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var hasNext = (i + 1 < chars.length);\r\n\r\n if (i > 0 && hasNext && !this.isUpperCase(chars[i + 1])) {\r\n break;\r\n }\r\n\r\n chars[i] = chars[i].toLowerCase();\r\n }\r\n\r\n return chars.join(\"\");\r\n };\r\n }\r\n\r\n angular.module(\"app\").directive(AdvFormField.directiveId, [\"helper\", helper =>\r\n new AdvFormField(helper)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n interface IAdvFormGroup extends ng.IDirective {\r\n\r\n }\r\n\r\n interface IAdvFormGroupScope extends ng.IScope {\r\n group: IGroup;\r\n response: any;\r\n formattedLayout: any;\r\n showHtml: boolean;\r\n }\r\n\r\n class AdvFormGroup implements IAdvFormGroup {\r\n static directiveId: string = \"advFormGroup\";\r\n templateUrl = \"/app/directives/advFormGroup.html\";\r\n restrict: string = \"E\";\r\n scope: any = {\r\n group: \"=\",\r\n response: \"=\"\r\n };\r\n\r\n link = (scope: IAdvFormGroupScope, element, attrs) => {\r\n scope.formattedLayout = {};\r\n scope.$watch(\"group\", (newValue: IGroup, oldValue: IGroup, originalScope: IAdvFormGroupScope) => {\r\n if (angular.equals({}, newValue.fields)) {\r\n scope.showHtml = true;\r\n }\r\n if (newValue.layout) {\r\n originalScope.formattedLayout.html = this.compileLayout(newValue.layout, newValue);\r\n }\r\n });\r\n };\r\n\r\n compileLayout(layout: string, group: IGroup): string {\r\n var formattedHtml: string;\r\n if (layout) {\r\n formattedHtml = layout;\r\n angular.forEach(group.fields, (field: IField, key: number) => {\r\n formattedHtml = formattedHtml.replace(\"[[\" + field.key + \"]]\", \"\");\r\n });\r\n }\r\n return formattedHtml;\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(AdvFormGroup.directiveId, () => new AdvFormGroup());\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n interface IAdvFormSection extends ng.IDirective {\r\n\r\n }\r\n\r\n interface IAdvFormSectionScope extends ng.IScope {\r\n section: ISection;\r\n response: any;\r\n }\r\n\r\n class AdvFormSection implements IAdvFormSection {\r\n static directiveId: string = \"advFormSection\";\r\n restrict: string = \"E\";\r\n templateUrl = \"/app/directives/advFormSection.html\";\r\n scope: any = {\r\n section: \"=\",\r\n response: \"=\"\r\n };\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").directive(AdvFormSection.directiveId, [() =>\r\n new AdvFormSection()\r\n ]);\r\n\r\n}","namespace Advant.Crossroads {\r\n\r\n interface IHighSchoolSearch {\r\n highSchools: IHighSchool[];\r\n searchFilter: string;\r\n selectedSchool: IHighSchool;\r\n state: string;\r\n schoolName: string;\r\n stateList: any;\r\n unlistedSchool: boolean;\r\n search?: () => void;\r\n selectSchool?: (highSchool: IHighSchool) => void;\r\n selectSchoolNotInList?: () => void;\r\n nextPage?: () => void;\r\n clear: (event: angular.IAngularEvent) => void;\r\n close: () => void;\r\n\r\n }\r\n\r\n interface IAdvHighSchool extends angular.IDirective {\r\n }\r\n\r\n interface IAdvHighSchoolScope extends angular.IScope {\r\n $schoolSearch: IHighSchoolSearch;\r\n ngModel: any;\r\n ceebField: any;\r\n typeField: any;\r\n streetField: any;\r\n street2Field: any;\r\n cityField: any;\r\n stateField: any;\r\n countryField: any;\r\n postalField: any;\r\n totalPages?: number;\r\n }\r\n\r\n class AdvHighSchool implements IAdvHighSchool {\r\n static directiveId: string = \"advHighSchool\";\r\n restrict: string = \"EA\";\r\n priority = 1;\r\n templateUrl: string = \"/app/directives/advHighSchool.html\";\r\n scope: any = {\r\n ngModel: \"=\",\r\n ceebField: \"=\",\r\n typeField: \"=\",\r\n streetField: \"=\",\r\n street2Field: \"=\",\r\n cityField: \"=\",\r\n stateField: \"=\",\r\n countryField: \"=\",\r\n postalField: \"=\",\r\n placeholder: \"@\"\r\n }\r\n\r\n constructor(private $document: angular.IDocumentService,\r\n private $uibPosition: angular.ui.bootstrap.IPositionService,\r\n private $parse: angular.IParseService,\r\n private $timeout: angular.ITimeoutService,\r\n private highSchoolLookup: IHighSchoolLookup,\r\n private stateLookup: IStateLookup) {\r\n }\r\n\r\n link = (scope: IAdvHighSchoolScope, element: JQuery, attrs) => {\r\n scope.$schoolSearch = {\r\n highSchools: null,\r\n searchFilter: null,\r\n selectedSchool: null,\r\n unlistedSchool: false,\r\n state: \"NC\",\r\n stateList: null,\r\n schoolName: scope.ngModel,\r\n clear: null,\r\n close: null\r\n };\r\n\r\n var lookupBox = element.find(\"[name = 'schoolLookupBox']\").first();\r\n var schoolField = element.find(\"[name = 'schoolNameField']\").first();\r\n var schoolFinder = element.find(\"[name = 'schoolFinder']\").first();\r\n var schoolList = lookupBox.find(\".school-list\").first();\r\n var schoolId = this.$parse(attrs.ngModel + \"Id\")(scope.$parent);\r\n\r\n var schoolNameWatch, searchWatch, stateWatch;\r\n\r\n scope.$schoolSearch.stateList = this.stateLookup.getStates();\r\n\r\n scope.$schoolSearch.unlistedSchool = !schoolId && scope.ngModel;\r\n\r\n if (!scope.$schoolSearch.unlistedSchool) {\r\n this.disableFields(attrs);\r\n }\r\n\r\n var turnOnSchoolNameWatch = () => {\r\n schoolNameWatch = scope.$watch((listenScope: IAdvHighSchoolScope) => { return listenScope.$schoolSearch.schoolName; }, (newValue) => { scope.ngModel = newValue; });\r\n };\r\n\r\n if (scope.$schoolSearch.unlistedSchool) {\r\n turnOnSchoolNameWatch();\r\n }\r\n\r\n\r\n var turnOnWatches = () => {\r\n turnOnSchoolNameWatch();\r\n searchWatch = scope.$watch((listenScope: IAdvHighSchoolScope) => { return listenScope.$schoolSearch.searchFilter; }, () => {\r\n scope.$schoolSearch.search();\r\n });\r\n\r\n stateWatch = scope.$watch((listenScope: IAdvHighSchoolScope) => { return listenScope.$schoolSearch.state; }, (newValue, oldValue) => {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n this.highSchoolLookup.state = newValue;\r\n scope.$schoolSearch.search();\r\n });\r\n }\r\n\r\n var turnOffWatches = () => {\r\n schoolNameWatch();\r\n searchWatch();\r\n stateWatch();\r\n }\r\n\r\n var turnOffJustSearchWatches = () => {\r\n searchWatch();\r\n stateWatch();\r\n }\r\n\r\n schoolField.click((event) => {\r\n event.preventDefault();\r\n var position = this.$uibPosition.position(element);\r\n lookupBox.css({ top: (position.top - 320 < -150 ? position.top + 60 : position.top - 400), left: position.left + 20 });\r\n if (!scope.$schoolSearch.unlistedSchool) {\r\n lookupBox.toggleClass(\"hidden\");\r\n scope.$schoolSearch.search();\r\n turnOnWatches();\r\n }\r\n });\r\n\r\n schoolFinder.click((event) => {\r\n event.preventDefault();\r\n schoolNameWatch();\r\n lookupBox.toggleClass(\"hidden\");\r\n scope.$schoolSearch.search();\r\n turnOnWatches();\r\n scope.$schoolSearch.unlistedSchool = false;\r\n scope.$digest();\r\n });\r\n\r\n\r\n\r\n scope.$schoolSearch.search = () => {\r\n this.highSchoolLookup.state = scope.$schoolSearch.state;\r\n this.highSchoolLookup.searchFilter = scope.$schoolSearch.searchFilter;\r\n if (scope.$schoolSearch.searchFilter) {\r\n this.highSchoolLookup.sortByRelevance = true;\r\n } else {\r\n this.highSchoolLookup.sortByRelevance = false;\r\n }\r\n\r\n this.highSchoolLookup.page = 1;\r\n schoolList.scrollTop(0);\r\n this.highSchoolLookup.getHighSchools().then((result) => {\r\n scope.$schoolSearch.highSchools = result;\r\n });\r\n };\r\n\r\n scope.$schoolSearch.selectSchoolNotInList = () => {\r\n this.$parse(attrs.ngModel + \"Id\").assign(scope.$parent, null);\r\n scope.$schoolSearch.schoolName = \"\";\r\n scope.$schoolSearch.unlistedSchool = true;\r\n if (angular.isDefined(attrs.ceebField)) {\r\n scope.ceebField = \"000003\";\r\n }\r\n this.enableFields(attrs);\r\n turnOffJustSearchWatches();\r\n lookupBox.addClass(\"hidden\");\r\n };\r\n\r\n scope.$schoolSearch.selectSchool = (highSchool: IHighSchool) => {\r\n scope.ngModel = highSchool.name;\r\n this.$parse(attrs.ngModel + \"Id\").assign(scope.$parent, highSchool.id);\r\n scope.$applyAsync(attrs.ngModel + \"Id\");\r\n scope.$schoolSearch.schoolName = highSchool.name;\r\n scope.$schoolSearch.unlistedSchool = false;\r\n\r\n if (angular.isDefined(attrs.ceebField)) {\r\n scope.ceebField = highSchool.ceebCode;\r\n }\r\n\r\n if (angular.isDefined(attrs.typeField)) {\r\n scope.typeField = highSchool.highSchoolType;\r\n }\r\n\r\n if (angular.isDefined(attrs.streetField)) {\r\n scope.streetField = highSchool.address.street1;\r\n }\r\n\r\n if (angular.isDefined(attrs.street2Field)) {\r\n scope.street2Field = highSchool.address.street2;\r\n }\r\n\r\n if (angular.isDefined(attrs.cityField)) {\r\n scope.cityField = highSchool.address.city;\r\n }\r\n\r\n if (angular.isDefined(attrs.stateField)) {\r\n scope.stateField = highSchool.address.state;\r\n }\r\n\r\n if (angular.isDefined(attrs.countryField)) {\r\n scope.countryField = highSchool.address.country || \"US\";\r\n }\r\n\r\n if (angular.isDefined(attrs.postalField)) {\r\n scope.postalField = highSchool.address.zip;\r\n }\r\n\r\n this.disableFields(attrs);\r\n turnOffWatches();\r\n lookupBox.addClass(\"hidden\");\r\n };\r\n\r\n scope.$schoolSearch.nextPage = () => {\r\n if (this.highSchoolLookup.totalPages > this.highSchoolLookup.page) {\r\n this.highSchoolLookup.page += 1;\r\n this.highSchoolLookup.getHighSchools().then((result) => {\r\n scope.$schoolSearch.highSchools = scope.$schoolSearch.highSchools.concat(result);\r\n });\r\n }\r\n \r\n };\r\n\r\n scope.$schoolSearch.clear = (event: angular.IAngularEvent) => {\r\n event.preventDefault();\r\n\r\n scope.$schoolSearch.schoolName = null;\r\n this.$parse(attrs.ngModel + \"Id\").assign(scope.$parent, null);\r\n this.$parse(attrs.ngModel).assign(scope.$parent, null);\r\n\r\n this.clearFields(scope, attrs);\r\n };\r\n\r\n scope.$schoolSearch.close = () => {\r\n turnOffWatches();\r\n lookupBox.addClass(\"hidden\");\r\n };\r\n\r\n }\r\n\r\n disableFields = (attrs) => {\r\n // Have to run this code in $timeout because we need to run after the last $digest cycle in case any of these fields\r\n // are hidden\r\n this.$timeout(() => {\r\n if (angular.isDefined(attrs.ceebFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.ceebField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.typeFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.typeField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.streetFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.streetField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.street2FieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.street2Field + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.cityFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.cityField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n if (angular.isDefined(attrs.stateFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").css(\"pointerEvents\", \"none\");\r\n }\r\n if (angular.isDefined(attrs.countryFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").attr(\"disabled\", \"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").css(\"pointerEvents\", \"none\");\r\n }\r\n if (angular.isDefined(attrs.postalFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.postalField + \"']\").attr(\"disabled\", \"disabled\");\r\n }\r\n });\r\n };\r\n\r\n clearFields = (scope, attrs) => {\r\n if (angular.isDefined(attrs.ceebField)) {\r\n scope.ceebField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.typeField)) {\r\n scope.typeField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.streetField)) {\r\n scope.streetField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.street2Field)) {\r\n scope.street2Field = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.cityField)) {\r\n scope.cityField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.stateField)) {\r\n scope.stateField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.countryField)) {\r\n scope.countryField = null;\r\n }\r\n\r\n if (angular.isDefined(attrs.postalField)) {\r\n scope.postalField = null;\r\n }\r\n\r\n };\r\n\r\n enableFields = (attrs) => {\r\n // Have to run this code in $timeout because we need to run after the last $digest cycle in case any of these fields\r\n // are hidden\r\n this.$timeout(() => {\r\n if (angular.isDefined(attrs.ceebFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.ceebField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.typeFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.typeField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.streetFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.streetField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.street2FieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.street2Field + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.cityFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.cityField + \"']\").removeAttr(\"disabled\");\r\n }\r\n if (angular.isDefined(attrs.stateFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.stateField + \"']\").find(\"*\").css(\"pointerEvents\", \"\");\r\n }\r\n if (angular.isDefined(attrs.countryFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").removeAttr(\"disabled\");\r\n this.$document.find(\"[ng-model='\" + attrs.countryField + \"']\").find(\"*\").css(\"pointerEvents\", \"\");\r\n }\r\n if (angular.isDefined(attrs.postalFieldDisabled)) {\r\n this.$document.find(\"[ng-model='\" + attrs.postalField + \"']\").removeAttr(\"disabled\");\r\n }\r\n });\r\n };\r\n }\r\n\r\n angular.module(\"app\").directive(AdvHighSchool.directiveId, [\"$document\", \"$uibPosition\", \"$parse\", \"$timeout\", \"highSchoolLookup\", \"stateLookup\",\r\n ($document, $uibPosition, $parse, $timeout, highSchoolLookup, stateLookup) =>\r\n new AdvHighSchool($document, $uibPosition, $parse, $timeout, highSchoolLookup, stateLookup)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n interface IAdvHtmlCompile extends ng.IDirective {\r\n }\r\n\r\n interface IAdvHtmlCompileScope extends ng.IScope {\r\n }\r\n\r\n class AdvHtmlCompile implements IAdvHtmlCompile {\r\n static directiveId: string = \"advHtmlCompile\";\r\n restrict: string = \"A\";\r\n\r\n constructor(private $compile: ng.ICompileService) {\r\n }\r\n\r\n link = (scope: IAdvHtmlCompileScope, element, attrs) => {\r\n scope.$watch(attrs.advHtmlCompile, (newValue) => {\r\n element.html(newValue);\r\n this.$compile(element.contents())(scope);\r\n });\r\n\r\n }\r\n }\r\n angular.module(\"app\").directive(AdvHtmlCompile.directiveId, [\"$compile\", $compile =>\r\n new AdvHtmlCompile($compile)\r\n ]);\r\n}\r\n","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvInfiniteScroll extends angular.IDirective {\r\n }\r\n\r\n interface IAdvInfiniteScrollScope extends angular.IScope {\r\n\r\n }\r\n\r\n class AdvInfiniteScroll implements IAdvInfiniteScroll {\r\n static directiveId: string = \"advInfiniteScroll\";\r\n restrict: string = \"A\";\r\n\r\n constructor(private $timeout: angular.ITimeoutService) {\r\n }\r\n\r\n link = (scope: IAdvInfiniteScrollScope, element, attrs) => {\r\n var lengthThreshold = attrs.scrollThreshold || 50;\r\n var timeThreshold = attrs.timeThreshold || 400;\r\n var handler = scope.$eval(attrs.advInfiniteScroll);\r\n var promise = null;\r\n var lastRemaining = 9999;\r\n\r\n lengthThreshold = parseInt(lengthThreshold, 10);\r\n timeThreshold = parseInt(timeThreshold, 10);\r\n\r\n\r\n if (!handler || !angular.isFunction(handler)) {\r\n scope.$watch(attrs.advInfiniteScroll,(newValue) => {\r\n handler = newValue;\r\n\r\n if (!handler || !angular.isFunction(handler)) {\r\n handler = angular.noop;\r\n }\r\n });\r\n handler = angular.noop;\r\n }\r\n\r\n element.bind(\"scroll\",() => {\r\n var remaining = element[0].scrollHeight - (element[0].clientHeight + element[0].scrollTop);\r\n\r\n //if we have reached the threshold and we scroll down\r\n if (remaining < lengthThreshold && (remaining - lastRemaining) < 0) {\r\n\r\n //if there is already a timer running which has no expired yet we have to cancel it and restart the timer\r\n if (promise !== null) {\r\n this.$timeout.cancel(promise);\r\n }\r\n promise = this.$timeout(() => {\r\n handler();\r\n promise = null;\r\n }, timeThreshold);\r\n }\r\n lastRemaining = remaining;\r\n });\r\n\r\n };\r\n }\r\n\r\n\r\n // Update the app1 variable name to be that of your module variable\r\n angular.module(\"app\").directive(AdvInfiniteScroll.directiveId, [\"$timeout\", $timeout =>\r\n new AdvInfiniteScroll($timeout)\r\n ]);\r\n}","/// \r\n/// \r\n/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvMajor extends angular.IDirective {\r\n }\r\n\r\n interface IAdvMajorScope extends angular.IScope {\r\n activeMajors: Array;\r\n allMajors: Array;\r\n majorLists: Array;\r\n availableTerms: Array;\r\n selectedMajorResponse: string;\r\n required: boolean;\r\n model: any;\r\n currentTerm: ITerm;\r\n advResponse: any;\r\n elemName: string;\r\n modelValue: any;\r\n }\r\n\r\n class AdvMajor implements IAdvMajor {\r\n static directiveId: string = \"advMajor\";\r\n restrict: string = \"E\";\r\n require: string = \"?ngModel\";\r\n templateUrl: string = \"/app/directives/advMajor.html\";\r\n scope: any = {\r\n model: \"=ngModel\",\r\n majorLists: \"=\",\r\n currentTerm: \"=\",\r\n availableTerms: \"=\",\r\n required: \"@\",\r\n advResponse: \"=\",\r\n placeholder: \"@\"\r\n };\r\n\r\n constructor(private q$: angular.IQService, private ruleService: Rules.IRuleService) {\r\n }\r\n\r\n\r\n link = (scope: IAdvMajorScope, element, attrs, ctrl: angular.INgModelController) => {\r\n if (!ctrl) { return; }\r\n scope.selectedMajorResponse = attrs.name.toLowerCase() + \"SelectedMajor\";\r\n scope.elemName = attrs.name + \"_select\";\r\n\r\n if (attrs.majorlist) {\r\n scope.$watchCollection(\"majorLists\", (newValue: ITerm, oldValue, originalScope) => {\r\n if (newValue) {\r\n var list = _.find(scope.majorLists, { \"id\": attrs.majorlist });\r\n if (list) {\r\n scope.activeMajors = _.sortBy(list.majors, \"name\");\r\n scope.modelValue = this.getSelectedMajor(scope, attrs.majorFormat);\r\n }\r\n }\r\n });\r\n } else {\r\n scope.$watchCollection(\"majorLists\", (newValue: ITerm, oldValue, originalScope) => {\r\n if (newValue !== oldValue) {\r\n this.getMajorList(scope, attrs.majorFormat);\r\n }\r\n });\r\n\r\n scope.$watch(\"currentTerm\", (newValue: ITerm, oldValue, originalScope) => {\r\n this.getMajorList(scope, attrs.majorFormat);\r\n });\r\n\r\n\r\n scope.$watch(\"advResponse\", (newValue, oldValue, originalScope) => {\r\n this.getMajorList(scope, attrs.majorFormat);\r\n }, true);\r\n\r\n \r\n scope.$watch(\"modelValue\", (newValue: any, oldValue, originalScope) => {\r\n var majorCode = this.getMajorCode(scope, attrs.majorFormat);\r\n if (newValue !== oldValue || (majorCode == null && scope.activeMajors != null)) {\r\n if (newValue) {\r\n if (newValue.code !== majorCode) {\r\n scope.model = this.getMajorValue(newValue, attrs.majorFormat);\r\n }\r\n\r\n if (attrs.nameField) {\r\n scope.advResponse[attrs.nameField] = newValue.name;\r\n }\r\n if (attrs.nameAndCodeField) {\r\n scope.advResponse[attrs.nameAndCodeField] = newValue.code + \"|\" + newValue.name;\r\n }\r\n }\r\n else {\r\n scope.advResponse[attrs.nameField] = null;\r\n scope.advResponse[attrs.nameAndCodeField] = null;\r\n scope.model = null;\r\n }\r\n }\r\n });\r\n }\r\n\r\n scope.$watch(\"advResponse[selectedMajorResponse]\", (newValue: IMajor, oldValue, originalScope) => {\r\n if (newValue) {\r\n\r\n scope.model = this.getMajorValue(newValue, attrs.majorFormat);\r\n\r\n if (attrs.nameField) {\r\n scope.advResponse[attrs.nameField] = newValue.name;\r\n }\r\n if (attrs.nameAndCodeField) {\r\n scope.advResponse[attrs.nameAndCodeField] = newValue.code + \"|\" + newValue.name;\r\n }\r\n } else {\r\n if (attrs.nameField) {\r\n scope.advResponse[attrs.nameField] = null;\r\n }\r\n if (attrs.nameAndCodeField) {\r\n scope.advResponse[attrs.nameAndCodeField] = null;\r\n }\r\n scope.model = null;\r\n }\r\n\r\n });\r\n };\r\n\r\n getMajorList = (scope: IAdvMajorScope, majorFormat) => {\r\n\r\n if (scope.majorLists && scope.majorLists.length > 0) {\r\n scope.activeMajors = [];\r\n var majorId: string;\r\n\r\n if (!scope.currentTerm) {\r\n return;\r\n }\r\n\r\n var majorLists: Array = _.filter(scope.majorLists,\r\n (majorList) => {\r\n return _.includes(scope.currentTerm.majorListIds, majorList.id);\r\n });\r\n\r\n var rulePromises = [];\r\n _.forEach(majorLists,\r\n (majorList) => {\r\n if (majorList.ruleId) {\r\n rulePromises.push(this.ruleService\r\n .getAndEvalRuleSet(majorList.applicationDefinitionId,\r\n majorList.ruleId,\r\n scope.advResponse).then(result => {\r\n if (result) {\r\n scope.activeMajors = scope.activeMajors.concat(majorList.majors);\r\n scope.activeMajors = _.uniqBy(scope.activeMajors, \"id\");\r\n scope.activeMajors = _.sortBy(scope.activeMajors, \"name\");\r\n }\r\n return;\r\n }));\r\n } else {\r\n scope.activeMajors = scope.activeMajors.concat(majorList.majors);\r\n scope.activeMajors = _.uniqBy(scope.activeMajors, \"id\");\r\n scope.activeMajors = _.sortBy(scope.activeMajors, \"name\");\r\n\r\n }\r\n });\r\n\r\n if (rulePromises.length > 0) {\r\n this.q$.all(rulePromises).then(result => {\r\n if (scope.advResponse[scope.selectedMajorResponse]) {\r\n majorId = scope.advResponse[scope.selectedMajorResponse].id;\r\n } else {\r\n majorId = null;\r\n }\r\n\r\n\r\n const inCurrentList = _.includes(_.map(scope.activeMajors, \"id\"), majorId);\r\n\r\n if (!inCurrentList) {\r\n scope.model = null;\r\n scope.advResponse[scope.selectedMajorResponse] = null;\r\n scope.modelValue = null;\r\n }\r\n });\r\n } else {\r\n if (scope.advResponse && scope.advResponse[scope.selectedMajorResponse]) {\r\n majorId = scope.advResponse[scope.selectedMajorResponse].id;\r\n } else {\r\n majorId = null;\r\n }\r\n\r\n const inCurrentList = _.includes(_.map(scope.activeMajors, \"id\"), majorId);\r\n\r\n if (!inCurrentList) {\r\n scope.model = null;\r\n scope.advResponse[scope.selectedMajorResponse] = null;\r\n }\r\n }\r\n }\r\n };\r\n\r\n getMajorValue = (selectedMajor: IMajor, majorFormat: string) => {\r\n var major: IMajor;\r\n if (selectedMajor) {\r\n switch (majorFormat) {\r\n case \"Name\":\r\n return selectedMajor.name;\r\n case \"CodeAndName\":\r\n return selectedMajor.code + \"|\" + selectedMajor.name;\r\n case \"Code\":\r\n default:\r\n return selectedMajor.code;\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n\r\n\r\n getSelectedMajor = (scope: IAdvMajorScope, majorFormat: string) => {\r\n var major: IMajor;\r\n if (scope.model) {\r\n switch (majorFormat) {\r\n case \"Name\":\r\n var name = scope.model\r\n if (name.indexOf(\"|\") > -1) {\r\n name = name.split(\"|\")[1];\r\n }\r\n major = _.find(scope.activeMajors, { \"name\": name });\r\n break;\r\n case \"CodeAndName\":\r\n case \"Code\":\r\n default:\r\n var code = scope.model\r\n if (code.indexOf(\"|\") > -1) {\r\n var code = code.split(\"|\")[0];\r\n }\r\n major = _.find(scope.activeMajors, { \"code\": code });\r\n break;\r\n }\r\n }\r\n\r\n return major;\r\n };\r\n\r\n getMajorCode = (scope: IAdvMajorScope, majorFormat: string) => {\r\n var major: IMajor;\r\n if (scope.model && scope.activeMajors) {\r\n switch (majorFormat) {\r\n case \"Name\":\r\n major = _.find(scope.activeMajors, { \"name\": scope.model });\r\n break;\r\n case \"CodeAndName\":\r\n case \"Code\":\r\n default:\r\n var code = scope.model;\r\n if (code.indexOf(\"|\") > -1) {\r\n var code = code.split(\"|\")[0];\r\n }\r\n major = _.find(scope.activeMajors, { \"code\": code });\r\n break;\r\n }\r\n\r\n if (major) {\r\n return major.code;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n\r\n\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").directive(AdvMajor.directiveId, [\"$q\", \"ruleService\", ($q, ruleService) =>\r\n new AdvMajor($q, ruleService)\r\n ]);\r\n}","// Install the angularjs.TypeScript.DefinitelyTyped NuGet package\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvPrecision extends angular.IDirective {\r\n }\r\n\r\n interface IAdvPrecisionScope extends angular.IScope {\r\n }\r\n\r\n interface IAdvPrecisionAttributes extends angular.IAttributes {\r\n advPrecision: string;\r\n }\r\n\r\n advPrecision.$inject = [\"$parse\"];\r\n function advPrecision($parse: angular.IParseService): IAdvPrecision {\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: link\r\n }\r\n\r\n function link(scope: IAdvPrecisionScope, element: angular.IAugmentedJQuery, attrs: IAdvPrecisionAttributes, ngModelCtrl: angular.INgModelController) {\r\n ngModelCtrl.$parsers.unshift((viewValue) => {\r\n if (viewValue) {\r\n var maxPrecision = attrs.advPrecision;\r\n var precisionRegex = new RegExp(\"^\\\\d+(\\\\.\\\\d{0,\" + maxPrecision + \"})?$\");\r\n if (viewValue.match(precisionRegex)) {\r\n ngModelCtrl.$setValidity(\"number\", true);\r\n } else {\r\n ngModelCtrl.$setValidity(\"number\", false);\r\n return undefined;\r\n }\r\n } else {\r\n ngModelCtrl.$setValidity(\"number\", true);\r\n }\r\n\r\n return viewValue;\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advPrecision\", advPrecision);\r\n}","namespace Advant.Crossroads {\r\n\r\n interface IRLCPSponsoringSchoolSearch {\r\n schoolDistrictName: string;\r\n schoolDistrictNumber: string;\r\n schoolName: string;\r\n schoolCeebCode: string;\r\n schoolNumber: string;\r\n districts: ISchoolDistrict[];\r\n schools: IRLCPSponsoringSchool[];\r\n selectedDistrict: any;\r\n selectedSchool: any;\r\n orientation: string;\r\n\r\n districtSearch?: (searchFilter: string, replace?: boolean) => void;\r\n schoolSearch?: (district: ISchoolDistrict, searchFilter: string, replace?: boolean) => void;\r\n selectSchool?: (school: IRLCPSponsoringSchool) => void;\r\n selectDistrict?: (district: ISchoolDistrict) => void;\r\n loadMoreSchools?: ($select, $event) => void;\r\n loadMoreDistricts?: ($select, $event) => void;\r\n\r\n }\r\n\r\n interface IAdvRLCPSponsoringHighSchoolAttributes extends angular.IAttributes {\r\n orientation: string;\r\n }\r\n\r\n interface IAdvRLCPSonsoringHighSchool extends angular.IDirective {\r\n }\r\n\r\n interface IAdvRLCPSonsoringHighSchoolScope extends angular.IScope {\r\n rlcpSponsoringSchoolSearch: IRLCPSponsoringSchoolSearch;\r\n\r\n schoolDistrictNameField: string;\r\n schoolDistrictNumberField: string;\r\n schoolNameField: string;\r\n schoolCeebCodeField: string;\r\n schoolNumberField: string;\r\n errorModel: any;\r\n ngModel: any;\r\n\r\n loading: boolean;\r\n\r\n hsPage: number;\r\n hsTotalPages: number;\r\n dPage: number;\r\n dTotalPages: number;\r\n\r\n clearDistrict?: () => void;\r\n clearSchool?: () => void;\r\n }\r\n\r\n class AdvRLCPSonsoringHighSchool implements IAdvRLCPSonsoringHighSchool {\r\n static directiveId: string = \"advRlcpSponsoringHighSchool\";\r\n restrict: string = \"EA\";\r\n priority = 1;\r\n templateUrl: string = \"/app/directives/advRLCPSonsoringHighSchool.html\";\r\n require = \"?ngModel\";\r\n scope: any = {\r\n ngModel: \"=\",\r\n schoolDistrictNameField: \"=?\",\r\n schoolDistrictNumberField: \"=?\",\r\n schoolNameField: \"=?\",\r\n schoolCeebCodeField: \"=?\",\r\n schoolNumberField: \"=?\",\r\n placeholder: \"@\",\r\n errorModel: \"=\"\r\n }\r\n\r\n constructor(private $document: angular.IDocumentService,\r\n private $uibPosition: angular.ui.bootstrap.IPositionService,\r\n private $parse: angular.IParseService,\r\n private $timeout: angular.ITimeoutService,\r\n private rlcpSchoolLookup: IRLCPSponsoringSchoolLookup,\r\n private schoolDistrictLookup: ISchoolDistrictLookup) {\r\n }\r\n\r\n link = (scope: IAdvRLCPSonsoringHighSchoolScope, element: JQuery, attrs: IAdvRLCPSponsoringHighSchoolAttributes, controller) => {\r\n var ctrl = controller;\r\n \r\n scope.rlcpSponsoringSchoolSearch = {\r\n schoolDistrictName: scope.schoolDistrictNameField,\r\n schoolDistrictNumber: scope.schoolDistrictNumberField,\r\n schoolName: scope.schoolNameField,\r\n schoolCeebCode: scope.schoolCeebCodeField,\r\n schoolNumber: scope.schoolNumberField,\r\n districts: [],\r\n schools: [],\r\n selectedDistrict: { leaName: scope.schoolDistrictNameField, leaNumber: scope.schoolDistrictNumberField },\r\n selectedSchool: { schoolName: scope.schoolNameField, ceebCode: scope.schoolCeebCodeField, schoolNumber: scope.schoolNumberField },\r\n orientation: attrs.orientation\r\n\r\n };\r\n\r\n scope.hsPage = 1;\r\n scope.dPage = 1;\r\n\r\n scope.rlcpSponsoringSchoolSearch.districtSearch = (searchFilter, replace = true) => {\r\n if (searchFilter && replace) {\r\n scope.dPage = 1;\r\n scope.dTotalPages = 1;\r\n }\r\n\r\n this.schoolDistrictLookup.searchFilter = searchFilter || null;\r\n this.schoolDistrictLookup.page = scope.dPage;\r\n this.schoolDistrictLookup.sortBy = \"LEANameSorting\";\r\n this.schoolDistrictLookup.getSchoolDistricts().then(result => {\r\n if (replace === false) {\r\n this.schoolDistrictLookup.sortByRelevance = false;\r\n scope.rlcpSponsoringSchoolSearch.districts = scope.rlcpSponsoringSchoolSearch.districts.concat(result);\r\n\r\n } else {\r\n this.schoolDistrictLookup.sortByRelevance = true;\r\n scope.rlcpSponsoringSchoolSearch.districts = result;\r\n }\r\n scope.dTotalPages = this.schoolDistrictLookup.totalPages;\r\n scope.loading = false;\r\n });\r\n\r\n }\r\n\r\n scope.rlcpSponsoringSchoolSearch.schoolSearch = (district, searchFilter, replace = true) => {\r\n if (district) {\r\n if (searchFilter && replace) {\r\n scope.hsPage = 1;\r\n scope.hsTotalPages = 1;\r\n }\r\n this.rlcpSchoolLookup.page = scope.hsPage;\r\n this.rlcpSchoolLookup.district = district.leaNumber;\r\n this.rlcpSchoolLookup.searchFilter = searchFilter;\r\n this.rlcpSchoolLookup.sortBy = \"SchoolName\";\r\n this.rlcpSchoolLookup.getRLCPSponsoringSchools().then(result => {\r\n if (replace === false) {\r\n this.rlcpSchoolLookup.sortByRelevance = false;\r\n scope.rlcpSponsoringSchoolSearch.schools = scope.rlcpSponsoringSchoolSearch.schools.concat(result);\r\n }\r\n else {\r\n this.rlcpSchoolLookup.sortByRelevance = true;\r\n scope.rlcpSponsoringSchoolSearch.schools = result;\r\n }\r\n scope.hsTotalPages = this.rlcpSchoolLookup.totalPages;\r\n scope.loading = false;\r\n });\r\n } else {\r\n scope.rlcpSponsoringSchoolSearch.schoolName = null;\r\n }\r\n }\r\n\r\n scope.rlcpSponsoringSchoolSearch.selectDistrict = (district) => {\r\n if (district) {\r\n scope.clearSchool();\r\n scope.rlcpSponsoringSchoolSearch.schoolDistrictName = district.leaName;\r\n scope.rlcpSponsoringSchoolSearch.schoolDistrictNumber = district.leaNumber;\r\n scope.schoolDistrictNameField = scope.rlcpSponsoringSchoolSearch.schoolDistrictName;\r\n scope.schoolDistrictNumberField = scope.rlcpSponsoringSchoolSearch.schoolDistrictNumber;\r\n\r\n scope.rlcpSponsoringSchoolSearch.schoolSearch(district, \"\");\r\n }\r\n else {\r\n scope.clearDistrict();\r\n scope.clearSchool();\r\n scope.rlcpSponsoringSchoolSearch.districtSearch(\"\", true)\r\n }\r\n }\r\n\r\n scope.rlcpSponsoringSchoolSearch.selectSchool = (school) => {\r\n if (school) {\r\n scope.schoolDistrictNameField = scope.rlcpSponsoringSchoolSearch.schoolDistrictName;\r\n scope.schoolDistrictNumberField = scope.rlcpSponsoringSchoolSearch.schoolDistrictNumber;\r\n scope.schoolNameField = school.schoolName;\r\n scope.schoolCeebCodeField = school.ceebCode;\r\n scope.schoolNumberField = school.schoolNumber;\r\n\r\n scope.ngModel = scope.schoolDistrictNameField + \"|\" + scope.schoolNameField;\r\n ctrl.$modelValue = scope.schoolDistrictNameField + \"|\" + scope.schoolNameField; //scope.ngModel;\r\n }\r\n else {\r\n scope.clearSchool();\r\n scope.rlcpSponsoringSchoolSearch.schoolSearch(scope.rlcpSponsoringSchoolSearch.selectedDistrict, \"\", true);\r\n }\r\n }\r\n\r\n scope.rlcpSponsoringSchoolSearch.loadMoreDistricts = ($select, $event) => {\r\n if (!$event) {\r\n scope.dPage = 1;\r\n scope.rlcpSponsoringSchoolSearch.schools = [];\r\n scope.rlcpSponsoringSchoolSearch.districts = [];\r\n }\r\n else {\r\n $event.stopPropagation();\r\n $event.preventDefault();\r\n scope.dPage++;\r\n }\r\n\r\n scope.loading = true;\r\n\r\n scope.rlcpSponsoringSchoolSearch.districtSearch($select.search, false);\r\n }\r\n\r\n scope.rlcpSponsoringSchoolSearch.loadMoreSchools = ($select, $event) => {\r\n if (!$event) {\r\n scope.hsPage = 1;\r\n scope.rlcpSponsoringSchoolSearch.schools = [];\r\n }\r\n else {\r\n $event.stopPropagation();\r\n $event.preventDefault();\r\n scope.hsPage++;\r\n }\r\n\r\n scope.loading = true;\r\n\r\n scope.rlcpSponsoringSchoolSearch.schoolSearch(scope.rlcpSponsoringSchoolSearch.selectedDistrict, $select.search, false);\r\n }\r\n\r\n scope.clearDistrict = () => {\r\n scope.rlcpSponsoringSchoolSearch.schoolDistrictName = null;\r\n scope.rlcpSponsoringSchoolSearch.schoolDistrictNumber = null;\r\n scope.rlcpSponsoringSchoolSearch.selectedDistrict = null;\r\n scope.schoolDistrictNameField = null;\r\n scope.schoolDistrictNumberField = null;\r\n scope.ngModel = null;\r\n }\r\n\r\n scope.clearSchool = () => {\r\n scope.rlcpSponsoringSchoolSearch.schoolCeebCode = null;\r\n scope.rlcpSponsoringSchoolSearch.schoolName = null;\r\n scope.rlcpSponsoringSchoolSearch.selectedSchool = null;\r\n scope.rlcpSponsoringSchoolSearch.schoolNumber = null;\r\n scope.schoolCeebCodeField = null;\r\n scope.schoolNameField = null;\r\n scope.schoolNumberField = null;\r\n scope.ngModel = null;\r\n }\r\n\r\n scope.$watch(() => { return scope.errorModel; }, (errorModel) => {\r\n for (var key in errorModel) {\r\n controller.$error[key] = errorModel[key];\r\n }\r\n });\r\n\r\n scope.$watch(\"ngModel\", (newvalue, oldvalue) => {\r\n if (newvalue && scope.rlcpSponsoringSchoolSearch.selectedDistrict && scope.rlcpSponsoringSchoolSearch.selectedSchool) {\r\n ctrl.$setValidity(\"required\", true);\r\n }\r\n else {\r\n ctrl.$setValidity(\"required\", false);\r\n }\r\n });\r\n\r\n ctrl.$validators.required = (value) => {\r\n if (!value) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (scope.rlcpSponsoringSchoolSearch.schoolDistrictNumber) {\r\n scope.rlcpSponsoringSchoolSearch.schoolSearch(scope.rlcpSponsoringSchoolSearch.selectedDistrict, \"\");\r\n }\r\n\r\n scope.rlcpSponsoringSchoolSearch.districtSearch(\"\", false);\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(AdvRLCPSonsoringHighSchool.directiveId, [\"$document\", \"$uibPosition\", \"$parse\", \"$timeout\", \"rlcpSponsoringSchoolLookup\", \"schoolDistrictLookup\",\r\n ($document, $uibPosition, $parse, $timeout, rlcpSponsoringSchoolLookup, schoolDistrictLookup) =>\r\n new AdvRLCPSonsoringHighSchool($document, $uibPosition, $parse, $timeout, rlcpSponsoringSchoolLookup, schoolDistrictLookup)\r\n ]);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvScrollTo extends angular.IDirective {\r\n }\r\n\r\n interface IAdvScrollToScope extends angular.IScope {\r\n }\r\n\r\n interface IAdvScrollToAttributes extends angular.IAttributes {\r\n advScrollTo: string;\r\n scrollSpeed?: string;\r\n ngClick?: any;\r\n clickEventAction?: string;\r\n scrollEnabled?: string;\r\n }\r\n\r\n AdvScrollTo.$inject = [\"$window\", \"$parse\"];\r\n function AdvScrollTo($window: angular.IWindowService, $parse: angular.IParseService): IAdvScrollTo {\r\n return {\r\n restrict: \"A\",\r\n link: link,\r\n\r\n }\r\n\r\n function link(scope: IAdvScrollToScope, element: angular.IAugmentedJQuery, attrs: IAdvScrollToAttributes) {\r\n var speed = attrs.scrollSpeed != null ? parseInt(attrs.scrollSpeed) : 500;\r\n var clickEvent;\r\n \r\n attrs.clickEventAction = attrs.clickEventAction ? attrs.clickEventAction : \"before\";\r\n\r\n if (attrs.ngClick) {\r\n clickEvent = _.clone(attrs.ngClick);\r\n element.off(\"click\");\r\n }\r\n\r\n\r\n element.on('click', (e) => {\r\n var scrollEnabled = attrs.scrollEnabled ? scope.$eval(attrs.scrollEnabled) : true;\r\n if (attrs.clickEventAction == \"before\" && clickEvent) {\r\n scope.$apply(clickEvent);\r\n }\r\n\r\n if (scrollEnabled) {\r\n $(\"html, body\").animate({\r\n scrollTop: isFinite(parseInt(attrs.advScrollTo)) ? attrs.advScrollTo : $(\"#\" + attrs.advScrollTo).offset().top\r\n }, speed).promise().done(() => {\r\n if (attrs.clickEventAction == \"after\" && clickEvent) {\r\n scope.$apply(clickEvent);\r\n }\r\n });\r\n } else {\r\n if (attrs.clickEventAction == \"after\" && clickEvent) {\r\n scope.$apply(clickEvent);\r\n }\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advScrollTo\", AdvScrollTo);\r\n}","/// \r\n/// \r\n/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvSelect extends angular.IDirective {\r\n }\r\n\r\n interface IAdvSelectAttributes extends angular.IAttributes {\r\n choices: string;\r\n field: string;\r\n allowMultiple: string;\r\n advModel: string;\r\n advRequired: string;\r\n name: string;\r\n multiple: string;\r\n default: string;\r\n advRule: string;\r\n advResponse: string;\r\n convertedValues: Array;\r\n }\r\n\r\n interface IAdvSelectScope extends angular.IScope {\r\n choices: Array;\r\n field: ISelectField;\r\n allowMultiple: boolean;\r\n parentModel: any;\r\n modelValue: any;\r\n //convertedValues: Array;\r\n }\r\n\r\n advSelect.$inject = [\"$parse\"];\r\n function advSelect($parse: angular.IParseService): IAdvSelect {\r\n\r\n var dir: IAdvSelect = {};\r\n dir.restrict = \"E\";\r\n dir.require = \"?advModel\";\r\n dir.replace = false;\r\n dir.template = (tElement, tAttrs: IAdvSelectAttributes) => {\r\n /* tslint:disable: max-line-length */\r\n if (angular.isDefined(tAttrs.multiple)) {\r\n return \" {{$item.label}}\";\r\n } else {\r\n var value = \"{{$select.selected.label}}\";\r\n return value;\r\n }\r\n /* tslint:enable: max-line-length */\r\n\r\n };\r\n\r\n\r\n dir.link = (scope: IAdvSelectScope, element: angular.IAugmentedJQuery, attrs: IAdvSelectAttributes) => {\r\n var field = $parse(attrs.field)(scope);\r\n\r\n if (field.showEmptyOption) {\r\n var empty: IChoice = {\r\n selected: true,\r\n label: field.emptyOption,\r\n value: null\r\n };\r\n\r\n field.choiceList.choices.unshift(empty);\r\n }\r\n\r\n if (attrs.advModel && attrs.default) {\r\n var parsed = $parse(attrs.default);\r\n var parsedValue = parsed(scope) || attrs.default;\r\n var modelValue = $parse(attrs.advModel)(scope);\r\n if (angular.isDefined(attrs.multiple)) {\r\n if (parsedValue.indexOf(\"vm.\") !== -1) {\r\n $parse(attrs.advModel).assign(scope, null);\r\n }\r\n else if (modelValue === undefined) {\r\n if (parsedValue !== null) {\r\n var test2 = parsedValue.split(',');\r\n $parse(attrs.advModel).assign(scope, test2);\r\n }\r\n }\r\n else {\r\n //if (parsedValue.indexOf(\"vm.\") !== 0) {\r\n // $parse(attrs.advModel).assign(scope, null);\r\n //}\r\n if (typeof modelValue === \"string\") {\r\n //var test = modelValue.split(',');\r\n //$parse(attrs.advModel).assign(scope, test);\r\n $parse(attrs.advModel).assign(scope, modelValue);\r\n }\r\n //else if (typeof modelValue === \"string\" && (modelValue === '' || modelValue === null)) {\r\n // console.log('modelvalue is string and is empty or null');\r\n // $parse(attrs.advModel).assign(scope, null);\r\n //}\r\n else if (typeof modelValue === \"number\") {\r\n var test3 = modelValue.toString();\r\n $parse(attrs.advModel).assign(scope, test3);\r\n }\r\n }\r\n }\r\n if (!modelValue && (typeof parsedValue !== \"string\" || parsedValue.indexOf(\"vm.\") !== 0)) {\r\n if (angular.isDefined(attrs.multiple)) {\r\n var test1 = parsedValue.split(',');\r\n $parse(attrs.advModel).assign(scope, test1);\r\n }\r\n else {\r\n $parse(attrs.advModel).assign(scope, parsedValue);\r\n }\r\n scope.$applyAsync();\r\n }\r\n }\r\n };\r\n\r\n return dir;\r\n }\r\n\r\n angular.module(\"app\").directive(\"advSelect\", advSelect);\r\n}","/// \r\n/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvShowHide extends angular.IDirective {\r\n }\r\n\r\n interface IAdvShowHideScope extends angular.IScope {\r\n advResponse: any;\r\n }\r\n\r\n advShowHide.$inject = [\"$parse\", \"$timeout\", \"ruleService\"];\r\n function advShowHide($parse: angular.IParseService,\r\n $timeout: angular.ITimeoutService,\r\n ruleService: Rules.IRuleService): IAdvShowHide {\r\n\r\n var link = (scope: IAdvShowHideScope, element: angular.IAugmentedJQuery, attrs, controller, transclude) => {\r\n var displayRule: IDynamicDisplayRule = $parse(attrs.advShowHide)(scope);\r\n if (displayRule) {\r\n var ruleProperties = ruleService.getPropertiesToWatch(displayRule.rule);\r\n\r\n angular.forEach(ruleProperties, (ruleProperty) => {\r\n scope.$parent.$watch(attrs.advResponse + \".\" + ruleProperty, (newValue, oldValue, originalScope) => {\r\n var localResponse = $parse(attrs.advResponse)(originalScope);\r\n var result = ruleService.evalRuleSet(displayRule.rule, localResponse);\r\n\r\n if (result) {\r\n if (displayRule.display === \"Show\") {\r\n element.show();\r\n } else {\r\n element.hide();\r\n }\r\n } else {\r\n if (displayRule.display === \"Show\") {\r\n element.hide();\r\n } else {\r\n element.show();\r\n }\r\n }\r\n\r\n }, true);\r\n });\r\n }\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n priority: 999,\r\n link: link\r\n }\r\n }\r\n\r\n\r\n angular.module(\"app\").directive(\"advShowHide\", advShowHide);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IAdvSpinner extends angular.IDirective {\r\n\r\n }\r\n\r\n export interface IAdvSpinnerScope extends angular.IScope {\r\n spinner: any;\r\n }\r\n\r\n // description:\r\n // creates a new Spinner and sets its options\r\n // usage:\r\n // \r\n export class AdvSpinner implements IAdvSpinner {\r\n static directiveId: string = \"advSpinner\";\r\n restrict: string = \"A\";\r\n\r\n link = (scope: IAdvSpinnerScope, element, attrs) => {\r\n scope.spinner = null;\r\n\r\n scope.$watch(attrs.advSpinner, options => {\r\n if (scope.spinner) {\r\n scope.spinner.stop();\r\n }\r\n scope.spinner = new Spinner(options);\r\n scope.spinner.spin(element[0]);\r\n }, true);\r\n };\r\n }\r\n\r\n angular.module(\"app\").directive(AdvSpinner.directiveId, [() =>\r\n new AdvSpinner()\r\n ]);\r\n}\r\n","/// \r\n/// \r\n/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvTab extends angular.IDirective {\r\n }\r\n\r\n interface IAdvTabScope extends angular.IScope {\r\n disabled: boolean;\r\n index: number;\r\n select: () => void;\r\n $transcludeFn: Function;\r\n }\r\n\r\n interface IAdvTabAttributes extends angular.IAttributes {\r\n disable: string;\r\n index: string;\r\n displayRule: string;\r\n advResponse: string;\r\n templateUrl: string;\r\n }\r\n\r\n advTab.$inject = [\"$parse\", \"ruleService\"];\r\n function advTab($parse: angular.IParseService, ruleService: Rules.IRuleService): IAdvTab {\r\n return {\r\n require: \"^advTabset\",\r\n replace: true,\r\n templateUrl: (element, attrs: IAdvTabAttributes) => {\r\n return attrs.templateUrl || \"adv/template/tabs/tab.html\";\r\n },\r\n transclude: true,\r\n scope: {\r\n heading: \"@\",\r\n index: \"=?\",\r\n onSelect: \"&select\", //This callback is called in contentHeadingTransclude\r\n //once it inserts the tab\"s content into the dom\r\n onDeselect: \"&deselect\"\r\n },\r\n controller: () => {\r\n //Empty controller so other directives can require being \"under\" a tab\r\n },\r\n controllerAs: \"tab\",\r\n link: link\r\n }\r\n\r\n function link(scope: IAdvTabScope, element: angular.IAugmentedJQuery, attrs: IAdvTabAttributes, tabsetCtrl, transclude) {\r\n scope.disabled = false;\r\n if (attrs.disable) {\r\n scope.$parent.$watch($parse(attrs.disable), (value) => {\r\n scope.disabled = !!value;\r\n });\r\n }\r\n\r\n if (angular.isUndefined(attrs.index)) {\r\n if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {\r\n scope.index = Math.max.apply(null, tabsetCtrl.tabs.map((t) => { return t.index; })) + 1;\r\n } else {\r\n scope.index = 0;\r\n }\r\n }\r\n\r\n scope.select = () => {\r\n if (!scope.disabled) {\r\n var index;\r\n for (var i = 0; i < tabsetCtrl.tabs.length; i++) {\r\n if (tabsetCtrl.tabs[i].tab === scope) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n tabsetCtrl.select(index);\r\n }\r\n };\r\n\r\n\r\n var displayRule: IDynamicDisplayRule = $parse(attrs.displayRule)(scope.$parent);\r\n if (displayRule) {\r\n var ruleProperties = ruleService.getPropertiesToWatch(displayRule.rule);\r\n\r\n angular.forEach(ruleProperties, (ruleProperty) => {\r\n scope.$parent.$watch(attrs.advResponse + \".\" + ruleProperty, (newValue, oldValue, originalScope: IAdvTabScope) => {\r\n var localResponse = $parse(attrs.advResponse)(originalScope);\r\n var result = ruleService.evalRuleSet(displayRule.rule, localResponse);\r\n\r\n if (result) {\r\n if (displayRule.display === \"Show\") {\r\n element.show();\r\n tabsetCtrl.addTab(scope);\r\n } else {\r\n element.hide();\r\n tabsetCtrl.removeTab(scope);\r\n }\r\n } else {\r\n if (displayRule.display === \"Show\") {\r\n element.hide();\r\n tabsetCtrl.removeTab(scope);\r\n } else {\r\n element.show();\r\n tabsetCtrl.addTab(scope);\r\n }\r\n }\r\n\r\n }, true);\r\n });\r\n } else {\r\n tabsetCtrl.addTab(scope);\r\n }\r\n scope.$on(\"$destroy\", () => {\r\n tabsetCtrl.removeTab(scope);\r\n });\r\n\r\n //We need to transclude later, once the content container is ready.\r\n //when this link happens, we\"re inside a tab heading.\r\n scope.$transcludeFn = transclude;\r\n\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advTab\", advTab);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvTabContentTransclude extends angular.IDirective {\r\n }\r\n\r\n interface IAdvTabContentTranscludeScope extends angular.IScope {\r\n }\r\n\r\n interface IAdvTabContentTranscludeAttributes extends angular.IAttributes {\r\n advTabContentTransclude: string;\r\n }\r\n\r\n function advTabContentTransclude(): IAdvTabContentTransclude {\r\n return {\r\n restrict: \"A\",\r\n require: \"^advTabset\",\r\n link: link\r\n }\r\n\r\n function link(scope: IAdvTabContentTranscludeScope, element: angular.IAugmentedJQuery, attrs: IAdvTabContentTranscludeAttributes) {\r\n var tab = scope.$eval(attrs.advTabContentTransclude).tab;\r\n\r\n //Now our tab is ready to be transcluded: both the tab heading area\r\n //and the tab content area are loaded. Transclude \"em both.\r\n tab.$transcludeFn(tab.$parent, contents => {\r\n angular.forEach(contents, node => {\r\n if (isTabHeading(node)) {\r\n //Let tabHeadingTransclude know.\r\n tab.headingElement = node;\r\n } else {\r\n element.append(node);\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n function isTabHeading(node) {\r\n return node.tagName && (\r\n node.hasAttribute(\"adv-tab-heading\") ||\r\n node.hasAttribute(\"data-adv-tab-heading\") ||\r\n node.hasAttribute(\"x-adv-tab-heading\") ||\r\n node.tagName.toLowerCase() === \"adv-tab-heading\" ||\r\n node.tagName.toLowerCase() === \"data-adv-tab-heading\" ||\r\n node.tagName.toLowerCase() === \"x-adv-tab-heading\"\r\n );\r\n }\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(\"advTabContentTransclude\", advTabContentTransclude);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvTabHeadingTransclude extends angular.IDirective {\r\n }\r\n\r\n interface IAdvTabHeadingTranscludeScope extends angular.IScope {\r\n }\r\n\r\n interface IAdvTabHeadingTranscludeAttributes extends angular.IAttributes {\r\n }\r\n\r\n function advTabHeadingTransclude(): IAdvTabHeadingTransclude {\r\n return {\r\n restrict: \"A\",\r\n require: \"^advTab\",\r\n link: (scope, elm) => {\r\n scope.$watch(\"headingElement\", (heading: angular.IAugmentedJQuery) => {\r\n if (heading) {\r\n elm.html(\"\");\r\n elm.append(heading);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advTabHeadingTransclude\", advTabHeadingTransclude);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvTabsetControllerScope extends angular.IScope {\r\n\r\n }\r\n\r\n interface IAdvTabsetController {\r\n tabs: Array;\r\n oldIndex: number;\r\n active: number;\r\n destroyed: boolean;\r\n currentIndex: number;\r\n }\r\n\r\n class AdvTabsetController implements IAdvTabsetController {\r\n tabs: Array = [];\r\n oldIndex: number;\r\n active: number;\r\n destroyed: boolean;\r\n currentIndex;\r\n\r\n static $inject: string[] = [\"$scope\"];\r\n\r\n constructor(private $scope: IAdvTabsetControllerScope) {\r\n $scope.$watch(\"tabset.active\", (val) => {\r\n if (angular.isNumber(val) && val !== this.oldIndex) {\r\n this.select(this.findTabIndex(val));\r\n }\r\n });\r\n\r\n $scope.$on(\"$destroy\", () => {\r\n this.destroyed = true;\r\n });\r\n\r\n }\r\n\r\n findTabIndex = (index) => {\r\n for (var i = 0; i < this.tabs.length; i++) {\r\n if (this.tabs[i].index === index) {\r\n return i;\r\n }\r\n }\r\n };\r\n\r\n\r\n select = (index) => {\r\n this.currentIndex = index;\r\n if (!this.destroyed) {\r\n var previousIndex = this.findTabIndex(this.oldIndex);\r\n var previousSelected = this.tabs[previousIndex];\r\n if (previousSelected) {\r\n previousSelected.tab.onDeselect();\r\n previousSelected.tab.active = false;\r\n }\r\n\r\n var selected = this.tabs[index];\r\n if (selected) {\r\n selected.tab.onSelect();\r\n selected.tab.active = true;\r\n this.active = selected.index;\r\n this.oldIndex = selected.index;\r\n } else if (angular.isNumber(this.oldIndex)) {\r\n this.active = null;\r\n this.oldIndex = null;\r\n }\r\n }\r\n }\r\n\r\n addTab = (tab) => {\r\n var existingIndex = _.findIndex(this.tabs, [\"tab\", tab]);\r\n if (existingIndex > -1) {\r\n return;\r\n }\r\n\r\n this.tabs.push({\r\n tab: tab,\r\n index: tab.index\r\n });\r\n this.tabs.sort((t1, t2) => {\r\n if (t1.index > t2.index) {\r\n return 1;\r\n }\r\n\r\n if (t1.index < t2.index) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (tab.index === this.active || !angular.isNumber(this.active) && this.tabs.length === 1) {\r\n var newActiveIndex = this.findTabIndex(tab.index);\r\n this.select(newActiveIndex);\r\n }\r\n };\r\n\r\n removeTab = (tab) => {\r\n var arrayIndex = this.findTabIndex(tab.index);\r\n if (arrayIndex) {\r\n if (tab.index === this.active) {\r\n var newActiveTabIndex = arrayIndex === this.tabs.length - 1 ?\r\n arrayIndex - 1 : arrayIndex + 1 % this.tabs.length;\r\n this.select(newActiveTabIndex);\r\n }\r\n\r\n this.tabs.splice(arrayIndex, 1);\r\n }\r\n };\r\n\r\n navigateNextPrev = () => {\r\n debugger;\r\n \r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(\"AdvTabsetController\", AdvTabsetController);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IAdvTabset extends angular.IDirective {\r\n }\r\n\r\n interface IAdvTabsetScope extends angular.IScope {\r\n vertical: boolean;\r\n justified: boolean;\r\n active: number;\r\n }\r\n\r\n interface IAdvTabsetAttributes extends angular.IAttributes {\r\n vertical: string;\r\n justified: string;\r\n active: string;\r\n templateUrl: string;\r\n }\r\n\r\n function advTabset(): IAdvTabset {\r\n return {\r\n transclude: true,\r\n replace: true,\r\n scope: {},\r\n bindToController: {\r\n active: \"=?\",\r\n type: \"@\"\r\n },\r\n controller: \"AdvTabsetController\",\r\n controllerAs: \"tabset\",\r\n templateUrl(element, attrs: IAdvTabsetAttributes) {\r\n return attrs.templateUrl || \"adv/template/tabs/tabset.html\";\r\n },\r\n\r\n link: link\r\n }\r\n\r\n function link(scope: IAdvTabsetScope, element: angular.IAugmentedJQuery, attrs: IAdvTabsetAttributes) {\r\n scope.vertical = angular.isDefined(attrs.vertical) ?\r\n scope.$parent.$eval(attrs.vertical) : false;\r\n scope.justified = angular.isDefined(attrs.justified) ?\r\n scope.$parent.$eval(attrs.justified) : false;\r\n if (angular.isUndefined(attrs.active)) {\r\n scope.active = 0;\r\n }\r\n\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"advTabset\", advTabset);\r\n}","/// \r\n/// \r\n/// \r\nnamespace Advant.Crossroads {\r\n\r\n interface IAdvTerm extends angular.IDirective {\r\n }\r\n\r\n interface IAdvTermScope extends angular.IScope {\r\n model: ITerm;\r\n ngModel: any;\r\n appdef: IApplicationDefinition;\r\n elemName: string;\r\n userApplication: IUserApplication;\r\n placeholder: string;\r\n availableTerms: Array;\r\n advResponse: any;\r\n anyDefault: any;\r\n }\r\n\r\n class AdvTerm implements IAdvTerm {\r\n static directiveId: string = \"advTerm\";\r\n restrict: string = \"E\";\r\n require: string = \"?ngModel\";\r\n templateUrl = \"/app/directives/advTerm.html\";\r\n model: ITerm;\r\n\r\n scope: any = {\r\n ngModel: \"=\",\r\n appdef: \"=\",\r\n userApplication: \"=\",\r\n advResponse: \"=\",\r\n placeholder: \"@\"\r\n };\r\n\r\n constructor(private q$: angular.IQService, private ruleService: Rules.IRuleService) {\r\n }\r\n\r\n link = (scope: IAdvTermScope, element, attrs, ctrl: angular.INgModelController) => {\r\n if (!ctrl) { return; }\r\n scope.elemName = attrs.name + \"_select\";\r\n scope.availableTerms = scope.appdef.availableTerms;\r\n\r\n scope.$watch(\"model\", (newValue: ITerm, oldValue, originalScope) => {\r\n if (newValue && scope.userApplication) {\r\n scope.userApplication.term = newValue;\r\n scope.ngModel = newValue.code;\r\n }\r\n });\r\n\r\n scope.$watch(\"userApplication\", (newValue: IUserApplication, oldValue, originalScope: any) => {\r\n if (newValue) {\r\n originalScope.model = newValue.term;\r\n }\r\n });\r\n\r\n scope.$watch(\"advResponse\", (newValue, oldValue, originalScope) => {\r\n this.getTermList(scope);\r\n }, true);\r\n };\r\n\r\n getTermList = (scope: IAdvTermScope) => {\r\n if (scope.appdef.availableTerms && scope.appdef.availableTerms.length > 0) {\r\n scope.availableTerms = [];\r\n var defaultT = _.find(scope.appdef.availableTerms, { \"isDefault\": true });\r\n scope.anyDefault = defaultT == undefined ? false : true;\r\n\r\n _.forEach(scope.appdef.availableTerms, (term) => {\r\n if (term.rule) {\r\n var result = this.ruleService.evalRuleSet(term.rule, scope.advResponse);\r\n\r\n if (result) {\r\n scope.availableTerms = scope.availableTerms.concat(term);\r\n }\r\n } else {\r\n scope.availableTerms = scope.availableTerms.concat(term);\r\n }\r\n\r\n });\r\n\r\n if (scope.model) {\r\n const term = _.find(scope.availableTerms, { \"code\": scope.model.code, \"name\": scope.model.name });\r\n const inCurrentList = term != undefined;\r\n\r\n if (!inCurrentList) {\r\n scope.model = null;\r\n scope.ngModel = null;\r\n } else {\r\n scope.model = term;\r\n scope.ngModel = term.code;\r\n }\r\n }\r\n }\r\n };\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(AdvTerm.directiveId, [\"$q\", \"ruleService\", ($q, ruleService) =>\r\n new AdvTerm($q, ruleService)\r\n ]);\r\n}","namespace Advant.Crossroads {\r\n\r\n\r\n interface IAdvValidateSection extends angular.IDirective {\r\n }\r\n\r\n interface IAdvValidateSectionScope extends angular.IScope {\r\n advValidateSection: angular.IFormController;\r\n section: ISection;\r\n validateUsing: () => (section: ISection) => angular.IPromise;\r\n hasBeenLoaded: boolean;\r\n }\r\n\r\n class AdvValidateSection implements IAdvValidateSection {\r\n static directiveId: string = \"advValidateSection\";\r\n restrict: string = \"A\";\r\n scope: any = {\r\n advValidateSection: \"=\",\r\n section: \"=\",\r\n hasBeenLoaded: \"=\",\r\n validateUsing: \"&\"\r\n };\r\n\r\n constructor(private $timeout: angular.ITimeoutService) {\r\n }\r\n\r\n link = (scope: IAdvValidateSectionScope, element: angular.IAugmentedJQuery, attrs, ctrl: angular.INgModelController) => {\r\n // This variable is used to detect if a section was loaded while the results of the server validation are still\r\n // waiting to come back.\r\n var useServerValidation = true;\r\n\r\n if (!scope.hasBeenLoaded && !(element.css(\"display\") === \"none\")) {\r\n scope.validateUsing()(scope.section).then((result) => {\r\n // If the section was loaded while the server validation was pending then useServerValidation will be false\r\n // and therefore the server validation will not be used\r\n if (!result && useServerValidation) {\r\n scope.advValidateSection.$setValidity(\"serverValidation\", false, ctrl);\r\n }\r\n });\r\n }\r\n\r\n scope.$watch(() => { return scope.hasBeenLoaded; }, (value, oldValue) => {\r\n if (value !== oldValue) {\r\n if (!value && !(element.css(\"display\") === \"none\")) {\r\n scope.validateUsing()(scope.section).then((result) => {\r\n if (!result) {\r\n scope.advValidateSection.$setValidity(\"serverValidation\", false, ctrl);\r\n }\r\n });\r\n } else {\r\n useServerValidation = false;\r\n scope.advValidateSection.$setValidity(\"serverValidation\", null, ctrl);\r\n }\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n angular.module(\"app\").directive(AdvValidateSection.directiveId, [\"$timeout\", $timeout =>\r\n new AdvValidateSection($timeout)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ICfncDirectAdmission extends angular.IDirective {\r\n }\r\n\r\n interface ICfncDirectAdmissionScope extends angular.IScope {\r\n ceebCode: string;\r\n highSchoolNameField: any;\r\n dpiNumberField: any;\r\n }\r\n\r\n interface ICfncDirectAdmissionAttributes extends angular.IAttributes {\r\n studentNumberField: string;\r\n lastNameField: string;\r\n highSchoolNameField: any;\r\n dpiNumberField: any;\r\n ceebCode: string;\r\n advResponse: any;\r\n title: string;\r\n cssClass: string;\r\n ngModel: string;\r\n }\r\n\r\n cfncDirectAdmission.$inject = [\"$parse\", \"helper\", \"Restangular\", \"config\"];\r\n function cfncDirectAdmission($parse: angular.IParseService, helper: IHelper, Restangular: Restangular.IService, config: Advant.Crossroads.ICrossroadsConfig): ICfncDirectAdmission {\r\n var checkEligibility = (studentNumber: any, lastName: any, scope: any, ctrl: any, attrs: any) => {\r\n var params = { studentNumber: studentNumber, lastName: lastName };\r\n if (studentNumber != null && lastName != null) {\r\n Restangular.one(\"userApplications/getDirectAdmissionEligibility\").get(params).then((result) => {\r\n scope.ceebCode = result.ceebCode;\r\n ctrl.$modelValue = result.ceebCode;\r\n ctrl.$viewValue = result.ceebCode;\r\n ctrl.$render();\r\n $parse(attrs.highSchoolNameField).assign(scope, result.highSchoolName);\r\n $parse(attrs.dpiNumberField).assign(scope, result.dpiNumber);\r\n $parse(attrs.ngModel).assign(scope, result.ceebCode);\r\n if (result.ceebCode != null)\r\n ctrl.$setValidity(\"required\", true);\r\n else\r\n ctrl.$setValidity(\"required\", false);\r\n }, (reason) => {\r\n });\r\n }\r\n };\r\n\r\n var link = (scope: ICfncDirectAdmissionScope, element: angular.IAugmentedJQuery, attrs: ICfncDirectAdmissionAttributes, ctrl: angular.INgModelController) => {\r\n if (!ctrl) { return; }\r\n var lastName: string = $parse(attrs.lastNameField)(scope);\r\n var studentNumber: string = $parse(attrs.studentNumberField)(scope);\r\n\r\n var params = { studentNumber: studentNumber, lastName: lastName };\r\n if (studentNumber != null && lastName != null)\r\n {\r\n checkEligibility(studentNumber, lastName, scope, ctrl, attrs);\r\n }\r\n\r\n scope.$watch(attrs.studentNumberField, (newValue: any) => {\r\n studentNumber = newValue;\r\n checkEligibility(studentNumber, lastName, scope, ctrl, attrs);\r\n });\r\n\r\n scope.$watch(attrs.lastNameField, (newValue: any) => {\r\n lastName = newValue;\r\n checkEligibility(studentNumber, lastName, scope, ctrl, attrs);\r\n });\r\n\r\n //(ctrl.$validators as any) = (modelValue, viewValue) => {\r\n // return ctrl.$isEmpty(modelValue) || scope.ceebCode == null;\r\n //};\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n priority: -1,\r\n link: link,\r\n replace: true,\r\n }\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(\"cfncDirectAdmission\", cfncDirectAdmission);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ICfncRcn extends angular.IDirective {\r\n }\r\n\r\n interface ICfncRcnScope extends angular.IScope {\r\n }\r\n\r\n interface ICfncRcnAttributes extends angular.IAttributes {\r\n firstNameField: string;\r\n lastNameField: string;\r\n dobField: string;\r\n user: string;\r\n advResponse: any;\r\n title: string;\r\n cssClass: string;\r\n ngModel: string;\r\n }\r\n\r\n cfncRcn.$inject = [\"$parse\", \"helper\"];\r\n function cfncRcn($parse: angular.IParseService, helper: IHelper): ICfncRcn {\r\n var validValues = (value: any) => {\r\n return value >= 1100100102 && value <= (1100418668 + ((new Date().getFullYear() - 2018) + 1) * 500000);\r\n };\r\n\r\n var link = (scope: ICfncRcnScope, element: angular.IAugmentedJQuery, attrs: ICfncRcnAttributes, ctrl: angular.INgModelController) => {\r\n if (!ctrl) { return; }\r\n\r\n var firstName: string = $parse(attrs.firstNameField)(scope);\r\n var lastName: string = $parse(attrs.lastNameField)(scope);\r\n var dob: string = $parse(attrs.dobField)(scope);\r\n var user: IUser = $parse(attrs.user)(scope);\r\n\r\n (ctrl.$validators as any).rcnRange = (modelValue, viewValue) => {\r\n return ctrl.$isEmpty(viewValue) || validValues(viewValue);\r\n };\r\n\r\n if (user.rcn) {\r\n if (checkRcnFieldsMatch(firstName, lastName, dob, user)) {\r\n ctrl.$setViewValue(user.rcn);\r\n ctrl.$render();\r\n $parse(attrs.ngModel).assign(scope, user.rcn);\r\n element.attr(\"disabled\", \"disabled\");\r\n } else {\r\n element.removeAttr(\"disabled\");\r\n }\r\n\r\n scope.$watch(attrs.firstNameField, (newValue: any, oldValue: any, oScope: ICfncRcnScope) => {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n\r\n var firstName: string = newValue;\r\n var lastName: string = $parse(attrs.lastNameField)(scope);\r\n var dob: string = $parse(attrs.dobField)(scope);\r\n\r\n if (checkRcnFieldsMatch(firstName, lastName, dob, user)) {\r\n ctrl.$setViewValue(user.rcn);\r\n ctrl.$render();\r\n element.attr(\"disabled\", \"disabled\");\r\n } else {\r\n element.removeAttr(\"disabled\");\r\n }\r\n }, true);\r\n scope.$watch(attrs.lastNameField, (newValue: any, oldValue: any, oScope: ICfncRcnScope) => {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n\r\n var firstName: string = $parse(attrs.firstNameField)(scope);\r\n var lastName: string = newValue;\r\n var dob: string = $parse(attrs.dobField)(scope);\r\n\r\n if (checkRcnFieldsMatch(firstName, lastName, dob, user)) {\r\n ctrl.$setViewValue(user.rcn);\r\n ctrl.$render();\r\n element.attr(\"disabled\", \"disabled\");\r\n } else {\r\n element.removeAttr(\"disabled\");\r\n }\r\n }, true);\r\n scope.$watch(attrs.dobField, (newValue: any, oldValue: any, oScope: ICfncRcnScope) => {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n\r\n var firstName: string = $parse(attrs.firstNameField)(scope);\r\n var lastName: string = $parse(attrs.lastNameField)(scope);\r\n var dob: string = newValue;\r\n\r\n if (checkRcnFieldsMatch(firstName, lastName, dob, user)) {\r\n ctrl.$setViewValue(user.rcn);\r\n ctrl.$render();\r\n element.attr(\"disabled\", \"disabled\");\r\n } else {\r\n element.removeAttr(\"disabled\");\r\n }\r\n }, true);\r\n }\r\n };\r\n\r\n var checkRcnFieldsMatch = (firstName: string, lastName: string, dob: string, user: IUser) => {\r\n return firstName === user.name.first && lastName === user.name.last && moment.utc(dob).isSame(user.dateOfBirth, \"day\");\r\n }\r\n\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n priority: -1,\r\n link: link,\r\n replace: true\r\n }\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(\"cfncRcn\", cfncRcn);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ICheckList extends angular.IDirective {\r\n }\r\n\r\n interface ICheckListScope extends angular.IScope {\r\n list: any;\r\n checkListValue: string;\r\n checked: boolean;\r\n }\r\n\r\n class CheckList implements ICheckList {\r\n static directiveId: string = \"checkList\";\r\n restrict: string = \"A\";\r\n priority = 1000;\r\n scope = true;\r\n\r\n constructor(private $parse: angular.IParseService, private $compile: angular.ICompileService) {\r\n\r\n }\r\n\r\n // contains\r\n contains(arr, item, comparator) {\r\n if (angular.isArray(arr)) {\r\n for (var i = arr.length; i--;) {\r\n if (comparator(arr[i], item)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // add\r\n add(arr, item, comparator) {\r\n arr = angular.isArray(arr) ? arr : [];\r\n if (!this.contains(arr, item, comparator)) {\r\n arr.push(item);\r\n }\r\n return arr;\r\n }\r\n\r\n // remove\r\n remove(arr, item, comparator) {\r\n if (angular.isArray(arr)) {\r\n for (var i = arr.length; i--;) {\r\n if (comparator(arr[i], item)) {\r\n arr.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n compile = (element: angular.IAugmentedJQuery, attrs) => {\r\n element.removeAttr(\"check-list\");\r\n\r\n element.attr(\"ng-model\", \"checked\");\r\n\r\n return this.postLink;\r\n };\r\n\r\n postLink = (scope: ICheckListScope, element, attrs) => {\r\n\r\n var required = attrs.hasOwnProperty(\"checkListRequired\");\r\n\r\n // compile with `ng-model` pointing to `checked`\r\n var compiled = this.$compile(element)(scope);\r\n // gets the model controller so we can set validity on the list\r\n var ngModelCtrl = compiled.controller(\"ngModel\");\r\n\r\n // getter / setter for backing model\r\n var getter = this.$parse(attrs.checkList);\r\n var setter = getter.assign;\r\n var checklistChange = this.$parse(attrs.checklistChange);\r\n\r\n // value added to list\r\n var value = this.$parse(attrs.checkListValue)(scope.$parent);\r\n\r\n\r\n var comparator = angular.equals;\r\n\r\n if (required) {\r\n required = scope.$eval(attrs.checkListRequired);\r\n }\r\n\r\n scope.$watch(attrs.checkListRequired, (checklistRequired) => {\r\n required = checklistRequired;\r\n if (required) {\r\n const currentModel = getter(scope.$parent);\r\n let modelHasValue = currentModel && angular.isArray(currentModel) && currentModel.length > 0;\r\n // cannot have the isValid argument set to undefined. If it is than the validator ends up in the $pending property which\r\n // will not render the validation colors properly\r\n modelHasValue = modelHasValue === undefined || modelHasValue === null ? false : modelHasValue;\r\n ngModelCtrl.$setValidity(\"required\", modelHasValue);\r\n } else {\r\n ngModelCtrl.$setValidity(\"required\", true);\r\n }\r\n });\r\n\r\n if (attrs.hasOwnProperty(\"checklistComparator\")) {\r\n comparator = this.$parse(attrs.checklistComparator)(scope.$parent);\r\n }\r\n\r\n scope.$watch(\"checked\", (newValue, oldValue) => {\r\n if (newValue === oldValue) {\r\n return;\r\n }\r\n var current = getter(scope.$parent);\r\n if (newValue === true) {\r\n setter(scope.$parent, this.add(current, value, comparator));\r\n } else {\r\n setter(scope.$parent, this.remove(current, value, comparator));\r\n }\r\n\r\n if (checklistChange) {\r\n checklistChange(scope);\r\n }\r\n });\r\n\r\n scope.$parent.$watchCollection(attrs.checkList, (newArray) => {\r\n scope.checked = this.contains(newArray, value, comparator);\r\n if (required) {\r\n var modelHasValue = newArray && angular.isArray(newArray) && newArray.length > 0;\r\n // cannot have the isValid argument set to undefined. If it is than the validator ends up in the $pending property which\r\n // render the validation colors properly\r\n modelHasValue = modelHasValue === undefined ? false : modelHasValue;\r\n ngModelCtrl.$setValidity(\"required\", modelHasValue);\r\n }\r\n });\r\n };\r\n }\r\n\r\n angular.module(\"app\").directive(CheckList.directiveId, [\"$parse\", \"$compile\", ($parse, $compile) =>\r\n new CheckList($parse, $compile)\r\n ]);\r\n\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ICheckListDefault extends angular.IDirective {\r\n }\r\n\r\n interface ICheckListDefaultScope extends angular.IScope {\r\n }\r\n\r\n checkListDefault.$inject = [\"$parse\", \"helper\"];\r\n function checkListDefault($parse: angular.IParseService): ICheckListDefault {\r\n\r\n var link = (scope: ICheckListDefaultScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes, ctrl: angular.INgModelController) => {\r\n\r\n scope.$watch(attrs.checkListDefault, (defaultValue: string) => {\r\n if (defaultValue) {\r\n let modelValue = $parse(attrs.ngModel)(scope);\r\n\r\n\r\n if (!modelValue) {\r\n let defaultArray = defaultValue.split(\",\");\r\n\r\n $parse(attrs.ngModel).assign(scope, defaultArray);\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n priority: -1,\r\n link: link,\r\n replace: true\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"checkListDefault\", checkListDefault);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IDynamicName extends ng.IDirective {\r\n\r\n }\r\n\r\n interface IDynamicNameScope extends ng.IScope {\r\n }\r\n\r\n class DynamicName implements IDynamicName {\r\n static directiveId: string = \"dynamicName\";\r\n restrict: string = \"A\";\r\n priority: number = 10000;\r\n\r\n constructor(private $compile: ng.ICompileService, private $parse: ng.IParseService) {\r\n }\r\n\r\n controller = [\"$scope\", \"$element\", \"$attrs\", ($scope: IDynamicNameScope, $element, $attrs) => {\r\n var name = this.$parse($attrs.dynamicName)($scope);\r\n delete ($attrs.dynamicName);\r\n $element.removeAttr(\"data-dynamic-name\");\r\n $element.removeAttr(\"dynamic-name\");\r\n $attrs.$set(\"name\", name);\r\n }];\r\n }\r\n\r\n angular.module(\"app\").directive(DynamicName.directiveId, [\"$compile\", \"$parse\", ($compile, $parse) =>\r\n new DynamicName($compile, $parse)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IHomeSchoolCeeb extends angular.IDirective {\r\n }\r\n\r\n interface IHomeSchoolCeebScope extends angular.IScope {\r\n ceebCodeField: string;\r\n }\r\n\r\n interface IHomeSchoolCeebAttributes extends angular.IAttributes {\r\n ceebCodeField: string;\r\n advResponse: any;\r\n title: string;\r\n cssClass: string;\r\n ngModel: string;\r\n }\r\n\r\n homeSchoolCeeb.$inject = [\"$parse\", \"helper\", \"Restangular\", \"config\"];\r\n function homeSchoolCeeb($parse: angular.IParseService, helper: IHelper, Restangular: Restangular.IService, config: Advant.Crossroads.ICrossroadsConfig): IHomeSchoolCeeb {\r\n var updateField = (newValue: any, scope: any, attrs: any) => {\r\n if (newValue == \"Y\") {\r\n $parse(attrs.ceebCodeField).assign(scope, \"970000\");\r\n }\r\n else {\r\n $parse(attrs.ceebCodeField).assign(scope, null);\r\n }\r\n }\r\n\r\n\r\n var link = (scope: IHomeSchoolCeebScope, element: angular.IAugmentedJQuery, attrs: IHomeSchoolCeebAttributes, ctrl: angular.INgModelController) => {\r\n scope.$watch(attrs.advModel, (newValue: any) => {\r\n updateField(newValue, scope, attrs);\r\n });\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n priority: -1,\r\n link: link,\r\n replace: true,\r\n }\r\n\r\n }\r\n\r\n angular.module(\"app\").directive(\"homeSchoolCeeb\", homeSchoolCeeb);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface IInput extends angular.IDirective {\r\n\r\n }\r\n\r\n interface IInputScope extends angular.IScope {\r\n maskValue: string;\r\n }\r\n\r\n interface IInputAttributes extends angular.IAttributes {\r\n value: string;\r\n ngModel: string;\r\n type: string;\r\n }\r\n\r\n input.$inject = [\"$parse\", \"$filter\"];\r\n function input($parse: angular.IParseService, $filter: angular.IFilterService): IInput {\r\n var dir: IInput = {};\r\n\r\n dir.restrict = \"E\";\r\n dir.require = \"?ngModel\";\r\n\r\n dir.link = (scope: IInputScope, element: angular.IAugmentedJQuery, attrs: IInputAttributes, ngModel: angular.INgModelController) => {\r\n if (attrs.ngModel && attrs.value && attrs.type !== \"radio\") {\r\n var parsed = $parse(attrs.value);\r\n var parsedValue = parsed(scope) || attrs.value;\r\n var modelValue = $parse(attrs.ngModel)(scope);\r\n if (!modelValue && typeof parsedValue === \"string\" && parsedValue.indexOf(\"vm.\") !== 0) {\r\n if (element[0].attributes[\"data-date-format\"] != null) {\r\n parsedValue = $filter(\"date\")(parsedValue, element[0].attributes[\"data-date-format\"].value);\r\n }\r\n $parse(attrs.ngModel).assign(scope, parsedValue);\r\n scope.$applyAsync();\r\n }\r\n if (!modelValue && (typeof parsedValue === \"number\" || typeof parsedValue === \"boolean\")) {\r\n $parse(attrs.ngModel).assign(scope, parsedValue);\r\n scope.$applyAsync();\r\n }\r\n }\r\n\r\n if (attrs.maskField) {\r\n element.bind('focus', () => {\r\n element.attr(\"type\", attrs.maskFieldType);\r\n }).bind('blur', () => {\r\n element.attr(\"type\", \"password\");\r\n });\r\n }\r\n };\r\n\r\n return dir;\r\n }\r\n\r\n\r\n angular.module(\"app\").directive(\"input\", input);\r\n}\r\n","/// \r\n\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ITranscriptSchoolCeeb extends ng.IDirective {\r\n }\r\n\r\n interface ITranscriptSchoolCeebScope extends ng.IScope {\r\n transcriptSchoolCeeb: any;\r\n }\r\n\r\n interface ITranscriptSchoolCeebAttributes extends ng.IAttributes {\r\n ngModel: any;\r\n transcriptSchoolCeeb: any;\r\n }\r\n TranscriptSchoolCeeb.$inject = [\"$parse\", \"$compile\"];\r\n function TranscriptSchoolCeeb($parse: ng.IParseService, $compile: ng.ICompileService): ITranscriptSchoolCeeb {\r\n\r\n var self = this;\r\n\r\n var link = (scope: ITranscriptSchoolCeebScope, element: ng.IAugmentedJQuery, attrs: ITranscriptSchoolCeebAttributes, ctrl: ng.INgModelController) => {\r\n var getter = $parse(attrs.transcriptSchoolCeeb);\r\n var setter = getter.assign;\r\n\r\n scope.$watch(attrs.ngModel, (newValue) => {\r\n var currentValue = getter(scope);\r\n setter(scope, newValue);\r\n });\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"?ngModel\",\r\n link: link\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"transcriptSchoolCeeb\", TranscriptSchoolCeeb);\r\n}","// Install the angularjs.TypeScript.DefinitelyTyped NuGet package\r\nmodule App {\r\n \"use strict\";\r\n\r\n interface ITranscriptStudentId extends ng.IDirective {\r\n }\r\n\r\n interface ITranscriptStudentIdScope extends ng.IScope {\r\n transcriptStudentId: any;\r\n }\r\n\r\n interface ITranscriptStudentIdAttributes extends ng.IAttributes {\r\n ngModel: any;\r\n transcriptStudentId: any;\r\n }\r\n\r\n TranscriptStudentId.$inject = [\"$parse\", \"$compile\"];\r\n\r\n function TranscriptStudentId($parse: ng.IParseService, $compile: ng.ICompileService): ITranscriptStudentId {\r\n var self = this;\r\n\r\n var link = (scope: ITranscriptStudentIdScope, element: ng.IAugmentedJQuery, attrs: ITranscriptStudentIdAttributes, ctrl: ng.INgModelController) => {\r\n var getter = $parse(attrs.transcriptStudentId);\r\n var setter = getter.assign;\r\n ctrl.$viewChangeListeners.push(() => {\r\n var modelValue = scope.$eval(attrs.ngModel);\r\n var currentValue = getter(scope);\r\n setter(scope, modelValue);\r\n });\r\n };\r\n\r\n return {\r\n restrict: \"A\",\r\n require: \"ngModel\",\r\n link: link\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(\"transcriptStudentId\", TranscriptStudentId);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IUserLink extends ng.IDirective {\r\n\r\n }\r\n\r\n export interface IUserLinkScope extends ng.IScope {\r\n userInfo: IUserInfoModel;\r\n logoff();\r\n }\r\n\r\n export class UserLink implements IUserLink {\r\n static directiveId: string = \"userLink\";\r\n restrict: string = \"E\";\r\n replace: boolean = true;\r\n scope: any = {};\r\n templateUrl: string = \"/app/directives/userLink.html\";\r\n\r\n constructor(private $rootScope: ng.IRootScopeService,\r\n private $timeout: ng.ITimeoutService,\r\n private config: ICrossroadsConfig,\r\n private authentication: AuthenticationProviderService) {\r\n }\r\n\r\n link = (scope: IUserLinkScope, element?, attr?) => {\r\n var self = this;\r\n scope.userInfo = self.authentication.getUser();\r\n scope.logoff = () => {\r\n self.authentication.logout().then(result => {\r\n scope.userInfo = undefined;\r\n });\r\n };\r\n\r\n this.$rootScope.$on(this.config.events.login,\r\n (event, data) => {\r\n this.$timeout(() => {\r\n var eventData: any = data; // converts the IAngularEvent back to a dynamic type so we can view the \"show\" property that was set by the ICommonService\r\n scope.userInfo = eventData.userInfo;\r\n });\r\n });\r\n this.$rootScope.$on(this.config.events.reloadUser,\r\n (event, data) => {\r\n var eventData: any = data; // converts the IAngularEvent back to a dynamic type so we can view the \"show\" property that was set by the ICommonService\r\n this.$timeout(() => {\r\n scope.userInfo = eventData.userInfo;\r\n });\r\n });\r\n this.$rootScope.$on(this.config.events.logout,\r\n () => {\r\n this.$timeout(() => {\r\n scope.userInfo = null;\r\n });\r\n });\r\n }\r\n }\r\n\r\n angular.module(\"app\").directive(UserLink.directiveId, [\"$rootScope\", \"$timeout\", \"config\", \"authentication\", ($rootScope, $timeout, config, authentication) =>\r\n new UserLink($rootScope, $timeout, config, authentication)\r\n ]);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IValidSubmit extends angular.IDirective {\r\n link?: (scope?: IValidSubmitScope, element?: any, attrs?: any, form?: any) => void;\r\n }\r\n\r\n export interface IValidSubmitScope extends angular.IScope {\r\n\r\n }\r\n\r\n export class ValidSubmit implements IValidSubmit {\r\n static $inject: any = [\"$parse\"];\r\n static directiveId: string = \"validSubmit\";\r\n restrict: string = \"A\";\r\n require: string = \"form\";\r\n\r\n constructor(private $parse: angular.IParseService) {\r\n }\r\n\r\n link = (scope?: IValidSubmitScope, element?, attrs?, form?) => {\r\n form.$submitted = false;\r\n\r\n // get a hold of the function that handles submission when form is valid\r\n var fn = this.$parse(attrs.validSubmit);\r\n\r\n // register DOM event handler and wire into Angular's lifecycle with scope.$apply\r\n element.on(\"submit\", (event) => {\r\n scope.$apply(() => {\r\n // on submit event, set submitted to true (like the previous trick)\r\n form.$submitted = true;\r\n // if form is valid, execute the submission handler function and reset form submission state\r\n if (form.$valid) {\r\n fn(scope, { $event: event });\r\n form.$submitted = false;\r\n }\r\n });\r\n });\r\n };\r\n }\r\n\r\n // update the app variable name to be that of your module variable\r\n angular.module(\"app\").directive(ValidSubmit.directiveId, [\"$parse\", $parse =>\r\n new ValidSubmit($parse)\r\n ]);\r\n}\r\n","namespace Advant.Crossroads {\r\n interface IHomeScope extends ng.IScope {\r\n vm: Home;\r\n }\r\n\r\n interface IHome {\r\n\r\n errors: Array;\r\n log: (msg, data?, showToast?) => void;\r\n }\r\n\r\n class Home implements IHome {\r\n static controllerId: string = \"home\";\r\n static $inject: any = [\"$scope\", \"authentication\", \"common\"];\r\n errors: Array = [];\r\n log: (msg, data?, showToast?) => void;\r\n\r\n constructor(private $scope: IHomeScope, private authentication: IAuthenticationProviderService, private common: ICommonService) {\r\n this.log = common.logger.getLogFn(LoginController.controllerId);\r\n this.activate();\r\n }\r\n\r\n private activate() {\r\n var self = this;\r\n this.common.activateController([], Home.controllerId)\r\n .then(result=> {\r\n self.log(\"Activated Home Screen\");\r\n });\r\n }\r\n }\r\n\r\n\r\n angular.module(\"app\").controller(Home.controllerId, Home);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IShellScope extends ng.IScope {\r\n vm: Shell;\r\n }\r\n\r\n export interface IShellController {\r\n busyMessage: string;\r\n isBusy: boolean;\r\n showSplash: boolean;\r\n spinnerOptions: SpinnerOptions;\r\n toggleSpinner: (on: boolean) => void;\r\n topBarIsCollapsed: boolean;\r\n sideBarIsCollapsed: boolean;\r\n activate: () => void;\r\n isApplication: boolean;\r\n copyrightYear: string;\r\n }\r\n\r\n export class Shell implements IShellController {\r\n static controllerId: string = \"shell\";\r\n static $inject: any = [\"$rootScope\", \"$location\", \"common\", \"config\", \"authentication\", \"Idle\"];\r\n logSuccess: any;\r\n events: any;\r\n public busyMessage: string;\r\n public isBusy: boolean;\r\n public showSplash: boolean;\r\n public spinnerOptions: SpinnerOptions;\r\n public topBarIsCollapsed: boolean;\r\n public sideBarIsCollapsed: boolean;\r\n public isApplication: boolean;\r\n public copyrightYear: string;\r\n\r\n constructor(private $rootScope: ng.IRootScopeService, private $location: ng.ILocationService, private common: ICommonService,\r\n private config: ICrossroadsConfig, authentication: IAuthenticationProviderService, private Idle: angular.idle.IIdleService) {\r\n\r\n this.logSuccess = common.logger.getLogFn(Shell.controllerId, \"success\");\r\n this.events = config.events;\r\n this.topBarIsCollapsed = true;\r\n this.sideBarIsCollapsed = true;\r\n this.isApplication = this.$location.path().indexOf(\"/application/\") > -1;\r\n\r\n this.busyMessage = \"Loading ...\";\r\n this.isBusy = true;\r\n this.showSplash = true;\r\n this.spinnerOptions = {\r\n radius: 30,\r\n lines: 15,\r\n length: 20,\r\n width: 9,\r\n speed: 1.5,\r\n corners: 1.0,\r\n trail: 70,\r\n color: \"#0E81B2\"\r\n };\r\n this.Idle.watch();\r\n this.copyrightYear = (new Date).getFullYear().toString();\r\n\r\n var vm = this;\r\n $rootScope.$on(\"$routeChangeStart\",\r\n (event, next, current) => {\r\n vm.toggleSpinner(true);\r\n vm.isApplication = next.originalPath.indexOf(\"/application/\") > -1 || current.originalPath.indexOf(\"/application/\") > -1;\r\n }\r\n );\r\n\r\n $rootScope.$on(config.events.controllerActivateSuccess,\r\n (event) => {\r\n vm.toggleSpinner(false);\r\n }\r\n );\r\n\r\n $rootScope.$on(config.events.spinnerToggle,\r\n (event, data) => {\r\n var eventData: any = data; // converts the IAngularEvent back to a dynamic type so we can view the \"show\" property that was set by the ICommonService\r\n vm.toggleSpinner(eventData.show);\r\n });\r\n\r\n\r\n this.activate();\r\n }\r\n\r\n activate = (): void => {\r\n this.logSuccess(\"Crossroads loaded!\", null, null, false);\r\n this.common.activateController([], Shell.controllerId)\r\n .then(() => {\r\n this.showSplash = false;\r\n });\r\n };\r\n\r\n public toggleSpinner(on: boolean) { this.isBusy = on; }\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").controller(Shell.controllerId, Shell);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n\r\n interface ILoggedOutScope extends ng.IScope {\r\n vm: LoggedOut;\r\n }\r\n\r\n interface ILoggedOutRootScope extends ng.IScope {\r\n stylesheets: Array;\r\n }\r\n\r\n interface ILoggedOut {\r\n \r\n }\r\n\r\n class LoggedOut implements ILoggedOut {\r\n static controllerId: string = \"loggedOut\";\r\n static $inject: any = [\"$rootScope\", \"common\"];\r\n \r\n\r\n\r\n constructor(private $rootScope: ILoggedOutRootScope, private common: ICommonService) {\r\n \r\n this.activate();\r\n this.$rootScope.stylesheets = [];\r\n var baseStyleSheet = {\r\n link: \"/content/application.css\"\r\n };\r\n\r\n this.$rootScope.stylesheets.push(baseStyleSheet);\r\n \r\n }\r\n\r\n private activate() {\r\n var self = this;\r\n this.common.activateController([], LoggedOut.controllerId);\r\n }\r\n\r\n private closeWindow() {\r\n window.close();\r\n }\r\n\r\n \r\n }\r\n\r\n angular.module(\"app\").controller(LoggedOut.controllerId, LoggedOut);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface ILoginControllerScope extends ng.IScope {\r\n vm: LoginController;\r\n loginForm: ng.IFormController;\r\n }\r\n\r\n export interface ILoginRouteParams extends ng.route.IRouteParamsService {\r\n tenant: string;\r\n }\r\n\r\n\r\n export interface ILogin {\r\n errors: Array;\r\n login: () => void;\r\n busy: boolean;\r\n externalLogins: IExternalLoginViewModel[];\r\n }\r\n\r\n export class LoginController implements ILogin {\r\n static controllerId: string = \"loginController\";\r\n static $inject: any = [\"$scope\", \"$routeParams\", \"authentication\", \"common\"];\r\n errors: Array = [];\r\n busy: boolean;\r\n loginInfo: ILoginModel;\r\n log: (msg, data?, showToast?) => void;\r\n externalLogins: IExternalLoginViewModel[];\r\n\r\n constructor(private $scope: ILoginControllerScope,\r\n private $routeParams: ILoginRouteParams,\r\n private authentication: IAuthenticationProviderService,\r\n private common: ICommonService) {\r\n\r\n // authentication.redirectAuthenticated(\"/\");\r\n this.log = common.logger.getLogFn(LoginController.controllerId);\r\n this.externalLogins = authentication.externalLogins;\r\n this.busy = false;\r\n\r\n this.loginInfo = {\r\n grant_type: \"password\",\r\n userName: \"\",\r\n password: \"\",\r\n rememberMe: false\r\n };\r\n\r\n this.activate();\r\n\r\n }\r\n\r\n private activate() {\r\n var self = this;\r\n this.common.activateController([], LoginController.controllerId)\r\n .then(result=> {\r\n self.log(\"Activated Login Screen\");\r\n });\r\n }\r\n\r\n login() {\r\n var self = this;\r\n self.loginInfo.tenant = self.$routeParams.tenant;\r\n self.errors = [];\r\n if (self.$scope.loginForm.$valid) {\r\n self.busy = true;\r\n self.authentication.login(self.loginInfo).then(result=> {\r\n self.busy = false;\r\n }, reason=> {\r\n self.errors.push(reason.data.error_description);\r\n self.busy = false;\r\n });\r\n }\r\n }\r\n\r\n loginExternal(externalLoginInfo: IExternalLoginViewModel) {\r\n this.authentication.loginWithExternal(externalLoginInfo, this.loginInfo);\r\n }\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").controller(LoginController.controllerId, LoginController);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n\r\n interface ILogOutScope extends ng.IScope {\r\n vm: LogOut;\r\n }\r\n\r\n interface ILogOutRootScope extends ng.IScope {\r\n stylesheets: Array;\r\n }\r\n\r\n interface ILogOutRouteParams extends ng.route.IRouteParamsService {\r\n referrer: string;\r\n }\r\n\r\n interface ILogOut {\r\n \r\n }\r\n\r\n class LogOut implements ILogOut {\r\n static controllerId: string = \"logOut\";\r\n static $inject: any = [\"$rootScope\", \"common\", \"$routeParams\", \"authentication\", \"$window\", \"$timeout\"];\r\n timer: any;\r\n \r\n\r\n\r\n constructor(private $rootScope: ILogOutRootScope,\r\n private common: ICommonService,\r\n private $routeParams: ILogOutRouteParams,\r\n private authentication: IAuthenticationProviderService,\r\n private $window: ng.IWindowService,\r\n private $timeout: ng.ITimeoutService) {\r\n \r\n this.activate();\r\n this.$rootScope.stylesheets = [];\r\n var baseStyleSheet = {\r\n link: \"/content/application.css\"\r\n };\r\n\r\n this.$rootScope.stylesheets.push(baseStyleSheet);\r\n\r\n if ($routeParams.referrer) {\r\n this.authentication.logout();\r\n if (this.$window.parent) {\r\n this.$window.parent.postMessage(\"Crossroads\", \"*\");\r\n }\r\n }\r\n else {\r\n this.timer = this.$timeout(() => {\r\n this.authentication.logout();\r\n }, 5000);\r\n if (this.$window.parent) {\r\n this.$window.parent.postMessage(\"Crossroads\", \"*\");\r\n }\r\n }\r\n }\r\n\r\n private activate() {\r\n var self = this;\r\n this.common.activateController([], LogOut.controllerId);\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(LogOut.controllerId, LogOut);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ILogoutDialogScope extends angular.IScope {\r\n countdown: number;\r\n }\r\n\r\n class LogoutDialog {\r\n static $inject = [\"$scope\"];\r\n\r\n constructor(private $scope: ILogoutDialogScope) {\r\n\r\n }\r\n }\r\n\r\n angular.module(\"app\").controller(\"logoutDialog\", LogoutDialog);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n interface ILogoutModalScope extends angular.IScope {\r\n refreshToken: () => void;\r\n timer: number;\r\n tokenExpiresOn: any;\r\n }\r\n\r\n interface ILogoutModal {\r\n activate: () => void;\r\n\r\n }\r\n\r\n class LogoutModal implements ILogoutModal {\r\n static controllerId: string = \"logoutModal\";\r\n\r\n static $inject: string[] = [\"$scope\", \"$location\", \"$uibModalInstance\", \"authentication\", \"$interval\"];\r\n intervalPromise: angular.IPromise;\r\n\r\n constructor(private $scope: ILogoutModalScope, private $location: angular.ILocationService, private $uibModalInstance: angular.ui.bootstrap.IModalServiceInstance, private authentication: IAuthenticationProviderService, private $interval: angular.IIntervalService) {\r\n this.activate();\r\n $scope.refreshToken = this.refreshToken;\r\n $scope.timer = 2 * 60;\r\n $scope.tokenExpiresOn = new Date(sessionStorage[CrossroadsStorage.expiresOn]);\r\n this.intervalPromise = this.$interval(this.intervalLogout, 1000);\r\n }\r\n\r\n activate() {\r\n\r\n }\r\n\r\n intervalLogout = () => {\r\n if (this.$scope.timer == 0) {\r\n if (sessionStorage[CrossroadsStorage.expiresOn]) {\r\n var expiresOn: any = new Date(sessionStorage[CrossroadsStorage.expiresOn]);\r\n if ((expiresOn - this.$scope.tokenExpiresOn) == 0) {\r\n this.authentication.logout();\r\n this.$location.path(\"/login\");\r\n } else {\r\n this.authentication.setLogoutTimer();\r\n }\r\n } else {\r\n this.authentication.logout();\r\n this.$location.path(\"/login\");\r\n }\r\n\r\n\r\n\r\n this.$uibModalInstance.close();\r\n this.$interval.cancel(this.intervalPromise);\r\n } else {\r\n this.$scope.timer = this.$scope.timer - 1;\r\n }\r\n\r\n };\r\n \r\n refreshToken = () => {\r\n this.$interval.cancel(this.intervalPromise);\r\n this.$uibModalInstance.close();\r\n this.authentication.refreshToken();\r\n\r\n };\r\n }\r\n\r\n angular.module(\"app\").controller(LogoutModal.controllerId, LogoutModal);\r\n}","/// \r\n/// \r\n\r\nnamespace Advant.Crossroads.Rules {\r\n \"use strict\";\r\n\r\n export interface IAdvRule extends angular.IDirective {\r\n\r\n }\r\n\r\n export interface IAdvRuleAttribute extends angular.IAttributes {\r\n advResponse: any;\r\n advRule: any; \r\n ngModel: any;\r\n }\r\n\r\n export interface IAdvRuleScope extends angular.IScope {\r\n advResponse: any;\r\n advRule: IRuleSet;\r\n }\r\n\r\n export class AdvRule implements IAdvRule {\r\n static directiveId: string = \"advRule\";\r\n restrict: string = \"A\";\r\n require: string = \"?ngModel\";\r\n modelController: angular.INgModelController;\r\n\r\n constructor(private $parse: angular.IParseService, private $timeout: angular.ITimeoutService, private ruleService: IRuleService) {\r\n }\r\n\r\n link = (scope: IAdvRuleScope, element: angular.IAugmentedJQuery, attrs: IAdvRuleAttribute, ctrl: angular.INgModelController) => {\r\n if (!ctrl) { return; };\r\n var rule: IRuleSet = this.$parse(attrs.advRule)(scope);\r\n\r\n\r\n if (rule) {\r\n var ruleProperties = this.ruleService.getPropertiesToWatch(rule);\r\n\r\n angular.forEach(ruleProperties, (ruleProperty) => {\r\n scope.$watch(attrs.advResponse + \".\" + ruleProperty, (newValue: any, oldValue: any, oScope: IAdvRuleScope) => {\r\n ctrl.$validate();\r\n }, true);\r\n });\r\n\r\n (ctrl.$validators as any).rule = (modelValue, viewValue) => {\r\n return this.ruleIsValid(attrs, scope, modelValue, viewValue);\r\n };\r\n\r\n }\r\n };\r\n\r\n ruleIsValid = (attrs: IAdvRuleAttribute, scope: IAdvRuleScope, modelValue, viewValue): boolean => {\r\n var value = modelValue || viewValue;\r\n\r\n \r\n var rule: IRuleSet = this.$parse(attrs.advRule)(scope); \r\n var response = _.cloneDeep(this.$parse(attrs.advResponse)(scope)); // Have to use a clone otherwise anything watching the value will fire a $digest cycle\r\n\r\n // Have to set the model value back to the scope. Validate fires before the model value is actually set\r\n // which can cause the rule to fail\r\n var propertyToSet = attrs.ngModel.replace(\"vm.response.\", \"\");\r\n response[propertyToSet] = value;\r\n\r\n var result = this.ruleService.evalRuleSet(rule, response);\r\n\r\n return result;\r\n };\r\n }\r\n\r\n\r\n angular.module(\"rules\").directive(AdvRule.directiveId, [\"$parse\", \"$timeout\", \"ruleService\",\r\n ($parse: angular.IParseService, $timeout: angular.ITimeoutService, ruleService: IRuleService) =>\r\n new AdvRule($parse, $timeout, ruleService)\r\n ]);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n export interface IAuthInterceptor {\r\n responseError: (rejection) => angular.IPromise;\r\n }\r\n\r\n export class AuthInterceptor implements IAuthInterceptor {\r\n static serviceId: string = \"authInterceptor\";\r\n\r\n\r\n constructor(private $q: angular.IQService, private $injector: angular.auto.IInjectorService, private $location: angular.ILocationService) {\r\n }\r\n\r\n request = (config) => {\r\n config.headers = config.headers || {};\r\n var authService: IAuthenticationProviderService = this.$injector.get(\"authentication\");\r\n\r\n if (authService.accessToken()) {\r\n config.headers.Authorization = \"Bearer \" + authService.accessToken();\r\n }\r\n\r\n return config;\r\n\r\n };\r\n\r\n responseError = (rejection) => {\r\n var deferred = this.$q.defer();\r\n if (rejection.status === 401) {\r\n var authService: IAuthenticationProviderService = this.$injector.get(\"authentication\");\r\n this.throttledRefresh().then((response) => {\r\n this.retryHttpRequest(rejection.config).then((result) => {\r\n deferred.resolve(result);\r\n }, (reason) => {\r\n authService.logout();\r\n deferred.reject(rejection);\r\n });\r\n }, () => {\r\n authService.logout();\r\n deferred.reject(rejection);\r\n });\r\n\r\n } else {\r\n deferred.reject(rejection);\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n throttledRefresh = _.throttle(this.refreshToken, 400, { \"trailing\": false });\r\n\r\n\r\n private refreshToken(): angular.IPromise {\r\n var deferred = this.$q.defer();\r\n var authService: IAuthenticationProviderService = this.$injector.get(\"authentication\");\r\n authService.refreshToken().then((response) => {\r\n deferred.resolve(response);\r\n }, (reason) => {\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n\r\n private retryHttpRequest = (config) => {\r\n var deferred = this.$q.defer();\r\n var $http = this.$injector.get(\"$http\");\r\n $http(config).then((response) => {\r\n deferred.resolve(response);\r\n }, (response) => {\r\n deferred.reject(response);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").factory(AuthInterceptor.serviceId, [\r\n \"$q\", \"$injector\", \"$location\", ($q, $injector, $location) =>\r\n new AuthInterceptor($q, $injector, $location)\r\n ]);\r\n}\r\n","namespace Advant.Crossroads {\r\n\r\n export interface ICollegeLookup {\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingColleges: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n state: string;\r\n\r\n getColleges: () => angular.IPromise;\r\n }\r\n\r\n export class CollegeLookup implements ICollegeLookup {\r\n static serviceId: string = \"collegeLookup\";\r\n static $inject = [\"Restangular\", \"common\"];\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingColleges: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n state: string;\r\n\r\n constructor(private Restangular: Restangular.IService, private common: ICommonService) {\r\n this.log = common.logger.getLogFn(CollegeLookup.serviceId);\r\n this.logError = common.logger.getLogFn(CollegeLookup.serviceId, \"error\");\r\n this.logSuccess = common.logger.getLogFn(CollegeLookup.serviceId, \"success\");\r\n\r\n this.page = 1;\r\n this.pageSize = 25;\r\n this.sortByRelevance = false;\r\n this.sortBy = \"Name\";\r\n this.sortDirection = \"ASC\";\r\n this.searchFilter = \"\";\r\n }\r\n\r\n getColleges = (): angular.IPromise => {\r\n this.loadingColleges = true;\r\n var queryParams = {\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n sortByRelevance: this.sortByRelevance,\r\n sortBy: this.sortBy,\r\n sortDirection: this.sortDirection,\r\n filter: this.searchFilter,\r\n state: this.state\r\n };\r\n\r\n\r\n return this.Restangular.one(\"lookup\").one(\"school\").withHttpConfig({ cache: true }).getList(\"colleges\", queryParams).then((result: any) => {\r\n this.totalCount = result.totalCount;\r\n this.totalPages = result.totalPages;\r\n\r\n if (result.totalCount > 0) {\r\n this.startRow = this.page === 1 ? 1 : (this.pageSize * (this.page - 1)) + 1;\r\n this.endRow = (this.startRow - 1) + result.length;\r\n } else {\r\n this.startRow = 0;\r\n this.endRow = 0;\r\n }\r\n this.loadingColleges = false;\r\n return result;\r\n }, (reason) => {\r\n this.logError(\"An error occurred while getting the high schools\", reason);\r\n });\r\n };\r\n\r\n searchColleges = (): void => {\r\n _.debounce(() => {\r\n this.sortByRelevance = true;\r\n this.sortBy = null;\r\n this.getColleges();\r\n }, 500);\r\n };\r\n\r\n sort = (sortValue: string): void => {\r\n if (this.sortBy === sortValue) {\r\n this.sortDirection = this.sortDirection === \"ASC\" ? \"DESC\" : \"ASC\";\r\n } else {\r\n this.sortBy = sortValue;\r\n }\r\n this.page = 1;\r\n this.searchFilter = \"\";\r\n this.sortByRelevance = false;\r\n this.getColleges();\r\n };\r\n\r\n }\r\n angular.module(\"app\").service(CollegeLookup.serviceId, CollegeLookup);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n export interface IHelper {\r\n isType: (entityType: Type, match: string) => boolean;\r\n isUpperCase: (value: string) => boolean;\r\n toCamelCase: (value: string) => string;\r\n openFile: (httpPath) => angular.IPromise;\r\n\r\n }\r\n\r\n export class Helper implements IHelper {\r\n static serviceId: string = \"helper\";\r\n static $inject: string[] = [\"$http\"];\r\n\r\n constructor(private $http: angular.IHttpService) {\r\n }\r\n\r\n isType(entityType: Type, match: string) {\r\n var result = false;\r\n if (entityType) {\r\n if (entityType.name === match) {\r\n result = true;\r\n } else if (entityType.baseType) {\r\n result = this.isType(entityType.baseType, match);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n isUpperCase = (value: string): boolean => {\r\n if (!isNaN(value * 1)) {\r\n return false;\r\n } else {\r\n if (value === value.toUpperCase()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n\r\n toCamelCase = (value: string): string => {\r\n if (!value) {\r\n return value;\r\n }\r\n\r\n if (!this.isUpperCase(value.charAt(0))) {\r\n return value;\r\n }\r\n\r\n var chars = value.split(\"\");\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var hasNext = (i + 1 < chars.length);\r\n\r\n if (i > 0 && hasNext && !this.isUpperCase(chars[i + 1])) {\r\n break;\r\n }\r\n\r\n chars[i] = chars[i].toLowerCase();\r\n }\r\n\r\n return chars.join(\"\");\r\n };\r\n\r\n openFile = (httpPath) => {\r\n return this.$http.get(httpPath, { responseType: \"arraybuffer\" })\r\n .then((response) => {\r\n var octetStreamMime = \"application/octet-stream\";\r\n\r\n // Get the headers\r\n var headerValues = response.headers();\r\n\r\n // Get the filename from the x-filename header or default to \"download.bin\"\r\n var filename = headerValues[\"x-filename\"] || \"download.pdf\";\r\n\r\n // Determine the content type from the header or default to \"application/octet-stream\"\r\n var contentType = headerValues[\"content-type\"] || octetStreamMime;\r\n var blob = new Blob([response.data], { type: contentType });\r\n\r\n saveAs(blob, filename);\r\n\r\n },\r\n (reason) => {\r\n console.log(`Request failed with status: ${status}`, reason);\r\n });\r\n };\r\n\r\n }\r\n\r\n angular.module(\"app\").service(Helper.serviceId, Helper);\r\n}","namespace Advant.Crossroads {\r\n\r\n export interface IHighSchoolLookup {\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingHighSchools: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n state: string;\r\n district: string;\r\n\r\n getHighSchools: () => angular.IPromise;\r\n }\r\n\r\n export class HighSchoolLookup implements IHighSchoolLookup {\r\n static serviceId: string = \"highSchoolLookup\";\r\n static $inject = [\"Restangular\", \"common\"];\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingHighSchools: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n state: string;\r\n district: string;\r\n\r\n constructor(private Restangular: Restangular.IService, private common: ICommonService) {\r\n this.log = common.logger.getLogFn(HighSchoolLookup.serviceId);\r\n this.logError = common.logger.getLogFn(HighSchoolLookup.serviceId, \"error\");\r\n this.logSuccess = common.logger.getLogFn(HighSchoolLookup.serviceId, \"success\");\r\n\r\n this.page = 1;\r\n this.pageSize = 25;\r\n this.sortByRelevance = false;\r\n this.sortBy = \"Name\";\r\n this.sortDirection = \"ASC\";\r\n this.searchFilter = \"\";\r\n }\r\n\r\n getHighSchools = (): angular.IPromise => {\r\n this.loadingHighSchools = true;\r\n var queryParams = {\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n sortByRelevance: this.sortByRelevance,\r\n sortBy: this.sortBy,\r\n sortDirection: this.sortDirection,\r\n filter: this.searchFilter,\r\n state: this.state,\r\n district: this.district\r\n };\r\n\r\n return this.Restangular.one(\"lookup\").one(\"school\").withHttpConfig({ cache: true }).getList(\"highSchools\", queryParams).then((result: any) => {\r\n this.totalCount = result.totalCount;\r\n this.totalPages = result.totalPages;\r\n\r\n if (result.totalCount > 0) {\r\n this.startRow = this.page === 1 ? 1 : (this.pageSize * (this.page - 1)) + 1;\r\n this.endRow = (this.startRow - 1) + result.length;\r\n } else {\r\n this.startRow = 0;\r\n this.endRow = 0;\r\n }\r\n this.loadingHighSchools = false;\r\n return result;\r\n }, (reason) => {\r\n this.logError(\"An error occurred while getting the high schools\", reason);\r\n });\r\n };\r\n\r\n searchHighSchools = (): void => {\r\n _.debounce(() => {\r\n this.sortByRelevance = true;\r\n this.sortBy = null;\r\n this.getHighSchools();\r\n }, 500);\r\n };\r\n\r\n sort = (sortValue: string): void => {\r\n if (this.sortBy === sortValue) {\r\n this.sortDirection = this.sortDirection === \"ASC\" ? \"DESC\" : \"ASC\";\r\n } else {\r\n this.sortBy = sortValue;\r\n }\r\n this.page = 1;\r\n this.searchFilter = \"\";\r\n this.sortByRelevance = false;\r\n this.getHighSchools();\r\n };\r\n\r\n }\r\n angular.module(\"app\").service(HighSchoolLookup.serviceId, HighSchoolLookup);\r\n}","// Install the angularjs.TypeScript.DefinitelyTyped NuGet package\r\nnamespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IPayeezyViewModel extends IPaymentViewModel {\r\n apiKey: string;\r\n jsToken: string;\r\n taToken: string;\r\n }\r\n // ReSharper disable InconsistentNaming\r\n export interface IPayeezyResponseViewModel {\r\n //HTTP Status code\r\n //200, 201, 202\r\n // Created / Accepted Transaction request - All OK. \r\n //400\r\n // Bad Request Input Request is invalid or incorrect. \r\n //401\r\n // Unauthorized Invalid API Key and Token. \r\n //404\r\n // Not Found The requested resource does not exist. \r\n //500, 502, 503, 504\r\n // Server errors Server Error at Payeezy end. \r\n status: number;\r\n results: {\r\n // Payeezy Internal log id\r\n correlation_id: string;\r\n // Status message for Token creation. Possible values = \"success\" / \"failed\".\r\n status: string;\r\n // Type of the token being created. Possible values = FDToken.\r\n type: string;\r\n token?: {\r\n // Type of credit card. Possible values - “American Express\", \"Visa\", \"Mastercard\", “JCB”, “Diners Club” or \"Discover\"\r\n type: string;\r\n cardholder_name: string;\r\n exp_date: string;\r\n // Its the value of the tokenized card info via the transarmor tokenization process\r\n value: string;\r\n }\r\n Error?: { messages: Array<{ code: string; description: string; }>; };\r\n }\r\n }\r\n // ReSharper restore InconsistentNaming\r\n export interface IPayeezyService {\r\n createToken: (paymentInfo: IPayeezyViewModel) => angular.IPromise;\r\n }\r\n\r\n class PayeezyService implements IPayeezyService {\r\n static $inject: string[] = [\"$http\", \"$q\", \"$sce\"];\r\n\r\n constructor(private $http: angular.IHttpService, private $q: angular.IQService, private $sce: any) {\r\n }\r\n\r\n createToken(paymentInfo: IPayeezyViewModel) {\r\n var request = {\r\n apikey: paymentInfo.apiKey,\r\n js_security_key: paymentInfo.jsToken,\r\n ta_token: paymentInfo.taToken,\r\n auth: true,\r\n type: \"FDToken\",\r\n \"credit_card.type\": paymentInfo.cardType,\r\n \"credit_card.cardholder_name\": paymentInfo.firstName + \" \" + paymentInfo.lastName,\r\n \"credit_card.card_number\": paymentInfo.cardNumber,\r\n \"credit_card.exp_date\": this.padNumber(paymentInfo.expireMonth, 2) + paymentInfo.expireYear.toString().slice(2, 4),\r\n \"credit_card.cvv\": paymentInfo.cvv2\r\n };\r\n var deferred = this.$q.defer();\r\n var url = this.$sce.trustAsResourceUrl(\"https://api-cert.payeezy.com/v1/securitytokens\");\r\n\r\n this.$http.jsonp(url, { params: request }).then((response) => {\r\n if (response.data.status === 200 || response.data.status === 201 || response.data.status === 202) {\r\n deferred.resolve(response.data.results.token.value);\r\n } else {\r\n deferred.reject(response.data.results.Error.messages[0].description);\r\n }\r\n }, (reason) => {\r\n deferred.reject(reason);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n padNumber = (num: number, length: number) => {\r\n var str = num.toString();\r\n while (str.length < length) {\r\n str = `0${str}`;\r\n }\r\n\r\n return str;\r\n\r\n };\r\n }\r\n\r\n angular.module(\"app\").service(\"payeezyService\", PayeezyService);\r\n}","namespace Advant.Crossroads {\r\n\r\n export interface IRLCPSponsoringSchoolLookup {\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingSchools: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n district: string;\r\n\r\n getRLCPSponsoringSchools: () => angular.IPromise;\r\n }\r\n\r\n export class RLCPSponsoringSchoolLookup implements IRLCPSponsoringSchoolLookup {\r\n static serviceId: string = \"rlcpSponsoringSchoolLookup\";\r\n static $inject = [\"Restangular\", \"common\"];\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingSchools: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n district: string;\r\n\r\n constructor(private Restangular: Restangular.IService, private common: ICommonService) {\r\n this.log = common.logger.getLogFn(RLCPSponsoringSchoolLookup.serviceId);\r\n this.logError = common.logger.getLogFn(RLCPSponsoringSchoolLookup.serviceId, \"error\");\r\n this.logSuccess = common.logger.getLogFn(RLCPSponsoringSchoolLookup.serviceId, \"success\");\r\n\r\n this.page = 1;\r\n this.pageSize = 25;\r\n this.sortByRelevance = false;\r\n this.sortBy = \"LEANameSorting\";\r\n this.sortDirection = \"ASC\";\r\n this.searchFilter = \"\";\r\n }\r\n\r\n getRLCPSponsoringSchools = (): angular.IPromise => {\r\n this.loadingSchools = true;\r\n var queryParams = {\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n sortByRelevance: this.sortByRelevance,\r\n sortBy: this.sortBy,\r\n sortDirection: this.sortDirection,\r\n filter: this.searchFilter,\r\n district: this.district\r\n };\r\n\r\n return this.Restangular.one(\"lookup\").one(\"school\").withHttpConfig({ cache: true }).getList(\"rlcpsponsoringschools\", queryParams).then((result: any) => {\r\n this.totalCount = result.totalCount;\r\n this.totalPages = result.totalPages;\r\n\r\n if (result.totalCount > 0) {\r\n this.startRow = this.page === 1 ? 1 : (this.pageSize * (this.page - 1)) + 1;\r\n this.endRow = (this.startRow - 1) + result.length;\r\n } else {\r\n this.startRow = 0;\r\n this.endRow = 0;\r\n }\r\n this.loadingSchools = false;\r\n return result;\r\n }, (reason) => {\r\n this.logError(\"An error occurred while getting the RLCP sponsoring schools\", reason);\r\n });\r\n };\r\n\r\n searchSchools = (): void => {\r\n _.debounce(() => {\r\n this.sortByRelevance = true;\r\n this.sortBy = null;\r\n this.getRLCPSponsoringSchools();\r\n }, 500);\r\n };\r\n\r\n sort = (sortValue: string): void => {\r\n if (this.sortBy === sortValue) {\r\n this.sortDirection = this.sortDirection === \"ASC\" ? \"DESC\" : \"ASC\";\r\n } else {\r\n this.sortBy = sortValue;\r\n }\r\n this.page = 1;\r\n this.searchFilter = \"\";\r\n this.sortByRelevance = false;\r\n this.getRLCPSponsoringSchools();\r\n };\r\n\r\n }\r\n angular.module(\"app\").service(RLCPSponsoringSchoolLookup.serviceId, RLCPSponsoringSchoolLookup);\r\n}","namespace Advant.Crossroads {\r\n export interface ICrossRoadsRootScope extends angular.IRootScopeService {\r\n title: string;\r\n }\r\n\r\n export interface IRouteMediator {\r\n setRoutingHandlers: () => void;\r\n }\r\n\r\n export class RouteMediator implements IRouteMediator {\r\n static serviceId: string = \"routemediator\";\r\n\r\n // define the functions and properties to reveal.\r\n handleRouteChangeError = false;\r\n\r\n constructor(private $location: angular.ILocationService, private $rootScope: ICrossRoadsRootScope,\r\n private config: Advant.Crossroads.ICrossroadsConfig, private logger: ILogger) {\r\n\r\n }\r\n\r\n setRoutingHandlers() {\r\n this.updateDocTitle();\r\n this.handleRoutingErrors();\r\n }\r\n\r\n handleRoutingErrors() {\r\n this.$rootScope.$on(\"$routeChangeError\",\r\n (event, current, previous, rejection) => {\r\n if (this.handleRouteChangeError) { return; }\r\n this.handleRouteChangeError = true;\r\n var msg = \"Error routing: \" + (current && current.name)\r\n + \". \" + (rejection.msg || \"\");\r\n this.logger.logWarning(msg, current, RouteMediator.serviceId, true);\r\n // self.$location.path(\"/\");\r\n });\r\n }\r\n\r\n updateDocTitle() {\r\n var self = this;\r\n self.$rootScope.$on(\"$routeChangeSuccess\",\r\n (event, current, previous) => {\r\n this.handleRouteChangeError = false;\r\n var title = this.config.docTitle + \" \" + (current.title || \"\");\r\n this.$rootScope.title = title;\r\n });\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").factory(RouteMediator.serviceId, [\"$location\",\"$rootScope\", \"config\", \"logger\", ($location, $rootScope, config, logger) =>\r\n new RouteMediator($location, $rootScope, config, logger)\r\n ]);\r\n}\r\n","namespace Advant.Crossroads {\r\n\r\n export interface ISchoolDistrictLookup {\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingHighSchools: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n\r\n getSchoolDistricts: () => angular.IPromise;\r\n }\r\n\r\n export class SchoolDistrictLookup implements ISchoolDistrictLookup {\r\n static serviceId: string = \"schoolDistrictLookup\";\r\n static $inject = [\"Restangular\", \"common\"];\r\n log: (msg, data?, showToast?) => void;\r\n logError: (msg, data?, showToast?) => void;\r\n logSuccess: (msg, data?, showToast?) => void;\r\n loadingHighSchools: boolean;\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n sortByRelevance: boolean;\r\n sortBy: string;\r\n sortDirection: string;\r\n totalPages: number;\r\n startRow: number;\r\n endRow: number;\r\n searchFilter: string;\r\n\r\n constructor(private Restangular: Restangular.IService, private common: ICommonService) {\r\n this.log = common.logger.getLogFn(SchoolDistrictLookup.serviceId);\r\n this.logError = common.logger.getLogFn(SchoolDistrictLookup.serviceId, \"error\");\r\n this.logSuccess = common.logger.getLogFn(SchoolDistrictLookup.serviceId, \"success\");\r\n\r\n this.page = 1;\r\n this.pageSize = 25;\r\n this.sortByRelevance = false;\r\n this.sortBy = \"LEANameSorting\";\r\n this.sortDirection = \"ASC\";\r\n this.searchFilter = \"\";\r\n }\r\n\r\n getSchoolDistricts = (): angular.IPromise => {\r\n this.loadingHighSchools = true;\r\n var queryParams = {\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n sortByRelevance: this.sortByRelevance,\r\n sortBy: this.sortBy,\r\n sortDirection: this.sortDirection,\r\n filter: this.searchFilter\r\n };\r\n\r\n return this.Restangular.one(\"lookup\").one(\"school\").withHttpConfig({ cache: true }).getList(\"districts\", queryParams).then((result: any) => {\r\n this.totalCount = result.totalCount;\r\n this.totalPages = result.totalPages;\r\n\r\n if (result.totalCount > 0) {\r\n this.startRow = this.page === 1 ? 1 : (this.pageSize * (this.page - 1)) + 1;\r\n this.endRow = (this.startRow - 1) + result.length;\r\n } else {\r\n this.startRow = 0;\r\n this.endRow = 0;\r\n }\r\n this.loadingHighSchools = false;\r\n return result;\r\n }, (reason) => {\r\n this.logError(\"An error occurred while getting the school districts\", reason);\r\n });\r\n };\r\n\r\n searchSchoolDistricts = (): void => {\r\n _.debounce(() => {\r\n this.sortByRelevance = true;\r\n this.sortBy = null;\r\n this.getSchoolDistricts();\r\n }, 500);\r\n };\r\n\r\n sort = (sortValue: string): void => {\r\n if (this.sortBy === sortValue) {\r\n this.sortDirection = this.sortDirection === \"ASC\" ? \"DESC\" : \"ASC\";\r\n } else {\r\n this.sortBy = sortValue;\r\n }\r\n this.page = 1;\r\n this.searchFilter = \"\";\r\n this.sortByRelevance = false;\r\n this.getSchoolDistricts();\r\n };\r\n\r\n }\r\n angular.module(\"app\").service(SchoolDistrictLookup.serviceId, SchoolDistrictLookup);\r\n}","namespace Advant.Crossroads {\r\n \"use strict\";\r\n\r\n export interface IStateLookup {\r\n getStates: () => IUsState[];\r\n }\r\n\r\n function stateLookup(): IStateLookup {\r\n\r\n var getStates = (): IUsState[]=> {\r\n return [\r\n {\r\n \"state\": \"Alabama\",\r\n \"abbreviation\": \"AL\"\r\n }, {\r\n \"state\": \"Alaska\",\r\n \"abbreviation\": \"AK\"\r\n }, {\r\n \"state\": \"Arizona\",\r\n \"abbreviation\": \"AZ\"\r\n }, {\r\n \"state\": \"Arkansas\",\r\n \"abbreviation\": \"AR\"\r\n }, {\r\n \"state\": \"California\",\r\n \"abbreviation\": \"CA\"\r\n }, {\r\n \"state\": \"Colorado\",\r\n \"abbreviation\": \"CO\"\r\n }, {\r\n \"state\": \"Connecticut\",\r\n \"abbreviation\": \"CT\"\r\n }, {\r\n \"state\": \"Delaware\",\r\n \"abbreviation\": \"DE\"\r\n }, {\r\n \"state\": \"District of Columbia\",\r\n \"abbreviation\": \"DC\"\r\n }, {\r\n \"state\": \"Florida\",\r\n \"abbreviation\": \"FL\"\r\n }, {\r\n \"state\": \"Georgia\",\r\n \"abbreviation\": \"GA\"\r\n }, {\r\n \"state\": \"Hawaii\",\r\n \"abbreviation\": \"HI\"\r\n }, {\r\n \"state\": \"Idaho\",\r\n \"abbreviation\": \"ID\"\r\n }, {\r\n \"state\": \"Illinois\",\r\n \"abbreviation\": \"IL\"\r\n }, {\r\n \"state\": \"Indiana\",\r\n \"abbreviation\": \"IN\"\r\n }, {\r\n \"state\": \"Iowa\",\r\n \"abbreviation\": \"IA\"\r\n }, {\r\n \"state\": \"Kansas\",\r\n \"abbreviation\": \"KS\"\r\n }, {\r\n \"state\": \"Kentucky\",\r\n \"abbreviation\": \"KY\"\r\n }, {\r\n \"state\": \"Louisiana\",\r\n \"abbreviation\": \"LA\"\r\n }, {\r\n \"state\": \"Maine\",\r\n \"abbreviation\": \"ME\"\r\n }, {\r\n \"state\": \"Maryland\",\r\n \"abbreviation\": \"MD\"\r\n }, {\r\n \"state\": \"Massachusetts\",\r\n \"abbreviation\": \"MA\"\r\n }, {\r\n \"state\": \"Michigan\",\r\n \"abbreviation\": \"MI\"\r\n }, {\r\n \"state\": \"Minnesota\",\r\n \"abbreviation\": \"MN\"\r\n }, {\r\n \"state\": \"Mississippi\",\r\n \"abbreviation\": \"MS\"\r\n }, {\r\n \"state\": \"Missouri\",\r\n \"abbreviation\": \"MO\"\r\n }, {\r\n \"state\": \"Montana\",\r\n \"abbreviation\": \"MT\"\r\n }, {\r\n \"state\": \"Nebraska\",\r\n \"abbreviation\": \"NE\"\r\n }, {\r\n \"state\": \"Nevada\",\r\n \"abbreviation\": \"NV\"\r\n }, {\r\n \"state\": \"New Hampshire\",\r\n \"abbreviation\": \"NH\"\r\n }, {\r\n \"state\": \"New Jersey\",\r\n \"abbreviation\": \"NJ\"\r\n }, {\r\n \"state\": \"New Mexico\",\r\n \"abbreviation\": \"NM\"\r\n }, {\r\n \"state\": \"New York\",\r\n \"abbreviation\": \"NY\"\r\n }, {\r\n \"state\": \"North Carolina\",\r\n \"abbreviation\": \"NC\"\r\n }, {\r\n \"state\": \"North Dakota\",\r\n \"abbreviation\": \"ND\"\r\n }, {\r\n \"state\": \"Ohio\",\r\n \"abbreviation\": \"OH\"\r\n }, {\r\n \"state\": \"Oklahoma\",\r\n \"abbreviation\": \"OK\"\r\n }, {\r\n \"state\": \"Oregon\",\r\n \"abbreviation\": \"OR\"\r\n }, {\r\n \"state\": \"Pennsylvania\",\r\n \"abbreviation\": \"PA\"\r\n }, {\r\n \"state\": \"Rhode Island\",\r\n \"abbreviation\": \"RI\"\r\n }, {\r\n \"state\": \"South Carolina\",\r\n \"abbreviation\": \"SC\"\r\n }, {\r\n \"state\": \"South Dakota\",\r\n \"abbreviation\": \"SD\"\r\n }, {\r\n \"state\": \"Tennessee\",\r\n \"abbreviation\": \"TN\"\r\n }, {\r\n \"state\": \"Texas\",\r\n \"abbreviation\": \"TX\"\r\n }, {\r\n \"state\": \"Utah\",\r\n \"abbreviation\": \"UT\"\r\n }, {\r\n \"state\": \"Vermont\",\r\n \"abbreviation\": \"VT\"\r\n }, {\r\n \"state\": \"Virginia\",\r\n \"abbreviation\": \"VA\"\r\n }, {\r\n \"state\": \"Washington\",\r\n \"abbreviation\": \"WA\"\r\n }, {\r\n \"state\": \"West Virginia\",\r\n \"abbreviation\": \"WV\"\r\n }, {\r\n \"state\": \"Wisconsin\",\r\n \"abbreviation\": \"WI\"\r\n }, {\r\n \"state\": \"Wyoming\",\r\n \"abbreviation\": \"WY\"\r\n }\r\n ];\r\n };\r\n\r\n var service: IStateLookup = {\r\n getStates: getStates\r\n };\r\n\r\n return service;\r\n }\r\n\r\n\r\n angular.module(\"app\").factory(\"stateLookup\", stateLookup);\r\n}","/// \r\nnamespace Advant.Crossroads {\r\n\r\n export interface IResourceClassWithUpdateAndSubmit extends angular.resource.IResourceClass {\r\n update(): T;\r\n update(dataOrParams: any): T;\r\n update(dataOrParams: any, success: Function): T;\r\n update(success: Function, error?: Function): T;\r\n update(params: any, data: any, success?: Function, error?: Function): T;\r\n submit(): T;\r\n submit(dataOrParams: any): T;\r\n submit(dataOrParams: any, success: Function): T;\r\n submit(success: Function, error?: Function): T;\r\n submit(params: any, data: any, success?: Function, error?: Function): T;\r\n }\r\n export interface IResourceClassWithSubmit extends angular.resource.IResourceClass {\r\n submit(): T;\r\n submit(dataOrParams: any): T;\r\n submit(dataOrParams: any, success: Function): T;\r\n submit(success: Function, error?: Function): T;\r\n submit(params: any, data: any, success?: Function, error?: Function): T;\r\n }\r\n\r\n export interface IUserApplicationService {\r\n applicationDefiniton: angular.resource.IResourceClass>;\r\n applicationResponse: IResourceClassWithUpdateAndSubmit>;\r\n paymentInfo: IResourceClassWithSubmit>;\r\n\r\n }\r\n\r\n export class UserApplicationService implements IUserApplicationService {\r\n public static serviceId: string = \"userApplicationService\";\r\n public applicationDefiniton: angular.resource.IResourceClass>;\r\n public applicationResponse: IResourceClassWithUpdateAndSubmit>;\r\n public paymentInfo: IResourceClassWithSubmit>;\r\n\r\n constructor(private $http: angular.IHttpService, private $resource: angular.resource.IResourceService) {\r\n this.applicationDefiniton = $resource(\"/api/UserApplication/definition/:org/:prog/:app\");\r\n this.applicationResponse = >>$resource(\"/api/UserApplication/:org/:prog/:app\", null, {\r\n update: { method: \"PUT\" },\r\n submit: {\r\n method: \"PUT\",\r\n url: \"/api/UserApplication/:org/:prog/:app/submit\"\r\n }\r\n });\r\n\r\n this.paymentInfo = >>$resource(\"/api/UserApplication/:org/:prog/:app/payment\", null, {\r\n submit: { method: \"PUT\" }\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n angular.module(\"app\").factory(UserApplicationService.serviceId, [\"$http\", \"$resource\", ($http, $resource) =>\r\n new UserApplicationService($http, $resource)\r\n ]);\r\n}"]}