angular-input-types
Version:
AngularJS directives used on form inputs. Makes it easy for the users to input the correct information using autocomplete and validation.
6 lines • 7.4 kB
JavaScript
/*!
* Angular Input Types v2.0.3
* (c) 2017 Jon Wikman. https://github.com/FlaxHaxx/angular-input-types
* License: MIT
*/
!function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var t={};n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=6)}([function(e,n){angular.module("inputTypes").service("inputUtils",function(){this.getCursorPos=function(e){return e.selectionEnd},this.setCursorPos=function(e,n){if(e.setSelectionRange)e.focus(),window.setTimeout(function(){e.setSelectionRange(n,n)});else if(e.createTextRange){var t=e.createTextRange();t.collapse(!0),t.moveEnd("character",n),t.moveStart("character",n),t.select()}}})},function(e,n){angular.module("inputTypes").provider("inputNumber",function(){this.nrOfDecimals=0,this.$get=function(){return this}}).directive("inputNumber",["$browser","$filter","$locale","$parse","$sniffer","inputNumber","inputUtils","validate",function(e,n,t,r,i,u,l,a){function c(e,n){if(null==e)return null;var t=(""+e).replace(".",p).replace(new RegExp("[^\\d\\-\\"+p+"]","g"),""),r="^\\-?\\d+";return n>0&&(r+="(\\"+p+"\\d{0,"+n+"})?"),t=t.match(new RegExp(r,"g")),null===t?null:t[0]}function o(e,n,t,r){if(t!=n.length){var i=l.getCursorPos(e[0]);if(e.val(null===n?"":g(n)),null===n)return 0;var u=n.toString().split(p)[0].length;return u>0&&"-"==n.charAt(0)&&u--,e[0]===document.activeElement&&(u>1&&u%3==1&&i<=u+Math.floor(u/3)&&i++,i>1&&t>u&&t%3>0&&i--,r.$evalAsync(l.setCursorPos(e[0],i))),u}}function g(e){var n=(e+"").split(p);return n[0]=n[0].replace(/\B(?=(\d{3})+(?!\d))/g,d),n.join(p)}function s(e,n){return e.indexOf(n)==-1?0:e.split(n)[1].length}function f(e,n){e.hasEvent("input")?n.triggerHandler("input"):n.triggerHandler("change")}var d=t.NUMBER_FORMATS.GROUP_SEP,p=t.NUMBER_FORMATS.DECIMAL_SEP,v=u.nrOfDecimals;return{restrict:"A",require:"ngModel",link:function(e,n,t,u){var l=e.$eval(t.decimals),a=0;void 0===l&&(l=v);var g=e.$eval(t.min);if(u.$parsers.unshift(function(t){if(""==t)return null;if(t){var r=c(t,l);if(!(null==r||s(r,p)>l))return a=o(n,r,a,e),(s(t,p)>l||t.lastIndexOf("-")<=0||t.lastIndexOf("+")<=0||t.lastIndexOf(" ")<=0||t.replace(".",",").indexOf(",")!=t.replace(".",",").lastIndexOf(","))&&f(i,n),u.$validators.min=function(e,n){return u.$isEmpty(e)||void 0===g||e>=g},null===r?null:r.replace(p,".").replace(/\.$/,"")}}),t.ngModel){var d=r(t.ngModel)(e);d&&(a=o(n,c(d,l),a,e),f(i,n))}}}}])},function(e,n){angular.module("inputTypes").directive("inputOrgnr",["$browser","$sniffer","validate",function(e,n,t){function r(e){var n=e.slice(0,2),r=16==n||18==n||19==n||20==n;if((6==e.length&&!r||8==e.length&&r)&&e.indexOf("-")==-1&&(e+="-"),10==e.length&&!r||12==e.length&&r){var i=e.slice(0,e.length-4)+"-"+e.slice(e.length-4);t.orgnr(i)&&(e=i)}return e}function i(e){if(e.length<2)return e;var n=e.slice(0,2),t=16==n||18==n||19==n||20==n;return(10==e.length&&!t||12==e.length&&t)&&e.indexOf("-")==-1&&(e=e.slice(0,e.length-4)+"-"+e.slice(e.length-4)),e}return{restrict:"A",require:"ngModel",link:function(u,l,a,c){c.$validators.orgnr=function(e,n){return c.$isEmpty(e)||t.orgnr(n)};var o=function(){var e=l.val().replace(/[^0-9\-]/g,"").replace("--","-");(e=r(e))!=l.val()&&(l.val(e),n.hasEvent("input")?l.triggerHandler("input"):l.triggerHandler("change"))},g=function(){var e=l.val().replace(/[^0-9\-]/g,"").replace("--","-");(e=i(e))!=l.val()&&(l.val(e),n.hasEvent("input")?l.triggerHandler("input"):l.triggerHandler("change"))};l.bind("keydown",function(n){var t=n.keyCode;8==t||46==t||91==t||15<t&&t<19||37<=t&&t<=40||e.defer(o)}),l.bind("paste cut",function(){e.defer(g)}),l.bind("change",o)}}}])},function(e,n){angular.module("inputTypes").directive("inputPersonnummer",["$browser","$sniffer","validate",function(e,n,t){function r(e){if(2==e.length&&e!=l-1&&e!=l&&(e=u(e)+e),7==e.length&&"-"==e[6]&&(e=u(e.slice(0,2))+e),8==e.length&&e.indexOf("-")==-1&&(e+="-"),12==e.length&&e.indexOf("-")==-1){var n=e.slice(0,8)+"-"+e.slice(8);t.personnummer(n)&&(e=n)}return e}function i(e){return e.length<2?e:(10==e.length&&(e=u(e.slice(0,2))+e),12==e.length&&(e=e.slice(0,8)+"-"+e.slice(8)),e)}function u(e){return e>a?l-1:l}var l=String((new Date).getFullYear()).slice(0,2),a=String((new Date).getFullYear()).slice(2,4);return{restrict:"A",require:"ngModel",link:function(u,l,a,c){c.$validators.personnummer=function(e,n){return c.$isEmpty(e)||t.personnummer(n)};var o=function(){var e=l.val().replace(/[^0-9\-]/g,"").replace("--","-");(e=r(e))!=l.val()&&(l.val(e),n.hasEvent("input")?l.triggerHandler("input"):l.triggerHandler("change"))},g=function(){var e=l.val().replace(/[^0-9\-]/g,"").replace("--","-");(e=i(e))!=l.val()&&(l.val(e),n.hasEvent("input")?l.triggerHandler("input"):l.triggerHandler("change"))};l.bind("keydown",function(n){var t=n.keyCode;8==t||46==t||91==t||15<t&&t<19||37<=t&&t<=40||e.defer(o)}),l.bind("paste cut",function(){e.defer(g)}),l.bind("change",g)}}}])},function(e,n){angular.module("inputTypes").directive("inputTime",["$browser","$parse","validate",function(e,n,t){function r(e){if(e.length>5)return e.substring(0,5);if(":"==e.charAt(e.length-1))for(;e.length<3;)e="0"+e;return 2==e.length?e+":":e.length>4&&":"==e.charAt(4)?e.substring(0,4):e}function i(e){return e.match(/\d{1,2}:\d{2}/g)[0],5==e.length?e:4==e.length?"0"+e:""}function u(e,n){e.val(null===n?"":n),e.triggerHandler("input")}function l(e){return e.replace(/[^0-9\:]/g,"").replace("::",":")}function a(e){return("0"+e).slice(-2)}return{restrict:"A",require:"ngModel",link:function(c,o,g,s){s.$parsers.unshift(function(e){e&&e.length>5&&(e=e.substring(0,5));var n=s.$isEmpty(e)||t.time(e);return s.$setValidity("time",n),n?e:void 0});var f=function(){o.val()&&u(o,r(l(o.val())))},d=function(){u(o,i(l(o.val())))};if(o.bind("keydown",function(n){var t=n.keyCode;8==t||46==t||91==t||15<t&&t<19||37<=t&&t<=40||e.defer(f)}),o.bind("paste cut",function(){e.defer(d)}),o.bind("change",d),g.ngModel){var p=n(g.ngModel)(c);p&&(u(o,a(p.getHours())+":"+a(p.getMinutes())),o.triggerHandler("change"))}}}}])},function(e,n){angular.module("inputTypes").factory("validate",function(){function e(e){return!isNaN(e)}function n(e){return 13==e.length&&i(e)&&u(e)}function t(e){return(11==e.length||13==e.length)&&(!!e.match(/^(\d{2})?(\d{2})(\d{2})(\d{2})\-(\d{4})$/)&&(parseInt(RegExp.$3)<20?n(11==e.length?"20"+e:e):(""==RegExp.$1||16==RegExp.$1)&&u(e)))}function r(e){if(5!=e.length)return!1;if(":"!==e.charAt(2))return!1;var n=e.substring(0,2);if(n<0||n>23)return!1;var t=e.substring(3,5);return!(t<0||t>59)}function i(e){if(!e.match(/^(\d{4})(\d{2})(\d{2})\-(\d{4})$/))return!1;var n=new Date(RegExp.$1,RegExp.$2-1,RegExp.$3<61?RegExp.$3:1);return!(RegExp.$1<1840||n.getFullYear()!=RegExp.$1||n.getMonth()!=RegExp.$2-1||n.getDate()!=RegExp.$3&&(RegExp.$3<61||RegExp.$3>91))}function u(e){e=e.replace("-",""),12==e.length&&(e=e.substring(2));for(var n=0,t=0;t<10;t++){var r=parseInt(e.charAt(t));t%2==0&&(r*=2),r>9&&(r-=9),n+=r}return n%10==0}return{number:e,personnummer:n,orgnr:t,time:r}})},function(e,n,t){angular.module("inputTypes",[]),t(0),t(5),t(1),t(2),t(3),t(4)}]);