{"version":3,"sources":["app.js","password-verify.directive.js","signup-form.controller.js","signup-progress.controller.js"],"names":["angular","$routeProvider","templateUrl","controller","redirectTo","$rootScope","$on","window","scrollTo","event","currentRoute","previousRoute","require","scope","passwordVerify","link","element","attrs","ctrl","$watch","combined","$viewValue","value","$parsers","unshift","viewValue","$setValidity","$scope","$location","$timeout","authenticationService","$http","vm","this","step","isLoggedIn","name","email","getLoggedInEmail","phone","sitePrefix","accountPassword","confirmPassword","siteNameCheckStatus","namePattern","errorMessage","siteNamePattern","phonePattern","siteNameChanged","post","apiRootUrl","JSON","stringify","SitePrefix","response","data","IsAvailable","$applyAsync","popupLogin","ShowLoginOverlay","createAccountThenSignup","firstName","split","slice","join","lastName","FirstName","LastName","Company","PhoneNumber","EmailAddress","Password","rememberMe","createAccount","err","message","Message","ModelState","key","msg","timeStarted","Date","startSignup","RefreshLoginTopArea","ga","path","ServiceSignupGuid","RecalculateAllFloatLabelControls","$routeParams","guid","search","elapsedSeconds","fullSitePath","prefix","updateBuildTimer","diff","getTime","Math","round","abs","updateBuildStatus","Status"],"mappings":"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","file":"smartertrack-signup.min.js","sourcesContent":["(function () {\n\n angular\n .module('smartertoolsApp')\n .config(['$routeProvider', smarterToolsRouteProvider])\n .run(['$rootScope', function ($rootScope) {\n $rootScope.$on('$stateChangeSuccess', () => {\n window.scrollTo(0, 0);\n });\n $rootScope.$on('$routeChangeSuccess', (event, currentRoute, previousRoute) => {\n window.scrollTo(0, 0);\n });\n }]);\n\n function smarterToolsRouteProvider($routeProvider) {\n $routeProvider\n .when('/',\n {\n templateUrl: '/app/smartertrack-signup/signup-form.html',\n controller: 'trackSignupForm as signup'\n })\n .when('/:sitePrefix/:guid',\n {\n templateUrl: '/app/smartertrack-signup/signup-progress.html',\n controller: 'trackSignupProgress as signupProgress'\n })\n .otherwise({\n redirectTo: '/'\n });\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .directive('passwordVerify', passwordVerifyDirective);\n\n function passwordVerifyDirective() {\n return {\n require: 'ngModel',\n scope: {\n passwordVerify: '='\n },\n link: function (scope, element, attrs, ctrl) {\n scope.$watch(() => {\n let combined;\n if (scope.passwordVerify || ctrl.$viewValue) {\n combined = scope.passwordVerify + '_' + ctrl.$viewValue;\n }\n return combined;\n },\n value => {\n if (value) {\n ctrl.$parsers.unshift(viewValue => {\n let origin = scope.passwordVerify;\n if (origin !== viewValue) {\n ctrl.$setValidity('passwordVerify', false);\n return undefined;\n } else {\n ctrl.$setValidity('passwordVerify', true);\n return viewValue;\n }\n });\n }\n });\n }\n };\n }\n\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .controller('trackSignupForm', ['$scope', '$location', '$timeout', 'authenticationService', '$http', trackSignupForm]);\n\n function trackSignupForm($scope, $location, $timeout, authenticationService, $http) {\n const vm = this;\n vm.step = authenticationService.isLoggedIn() ? 'form-short' : 'form';\n vm.name = '';\n vm.email = authenticationService.getLoggedInEmail();\n vm.phone = '';\n vm.sitePrefix = '';\n vm.accountPassword = '';\n vm.confirmPassword = '';\n vm.siteNameCheckStatus = null;\n vm.namePattern = /^.*\\S\\s+\\S.*$/;\n vm.errorMessage = '';\n vm.siteNamePattern = /^[a-zA-Z][a-zA-Z0-9-]+[a-zA-Z0-9]$/;\n vm.phonePattern =\n /^(?:(?:\\(?(?:00|\\+)([1-4]\\d\\d|[1-9]\\d?)\\)?)?[\\-. \\\\/]?)?((?:\\(?\\d+\\)?[\\-. \\\\/]?)*)(?:[\\-. \\\\/]?(?:#|ext?\\.?|extension|x)[\\-. \\\\/]?(\\d+))?$/i;\n\n // Functions\n vm.siteNameChanged = siteNameChanged;\n vm.popupLogin = popupLogin;\n vm.createAccountThenSignup = createAccountThenSignup;\n vm.startSignup = startSignup;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n $scope.$on('authentication:logged-in', () => onLoggedIn());\n $scope.$on('authentication:logged-out', () => {});\n $timeout(() => {\n if (typeof RecalculateAllFloatLabelControls == 'function') {\n RecalculateAllFloatLabelControls();\n }\n });\n }\n\n function siteNameChanged() {\n if (!vm.sitePrefix) {\n vm.siteNameCheckStatus = null;\n return;\n }\n vm.siteNameCheckStatus = 0;\n $http.post(`${apiRootUrl}v1/hosted-smartertrack/availability`, JSON.stringify({SitePrefix: vm.sitePrefix}))\n .then(response => {\n let data = response.data;\n vm.siteNameCheckStatus = data.IsAvailable ? 1 : -1;\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function onLoggedIn() {\n if (authenticationService.isLoggedIn()) {\n vm.step = 'form-short';\n vm.email = authenticationService.getLoggedInEmail();\n } else\n vm.step = 'form';\n\n $scope.$applyAsync();\n $timeout(() => {\n if (typeof RecalculateAllFloatLabelControls == 'function') {\n RecalculateAllFloatLabelControls();\n }\n });\n }\n\n function popupLogin() {\n ShowLoginOverlay();\n return false;\n }\n\n function createAccountThenSignup() {\n const firstName = vm.name.split(' ').slice(0, -1).join(' ');\n const lastName = vm.name.split(' ').slice(-1).join(' ');\n\n if (!authenticationService.isLoggedIn()) {\n let data = {\n FirstName: firstName,\n LastName: lastName,\n Company: null,\n PhoneNumber: vm.phone,\n EmailAddress: vm.email,\n 'Password': vm.accountPassword\n };\n let rememberMe = false;\n authenticationService.createAccount(data,\n rememberMe,\n err => {\n if (!err) {\n vm.step = 'building';\n vm.timeStarted = new Date();\n vm.startSignup();\n } else {\n let message = '';\n if (err.Message)\n message = err.Message;\n else if (err.ModelState) {\n for (let key in err.ModelState) {\n for (let msg in err.ModelState[key]) {\n if (message !== '') message += '
';\n message += err.ModelState[key][msg];\n }\n }\n }\n if (message === '') message = 'Generic Error';\n if (message === 'Email address already exists' || message === 'Email address is already in use')\n message = 'It looks like you already have a SmarterTools account. Please log in to continue.';\n vm.errorMessage = message;\n\n $scope.$applyAsync();\n }\n // TODO: Show errors here\n RefreshLoginTopArea();\n });\n }\n }\n\n function startSignup() {\n $http.post(`${apiRootUrl}v1/hosted-smartertrack/build-start`, JSON.stringify({SitePrefix: vm.sitePrefix}))\n .then(response => {\n let data = response.data;\n if (typeof ga === 'function') {\n ga('send', 'event', 'Hosted SmarterTrack', 'Trial', 'Hosted SmarterTrack Trial');\n }\n $scope.$applyAsync(() => {\n $location.path(`/${vm.sitePrefix}/${data.ServiceSignupGuid}`);\n });\n }, () => {\n });\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .controller('trackSignupProgress', ['$timeout', '$scope', '$routeParams', '$location', '$http', trackSignupProgress]);\n\n function trackSignupProgress($timeout, $scope, $routeParams, $location, $http) {\n const vm = this;\n vm.guid = $routeParams.guid;\n vm.sitePrefix = $routeParams.sitePrefix;\n vm.step = $location.search().step || 'building';\n vm.timeStarted = new Date();\n vm.elapsedSeconds = 0;\n\n // Functions\n vm.fullSitePath = fullSitePath;\n vm.updateBuildTimer = updateBuildTimer;\n vm.updateBuildStatus = updateBuildStatus;\n vm.popupLogin = popupLogin;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n vm.updateBuildTimer();\n vm.updateBuildStatus();\n }\n\n function fullSitePath(prefix) {\n return `https://${prefix}.smartertrack.com/`;\n }\n\n function popupLogin() {\n ShowLoginOverlay();\n return false;\n }\n\n function updateBuildTimer() {\n const diff = (new Date()).getTime() - vm.timeStarted.getTime();\n vm.elapsedSeconds = Math.round(Math.abs(diff / 1000));\n $timeout(vm.updateBuildTimer, 1000);\n }\n\n function updateBuildStatus() {\n if (vm.step !== 'building')\n return;\n $http.post(`${apiRootUrl}v1/hosted-smartertrack/build-progress`, JSON.stringify({ServiceSignupGuid: vm.guid}))\n .then(response => {\n let data = response.data;\n vm.step = data.Status || 'building';\n $scope.$applyAsync();\n }, () => {\n });\n }\n }\n\n})();"]}