consumerportal
Version:
mydna Custimised for you
274 lines (241 loc) • 8.37 kB
text/typescript
/// <reference path="../includes.ts" />
declare function moment(date: any,format:string): any;
((): void => {
'use strict';
function mydnaValidator(): angular.IDirective {
var directive = <angular.IDirective>{
restrict: 'AE',
require: 'ngModel',
link: link,
scope: true,
replace: true,
transclude: true,
};
function link(scope: angular.IScope, elm: angular.IAugmentedJQuery, attrs, ctrl: angular.INgModelController) {
switch (attrs.mydnaValidator) {
case 'email':
var regex = /^[-_A-Za-z0-9]+(\.[-_A-Za-z0-9]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$/;
break;
case 'emailorempty':
var regex = /^$|^[-_A-Za-z0-9]+(\.[-_A-Za-z0-9]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$/;
break;
case 'abn':
var regex = /|^\d*\s*$/;
break;
case 'postcode':
var regex = /^[0-9]{4,4}$/;
break;
case 'postcodeorempty':
var regex = /^($|[0-9]{4,4})$/;
break;
case 'postcodealphanumeric':
var regex = /^($|[a-zA-Z0-9 ]{4,10})$/;
break;
case 'phoneorempty':
var regex = /^$|[a-zA-Z0-9 ]{5,}$/;
break;
case 'phone':
var regex = /^[a-zA-Z0-9 ]{5,}$/;
break;
case 'mobileorempty':
var regex = /^$|[0-9 ]{10,}$/;
break;
case 'mobile':
var regex = /^[0-9 ]{10,}$/;
break;
case 'date':
var regex = /(^(((0[1-9]|[12][0-9])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/;
break;
case 'dateorempty':
var regex = /^$|(^(((0[1-9]|[12][0-9])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/;
break;
case 'threecharactersorempty':
var regex = /^$|[a-zA-Z0-9 ]{3,}$/;
break;
case 'twocharactersorempty':
var regex = /^$|[a-zA-Z0-9 ]{2,}$/;
break;
case 'sixcharacters':
var regex = /^.{6,}$/;
break;
case 'eightcharacters':
var regex = /^.{8,}$/;
break;
case 'barcode':
var regex = /^[a-zA-Z0-9-_]+$/;
break;
case 'numberOnly':
var regex =/^[0-9]*$/
}
ctrl.$parsers.unshift(function(viewValue) {
if ((attrs.mydnaValidator == "date" && viewValue.length >= 8) ||
(attrs.mydnaValidator == "dateorempty" && viewValue.length >= 8)) {
var arr = viewValue.split("/");
if (arr[0].length == 1) {
arr[0] = '0' + arr[0];
}
if (arr[1].length == 1) {
arr[1] = '0' + arr[1];
}
var newDate = arr[0] + '/' + arr[1] + '/' + arr[2];
elm.bind('blur', function() {
scope.$apply(function() {
ctrl.$setViewValue(newDate);
});
});
ctrl.$render();
var isDateValid = moment(newDate, "DD/MM/YYYY").isValid();
if (viewValue.length == 10 || newDate.length == 10) {
if(arr[2] <= 1875){
ctrl.$setValidity('mydnaValidator', false);
}
else{
ctrl.$setValidity('mydnaValidator', isDateValid);
}
}
else {
ctrl.$setValidity('mydnaValidator', false);
}
}
if (attrs.mydnaValidator == "date" && viewValue.length < 8) {
ctrl.$setValidity('mydnaValidator', false);
}
else if (attrs.mydnaValidator == "dateorempty" && viewValue.length == 0) {
ctrl.$setValidity('mydnaValidator', true);
}
else if ((attrs.mydnaValidator == "date" && viewValue.length >= 8) ||
(attrs.mydnaValidator == "dateorempty" && viewValue.length >= 8)) {
var isDateValid = moment(newDate, "DD/MM/YYYY").isValid();
if (viewValue.length == 10 || newDate.length == 10) {
if (arr[2] <= 1875) {
ctrl.$setValidity('mydnaValidator', false);
}
else {
ctrl.$setValidity('mydnaValidator', isDateValid);
}
}
else {
ctrl.$setValidity('mydnaValidator', false);
}
}
else {
if (regex.test(viewValue)) {
ctrl.$setValidity('mydnaValidator', true);
}
else {
ctrl.$setValidity('mydnaValidator', false);
}
}
return viewValue;
});
ctrl.$formatters.unshift(function(viewValue) {
if ((attrs.mydnaValidator == "date" && viewValue.length >= 8) ||
(attrs.mydnaValidator == "dateorempty" && viewValue.length >= 8)) {
var arr = viewValue.split("/");
if (arr[0].length == 1) {
arr[0] = '0' + arr[0];
}
if (arr[1].length == 1) {
arr[1] = '0' + arr[1];
}
var newDate = arr[0] + '/' + arr[1] + '/' + arr[2];
elm.bind('blur', function() {
scope.$apply(function() {
ctrl.$setViewValue(newDate);
});
});
ctrl.$render();
var isDateValid = moment(newDate, "DD/MM/YYYY").isValid();
if (viewValue.length == 10 || newDate.length == 10) {
if (arr[2] <= 1875) {
ctrl.$setValidity('mydnaValidator', false);
}
else {
ctrl.$setValidity('mydnaValidator', isDateValid);
}
}
else {
ctrl.$setValidity('mydnaValidator', false);
}
}
if (attrs.mydnaValidator == "date" && viewValue.length < 8) {
ctrl.$setValidity('mydnaValidator', false);
}
else if(attrs.mydnaValidator == "dateorempty" && viewValue.length == 0){
ctrl.$setValidity('mydnaValidator', true);
}
else if ((attrs.mydnaValidator == "date" && viewValue.length >= 8) ||
(attrs.mydnaValidator == "dateorempty" && viewValue.length >= 8)) {
var isDateValid = moment(newDate, "DD/MM/YYYY").isValid();
if (viewValue.length == 10 || newDate.length == 10) {
if (arr[2] <= 1875) {
ctrl.$setValidity('mydnaValidator', false);
}
else {
ctrl.$setValidity('mydnaValidator', isDateValid);
}
}
else {
ctrl.$setValidity('mydnaValidator', false);
}
}
else {
if (regex.test(viewValue)) {
ctrl.$setValidity('mydnaValidator', true);
}
else {
ctrl.$setValidity('mydnaValidator', false);
}
}
return viewValue;
});
}
return directive;
}
angular.module('mydnaValidator', []).directive('mydnaValidator', mydnaValidator);
})();
// /// <reference path="../includes.ts" />
// declare function moment(x: any, y: any);
/*
This directive can be used instead of mydna-validator="date"
if you wish ofcourse, you will have to add the extra validations not covered by
momentJS. Those validations are shown above in the parsers and formatters
and donot forget to add mydnaValidDate in the app.ts -
i dont doubt your skill but your memory especially after working on a directive
*/
// ((): void => {
// 'use strict';
// interface ctrlModel extends ng.INgModelController {
// $validators: any;
// }
// function validDateFormat(): ng.IDirective {
// var directivedate = <ng.IDirective>{
// restrict: 'A',
// require: 'ngModel',
// scope: true,
// link: link
// };
// function link(scope: ng.IScope, elm: ng.IAugmentedJQuery, attrs, ctrl: ctrlModel) {
// ctrl.$validators.mydnaValidDate = function(modelValue, viewValue) {
// var dat = viewValue;
// if (dat.length >= 8 && dat.length <= 10) {
// var arr = dat.split("/");
// if (arr[0].length == 1) {
// arr[0] = '0' + arr[0];
// }
// if (arr[1].length == 1) {
// arr[1] = '0' + arr[1];
// }
// var newDate = arr[0] + '/' + arr[1] + '/' + arr[2];
// ctrl.$setViewValue(newDate);
// ctrl.$render();
// var val = moment(newDate, "DD/MM/YYYY").isValid();
// return val;
// }
// return false;
// };
// }
// return directivedate;
// }
// angular.module('mydnaValidDate', []).directive('mydnaValidDate', validDateFormat);
// })();