UNPKG

client-ui

Version:

Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront

166 lines (150 loc) 4.82 kB
/* global config $ getUrlParameters */ function Splashpage() { this.numMessages = 0; this.loanAmountKeyPresses = 0; } Splashpage.prototype.submit = function(event) { event.preventDefault(); event.stopPropagation(); this.makeItDirty(); var valid = this.validateEverything(); if (!valid) { return; } var loanPurpose = this.getLoanPurpose(); var loanAmount = this.getCleanLoanAmount(); var newUrl = 'app.html#/account-creation?loanPurpose=' + loanPurpose + '&loanAmount=' + loanAmount; var urlParams = getUrlParameters(); newUrl += this.appendParam(urlParams, 'r'); newUrl += this.appendParam(urlParams, 'e'); newUrl += this.appendParam(urlParams, 'p'); newUrl += this.appendParam(urlParams, 'c'); window.location.href = newUrl; }; Splashpage.prototype.incrementKeyPresses = function() { this.loanAmountKeyPresses++; }; Splashpage.prototype.validateEverything = function(amountFirst) { var valid = true; if (amountFirst === true) { if (!this.validateLoanAmount()) { valid = false; } if (!this.validateLoanPurpose()) { valid = false; } } else { if (!this.validateLoanPurpose()) { valid = false; } if (!this.validateLoanAmount()) { valid = false; } } return valid; }; Splashpage.prototype.appendParam = function(urlParams, param) { if (urlParams[param]) { return '&' + param + '=' + encodeURIComponent(urlParams[param]); } return ''; }; Splashpage.prototype.makeDirty = function(element) { element = $(element); element.addClass("dirty"); }; Splashpage.prototype.makeItDirty = function() { this.makeDirty("#loanPurpose"); this.makeDirty("#loanAmount"); }; Splashpage.prototype.getLoanPurpose = function() { var loanPurposeElement = $('#loanPurpose'); return loanPurposeElement.val(); }; Splashpage.prototype.getCleanLoanAmount = function() { var loanAmountElement = $('#loanAmount'); var amount = loanAmountElement.val(); amount = amount.replace(/[^\d.]/g, ""); if (amount.length === 0) { return false; } try { amount = parseFloat(amount); amount = Math.floor(amount); } catch(e) { return false; } return amount; }; Splashpage.prototype.validateLoanPurpose = function() { this.displayDisclamers(); var loanPurposeElement = $('#loanPurpose'); var value = loanPurposeElement.val(); var valid = value !== null && value.length > 0; this.handleErrors({ element: loanPurposeElement, valid: valid, errorMessage: "How are you going to use your loan?" }); return valid; }; Splashpage.prototype.validateLoanAmount = function() { var loanAmountElement = $('#loanAmount'); var amount = loanAmountElement.val(); var validNumber = /(^(\$?)(\d{1,3})(,\d{3})*(\.\d*|,\d{0,3})?$)|(^\$?(\d+(\.\d*)?)?$)/; var valid = validNumber.test(amount); var cleanAmount = this.getCleanLoanAmount(); valid = valid && cleanAmount !== false; valid = valid && cleanAmount >= config.loanMin; valid = valid && cleanAmount <= config.loanMax; if (valid || !validNumber.test(amount) || this.loanAmountKeyPresses > 6) { this.makeDirty(loanAmountElement); } this.handleErrors({ element: loanAmountElement, valid: valid, errorMessage: "Enter an amount you'd like to borrow between " + config.loanMin + " and " + config.loanMax }); return valid; }; Splashpage.prototype.removeError = function(element) { var group = element.closest(".form-group"); group.removeClass("has-error"); if (element.hasClass("error")) { element.tooltip("destroy") .removeClass("error"); this.numMessages--; } }; Splashpage.prototype.addError = function(element, message) { var group = element.closest(".form-group"); group.addClass("has-error"); if (this.numMessages === 0 && !element.hasClass("error")) { this.numMessages++; element.tooltip("destroy") .data("title", message) .data("trigger", "manual") .addClass("error") .tooltip("show"); } }; Splashpage.prototype.handleErrors = function(params) { var dirty = params.element.hasClass("dirty"); if(dirty && !params.valid) { this.addError(params.element, params.errorMessage); } else { this.removeError(params.element); } }; Splashpage.prototype.displayDisclamers = function() { $('#businessDisclamer').hide(); var selectedValue = $('#loanPurpose').val(); switch (selectedValue) { case "business": $('#businessDisclamer').show(); break; } };