client-ui
Version:
Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront
148 lines (139 loc) • 5.84 kB
JavaScript
angular.module(moduleName).factory('util', ['$filter', '$timeout', function($filter, $timeout) {
var self = {
scrollToElement: function(cssElement, offset) {
$timeout(function () {
$('html, body').animate({
scrollTop: $(cssElement).offset().top - offset
}, 1000);
});
},
meetsMinimumAge: function(birthDate, minAge) {
birthDate = new Date(birthDate);
var now = new Date();
var tempDate = new Date(birthDate.getFullYear() + minAge, birthDate.getMonth(), birthDate.getDate());
var isValid = tempDate <= now;
return isValid;
},
isNumeric: function(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
},
validDate: function(year, month, day) {
var isDate = true;
var potentialDate = month + '/' + day + '/' + year;
var dateTest = Date.parse(potentialDate);
if (isNaN(dateTest)) {
isDate = false;
} else {
dateTest = new Date(year, month - 1, day);
isDate = (dateTest.getFullYear() === parseInt(year) && dateTest.getMonth() + 1 === parseInt(month) && dateTest.getDate() === parseInt(day));
}
return isDate;
},
analyzeMonthYear: function(monthYear) {
var output = false;
if (monthYear) {
if (monthYear.length === 3) {
monthYear = '0' + monthYear.toString();
}
if (monthYear.length === 4) {
var getMonthPattern = /^([0-1]?[0-9])[0-9][0-9]$/;
var getYearPattern = /^[0-1]?[0-9]([0-9][0-9])$/;
// get month or false
if (getMonthPattern.test(monthYear)) {
var monthMatches = monthYear.match(getMonthPattern);
var month = false;
if (monthMatches.length > 1) {
if (parseInt(monthMatches[1]) <= 12 && parseInt(monthMatches[1]) >= 1) {
month = parseInt(monthMatches[1]);
}
}
// get year or false
var yearMatches = monthYear.match(getYearPattern);
var year = false;
if (yearMatches.length > 1) {
year = parseInt(yearMatches[1]);
}
if (month !== false && year !== false) {
output = {
month: month,
year: year
};
}
}
}
}
return output;
},
determineFirstFutureMonthYear: function(monthYearObj, currentDate) {
if (typeof monthYearObj !== 'object') {
return false;
} else if (!monthYearObj.hasOwnProperty('year')) {
return false;
} else if (!monthYearObj.hasOwnProperty('month')) {
return false;
}
if (typeof currentDate === 'undefined') {
currentDate = new Date();
}
currentDate.setDate(1);
var currentYear = currentDate.getFullYear();
var currentCentury = currentYear.toString().substr(0, 2);
var potentialYear = currentCentury + monthYearObj.year.toString();
var potentialDate = new Date(potentialYear, monthYearObj.month, 1);
if (potentialDate.getTime() < currentDate.getTime()) {
potentialYear = parseInt(potentialYear) + 100;
potentialDate = new Date(potentialYear, monthYearObj.month, 1);
}
var output = JSON.parse(JSON.stringify(monthYearObj));
output.year = potentialDate.getFullYear();
return output;
},
conditionalSet: function(obj, key, value) {
if (typeof value !== 'undefined') {
obj[key] = value;
}
},
testElement: function(obj, path) {
path = path.split('.');
while(path.length) {
var currElem = path.shift();
if (obj.hasOwnProperty(currElem)) {
obj = obj[currElem];
} else {
return false;
}
}
return obj;
},
applyFilter: function(filterName, args) {
return $filter(filterName).apply(this||window, args);
},
padInteger: function(number, numDigits, padding) {
if (typeof padding === "undefined") {
padding = 0;
}
padding = padding.toString();
number = number.toString();
for(var i = 0; i < numDigits; i++) {
number = padding + number;
}
return number.slice(numDigits * -1);
},
validBirthdate: function(month, day, year, minAge) {
var out = false;
var dateValid = self.validDate(year, month, day);
if (dateValid) {
var dateObj = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
if (self.meetsMinimumAge(dateObj.getTime(), minAge) && dateObj.getFullYear() > 1900) {
out = dateObj.toISOString();
}
}
return out;
},
validPhonenumber: function(number) {
var pattern = /[2-9]{1}[0-9]{2}[0-9]{3}[0-9]{4}/;
return pattern.test(number);
}
};
return self;
}]);