UNPKG

consumerportal

Version:

mydna Custimised for you

274 lines (241 loc) 8.37 kB
/// <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); // })();