CautemocSg/ng-ip-address

View on GitHub
ngIpAddress.min.js

Summary

Maintainability
A
0 mins
Test Coverage
!function(){"use strict";angular.module("ng-ip-address",[]).directive("ngIpAddress",function(){return{restrict:"A",require:"?ngModel",scope:{config:"=?ngIpConfig"},link:function(e,o,i,h){if(h){var u=!1,p=!1,w=new RegExp("^0","g"),g=new RegExp("^\\.","g"),f=new RegExp("\\.\\.+","g"),d=new RegExp(":","g"),v=new RegExp("^:","g"),$=0,n=!1;e.$watchCollection("config",function(e){e?(p="boolean"==typeof e.requirePort&&e.requirePort,u=p||"boolean"==typeof e.allowPort&&e.allowPort):p=u=!1;u||!h.$viewValue?h.$parsers[0](h.$viewValue):h.$setViewValue(h.$viewValue.replace(d,""))}),o.bind("keydown",function(e){17!==e.which&&91!==e.which||(n=!0)}),o.bind("keyup",function(e){17!==e.which&&91!==e.which||(n=!1)}),o.bind("keypress",function(e){(e.which<46&&0!==e.which&&8!==e.which&&13!==e.which||47===e.which||58===e.which&&!u||58<e.which&&(!n||99!==e.which&&118!==e.which&&120!==e.which))&&e.preventDefault()}),h.$parsers.push(function(e){if(!e)return h.$setValidity("ipAddress",!0),e;var i=e;$=o[0].selectionStart;var n=!0,r=null,t=(i=(i=i.replace(g,"")).replace(f,".")).split("."),l=t.length;l<4?n=!1:4<l&&(t.length=4,l=4);for(var c=0;c<l;c++){var a=t[c];if(u)if(c<3)a=a.replace(d,"");else if(-1!==(a=a.replace(v,"")).indexOf(":")){var s=a.split(":");a=s[0],(r=s[1].replace(w,"").substring(0,5))&&V(a)&&!(65535<r)||(n=!1)}else p&&(n=!1);1<a.length?(!V(a=a.replace(w,"").substring(0,3))||255<a)&&(n=!1):a||(n=!1),t[c]=a}i=t.join("."),null!==r&&(i+=":"+r);return h.$setValidity("ipAddress",n),i===e?e:(h.$setViewValue(i),h.$render(),o[0].setSelectionRange($,$),i)})}function V(e){return!isNaN(parseFloat(e))&&isFinite(e)}}}})}();