diff --git a/README.md b/README.md index 2134dc44..2f513e7d 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Cleave.js has a simple purpose: to help you format input text content automatica - Custom delimiter, prefix and blocks pattern - CommonJS / AMD mode - ReactJS component +- AngularJS directive (1.x) **TL;DR** [the demo page](http://nosir.github.io/cleave.js/) @@ -144,11 +145,55 @@ As you can see, here you simply use `` as a normal `` field Usage for `Webpack`, `Browserify` and more in documentation: [ReactJS component usage](https://github.com/nosir/cleave.js/blob/master/doc/reactjs-component-usage.md) +## AngularJS directive usage + +First include the directive module: + +```html + + +``` + +And in the model: + +```js +angular.module('app', ['cleave.js']) + +.controller('AppController', function($scope) { + $scope.onCreditCardTypeChanged = function(type) { + $scope.model.creditCardType = type; + }; + + $scope.model = { + value: '' + }; + + $scope.options = { + creditCard: { + creditCard: true, + onCreditCardTypeChanged: $scope.onCreditCardTypeChanged + } + }; +}); +``` + +Then easily you can apply `cleave` directive with `input` field: + +```html +
+ +
+``` + +More usage in documentation: [Angular directive usage](https://github.com/nosir/cleave.js/blob/master/doc/angularjs-directive-usage.md) + ## Playground - [Plain JSFiddle (Basic usage)](https://jsfiddle.net/nosir/kbaxx64s/) - [Plain JSFiddle (More examples)](https://jsfiddle.net/nosir/aLnhdf3z/) - [React JSFiddle](https://jsfiddle.net/nosir/gLLsrxxf/) +- [Angular JSFiddle](https://jsfiddle.net/nosir/q58sh22t/) ## Documentation @@ -158,6 +203,7 @@ Usage for `Webpack`, `Browserify` and more in documentation: [ReactJS component - [Public methods](https://github.com/nosir/cleave.js/blob/master/doc/public-methods.md) - [Phone lib addon](https://github.com/nosir/cleave.js/blob/master/doc/phone-lib-addon.md) - [ReactJS component usage](https://github.com/nosir/cleave.js/blob/master/doc/reactjs-component-usage.md) +- [AngularJS directive usage](https://github.com/nosir/cleave.js/blob/master/doc/angularjs-directive-usage.md) ## Building & Running tests @@ -182,7 +228,7 @@ gulp mocha && gulp eslint - [x] Add credit card type detection callback - [x] Mocha unit tests for formatter - [ ] Fix the classic cursor jumping issue -- [ ] AngularJS component (WIP...) +- [x] AngularJS directive (1.x) - [ ] PhantomJS / Jest browser tests > For contributors, we have a [not in the plan](https://github.com/nosir/cleave.js/blob/master/doc/not-in-the-plan.md) list you may concern. diff --git a/bower.json b/bower.json index 36aacd6c..0d8925e4 100644 --- a/bower.json +++ b/bower.json @@ -8,7 +8,7 @@ "form", "input" ], - "version": "0.6.7", + "version": "0.6.9", "author": { "name": "Max Huang", "email": "risonhuang@gmail.com", diff --git a/dist/cleave-angular.js b/dist/cleave-angular.js index 8f83a444..62bdfabe 100644 --- a/dist/cleave-angular.js +++ b/dist/cleave-angular.js @@ -816,13 +816,26 @@ angular.module('cleave.js', []) .directive('cleave', function () { return { restrict: 'A', + require: 'ngModel', scope: { - options: '=' + options: '=', + onValueChange: '&?' }, controller: function ($scope, $element) { - new Cleave($element[0], $scope.options); + $scope.cleave = new Cleave($element[0], $scope.options); + $scope.onValueChange = $scope.onValueChange || null; + }, + + link: function ($scope, $element, attrs, ngModel) { + if ($scope.onValueChange) { + $scope.$watch(function () { + return ngModel.$modelValue; + }, function () { + $scope.onValueChange()($scope.cleave.getFormattedValue(), $scope.cleave.getRawValue()); + }); + } } }; }); diff --git a/dist/cleave-angular.min.js b/dist/cleave-angular.min.js index 24bd0a9b..0eceefd6 100644 --- a/dist/cleave-angular.min.js +++ b/dist/cleave-angular.min.js @@ -1,8 +1,8 @@ /*! - * cleave.js - 0.6.7 + * cleave.js - 0.6.9 * https://github.com/nosir/cleave.js * Apache License Version 2.0 * * Copyright (C) 2012-2016 Max Huang https://github.com/nosir/ */ -!function(window,document,undefined){"use strict";var Cleave=function(element,opts){var owner=this;"string"==typeof element?owner.element=document.querySelector(element):owner.element="undefined"!=typeof element.length&&element.length>0?element[0]:element,opts.initValue=owner.element.value,owner.properties=Cleave.DefaultProperties.assign({},opts),owner.init()};Cleave.prototype={init:function(){var owner=this,pps=owner.properties;(pps.numeral||pps.phone||pps.creditCard||pps.date||0!==pps.blocksLength||pps.prefix)&&(pps.maxLength=Cleave.Util.getMaxLength(pps.blocks),owner.onChangeListener=owner.onChange.bind(owner),owner.onKeyDownListener=owner.onKeyDown.bind(owner),owner.element.addEventListener("input",owner.onChangeListener),owner.element.addEventListener("keydown",owner.onKeyDownListener),owner.initPhoneFormatter(),owner.initDateFormatter(),owner.initNumeralFormatter(),owner.onInput(pps.initValue))},initNumeralFormatter:function(){var owner=this,pps=owner.properties;pps.numeral&&(pps.numeralFormatter=new Cleave.NumeralFormatter(pps.numeralDecimalMark,pps.numeralDecimalScale,pps.numeralThousandsGroupStyle,pps.delimiter))},initDateFormatter:function(){var owner=this,pps=owner.properties;pps.date&&(pps.dateFormatter=new Cleave.DateFormatter(pps.datePattern),pps.blocks=pps.dateFormatter.getBlocks(),pps.blocksLength=pps.blocks.length,pps.maxLength=Cleave.Util.getMaxLength(pps.blocks))},initPhoneFormatter:function(){var owner=this,pps=owner.properties;if(pps.phone)try{pps.phoneFormatter=new Cleave.PhoneFormatter(new window.Cleave.AsYouTypeFormatter(pps.phoneRegionCode),pps.delimiter)}catch(ex){throw new Error("Please include phone-type-formatter.{country}.js lib")}},onKeyDown:function(event){var owner=this,pps=owner.properties,charCode=event.which||event.keyCode;return 8===charCode&&Cleave.Util.isDelimiter(owner.element.value.slice(-1),pps.delimiter,pps.delimiters)?void(pps.backspace=!0):void(pps.backspace=!1)},onChange:function(){this.onInput(this.element.value)},onInput:function(value){var owner=this,pps=owner.properties,prev=value,Util=Cleave.Util;return pps.numeral||!pps.backspace||Util.isDelimiter(value.slice(-1),pps.delimiter,pps.delimiters)||(value=Util.headStr(value,value.length-1)),pps.phone?(pps.result=pps.phoneFormatter.format(value),void owner.updateValueState()):pps.numeral?(pps.result=pps.prefix+pps.numeralFormatter.format(value),void owner.updateValueState()):(pps.date&&(value=pps.dateFormatter.getValidatedDate(value)),value=Util.stripDelimiters(value,pps.delimiter,pps.delimiters),value=Util.getPrefixStrippedValue(value,pps.prefixLength),value=pps.numericOnly?Util.strip(value,/[^\d]/g):value,value=pps.uppercase?value.toUpperCase():value,value=pps.lowercase?value.toLowerCase():value,pps.prefix&&(value=pps.prefix+value,0===pps.blocksLength)?(pps.result=value,void owner.updateValueState()):(pps.creditCard&&owner.updateCreditCardPropsByValue(value),value=Util.headStr(value,pps.maxLength),pps.result=Util.getFormattedValue(value,pps.blocks,pps.blocksLength,pps.delimiter,pps.delimiters),void(prev===pps.result&&prev!==pps.prefix||owner.updateValueState())))},updateCreditCardPropsByValue:function(value){var creditCardInfo,owner=this,pps=owner.properties,Util=Cleave.Util;Util.headStr(pps.result,4)!==Util.headStr(value,4)&&(creditCardInfo=Cleave.CreditCardDetector.getInfo(value,pps.creditCardStrictMode),pps.blocks=creditCardInfo.blocks,pps.blocksLength=pps.blocks.length,pps.maxLength=Util.getMaxLength(pps.blocks),pps.creditCardType!==creditCardInfo.type&&(pps.creditCardType=creditCardInfo.type,pps.onCreditCardTypeChanged.call(owner,pps.creditCardType)))},updateValueState:function(){var owner=this;owner.element.value=owner.properties.result},setPhoneRegionCode:function(phoneRegionCode){var owner=this,pps=owner.properties;pps.phoneRegionCode=phoneRegionCode,owner.initPhoneFormatter(),owner.onChange()},setRawValue:function(value){var owner=this,pps=owner.properties;value=value.toString(),pps.numeral&&(value=value.replace(".",pps.numeralDecimalMark)),owner.element.value=value,owner.onInput(value)},getRawValue:function(){var owner=this,pps=owner.properties,inputValue=owner.element.value;return pps.numeral?pps.numeralFormatter.getRawValue(inputValue):Cleave.Util.stripDelimiters(inputValue,pps.delimiter,pps.delimiters)},getFormattedValue:function(){return this.element.value},destroy:function(){var owner=this;owner.element.removeEventListener("input",owner.onChangeListener),owner.element.removeEventListener("keydown",owner.onKeyDownListener)},toString:function(){return"[Cleave Object]"}},"object"==typeof module&&"object"==typeof module.exports&&(Cleave.NumeralFormatter=require("./shortcuts/NumeralFormatter"),Cleave.DateFormatter=require("./shortcuts/DateFormatter"),Cleave.PhoneFormatter=require("./shortcuts/PhoneFormatter"),Cleave.CreditCardDetector=require("./shortcuts/CreditCardDetector"),Cleave.Util=require("./utils/Util"),Cleave.DefaultProperties=require("./common/DefaultProperties"),module.exports=exports=Cleave);var Util={noop:function(){},strip:function(value,re){return value.replace(re,"")},isDelimiter:function(letter,delimiter,delimiters){return 0===delimiters.length?letter===delimiter:delimiters.some(function(current){return letter===current?!0:void 0})},stripDelimiters:function(value,delimiter,delimiters){if(0===delimiters.length){var delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"";return value.replace(delimiterRE,"")}return delimiters.forEach(function(current){value=value.replace(new RegExp("\\"+current,"g"),"")}),value},headStr:function(str,length){return str.slice(0,length)},getMaxLength:function(blocks){return blocks.reduce(function(previous,current){return previous+current},0)},getPrefixStrippedValue:function(value,prefixLength){return value.slice(prefixLength)},getFormattedValue:function(value,blocks,blocksLength,delimiter,delimiters){var currentDelimiter,result="",multipleDelimiters=delimiters.length>0;return blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),rest=value.slice(length);result+=sub,currentDelimiter=multipleDelimiters?delimiters[index]||currentDelimiter:delimiter,sub.length===length&&blocksLength-1>index&&(result+=currentDelimiter),value=rest}}),result}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=Util);var DefaultProperties={assign:function(target,opts){return target=target||{},opts=opts||{},target.creditCard=!!opts.creditCard,target.creditCardStrictMode=!!opts.creditCardStrictMode,target.creditCardType="",target.onCreditCardTypeChanged=opts.onCreditCardTypeChanged||function(){},target.phone=!!opts.phone,target.phoneRegionCode=opts.phoneRegionCode||"AU",target.phoneFormatter={},target.date=!!opts.date,target.datePattern=opts.datePattern||["d","m","Y"],target.dateFormatter={},target.numeral=!!opts.numeral,target.numeralDecimalScale=opts.numeralDecimalScale>=0?opts.numeralDecimalScale:2,target.numeralDecimalMark=opts.numeralDecimalMark||".",target.numeralThousandsGroupStyle=opts.numeralThousandsGroupStyle||"thousand",target.numericOnly=target.creditCard||target.date||!!opts.numericOnly,target.uppercase=!!opts.uppercase,target.lowercase=!!opts.lowercase,target.prefix=target.creditCard||target.phone||target.date?"":opts.prefix||"",target.prefixLength=target.prefix.length,target.initValue=opts.initValue||"",target.delimiter=opts.delimiter||""===opts.delimiter?opts.delimiter:opts.date?"/":opts.numeral?",":(opts.phone," "),target.delimiters=opts.delimiters||[],target.blocks=opts.blocks||[],target.blocksLength=target.blocks.length,target.maxLength=0,target.backspace=!1,target.result="",target}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=DefaultProperties);var CreditCardDetector={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(value,strictMode){var blocks=CreditCardDetector.blocks,re=CreditCardDetector.re;return strictMode=!!strictMode,re.amex.test(value)?{type:"amex",blocks:blocks.amex}:re.uatp.test(value)?{type:"uatp",blocks:blocks.uatp}:re.diners.test(value)?{type:"diners",blocks:blocks.diners}:re.discover.test(value)?{type:"discover",blocks:blocks.discover}:re.mastercard.test(value)?{type:"mastercard",blocks:blocks.mastercard}:re.dankort.test(value)?{type:"dankort",blocks:blocks.dankort}:re.instapayment.test(value)?{type:"instapayment",blocks:blocks.instapayment}:re.jcb.test(value)?{type:"jcb",blocks:blocks.jcb}:re.maestro.test(value)?{type:"maestro",blocks:blocks.maestro}:re.visa.test(value)?{type:"visa",blocks:blocks.visa}:strictMode?{type:"unknown",blocks:blocks.generalStrict}:{type:"unknown",blocks:blocks.generalLoose}}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=CreditCardDetector);var DateFormatter=function(datePattern){var owner=this;owner.blocks=[],owner.datePattern=datePattern,owner.initBlocks()};DateFormatter.prototype={initBlocks:function(){var owner=this;owner.datePattern.forEach(function(value){"Y"===value?owner.blocks.push(4):owner.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(value){var owner=this,result="";return value=value.replace(/[^\d]/g,""),owner.blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),sub0=sub.slice(0,1),rest=value.slice(length);switch(owner.datePattern[index]){case"d":"00"===sub?sub="01":parseInt(sub0,10)>3?sub="0"+sub0:parseInt(sub,10)>31&&(sub="31");break;case"m":"00"===sub?sub="01":parseInt(sub0,10)>1?sub="0"+sub0:parseInt(sub,10)>12&&(sub="12")}result+=sub,value=rest}}),result}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=DateFormatter);var NumeralFormatter=function(numeralDecimalMark,numeralDecimalScale,numeralThousandsGroupStyle,delimiter){var owner=this;owner.numeralDecimalMark=numeralDecimalMark||".",owner.numeralDecimalScale=numeralDecimalScale>=0?numeralDecimalScale:2,owner.numeralThousandsGroupStyle=numeralThousandsGroupStyle||NumeralFormatter.groupStyle.thousand,owner.delimiter=delimiter||""===delimiter?delimiter:",",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):""};NumeralFormatter.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},NumeralFormatter.prototype={getRawValue:function(value){return value.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(value){var parts,partInteger,owner=this,partDecimal="";switch(value=value.replace(/[A-Za-z]/g,"").replace(owner.numeralDecimalMark,"M").replace(/^\-/,"N").replace(/[^\dMN]/g,"").replace("N","-").replace("M",owner.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),partInteger=value,value.indexOf(owner.numeralDecimalMark)>=0&&(parts=value.split(owner.numeralDecimalMark),partInteger=parts[0],partDecimal=owner.numeralDecimalMark+parts[1].slice(0,owner.numeralDecimalScale)),owner.numeralThousandsGroupStyle){case NumeralFormatter.groupStyle.lakh:partInteger=partInteger.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+owner.delimiter);break;case NumeralFormatter.groupStyle.wan:partInteger=partInteger.replace(/(\d)(?=(\d{4})+$)/g,"$1"+owner.delimiter);break;default:partInteger=partInteger.replace(/(\d)(?=(\d{3})+$)/g,"$1"+owner.delimiter)}return partInteger.toString()+(owner.numeralDecimalScale>0?partDecimal.toString():"")}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=NumeralFormatter);var PhoneFormatter=function(formatter,delimiter){var owner=this;owner.delimiter=delimiter||""===delimiter?delimiter:" ",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"",owner.formatter=formatter};PhoneFormatter.prototype={setFormatter:function(formatter){this.formatter=formatter},format:function(phoneNumber){var owner=this;owner.formatter.clear(),phoneNumber=phoneNumber.replace(/[^\d+]/g,""),phoneNumber=phoneNumber.replace(owner.delimiterRE,"");for(var current,result="",validated=!1,i=0,iMax=phoneNumber.length;iMax>i;i++)current=owner.formatter.inputDigit(phoneNumber.charAt(i)),/[\s()-]/g.test(current)?(result=current,validated=!0):validated||(result=current);return result=result.replace(/[()]/g,""),result=result.replace(/[\s-]/g,owner.delimiter)}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=PhoneFormatter),Cleave.NumeralFormatter=NumeralFormatter,Cleave.DateFormatter=DateFormatter,Cleave.PhoneFormatter=PhoneFormatter,Cleave.CreditCardDetector=CreditCardDetector,Cleave.Util=Util,Cleave.DefaultProperties=DefaultProperties,"object"==typeof module&&"object"==typeof module.exports?module.exports=exports=Cleave:"function"==typeof define&&define.amd?define(function(){return Cleave}):"object"==typeof window&&(window.Cleave=Cleave)}(window,document),angular.module("cleave.js",[]).directive("cleave",function(){return{restrict:"A",scope:{options:"="},controller:function($scope,$element){new Cleave($element[0],$scope.options)}}}); \ No newline at end of file +!function(window,document,undefined){"use strict";var Cleave=function(element,opts){var owner=this;"string"==typeof element?owner.element=document.querySelector(element):owner.element="undefined"!=typeof element.length&&element.length>0?element[0]:element,opts.initValue=owner.element.value,owner.properties=Cleave.DefaultProperties.assign({},opts),owner.init()};Cleave.prototype={init:function(){var owner=this,pps=owner.properties;(pps.numeral||pps.phone||pps.creditCard||pps.date||0!==pps.blocksLength||pps.prefix)&&(pps.maxLength=Cleave.Util.getMaxLength(pps.blocks),owner.onChangeListener=owner.onChange.bind(owner),owner.onKeyDownListener=owner.onKeyDown.bind(owner),owner.element.addEventListener("input",owner.onChangeListener),owner.element.addEventListener("keydown",owner.onKeyDownListener),owner.initPhoneFormatter(),owner.initDateFormatter(),owner.initNumeralFormatter(),owner.onInput(pps.initValue))},initNumeralFormatter:function(){var owner=this,pps=owner.properties;pps.numeral&&(pps.numeralFormatter=new Cleave.NumeralFormatter(pps.numeralDecimalMark,pps.numeralDecimalScale,pps.numeralThousandsGroupStyle,pps.delimiter))},initDateFormatter:function(){var owner=this,pps=owner.properties;pps.date&&(pps.dateFormatter=new Cleave.DateFormatter(pps.datePattern),pps.blocks=pps.dateFormatter.getBlocks(),pps.blocksLength=pps.blocks.length,pps.maxLength=Cleave.Util.getMaxLength(pps.blocks))},initPhoneFormatter:function(){var owner=this,pps=owner.properties;if(pps.phone)try{pps.phoneFormatter=new Cleave.PhoneFormatter(new window.Cleave.AsYouTypeFormatter(pps.phoneRegionCode),pps.delimiter)}catch(ex){throw new Error("Please include phone-type-formatter.{country}.js lib")}},onKeyDown:function(event){var owner=this,pps=owner.properties,charCode=event.which||event.keyCode;return 8===charCode&&Cleave.Util.isDelimiter(owner.element.value.slice(-1),pps.delimiter,pps.delimiters)?void(pps.backspace=!0):void(pps.backspace=!1)},onChange:function(){this.onInput(this.element.value)},onInput:function(value){var owner=this,pps=owner.properties,prev=value,Util=Cleave.Util;return pps.numeral||!pps.backspace||Util.isDelimiter(value.slice(-1),pps.delimiter,pps.delimiters)||(value=Util.headStr(value,value.length-1)),pps.phone?(pps.result=pps.phoneFormatter.format(value),void owner.updateValueState()):pps.numeral?(pps.result=pps.prefix+pps.numeralFormatter.format(value),void owner.updateValueState()):(pps.date&&(value=pps.dateFormatter.getValidatedDate(value)),value=Util.stripDelimiters(value,pps.delimiter,pps.delimiters),value=Util.getPrefixStrippedValue(value,pps.prefixLength),value=pps.numericOnly?Util.strip(value,/[^\d]/g):value,value=pps.uppercase?value.toUpperCase():value,value=pps.lowercase?value.toLowerCase():value,pps.prefix&&(value=pps.prefix+value,0===pps.blocksLength)?(pps.result=value,void owner.updateValueState()):(pps.creditCard&&owner.updateCreditCardPropsByValue(value),value=Util.headStr(value,pps.maxLength),pps.result=Util.getFormattedValue(value,pps.blocks,pps.blocksLength,pps.delimiter,pps.delimiters),void(prev===pps.result&&prev!==pps.prefix||owner.updateValueState())))},updateCreditCardPropsByValue:function(value){var creditCardInfo,owner=this,pps=owner.properties,Util=Cleave.Util;Util.headStr(pps.result,4)!==Util.headStr(value,4)&&(creditCardInfo=Cleave.CreditCardDetector.getInfo(value,pps.creditCardStrictMode),pps.blocks=creditCardInfo.blocks,pps.blocksLength=pps.blocks.length,pps.maxLength=Util.getMaxLength(pps.blocks),pps.creditCardType!==creditCardInfo.type&&(pps.creditCardType=creditCardInfo.type,pps.onCreditCardTypeChanged.call(owner,pps.creditCardType)))},updateValueState:function(){var owner=this;owner.element.value=owner.properties.result},setPhoneRegionCode:function(phoneRegionCode){var owner=this,pps=owner.properties;pps.phoneRegionCode=phoneRegionCode,owner.initPhoneFormatter(),owner.onChange()},setRawValue:function(value){var owner=this,pps=owner.properties;value=value.toString(),pps.numeral&&(value=value.replace(".",pps.numeralDecimalMark)),owner.element.value=value,owner.onInput(value)},getRawValue:function(){var owner=this,pps=owner.properties,inputValue=owner.element.value;return pps.numeral?pps.numeralFormatter.getRawValue(inputValue):Cleave.Util.stripDelimiters(inputValue,pps.delimiter,pps.delimiters)},getFormattedValue:function(){return this.element.value},destroy:function(){var owner=this;owner.element.removeEventListener("input",owner.onChangeListener),owner.element.removeEventListener("keydown",owner.onKeyDownListener)},toString:function(){return"[Cleave Object]"}},"object"==typeof module&&"object"==typeof module.exports&&(Cleave.NumeralFormatter=require("./shortcuts/NumeralFormatter"),Cleave.DateFormatter=require("./shortcuts/DateFormatter"),Cleave.PhoneFormatter=require("./shortcuts/PhoneFormatter"),Cleave.CreditCardDetector=require("./shortcuts/CreditCardDetector"),Cleave.Util=require("./utils/Util"),Cleave.DefaultProperties=require("./common/DefaultProperties"),module.exports=exports=Cleave);var Util={noop:function(){},strip:function(value,re){return value.replace(re,"")},isDelimiter:function(letter,delimiter,delimiters){return 0===delimiters.length?letter===delimiter:delimiters.some(function(current){return letter===current?!0:void 0})},stripDelimiters:function(value,delimiter,delimiters){if(0===delimiters.length){var delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"";return value.replace(delimiterRE,"")}return delimiters.forEach(function(current){value=value.replace(new RegExp("\\"+current,"g"),"")}),value},headStr:function(str,length){return str.slice(0,length)},getMaxLength:function(blocks){return blocks.reduce(function(previous,current){return previous+current},0)},getPrefixStrippedValue:function(value,prefixLength){return value.slice(prefixLength)},getFormattedValue:function(value,blocks,blocksLength,delimiter,delimiters){var currentDelimiter,result="",multipleDelimiters=delimiters.length>0;return blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),rest=value.slice(length);result+=sub,currentDelimiter=multipleDelimiters?delimiters[index]||currentDelimiter:delimiter,sub.length===length&&blocksLength-1>index&&(result+=currentDelimiter),value=rest}}),result}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=Util);var DefaultProperties={assign:function(target,opts){return target=target||{},opts=opts||{},target.creditCard=!!opts.creditCard,target.creditCardStrictMode=!!opts.creditCardStrictMode,target.creditCardType="",target.onCreditCardTypeChanged=opts.onCreditCardTypeChanged||function(){},target.phone=!!opts.phone,target.phoneRegionCode=opts.phoneRegionCode||"AU",target.phoneFormatter={},target.date=!!opts.date,target.datePattern=opts.datePattern||["d","m","Y"],target.dateFormatter={},target.numeral=!!opts.numeral,target.numeralDecimalScale=opts.numeralDecimalScale>=0?opts.numeralDecimalScale:2,target.numeralDecimalMark=opts.numeralDecimalMark||".",target.numeralThousandsGroupStyle=opts.numeralThousandsGroupStyle||"thousand",target.numericOnly=target.creditCard||target.date||!!opts.numericOnly,target.uppercase=!!opts.uppercase,target.lowercase=!!opts.lowercase,target.prefix=target.creditCard||target.phone||target.date?"":opts.prefix||"",target.prefixLength=target.prefix.length,target.initValue=opts.initValue||"",target.delimiter=opts.delimiter||""===opts.delimiter?opts.delimiter:opts.date?"/":opts.numeral?",":(opts.phone," "),target.delimiters=opts.delimiters||[],target.blocks=opts.blocks||[],target.blocksLength=target.blocks.length,target.maxLength=0,target.backspace=!1,target.result="",target}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=DefaultProperties);var CreditCardDetector={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(value,strictMode){var blocks=CreditCardDetector.blocks,re=CreditCardDetector.re;return strictMode=!!strictMode,re.amex.test(value)?{type:"amex",blocks:blocks.amex}:re.uatp.test(value)?{type:"uatp",blocks:blocks.uatp}:re.diners.test(value)?{type:"diners",blocks:blocks.diners}:re.discover.test(value)?{type:"discover",blocks:blocks.discover}:re.mastercard.test(value)?{type:"mastercard",blocks:blocks.mastercard}:re.dankort.test(value)?{type:"dankort",blocks:blocks.dankort}:re.instapayment.test(value)?{type:"instapayment",blocks:blocks.instapayment}:re.jcb.test(value)?{type:"jcb",blocks:blocks.jcb}:re.maestro.test(value)?{type:"maestro",blocks:blocks.maestro}:re.visa.test(value)?{type:"visa",blocks:blocks.visa}:strictMode?{type:"unknown",blocks:blocks.generalStrict}:{type:"unknown",blocks:blocks.generalLoose}}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=CreditCardDetector);var DateFormatter=function(datePattern){var owner=this;owner.blocks=[],owner.datePattern=datePattern,owner.initBlocks()};DateFormatter.prototype={initBlocks:function(){var owner=this;owner.datePattern.forEach(function(value){"Y"===value?owner.blocks.push(4):owner.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(value){var owner=this,result="";return value=value.replace(/[^\d]/g,""),owner.blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),sub0=sub.slice(0,1),rest=value.slice(length);switch(owner.datePattern[index]){case"d":"00"===sub?sub="01":parseInt(sub0,10)>3?sub="0"+sub0:parseInt(sub,10)>31&&(sub="31");break;case"m":"00"===sub?sub="01":parseInt(sub0,10)>1?sub="0"+sub0:parseInt(sub,10)>12&&(sub="12")}result+=sub,value=rest}}),result}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=DateFormatter);var NumeralFormatter=function(numeralDecimalMark,numeralDecimalScale,numeralThousandsGroupStyle,delimiter){var owner=this;owner.numeralDecimalMark=numeralDecimalMark||".",owner.numeralDecimalScale=numeralDecimalScale>=0?numeralDecimalScale:2,owner.numeralThousandsGroupStyle=numeralThousandsGroupStyle||NumeralFormatter.groupStyle.thousand,owner.delimiter=delimiter||""===delimiter?delimiter:",",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):""};NumeralFormatter.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},NumeralFormatter.prototype={getRawValue:function(value){return value.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(value){var parts,partInteger,owner=this,partDecimal="";switch(value=value.replace(/[A-Za-z]/g,"").replace(owner.numeralDecimalMark,"M").replace(/^\-/,"N").replace(/[^\dMN]/g,"").replace("N","-").replace("M",owner.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),partInteger=value,value.indexOf(owner.numeralDecimalMark)>=0&&(parts=value.split(owner.numeralDecimalMark),partInteger=parts[0],partDecimal=owner.numeralDecimalMark+parts[1].slice(0,owner.numeralDecimalScale)),owner.numeralThousandsGroupStyle){case NumeralFormatter.groupStyle.lakh:partInteger=partInteger.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+owner.delimiter);break;case NumeralFormatter.groupStyle.wan:partInteger=partInteger.replace(/(\d)(?=(\d{4})+$)/g,"$1"+owner.delimiter);break;default:partInteger=partInteger.replace(/(\d)(?=(\d{3})+$)/g,"$1"+owner.delimiter)}return partInteger.toString()+(owner.numeralDecimalScale>0?partDecimal.toString():"")}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=NumeralFormatter);var PhoneFormatter=function(formatter,delimiter){var owner=this;owner.delimiter=delimiter||""===delimiter?delimiter:" ",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"",owner.formatter=formatter};PhoneFormatter.prototype={setFormatter:function(formatter){this.formatter=formatter},format:function(phoneNumber){var owner=this;owner.formatter.clear(),phoneNumber=phoneNumber.replace(/[^\d+]/g,""),phoneNumber=phoneNumber.replace(owner.delimiterRE,"");for(var current,result="",validated=!1,i=0,iMax=phoneNumber.length;iMax>i;i++)current=owner.formatter.inputDigit(phoneNumber.charAt(i)),/[\s()-]/g.test(current)?(result=current,validated=!0):validated||(result=current);return result=result.replace(/[()]/g,""),result=result.replace(/[\s-]/g,owner.delimiter)}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=PhoneFormatter),Cleave.NumeralFormatter=NumeralFormatter,Cleave.DateFormatter=DateFormatter,Cleave.PhoneFormatter=PhoneFormatter,Cleave.CreditCardDetector=CreditCardDetector,Cleave.Util=Util,Cleave.DefaultProperties=DefaultProperties,"object"==typeof module&&"object"==typeof module.exports?module.exports=exports=Cleave:"function"==typeof define&&define.amd?define(function(){return Cleave}):"object"==typeof window&&(window.Cleave=Cleave)}(window,document),angular.module("cleave.js",[]).directive("cleave",function(){return{restrict:"A",require:"ngModel",scope:{options:"=",onValueChange:"&?"},controller:function($scope,$element){$scope.cleave=new Cleave($element[0],$scope.options),$scope.onValueChange=$scope.onValueChange||null},link:function($scope,$element,attrs,ngModel){$scope.onValueChange&&$scope.$watch(function(){return ngModel.$modelValue},function(){$scope.onValueChange()($scope.cleave.getFormattedValue(),$scope.cleave.getRawValue())})}}}); \ No newline at end of file diff --git a/dist/cleave-react.min.js b/dist/cleave-react.min.js index d170736f..f041e173 100644 --- a/dist/cleave-react.min.js +++ b/dist/cleave-react.min.js @@ -1,8 +1,8 @@ /*! - * cleave.js - 0.6.7 + * cleave.js - 0.6.9 * https://github.com/nosir/cleave.js * Apache License Version 2.0 * * Copyright (C) 2012-2016 Max Huang https://github.com/nosir/ */ -!function(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory(require("react")):"function"==typeof define&&define.amd?define(["react"],factory):"object"==typeof exports?exports.Cleave=factory(require("react")):root.Cleave=factory(root.React)}(this,function(__WEBPACK_EXTERNAL_MODULE_1__){return function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:!1};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}var installedModules={};return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.p="",__webpack_require__(0)}([function(module,exports,__webpack_require__){"use strict";function _objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}var _extends=Object.assign||function(target){for(var i=1;i=0?numeralDecimalScale:2,owner.numeralThousandsGroupStyle=numeralThousandsGroupStyle||NumeralFormatter.groupStyle.thousand,owner.delimiter=delimiter||""===delimiter?delimiter:",",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):""};NumeralFormatter.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},NumeralFormatter.prototype={getRawValue:function(value){return value.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(value){var parts,partInteger,owner=this,partDecimal="";switch(value=value.replace(/[A-Za-z]/g,"").replace(owner.numeralDecimalMark,"M").replace(/^\-/,"N").replace(/[^\dMN]/g,"").replace("N","-").replace("M",owner.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),partInteger=value,value.indexOf(owner.numeralDecimalMark)>=0&&(parts=value.split(owner.numeralDecimalMark),partInteger=parts[0],partDecimal=owner.numeralDecimalMark+parts[1].slice(0,owner.numeralDecimalScale)),owner.numeralThousandsGroupStyle){case NumeralFormatter.groupStyle.lakh:partInteger=partInteger.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+owner.delimiter);break;case NumeralFormatter.groupStyle.wan:partInteger=partInteger.replace(/(\d)(?=(\d{4})+$)/g,"$1"+owner.delimiter);break;default:partInteger=partInteger.replace(/(\d)(?=(\d{3})+$)/g,"$1"+owner.delimiter)}return partInteger.toString()+(owner.numeralDecimalScale>0?partDecimal.toString():"")}},"object"===_typeof(module)&&"object"===_typeof(module.exports)&&(module.exports=exports=NumeralFormatter)}).call(exports,__webpack_require__(3)(module))},function(module,exports){module.exports=function(module){return module.webpackPolyfill||(module.deprecate=function(){},module.paths=[],module.children=[],module.webpackPolyfill=1),module}},function(module,exports,__webpack_require__){(function(module){"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol?"symbol":typeof obj},DateFormatter=function(datePattern){var owner=this;owner.blocks=[],owner.datePattern=datePattern,owner.initBlocks()};DateFormatter.prototype={initBlocks:function(){var owner=this;owner.datePattern.forEach(function(value){"Y"===value?owner.blocks.push(4):owner.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(value){var owner=this,result="";return value=value.replace(/[^\d]/g,""),owner.blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),sub0=sub.slice(0,1),rest=value.slice(length);switch(owner.datePattern[index]){case"d":"00"===sub?sub="01":parseInt(sub0,10)>3?sub="0"+sub0:parseInt(sub,10)>31&&(sub="31");break;case"m":"00"===sub?sub="01":parseInt(sub0,10)>1?sub="0"+sub0:parseInt(sub,10)>12&&(sub="12")}result+=sub,value=rest}}),result}},"object"===_typeof(module)&&"object"===_typeof(module.exports)&&(module.exports=exports=DateFormatter)}).call(exports,__webpack_require__(3)(module))},function(module,exports,__webpack_require__){(function(module){"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol?"symbol":typeof obj},PhoneFormatter=function(formatter,delimiter){var owner=this;owner.delimiter=delimiter||""===delimiter?delimiter:" ",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"",owner.formatter=formatter};PhoneFormatter.prototype={setFormatter:function(formatter){this.formatter=formatter},format:function(phoneNumber){var owner=this;owner.formatter.clear(),phoneNumber=phoneNumber.replace(/[^\d+]/g,""),phoneNumber=phoneNumber.replace(owner.delimiterRE,"");for(var current,result="",validated=!1,i=0,iMax=phoneNumber.length;iMax>i;i++)current=owner.formatter.inputDigit(phoneNumber.charAt(i)),/[\s()-]/g.test(current)?(result=current,validated=!0):validated||(result=current);return result=result.replace(/[()]/g,""),result=result.replace(/[\s-]/g,owner.delimiter)}},"object"===_typeof(module)&&"object"===_typeof(module.exports)&&(module.exports=exports=PhoneFormatter)}).call(exports,__webpack_require__(3)(module))},function(module,exports,__webpack_require__){(function(module){"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol?"symbol":typeof obj},CreditCardDetector={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(value,strictMode){var blocks=CreditCardDetector.blocks,re=CreditCardDetector.re;return strictMode=!!strictMode,re.amex.test(value)?{type:"amex",blocks:blocks.amex}:re.uatp.test(value)?{type:"uatp",blocks:blocks.uatp}:re.diners.test(value)?{type:"diners",blocks:blocks.diners}:re.discover.test(value)?{type:"discover",blocks:blocks.discover}:re.mastercard.test(value)?{type:"mastercard",blocks:blocks.mastercard}:re.dankort.test(value)?{type:"dankort",blocks:blocks.dankort}:re.instapayment.test(value)?{type:"instapayment",blocks:blocks.instapayment}:re.jcb.test(value)?{type:"jcb",blocks:blocks.jcb}:re.maestro.test(value)?{type:"maestro",blocks:blocks.maestro}:re.visa.test(value)?{type:"visa",blocks:blocks.visa}:strictMode?{type:"unknown",blocks:blocks.generalStrict}:{type:"unknown",blocks:blocks.generalLoose}}};"object"===_typeof(module)&&"object"===_typeof(module.exports)&&(module.exports=exports=CreditCardDetector)}).call(exports,__webpack_require__(3)(module))},function(module,exports,__webpack_require__){(function(module){"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol?"symbol":typeof obj},Util={noop:function(){},strip:function(value,re){return value.replace(re,"")},isDelimiter:function(letter,delimiter,delimiters){return 0===delimiters.length?letter===delimiter:delimiters.some(function(current){return letter===current?!0:void 0})},stripDelimiters:function(value,delimiter,delimiters){if(0===delimiters.length){var delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"";return value.replace(delimiterRE,"")}return delimiters.forEach(function(current){value=value.replace(new RegExp("\\"+current,"g"),"")}),value},headStr:function(str,length){return str.slice(0,length)},getMaxLength:function(blocks){return blocks.reduce(function(previous,current){return previous+current},0)},getPrefixStrippedValue:function(value,prefixLength){return value.slice(prefixLength)},getFormattedValue:function(value,blocks,blocksLength,delimiter,delimiters){var currentDelimiter,result="",multipleDelimiters=delimiters.length>0;return blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),rest=value.slice(length);result+=sub,currentDelimiter=multipleDelimiters?delimiters[index]||currentDelimiter:delimiter,sub.length===length&&blocksLength-1>index&&(result+=currentDelimiter),value=rest}}),result}};"object"===_typeof(module)&&"object"===_typeof(module.exports)&&(module.exports=exports=Util)}).call(exports,__webpack_require__(3)(module))},function(module,exports,__webpack_require__){(function(module){"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol?"symbol":typeof obj},DefaultProperties={assign:function(target,opts){return target=target||{},opts=opts||{},target.creditCard=!!opts.creditCard,target.creditCardStrictMode=!!opts.creditCardStrictMode,target.creditCardType="",target.onCreditCardTypeChanged=opts.onCreditCardTypeChanged||function(){},target.phone=!!opts.phone,target.phoneRegionCode=opts.phoneRegionCode||"AU",target.phoneFormatter={},target.date=!!opts.date,target.datePattern=opts.datePattern||["d","m","Y"],target.dateFormatter={},target.numeral=!!opts.numeral,target.numeralDecimalScale=opts.numeralDecimalScale>=0?opts.numeralDecimalScale:2,target.numeralDecimalMark=opts.numeralDecimalMark||".",target.numeralThousandsGroupStyle=opts.numeralThousandsGroupStyle||"thousand",target.numericOnly=target.creditCard||target.date||!!opts.numericOnly,target.uppercase=!!opts.uppercase,target.lowercase=!!opts.lowercase,target.prefix=target.creditCard||target.phone||target.date?"":opts.prefix||"",target.prefixLength=target.prefix.length,target.initValue=opts.initValue||"",target.delimiter=opts.delimiter||""===opts.delimiter?opts.delimiter:opts.date?"/":opts.numeral?",":(opts.phone," "),target.delimiters=opts.delimiters||[],target.blocks=opts.blocks||[],target.blocksLength=target.blocks.length,target.maxLength=0,target.backspace=!1,target.result="",target}};"object"===_typeof(module)&&"object"===_typeof(module.exports)&&(module.exports=exports=DefaultProperties)}).call(exports,__webpack_require__(3)(module))}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.Cleave=t(require("react")):e.Cleave=t(e.React)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e,t){var r={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}var o=Object.assign||function(e){for(var t=1;t=0?t:2,a.numeralThousandsGroupStyle=r||o.groupStyle.thousand,a.delimiter=n||""===n?n:",",a.delimiterRE=n?new RegExp("\\"+n,"g"):""};n.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},n.prototype={getRawValue:function(e){return e.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(e){var t,r,o=this,a="";switch(e=e.replace(/[A-Za-z]/g,"").replace(o.numeralDecimalMark,"M").replace(/^\-/,"N").replace(/[^\dMN]/g,"").replace("N","-").replace("M",o.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),r=e,e.indexOf(o.numeralDecimalMark)>=0&&(t=e.split(o.numeralDecimalMark),r=t[0],a=o.numeralDecimalMark+t[1].slice(0,o.numeralDecimalScale)),o.numeralThousandsGroupStyle){case n.groupStyle.lakh:r=r.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+o.delimiter);break;case n.groupStyle.wan:r=r.replace(/(\d)(?=(\d{4})+$)/g,"$1"+o.delimiter);break;default:r=r.replace(/(\d)(?=(\d{3})+$)/g,"$1"+o.delimiter)}return r.toString()+(o.numeralDecimalScale>0?a.toString():"")}},"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=n)}).call(t,r(3)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n=function(e){var t=this;t.blocks=[],t.datePattern=e,t.initBlocks()};n.prototype={initBlocks:function(){var e=this;e.datePattern.forEach(function(t){"Y"===t?e.blocks.push(4):e.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(e){var t=this,r="";return e=e.replace(/[^\d]/g,""),t.blocks.forEach(function(n,o){if(e.length>0){var a=e.slice(0,n),i=a.slice(0,1),l=e.slice(n);switch(t.datePattern[o]){case"d":"00"===a?a="01":parseInt(i,10)>3?a="0"+i:parseInt(a,10)>31&&(a="31");break;case"m":"00"===a?a="01":parseInt(i,10)>1?a="0"+i:parseInt(a,10)>12&&(a="12")}r+=a,e=l}}),r}},"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=n)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n=function(e,t){var r=this;r.delimiter=t||""===t?t:" ",r.delimiterRE=t?new RegExp("\\"+t,"g"):"",r.formatter=e};n.prototype={setFormatter:function(e){this.formatter=e},format:function(e){var t=this;t.formatter.clear(),e=e.replace(/[^\d+]/g,""),e=e.replace(t.delimiterRE,"");for(var r,n="",o=!1,a=0,i=e.length;i>a;a++)r=t.formatter.inputDigit(e.charAt(a)),/[\s()-]/g.test(r)?(n=r,o=!0):o||(n=r);return n=n.replace(/[()]/g,""),n=n.replace(/[\s-]/g,t.delimiter)}},"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=n)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(e,t){var r=n.blocks,o=n.re;return t=!!t,o.amex.test(e)?{type:"amex",blocks:r.amex}:o.uatp.test(e)?{type:"uatp",blocks:r.uatp}:o.diners.test(e)?{type:"diners",blocks:r.diners}:o.discover.test(e)?{type:"discover",blocks:r.discover}:o.mastercard.test(e)?{type:"mastercard",blocks:r.mastercard}:o.dankort.test(e)?{type:"dankort",blocks:r.dankort}:o.instapayment.test(e)?{type:"instapayment",blocks:r.instapayment}:o.jcb.test(e)?{type:"jcb",blocks:r.jcb}:o.maestro.test(e)?{type:"maestro",blocks:r.maestro}:o.visa.test(e)?{type:"visa",blocks:r.visa}:t?{type:"unknown",blocks:r.generalStrict}:{type:"unknown",blocks:r.generalLoose}}};"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=n)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n={noop:function(){},strip:function(e,t){return e.replace(t,"")},isDelimiter:function(e,t,r){return 0===r.length?e===t:r.some(function(t){return e===t?!0:void 0})},stripDelimiters:function(e,t,r){if(0===r.length){var n=t?new RegExp("\\"+t,"g"):"";return e.replace(n,"")}return r.forEach(function(t){e=e.replace(new RegExp("\\"+t,"g"),"")}),e},headStr:function(e,t){return e.slice(0,t)},getMaxLength:function(e){return e.reduce(function(e,t){return e+t},0)},getPrefixStrippedValue:function(e,t){return e.slice(t)},getFormattedValue:function(e,t,r,n,o){var a,i="",l=o.length>0;return t.forEach(function(t,c){if(e.length>0){var s=e.slice(0,t),u=e.slice(t);i+=s,a=l?o[c]||a:n,s.length===t&&r-1>c&&(i+=a),e=u}}),i}};"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=n)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n={assign:function(e,t){return e=e||{},t=t||{},e.creditCard=!!t.creditCard,e.creditCardStrictMode=!!t.creditCardStrictMode,e.creditCardType="",e.onCreditCardTypeChanged=t.onCreditCardTypeChanged||function(){},e.phone=!!t.phone,e.phoneRegionCode=t.phoneRegionCode||"AU",e.phoneFormatter={},e.date=!!t.date,e.datePattern=t.datePattern||["d","m","Y"],e.dateFormatter={},e.numeral=!!t.numeral,e.numeralDecimalScale=t.numeralDecimalScale>=0?t.numeralDecimalScale:2,e.numeralDecimalMark=t.numeralDecimalMark||".",e.numeralThousandsGroupStyle=t.numeralThousandsGroupStyle||"thousand",e.numericOnly=e.creditCard||e.date||!!t.numericOnly,e.uppercase=!!t.uppercase,e.lowercase=!!t.lowercase,e.prefix=e.creditCard||e.phone||e.date?"":t.prefix||"",e.prefixLength=e.prefix.length,e.initValue=t.initValue||"",e.delimiter=t.delimiter||""===t.delimiter?t.delimiter:t.date?"/":t.numeral?",":(t.phone," "),e.delimiters=t.delimiters||[],e.blocks=t.blocks||[],e.blocksLength=e.blocks.length,e.maxLength=0,e.backspace=!1,e.result="",e}};"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=n)}).call(t,r(3)(e))}])}); \ No newline at end of file diff --git a/dist/cleave.min.js b/dist/cleave.min.js index c58edf29..63a475d2 100644 --- a/dist/cleave.min.js +++ b/dist/cleave.min.js @@ -1,8 +1,8 @@ /*! - * cleave.js - 0.6.7 + * cleave.js - 0.6.9 * https://github.com/nosir/cleave.js * Apache License Version 2.0 * * Copyright (C) 2012-2016 Max Huang https://github.com/nosir/ */ -!function(window,document,undefined){"use strict";var Cleave=function(element,opts){var owner=this;"string"==typeof element?owner.element=document.querySelector(element):owner.element="undefined"!=typeof element.length&&element.length>0?element[0]:element,opts.initValue=owner.element.value,owner.properties=Cleave.DefaultProperties.assign({},opts),owner.init()};Cleave.prototype={init:function(){var owner=this,pps=owner.properties;(pps.numeral||pps.phone||pps.creditCard||pps.date||0!==pps.blocksLength||pps.prefix)&&(pps.maxLength=Cleave.Util.getMaxLength(pps.blocks),owner.onChangeListener=owner.onChange.bind(owner),owner.onKeyDownListener=owner.onKeyDown.bind(owner),owner.element.addEventListener("input",owner.onChangeListener),owner.element.addEventListener("keydown",owner.onKeyDownListener),owner.initPhoneFormatter(),owner.initDateFormatter(),owner.initNumeralFormatter(),owner.onInput(pps.initValue))},initNumeralFormatter:function(){var owner=this,pps=owner.properties;pps.numeral&&(pps.numeralFormatter=new Cleave.NumeralFormatter(pps.numeralDecimalMark,pps.numeralDecimalScale,pps.numeralThousandsGroupStyle,pps.delimiter))},initDateFormatter:function(){var owner=this,pps=owner.properties;pps.date&&(pps.dateFormatter=new Cleave.DateFormatter(pps.datePattern),pps.blocks=pps.dateFormatter.getBlocks(),pps.blocksLength=pps.blocks.length,pps.maxLength=Cleave.Util.getMaxLength(pps.blocks))},initPhoneFormatter:function(){var owner=this,pps=owner.properties;if(pps.phone)try{pps.phoneFormatter=new Cleave.PhoneFormatter(new window.Cleave.AsYouTypeFormatter(pps.phoneRegionCode),pps.delimiter)}catch(ex){throw new Error("Please include phone-type-formatter.{country}.js lib")}},onKeyDown:function(event){var owner=this,pps=owner.properties,charCode=event.which||event.keyCode;return 8===charCode&&Cleave.Util.isDelimiter(owner.element.value.slice(-1),pps.delimiter,pps.delimiters)?void(pps.backspace=!0):void(pps.backspace=!1)},onChange:function(){this.onInput(this.element.value)},onInput:function(value){var owner=this,pps=owner.properties,prev=value,Util=Cleave.Util;return pps.numeral||!pps.backspace||Util.isDelimiter(value.slice(-1),pps.delimiter,pps.delimiters)||(value=Util.headStr(value,value.length-1)),pps.phone?(pps.result=pps.phoneFormatter.format(value),void owner.updateValueState()):pps.numeral?(pps.result=pps.prefix+pps.numeralFormatter.format(value),void owner.updateValueState()):(pps.date&&(value=pps.dateFormatter.getValidatedDate(value)),value=Util.stripDelimiters(value,pps.delimiter,pps.delimiters),value=Util.getPrefixStrippedValue(value,pps.prefixLength),value=pps.numericOnly?Util.strip(value,/[^\d]/g):value,value=pps.uppercase?value.toUpperCase():value,value=pps.lowercase?value.toLowerCase():value,pps.prefix&&(value=pps.prefix+value,0===pps.blocksLength)?(pps.result=value,void owner.updateValueState()):(pps.creditCard&&owner.updateCreditCardPropsByValue(value),value=Util.headStr(value,pps.maxLength),pps.result=Util.getFormattedValue(value,pps.blocks,pps.blocksLength,pps.delimiter,pps.delimiters),void(prev===pps.result&&prev!==pps.prefix||owner.updateValueState())))},updateCreditCardPropsByValue:function(value){var creditCardInfo,owner=this,pps=owner.properties,Util=Cleave.Util;Util.headStr(pps.result,4)!==Util.headStr(value,4)&&(creditCardInfo=Cleave.CreditCardDetector.getInfo(value,pps.creditCardStrictMode),pps.blocks=creditCardInfo.blocks,pps.blocksLength=pps.blocks.length,pps.maxLength=Util.getMaxLength(pps.blocks),pps.creditCardType!==creditCardInfo.type&&(pps.creditCardType=creditCardInfo.type,pps.onCreditCardTypeChanged.call(owner,pps.creditCardType)))},updateValueState:function(){var owner=this;owner.element.value=owner.properties.result},setPhoneRegionCode:function(phoneRegionCode){var owner=this,pps=owner.properties;pps.phoneRegionCode=phoneRegionCode,owner.initPhoneFormatter(),owner.onChange()},setRawValue:function(value){var owner=this,pps=owner.properties;value=value.toString(),pps.numeral&&(value=value.replace(".",pps.numeralDecimalMark)),owner.element.value=value,owner.onInput(value)},getRawValue:function(){var owner=this,pps=owner.properties,inputValue=owner.element.value;return pps.numeral?pps.numeralFormatter.getRawValue(inputValue):Cleave.Util.stripDelimiters(inputValue,pps.delimiter,pps.delimiters)},getFormattedValue:function(){return this.element.value},destroy:function(){var owner=this;owner.element.removeEventListener("input",owner.onChangeListener),owner.element.removeEventListener("keydown",owner.onKeyDownListener)},toString:function(){return"[Cleave Object]"}},"object"==typeof module&&"object"==typeof module.exports&&(Cleave.NumeralFormatter=require("./shortcuts/NumeralFormatter"),Cleave.DateFormatter=require("./shortcuts/DateFormatter"),Cleave.PhoneFormatter=require("./shortcuts/PhoneFormatter"),Cleave.CreditCardDetector=require("./shortcuts/CreditCardDetector"),Cleave.Util=require("./utils/Util"),Cleave.DefaultProperties=require("./common/DefaultProperties"),module.exports=exports=Cleave);var Util={noop:function(){},strip:function(value,re){return value.replace(re,"")},isDelimiter:function(letter,delimiter,delimiters){return 0===delimiters.length?letter===delimiter:delimiters.some(function(current){return letter===current?!0:void 0})},stripDelimiters:function(value,delimiter,delimiters){if(0===delimiters.length){var delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"";return value.replace(delimiterRE,"")}return delimiters.forEach(function(current){value=value.replace(new RegExp("\\"+current,"g"),"")}),value},headStr:function(str,length){return str.slice(0,length)},getMaxLength:function(blocks){return blocks.reduce(function(previous,current){return previous+current},0)},getPrefixStrippedValue:function(value,prefixLength){return value.slice(prefixLength)},getFormattedValue:function(value,blocks,blocksLength,delimiter,delimiters){var currentDelimiter,result="",multipleDelimiters=delimiters.length>0;return blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),rest=value.slice(length);result+=sub,currentDelimiter=multipleDelimiters?delimiters[index]||currentDelimiter:delimiter,sub.length===length&&blocksLength-1>index&&(result+=currentDelimiter),value=rest}}),result}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=Util);var DefaultProperties={assign:function(target,opts){return target=target||{},opts=opts||{},target.creditCard=!!opts.creditCard,target.creditCardStrictMode=!!opts.creditCardStrictMode,target.creditCardType="",target.onCreditCardTypeChanged=opts.onCreditCardTypeChanged||function(){},target.phone=!!opts.phone,target.phoneRegionCode=opts.phoneRegionCode||"AU",target.phoneFormatter={},target.date=!!opts.date,target.datePattern=opts.datePattern||["d","m","Y"],target.dateFormatter={},target.numeral=!!opts.numeral,target.numeralDecimalScale=opts.numeralDecimalScale>=0?opts.numeralDecimalScale:2,target.numeralDecimalMark=opts.numeralDecimalMark||".",target.numeralThousandsGroupStyle=opts.numeralThousandsGroupStyle||"thousand",target.numericOnly=target.creditCard||target.date||!!opts.numericOnly,target.uppercase=!!opts.uppercase,target.lowercase=!!opts.lowercase,target.prefix=target.creditCard||target.phone||target.date?"":opts.prefix||"",target.prefixLength=target.prefix.length,target.initValue=opts.initValue||"",target.delimiter=opts.delimiter||""===opts.delimiter?opts.delimiter:opts.date?"/":opts.numeral?",":(opts.phone," "),target.delimiters=opts.delimiters||[],target.blocks=opts.blocks||[],target.blocksLength=target.blocks.length,target.maxLength=0,target.backspace=!1,target.result="",target}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=DefaultProperties);var CreditCardDetector={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(value,strictMode){var blocks=CreditCardDetector.blocks,re=CreditCardDetector.re;return strictMode=!!strictMode,re.amex.test(value)?{type:"amex",blocks:blocks.amex}:re.uatp.test(value)?{type:"uatp",blocks:blocks.uatp}:re.diners.test(value)?{type:"diners",blocks:blocks.diners}:re.discover.test(value)?{type:"discover",blocks:blocks.discover}:re.mastercard.test(value)?{type:"mastercard",blocks:blocks.mastercard}:re.dankort.test(value)?{type:"dankort",blocks:blocks.dankort}:re.instapayment.test(value)?{type:"instapayment",blocks:blocks.instapayment}:re.jcb.test(value)?{type:"jcb",blocks:blocks.jcb}:re.maestro.test(value)?{type:"maestro",blocks:blocks.maestro}:re.visa.test(value)?{type:"visa",blocks:blocks.visa}:strictMode?{type:"unknown",blocks:blocks.generalStrict}:{type:"unknown",blocks:blocks.generalLoose}}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=CreditCardDetector);var DateFormatter=function(datePattern){var owner=this;owner.blocks=[],owner.datePattern=datePattern,owner.initBlocks()};DateFormatter.prototype={initBlocks:function(){var owner=this;owner.datePattern.forEach(function(value){"Y"===value?owner.blocks.push(4):owner.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(value){var owner=this,result="";return value=value.replace(/[^\d]/g,""),owner.blocks.forEach(function(length,index){if(value.length>0){var sub=value.slice(0,length),sub0=sub.slice(0,1),rest=value.slice(length);switch(owner.datePattern[index]){case"d":"00"===sub?sub="01":parseInt(sub0,10)>3?sub="0"+sub0:parseInt(sub,10)>31&&(sub="31");break;case"m":"00"===sub?sub="01":parseInt(sub0,10)>1?sub="0"+sub0:parseInt(sub,10)>12&&(sub="12")}result+=sub,value=rest}}),result}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=DateFormatter);var NumeralFormatter=function(numeralDecimalMark,numeralDecimalScale,numeralThousandsGroupStyle,delimiter){var owner=this;owner.numeralDecimalMark=numeralDecimalMark||".",owner.numeralDecimalScale=numeralDecimalScale>=0?numeralDecimalScale:2,owner.numeralThousandsGroupStyle=numeralThousandsGroupStyle||NumeralFormatter.groupStyle.thousand,owner.delimiter=delimiter||""===delimiter?delimiter:",",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):""};NumeralFormatter.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},NumeralFormatter.prototype={getRawValue:function(value){return value.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(value){var parts,partInteger,owner=this,partDecimal="";switch(value=value.replace(/[A-Za-z]/g,"").replace(owner.numeralDecimalMark,"M").replace(/^\-/,"N").replace(/[^\dMN]/g,"").replace("N","-").replace("M",owner.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),partInteger=value,value.indexOf(owner.numeralDecimalMark)>=0&&(parts=value.split(owner.numeralDecimalMark),partInteger=parts[0],partDecimal=owner.numeralDecimalMark+parts[1].slice(0,owner.numeralDecimalScale)),owner.numeralThousandsGroupStyle){case NumeralFormatter.groupStyle.lakh:partInteger=partInteger.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+owner.delimiter);break;case NumeralFormatter.groupStyle.wan:partInteger=partInteger.replace(/(\d)(?=(\d{4})+$)/g,"$1"+owner.delimiter);break;default:partInteger=partInteger.replace(/(\d)(?=(\d{3})+$)/g,"$1"+owner.delimiter)}return partInteger.toString()+(owner.numeralDecimalScale>0?partDecimal.toString():"")}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=NumeralFormatter);var PhoneFormatter=function(formatter,delimiter){var owner=this;owner.delimiter=delimiter||""===delimiter?delimiter:" ",owner.delimiterRE=delimiter?new RegExp("\\"+delimiter,"g"):"",owner.formatter=formatter};PhoneFormatter.prototype={setFormatter:function(formatter){this.formatter=formatter},format:function(phoneNumber){var owner=this;owner.formatter.clear(),phoneNumber=phoneNumber.replace(/[^\d+]/g,""),phoneNumber=phoneNumber.replace(owner.delimiterRE,"");for(var current,result="",validated=!1,i=0,iMax=phoneNumber.length;iMax>i;i++)current=owner.formatter.inputDigit(phoneNumber.charAt(i)),/[\s()-]/g.test(current)?(result=current,validated=!0):validated||(result=current);return result=result.replace(/[()]/g,""),result=result.replace(/[\s-]/g,owner.delimiter)}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=PhoneFormatter),Cleave.NumeralFormatter=NumeralFormatter,Cleave.DateFormatter=DateFormatter,Cleave.PhoneFormatter=PhoneFormatter,Cleave.CreditCardDetector=CreditCardDetector,Cleave.Util=Util,Cleave.DefaultProperties=DefaultProperties,"object"==typeof module&&"object"==typeof module.exports?module.exports=exports=Cleave:"function"==typeof define&&define.amd?define(function(){return Cleave}):"object"==typeof window&&(window.Cleave=Cleave)}(window,document); \ No newline at end of file +!function(e,t,r){"use strict";var a=function(e,r){var o=this;"string"==typeof e?o.element=t.querySelector(e):o.element="undefined"!=typeof e.length&&e.length>0?e[0]:e,r.initValue=o.element.value,o.properties=a.DefaultProperties.assign({},r),o.init()};a.prototype={init:function(){var e=this,t=e.properties;(t.numeral||t.phone||t.creditCard||t.date||0!==t.blocksLength||t.prefix)&&(t.maxLength=a.Util.getMaxLength(t.blocks),e.onChangeListener=e.onChange.bind(e),e.onKeyDownListener=e.onKeyDown.bind(e),e.element.addEventListener("input",e.onChangeListener),e.element.addEventListener("keydown",e.onKeyDownListener),e.initPhoneFormatter(),e.initDateFormatter(),e.initNumeralFormatter(),e.onInput(t.initValue))},initNumeralFormatter:function(){var e=this,t=e.properties;t.numeral&&(t.numeralFormatter=new a.NumeralFormatter(t.numeralDecimalMark,t.numeralDecimalScale,t.numeralThousandsGroupStyle,t.delimiter))},initDateFormatter:function(){var e=this,t=e.properties;t.date&&(t.dateFormatter=new a.DateFormatter(t.datePattern),t.blocks=t.dateFormatter.getBlocks(),t.blocksLength=t.blocks.length,t.maxLength=a.Util.getMaxLength(t.blocks))},initPhoneFormatter:function(){var t=this,r=t.properties;if(r.phone)try{r.phoneFormatter=new a.PhoneFormatter(new e.Cleave.AsYouTypeFormatter(r.phoneRegionCode),r.delimiter)}catch(o){throw new Error("Please include phone-type-formatter.{country}.js lib")}},onKeyDown:function(e){var t=this,r=t.properties,o=e.which||e.keyCode;return 8===o&&a.Util.isDelimiter(t.element.value.slice(-1),r.delimiter,r.delimiters)?void(r.backspace=!0):void(r.backspace=!1)},onChange:function(){this.onInput(this.element.value)},onInput:function(e){var t=this,r=t.properties,o=e,n=a.Util;return r.numeral||!r.backspace||n.isDelimiter(e.slice(-1),r.delimiter,r.delimiters)||(e=n.headStr(e,e.length-1)),r.phone?(r.result=r.phoneFormatter.format(e),void t.updateValueState()):r.numeral?(r.result=r.prefix+r.numeralFormatter.format(e),void t.updateValueState()):(r.date&&(e=r.dateFormatter.getValidatedDate(e)),e=n.stripDelimiters(e,r.delimiter,r.delimiters),e=n.getPrefixStrippedValue(e,r.prefixLength),e=r.numericOnly?n.strip(e,/[^\d]/g):e,e=r.uppercase?e.toUpperCase():e,e=r.lowercase?e.toLowerCase():e,r.prefix&&(e=r.prefix+e,0===r.blocksLength)?(r.result=e,void t.updateValueState()):(r.creditCard&&t.updateCreditCardPropsByValue(e),e=n.headStr(e,r.maxLength),r.result=n.getFormattedValue(e,r.blocks,r.blocksLength,r.delimiter,r.delimiters),void(o===r.result&&o!==r.prefix||t.updateValueState())))},updateCreditCardPropsByValue:function(e){var t,r=this,o=r.properties,n=a.Util;n.headStr(o.result,4)!==n.headStr(e,4)&&(t=a.CreditCardDetector.getInfo(e,o.creditCardStrictMode),o.blocks=t.blocks,o.blocksLength=o.blocks.length,o.maxLength=n.getMaxLength(o.blocks),o.creditCardType!==t.type&&(o.creditCardType=t.type,o.onCreditCardTypeChanged.call(r,o.creditCardType)))},updateValueState:function(){var e=this;e.element.value=e.properties.result},setPhoneRegionCode:function(e){var t=this,r=t.properties;r.phoneRegionCode=e,t.initPhoneFormatter(),t.onChange()},setRawValue:function(e){var t=this,r=t.properties;e=e.toString(),r.numeral&&(e=e.replace(".",r.numeralDecimalMark)),t.element.value=e,t.onInput(e)},getRawValue:function(){var e=this,t=e.properties,r=e.element.value;return t.numeral?t.numeralFormatter.getRawValue(r):a.Util.stripDelimiters(r,t.delimiter,t.delimiters)},getFormattedValue:function(){return this.element.value},destroy:function(){var e=this;e.element.removeEventListener("input",e.onChangeListener),e.element.removeEventListener("keydown",e.onKeyDownListener)},toString:function(){return"[Cleave Object]"}},"object"==typeof module&&"object"==typeof module.exports&&(a.NumeralFormatter=require("./shortcuts/NumeralFormatter"),a.DateFormatter=require("./shortcuts/DateFormatter"),a.PhoneFormatter=require("./shortcuts/PhoneFormatter"),a.CreditCardDetector=require("./shortcuts/CreditCardDetector"),a.Util=require("./utils/Util"),a.DefaultProperties=require("./common/DefaultProperties"),module.exports=exports=a);var o={noop:function(){},strip:function(e,t){return e.replace(t,"")},isDelimiter:function(e,t,r){return 0===r.length?e===t:r.some(function(t){return e===t?!0:void 0})},stripDelimiters:function(e,t,r){if(0===r.length){var a=t?new RegExp("\\"+t,"g"):"";return e.replace(a,"")}return r.forEach(function(t){e=e.replace(new RegExp("\\"+t,"g"),"")}),e},headStr:function(e,t){return e.slice(0,t)},getMaxLength:function(e){return e.reduce(function(e,t){return e+t},0)},getPrefixStrippedValue:function(e,t){return e.slice(t)},getFormattedValue:function(e,t,r,a,o){var n,i="",l=o.length>0;return t.forEach(function(t,s){if(e.length>0){var c=e.slice(0,t),u=e.slice(t);i+=c,n=l?o[s]||n:a,c.length===t&&r-1>s&&(i+=n),e=u}}),i}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=o);var n={assign:function(e,t){return e=e||{},t=t||{},e.creditCard=!!t.creditCard,e.creditCardStrictMode=!!t.creditCardStrictMode,e.creditCardType="",e.onCreditCardTypeChanged=t.onCreditCardTypeChanged||function(){},e.phone=!!t.phone,e.phoneRegionCode=t.phoneRegionCode||"AU",e.phoneFormatter={},e.date=!!t.date,e.datePattern=t.datePattern||["d","m","Y"],e.dateFormatter={},e.numeral=!!t.numeral,e.numeralDecimalScale=t.numeralDecimalScale>=0?t.numeralDecimalScale:2,e.numeralDecimalMark=t.numeralDecimalMark||".",e.numeralThousandsGroupStyle=t.numeralThousandsGroupStyle||"thousand",e.numericOnly=e.creditCard||e.date||!!t.numericOnly,e.uppercase=!!t.uppercase,e.lowercase=!!t.lowercase,e.prefix=e.creditCard||e.phone||e.date?"":t.prefix||"",e.prefixLength=e.prefix.length,e.initValue=t.initValue||"",e.delimiter=t.delimiter||""===t.delimiter?t.delimiter:t.date?"/":t.numeral?",":(t.phone," "),e.delimiters=t.delimiters||[],e.blocks=t.blocks||[],e.blocksLength=e.blocks.length,e.maxLength=0,e.backspace=!1,e.result="",e}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=n);var i={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(e,t){var r=i.blocks,a=i.re;return t=!!t,a.amex.test(e)?{type:"amex",blocks:r.amex}:a.uatp.test(e)?{type:"uatp",blocks:r.uatp}:a.diners.test(e)?{type:"diners",blocks:r.diners}:a.discover.test(e)?{type:"discover",blocks:r.discover}:a.mastercard.test(e)?{type:"mastercard",blocks:r.mastercard}:a.dankort.test(e)?{type:"dankort",blocks:r.dankort}:a.instapayment.test(e)?{type:"instapayment",blocks:r.instapayment}:a.jcb.test(e)?{type:"jcb",blocks:r.jcb}:a.maestro.test(e)?{type:"maestro",blocks:r.maestro}:a.visa.test(e)?{type:"visa",blocks:r.visa}:t?{type:"unknown",blocks:r.generalStrict}:{type:"unknown",blocks:r.generalLoose}}};"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=i);var l=function(e){var t=this;t.blocks=[],t.datePattern=e,t.initBlocks()};l.prototype={initBlocks:function(){var e=this;e.datePattern.forEach(function(t){"Y"===t?e.blocks.push(4):e.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(e){var t=this,r="";return e=e.replace(/[^\d]/g,""),t.blocks.forEach(function(a,o){if(e.length>0){var n=e.slice(0,a),i=n.slice(0,1),l=e.slice(a);switch(t.datePattern[o]){case"d":"00"===n?n="01":parseInt(i,10)>3?n="0"+i:parseInt(n,10)>31&&(n="31");break;case"m":"00"===n?n="01":parseInt(i,10)>1?n="0"+i:parseInt(n,10)>12&&(n="12")}r+=n,e=l}}),r}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=l);var s=function(e,t,r,a){var o=this;o.numeralDecimalMark=e||".",o.numeralDecimalScale=t>=0?t:2,o.numeralThousandsGroupStyle=r||s.groupStyle.thousand,o.delimiter=a||""===a?a:",",o.delimiterRE=a?new RegExp("\\"+a,"g"):""};s.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},s.prototype={getRawValue:function(e){return e.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(e){var t,r,a=this,o="";switch(e=e.replace(/[A-Za-z]/g,"").replace(a.numeralDecimalMark,"M").replace(/^\-/,"N").replace(/[^\dMN]/g,"").replace("N","-").replace("M",a.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),r=e,e.indexOf(a.numeralDecimalMark)>=0&&(t=e.split(a.numeralDecimalMark),r=t[0],o=a.numeralDecimalMark+t[1].slice(0,a.numeralDecimalScale)),a.numeralThousandsGroupStyle){case s.groupStyle.lakh:r=r.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+a.delimiter);break;case s.groupStyle.wan:r=r.replace(/(\d)(?=(\d{4})+$)/g,"$1"+a.delimiter);break;default:r=r.replace(/(\d)(?=(\d{3})+$)/g,"$1"+a.delimiter)}return r.toString()+(a.numeralDecimalScale>0?o.toString():"")}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=s);var c=function(e,t){var r=this;r.delimiter=t||""===t?t:" ",r.delimiterRE=t?new RegExp("\\"+t,"g"):"",r.formatter=e};c.prototype={setFormatter:function(e){this.formatter=e},format:function(e){var t=this;t.formatter.clear(),e=e.replace(/[^\d+]/g,""),e=e.replace(t.delimiterRE,"");for(var r,a="",o=!1,n=0,i=e.length;i>n;n++)r=t.formatter.inputDigit(e.charAt(n)),/[\s()-]/g.test(r)?(a=r,o=!0):o||(a=r);return a=a.replace(/[()]/g,""),a=a.replace(/[\s-]/g,t.delimiter)}},"object"==typeof module&&"object"==typeof module.exports&&(module.exports=exports=c),a.NumeralFormatter=s,a.DateFormatter=l,a.PhoneFormatter=c,a.CreditCardDetector=i,a.Util=o,a.DefaultProperties=n,"object"==typeof module&&"object"==typeof module.exports?module.exports=exports=a:"function"==typeof define&&define.amd?define(function(){return a}):"object"==typeof e&&(e.Cleave=a)}(window,document); \ No newline at end of file diff --git a/doc/angularjs-directive-usage.md b/doc/angularjs-directive-usage.md new file mode 100644 index 00000000..c452cb80 --- /dev/null +++ b/doc/angularjs-directive-usage.md @@ -0,0 +1,100 @@ +# Cleave.js Documentation + +[Documentation](https://github.com/nosir/cleave.js/blob/master/doc/doc.md) > AngularJS directive usage + +## Playground + +- [Angular JSFiddle](https://jsfiddle.net/nosir/q58sh22t/) + +## Basic usage + +First include the directive module: + +```html + + +``` + +And in your model: + +```js +angular.module('app', ['cleave.js']) + +.controller('AppController', function($scope) { + $scope.onCreditCardTypeChanged = function(type) { + $scope.model.creditCardType = type; + }; + + $scope.model = { + value: '' + }; + + $scope.options = { + creditCard: { + creditCard: true, + onCreditCardTypeChanged: $scope.onCreditCardTypeChanged + } + }; +}); +``` + +Then you can just use `cleave` directive with `input` field: + +```html +
+ +
+``` + +## Advanced usage + +Sometimes you might want to get the raw value. Here is the way to deal with it: + +First in you model: + +```js +angular.module('app', ['cleave.js']) + +.controller('AppController', function($scope) { + $scope.onCleaveValueChange = function(formattedValue, rawValue) { + $scope.model.formattedValue = formattedValue; + $scope.model.rawValue = rawValue; + }; + + $scope.onCreditCardTypeChanged = function(type) { + $scope.model.creditCardType = type; + }; + + $scope.model = { + value: '' + }; + + $scope.options = { + creditCard: { + creditCard: true, + onCreditCardTypeChanged: $scope.onCreditCardTypeChanged + } + }; +}); +``` + +Then in your html: + +```html +
+ + +

raw value: {{model.rawValue}}

+

formatted value: {{model.formattedValue}}

+ +

ng-model value: {{model.value}}

+ +

type: {{model.creditCardType}}

+
+``` + +As you can see, by passing the function (without `()`) to `on-value-change`, you register a callback from `cleave.js` directive. + +Then in the callback, it returns `formattedValue` and `rawValue`. `formattedValue` here is same as your `ng-model` value. diff --git a/gulp-tasks/build.js b/gulp-tasks/build.js index 04f29f77..7c3eac1b 100644 --- a/gulp-tasks/build.js +++ b/gulp-tasks/build.js @@ -22,10 +22,22 @@ var paths = { dist: './dist' }; -gulp.task('min', function () { +gulp.task('min-mangle', function () { return gulp.src([ path.join(paths.dist, 'cleave.js'), - path.join(paths.dist, 'cleave-react.js'), + path.join(paths.dist, 'cleave-react.js') + ]) + .pipe(uglify({mangle: true})) + .pipe(header(getLicense(), { + version: packageInfo.version, + build: (new Date()).toUTCString() + })) + .pipe(rename({suffix: '.min'})) + .pipe(gulp.dest(path.join(paths.dist))); +}); + +gulp.task('min-no-mangle', function () { + return gulp.src([ path.join(paths.dist, 'cleave-angular.js') ]) .pipe(uglify({mangle: false})) @@ -60,4 +72,14 @@ gulp.task('js:angular', function () { .pipe(gulp.dest(paths.dist)); }); -gulp.task('build', gulpsync.sync(['js', 'js:react', 'js:angular', 'min'])); +gulp.task('build', gulpsync.sync([ + // sync + 'js', + 'js:react', + 'js:angular', + [ + // async + 'min-mangle', + 'min-no-mangle' + ] +])); diff --git a/package.json b/package.json index c0b323d5..f83b5223 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "form", "input" ], - "version": "0.6.7", + "version": "0.6.9", "author": { "name": "Max Huang", "url": "http://github.com/nosir", diff --git a/src/Cleave.angular.js b/src/Cleave.angular.js index 5736c527..c2ba735d 100644 --- a/src/Cleave.angular.js +++ b/src/Cleave.angular.js @@ -2,13 +2,26 @@ angular.module('cleave.js', []) .directive('cleave', function () { return { restrict: 'A', + require: 'ngModel', scope: { - options: '=' + options: '=', + onValueChange: '&?' }, controller: function ($scope, $element) { - new Cleave($element[0], $scope.options); + $scope.cleave = new Cleave($element[0], $scope.options); + $scope.onValueChange = $scope.onValueChange || null; + }, + + link: function ($scope, $element, attrs, ngModel) { + if ($scope.onValueChange) { + $scope.$watch(function () { + return ngModel.$modelValue; + }, function () { + $scope.onValueChange()($scope.cleave.getFormattedValue(), $scope.cleave.getRawValue()); + }); + } } }; });