From a1558f8a85a3c1112dc02adcea5b650b0f320e6e Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Tue, 18 Apr 2017 11:54:56 -0500
Subject: [PATCH 01/62] bump node versions for travis
---
.travis.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 8f0fe07..dfa1e9b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
language: node_js
sudo: false
node_js:
- - "0.10"
- - "0.12"
+ - "7"
+ - "6"
From 2812d111334b18d5c5cf16f1db313fba23e9933b Mon Sep 17 00:00:00 2001
From: Angel Garcia
Date: Tue, 2 May 2017 10:09:40 -0700
Subject: [PATCH 02/62] added elo card support
---
dist/jquery.payform.js | 7 +++++++
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 7 +++++++
dist/payform.min.js | 2 +-
src/payform.coffee | 8 ++++++++
test/validateCardNumber_spec.coffee | 2 +-
6 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 7dbe967..8390b02 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -92,6 +92,13 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
defaultFormat = /(\d{1,4})/g;
payform.cards = [
{
+ type: 'elo',
+ pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,
+ format: defaultFormat,
+ length: [16],
+ cvcLength: [3],
+ luhn: true
+ }, {
type: 'visaelectron',
pattern: /^4(026|17500|405|508|844|91[37])/,
format: defaultFormat,
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index 369f47b..c1cfe61 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,c){return"undefined"!=typeof b&&null!==b?b.exports=c():"function"==typeof define&&"object"==typeof define.amd?define(a,c):this[a]=c()}("payform",function(){var a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return b=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},a=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},c=function(b,c,d){return d=a(d),null!=b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var c;return c=b(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},k=function(a){var c,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,c=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,c&&(i=c.length[c.length.length-1]),g>=i||(d=b(a.target),d&&d!==j.length))?void 0:(h=c&&"amex"===c.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var c;return c=b(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var c;return c=b(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return c(a,"keypress",x),c(a,"keypress",u),c(a,"paste",q),c(a,"change",q),c(a,"input",q)},p.expiryInput=function(a){return c(a,"keypress",x),c(a,"keypress",w),c(a,"keypress",j),c(a,"keypress",m),c(a,"keypress",l),c(a,"keydown",i),c(a,"change",s),c(a,"input",s)},p.cardNumberInput=function(a){return c(a,"keypress",x),c(a,"keypress",v),c(a,"keypress",k),c(a,"keydown",h),c(a,"paste",r),c(a,"change",r),c(a,"input",r)},p.numericInput=function(a){return c(a,"keypress",x),c(a,"paste",x),c(a,"change",x),c(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(a){var b,c;return a=(a+"").replace(/\s+|-/g,""),/^\d+$/.test(a)?(b=e(a),b?(c=a.length,d.call(b.length,c)>=0&&(b.luhn===!1||o(a))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(a,b){var c,e;return a=String(a).trim(),/^\d+$/.test(a)?(c=f(b),null!=c?(e=a.length,d.call(c.cvcLength,e)>=0):a.length>=3&&a.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})},{}]},{},[1]);
\ No newline at end of file
+!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,c){return"undefined"!=typeof b&&null!==b?b.exports=c():"function"==typeof define&&"object"==typeof define.amd?define(a,c):this[a]=c()}("payform",function(){var a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return b=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},a=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},c=function(b,c,d){return d=a(d),null!=b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"elo",pattern:/^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var c;return c=b(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},k=function(a){var c,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,c=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,c&&(i=c.length[c.length.length-1]),g>=i||(d=b(a.target),d&&d!==j.length))?void 0:(h=c&&"amex"===c.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var c;return c=b(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var c;return c=b(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return c(a,"keypress",x),c(a,"keypress",u),c(a,"paste",q),c(a,"change",q),c(a,"input",q)},p.expiryInput=function(a){return c(a,"keypress",x),c(a,"keypress",w),c(a,"keypress",j),c(a,"keypress",m),c(a,"keypress",l),c(a,"keydown",i),c(a,"change",s),c(a,"input",s)},p.cardNumberInput=function(a){return c(a,"keypress",x),c(a,"keypress",v),c(a,"keypress",k),c(a,"keydown",h),c(a,"paste",r),c(a,"change",r),c(a,"input",r)},p.numericInput=function(a){return c(a,"keypress",x),c(a,"paste",x),c(a,"change",x),c(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(a){var b,c;return a=(a+"").replace(/\s+|-/g,""),/^\d+$/.test(a)?(b=e(a),b?(c=a.length,d.call(b.length,c)>=0&&(b.luhn===!1||o(a))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(a,b){var c,e;return a=String(a).trim(),/^\d+$/.test(a)?(c=f(b),null!=c?(e=a.length,d.call(c.cvcLength,e)>=0):a.length>=3&&a.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index ebd994e..fa510f1 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -62,6 +62,13 @@
defaultFormat = /(\d{1,4})/g;
payform.cards = [
{
+ type: 'elo',
+ pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,
+ format: defaultFormat,
+ length: [16],
+ cvcLength: [3],
+ luhn: true
+ }, {
type: 'visaelectron',
pattern: /^4(026|17500|405|508|844|91[37])/,
format: defaultFormat,
diff --git a/dist/payform.min.js b/dist/payform.min.js
index d957444..7c9feb4 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,b){return"undefined"!=typeof module&&null!==module?module.exports=b():"function"==typeof define&&"object"==typeof define.amd?define(a,b):this[a]=b()}("payform",function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return c=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},b=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},d=function(a,c,d){return d=b(d),null!=a.addEventListener?a.addEventListener(c,d,!1):a.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var b;return b=c(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},k=function(a){var b,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,b=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,b&&(i=b.length[b.length.length-1]),g>=i||(d=c(a.target),d&&d!==j.length))?void 0:(h=b&&"amex"===b.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var b;return b=c(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var b;return b=c(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return d(a,"keypress",x),d(a,"keypress",u),d(a,"paste",q),d(a,"change",q),d(a,"input",q)},p.expiryInput=function(a){return d(a,"keypress",x),d(a,"keypress",w),d(a,"keypress",j),d(a,"keypress",m),d(a,"keypress",l),d(a,"keydown",i),d(a,"change",s),d(a,"input",s)},p.cardNumberInput=function(a){return d(a,"keypress",x),d(a,"keypress",v),d(a,"keypress",k),d(a,"keydown",h),d(a,"paste",r),d(a,"change",r),d(a,"input",r)},p.numericInput=function(a){return d(a,"keypress",x),d(a,"paste",x),d(a,"change",x),d(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(b){var c,d;return b=(b+"").replace(/\s+|-/g,""),/^\d+$/.test(b)?(c=e(b),c?(d=b.length,a.call(c.length,d)>=0&&(c.luhn===!1||o(b))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(b,c){var d,e;return b=String(b).trim(),/^\d+$/.test(b)?(d=f(c),null!=d?(e=b.length,a.call(d.cvcLength,e)>=0):b.length>=3&&b.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})}).call(this);
\ No newline at end of file
+(function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,b){return"undefined"!=typeof module&&null!==module?module.exports=b():"function"==typeof define&&"object"==typeof define.amd?define(a,b):this[a]=b()}("payform",function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return c=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},b=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},d=function(a,c,d){return d=b(d),null!=a.addEventListener?a.addEventListener(c,d,!1):a.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"elo",pattern:/^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var b;return b=c(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},k=function(a){var b,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,b=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,b&&(i=b.length[b.length.length-1]),g>=i||(d=c(a.target),d&&d!==j.length))?void 0:(h=b&&"amex"===b.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var b;return b=c(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var b;return b=c(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return d(a,"keypress",x),d(a,"keypress",u),d(a,"paste",q),d(a,"change",q),d(a,"input",q)},p.expiryInput=function(a){return d(a,"keypress",x),d(a,"keypress",w),d(a,"keypress",j),d(a,"keypress",m),d(a,"keypress",l),d(a,"keydown",i),d(a,"change",s),d(a,"input",s)},p.cardNumberInput=function(a){return d(a,"keypress",x),d(a,"keypress",v),d(a,"keypress",k),d(a,"keydown",h),d(a,"paste",r),d(a,"change",r),d(a,"input",r)},p.numericInput=function(a){return d(a,"keypress",x),d(a,"paste",x),d(a,"change",x),d(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(b){var c,d;return b=(b+"").replace(/\s+|-/g,""),/^\d+$/.test(b)?(c=e(b),c?(d=b.length,a.call(c.length,d)>=0&&(c.luhn===!1||o(b))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(b,c){var d,e;return b=String(b).trim(),/^\d+$/.test(b)?(d=f(c),null!=d?(e=b.length,a.call(d.cvcLength,e)>=0):b.length>=3&&b.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})}).call(this);
\ No newline at end of file
diff --git a/src/payform.coffee b/src/payform.coffee
index 46dde0c..a565600 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -51,6 +51,14 @@
payform.cards = [
# Debit cards must come first, since they have more
# specific patterns than their credit-card equivalents.
+ {
+ type: 'elo'
+ pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/
+ format: defaultFormat
+ length: [16]
+ cvcLength: [3]
+ luhn: true
+ }
{
type: 'visaelectron'
pattern: /^4(026|17500|405|508|844|91[37])/
diff --git a/test/validateCardNumber_spec.coffee b/test/validateCardNumber_spec.coffee
index 535a11e..cb4a6cc 100644
--- a/test/validateCardNumber_spec.coffee
+++ b/test/validateCardNumber_spec.coffee
@@ -75,4 +75,4 @@ describe 'payform', ->
assert(payform.validateCardNumber('3530111333300000'), 'jcb')
assert(payform.validateCardNumber('3566002020360505'), 'jcb')
-
+ assert(payform.validateCardNumber('6362970000457013'), 'elo')
From 882e6068b029f00d866f02ef960e4e176ef9f07f Mon Sep 17 00:00:00 2001
From: joe4mg
Date: Thu, 30 Nov 2017 16:50:08 +0000
Subject: [PATCH 03/62] Fix issue #17 - IE11 page hangs on empty input
triggering
---
Makefile | 4 ++--
dist/jquery.payform.js | 9 +++++++++
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 9 +++++++++
dist/payform.min.js | 2 +-
package.json | 10 +++++-----
src/payform.coffee | 3 +++
7 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/Makefile b/Makefile
index d61b4d5..771a3d8 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ dist/payform.js: src/payform.coffee
$(BIN)coffee -c --no-header -o dist/ src/payform.coffee
dist/payform.min.js: dist/payform.js
- $(BIN)uglify -s dist/payform.js -o dist/payform.min.js
+ $(BIN)uglifyjs dist/payform.js -o dist/payform.min.js
dist/jquery.payform.js: src/jquery.payform.coffee
$(BIN)browserify \
@@ -17,7 +17,7 @@ dist/jquery.payform.js: src/jquery.payform.coffee
src/jquery.payform.coffee > dist/jquery.payform.js
dist/jquery.payform.min.js: dist/jquery.payform.js
- $(BIN)uglify -s dist/jquery.payform.js -o dist/jquery.payform.min.js
+ $(BIN)uglifyjs dist/jquery.payform.js -o dist/jquery.payform.min.js
watch: build
$(BIN)watch 'make build' src
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 8390b02..10e1211 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -246,6 +246,9 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
reFormatCardNumber = function(e) {
var cursor;
+ if (e.target.value === "") {
+ return;
+ }
cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardNumber(e.target.value);
if ((cursor != null) && e.type !== 'change') {
@@ -313,6 +316,9 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
reFormatExpiry = function(e) {
var cursor;
+ if (e.target.value === "") {
+ return;
+ }
cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardExpiry(e.target.value);
if ((cursor != null) && e.type !== 'change') {
@@ -379,6 +385,9 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
reFormatCVC = function(e) {
var cursor;
+ if (e.target.value === "") {
+ return;
+ }
cursor = _getCaretPos(e.target);
e.target.value = replaceFullWidthChars(e.target.value).replace(/\D/g, '').slice(0, 4);
if ((cursor != null) && e.type !== 'change') {
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index c1cfe61..122c2be 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,c){return"undefined"!=typeof b&&null!==b?b.exports=c():"function"==typeof define&&"object"==typeof define.amd?define(a,c):this[a]=c()}("payform",function(){var a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return b=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},a=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},c=function(b,c,d){return d=a(d),null!=b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"elo",pattern:/^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var c;return c=b(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},k=function(a){var c,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,c=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,c&&(i=c.length[c.length.length-1]),g>=i||(d=b(a.target),d&&d!==j.length))?void 0:(h=c&&"amex"===c.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var c;return c=b(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var c;return c=b(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return c(a,"keypress",x),c(a,"keypress",u),c(a,"paste",q),c(a,"change",q),c(a,"input",q)},p.expiryInput=function(a){return c(a,"keypress",x),c(a,"keypress",w),c(a,"keypress",j),c(a,"keypress",m),c(a,"keypress",l),c(a,"keydown",i),c(a,"change",s),c(a,"input",s)},p.cardNumberInput=function(a){return c(a,"keypress",x),c(a,"keypress",v),c(a,"keypress",k),c(a,"keydown",h),c(a,"paste",r),c(a,"change",r),c(a,"input",r)},p.numericInput=function(a){return c(a,"keypress",x),c(a,"paste",x),c(a,"change",x),c(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(a){var b,c;return a=(a+"").replace(/\s+|-/g,""),/^\d+$/.test(a)?(b=e(a),b?(c=a.length,d.call(b.length,c)>=0&&(b.luhn===!1||o(a))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(a,b){var c,e;return a=String(a).trim(),/^\d+$/.test(a)?(c=f(b),null!=c?(e=a.length,d.call(c.cvcLength,e)>=0):a.length>=3&&a.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})},{}]},{},[1]);
\ No newline at end of file
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index fa510f1..506a90c 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -216,6 +216,9 @@
};
reFormatCardNumber = function(e) {
var cursor;
+ if (e.target.value === "") {
+ return;
+ }
cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardNumber(e.target.value);
if ((cursor != null) && e.type !== 'change') {
@@ -283,6 +286,9 @@
};
reFormatExpiry = function(e) {
var cursor;
+ if (e.target.value === "") {
+ return;
+ }
cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardExpiry(e.target.value);
if ((cursor != null) && e.type !== 'change') {
@@ -349,6 +355,9 @@
};
reFormatCVC = function(e) {
var cursor;
+ if (e.target.value === "") {
+ return;
+ }
cursor = _getCaretPos(e.target);
e.target.value = replaceFullWidthChars(e.target.value).replace(/\D/g, '').slice(0, 4);
if ((cursor != null) && e.type !== 'change') {
diff --git a/dist/payform.min.js b/dist/payform.min.js
index 7c9feb4..bd9e591 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,b){return"undefined"!=typeof module&&null!==module?module.exports=b():"function"==typeof define&&"object"==typeof define.amd?define(a,b):this[a]=b()}("payform",function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return c=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},b=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},d=function(a,c,d){return d=b(d),null!=a.addEventListener?a.addEventListener(c,d,!1):a.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"elo",pattern:/^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var b;return b=c(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},k=function(a){var b,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,b=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,b&&(i=b.length[b.length.length-1]),g>=i||(d=c(a.target),d&&d!==j.length))?void 0:(h=b&&"amex"===b.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var b;return b=c(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var b;return b=c(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return d(a,"keypress",x),d(a,"keypress",u),d(a,"paste",q),d(a,"change",q),d(a,"input",q)},p.expiryInput=function(a){return d(a,"keypress",x),d(a,"keypress",w),d(a,"keypress",j),d(a,"keypress",m),d(a,"keypress",l),d(a,"keydown",i),d(a,"change",s),d(a,"input",s)},p.cardNumberInput=function(a){return d(a,"keypress",x),d(a,"keypress",v),d(a,"keypress",k),d(a,"keydown",h),d(a,"paste",r),d(a,"change",r),d(a,"input",r)},p.numericInput=function(a){return d(a,"keypress",x),d(a,"paste",x),d(a,"change",x),d(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(b){var c,d;return b=(b+"").replace(/\s+|-/g,""),/^\d+$/.test(b)?(c=e(b),c?(d=b.length,a.call(c.length,d)>=0&&(c.luhn===!1||o(b))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(b,c){var d,e;return b=String(b).trim(),/^\d+$/.test(b)?(d=f(c),null!=d?(e=b.length,a.call(d.cvcLength,e)>=0):b.length>=3&&b.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package.json b/package.json
index 0bf9936..e461188 100644
--- a/package.json
+++ b/package.json
@@ -27,12 +27,12 @@
"watch": "make watch"
},
"devDependencies": {
- "coffee-script": "~1.9.0",
- "watch": "~0.13.0",
- "uglify": "~0.1.1",
- "mocha": "~2.1.0",
"browserify": "~8.1.3",
+ "bundle-collapser": "~1.1.1",
+ "coffee-script": "~1.9.0",
"coffeeify": "~1.0.0",
- "bundle-collapser": "~1.1.1"
+ "mocha": "~2.1.0",
+ "uglify-js": "^3.2.2",
+ "watch": "~0.13.0"
}
}
diff --git a/src/payform.coffee b/src/payform.coffee
index a565600..b5e0cb9 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -198,6 +198,7 @@
# Format Card Number
reFormatCardNumber = (e) ->
+ return if e.target.value is ""
cursor = _getCaretPos(e.target)
e.target.value = payform.formatCardNumber(e.target.value)
if cursor? and e.type isnt 'change'
@@ -258,6 +259,7 @@
# Format Expiry
reFormatExpiry = (e) ->
+ return if e.target.value is ""
cursor = _getCaretPos(e.target)
e.target.value = payform.formatCardExpiry(e.target.value)
if cursor? and e.type isnt 'change'
@@ -310,6 +312,7 @@
# Format CVC
reFormatCVC = (e) ->
+ return if e.target.value is ""
cursor = _getCaretPos(e.target)
e.target.value = replaceFullWidthChars(e.target.value).replace(/\D/g, '')[0...4]
if cursor? and e.type isnt 'change'
From 00a2ad3026f51012c8c90d8a238367f3a74088a5 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 19 Jan 2018 13:14:07 -0600
Subject: [PATCH 04/62] add package lock file and upgrade to uglify-js
---
Makefile | 4 +-
package-lock.json | 1954 +++++++++++++++++++++++++++++++++++++++++++++
package.json | 2 +-
3 files changed, 1957 insertions(+), 3 deletions(-)
create mode 100644 package-lock.json
diff --git a/Makefile b/Makefile
index d61b4d5..771a3d8 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ dist/payform.js: src/payform.coffee
$(BIN)coffee -c --no-header -o dist/ src/payform.coffee
dist/payform.min.js: dist/payform.js
- $(BIN)uglify -s dist/payform.js -o dist/payform.min.js
+ $(BIN)uglifyjs dist/payform.js -o dist/payform.min.js
dist/jquery.payform.js: src/jquery.payform.coffee
$(BIN)browserify \
@@ -17,7 +17,7 @@ dist/jquery.payform.js: src/jquery.payform.coffee
src/jquery.payform.coffee > dist/jquery.payform.js
dist/jquery.payform.min.js: dist/jquery.payform.js
- $(BIN)uglify -s dist/jquery.payform.js -o dist/jquery.payform.min.js
+ $(BIN)uglifyjs dist/jquery.payform.js -o dist/jquery.payform.min.js
watch: build
$(BIN)watch 'make build' src
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..48fbbb1
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1954 @@
+{
+ "name": "payform",
+ "version": "1.2.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
+ "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz",
+ "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "astw": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
+ "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ }
+ },
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "Base64": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
+ "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
+ "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-3.2.0.tgz",
+ "integrity": "sha1-+qHLxBSHsazEdH43PhFIrf/Q4tk=",
+ "dev": true,
+ "requires": {
+ "combine-source-map": "0.3.0",
+ "concat-stream": "1.4.10",
+ "defined": "0.0.0",
+ "JSONStream": "0.8.4",
+ "through2": "0.5.1",
+ "umd": "2.1.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "through2": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "3.0.0"
+ }
+ }
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browser-unpack": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.2.0.tgz",
+ "integrity": "sha1-NXruMfxGeDFoTQY+Q1XgcKeClw0=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13",
+ "browser-pack": "5.0.1",
+ "concat-stream": "1.6.0",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "browser-pack": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
+ "integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
+ "dev": true,
+ "requires": {
+ "combine-source-map": "0.6.1",
+ "defined": "1.0.0",
+ "JSONStream": "1.3.2",
+ "through2": "1.1.1",
+ "umd": "3.0.1"
+ }
+ },
+ "combine-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
+ "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "inline-source-map": "0.5.0",
+ "lodash.memoize": "3.0.4",
+ "source-map": "0.4.4"
+ }
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
+ "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.4.4"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "umd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
+ "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-8.1.3.tgz",
+ "integrity": "sha1-8zpUmjpsNoIZsHX9z+bfGV4Empo=",
+ "dev": true,
+ "requires": {
+ "assert": "1.3.0",
+ "browser-pack": "3.2.0",
+ "browser-resolve": "1.11.2",
+ "browserify-zlib": "0.1.4",
+ "buffer": "3.6.0",
+ "builtins": "0.0.7",
+ "commondir": "0.0.1",
+ "concat-stream": "1.4.10",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "0.0.1",
+ "crypto-browserify": "3.12.0",
+ "deep-equal": "0.2.2",
+ "defined": "0.0.0",
+ "deps-sort": "1.3.9",
+ "domain-browser": "1.1.7",
+ "duplexer2": "0.0.2",
+ "events": "1.0.2",
+ "glob": "4.5.3",
+ "http-browserify": "1.7.0",
+ "https-browserify": "0.0.1",
+ "inherits": "2.0.3",
+ "insert-module-globals": "6.6.3",
+ "isarray": "0.0.1",
+ "JSONStream": "0.8.4",
+ "labeled-stream-splicer": "1.0.2",
+ "module-deps": "3.9.1",
+ "os-browserify": "0.1.2",
+ "parents": "1.0.1",
+ "path-browserify": "0.0.0",
+ "process": "0.10.1",
+ "punycode": "1.2.4",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "1.1.14",
+ "resolve": "0.7.4",
+ "shallow-copy": "0.0.1",
+ "shasum": "1.0.2",
+ "shell-quote": "0.0.1",
+ "stream-browserify": "1.0.0",
+ "string_decoder": "0.10.31",
+ "subarg": "1.0.0",
+ "syntax-error": "1.3.0",
+ "through2": "1.1.1",
+ "timers-browserify": "1.4.2",
+ "tty-browserify": "0.0.0",
+ "umd": "2.1.0",
+ "url": "0.10.3",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4",
+ "xtend": "3.0.0"
+ }
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.6"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "0.2.9"
+ }
+ },
+ "buffer": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",
+ "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",
+ "dev": true,
+ "requires": {
+ "base64-js": "0.0.8",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtins": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz",
+ "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=",
+ "dev": true
+ },
+ "bundle-collapser": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.1.4.tgz",
+ "integrity": "sha1-N0cPUrdOq5jiD7j9MZsE65pJWyM=",
+ "dev": true,
+ "requires": {
+ "browser-pack": "4.0.4",
+ "browser-unpack": "1.2.0",
+ "concat-stream": "1.4.10",
+ "falafel": "1.2.0",
+ "minimist": "0.2.0",
+ "through2": "1.1.1"
+ },
+ "dependencies": {
+ "browser-pack": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-4.0.4.tgz",
+ "integrity": "sha1-ja6VogykOz/qIB+qbPqoT/Sg1IQ=",
+ "dev": true,
+ "requires": {
+ "combine-source-map": "0.3.0",
+ "concat-stream": "1.4.10",
+ "defined": "1.0.0",
+ "JSONStream": "1.3.2",
+ "through2": "0.5.1",
+ "umd": "3.0.1"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "3.0.0"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
+ "minimist": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+ "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "umd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
+ "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=",
+ "dev": true
+ }
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "coffee-script": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.9.3.tgz",
+ "integrity": "sha1-WW5ug/z8tnxZZKtw1ES+/wrASsc=",
+ "dev": true
+ },
+ "coffeeify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/coffeeify/-/coffeeify-1.0.0.tgz",
+ "integrity": "sha1-7DjH9W1F+xgLnSjmXH5dEAmxFjU=",
+ "dev": true,
+ "requires": {
+ "coffee-script": "1.9.3",
+ "convert-source-map": "0.4.1",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.4.1.tgz",
+ "integrity": "sha1-+RmgCZ/jH4D8Wh0OswMWGzlAcMc=",
+ "dev": true
+ }
+ }
+ },
+ "combine-source-map": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.3.0.tgz",
+ "integrity": "sha1-2edPWT2c1DgHMSy12EbUUe+qnrc=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "0.3.5",
+ "inline-source-map": "0.3.1",
+ "source-map": "0.1.43"
+ }
+ },
+ "commander": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz",
+ "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=",
+ "dev": true
+ },
+ "commondir": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz",
+ "integrity": "sha1-ifAP3NUbUZxXhzP+xWPmptp/W+I=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz",
+ "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "1.1.14",
+ "typedarray": "0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz",
+ "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
+ "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.6",
+ "randomfill": "1.0.3"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz",
+ "integrity": "sha1-ib2d9nMrUSVrxnBTQrugLtEhMe8=",
+ "dev": true,
+ "requires": {
+ "ms": "0.6.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
+ "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=",
+ "dev": true
+ },
+ "defined": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz",
+ "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "1.3.9",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.9.tgz",
+ "integrity": "sha1-Kd//U+F7Nq7K51MK27v2IsLtGnE=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.2",
+ "shasum": "1.0.2",
+ "subarg": "1.0.0",
+ "through2": "1.1.1"
+ },
+ "dependencies": {
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ }
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.3.0",
+ "defined": "1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz",
+ "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==",
+ "dev": true
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz",
+ "integrity": "sha1-NDJ2MI7Jkbe8giZ+1VvBQR+XFmY=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.6"
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ }
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz",
+ "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz",
+ "integrity": "sha1-dYSdz+k9EPsFfDAFWv29UdBqjiQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "falafel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
+ "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
+ "dev": true,
+ "requires": {
+ "acorn": "1.2.2",
+ "foreach": "2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "1.0.11"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
+ "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=",
+ "dev": true
+ }
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "2.0.10",
+ "once": "1.4.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
+ "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz",
+ "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "http-browserify": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz",
+ "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=",
+ "dev": true,
+ "requires": {
+ "Base64": "0.2.1",
+ "inherits": "2.0.3"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.3.1.tgz",
+ "integrity": "sha1-pSi1FOaJ/OkNswiehw2S9Sestes=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.3.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz",
+ "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "insert-module-globals": {
+ "version": "6.6.3",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.6.3.tgz",
+ "integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=",
+ "dev": true,
+ "requires": {
+ "combine-source-map": "0.6.1",
+ "concat-stream": "1.4.10",
+ "is-buffer": "1.1.6",
+ "JSONStream": "1.3.2",
+ "lexical-scope": "1.2.0",
+ "process": "0.11.10",
+ "through2": "1.1.1",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "combine-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
+ "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "inline-source-map": "0.5.0",
+ "lodash.memoize": "3.0.4",
+ "source-map": "0.4.4"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
+ "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.4.4"
+ }
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "jade": {
+ "version": "0.26.3",
+ "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz",
+ "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=",
+ "dev": true,
+ "requires": {
+ "commander": "0.6.1",
+ "mkdirp": "0.3.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz",
+ "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
+ "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=",
+ "dev": true
+ }
+ }
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
+ "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+ "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "0.0.5",
+ "through": "2.3.8"
+ }
+ },
+ "labeled-stream-splicer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
+ "integrity": "sha1-RhUzFTd4SYHo/SZOHzpDTE4N3WU=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "stream-splicer": "1.3.2"
+ }
+ },
+ "lexical-scope": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
+ "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
+ "dev": true,
+ "requires": {
+ "astw": "2.2.0"
+ }
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "mocha": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.1.0.tgz",
+ "integrity": "sha1-d3Uv5ZL7kJJ1aCevRs0+rhuDZxw=",
+ "dev": true,
+ "requires": {
+ "commander": "2.3.0",
+ "debug": "2.0.0",
+ "diff": "1.0.8",
+ "escape-string-regexp": "1.0.2",
+ "glob": "3.2.3",
+ "growl": "1.8.1",
+ "jade": "0.26.3",
+ "mkdirp": "0.5.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz",
+ "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "2.0.3",
+ "inherits": "2.0.3",
+ "minimatch": "0.2.14"
+ }
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "module-deps": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.9.1.tgz",
+ "integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "1.11.2",
+ "concat-stream": "1.4.10",
+ "defined": "1.0.0",
+ "detective": "4.7.1",
+ "duplexer2": "0.0.2",
+ "inherits": "2.0.3",
+ "JSONStream": "1.3.2",
+ "parents": "1.0.1",
+ "readable-stream": "1.1.14",
+ "resolve": "1.5.0",
+ "stream-combiner2": "1.0.2",
+ "subarg": "1.0.0",
+ "through2": "1.1.1",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
+ "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
+ "dev": true,
+ "requires": {
+ "wordwrap": "0.0.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
+ "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "dev": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "dev": true,
+ "requires": {
+ "asn1.js": "4.9.2",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "process": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz",
+ "integrity": "sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.6"
+ }
+ },
+ "punycode": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz",
+ "integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
+ "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "dev": true,
+ "requires": {
+ "randombytes": "2.0.6",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "readable-wrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz",
+ "integrity": "sha1-O1ohHGMeEjA6VJkcgGwX564ga/8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ }
+ },
+ "resolve": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz",
+ "integrity": "sha1-OVqe+ehz+/4SvRRAi9kbuTYAPWk=",
+ "dev": true
+ },
+ "rfile": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rfile/-/rfile-1.0.0.tgz",
+ "integrity": "sha1-WXCM+Qyh50xUw8/Fw2/bmBBDUmE=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0",
+ "resolve": "0.3.1"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.3.1.tgz",
+ "integrity": "sha1-NMY0R8ZkxwWY0cmxJvxDsqJDEKQ=",
+ "dev": true
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "dev": true,
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "ruglify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ruglify/-/ruglify-1.0.0.tgz",
+ "integrity": "sha1-3Ikw4qlUSidDAcyZcldMDQmGtnU=",
+ "dev": true,
+ "requires": {
+ "rfile": "1.0.0",
+ "uglify-js": "2.2.5"
+ },
+ "dependencies": {
+ "uglify-js": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
+ "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
+ "dev": true,
+ "requires": {
+ "optimist": "0.3.7",
+ "source-map": "0.1.43"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "shallow-copy": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
+ "dev": true
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "0.0.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "shell-quote": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz",
+ "integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "stream-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz",
+ "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "1.1.14"
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.2.tgz",
+ "integrity": "sha1-unKmtQy/q/qVD8i8h2BL0B62BnE=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2",
+ "through2": "0.5.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "through2": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "3.0.0"
+ }
+ }
+ }
+ },
+ "stream-splicer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.2.tgz",
+ "integrity": "sha1-PARBvhW5v04iYnXm3IOWR0VUZmE=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "readable-stream": "1.1.14",
+ "readable-wrap": "1.0.0",
+ "through2": "1.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ }
+ },
+ "syntax-error": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
+ "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
+ "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "0.11.10"
+ },
+ "dependencies": {
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ }
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.7.tgz",
+ "integrity": "sha512-esJIpNQIC44EFSrbeFPhiXHy2HJ+dTcnn0Zdkn+5meuLsvoV0mFJffKlyezNIIHNfhF0NpgbifygCfEyAogIhQ==",
+ "dev": true,
+ "requires": {
+ "commander": "2.13.0",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "umd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-2.1.0.tgz",
+ "integrity": "sha1-SmMHt2LxfwLSAbX6FU5nM5bCY88=",
+ "dev": true,
+ "requires": {
+ "rfile": "1.0.0",
+ "ruglify": "1.0.0",
+ "through": "2.3.8",
+ "uglify-js": "2.4.24"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.34",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
+ "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "uglify-js": {
+ "version": "2.4.24",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
+ "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10",
+ "source-map": "0.1.34",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.5.4"
+ }
+ }
+ }
+ },
+ "url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+ "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "watch": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/watch/-/watch-0.13.0.tgz",
+ "integrity": "sha1-/MbSs/DoxzSC61Qjmhn9W8+adTw=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
+ "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 0bf9936..5c96040 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
"devDependencies": {
"coffee-script": "~1.9.0",
"watch": "~0.13.0",
- "uglify": "~0.1.1",
+ "uglify-js": "~3.3.7",
"mocha": "~2.1.0",
"browserify": "~8.1.3",
"coffeeify": "~1.0.0",
From 108367573f4603a8722d0f4db7838aec8603df7c Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 19 Jan 2018 13:14:32 -0600
Subject: [PATCH 05/62] bump release and build
---
CHANGELOG | 3 +++
dist/jquery.payform.js | 2 +-
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 2 +-
dist/payform.min.js | 2 +-
src/payform.coffee | 2 +-
6 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 9bb5f5e..f1f3d1e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+= 1.2.2
+ * Fix IE11 hanging on input (see PR #32)
+
= 1.2.1
* Correct Diners Club Pattern (regarding #19 and #22)
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 7dbe967..4f04436 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -37,7 +37,7 @@ payform = require(2);
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.1
+ Version: 1.2.2
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index 369f47b..d10eb9b 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,c){return"undefined"!=typeof b&&null!==b?b.exports=c():"function"==typeof define&&"object"==typeof define.amd?define(a,c):this[a]=c()}("payform",function(){var a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return b=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},a=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},c=function(b,c,d){return d=a(d),null!=b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var c;return c=b(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},k=function(a){var c,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,c=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,c&&(i=c.length[c.length.length-1]),g>=i||(d=b(a.target),d&&d!==j.length))?void 0:(h=c&&"amex"===c.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var c;return c=b(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var c,d;return d=a.target.value,8!==a.which||(c=b(a.target),c&&c!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var c;return c=b(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=c&&"change"!==a.type?a.target.setSelectionRange(c,c):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return c(a,"keypress",x),c(a,"keypress",u),c(a,"paste",q),c(a,"change",q),c(a,"input",q)},p.expiryInput=function(a){return c(a,"keypress",x),c(a,"keypress",w),c(a,"keypress",j),c(a,"keypress",m),c(a,"keypress",l),c(a,"keydown",i),c(a,"change",s),c(a,"input",s)},p.cardNumberInput=function(a){return c(a,"keypress",x),c(a,"keypress",v),c(a,"keypress",k),c(a,"keydown",h),c(a,"paste",r),c(a,"change",r),c(a,"input",r)},p.numericInput=function(a){return c(a,"keypress",x),c(a,"paste",x),c(a,"change",x),c(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(a){var b,c;return a=(a+"").replace(/\s+|-/g,""),/^\d+$/.test(a)?(b=e(a),b?(c=a.length,d.call(b.length,c)>=0&&(b.luhn===!1||o(a))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(a,b){var c,e;return a=String(a).trim(),/^\d+$/.test(a)?(c=f(b),null!=c?(e=a.length,d.call(c.cvcLength,e)>=0):a.length>=3&&a.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})},{}]},{},[1]);
\ No newline at end of file
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index ebd994e..afdc50f 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.1
+ Version: 1.2.2
*/
(function() {
diff --git a/dist/payform.min.js b/dist/payform.min.js
index d957444..1b3b85b 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};!function(a,b){return"undefined"!=typeof module&&null!==module?module.exports=b():"function"==typeof define&&"object"==typeof define.amd?define(a,b):this[a]=b()}("payform",function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return c=function(a){var b,c,d;return null!=a.selectionStart?a.selectionStart:null!=document.selection?(a.focus(),b=document.selection.createRange(),d=a.createTextRange(),c=d.duplicate(),d.moveToBookmark(b.getBookmark()),c.setEndPoint("EndToStart",d),c.text.length):void 0},b=function(a){return function(b){return null==b&&(b=window.event),b.target=b.target||b.srcElement,b.which=b.which||b.keyCode,null==b.preventDefault&&(b.preventDefault=function(){return this.returnValue=!1}),a(b)}},d=function(a,c,d){return d=b(d),null!=a.addEventListener?a.addEventListener(c,d,!1):a.attachEvent("on"+c,d)},p={},g=/(\d{1,4})/g,p.cards=[{type:"visaelectron",pattern:/^4(026|17500|405|508|844|91[37])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"maestro",pattern:/^(5(018|0[23]|[68])|6(39|7))/,format:g,length:[12,13,14,15,16,17,18,19],cvcLength:[3],luhn:!0},{type:"forbrugsforeningen",pattern:/^600/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"dankort",pattern:/^5019/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"visa",pattern:/^4/,format:g,length:[13,16],cvcLength:[3],luhn:!0},{type:"mastercard",pattern:/^(5[1-5]|2[2-7])/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"amex",pattern:/^3[47]/,format:/(\d{1,4})(\d{1,6})?(\d{1,5})?/,length:[15],cvcLength:[3,4],luhn:!0},{type:"dinersclub",pattern:/^3[0689]/,format:/(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,length:[14],cvcLength:[3],luhn:!0},{type:"discover",pattern:/^6([045]|22)/,format:g,length:[16],cvcLength:[3],luhn:!0},{type:"unionpay",pattern:/^(62|88)/,format:g,length:[16,17,18,19],cvcLength:[3],luhn:!1},{type:"jcb",pattern:/^35/,format:g,length:[16],cvcLength:[3],luhn:!0}],e=function(a){var b,c,d,e;for(a=(a+"").replace(/\D/g,""),e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.pattern.test(a))return b},f=function(a){var b,c,d,e;for(e=p.cards,c=0,d=e.length;d>c;c++)if(b=e[c],b.type===a)return b},o=function(a){var b,c,d,e,f,g;for(f=!0,g=0,c=(a+"").split("").reverse(),d=0,e=c.length;e>d;d++)b=c[d],b=parseInt(b,10),(f=!f)&&(b*=2),b>9&&(b-=9),g+=b;return g%10===0},n=function(a){var b;return null!=("undefined"!=typeof document&&null!==document&&null!=(b=document.selection)?b.createRange:void 0)&&document.selection.createRange().text?!0:null!=a.selectionStart&&a.selectionStart!==a.selectionEnd},t=function(a){var b,c,d,e,f,g,h,i;for(null==a&&(a=""),d="0123456789",e="0123456789",i="",c=a.split(""),f=0,h=c.length;h>f;f++)b=c[f],g=d.indexOf(b),g>-1&&(b=e[g]),i+=b;return i},r=function(a){var b;return b=c(a.target),a.target.value=p.formatCardNumber(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},k=function(a){var b,d,f,g,h,i,j;return f=String.fromCharCode(a.which),!/^\d+$/.test(f)||(j=a.target.value,b=e(j+f),g=(j.replace(/\D/g,"")+f).length,i=16,b&&(i=b.length[b.length.length-1]),g>=i||(d=c(a.target),d&&d!==j.length))?void 0:(h=b&&"amex"===b.type?/^(\d{4}|\d{4}\s\d{6})$/:/(?:^|\s)(\d{4})$/,h.test(j)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+" "+f})):h.test(j+f)?(a.preventDefault(),setTimeout(function(){return a.target.value=j+f+" "})):void 0)},h=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s$/,"")})):/\s\d?$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d$/,"")})):void 0},s=function(a){var b;return b=c(a.target),a.target.value=p.formatCardExpiry(a.target.value),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},j=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value+b,/^\d$/.test(c)&&"0"!==c&&"1"!==c?(a.preventDefault(),setTimeout(function(){return a.target.value="0"+c+" / "})):/^\d\d$/.test(c)?(a.preventDefault(),setTimeout(function(){return a.target.value=c+" / "})):void 0):void 0},l=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)?(c=a.target.value,/^\d\d$/.test(c)?a.target.value=c+" / ":void 0):void 0},m=function(a){var b,c;return c=String.fromCharCode(a.which),"/"===c||" "===c?(b=a.target.value,/^\d$/.test(b)&&"0"!==b?a.target.value="0"+b+" / ":void 0):void 0},i=function(a){var b,d;return d=a.target.value,8!==a.which||(b=c(a.target),b&&b!==d.length)?void 0:/\d\s\/\s$/.test(d)?(a.preventDefault(),setTimeout(function(){return a.target.value=d.replace(/\d\s\/\s$/,"")})):void 0},q=function(a){var b;return b=c(a.target),a.target.value=t(a.target.value).replace(/\D/g,"").slice(0,4),null!=b&&"change"!==a.type?a.target.setSelectionRange(b,b):void 0},x=function(a){var b;if(!(a.metaKey||a.ctrlKey||0===a.which||a.which<33))return b=String.fromCharCode(a.which),/^\d+$/.test(b)?void 0:a.preventDefault()},v=function(a){var b,c,d;return c=String.fromCharCode(a.which),/^\d+$/.test(c)&&!n(a.target)?(d=(a.target.value+c).replace(/\D/g,""),b=e(d),b&&d.length>b.length[b.length.length-1]?a.preventDefault():d.length>16?a.preventDefault():void 0):void 0},w=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c=c.replace(/\D/g,""),c.length>6?a.preventDefault():void 0):void 0},u=function(a){var b,c;return b=String.fromCharCode(a.which),/^\d+$/.test(b)&&!n(a.target)?(c=a.target.value+b,c.length>4?a.preventDefault():void 0):void 0},p.cvcInput=function(a){return d(a,"keypress",x),d(a,"keypress",u),d(a,"paste",q),d(a,"change",q),d(a,"input",q)},p.expiryInput=function(a){return d(a,"keypress",x),d(a,"keypress",w),d(a,"keypress",j),d(a,"keypress",m),d(a,"keypress",l),d(a,"keydown",i),d(a,"change",s),d(a,"input",s)},p.cardNumberInput=function(a){return d(a,"keypress",x),d(a,"keypress",v),d(a,"keypress",k),d(a,"keydown",h),d(a,"paste",r),d(a,"change",r),d(a,"input",r)},p.numericInput=function(a){return d(a,"keypress",x),d(a,"paste",x),d(a,"change",x),d(a,"input",x)},p.parseCardExpiry=function(a){var b,c,d,e;return a=a.replace(/\s/g,""),d=a.split("/",2),b=d[0],e=d[1],2===(null!=e?e.length:void 0)&&/^\d+$/.test(e)&&(c=(new Date).getFullYear(),c=c.toString().slice(0,2),e=c+e),b=parseInt(b,10),e=parseInt(e,10),{month:b,year:e}},p.validateCardNumber=function(b){var c,d;return b=(b+"").replace(/\s+|-/g,""),/^\d+$/.test(b)?(c=e(b),c?(d=b.length,a.call(c.length,d)>=0&&(c.luhn===!1||o(b))):!1):!1},p.validateCardExpiry=function(a,b){var c,d,e;return"object"==typeof a&&"month"in a&&(e=a,a=e.month,b=e.year),a&&b?(a=String(a).trim(),b=String(b).trim(),/^\d+$/.test(a)&&/^\d+$/.test(b)&&a>=1&&12>=a?(2===b.length&&(b=70>b?"20"+b:"19"+b),4!==b.length?!1:(d=new Date(b,a),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c)):!1):!1},p.validateCardCVC=function(b,c){var d,e;return b=String(b).trim(),/^\d+$/.test(b)?(d=f(c),null!=d?(e=b.length,a.call(d.cvcLength,e)>=0):b.length>=3&&b.length<=4):!1},p.parseCardType=function(a){var b;return a?(null!=(b=e(a))?b.type:void 0)||null:null},p.formatCardNumber=function(a){var b,c,d,f;return a=t(a),a=a.replace(/\D/g,""),(b=e(a))?(f=b.length[b.length.length-1],a=a.slice(0,f),b.format.global?null!=(d=a.match(b.format))?d.join(" "):void 0:(c=b.format.exec(a),null!=c?(c.shift(),c=c.filter(Boolean),c.join(" ")):void 0)):a},p.formatCardExpiry=function(a){var b,c,d,e;return a=t(a),(c=a.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/))?(b=c[1]||"",d=c[2]||"",e=c[3]||"",e.length>0?d=" / ":" /"===d?(b=b.substring(0,1),d=""):2===b.length||d.length>0?d=" / ":1===b.length&&"0"!==b&&"1"!==b&&(b="0"+b,d=" / "),b+d+e):""},p})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/src/payform.coffee b/src/payform.coffee
index 46dde0c..e8fdfc1 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.1
+ Version: 1.2.2
###
((name, definition) ->
if module?
From fbff4bf8be72b630902dd7b242fe8e78cfc685c5 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 19 Jan 2018 13:32:23 -0600
Subject: [PATCH 06/62] bump version to 1.2.2
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 5c96040..0c5d33b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.1",
+ "version": "1.2.2",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
From b3578284476ad15ae56e2b35a8cffc0ffe896b05 Mon Sep 17 00:00:00 2001
From: Dmitri Voronianski
Date: Mon, 5 Feb 2018 16:23:05 +0100
Subject: [PATCH 07/62] fix for the 2 last digits issue
https://github.com/jondavidjohn/payform/issues/25
---
src/payform.coffee | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index e8fdfc1..3bac8a8 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -335,8 +335,9 @@
value = (e.target.value + digit).replace(/\D/g, '')
card = cardFromNumber(value)
- if card and value.length > card.length[card.length.length - 1]
- e.preventDefault()
+ if card
+ if value.length > card.length[card.length.length - 1]
+ e.preventDefault()
else if value.length > 16
e.preventDefault()
From e7a9521f56369eef17ef3419cc9f8e87bf31bee7 Mon Sep 17 00:00:00 2001
From: Dmitri Voronianski
Date: Mon, 5 Feb 2018 16:47:25 +0100
Subject: [PATCH 08/62] refactor a bit
---
src/payform.coffee | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 3bac8a8..c14a40b 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -334,11 +334,9 @@
# Restrict number of digits
value = (e.target.value + digit).replace(/\D/g, '')
card = cardFromNumber(value)
+ maxLength = if card then card.length[card.length.length - 1] else 16
- if card
- if value.length > card.length[card.length.length - 1]
- e.preventDefault()
- else if value.length > 16
+ if value.length > maxLength
e.preventDefault()
restrictExpiry = (e) ->
From 55ab3acbe0cd2327c627622789c1178be0c04373 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 28 Jun 2018 10:09:15 -0400
Subject: [PATCH 09/62] Set caret position after formatting card and expiry
number
---
dist/payform.js | 4 +-
dist/payform.min.js | 2 +-
package-lock.json | 138 ++++++++++++++++++++++----------------------
src/payform.coffee | 4 +-
4 files changed, 74 insertions(+), 74 deletions(-)
diff --git a/dist/payform.js b/dist/payform.js
index afdc50f..d0be400 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -209,8 +209,8 @@
};
reFormatCardNumber = function(e) {
var cursor;
- cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardNumber(e.target.value);
+ cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
@@ -276,8 +276,8 @@
};
reFormatExpiry = function(e) {
var cursor;
- cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardExpiry(e.target.value);
+ cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
diff --git a/dist/payform.min.js b/dist/payform.min.js
index 1b3b85b..c76d20c 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 48fbbb1..c208f01 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,9 +1,25 @@
{
"name": "payform",
- "version": "1.2.1",
+ "version": "1.2.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "Base64": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
+ "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+ "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "0.0.5",
+ "through": "2.3.8"
+ }
+ },
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
@@ -57,12 +73,6 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
- "Base64": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
- "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
- "dev": true
- },
"base64-js": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
@@ -97,10 +107,10 @@
"integrity": "sha1-+qHLxBSHsazEdH43PhFIrf/Q4tk=",
"dev": true,
"requires": {
+ "JSONStream": "0.8.4",
"combine-source-map": "0.3.0",
"concat-stream": "1.4.10",
"defined": "0.0.0",
- "JSONStream": "0.8.4",
"through2": "0.5.1",
"umd": "2.1.0"
},
@@ -158,15 +168,25 @@
"minimist": "1.2.0"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"browser-pack": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
"integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"combine-source-map": "0.6.1",
"defined": "1.0.0",
- "JSONStream": "1.3.2",
"through2": "1.1.1",
"umd": "3.0.1"
}
@@ -227,16 +247,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
@@ -284,6 +294,7 @@
"integrity": "sha1-8zpUmjpsNoIZsHX9z+bfGV4Empo=",
"dev": true,
"requires": {
+ "JSONStream": "0.8.4",
"assert": "1.3.0",
"browser-pack": "3.2.0",
"browser-resolve": "1.11.2",
@@ -307,7 +318,6 @@
"inherits": "2.0.3",
"insert-module-globals": "6.6.3",
"isarray": "0.0.1",
- "JSONStream": "0.8.4",
"labeled-stream-splicer": "1.0.2",
"module-deps": "3.9.1",
"os-browserify": "0.1.2",
@@ -450,16 +460,26 @@
"through2": "1.1.1"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"browser-pack": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-4.0.4.tgz",
"integrity": "sha1-ja6VogykOz/qIB+qbPqoT/Sg1IQ=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"combine-source-map": "0.3.0",
"concat-stream": "1.4.10",
"defined": "1.0.0",
- "JSONStream": "1.3.2",
"through2": "0.5.1",
"umd": "3.0.1"
},
@@ -488,16 +508,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"minimist": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
@@ -738,12 +748,6 @@
"through2": "1.1.1"
},
"dependencies": {
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
"JSONStream": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
@@ -753,6 +757,12 @@
"jsonparse": "1.3.1",
"through": "2.3.8"
}
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
}
}
},
@@ -1009,16 +1019,26 @@
"integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"combine-source-map": "0.6.1",
"concat-stream": "1.4.10",
"is-buffer": "1.1.6",
- "JSONStream": "1.3.2",
"lexical-scope": "1.2.0",
"process": "0.11.10",
"through2": "1.1.1",
"xtend": "4.0.1"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"combine-source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
@@ -1052,16 +1072,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -1142,16 +1152,6 @@
"integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
"dev": true
},
- "JSONStream": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
- "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
- "dev": true,
- "requires": {
- "jsonparse": "0.0.5",
- "through": "2.3.8"
- }
- },
"labeled-stream-splicer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
@@ -1305,13 +1305,13 @@
"integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"browser-resolve": "1.11.2",
"concat-stream": "1.4.10",
"defined": "1.0.0",
"detective": "4.7.1",
"duplexer2": "0.0.2",
"inherits": "2.0.3",
- "JSONStream": "1.3.2",
"parents": "1.0.1",
"readable-stream": "1.1.14",
"resolve": "1.5.0",
@@ -1321,6 +1321,16 @@
"xtend": "4.0.1"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
@@ -1333,16 +1343,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"resolve": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
diff --git a/src/payform.coffee b/src/payform.coffee
index e8fdfc1..ec46d93 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -190,8 +190,8 @@
# Format Card Number
reFormatCardNumber = (e) ->
- cursor = _getCaretPos(e.target)
e.target.value = payform.formatCardNumber(e.target.value)
+ cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
@@ -250,8 +250,8 @@
# Format Expiry
reFormatExpiry = (e) ->
- cursor = _getCaretPos(e.target)
e.target.value = payform.formatCardExpiry(e.target.value)
+ cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
From 1eb22a160e428a7740de58a4add09d14706a2901 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 28 Jun 2018 10:10:47 -0400
Subject: [PATCH 10/62] Use equals method for formatting test assertions and
refactor tests
---
dist/payform.js | 4 +-
dist/payform.min.js | 2 +-
package-lock.json | 138 +++++++++++++++---------------
test/formatCardExpiry_spec.coffee | 9 +-
test/formatCardNumber_spec.coffee | 23 ++---
5 files changed, 90 insertions(+), 86 deletions(-)
diff --git a/dist/payform.js b/dist/payform.js
index d0be400..afdc50f 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -209,8 +209,8 @@
};
reFormatCardNumber = function(e) {
var cursor;
- e.target.value = payform.formatCardNumber(e.target.value);
cursor = _getCaretPos(e.target);
+ e.target.value = payform.formatCardNumber(e.target.value);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
@@ -276,8 +276,8 @@
};
reFormatExpiry = function(e) {
var cursor;
- e.target.value = payform.formatCardExpiry(e.target.value);
cursor = _getCaretPos(e.target);
+ e.target.value = payform.formatCardExpiry(e.target.value);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
diff --git a/dist/payform.min.js b/dist/payform.min.js
index c76d20c..1b3b85b 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index c208f01..48fbbb1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,25 +1,9 @@
{
"name": "payform",
- "version": "1.2.2",
+ "version": "1.2.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "Base64": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
- "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
- "dev": true
- },
- "JSONStream": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
- "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
- "dev": true,
- "requires": {
- "jsonparse": "0.0.5",
- "through": "2.3.8"
- }
- },
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
@@ -73,6 +57,12 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
+ "Base64": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
+ "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
+ "dev": true
+ },
"base64-js": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
@@ -107,10 +97,10 @@
"integrity": "sha1-+qHLxBSHsazEdH43PhFIrf/Q4tk=",
"dev": true,
"requires": {
- "JSONStream": "0.8.4",
"combine-source-map": "0.3.0",
"concat-stream": "1.4.10",
"defined": "0.0.0",
+ "JSONStream": "0.8.4",
"through2": "0.5.1",
"umd": "2.1.0"
},
@@ -168,25 +158,15 @@
"minimist": "1.2.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"browser-pack": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
"integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
"combine-source-map": "0.6.1",
"defined": "1.0.0",
+ "JSONStream": "1.3.2",
"through2": "1.1.1",
"umd": "3.0.1"
}
@@ -247,6 +227,16 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
@@ -294,7 +284,6 @@
"integrity": "sha1-8zpUmjpsNoIZsHX9z+bfGV4Empo=",
"dev": true,
"requires": {
- "JSONStream": "0.8.4",
"assert": "1.3.0",
"browser-pack": "3.2.0",
"browser-resolve": "1.11.2",
@@ -318,6 +307,7 @@
"inherits": "2.0.3",
"insert-module-globals": "6.6.3",
"isarray": "0.0.1",
+ "JSONStream": "0.8.4",
"labeled-stream-splicer": "1.0.2",
"module-deps": "3.9.1",
"os-browserify": "0.1.2",
@@ -460,26 +450,16 @@
"through2": "1.1.1"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"browser-pack": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-4.0.4.tgz",
"integrity": "sha1-ja6VogykOz/qIB+qbPqoT/Sg1IQ=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
"combine-source-map": "0.3.0",
"concat-stream": "1.4.10",
"defined": "1.0.0",
+ "JSONStream": "1.3.2",
"through2": "0.5.1",
"umd": "3.0.1"
},
@@ -508,6 +488,16 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"minimist": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
@@ -748,6 +738,12 @@
"through2": "1.1.1"
},
"dependencies": {
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
"JSONStream": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
@@ -757,12 +753,6 @@
"jsonparse": "1.3.1",
"through": "2.3.8"
}
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
}
}
},
@@ -1019,26 +1009,16 @@
"integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
"combine-source-map": "0.6.1",
"concat-stream": "1.4.10",
"is-buffer": "1.1.6",
+ "JSONStream": "1.3.2",
"lexical-scope": "1.2.0",
"process": "0.11.10",
"through2": "1.1.1",
"xtend": "4.0.1"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"combine-source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
@@ -1072,6 +1052,16 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -1152,6 +1142,16 @@
"integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
"dev": true
},
+ "JSONStream": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+ "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "0.0.5",
+ "through": "2.3.8"
+ }
+ },
"labeled-stream-splicer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
@@ -1305,13 +1305,13 @@
"integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
"browser-resolve": "1.11.2",
"concat-stream": "1.4.10",
"defined": "1.0.0",
"detective": "4.7.1",
"duplexer2": "0.0.2",
"inherits": "2.0.3",
+ "JSONStream": "1.3.2",
"parents": "1.0.1",
"readable-stream": "1.1.14",
"resolve": "1.5.0",
@@ -1321,16 +1321,6 @@
"xtend": "4.0.1"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
@@ -1343,6 +1333,16 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"resolve": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
diff --git a/test/formatCardExpiry_spec.coffee b/test/formatCardExpiry_spec.coffee
index 7fe4fe2..7e229c5 100644
--- a/test/formatCardExpiry_spec.coffee
+++ b/test/formatCardExpiry_spec.coffee
@@ -4,11 +4,12 @@ payform = require('../src/payform')
describe 'payform', ->
describe '#formatCardExpiry', ->
it 'should format month shorthand correctly', ->
- assert payform.formatCardExpiry('4'), '04 / '
+ assert.equal payform.formatCardExpiry('4'), '04 / '
it 'should only allow numbers', ->
- assert payform.formatCardExpiry('1d'), '01 / '
+ assert.equal payform.formatCardExpiry('1d'), '1 / '
it 'should format full-width expiry correctly', ->
- assert payform.formatCardExpiry('\uff10\uff18'), '08 /'
- assert payform.formatCardNumber('\uff10\uff18\uff11\uff15'), '08 / 15'
+ assert.equal payform.formatCardExpiry('\uff18'), '08 / '
+ assert.equal payform.formatCardExpiry('\uff10\uff17\uff12\uff10\uff11\uff18'), '07 / 2018'
+ assert.equal payform.formatCardExpiry('\uff10\uff18\uff12\uff10\uff11\uff18\uff12\uff10\uff11\uff18'), '08 / 2018'
diff --git a/test/formatCardNumber_spec.coffee b/test/formatCardNumber_spec.coffee
index 15a6989..fc48209 100644
--- a/test/formatCardNumber_spec.coffee
+++ b/test/formatCardNumber_spec.coffee
@@ -4,17 +4,20 @@ payform = require('../src/payform')
describe 'payform', ->
describe '#formatCardNumber', ->
it 'should format cc number correctly', ->
- assert payform.formatCardNumber('42424'), '4242 4'
- assert payform.formatCardNumber('42424242'), '4242 4242'
- assert payform.formatCardNumber('4242424242'), '4242 4242 42'
- assert payform.formatCardNumber('4242424242424242'), '4242 4242 4242 4242'
+ assert.equal payform.formatCardNumber('42424'), '4242 4'
+ assert.equal payform.formatCardNumber('42424242'), '4242 4242'
+ assert.equal payform.formatCardNumber('4242424242'), '4242 4242 42'
+ assert.equal payform.formatCardNumber('4242424242424242'), '4242 4242 4242 4242'
it 'should format amex cc number correctly', ->
- assert payform.formatCardNumber('37828'), '3782 8'
- assert payform.formatCardNumber('3782822'), '3782 822'
- assert payform.formatCardNumber('378282246310'), '3782 822463 10'
- assert payform.formatCardNumber('378282246310005'), '3782 822463 10005'
+ assert.equal payform.formatCardNumber('37828'), '3782 8'
+ assert.equal payform.formatCardNumber('3782822'), '3782 822'
+ assert.equal payform.formatCardNumber('378282246310'), '3782 822463 10'
+ assert.equal payform.formatCardNumber('378282246310005'), '3782 822463 10005'
it 'should format full-width cc number correctly', ->
- assert payform.formatCardNumber('\uff14\uff12\uff14\uff12'), '4242'
- assert payform.formatCardNumber('\uff14\uff12\uff14\uff12\uff14\uff12'), '4242 42'
+ assert.equal payform.formatCardNumber('\uff14\uff12\uff14\uff12'), '4242'
+ assert.equal payform.formatCardNumber('\uff14\uff12\uff14\uff12\uff14\uff12'), '4242 42'
+
+ it 'should only allow numbers', ->
+ assert.equal payform.formatCardNumber('42424242424242A22'), '4242 4242 4242 4222'
From 081f1b4a9d3b68145041240fb919612b98dc745f Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Thu, 28 Jun 2018 11:53:19 -0500
Subject: [PATCH 11/62] cut release, update package-lock
---
CHANGELOG | 3 +
dist/jquery.payform.js | 6 +-
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 6 +-
dist/payform.min.js | 2 +-
package-lock.json | 144 +++++++++++++++++++------------------
package.json | 4 +-
src/payform.coffee | 2 +-
8 files changed, 89 insertions(+), 80 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index f1f3d1e..9951cf6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+= 1.2.3
+ * Fix issue in handling full width characters (see PR #36)
+
= 1.2.2
* Fix IE11 hanging on input (see PR #32)
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index a66395b..5aa2908 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -37,7 +37,7 @@ payform = require(2);
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.2
+ Version: 1.2.3
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
@@ -249,8 +249,8 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
if (e.target.value === "") {
return;
}
- cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardNumber(e.target.value);
+ cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
@@ -319,8 +319,8 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
if (e.target.value === "") {
return;
}
- cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardExpiry(e.target.value);
+ cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index 122c2be..cc7e5ba 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index 010c99b..408e638 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.2
+ Version: 1.2.3
*/
(function() {
@@ -219,8 +219,8 @@
if (e.target.value === "") {
return;
}
- cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardNumber(e.target.value);
+ cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
@@ -289,8 +289,8 @@
if (e.target.value === "") {
return;
}
- cursor = _getCaretPos(e.target);
e.target.value = payform.formatCardExpiry(e.target.value);
+ cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
diff --git a/dist/payform.min.js b/dist/payform.min.js
index bd9e591..116a662 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardNumber(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=payform.formatCardExpiry(e.target.value);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 48fbbb1..f8c4b5e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,9 +1,25 @@
{
"name": "payform",
- "version": "1.2.1",
+ "version": "1.2.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "Base64": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
+ "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+ "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "0.0.5",
+ "through": "2.3.8"
+ }
+ },
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
@@ -57,12 +73,6 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
- "Base64": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
- "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
- "dev": true
- },
"base64-js": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
@@ -97,10 +107,10 @@
"integrity": "sha1-+qHLxBSHsazEdH43PhFIrf/Q4tk=",
"dev": true,
"requires": {
+ "JSONStream": "0.8.4",
"combine-source-map": "0.3.0",
"concat-stream": "1.4.10",
"defined": "0.0.0",
- "JSONStream": "0.8.4",
"through2": "0.5.1",
"umd": "2.1.0"
},
@@ -158,15 +168,25 @@
"minimist": "1.2.0"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"browser-pack": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
"integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"combine-source-map": "0.6.1",
"defined": "1.0.0",
- "JSONStream": "1.3.2",
"through2": "1.1.1",
"umd": "3.0.1"
}
@@ -227,16 +247,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
@@ -284,6 +294,7 @@
"integrity": "sha1-8zpUmjpsNoIZsHX9z+bfGV4Empo=",
"dev": true,
"requires": {
+ "JSONStream": "0.8.4",
"assert": "1.3.0",
"browser-pack": "3.2.0",
"browser-resolve": "1.11.2",
@@ -307,7 +318,6 @@
"inherits": "2.0.3",
"insert-module-globals": "6.6.3",
"isarray": "0.0.1",
- "JSONStream": "0.8.4",
"labeled-stream-splicer": "1.0.2",
"module-deps": "3.9.1",
"os-browserify": "0.1.2",
@@ -450,16 +460,26 @@
"through2": "1.1.1"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"browser-pack": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-4.0.4.tgz",
"integrity": "sha1-ja6VogykOz/qIB+qbPqoT/Sg1IQ=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"combine-source-map": "0.3.0",
"concat-stream": "1.4.10",
"defined": "1.0.0",
- "JSONStream": "1.3.2",
"through2": "0.5.1",
"umd": "3.0.1"
},
@@ -488,16 +508,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"minimist": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
@@ -571,6 +581,12 @@
}
}
},
+ "coffeescript": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.9.3.tgz",
+ "integrity": "sha1-X+eDd90NYDajdrjSrBcVP5eYcdM=",
+ "dev": true
+ },
"combine-source-map": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.3.0.tgz",
@@ -738,12 +754,6 @@
"through2": "1.1.1"
},
"dependencies": {
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
"JSONStream": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
@@ -753,6 +763,12 @@
"jsonparse": "1.3.1",
"through": "2.3.8"
}
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
}
}
},
@@ -1009,16 +1025,26 @@
"integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"combine-source-map": "0.6.1",
"concat-stream": "1.4.10",
"is-buffer": "1.1.6",
- "JSONStream": "1.3.2",
"lexical-scope": "1.2.0",
"process": "0.11.10",
"through2": "1.1.1",
"xtend": "4.0.1"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"combine-source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
@@ -1052,16 +1078,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -1142,16 +1158,6 @@
"integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
"dev": true
},
- "JSONStream": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
- "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
- "dev": true,
- "requires": {
- "jsonparse": "0.0.5",
- "through": "2.3.8"
- }
- },
"labeled-stream-splicer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
@@ -1305,13 +1311,13 @@
"integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=",
"dev": true,
"requires": {
+ "JSONStream": "1.3.2",
"browser-resolve": "1.11.2",
"concat-stream": "1.4.10",
"defined": "1.0.0",
"detective": "4.7.1",
"duplexer2": "0.0.2",
"inherits": "2.0.3",
- "JSONStream": "1.3.2",
"parents": "1.0.1",
"readable-stream": "1.1.14",
"resolve": "1.5.0",
@@ -1321,6 +1327,16 @@
"xtend": "4.0.1"
},
"dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
@@ -1333,16 +1349,6 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
"resolve": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
diff --git a/package.json b/package.json
index 0c5d33b..fe0b9ce 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.2",
+ "version": "1.2.3",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
@@ -27,7 +27,7 @@
"watch": "make watch"
},
"devDependencies": {
- "coffee-script": "~1.9.0",
+ "coffeescript": "~1.9.0",
"watch": "~0.13.0",
"uglify-js": "~3.3.7",
"mocha": "~2.1.0",
diff --git a/src/payform.coffee b/src/payform.coffee
index 7db0e8c..9d4f208 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.2
+ Version: 1.2.3
###
((name, definition) ->
if module?
From 044ab08e001888512a87f19305f0820da5f0fb19 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Thu, 28 Jun 2018 11:53:52 -0500
Subject: [PATCH 12/62] add node 8 to CI
---
.travis.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.travis.yml b/.travis.yml
index dfa1e9b..166ae31 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
language: node_js
sudo: false
node_js:
+ - "8"
- "7"
- "6"
From 4adf722dc51c640d58f211052f17297922d7f63e Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Thu, 28 Jun 2018 11:57:15 -0500
Subject: [PATCH 13/62] update coffeescript references
---
test/mocha.opts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/mocha.opts b/test/mocha.opts
index 8c1102b..1174878 100644
--- a/test/mocha.opts
+++ b/test/mocha.opts
@@ -1,2 +1,2 @@
---require coffee-script/register
---compilers coffee:coffee-script/register
+--require coffeescript/register
+--compilers coffee:coffeescript/register
From 6c67aa2a0ae33f6a488236d5cd27a13285046a02 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Mon, 9 Jul 2018 12:14:04 -0500
Subject: [PATCH 14/62] update mocha (CVE)
---
package-lock.json | 137 ++++++++++++++++++++++++----------------------
package.json | 2 +-
2 files changed, 72 insertions(+), 67 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index f8c4b5e..2af920e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -715,15 +715,6 @@
"integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
"dev": true
},
- "debug": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz",
- "integrity": "sha1-ib2d9nMrUSVrxnBTQrugLtEhMe8=",
- "dev": true,
- "requires": {
- "ms": "0.6.2"
- }
- },
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@@ -806,12 +797,6 @@
}
}
},
- "diff": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz",
- "integrity": "sha1-NDJ2MI7Jkbe8giZ+1VvBQR+XFmY=",
- "dev": true
- },
"diffie-hellman": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
@@ -913,18 +898,6 @@
"once": "1.4.0"
}
},
- "graceful-fs": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
- "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=",
- "dev": true
- },
- "growl": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz",
- "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=",
- "dev": true
- },
"hash-base": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
@@ -1249,59 +1222,85 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
- "mkdirp": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
- "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
- }
- },
"mocha": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.1.0.tgz",
- "integrity": "sha1-d3Uv5ZL7kJJ1aCevRs0+rhuDZxw=",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz",
+ "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=",
"dev": true,
"requires": {
"commander": "2.3.0",
- "debug": "2.0.0",
- "diff": "1.0.8",
+ "debug": "2.2.0",
+ "diff": "1.4.0",
"escape-string-regexp": "1.0.2",
- "glob": "3.2.3",
- "growl": "1.8.1",
+ "glob": "3.2.11",
+ "growl": "1.9.2",
"jade": "0.26.3",
- "mkdirp": "0.5.0"
+ "mkdirp": "0.5.1",
+ "supports-color": "1.2.0",
+ "to-iso-string": "0.0.2"
},
"dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "diff": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz",
+ "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=",
+ "dev": true
+ },
"glob": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz",
- "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
"dev": true,
"requires": {
- "graceful-fs": "2.0.3",
"inherits": "2.0.3",
- "minimatch": "0.2.14"
+ "minimatch": "0.3.0"
}
},
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
"minimatch": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
"dev": true,
"requires": {
"lru-cache": "2.7.3",
"sigmund": "1.0.1"
}
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
}
}
},
@@ -1366,12 +1365,6 @@
}
}
},
- "ms": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
- "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=",
- "dev": true
- },
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
@@ -1726,6 +1719,12 @@
"minimist": "1.2.0"
}
},
+ "supports-color": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz",
+ "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=",
+ "dev": true
+ },
"syntax-error": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
@@ -1776,6 +1775,12 @@
}
}
},
+ "to-iso-string": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz",
+ "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=",
+ "dev": true
+ },
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
diff --git a/package.json b/package.json
index fe0b9ce..599c315 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"coffeescript": "~1.9.0",
"watch": "~0.13.0",
"uglify-js": "~3.3.7",
- "mocha": "~2.1.0",
+ "mocha": "~2.5.3",
"browserify": "~8.1.3",
"coffeeify": "~1.0.0",
"bundle-collapser": "~1.1.1"
From e3418781a038bf7381e2fb5337da210f05362537 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Mon, 9 Jul 2018 12:16:14 -0500
Subject: [PATCH 15/62] bump mocha to v3
---
package-lock.json | 311 +++++++++++++++++++++++++++++-----------------
package.json | 2 +-
2 files changed, 197 insertions(+), 116 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 2af920e..143e12a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -156,6 +156,12 @@
}
}
},
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
"browser-unpack": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.2.0.tgz",
@@ -599,10 +605,13 @@
}
},
"commander": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz",
- "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=",
- "dev": true
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
},
"commondir": {
"version": "0.0.1",
@@ -715,6 +724,15 @@
"integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
"dev": true
},
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@@ -797,6 +815,12 @@
}
}
},
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
"diffie-hellman": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
@@ -839,9 +863,9 @@
}
},
"escape-string-regexp": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz",
- "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"events": {
@@ -886,6 +910,12 @@
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
"dev": true
},
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
"glob": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
@@ -898,6 +928,24 @@
"once": "1.4.0"
}
},
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
"hash-base": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
@@ -917,6 +965,12 @@
"minimalistic-assert": "1.0.0"
}
},
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -1086,30 +1140,6 @@
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
- "jade": {
- "version": "0.26.3",
- "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz",
- "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=",
- "dev": true,
- "requires": {
- "commander": "0.6.1",
- "mkdirp": "0.3.0"
- },
- "dependencies": {
- "commander": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz",
- "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
- "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=",
- "dev": true
- }
- }
- },
"json-stable-stringify": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
@@ -1119,6 +1149,12 @@
"jsonify": "0.0.0"
}
},
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
"jsonify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
@@ -1151,18 +1187,80 @@
"astw": "2.2.0"
}
},
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
"lodash.memoize": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
"integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
"dev": true
},
- "lru-cache": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
- "dev": true
- },
"md5.js": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
@@ -1222,85 +1320,65 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
"mocha": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz",
- "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
"dev": true,
"requires": {
- "commander": "2.3.0",
- "debug": "2.2.0",
- "diff": "1.4.0",
- "escape-string-regexp": "1.0.2",
- "glob": "3.2.11",
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
"growl": "1.9.2",
- "jade": "0.26.3",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
"mkdirp": "0.5.1",
- "supports-color": "1.2.0",
- "to-iso-string": "0.0.2"
+ "supports-color": "3.1.2"
},
"dependencies": {
- "debug": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
- "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
- "dev": true,
- "requires": {
- "ms": "0.7.1"
- }
- },
- "diff": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz",
- "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=",
- "dev": true
- },
"glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
- "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
"dev": true,
"requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
"inherits": "2.0.3",
- "minimatch": "0.3.0"
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
- "growl": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
- "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
- "dev": true
- },
"minimatch": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
- "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
- "dev": true,
- "requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "brace-expansion": "1.1.8"
}
- },
- "ms": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
- "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
- "dev": true
}
}
},
@@ -1365,6 +1443,12 @@
}
}
},
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
@@ -1429,6 +1513,12 @@
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
"dev": true
},
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
"path-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
@@ -1631,12 +1721,6 @@
"integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=",
"dev": true
},
- "sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
- "dev": true
- },
"source-map": {
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
@@ -1720,10 +1804,13 @@
}
},
"supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz",
- "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=",
- "dev": true
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
},
"syntax-error": {
"version": "1.3.0",
@@ -1775,12 +1862,6 @@
}
}
},
- "to-iso-string": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz",
- "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=",
- "dev": true
- },
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
diff --git a/package.json b/package.json
index 599c315..f12656d 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"coffeescript": "~1.9.0",
"watch": "~0.13.0",
"uglify-js": "~3.3.7",
- "mocha": "~2.5.3",
+ "mocha": "~3.5.3",
"browserify": "~8.1.3",
"coffeeify": "~1.0.0",
"bundle-collapser": "~1.1.1"
From 7432ab8793cf2de33f53b138dfe1300a3f19c8a8 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Mon, 9 Jul 2018 12:20:30 -0500
Subject: [PATCH 16/62] bump version to 1.2.4
---
CHANGELOG | 4 ++++
dist/jquery.payform.js | 9 ++++-----
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 9 ++++-----
dist/payform.min.js | 2 +-
package-lock.json | 2 +-
package.json | 2 +-
src/payform.coffee | 2 +-
8 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 9951cf6..8a121b6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+= 1.2.4
+ * Fix issue with cutting off last 2 digits of some cards (see #34 and #25)
+ * Update Mocha to 3.5.3 (CVE)
+
= 1.2.3
* Fix issue in handling full width characters (see PR #36)
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 5aa2908..8551098 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -37,7 +37,7 @@ payform = require(2);
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.3
+ Version: 1.2.4
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
@@ -411,7 +411,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
}
};
restrictCardNumber = function(e) {
- var card, digit, value;
+ var card, digit, maxLength, value;
digit = String.fromCharCode(e.which);
if (!/^\d+$/.test(digit)) {
return;
@@ -421,9 +421,8 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
}
value = (e.target.value + digit).replace(/\D/g, '');
card = cardFromNumber(value);
- if (card && value.length > card.length[card.length.length - 1]) {
- return e.preventDefault();
- } else if (value.length > 16) {
+ maxLength = card ? card.length[card.length.length - 1] : 16;
+ if (value.length > maxLength) {
return e.preventDefault();
}
};
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index cc7e5ba..8eeeeac 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index 408e638..a469d43 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.3
+ Version: 1.2.4
*/
(function() {
@@ -381,7 +381,7 @@
}
};
restrictCardNumber = function(e) {
- var card, digit, value;
+ var card, digit, maxLength, value;
digit = String.fromCharCode(e.which);
if (!/^\d+$/.test(digit)) {
return;
@@ -391,9 +391,8 @@
}
value = (e.target.value + digit).replace(/\D/g, '');
card = cardFromNumber(value);
- if (card && value.length > card.length[card.length.length - 1]) {
- return e.preventDefault();
- } else if (value.length > 16) {
+ maxLength = card ? card.length[card.length.length - 1] : 16;
+ if (value.length > maxLength) {
return e.preventDefault();
}
};
diff --git a/dist/payform.min.js b/dist/payform.min.js
index 116a662..a40bf41 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);if(card&&value.length>card.length[card.length.length-1]){return e.preventDefault()}else if(value.length>16){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 143e12a..3bcd806 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.3",
+ "version": "1.2.4",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index f12656d..8cbda5a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.3",
+ "version": "1.2.4",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
diff --git a/src/payform.coffee b/src/payform.coffee
index df0ce8b..b3f7e05 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.3
+ Version: 1.2.4
###
((name, definition) ->
if module?
From a4acaf187cde7d5b2debc243a725006c339cc23a Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 12 Jul 2018 10:01:56 -0400
Subject: [PATCH 17/62] Use property definition to normalize read-only event
target and which
---
src/payform.coffee | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index b3f7e05..eaff3be 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -29,8 +29,9 @@
_eventNormalize = (listener) ->
return (e = window.event) ->
- e.target = e.target or e.srcElement
- e.which = e.which or e.keyCode
+ Object.defineProperties e,
+ target: value: e.target or e.srcElement
+ which: value: e.which or e.keyCode
unless e.preventDefault?
e.preventDefault = -> this.returnValue = false
listener(e)
From d33261a83de4af5b94fe615b249ad89edca42d04 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Mon, 16 Jul 2018 13:19:20 -0400
Subject: [PATCH 18/62] Filter input events of type insertCompositionText for
Safari
---
src/payform.coffee | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/payform.coffee b/src/payform.coffee
index b3f7e05..a318d22 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -29,6 +29,8 @@
_eventNormalize = (listener) ->
return (e = window.event) ->
+ if e.inputType == 'insertCompositionText' and !e.isComposing
+ return
e.target = e.target or e.srcElement
e.which = e.which or e.keyCode
unless e.preventDefault?
From 8f72d2452a9fa817beb3ad7e7ed5668d0eb10d48 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 19 Jul 2018 11:32:52 -0400
Subject: [PATCH 19/62] Add LTR mark for credit card and expiry payform fields
---
src/payform.coffee | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/payform.coffee b/src/payform.coffee
index b3f7e05..2d61f01 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -200,6 +200,8 @@
reFormatCardNumber = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardNumber(e.target.value)
+ if e.target.value.indexOf('\u200e') == -1 and document.dir == 'rtl'
+ e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
@@ -261,6 +263,8 @@
reFormatExpiry = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardExpiry(e.target.value)
+ if e.target.value.indexOf('\u200e') == -1 and document.dir == 'rtl'
+ e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
From 8a3f31351e0cfa041ef3d3339708304da095da0f Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 12 Jul 2018 14:44:29 -0400
Subject: [PATCH 20/62] Normalize properties by creating synthetic events
---
src/payform.coffee | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index eaff3be..aed51ff 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -29,12 +29,21 @@
_eventNormalize = (listener) ->
return (e = window.event) ->
- Object.defineProperties e,
- target: value: e.target or e.srcElement
- which: value: e.which or e.keyCode
- unless e.preventDefault?
- e.preventDefault = -> this.returnValue = false
- listener(e)
+ if e.inputType == 'insertCompositionText' and !e.isComposing
+ return
+ newEvt =
+ target: e.target or e.srcElement
+ which: e.which or e.keyCode
+ type: e.type
+ metaKey: e.metaKey
+ ctrlKey: e.ctrlKey
+ preventDefault: ->
+ if e.preventDefault
+ e.preventDefault()
+ else
+ e.returnValue = false
+ return
+ listener(newEvt)
_on = (ele, event, listener) ->
listener = _eventNormalize(listener)
From 0a4011e1741e558ae5ed906a423fd62e0dcd37b7 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Mon, 30 Jul 2018 10:23:44 -0400
Subject: [PATCH 21/62] Shortcircuit RTL global attribute check
---
src/payform.coffee | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 2d61f01..9a38462 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -200,7 +200,7 @@
reFormatCardNumber = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardNumber(e.target.value)
- if e.target.value.indexOf('\u200e') == -1 and document.dir == 'rtl'
+ if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
@@ -263,7 +263,7 @@
reFormatExpiry = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardExpiry(e.target.value)
- if e.target.value.indexOf('\u200e') == -1 and document.dir == 'rtl'
+ if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
From 9db1075fd98dcd358aa29f124b68d147961624db Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Wed, 1 Aug 2018 09:29:56 +0200
Subject: [PATCH 22/62] create 1.2.5 release
---
CHANGELOG | 5 +++++
dist/jquery.payform.js | 33 +++++++++++++++++++++++++--------
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 33 +++++++++++++++++++++++++--------
dist/payform.min.js | 2 +-
package-lock.json | 2 +-
package.json | 2 +-
src/payform.coffee | 2 +-
8 files changed, 60 insertions(+), 21 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 8a121b6..140c2bd 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+= 1.2.5
+ * Fixes #37, allowing for vendoring and fix event normalization (PR #39)
+ * Fixes #38, full width character fixes for Safari
+ * Fixes #41, improve RTL support
+
= 1.2.4
* Fix issue with cutting off last 2 digits of some cards (see #34 and #25)
* Update Mocha to 3.5.3 (CVE)
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 8551098..9d2d55f 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -37,7 +37,7 @@ payform = require(2);
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.4
+ Version: 1.2.5
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
@@ -67,17 +67,28 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
_eventNormalize = function(listener) {
return function(e) {
+ var newEvt;
if (e == null) {
e = window.event;
}
- e.target = e.target || e.srcElement;
- e.which = e.which || e.keyCode;
- if (e.preventDefault == null) {
- e.preventDefault = function() {
- return this.returnValue = false;
- };
+ if (e.inputType === 'insertCompositionText' && !e.isComposing) {
+ return;
}
- return listener(e);
+ newEvt = {
+ target: e.target || e.srcElement,
+ which: e.which || e.keyCode,
+ type: e.type,
+ metaKey: e.metaKey,
+ ctrlKey: e.ctrlKey,
+ preventDefault: function() {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ }
+ };
+ return listener(newEvt);
};
};
_on = function(ele, event, listener) {
@@ -250,6 +261,9 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return;
}
e.target.value = payform.formatCardNumber(e.target.value);
+ if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ e.target.value = '\u200e'.concat(e.target.value);
+ }
cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
@@ -320,6 +334,9 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return;
}
e.target.value = payform.formatCardExpiry(e.target.value);
+ if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ e.target.value = '\u200e'.concat(e.target.value);
+ }
cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index 8eeeeac..433ffdf 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index a469d43..28e9d9f 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.4
+ Version: 1.2.5
*/
(function() {
@@ -37,17 +37,28 @@
};
_eventNormalize = function(listener) {
return function(e) {
+ var newEvt;
if (e == null) {
e = window.event;
}
- e.target = e.target || e.srcElement;
- e.which = e.which || e.keyCode;
- if (e.preventDefault == null) {
- e.preventDefault = function() {
- return this.returnValue = false;
- };
+ if (e.inputType === 'insertCompositionText' && !e.isComposing) {
+ return;
}
- return listener(e);
+ newEvt = {
+ target: e.target || e.srcElement,
+ which: e.which || e.keyCode,
+ type: e.type,
+ metaKey: e.metaKey,
+ ctrlKey: e.ctrlKey,
+ preventDefault: function() {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ }
+ };
+ return listener(newEvt);
};
};
_on = function(ele, event, listener) {
@@ -220,6 +231,9 @@
return;
}
e.target.value = payform.formatCardNumber(e.target.value);
+ if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ e.target.value = '\u200e'.concat(e.target.value);
+ }
cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
@@ -290,6 +304,9 @@
return;
}
e.target.value = payform.formatCardExpiry(e.target.value);
+ if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ e.target.value = '\u200e'.concat(e.target.value);
+ }
cursor = _getCaretPos(e.target);
if ((cursor != null) && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
diff --git a/dist/payform.min.js b/dist/payform.min.js
index a40bf41..0d17017 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 3bcd806..81dc216 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.4",
+ "version": "1.2.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index 8cbda5a..6ed5799 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.4",
+ "version": "1.2.5",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
diff --git a/src/payform.coffee b/src/payform.coffee
index ba83fc6..c2ebbfb 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.4
+ Version: 1.2.5
###
((name, definition) ->
if module?
From e23521c2178d831269a921dc75f3925f809170c9 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Mon, 6 Aug 2018 17:22:41 -0400
Subject: [PATCH 23/62] Extract KeyCodes into a variable, filter right and left
arrow keys on keypress
---
src/payform.coffee | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index c2ebbfb..10c092e 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -54,6 +54,16 @@
payform = {}
+ # Key Codes
+
+ keyCodes = {
+ UNKNOWN : 0,
+ BACKSPACE : 8,
+ PAGE_UP : 33,
+ ARROW_LEFT : 37,
+ ARROW_RIGHT : 39,
+ }
+
# Utils
defaultFormat = /(\d{1,4})/g
@@ -253,7 +263,7 @@
value = e.target.value
# Return unless backspacing
- return unless e.which is 8
+ return unless e.which is keyCodes.BACKSPACE
# Return if focus isn't at the end of the text
cursor = _getCaretPos(e.target)
@@ -312,7 +322,7 @@
value = e.target.value
# Return unless backspacing
- return unless e.which is 8
+ return unless e.which is keyCodes.BACKSPACE
# Return if focus isn't at the end of the text
cursor = _getCaretPos(e.target)
@@ -339,10 +349,10 @@
return if e.metaKey or e.ctrlKey
# If keycode is a special char (WebKit)
- return if e.which is 0
+ return if [keyCodes.UNKNOWN, keyCodes.ARROW_LEFT, keyCodes.ARROW_RIGHT].indexOf(e.which) > -1
# If char is a special char (Firefox)
- return if e.which < 33
+ return if e.which < keyCodes.PAGE_UP
input = String.fromCharCode(e.which)
From d0529af22f026676863a453becff402c83758f3a Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 8 Aug 2018 11:54:40 -0400
Subject: [PATCH 24/62] Set cursor position before formatting the card number
instead of after
---
src/payform.coffee | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index c2ebbfb..3f8ee6d 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -208,11 +208,11 @@
# Format Card Number
reFormatCardNumber = (e) ->
+ cursor = _getCaretPos(e.target)
return if e.target.value is ""
e.target.value = payform.formatCardNumber(e.target.value)
if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
- cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
From 8f2f0b433ff4e4e0dda6e9b1d07b9c6d3b65dea6 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Sun, 5 Aug 2018 14:44:22 +0100
Subject: [PATCH 25/62] Add hipercard & laser. Update patterns for others.
Based on https://github.com/jessepollak/payment/blob/329d687942098f8c25a8cbe6078ec07834ec6a8d/src/index.coffee
---
src/payform.coffee | 36 +++++++++++++++++++++++---------
test/validateCardCVC_spec.coffee | 6 +++++-
2 files changed, 31 insertions(+), 11 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 3f8ee6d..784ce36 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -63,7 +63,7 @@
# specific patterns than their credit-card equivalents.
{
type: 'elo'
- pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/
+ pattern: /^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)/
format: defaultFormat
length: [16]
cvcLength: [3]
@@ -79,7 +79,7 @@
}
{
type: 'maestro'
- pattern: /^(5(018|0[23]|[68])|6(39|7))/
+ pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/
format: defaultFormat
length: [12..19]
cvcLength: [3]
@@ -106,13 +106,13 @@
type: 'visa'
pattern: /^4/
format: defaultFormat
- length: [13, 16]
+ length: [13, 16, 19]
cvcLength: [3]
luhn: true
}
{
type: 'mastercard'
- pattern: /^(5[1-5]|2[2-7])/
+ pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/
format: defaultFormat
length: [16]
cvcLength: [3]
@@ -123,20 +123,20 @@
pattern: /^3[47]/
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/
length: [15]
- cvcLength: [3..4]
+ cvcLength: [4]
luhn: true
}
{
type: 'dinersclub'
- pattern: /^3[0689]/
- format: /(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/
+ pattern: /^(36|38|30[0-5])/
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/
length: [14]
cvcLength: [3]
luhn: true
}
{
type: 'discover'
- pattern: /^6([045]|22)/
+ pattern: /^(6011|65|64[4-9]|622)/
format: defaultFormat
length: [16]
cvcLength: [3]
@@ -144,7 +144,7 @@
}
{
type: 'unionpay'
- pattern: /^(62|88)/
+ pattern: /^62/
format: defaultFormat
length: [16..19]
cvcLength: [3]
@@ -158,6 +158,22 @@
cvcLength: [3]
luhn: true
}
+ {
+ type: 'hipercard'
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/
+ format: defaultFormat
+ length: [14..19]
+ cvcLength: [3]
+ luhn: true
+ }
+ {
+ type: 'laser'
+ pattern: /^(6706|6771|6709)/
+ format: defaultFormat
+ length: [16..19]
+ cvcLength: [3]
+ luhn: true
+ }
]
cardFromNumber = (num) ->
@@ -273,7 +289,7 @@
reFormatExpiry = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardExpiry(e.target.value)
- if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
+ if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
diff --git a/test/validateCardCVC_spec.coffee b/test/validateCardCVC_spec.coffee
index 3b116f2..2716155 100644
--- a/test/validateCardCVC_spec.coffee
+++ b/test/validateCardCVC_spec.coffee
@@ -27,8 +27,12 @@ describe 'payform', ->
topic = payform.validateCardCVC('123')
assert.equal topic, true
- it 'should validate a three digit number with card type amex', ->
+ it 'should fail a three digit number with card type amex', ->
topic = payform.validateCardCVC('123', 'amex')
+ assert.equal topic, false
+
+ it 'should validate a four digit number with card type amex', ->
+ topic = payform.validateCardCVC('1234', 'amex')
assert.equal topic, true
it 'should validate a three digit number with card type other than amex', ->
From 07c3c2cd0af36433bf6563dfe86aed1ef5fc20e3 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Thu, 16 Aug 2018 15:23:08 +0000
Subject: [PATCH 26/62] Add tests for hipercard
---
test/cardType_spec.coffee | 8 ++++++++
test/validateCardNumber_spec.coffee | 8 ++++++++
2 files changed, 16 insertions(+)
diff --git a/test/cardType_spec.coffee b/test/cardType_spec.coffee
index fec0bcb..6a5178e 100644
--- a/test/cardType_spec.coffee
+++ b/test/cardType_spec.coffee
@@ -66,6 +66,14 @@ describe 'payform', ->
assert.equal(payform.parseCardType('3530111333300000'), 'jcb')
assert.equal(payform.parseCardType('3566002020360505'), 'jcb')
+ assert.equal(payform.parseCardType('6062821086773091'), 'hipercard')
+ assert.equal(payform.parseCardType('6375683647504601'), 'hipercard')
+ assert.equal(payform.parseCardType('6370957513839696'), 'hipercard')
+ assert.equal(payform.parseCardType('6375688248373892'), 'hipercard')
+ assert.equal(payform.parseCardType('6012135281693108'), 'hipercard')
+ assert.equal(payform.parseCardType('38410036464094'), 'hipercard')
+ assert.equal(payform.parseCardType('38414050328938'), 'hipercard')
+
describe '#cards', ->
it 'should expose an array of standard card types', ->
cards = payform.cards
diff --git a/test/validateCardNumber_spec.coffee b/test/validateCardNumber_spec.coffee
index cb4a6cc..13b08bb 100644
--- a/test/validateCardNumber_spec.coffee
+++ b/test/validateCardNumber_spec.coffee
@@ -76,3 +76,11 @@ describe 'payform', ->
assert(payform.validateCardNumber('3530111333300000'), 'jcb')
assert(payform.validateCardNumber('3566002020360505'), 'jcb')
assert(payform.validateCardNumber('6362970000457013'), 'elo')
+
+ assert(payform.validateCardNumber('6062821086773091'), 'hipercard')
+ assert(payform.validateCardNumber('6375683647504601'), 'hipercard')
+ assert(payform.validateCardNumber('6370957513839696'), 'hipercard')
+ assert(payform.validateCardNumber('6375688248373892'), 'hipercard')
+ assert(payform.validateCardNumber('6012135281693108'), 'hipercard')
+ assert(payform.validateCardNumber('38410036464094'), 'hipercard')
+ assert(payform.validateCardNumber('38414050328938'), 'hipercard')
From c55e103b288d5fe4a7d065afa30867d42e99beab Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Thu, 16 Aug 2018 15:24:18 +0000
Subject: [PATCH 27/62] Add 17-19 digit JCB support
From https://github.com/jessepollak/payment/pull/84
---
src/payform.coffee | 2 +-
test/cardType_spec.coffee | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 784ce36..a1fde39 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -154,7 +154,7 @@
type: 'jcb'
pattern: /^35/
format: defaultFormat
- length: [16]
+ length: [16..19]
cvcLength: [3]
luhn: true
}
diff --git a/test/cardType_spec.coffee b/test/cardType_spec.coffee
index 6a5178e..b1b8ffc 100644
--- a/test/cardType_spec.coffee
+++ b/test/cardType_spec.coffee
@@ -65,6 +65,7 @@ describe 'payform', ->
assert.equal(payform.parseCardType('3530111333300000'), 'jcb')
assert.equal(payform.parseCardType('3566002020360505'), 'jcb')
+ assert.equal(payform.parseCardType('3536408073177691495'), 'jcb')
assert.equal(payform.parseCardType('6062821086773091'), 'hipercard')
assert.equal(payform.parseCardType('6375683647504601'), 'hipercard')
From e419f66104e43754143dce667165809833d2fc80 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Thu, 16 Aug 2018 15:33:34 +0000
Subject: [PATCH 28/62] Move hipercard above dinersclub for specificity
---
src/payform.coffee | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index a1fde39..45f3ce1 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -126,6 +126,15 @@
cvcLength: [4]
luhn: true
}
+ # Must be above dinersclub.
+ {
+ type: 'hipercard'
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/
+ format: defaultFormat
+ length: [14..19]
+ cvcLength: [3]
+ luhn: true
+ }
{
type: 'dinersclub'
pattern: /^(36|38|30[0-5])/
@@ -158,14 +167,6 @@
cvcLength: [3]
luhn: true
}
- {
- type: 'hipercard'
- pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/
- format: defaultFormat
- length: [14..19]
- cvcLength: [3]
- luhn: true
- }
{
type: 'laser'
pattern: /^(6706|6771|6709)/
From 365b1bb6516de0bad05447bfbd496d59ecf460f2 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Fri, 14 Sep 2018 21:50:17 -0400
Subject: [PATCH 29/62] Ignore single digit removal when selection length is
not equal to 1
---
src/payform.coffee | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/payform.coffee b/src/payform.coffee
index c2ebbfb..7ef482c 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -259,6 +259,8 @@
cursor = _getCaretPos(e.target)
return if cursor and cursor isnt value.length
+ return if (e.target.selectionEnd - e.target.selectionStart) > 1
+
# Remove the digit + trailing space
if /\d\s$/.test(value)
e.preventDefault()
From 9834ab550337fe490ab5ed1b4ffb7d1e5707da21 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 13 Sep 2018 11:27:35 -0400
Subject: [PATCH 30/62] Add documentation for credit and debit card IIN
patterns
---
CARDRULES.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 104 insertions(+)
create mode 100644 CARDRULES.md
diff --git a/CARDRULES.md b/CARDRULES.md
new file mode 100644
index 0000000..4999801
--- /dev/null
+++ b/CARDRULES.md
@@ -0,0 +1,104 @@
+# Supported Card Types
+
+The following list contains Issuer Identification Number (IIN) patterns and length for all debit and credit card types supported by Payform. Please note that while references are provided, there may be some missing matching patterns. Nevertheless, the current regular expressions used are valid with respect to these sources.
+
+## Credit Cards
+
+### American Express
+
+**IIN Pattern:** 34, 37 [1]
+
+**Length:** 15 [2]
+
+### Diners Club
+
+**IIN Pattern:** 36, 38, 30[0-5] [3]
+
+**Length:** 14 [3]
+
+### Discover
+
+**IIN Pattern:** 6011, 65, 64[4-9], 622 [3]
+
+**Length:** 16 [3]
+
+### Hipercard
+
+**IIN Pattern:** 384100, 384140, 384160, 606282, 637095, 637568, 60(?!11) [4], [5]
+
+**Length:** 14-19
+
+### JCB
+
+**IIN Pattern:** 35 [3]
+
+**Length:** 16-19 [3]
+
+### Mastercard
+
+
+**IIN Pattern:** 5[1-5], 677189 ,222[1-9], 2[3-6][0-9][0-9], 27[0-1][0-9], 2720 [1], [6]
+
+**Length:** 16
+
+### Unionpay
+
+**IIN Pattern:** 62 [3]
+
+**Length:** 16-19 [3]
+
+### Visa
+
+**IIN Pattern:** 4 [7]
+
+**Length:** 13, 16, 19
+
+## Debit Cards
+
+### Dankkort
+
+**IIN Pattern:** 5019 [8]
+
+**Length:** 16
+
+### Elo
+
+**IIN Pattern:** (4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021) [9], [10]
+
+**Length:** 16
+
+### Forbrugsforeningen
+
+**IIN Pattern:** 600 [11]
+
+**Length:** 16
+
+### Maestro
+
+**IIN Pattern:** 5018, 5020, 5038, 6304, 6703, 6708, 6759, 676[1-3] [12]
+
+**Length:** 12-19
+
+### Visa Electron
+
+**IIN Pattern:** 4026, 417500, 4405, 4508, 4844, 4913, 4917 [7]
+
+**Length:** 16
+
+
+
+[1]: https://www.moneris.com/-/media/Moneris/Files/EN/Support/Compliance-Information/CAG_booklet.pdf
+[2]: https://www.cybersource.com/developers/getting_started/test_and_manage/best_practices/card_type_id/
+[3]: https://www.discovernetwork.com/downloads/IPP_VAR_Compliance.pdf
+[4]: https://mage2.pro/t/topic/3865
+[5]: https://stevemorse.org/ssn/List_of_Bank_Identification_Numbers.html
+[6]: https://www.mastercard.us/en-us/issuers/get-support/2-series-bin-expansion.html
+[7]: https://baymard.com/checkout-usability/credit-card-patterns
+[8]: https://www.nets.eu/dk-da/kundeservice/Verifikation%20af%20betalingsl%C3%B8sninger/Documents/ct-trg-otrs-en.pdf
+[9]: https://mage2.pro/t/topic/3867
+[10]: https://github.com/Adyen/adyen-magento/issues/236
+[11]: https://tech.dibspayment.com/D2/Toolbox/Test_information/Cards
+[12]: http://blog.unibulmerchantservices.com/12-signs-of-a-valid-mastercard-card/
+
+
+
From f0ad23a83d570232d5c66328ead69be5840c410f Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 28 Sep 2018 17:43:41 -0500
Subject: [PATCH 31/62] add release instructions to contributing.md
---
CONTRIBUTING.md | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bab2c59..2a187b5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -37,3 +37,40 @@ Good Pull Requests include:
- A clear explaination of the problem (or enhancement)
- Clean commit history (squash where it makes sense)
- Relevant Tests (either updated and/or new)
+
+## Release Process
+
+We strive for [semantic versioning]() for our version number assignment, and utilize the [git flow]() tool to execute releases in the repository.
+
+All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using the
+
+```
+ $> git flow release start 1.x.x
+```
+
+This should give you a release branch off develop and some relevant instructions.
+
+This is when you should:
+ - Bump the version numbers in both `src/payform.coffee` and `package.json`
+ - Update the `CHANGELOG`
+ - Run `make clean && make build`
+
+Once you've done this and committed these changes to the release branch, you are ready to run:
+
+```
+ $> git flow release finish 1.x.x
+```
+
+This will:
+ - Merge the release branch into `master` and also back into `develop`
+ - Create a tag for the release and prompt you for an annotation (I usually paste in the relevant `CHANGELOG` entry)
+
+At this point you should push `master` and `develop`, and also the new tag with `git push --tags`
+
+### Publishing to npm
+
+Once the release process is complete, and you're confident it is correct, you should be able to publish to npm with
+
+```
+ $> npm publish
+```
From fa405deba26ebc46d2f0dc905958d16b56c4067f Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Fri, 28 Sep 2018 17:45:20 -0500
Subject: [PATCH 32/62] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2a187b5..f515fe0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -40,7 +40,7 @@ Good Pull Requests include:
## Release Process
-We strive for [semantic versioning]() for our version number assignment, and utilize the [git flow]() tool to execute releases in the repository.
+We strive for [semantic versioning](https://semver.org/) for our version number assignment, and utilize the [git flow](https://github.com/nvie/gitflow) tool to execute releases in the repository.
All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using the
From d61bcab2e48ce438280c0f2ef53236823b69b49d Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 28 Sep 2018 17:48:39 -0500
Subject: [PATCH 33/62] add note about running tests before release
---
CONTRIBUTING.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f515fe0..74e8900 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -53,6 +53,7 @@ This should give you a release branch off develop and some relevant instructions
This is when you should:
- Bump the version numbers in both `src/payform.coffee` and `package.json`
- Update the `CHANGELOG`
+ - Ensure the tests pas with `make test`
- Run `make clean && make build`
Once you've done this and committed these changes to the release branch, you are ready to run:
From e3cbe69d4a7affefb5a302ac8d457a05ac11307e Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Fri, 28 Sep 2018 17:58:36 -0500
Subject: [PATCH 34/62] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 74e8900..07e9172 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -42,7 +42,7 @@ Good Pull Requests include:
We strive for [semantic versioning](https://semver.org/) for our version number assignment, and utilize the [git flow](https://github.com/nvie/gitflow) tool to execute releases in the repository.
-All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using the
+All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using
```
$> git flow release start 1.x.x
@@ -52,7 +52,7 @@ This should give you a release branch off develop and some relevant instructions
This is when you should:
- Bump the version numbers in both `src/payform.coffee` and `package.json`
- - Update the `CHANGELOG`
+ - Update the `CHANGELOG` by adding a new section for this version
- Ensure the tests pas with `make test`
- Run `make clean && make build`
From 6498aef27a0c268745ea1a96943599cc8086f70e Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 11 Oct 2018 18:43:06 -0400
Subject: [PATCH 35/62] Clear control characters from expiry date string before
parsing (#50)
* Clear control characters from expiry date string before parsing
* Add comment to explain U200E character removal
---
src/payform.coffee | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 8e5e841..fe02196 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -461,7 +461,8 @@
prefix = prefix.toString()[0..1]
year = prefix + year
- month = parseInt(month, 10)
+ # Remove left-to-right mark LTR invisible unicode control character used in right-to-left contexts
+ month = parseInt(month.replace(/[\u200e]/g, ""), 10);
year = parseInt(year, 10)
month: month, year: year
From f8f971eac5d640b1e28a959f62801add8544800c Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Fri, 12 Oct 2018 14:01:44 -0500
Subject: [PATCH 36/62] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 07e9172..12de76d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -42,6 +42,14 @@ Good Pull Requests include:
We strive for [semantic versioning](https://semver.org/) for our version number assignment, and utilize the [git flow](https://github.com/nvie/gitflow) tool to execute releases in the repository.
+You can initialize git flow once it is installed with
+
+```
+ $> git flow init -d
+```
+
+This will use the default branch naming conventions for git flow.
+
All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using
```
From 9e769c41461d9332f11327df18293b3fa3076e66 Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Wed, 17 Oct 2018 09:04:16 -0500
Subject: [PATCH 37/62] Update README.md
---
README.md | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 7f99bf9..b3b9b12 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,20 @@
+---
+
+
Hi! Do you use webpack?
+
+
+ I'm currently working on a product that will help you keep track of the assets you're producing and their delivery performance concerns. Along with reporting those stats right to your GitHub pull requests.
+
+
+ Check it out at packtracker.io and request early access if you want to help me kick the tires!
+
+
+---
# payform
[](https://travis-ci.org/jondavidjohn/payform)

-[](https://npmjs.org/package/payform)
-
A general purpose library for building credit card forms, validating inputs, and formatting numbers.
Supported card types:
From ad7fb7f7cae8f0295c0e361d3a37050d73a18e08 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 17 Oct 2018 10:15:37 -0400
Subject: [PATCH 38/62] Update Browserify and Mocha to address dependency
vulnerabilities (#52)
* Update Browserify to address dependcy vulnerabilities
* Update Mocha to address dependcy vulnerabilities
---
package-lock.json | 2167 +++++++++++++++++++++++++--------------------
package.json | 10 +-
2 files changed, 1232 insertions(+), 945 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 81dc216..73002f6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,20 +4,14 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "Base64": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
- "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
- "dev": true
- },
"JSONStream": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
- "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
"dev": true,
"requires": {
- "jsonparse": "0.0.5",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
}
},
"acorn": {
@@ -26,47 +20,98 @@
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
"dev": true
},
+ "acorn-node": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.0.tgz",
+ "integrity": "sha512-ZsysjEh+Y3i14f7YXCAKJy99RXbd56wHKYBzN4FlFtICIZyFpYwK6OwNJhcz8A/FMtxoUZkJofH1v9KIfNgWmw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz",
+ "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz",
+ "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==",
+ "dev": true
+ },
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true
},
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
"asn1.js": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
- "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"assert": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz",
- "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
"dev": true,
"requires": {
"util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
}
},
- "astw": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
- "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13"
- }
- },
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
- "dev": true
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -74,9 +119,9 @@
"dev": true
},
"base64-js": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
- "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
"bn.js": {
@@ -91,7 +136,7 @@
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
@@ -102,47 +147,110 @@
"dev": true
},
"browser-pack": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-3.2.0.tgz",
- "integrity": "sha1-+qHLxBSHsazEdH43PhFIrf/Q4tk=",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
"dev": true,
"requires": {
- "JSONStream": "0.8.4",
- "combine-source-map": "0.3.0",
- "concat-stream": "1.4.10",
- "defined": "0.0.0",
- "through2": "0.5.1",
- "umd": "2.1.0"
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
},
"dependencies": {
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
"readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
}
},
"through2": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
- "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"browser-resolve": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
- "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
"dev": true,
"requires": {
"resolve": "1.1.7"
@@ -157,9 +265,9 @@
}
},
"browser-stdout": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
- "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"browser-unpack": {
@@ -168,10 +276,10 @@
"integrity": "sha1-NXruMfxGeDFoTQY+Q1XgcKeClw0=",
"dev": true,
"requires": {
- "acorn": "4.0.13",
- "browser-pack": "5.0.1",
- "concat-stream": "1.6.0",
- "minimist": "1.2.0"
+ "acorn": "^4.0.3",
+ "browser-pack": "^5.0.1",
+ "concat-stream": "^1.5.0",
+ "minimist": "^1.1.1"
},
"dependencies": {
"JSONStream": {
@@ -180,8 +288,8 @@
"integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
}
},
"browser-pack": {
@@ -190,11 +298,11 @@
"integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.6.1",
- "defined": "1.0.0",
- "through2": "1.1.1",
- "umd": "3.0.1"
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.6.1",
+ "defined": "^1.0.0",
+ "through2": "^1.0.0",
+ "umd": "^3.0.0"
}
},
"combine-source-map": {
@@ -203,10 +311,10 @@
"integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
"dev": true,
"requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.5.0",
- "lodash.memoize": "3.0.4",
- "source-map": "0.4.4"
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.5.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.4.2"
}
},
"concat-stream": {
@@ -215,9 +323,9 @@
"integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "typedarray": "0.0.6"
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"convert-source-map": {
@@ -238,7 +346,7 @@
"integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
"dev": true,
"requires": {
- "source-map": "0.4.4"
+ "source-map": "~0.4.0"
}
},
"isarray": {
@@ -259,13 +367,13 @@
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3",
+ "util-deprecate": "~1.0.1"
}
},
"source-map": {
@@ -274,7 +382,7 @@
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
},
"string_decoder": {
@@ -283,7 +391,7 @@
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "~5.1.0"
}
},
"umd": {
@@ -295,96 +403,170 @@
}
},
"browserify": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-8.1.3.tgz",
- "integrity": "sha1-8zpUmjpsNoIZsHX9z+bfGV4Empo=",
- "dev": true,
- "requires": {
- "JSONStream": "0.8.4",
- "assert": "1.3.0",
- "browser-pack": "3.2.0",
- "browser-resolve": "1.11.2",
- "browserify-zlib": "0.1.4",
- "buffer": "3.6.0",
- "builtins": "0.0.7",
- "commondir": "0.0.1",
- "concat-stream": "1.4.10",
- "console-browserify": "1.1.0",
- "constants-browserify": "0.0.1",
- "crypto-browserify": "3.12.0",
- "deep-equal": "0.2.2",
- "defined": "0.0.0",
- "deps-sort": "1.3.9",
- "domain-browser": "1.1.7",
- "duplexer2": "0.0.2",
- "events": "1.0.2",
- "glob": "4.5.3",
- "http-browserify": "1.7.0",
- "https-browserify": "0.0.1",
- "inherits": "2.0.3",
- "insert-module-globals": "6.6.3",
- "isarray": "0.0.1",
- "labeled-stream-splicer": "1.0.2",
- "module-deps": "3.9.1",
- "os-browserify": "0.1.2",
- "parents": "1.0.1",
- "path-browserify": "0.0.0",
- "process": "0.10.1",
- "punycode": "1.2.4",
- "querystring-es3": "0.2.1",
- "readable-stream": "1.1.14",
- "resolve": "0.7.4",
- "shallow-copy": "0.0.1",
- "shasum": "1.0.2",
- "shell-quote": "0.0.1",
- "stream-browserify": "1.0.0",
- "string_decoder": "0.10.31",
- "subarg": "1.0.0",
- "syntax-error": "1.3.0",
- "through2": "1.1.1",
- "timers-browserify": "1.4.2",
- "tty-browserify": "0.0.0",
- "umd": "2.1.0",
- "url": "0.10.3",
- "util": "0.10.3",
- "vm-browserify": "0.0.4",
- "xtend": "3.0.0"
+ "version": "16.2.3",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz",
+ "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
}
},
"browserify-aes": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
- "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
"requires": {
- "buffer-xor": "1.0.3",
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"browserify-cipher": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
- "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
"dev": true,
"requires": {
- "browserify-aes": "1.1.1",
- "browserify-des": "1.0.0",
- "evp_bytestokey": "1.0.3"
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
}
},
"browserify-des": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
- "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "des.js": "1.0.0",
- "inherits": "2.0.3"
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"browserify-rsa": {
@@ -393,8 +575,8 @@
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
}
},
"browserify-sign": {
@@ -403,53 +585,50 @@
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "elliptic": "6.4.0",
- "inherits": "2.0.3",
- "parse-asn1": "5.1.0"
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
}
},
"browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
"requires": {
- "pako": "0.2.9"
+ "pako": "~1.0.5"
}
},
"buffer": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",
- "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
+ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
"dev": true,
"requires": {
- "base64-js": "0.0.8",
- "ieee754": "1.1.8",
- "isarray": "1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
}
},
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
"dev": true
},
- "builtins": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz",
- "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=",
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
"dev": true
},
"bundle-collapser": {
@@ -458,12 +637,12 @@
"integrity": "sha1-N0cPUrdOq5jiD7j9MZsE65pJWyM=",
"dev": true,
"requires": {
- "browser-pack": "4.0.4",
- "browser-unpack": "1.2.0",
- "concat-stream": "1.4.10",
- "falafel": "1.2.0",
- "minimist": "0.2.0",
- "through2": "1.1.1"
+ "browser-pack": "^4.0.0",
+ "browser-unpack": "^1.0.0",
+ "concat-stream": "^1.4.6",
+ "falafel": "^1.0.0",
+ "minimist": "^0.2.0",
+ "through2": "^1.0.0"
},
"dependencies": {
"JSONStream": {
@@ -472,8 +651,8 @@
"integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
}
},
"browser-pack": {
@@ -482,12 +661,12 @@
"integrity": "sha1-ja6VogykOz/qIB+qbPqoT/Sg1IQ=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.3.0",
- "concat-stream": "1.4.10",
- "defined": "1.0.0",
- "through2": "0.5.1",
- "umd": "3.0.1"
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.3.0",
+ "concat-stream": "~1.4.1",
+ "defined": "^1.0.0",
+ "through2": "~0.5.1",
+ "umd": "^3.0.0"
},
"dependencies": {
"through2": {
@@ -496,8 +675,8 @@
"integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "readable-stream": "~1.0.17",
+ "xtend": "~3.0.0"
}
}
}
@@ -526,10 +705,10 @@
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
"umd": {
@@ -540,16 +719,10 @@
}
}
},
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
- "dev": true
- },
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "cached-path-relative": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
"dev": true
},
"cipher-base": {
@@ -558,8 +731,8 @@
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"coffee-script": {
@@ -574,9 +747,9 @@
"integrity": "sha1-7DjH9W1F+xgLnSjmXH5dEAmxFjU=",
"dev": true,
"requires": {
- "coffee-script": "1.9.3",
- "convert-source-map": "0.4.1",
- "through": "2.3.8"
+ "coffee-script": "^1.8.0",
+ "convert-source-map": "^0.4.1",
+ "through": "^2.3.6"
},
"dependencies": {
"convert-source-map": {
@@ -599,24 +772,15 @@
"integrity": "sha1-2edPWT2c1DgHMSy12EbUUe+qnrc=",
"dev": true,
"requires": {
- "convert-source-map": "0.3.5",
- "inline-source-map": "0.3.1",
- "source-map": "0.1.43"
+ "convert-source-map": "~0.3.0",
+ "inline-source-map": "~0.3.0",
+ "source-map": "~0.1.31"
}
},
"commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": "1.0.1"
- }
- },
- "commondir": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz",
- "integrity": "sha1-ifAP3NUbUZxXhzP+xWPmptp/W+I=",
+ "version": "2.15.1",
+ "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"concat-map": {
@@ -631,9 +795,9 @@
"integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14",
- "typedarray": "0.0.6"
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.9",
+ "typedarray": "~0.0.5"
}
},
"console-browserify": {
@@ -642,13 +806,13 @@
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
"dev": true,
"requires": {
- "date-now": "0.1.4"
+ "date-now": "^0.1.4"
}
},
"constants-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz",
- "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
"dev": true
},
"convert-source-map": {
@@ -664,39 +828,40 @@
"dev": true
},
"create-ecdh": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
- "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "elliptic": "6.4.0"
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
}
},
"create-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
- "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "sha.js": "2.4.9"
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
}
},
"create-hmac": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
- "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "version": "1.1.7",
+ "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.9"
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
"crypto-browserify": {
@@ -705,17 +870,17 @@
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
"dev": true,
"requires": {
- "browserify-cipher": "1.0.0",
- "browserify-sign": "4.0.4",
- "create-ecdh": "4.0.0",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "diffie-hellman": "5.0.2",
- "inherits": "2.0.3",
- "pbkdf2": "3.0.14",
- "public-encrypt": "4.0.0",
- "randombytes": "2.0.6",
- "randomfill": "1.0.3"
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
}
},
"date-now": {
@@ -725,58 +890,82 @@
"dev": true
},
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "deep-equal": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
- "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=",
- "dev": true
- },
"defined": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz",
- "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
"dev": true
},
"deps-sort": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.9.tgz",
- "integrity": "sha1-Kd//U+F7Nq7K51MK27v2IsLtGnE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "shasum": "1.0.2",
- "subarg": "1.0.0",
- "through2": "1.1.1"
+ "JSONStream": "^1.0.3",
+ "shasum": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
@@ -787,79 +976,104 @@
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"detective": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
- "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
+ "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
"dev": true,
"requires": {
- "acorn": "5.3.0",
- "defined": "1.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz",
- "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==",
- "dev": true
- },
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- }
+ "acorn-node": "^1.3.0",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
}
},
"diff": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
- "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"diffie-hellman": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
- "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "version": "5.0.3",
+ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "miller-rabin": "4.0.1",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
}
},
"domain-browser": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
- "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
"dev": true
},
"duplexer2": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14"
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"elliptic": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
- "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0",
- "hash.js": "1.1.3",
- "hmac-drbg": "1.0.1",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
}
},
"escape-string-regexp": {
@@ -869,9 +1083,9 @@
"dev": true
},
"events": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz",
- "integrity": "sha1-dYSdz+k9EPsFfDAFWv29UdBqjiQ=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
"dev": true
},
"evp_bytestokey": {
@@ -880,8 +1094,8 @@
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"requires": {
- "md5.js": "1.3.4",
- "safe-buffer": "5.1.1"
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
}
},
"falafel": {
@@ -890,10 +1104,10 @@
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
"dev": true,
"requires": {
- "acorn": "1.2.2",
- "foreach": "2.0.5",
+ "acorn": "^1.0.3",
+ "foreach": "^2.0.5",
"isarray": "0.0.1",
- "object-keys": "1.0.11"
+ "object-keys": "^1.0.6"
},
"dependencies": {
"acorn": {
@@ -916,53 +1130,71 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
"glob": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
- "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "2.0.10",
- "once": "1.4.0"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
- },
"growl": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
- "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
},
"hash-base": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
- "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
"dev": true,
"requires": {
- "inherits": "2.0.3"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"hash.js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
- "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
+ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
}
},
"he": {
@@ -977,37 +1209,27 @@
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
- "hash.js": "1.1.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
}
},
- "http-browserify": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz",
- "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=",
- "dev": true,
- "requires": {
- "Base64": "0.2.1",
- "inherits": "2.0.3"
- }
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
},
"https-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
- "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
"ieee754": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
- "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
- "dev": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
"dev": true
},
"inflight": {
@@ -1016,8 +1238,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -1032,7 +1254,7 @@
"integrity": "sha1-pSi1FOaJ/OkNswiehw2S9Sestes=",
"dev": true,
"requires": {
- "source-map": "0.3.0"
+ "source-map": "~0.3.0"
},
"dependencies": {
"source-map": {
@@ -1041,47 +1263,51 @@
"integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
}
}
},
"insert-module-globals": {
- "version": "6.6.3",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.6.3.tgz",
- "integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.6.1",
- "concat-stream": "1.4.10",
- "is-buffer": "1.1.6",
- "lexical-scope": "1.2.0",
- "process": "0.11.10",
- "through2": "1.1.1",
- "xtend": "4.0.1"
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
+ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
}
},
- "combine-source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
- "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.5.0",
- "lodash.memoize": "3.0.4",
- "source-map": "0.4.4"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"convert-source-map": {
@@ -1091,33 +1317,64 @@
"dev": true
},
"inline-source-map": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
- "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
"dev": true,
"requires": {
- "source-map": "0.4.4"
+ "source-map": "~0.5.3"
}
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
"source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
},
"xtend": {
@@ -1146,15 +1403,9 @@
"integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
"dev": true,
"requires": {
- "jsonify": "0.0.0"
+ "jsonify": "~0.0.0"
}
},
- "json3": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
- "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
- "dev": true
- },
"jsonify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
@@ -1162,97 +1413,28 @@
"dev": true
},
"jsonparse": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
- "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
"labeled-stream-splicer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
- "integrity": "sha1-RhUzFTd4SYHo/SZOHzpDTE4N3WU=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "stream-splicer": "1.3.2"
- }
- },
- "lexical-scope": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
- "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
- "dev": true,
- "requires": {
- "astw": "2.2.0"
- }
- },
- "lodash._baseassign": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
- "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
- "dev": true,
- "requires": {
- "lodash._basecopy": "3.0.1",
- "lodash.keys": "3.1.2"
- }
- },
- "lodash._basecopy": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
- "dev": true
- },
- "lodash._basecreate": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
- "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
- "dev": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
- "dev": true
- },
- "lodash._isiterateecall": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
- "dev": true
- },
- "lodash.create": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
- "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
- "dev": true,
- "requires": {
- "lodash._baseassign": "3.2.0",
- "lodash._basecreate": "3.0.3",
- "lodash._isiterateecall": "3.0.9"
- }
- },
- "lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
- "dev": true
- },
- "lodash.isarray": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
- "dev": true
- },
- "lodash.keys": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
"dev": true,
"requires": {
- "lodash._getnative": "3.9.1",
- "lodash.isarguments": "3.1.0",
- "lodash.isarray": "3.0.4"
+ "inherits": "^2.0.1",
+ "isarray": "^2.0.4",
+ "stream-splicer": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "dev": true
+ }
}
},
"lodash.memoize": {
@@ -1262,24 +1444,21 @@
"dev": true
},
"md5.js": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
- "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
"requires": {
- "hash-base": "3.0.4",
- "inherits": "2.0.3"
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
},
"dependencies": {
- "hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
- }
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
@@ -1289,14 +1468,14 @@
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0"
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
}
},
"minimalistic-assert": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
- "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
"minimalistic-crypto-utils": {
@@ -1306,12 +1485,12 @@
"dev": true
},
"minimatch": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
@@ -1338,101 +1517,119 @@
}
},
"mocha": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
- "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
- "browser-stdout": "1.3.0",
- "commander": "2.9.0",
- "debug": "2.6.8",
- "diff": "3.2.0",
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
"escape-string-regexp": "1.0.5",
- "glob": "7.1.1",
- "growl": "1.9.2",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
"he": "1.1.1",
- "json3": "3.3.2",
- "lodash.create": "3.1.1",
+ "minimatch": "3.0.4",
"mkdirp": "0.5.1",
- "supports-color": "3.1.2"
+ "supports-color": "5.4.0"
},
"dependencies": {
"glob": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
- "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.8"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
}
}
},
"module-deps": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.9.1.tgz",
- "integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "browser-resolve": "1.11.2",
- "concat-stream": "1.4.10",
- "defined": "1.0.0",
- "detective": "4.7.1",
- "duplexer2": "0.0.2",
- "inherits": "2.0.3",
- "parents": "1.0.1",
- "readable-stream": "1.1.14",
- "resolve": "1.5.0",
- "stream-combiner2": "1.0.2",
- "subarg": "1.0.0",
- "through2": "1.1.1",
- "xtend": "4.0.1"
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.1.0.tgz",
+ "integrity": "sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.0.2",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
- "defined": {
+ "isarray": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
- "resolve": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
},
"xtend": {
@@ -1461,28 +1658,19 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
- }
- },
- "optimist": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
- "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
- "dev": true,
- "requires": {
- "wordwrap": "0.0.3"
+ "wrappy": "1"
}
},
"os-browserify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
- "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
"pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
"dev": true
},
"parents": {
@@ -1491,26 +1679,26 @@
"integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
"dev": true,
"requires": {
- "path-platform": "0.11.15"
+ "path-platform": "~0.11.15"
}
},
"parse-asn1": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
- "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "version": "5.1.1",
+ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
"dev": true,
"requires": {
- "asn1.js": "4.9.2",
- "browserify-aes": "1.1.1",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "pbkdf2": "3.0.14"
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
}
},
"path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true
},
"path-is-absolute": {
@@ -1520,9 +1708,9 @@
"dev": true
},
"path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"path-platform": {
@@ -1532,22 +1720,22 @@
"dev": true
},
"pbkdf2": {
- "version": "3.0.14",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
- "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"dev": true,
"requires": {
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.9"
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
"process": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz",
- "integrity": "sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU=",
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
"dev": true
},
"process-nextick-args": {
@@ -1557,22 +1745,31 @@
"dev": true
},
"public-encrypt": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
- "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "parse-asn1": "5.1.0",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"punycode": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz",
- "integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A=",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
"querystring": {
@@ -1593,17 +1790,64 @@
"integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.1.0"
}
},
"randomfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
- "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"requires": {
- "randombytes": "2.0.6",
- "safe-buffer": "5.1.1"
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"readable-stream": {
@@ -1612,75 +1856,29 @@
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
- },
- "readable-wrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz",
- "integrity": "sha1-O1ohHGMeEjA6VJkcgGwX564ga/8=",
- "dev": true,
- "requires": {
- "readable-stream": "1.1.14"
+ "string_decoder": "~0.10.x"
}
},
"resolve": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz",
- "integrity": "sha1-OVqe+ehz+/4SvRRAi9kbuTYAPWk=",
- "dev": true
- },
- "rfile": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rfile/-/rfile-1.0.0.tgz",
- "integrity": "sha1-WXCM+Qyh50xUw8/Fw2/bmBBDUmE=",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"dev": true,
"requires": {
- "callsite": "1.0.0",
- "resolve": "0.3.1"
- },
- "dependencies": {
- "resolve": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.3.1.tgz",
- "integrity": "sha1-NMY0R8ZkxwWY0cmxJvxDsqJDEKQ=",
- "dev": true
- }
+ "path-parse": "^1.0.5"
}
},
"ripemd160": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
- "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
- "dev": true,
- "requires": {
- "hash-base": "2.0.2",
- "inherits": "2.0.3"
- }
- },
- "ruglify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ruglify/-/ruglify-1.0.0.tgz",
- "integrity": "sha1-3Ikw4qlUSidDAcyZcldMDQmGtnU=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"requires": {
- "rfile": "1.0.0",
- "uglify-js": "2.2.5"
- },
- "dependencies": {
- "uglify-js": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
- "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
- "dev": true,
- "requires": {
- "optimist": "0.3.7",
- "source-map": "0.1.43"
- }
- }
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
}
},
"safe-buffer": {
@@ -1690,35 +1888,41 @@
"dev": true
},
"sha.js": {
- "version": "2.4.9",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
- "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "version": "2.4.11",
+ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
- "shallow-copy": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
- "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
- "dev": true
- },
"shasum": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
"integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
"dev": true,
"requires": {
- "json-stable-stringify": "0.0.1",
- "sha.js": "2.4.9"
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
}
},
"shell-quote": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz",
- "integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "~0.0.0",
+ "array-map": "~0.0.0",
+ "array-reduce": "~0.0.0",
+ "jsonify": "~0.0.0"
+ }
+ },
+ "simple-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
"dev": true
},
"source-map": {
@@ -1727,65 +1931,208 @@
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
},
"stream-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz",
- "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14"
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"stream-combiner2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.2.tgz",
- "integrity": "sha1-unKmtQy/q/qVD8i8h2BL0B62BnE=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
"dev": true,
"requires": {
- "duplexer2": "0.0.2",
- "through2": "0.5.1"
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
},
"dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
"readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "through2": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
- "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "safe-buffer": "~5.1.0"
}
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"stream-splicer": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.2.tgz",
- "integrity": "sha1-PARBvhW5v04iYnXm3IOWR0VUZmE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
"dev": true,
"requires": {
- "indexof": "0.0.1",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "readable-stream": "1.1.14",
- "readable-wrap": "1.0.0",
- "through2": "1.1.1"
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"string_decoder": {
@@ -1800,25 +2147,25 @@
"integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "minimist": "^1.1.0"
}
},
"supports-color": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
- "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "1.0.0"
+ "has-flag": "^3.0.0"
}
},
"syntax-error": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
- "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
"dev": true,
"requires": {
- "acorn": "4.0.13"
+ "acorn-node": "^1.2.0"
}
},
"through": {
@@ -1833,8 +2180,8 @@
"integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14",
- "xtend": "4.0.1"
+ "readable-stream": ">=1.1.13-1 <1.2.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
},
"dependencies": {
"xtend": {
@@ -1851,21 +2198,19 @@
"integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
"dev": true,
"requires": {
- "process": "0.11.10"
- },
- "dependencies": {
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- }
+ "process": "~0.11.0"
}
},
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
"tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
"dev": true
},
"typedarray": {
@@ -1880,8 +2225,8 @@
"integrity": "sha512-esJIpNQIC44EFSrbeFPhiXHy2HJ+dTcnn0Zdkn+5meuLsvoV0mFJffKlyezNIIHNfhF0NpgbifygCfEyAogIhQ==",
"dev": true,
"requires": {
- "commander": "2.13.0",
- "source-map": "0.6.1"
+ "commander": "~2.13.0",
+ "source-map": "~0.6.1"
},
"dependencies": {
"commander": {
@@ -1898,51 +2243,36 @@
}
}
},
- "uglify-to-browserify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
"dev": true
},
- "umd": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/umd/-/umd-2.1.0.tgz",
- "integrity": "sha1-SmMHt2LxfwLSAbX6FU5nM5bCY88=",
+ "undeclared-identifiers": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz",
+ "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==",
"dev": true,
"requires": {
- "rfile": "1.0.0",
- "ruglify": "1.0.0",
- "through": "2.3.8",
- "uglify-js": "2.4.24"
+ "acorn-node": "^1.3.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
},
"dependencies": {
- "source-map": {
- "version": "0.1.34",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
- "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
- "dev": true,
- "requires": {
- "amdefine": "1.0.1"
- }
- },
- "uglify-js": {
- "version": "2.4.24",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
- "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
- "dev": true,
- "requires": {
- "async": "0.2.10",
- "source-map": "0.1.34",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.5.4"
- }
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"url": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
- "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
"dev": true,
"requires": {
"punycode": "1.3.2",
@@ -1958,20 +2288,12 @@
}
},
"util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dev": true,
"requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- }
+ "inherits": "2.0.3"
}
},
"util-deprecate": {
@@ -1981,13 +2303,10 @@
"dev": true
},
"vm-browserify": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true,
- "requires": {
- "indexof": "0.0.1"
- }
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
+ "dev": true
},
"watch": {
"version": "0.13.0",
@@ -1995,21 +2314,9 @@
"integrity": "sha1-/MbSs/DoxzSC61Qjmhn9W8+adTw=",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "minimist": "^1.1.0"
}
},
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
- "dev": true
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -2021,26 +2328,6 @@
"resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
"integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
"dev": true
- },
- "yargs": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
- "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
- "dev": true,
- "requires": {
- "camelcase": "1.2.1",
- "decamelize": "1.2.0",
- "window-size": "0.1.0",
- "wordwrap": "0.0.2"
- },
- "dependencies": {
- "wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
- "dev": true
- }
- }
}
}
}
diff --git a/package.json b/package.json
index 6ed5799..b9e701f 100644
--- a/package.json
+++ b/package.json
@@ -27,12 +27,12 @@
"watch": "make watch"
},
"devDependencies": {
+ "browserify": "^16.2.3",
+ "bundle-collapser": "~1.1.1",
+ "coffeeify": "~1.0.0",
"coffeescript": "~1.9.0",
- "watch": "~0.13.0",
+ "mocha": "^5.2.0",
"uglify-js": "~3.3.7",
- "mocha": "~3.5.3",
- "browserify": "~8.1.3",
- "coffeeify": "~1.0.0",
- "bundle-collapser": "~1.1.1"
+ "watch": "~0.13.0"
}
}
From 03d22263a3272df5541b19443b91108e5b8989fa Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 17 Oct 2018 10:39:32 -0400
Subject: [PATCH 39/62] Reposition cursor when pasting full card numbers (#51)
* Reposition cursor when pasting full card numbers
* Create a directionality utility function
---
src/payform.coffee | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index fe02196..bf9ab33 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -194,6 +194,14 @@
cardFromType = (type) ->
return card for card in payform.cards when card.type is type
+ getDirectionality = (target) ->
+ # Work around Firefox not returning the styles in some edge cases.
+ # In Firefox < 62, style can be `null`.
+ # In Firefox 62+, `style['direction']` can be an empty string.
+ # See https://bugzilla.mozilla.org/show_bug.cgi?id=1467722.
+ style = getComputedStyle(target)
+ style and style['direction'] or document.dir
+
luhnCheck = (num) ->
odd = true
sum = 0
@@ -237,10 +245,21 @@
reFormatCardNumber = (e) ->
cursor = _getCaretPos(e.target)
return if e.target.value is ""
+
+ if getDirectionality(e.target) == 'ltr'
+ cursor = _getCaretPos(e.target)
+
e.target.value = payform.formatCardNumber(e.target.value)
- if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
+
+ if getDirectionality(e.target) == 'ltr' and cursor isnt e.target.selectionStart
+ cursor = _getCaretPos(e.target)
+
+ if getDirectionality(e.target) == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
- if cursor? and e.type isnt 'change'
+
+ cursor = _getCaretPos(e.target)
+
+ if cursor? and cursor isnt 0 and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
formatCardNumber = (e) ->
@@ -302,7 +321,7 @@
reFormatExpiry = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardExpiry(e.target.value)
- if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
+ if getDirectionality(e.target) == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
From a72acf6dfe882cf294bb12acef17581852472f69 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 17 Oct 2018 11:09:30 -0400
Subject: [PATCH 40/62] Create release 1.3.0
---
CHANGELOG | 7 ++++
dist/jquery.payform.js | 80 +++++++++++++++++++++++++++-----------
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 76 ++++++++++++++++++++++++++----------
dist/payform.min.js | 2 +-
package.json | 2 +-
src/payform.coffee | 2 +-
7 files changed, 124 insertions(+), 47 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 140c2bd..b8e8379 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+= 1.3.0
+ * Updated Issuer Identification Number (IIN) patterns with documentaion (see PR #44 and #47)
+ * Allow right and left arrow keys to be used while navigating inside all input types (see PR #45)
+ * Fix issue with clearning selected text when typing (see PR #48)
+ * Fix issuewith the expiry field parsing when typing in a RTL context (see PR #50)
+ * Allow cursor repositioning when pasting full card numbers (see PR #51)
+
= 1.2.5
* Fixes #37, allowing for vendoring and fix event normalization (PR #39)
* Fixes #38, full width character fixes for Safari
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 9d2d55f..fab80e7 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -1,4 +1,4 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o
License: MIT
- Version: 1.2.5
+ Version: 1.3.0
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
@@ -50,7 +49,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return this[name] = definition();
}
})('payform', function() {
- var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
+ var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
_getCaretPos = function(ele) {
var r, rc, re;
if (ele.selectionStart != null) {
@@ -100,11 +99,18 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
}
};
payform = {};
+ keyCodes = {
+ UNKNOWN: 0,
+ BACKSPACE: 8,
+ PAGE_UP: 33,
+ ARROW_LEFT: 37,
+ ARROW_RIGHT: 39
+ };
defaultFormat = /(\d{1,4})/g;
payform.cards = [
{
type: 'elo',
- pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,
+ pattern: /^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -118,7 +124,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
luhn: true
}, {
type: 'maestro',
- pattern: /^(5(018|0[23]|[68])|6(39|7))/,
+ pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/,
format: defaultFormat,
length: [12, 13, 14, 15, 16, 17, 18, 19],
cvcLength: [3],
@@ -141,12 +147,12 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
type: 'visa',
pattern: /^4/,
format: defaultFormat,
- length: [13, 16],
+ length: [13, 16, 19],
cvcLength: [3],
luhn: true
}, {
type: 'mastercard',
- pattern: /^(5[1-5]|2[2-7])/,
+ pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -156,25 +162,32 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
pattern: /^3[47]/,
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
length: [15],
- cvcLength: [3, 4],
+ cvcLength: [4],
+ luhn: true
+ }, {
+ type: 'hipercard',
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/,
+ format: defaultFormat,
+ length: [14, 15, 16, 17, 18, 19],
+ cvcLength: [3],
luhn: true
}, {
type: 'dinersclub',
- pattern: /^3[0689]/,
- format: /(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,
+ pattern: /^(36|38|30[0-5])/,
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
length: [14],
cvcLength: [3],
luhn: true
}, {
type: 'discover',
- pattern: /^6([045]|22)/,
+ pattern: /^(6011|65|64[4-9]|622)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
luhn: true
}, {
type: 'unionpay',
- pattern: /^(62|88)/,
+ pattern: /^62/,
format: defaultFormat,
length: [16, 17, 18, 19],
cvcLength: [3],
@@ -183,7 +196,14 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
type: 'jcb',
pattern: /^35/,
format: defaultFormat,
- length: [16],
+ length: [16, 17, 18, 19],
+ cvcLength: [3],
+ luhn: true
+ }, {
+ type: 'laser',
+ pattern: /^(6706|6771|6709)/,
+ format: defaultFormat,
+ length: [16, 17, 18, 19],
cvcLength: [3],
luhn: true
}
@@ -209,6 +229,11 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
}
}
};
+ getDirectionality = function(target) {
+ var style;
+ style = getComputedStyle(target);
+ return style && style['direction'] || document.dir;
+ };
luhnCheck = function(num) {
var digit, digits, i, len, odd, sum;
odd = true;
@@ -257,15 +282,22 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
reFormatCardNumber = function(e) {
var cursor;
+ cursor = _getCaretPos(e.target);
if (e.target.value === "") {
return;
}
+ if (getDirectionality(e.target) === 'ltr') {
+ cursor = _getCaretPos(e.target);
+ }
e.target.value = payform.formatCardNumber(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'ltr' && cursor !== e.target.selectionStart) {
+ cursor = _getCaretPos(e.target);
+ }
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
- if ((cursor != null) && e.type !== 'change') {
+ if ((cursor != null) && cursor !== 0 && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
};
@@ -309,13 +341,16 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
formatBackCardNumber = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
if (cursor && cursor !== value.length) {
return;
}
+ if ((e.target.selectionEnd - e.target.selectionStart) > 1) {
+ return;
+ }
if (/\d\s$/.test(value)) {
e.preventDefault();
return setTimeout(function() {
@@ -334,7 +369,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return;
}
e.target.value = payform.formatCardExpiry(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
@@ -386,7 +421,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
formatBackExpiry = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
@@ -416,10 +451,10 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
if (e.metaKey || e.ctrlKey) {
return;
}
- if (e.which === 0) {
+ if ([keyCodes.UNKNOWN, keyCodes.ARROW_LEFT, keyCodes.ARROW_RIGHT].indexOf(e.which) > -1) {
return;
}
- if (e.which < 33) {
+ if (e.which < keyCodes.PAGE_UP) {
return;
}
input = String.fromCharCode(e.which);
@@ -513,7 +548,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
prefix = prefix.toString().slice(0, 2);
year = prefix + year;
}
- month = parseInt(month, 10);
+ month = parseInt(month.replace(/[\u200e]/g, ""), 10);
year = parseInt(year, 10);
return {
month: month,
@@ -636,5 +671,4 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
});
-
},{}]},{},[1]);
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index 433ffdf..d96a3d0 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month.replace(/[\u200e]/g,""),10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index 28e9d9f..21057f7 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.5
+ Version: 1.3.0
*/
(function() {
@@ -20,7 +20,7 @@
return this[name] = definition();
}
})('payform', function() {
- var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
+ var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
_getCaretPos = function(ele) {
var r, rc, re;
if (ele.selectionStart != null) {
@@ -70,11 +70,18 @@
}
};
payform = {};
+ keyCodes = {
+ UNKNOWN: 0,
+ BACKSPACE: 8,
+ PAGE_UP: 33,
+ ARROW_LEFT: 37,
+ ARROW_RIGHT: 39
+ };
defaultFormat = /(\d{1,4})/g;
payform.cards = [
{
type: 'elo',
- pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,
+ pattern: /^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -88,7 +95,7 @@
luhn: true
}, {
type: 'maestro',
- pattern: /^(5(018|0[23]|[68])|6(39|7))/,
+ pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/,
format: defaultFormat,
length: [12, 13, 14, 15, 16, 17, 18, 19],
cvcLength: [3],
@@ -111,12 +118,12 @@
type: 'visa',
pattern: /^4/,
format: defaultFormat,
- length: [13, 16],
+ length: [13, 16, 19],
cvcLength: [3],
luhn: true
}, {
type: 'mastercard',
- pattern: /^(5[1-5]|2[2-7])/,
+ pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -126,25 +133,32 @@
pattern: /^3[47]/,
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
length: [15],
- cvcLength: [3, 4],
+ cvcLength: [4],
+ luhn: true
+ }, {
+ type: 'hipercard',
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/,
+ format: defaultFormat,
+ length: [14, 15, 16, 17, 18, 19],
+ cvcLength: [3],
luhn: true
}, {
type: 'dinersclub',
- pattern: /^3[0689]/,
- format: /(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,
+ pattern: /^(36|38|30[0-5])/,
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
length: [14],
cvcLength: [3],
luhn: true
}, {
type: 'discover',
- pattern: /^6([045]|22)/,
+ pattern: /^(6011|65|64[4-9]|622)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
luhn: true
}, {
type: 'unionpay',
- pattern: /^(62|88)/,
+ pattern: /^62/,
format: defaultFormat,
length: [16, 17, 18, 19],
cvcLength: [3],
@@ -153,7 +167,14 @@
type: 'jcb',
pattern: /^35/,
format: defaultFormat,
- length: [16],
+ length: [16, 17, 18, 19],
+ cvcLength: [3],
+ luhn: true
+ }, {
+ type: 'laser',
+ pattern: /^(6706|6771|6709)/,
+ format: defaultFormat,
+ length: [16, 17, 18, 19],
cvcLength: [3],
luhn: true
}
@@ -179,6 +200,11 @@
}
}
};
+ getDirectionality = function(target) {
+ var style;
+ style = getComputedStyle(target);
+ return style && style['direction'] || document.dir;
+ };
luhnCheck = function(num) {
var digit, digits, i, len, odd, sum;
odd = true;
@@ -227,15 +253,22 @@
};
reFormatCardNumber = function(e) {
var cursor;
+ cursor = _getCaretPos(e.target);
if (e.target.value === "") {
return;
}
+ if (getDirectionality(e.target) === 'ltr') {
+ cursor = _getCaretPos(e.target);
+ }
e.target.value = payform.formatCardNumber(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'ltr' && cursor !== e.target.selectionStart) {
+ cursor = _getCaretPos(e.target);
+ }
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
- if ((cursor != null) && e.type !== 'change') {
+ if ((cursor != null) && cursor !== 0 && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
};
@@ -279,13 +312,16 @@
formatBackCardNumber = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
if (cursor && cursor !== value.length) {
return;
}
+ if ((e.target.selectionEnd - e.target.selectionStart) > 1) {
+ return;
+ }
if (/\d\s$/.test(value)) {
e.preventDefault();
return setTimeout(function() {
@@ -304,7 +340,7 @@
return;
}
e.target.value = payform.formatCardExpiry(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
@@ -356,7 +392,7 @@
formatBackExpiry = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
@@ -386,10 +422,10 @@
if (e.metaKey || e.ctrlKey) {
return;
}
- if (e.which === 0) {
+ if ([keyCodes.UNKNOWN, keyCodes.ARROW_LEFT, keyCodes.ARROW_RIGHT].indexOf(e.which) > -1) {
return;
}
- if (e.which < 33) {
+ if (e.which < keyCodes.PAGE_UP) {
return;
}
input = String.fromCharCode(e.which);
@@ -483,7 +519,7 @@
prefix = prefix.toString().slice(0, 2);
year = prefix + year;
}
- month = parseInt(month, 10);
+ month = parseInt(month.replace(/[\u200e]/g, ""), 10);
year = parseInt(year, 10);
return {
month: month,
diff --git a/dist/payform.min.js b/dist/payform.min.js
index 0d17017..07f8b72 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month.replace(/[\u200e]/g,""),10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package.json b/package.json
index b9e701f..6ef05f4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.5",
+ "version": "1.3.0",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
diff --git a/src/payform.coffee b/src/payform.coffee
index bf9ab33..6866e00 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.5
+ Version: 1.3.0
###
((name, definition) ->
if module?
From 17004e904435b4914f251264f531249dfc9be055 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Mon, 6 Aug 2018 17:22:41 -0400
Subject: [PATCH 41/62] Extract KeyCodes into a variable, filter right and left
arrow keys on keypress
---
src/payform.coffee | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index c2ebbfb..10c092e 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -54,6 +54,16 @@
payform = {}
+ # Key Codes
+
+ keyCodes = {
+ UNKNOWN : 0,
+ BACKSPACE : 8,
+ PAGE_UP : 33,
+ ARROW_LEFT : 37,
+ ARROW_RIGHT : 39,
+ }
+
# Utils
defaultFormat = /(\d{1,4})/g
@@ -253,7 +263,7 @@
value = e.target.value
# Return unless backspacing
- return unless e.which is 8
+ return unless e.which is keyCodes.BACKSPACE
# Return if focus isn't at the end of the text
cursor = _getCaretPos(e.target)
@@ -312,7 +322,7 @@
value = e.target.value
# Return unless backspacing
- return unless e.which is 8
+ return unless e.which is keyCodes.BACKSPACE
# Return if focus isn't at the end of the text
cursor = _getCaretPos(e.target)
@@ -339,10 +349,10 @@
return if e.metaKey or e.ctrlKey
# If keycode is a special char (WebKit)
- return if e.which is 0
+ return if [keyCodes.UNKNOWN, keyCodes.ARROW_LEFT, keyCodes.ARROW_RIGHT].indexOf(e.which) > -1
# If char is a special char (Firefox)
- return if e.which < 33
+ return if e.which < keyCodes.PAGE_UP
input = String.fromCharCode(e.which)
From 6e215ee9321c43c4353a9f580200504ca9e141c2 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 8 Aug 2018 11:54:40 -0400
Subject: [PATCH 42/62] Set cursor position before formatting the card number
instead of after
---
src/payform.coffee | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 10c092e..4bf78b1 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -218,11 +218,11 @@
# Format Card Number
reFormatCardNumber = (e) ->
+ cursor = _getCaretPos(e.target)
return if e.target.value is ""
e.target.value = payform.formatCardNumber(e.target.value)
if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
- cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
From bdd35f84971d52eb6a8680597f53385ae6bc4042 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Sun, 5 Aug 2018 14:44:22 +0100
Subject: [PATCH 43/62] Add hipercard & laser. Update patterns for others.
Based on https://github.com/jessepollak/payment/blob/329d687942098f8c25a8cbe6078ec07834ec6a8d/src/index.coffee
---
src/payform.coffee | 36 +++++++++++++++++++++++---------
test/validateCardCVC_spec.coffee | 6 +++++-
2 files changed, 31 insertions(+), 11 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 4bf78b1..f798ba6 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -73,7 +73,7 @@
# specific patterns than their credit-card equivalents.
{
type: 'elo'
- pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/
+ pattern: /^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)/
format: defaultFormat
length: [16]
cvcLength: [3]
@@ -89,7 +89,7 @@
}
{
type: 'maestro'
- pattern: /^(5(018|0[23]|[68])|6(39|7))/
+ pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/
format: defaultFormat
length: [12..19]
cvcLength: [3]
@@ -116,13 +116,13 @@
type: 'visa'
pattern: /^4/
format: defaultFormat
- length: [13, 16]
+ length: [13, 16, 19]
cvcLength: [3]
luhn: true
}
{
type: 'mastercard'
- pattern: /^(5[1-5]|2[2-7])/
+ pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/
format: defaultFormat
length: [16]
cvcLength: [3]
@@ -133,20 +133,20 @@
pattern: /^3[47]/
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/
length: [15]
- cvcLength: [3..4]
+ cvcLength: [4]
luhn: true
}
{
type: 'dinersclub'
- pattern: /^3[0689]/
- format: /(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/
+ pattern: /^(36|38|30[0-5])/
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/
length: [14]
cvcLength: [3]
luhn: true
}
{
type: 'discover'
- pattern: /^6([045]|22)/
+ pattern: /^(6011|65|64[4-9]|622)/
format: defaultFormat
length: [16]
cvcLength: [3]
@@ -154,7 +154,7 @@
}
{
type: 'unionpay'
- pattern: /^(62|88)/
+ pattern: /^62/
format: defaultFormat
length: [16..19]
cvcLength: [3]
@@ -168,6 +168,22 @@
cvcLength: [3]
luhn: true
}
+ {
+ type: 'hipercard'
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/
+ format: defaultFormat
+ length: [14..19]
+ cvcLength: [3]
+ luhn: true
+ }
+ {
+ type: 'laser'
+ pattern: /^(6706|6771|6709)/
+ format: defaultFormat
+ length: [16..19]
+ cvcLength: [3]
+ luhn: true
+ }
]
cardFromNumber = (num) ->
@@ -283,7 +299,7 @@
reFormatExpiry = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardExpiry(e.target.value)
- if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
+ if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
diff --git a/test/validateCardCVC_spec.coffee b/test/validateCardCVC_spec.coffee
index 3b116f2..2716155 100644
--- a/test/validateCardCVC_spec.coffee
+++ b/test/validateCardCVC_spec.coffee
@@ -27,8 +27,12 @@ describe 'payform', ->
topic = payform.validateCardCVC('123')
assert.equal topic, true
- it 'should validate a three digit number with card type amex', ->
+ it 'should fail a three digit number with card type amex', ->
topic = payform.validateCardCVC('123', 'amex')
+ assert.equal topic, false
+
+ it 'should validate a four digit number with card type amex', ->
+ topic = payform.validateCardCVC('1234', 'amex')
assert.equal topic, true
it 'should validate a three digit number with card type other than amex', ->
From cb6cf634e26b1c70b49643776b91192263847e44 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Thu, 16 Aug 2018 15:23:08 +0000
Subject: [PATCH 44/62] Add tests for hipercard
---
test/cardType_spec.coffee | 8 ++++++++
test/validateCardNumber_spec.coffee | 8 ++++++++
2 files changed, 16 insertions(+)
diff --git a/test/cardType_spec.coffee b/test/cardType_spec.coffee
index fec0bcb..6a5178e 100644
--- a/test/cardType_spec.coffee
+++ b/test/cardType_spec.coffee
@@ -66,6 +66,14 @@ describe 'payform', ->
assert.equal(payform.parseCardType('3530111333300000'), 'jcb')
assert.equal(payform.parseCardType('3566002020360505'), 'jcb')
+ assert.equal(payform.parseCardType('6062821086773091'), 'hipercard')
+ assert.equal(payform.parseCardType('6375683647504601'), 'hipercard')
+ assert.equal(payform.parseCardType('6370957513839696'), 'hipercard')
+ assert.equal(payform.parseCardType('6375688248373892'), 'hipercard')
+ assert.equal(payform.parseCardType('6012135281693108'), 'hipercard')
+ assert.equal(payform.parseCardType('38410036464094'), 'hipercard')
+ assert.equal(payform.parseCardType('38414050328938'), 'hipercard')
+
describe '#cards', ->
it 'should expose an array of standard card types', ->
cards = payform.cards
diff --git a/test/validateCardNumber_spec.coffee b/test/validateCardNumber_spec.coffee
index cb4a6cc..13b08bb 100644
--- a/test/validateCardNumber_spec.coffee
+++ b/test/validateCardNumber_spec.coffee
@@ -76,3 +76,11 @@ describe 'payform', ->
assert(payform.validateCardNumber('3530111333300000'), 'jcb')
assert(payform.validateCardNumber('3566002020360505'), 'jcb')
assert(payform.validateCardNumber('6362970000457013'), 'elo')
+
+ assert(payform.validateCardNumber('6062821086773091'), 'hipercard')
+ assert(payform.validateCardNumber('6375683647504601'), 'hipercard')
+ assert(payform.validateCardNumber('6370957513839696'), 'hipercard')
+ assert(payform.validateCardNumber('6375688248373892'), 'hipercard')
+ assert(payform.validateCardNumber('6012135281693108'), 'hipercard')
+ assert(payform.validateCardNumber('38410036464094'), 'hipercard')
+ assert(payform.validateCardNumber('38414050328938'), 'hipercard')
From aed5231fdefedcee0c96c55ad8d964c91746c8ba Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Thu, 16 Aug 2018 15:24:18 +0000
Subject: [PATCH 45/62] Add 17-19 digit JCB support
From https://github.com/jessepollak/payment/pull/84
---
src/payform.coffee | 2 +-
test/cardType_spec.coffee | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index f798ba6..5327dd0 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -164,7 +164,7 @@
type: 'jcb'
pattern: /^35/
format: defaultFormat
- length: [16]
+ length: [16..19]
cvcLength: [3]
luhn: true
}
diff --git a/test/cardType_spec.coffee b/test/cardType_spec.coffee
index 6a5178e..b1b8ffc 100644
--- a/test/cardType_spec.coffee
+++ b/test/cardType_spec.coffee
@@ -65,6 +65,7 @@ describe 'payform', ->
assert.equal(payform.parseCardType('3530111333300000'), 'jcb')
assert.equal(payform.parseCardType('3566002020360505'), 'jcb')
+ assert.equal(payform.parseCardType('3536408073177691495'), 'jcb')
assert.equal(payform.parseCardType('6062821086773091'), 'hipercard')
assert.equal(payform.parseCardType('6375683647504601'), 'hipercard')
From e5cf72302a6a05ffec8ac8badf7ad24ba014a287 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy
Date: Thu, 16 Aug 2018 15:33:34 +0000
Subject: [PATCH 46/62] Move hipercard above dinersclub for specificity
---
src/payform.coffee | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 5327dd0..23dc545 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -136,6 +136,15 @@
cvcLength: [4]
luhn: true
}
+ # Must be above dinersclub.
+ {
+ type: 'hipercard'
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/
+ format: defaultFormat
+ length: [14..19]
+ cvcLength: [3]
+ luhn: true
+ }
{
type: 'dinersclub'
pattern: /^(36|38|30[0-5])/
@@ -168,14 +177,6 @@
cvcLength: [3]
luhn: true
}
- {
- type: 'hipercard'
- pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/
- format: defaultFormat
- length: [14..19]
- cvcLength: [3]
- luhn: true
- }
{
type: 'laser'
pattern: /^(6706|6771|6709)/
From 5b6ba6951e10bc429df0b388d952f80b4bb4a61a Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Fri, 14 Sep 2018 21:50:17 -0400
Subject: [PATCH 47/62] Ignore single digit removal when selection length is
not equal to 1
---
src/payform.coffee | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/payform.coffee b/src/payform.coffee
index 23dc545..8e5e841 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -286,6 +286,8 @@
cursor = _getCaretPos(e.target)
return if cursor and cursor isnt value.length
+ return if (e.target.selectionEnd - e.target.selectionStart) > 1
+
# Remove the digit + trailing space
if /\d\s$/.test(value)
e.preventDefault()
From 9cd6dfaabae90993eb26d21c1be8390472fd208c Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 13 Sep 2018 11:27:35 -0400
Subject: [PATCH 48/62] Add documentation for credit and debit card IIN
patterns
---
CARDRULES.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 104 insertions(+)
create mode 100644 CARDRULES.md
diff --git a/CARDRULES.md b/CARDRULES.md
new file mode 100644
index 0000000..4999801
--- /dev/null
+++ b/CARDRULES.md
@@ -0,0 +1,104 @@
+# Supported Card Types
+
+The following list contains Issuer Identification Number (IIN) patterns and length for all debit and credit card types supported by Payform. Please note that while references are provided, there may be some missing matching patterns. Nevertheless, the current regular expressions used are valid with respect to these sources.
+
+## Credit Cards
+
+### American Express
+
+**IIN Pattern:** 34, 37 [1]
+
+**Length:** 15 [2]
+
+### Diners Club
+
+**IIN Pattern:** 36, 38, 30[0-5] [3]
+
+**Length:** 14 [3]
+
+### Discover
+
+**IIN Pattern:** 6011, 65, 64[4-9], 622 [3]
+
+**Length:** 16 [3]
+
+### Hipercard
+
+**IIN Pattern:** 384100, 384140, 384160, 606282, 637095, 637568, 60(?!11) [4], [5]
+
+**Length:** 14-19
+
+### JCB
+
+**IIN Pattern:** 35 [3]
+
+**Length:** 16-19 [3]
+
+### Mastercard
+
+
+**IIN Pattern:** 5[1-5], 677189 ,222[1-9], 2[3-6][0-9][0-9], 27[0-1][0-9], 2720 [1], [6]
+
+**Length:** 16
+
+### Unionpay
+
+**IIN Pattern:** 62 [3]
+
+**Length:** 16-19 [3]
+
+### Visa
+
+**IIN Pattern:** 4 [7]
+
+**Length:** 13, 16, 19
+
+## Debit Cards
+
+### Dankkort
+
+**IIN Pattern:** 5019 [8]
+
+**Length:** 16
+
+### Elo
+
+**IIN Pattern:** (4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021) [9], [10]
+
+**Length:** 16
+
+### Forbrugsforeningen
+
+**IIN Pattern:** 600 [11]
+
+**Length:** 16
+
+### Maestro
+
+**IIN Pattern:** 5018, 5020, 5038, 6304, 6703, 6708, 6759, 676[1-3] [12]
+
+**Length:** 12-19
+
+### Visa Electron
+
+**IIN Pattern:** 4026, 417500, 4405, 4508, 4844, 4913, 4917 [7]
+
+**Length:** 16
+
+
+
+[1]: https://www.moneris.com/-/media/Moneris/Files/EN/Support/Compliance-Information/CAG_booklet.pdf
+[2]: https://www.cybersource.com/developers/getting_started/test_and_manage/best_practices/card_type_id/
+[3]: https://www.discovernetwork.com/downloads/IPP_VAR_Compliance.pdf
+[4]: https://mage2.pro/t/topic/3865
+[5]: https://stevemorse.org/ssn/List_of_Bank_Identification_Numbers.html
+[6]: https://www.mastercard.us/en-us/issuers/get-support/2-series-bin-expansion.html
+[7]: https://baymard.com/checkout-usability/credit-card-patterns
+[8]: https://www.nets.eu/dk-da/kundeservice/Verifikation%20af%20betalingsl%C3%B8sninger/Documents/ct-trg-otrs-en.pdf
+[9]: https://mage2.pro/t/topic/3867
+[10]: https://github.com/Adyen/adyen-magento/issues/236
+[11]: https://tech.dibspayment.com/D2/Toolbox/Test_information/Cards
+[12]: http://blog.unibulmerchantservices.com/12-signs-of-a-valid-mastercard-card/
+
+
+
From 1ef394f022c475a6d9a9d27c9299f1938f10c083 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 28 Sep 2018 17:43:41 -0500
Subject: [PATCH 49/62] add release instructions to contributing.md
---
CONTRIBUTING.md | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bab2c59..2a187b5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -37,3 +37,40 @@ Good Pull Requests include:
- A clear explaination of the problem (or enhancement)
- Clean commit history (squash where it makes sense)
- Relevant Tests (either updated and/or new)
+
+## Release Process
+
+We strive for [semantic versioning]() for our version number assignment, and utilize the [git flow]() tool to execute releases in the repository.
+
+All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using the
+
+```
+ $> git flow release start 1.x.x
+```
+
+This should give you a release branch off develop and some relevant instructions.
+
+This is when you should:
+ - Bump the version numbers in both `src/payform.coffee` and `package.json`
+ - Update the `CHANGELOG`
+ - Run `make clean && make build`
+
+Once you've done this and committed these changes to the release branch, you are ready to run:
+
+```
+ $> git flow release finish 1.x.x
+```
+
+This will:
+ - Merge the release branch into `master` and also back into `develop`
+ - Create a tag for the release and prompt you for an annotation (I usually paste in the relevant `CHANGELOG` entry)
+
+At this point you should push `master` and `develop`, and also the new tag with `git push --tags`
+
+### Publishing to npm
+
+Once the release process is complete, and you're confident it is correct, you should be able to publish to npm with
+
+```
+ $> npm publish
+```
From f2410a9b12daad817cc46593ecda02738f5b0da7 Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Fri, 28 Sep 2018 17:45:20 -0500
Subject: [PATCH 50/62] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2a187b5..f515fe0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -40,7 +40,7 @@ Good Pull Requests include:
## Release Process
-We strive for [semantic versioning]() for our version number assignment, and utilize the [git flow]() tool to execute releases in the repository.
+We strive for [semantic versioning](https://semver.org/) for our version number assignment, and utilize the [git flow](https://github.com/nvie/gitflow) tool to execute releases in the repository.
All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using the
From d4d0cf0ff2063c15feae5a618d94c5f291ed5999 Mon Sep 17 00:00:00 2001
From: Jonathan Johnson
Date: Fri, 28 Sep 2018 17:48:39 -0500
Subject: [PATCH 51/62] add note about running tests before release
---
CONTRIBUTING.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f515fe0..74e8900 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -53,6 +53,7 @@ This should give you a release branch off develop and some relevant instructions
This is when you should:
- Bump the version numbers in both `src/payform.coffee` and `package.json`
- Update the `CHANGELOG`
+ - Ensure the tests pas with `make test`
- Run `make clean && make build`
Once you've done this and committed these changes to the release branch, you are ready to run:
From 97dea97386e682586f9c402df9f779e24044f1d8 Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Fri, 28 Sep 2018 17:58:36 -0500
Subject: [PATCH 52/62] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 74e8900..07e9172 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -42,7 +42,7 @@ Good Pull Requests include:
We strive for [semantic versioning](https://semver.org/) for our version number assignment, and utilize the [git flow](https://github.com/nvie/gitflow) tool to execute releases in the repository.
-All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using the
+All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using
```
$> git flow release start 1.x.x
@@ -52,7 +52,7 @@ This should give you a release branch off develop and some relevant instructions
This is when you should:
- Bump the version numbers in both `src/payform.coffee` and `package.json`
- - Update the `CHANGELOG`
+ - Update the `CHANGELOG` by adding a new section for this version
- Ensure the tests pas with `make test`
- Run `make clean && make build`
From 682dc669e7f26e11b53ce69a22f4cdfeecb3e7df Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Thu, 11 Oct 2018 18:43:06 -0400
Subject: [PATCH 53/62] Clear control characters from expiry date string before
parsing (#50)
* Clear control characters from expiry date string before parsing
* Add comment to explain U200E character removal
---
src/payform.coffee | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index 8e5e841..fe02196 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -461,7 +461,8 @@
prefix = prefix.toString()[0..1]
year = prefix + year
- month = parseInt(month, 10)
+ # Remove left-to-right mark LTR invisible unicode control character used in right-to-left contexts
+ month = parseInt(month.replace(/[\u200e]/g, ""), 10);
year = parseInt(year, 10)
month: month, year: year
From ac4fa6d57c23548f3887a4b78b30dca00ee75e45 Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Fri, 12 Oct 2018 14:01:44 -0500
Subject: [PATCH 54/62] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 07e9172..12de76d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -42,6 +42,14 @@ Good Pull Requests include:
We strive for [semantic versioning](https://semver.org/) for our version number assignment, and utilize the [git flow](https://github.com/nvie/gitflow) tool to execute releases in the repository.
+You can initialize git flow once it is installed with
+
+```
+ $> git flow init -d
+```
+
+This will use the default branch naming conventions for git flow.
+
All new functionality should come in on the `develop` branch and when you're ready to cut a new release, start the process by using
```
From 8ba9551fed4302ee781e79aadf4dddc02ca18c23 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 17 Oct 2018 10:15:37 -0400
Subject: [PATCH 55/62] Update Browserify and Mocha to address dependency
vulnerabilities (#52)
* Update Browserify to address dependcy vulnerabilities
* Update Mocha to address dependcy vulnerabilities
---
package-lock.json | 2167 +++++++++++++++++++++++++--------------------
package.json | 10 +-
2 files changed, 1232 insertions(+), 945 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 81dc216..73002f6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,20 +4,14 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "Base64": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz",
- "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
- "dev": true
- },
"JSONStream": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
- "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
"dev": true,
"requires": {
- "jsonparse": "0.0.5",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
}
},
"acorn": {
@@ -26,47 +20,98 @@
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
"dev": true
},
+ "acorn-node": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.0.tgz",
+ "integrity": "sha512-ZsysjEh+Y3i14f7YXCAKJy99RXbd56wHKYBzN4FlFtICIZyFpYwK6OwNJhcz8A/FMtxoUZkJofH1v9KIfNgWmw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz",
+ "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz",
+ "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==",
+ "dev": true
+ },
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true
},
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
"asn1.js": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
- "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"assert": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz",
- "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
"dev": true,
"requires": {
"util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
}
},
- "astw": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
- "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13"
- }
- },
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
- "dev": true
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -74,9 +119,9 @@
"dev": true
},
"base64-js": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
- "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
"bn.js": {
@@ -91,7 +136,7 @@
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
@@ -102,47 +147,110 @@
"dev": true
},
"browser-pack": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-3.2.0.tgz",
- "integrity": "sha1-+qHLxBSHsazEdH43PhFIrf/Q4tk=",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
"dev": true,
"requires": {
- "JSONStream": "0.8.4",
- "combine-source-map": "0.3.0",
- "concat-stream": "1.4.10",
- "defined": "0.0.0",
- "through2": "0.5.1",
- "umd": "2.1.0"
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
},
"dependencies": {
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
"readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
}
},
"through2": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
- "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"browser-resolve": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
- "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
"dev": true,
"requires": {
"resolve": "1.1.7"
@@ -157,9 +265,9 @@
}
},
"browser-stdout": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
- "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"browser-unpack": {
@@ -168,10 +276,10 @@
"integrity": "sha1-NXruMfxGeDFoTQY+Q1XgcKeClw0=",
"dev": true,
"requires": {
- "acorn": "4.0.13",
- "browser-pack": "5.0.1",
- "concat-stream": "1.6.0",
- "minimist": "1.2.0"
+ "acorn": "^4.0.3",
+ "browser-pack": "^5.0.1",
+ "concat-stream": "^1.5.0",
+ "minimist": "^1.1.1"
},
"dependencies": {
"JSONStream": {
@@ -180,8 +288,8 @@
"integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
}
},
"browser-pack": {
@@ -190,11 +298,11 @@
"integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.6.1",
- "defined": "1.0.0",
- "through2": "1.1.1",
- "umd": "3.0.1"
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.6.1",
+ "defined": "^1.0.0",
+ "through2": "^1.0.0",
+ "umd": "^3.0.0"
}
},
"combine-source-map": {
@@ -203,10 +311,10 @@
"integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
"dev": true,
"requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.5.0",
- "lodash.memoize": "3.0.4",
- "source-map": "0.4.4"
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.5.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.4.2"
}
},
"concat-stream": {
@@ -215,9 +323,9 @@
"integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "typedarray": "0.0.6"
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"convert-source-map": {
@@ -238,7 +346,7 @@
"integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
"dev": true,
"requires": {
- "source-map": "0.4.4"
+ "source-map": "~0.4.0"
}
},
"isarray": {
@@ -259,13 +367,13 @@
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3",
+ "util-deprecate": "~1.0.1"
}
},
"source-map": {
@@ -274,7 +382,7 @@
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
},
"string_decoder": {
@@ -283,7 +391,7 @@
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "~5.1.0"
}
},
"umd": {
@@ -295,96 +403,170 @@
}
},
"browserify": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-8.1.3.tgz",
- "integrity": "sha1-8zpUmjpsNoIZsHX9z+bfGV4Empo=",
- "dev": true,
- "requires": {
- "JSONStream": "0.8.4",
- "assert": "1.3.0",
- "browser-pack": "3.2.0",
- "browser-resolve": "1.11.2",
- "browserify-zlib": "0.1.4",
- "buffer": "3.6.0",
- "builtins": "0.0.7",
- "commondir": "0.0.1",
- "concat-stream": "1.4.10",
- "console-browserify": "1.1.0",
- "constants-browserify": "0.0.1",
- "crypto-browserify": "3.12.0",
- "deep-equal": "0.2.2",
- "defined": "0.0.0",
- "deps-sort": "1.3.9",
- "domain-browser": "1.1.7",
- "duplexer2": "0.0.2",
- "events": "1.0.2",
- "glob": "4.5.3",
- "http-browserify": "1.7.0",
- "https-browserify": "0.0.1",
- "inherits": "2.0.3",
- "insert-module-globals": "6.6.3",
- "isarray": "0.0.1",
- "labeled-stream-splicer": "1.0.2",
- "module-deps": "3.9.1",
- "os-browserify": "0.1.2",
- "parents": "1.0.1",
- "path-browserify": "0.0.0",
- "process": "0.10.1",
- "punycode": "1.2.4",
- "querystring-es3": "0.2.1",
- "readable-stream": "1.1.14",
- "resolve": "0.7.4",
- "shallow-copy": "0.0.1",
- "shasum": "1.0.2",
- "shell-quote": "0.0.1",
- "stream-browserify": "1.0.0",
- "string_decoder": "0.10.31",
- "subarg": "1.0.0",
- "syntax-error": "1.3.0",
- "through2": "1.1.1",
- "timers-browserify": "1.4.2",
- "tty-browserify": "0.0.0",
- "umd": "2.1.0",
- "url": "0.10.3",
- "util": "0.10.3",
- "vm-browserify": "0.0.4",
- "xtend": "3.0.0"
+ "version": "16.2.3",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz",
+ "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
}
},
"browserify-aes": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
- "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
"requires": {
- "buffer-xor": "1.0.3",
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"browserify-cipher": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
- "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
"dev": true,
"requires": {
- "browserify-aes": "1.1.1",
- "browserify-des": "1.0.0",
- "evp_bytestokey": "1.0.3"
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
}
},
"browserify-des": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
- "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "des.js": "1.0.0",
- "inherits": "2.0.3"
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"browserify-rsa": {
@@ -393,8 +575,8 @@
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
}
},
"browserify-sign": {
@@ -403,53 +585,50 @@
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "elliptic": "6.4.0",
- "inherits": "2.0.3",
- "parse-asn1": "5.1.0"
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
}
},
"browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
"requires": {
- "pako": "0.2.9"
+ "pako": "~1.0.5"
}
},
"buffer": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",
- "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
+ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
"dev": true,
"requires": {
- "base64-js": "0.0.8",
- "ieee754": "1.1.8",
- "isarray": "1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
}
},
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
"dev": true
},
- "builtins": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz",
- "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=",
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
"dev": true
},
"bundle-collapser": {
@@ -458,12 +637,12 @@
"integrity": "sha1-N0cPUrdOq5jiD7j9MZsE65pJWyM=",
"dev": true,
"requires": {
- "browser-pack": "4.0.4",
- "browser-unpack": "1.2.0",
- "concat-stream": "1.4.10",
- "falafel": "1.2.0",
- "minimist": "0.2.0",
- "through2": "1.1.1"
+ "browser-pack": "^4.0.0",
+ "browser-unpack": "^1.0.0",
+ "concat-stream": "^1.4.6",
+ "falafel": "^1.0.0",
+ "minimist": "^0.2.0",
+ "through2": "^1.0.0"
},
"dependencies": {
"JSONStream": {
@@ -472,8 +651,8 @@
"integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
}
},
"browser-pack": {
@@ -482,12 +661,12 @@
"integrity": "sha1-ja6VogykOz/qIB+qbPqoT/Sg1IQ=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.3.0",
- "concat-stream": "1.4.10",
- "defined": "1.0.0",
- "through2": "0.5.1",
- "umd": "3.0.1"
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.3.0",
+ "concat-stream": "~1.4.1",
+ "defined": "^1.0.0",
+ "through2": "~0.5.1",
+ "umd": "^3.0.0"
},
"dependencies": {
"through2": {
@@ -496,8 +675,8 @@
"integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "readable-stream": "~1.0.17",
+ "xtend": "~3.0.0"
}
}
}
@@ -526,10 +705,10 @@
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
"umd": {
@@ -540,16 +719,10 @@
}
}
},
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
- "dev": true
- },
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "cached-path-relative": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
"dev": true
},
"cipher-base": {
@@ -558,8 +731,8 @@
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"coffee-script": {
@@ -574,9 +747,9 @@
"integrity": "sha1-7DjH9W1F+xgLnSjmXH5dEAmxFjU=",
"dev": true,
"requires": {
- "coffee-script": "1.9.3",
- "convert-source-map": "0.4.1",
- "through": "2.3.8"
+ "coffee-script": "^1.8.0",
+ "convert-source-map": "^0.4.1",
+ "through": "^2.3.6"
},
"dependencies": {
"convert-source-map": {
@@ -599,24 +772,15 @@
"integrity": "sha1-2edPWT2c1DgHMSy12EbUUe+qnrc=",
"dev": true,
"requires": {
- "convert-source-map": "0.3.5",
- "inline-source-map": "0.3.1",
- "source-map": "0.1.43"
+ "convert-source-map": "~0.3.0",
+ "inline-source-map": "~0.3.0",
+ "source-map": "~0.1.31"
}
},
"commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": "1.0.1"
- }
- },
- "commondir": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz",
- "integrity": "sha1-ifAP3NUbUZxXhzP+xWPmptp/W+I=",
+ "version": "2.15.1",
+ "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"concat-map": {
@@ -631,9 +795,9 @@
"integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14",
- "typedarray": "0.0.6"
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.9",
+ "typedarray": "~0.0.5"
}
},
"console-browserify": {
@@ -642,13 +806,13 @@
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
"dev": true,
"requires": {
- "date-now": "0.1.4"
+ "date-now": "^0.1.4"
}
},
"constants-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz",
- "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
"dev": true
},
"convert-source-map": {
@@ -664,39 +828,40 @@
"dev": true
},
"create-ecdh": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
- "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "elliptic": "6.4.0"
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
}
},
"create-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
- "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "sha.js": "2.4.9"
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
}
},
"create-hmac": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
- "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "version": "1.1.7",
+ "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.9"
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
"crypto-browserify": {
@@ -705,17 +870,17 @@
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
"dev": true,
"requires": {
- "browserify-cipher": "1.0.0",
- "browserify-sign": "4.0.4",
- "create-ecdh": "4.0.0",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "diffie-hellman": "5.0.2",
- "inherits": "2.0.3",
- "pbkdf2": "3.0.14",
- "public-encrypt": "4.0.0",
- "randombytes": "2.0.6",
- "randomfill": "1.0.3"
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
}
},
"date-now": {
@@ -725,58 +890,82 @@
"dev": true
},
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "deep-equal": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
- "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=",
- "dev": true
- },
"defined": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz",
- "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
"dev": true
},
"deps-sort": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.9.tgz",
- "integrity": "sha1-Kd//U+F7Nq7K51MK27v2IsLtGnE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "shasum": "1.0.2",
- "subarg": "1.0.0",
- "through2": "1.1.1"
+ "JSONStream": "^1.0.3",
+ "shasum": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
@@ -787,79 +976,104 @@
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
}
},
"detective": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
- "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
+ "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
"dev": true,
"requires": {
- "acorn": "5.3.0",
- "defined": "1.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz",
- "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==",
- "dev": true
- },
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- }
+ "acorn-node": "^1.3.0",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
}
},
"diff": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
- "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"diffie-hellman": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
- "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "version": "5.0.3",
+ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "miller-rabin": "4.0.1",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
}
},
"domain-browser": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
- "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
"dev": true
},
"duplexer2": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14"
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"elliptic": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
- "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0",
- "hash.js": "1.1.3",
- "hmac-drbg": "1.0.1",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
}
},
"escape-string-regexp": {
@@ -869,9 +1083,9 @@
"dev": true
},
"events": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz",
- "integrity": "sha1-dYSdz+k9EPsFfDAFWv29UdBqjiQ=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
"dev": true
},
"evp_bytestokey": {
@@ -880,8 +1094,8 @@
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"requires": {
- "md5.js": "1.3.4",
- "safe-buffer": "5.1.1"
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
}
},
"falafel": {
@@ -890,10 +1104,10 @@
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
"dev": true,
"requires": {
- "acorn": "1.2.2",
- "foreach": "2.0.5",
+ "acorn": "^1.0.3",
+ "foreach": "^2.0.5",
"isarray": "0.0.1",
- "object-keys": "1.0.11"
+ "object-keys": "^1.0.6"
},
"dependencies": {
"acorn": {
@@ -916,53 +1130,71 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
"glob": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
- "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "2.0.10",
- "once": "1.4.0"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
- },
"growl": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
- "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
},
"hash-base": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
- "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
"dev": true,
"requires": {
- "inherits": "2.0.3"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
"hash.js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
- "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
+ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
}
},
"he": {
@@ -977,37 +1209,27 @@
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
- "hash.js": "1.1.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
}
},
- "http-browserify": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz",
- "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=",
- "dev": true,
- "requires": {
- "Base64": "0.2.1",
- "inherits": "2.0.3"
- }
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
},
"https-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
- "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
"ieee754": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
- "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
- "dev": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
"dev": true
},
"inflight": {
@@ -1016,8 +1238,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -1032,7 +1254,7 @@
"integrity": "sha1-pSi1FOaJ/OkNswiehw2S9Sestes=",
"dev": true,
"requires": {
- "source-map": "0.3.0"
+ "source-map": "~0.3.0"
},
"dependencies": {
"source-map": {
@@ -1041,47 +1263,51 @@
"integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
}
}
},
"insert-module-globals": {
- "version": "6.6.3",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.6.3.tgz",
- "integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.6.1",
- "concat-stream": "1.4.10",
- "is-buffer": "1.1.6",
- "lexical-scope": "1.2.0",
- "process": "0.11.10",
- "through2": "1.1.1",
- "xtend": "4.0.1"
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
+ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
}
},
- "combine-source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
- "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.5.0",
- "lodash.memoize": "3.0.4",
- "source-map": "0.4.4"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"convert-source-map": {
@@ -1091,33 +1317,64 @@
"dev": true
},
"inline-source-map": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
- "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
"dev": true,
"requires": {
- "source-map": "0.4.4"
+ "source-map": "~0.5.3"
}
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
"source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
},
"xtend": {
@@ -1146,15 +1403,9 @@
"integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
"dev": true,
"requires": {
- "jsonify": "0.0.0"
+ "jsonify": "~0.0.0"
}
},
- "json3": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
- "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
- "dev": true
- },
"jsonify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
@@ -1162,97 +1413,28 @@
"dev": true
},
"jsonparse": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
- "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
"labeled-stream-splicer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
- "integrity": "sha1-RhUzFTd4SYHo/SZOHzpDTE4N3WU=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "stream-splicer": "1.3.2"
- }
- },
- "lexical-scope": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
- "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
- "dev": true,
- "requires": {
- "astw": "2.2.0"
- }
- },
- "lodash._baseassign": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
- "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
- "dev": true,
- "requires": {
- "lodash._basecopy": "3.0.1",
- "lodash.keys": "3.1.2"
- }
- },
- "lodash._basecopy": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
- "dev": true
- },
- "lodash._basecreate": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
- "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
- "dev": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
- "dev": true
- },
- "lodash._isiterateecall": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
- "dev": true
- },
- "lodash.create": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
- "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
- "dev": true,
- "requires": {
- "lodash._baseassign": "3.2.0",
- "lodash._basecreate": "3.0.3",
- "lodash._isiterateecall": "3.0.9"
- }
- },
- "lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
- "dev": true
- },
- "lodash.isarray": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
- "dev": true
- },
- "lodash.keys": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
"dev": true,
"requires": {
- "lodash._getnative": "3.9.1",
- "lodash.isarguments": "3.1.0",
- "lodash.isarray": "3.0.4"
+ "inherits": "^2.0.1",
+ "isarray": "^2.0.4",
+ "stream-splicer": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "dev": true
+ }
}
},
"lodash.memoize": {
@@ -1262,24 +1444,21 @@
"dev": true
},
"md5.js": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
- "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
"requires": {
- "hash-base": "3.0.4",
- "inherits": "2.0.3"
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
},
"dependencies": {
- "hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
- }
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
@@ -1289,14 +1468,14 @@
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0"
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
}
},
"minimalistic-assert": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
- "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
"minimalistic-crypto-utils": {
@@ -1306,12 +1485,12 @@
"dev": true
},
"minimatch": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
@@ -1338,101 +1517,119 @@
}
},
"mocha": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
- "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
- "browser-stdout": "1.3.0",
- "commander": "2.9.0",
- "debug": "2.6.8",
- "diff": "3.2.0",
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
"escape-string-regexp": "1.0.5",
- "glob": "7.1.1",
- "growl": "1.9.2",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
"he": "1.1.1",
- "json3": "3.3.2",
- "lodash.create": "3.1.1",
+ "minimatch": "3.0.4",
"mkdirp": "0.5.1",
- "supports-color": "3.1.2"
+ "supports-color": "5.4.0"
},
"dependencies": {
"glob": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
- "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.8"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
}
}
},
"module-deps": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.9.1.tgz",
- "integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "browser-resolve": "1.11.2",
- "concat-stream": "1.4.10",
- "defined": "1.0.0",
- "detective": "4.7.1",
- "duplexer2": "0.0.2",
- "inherits": "2.0.3",
- "parents": "1.0.1",
- "readable-stream": "1.1.14",
- "resolve": "1.5.0",
- "stream-combiner2": "1.0.2",
- "subarg": "1.0.0",
- "through2": "1.1.1",
- "xtend": "4.0.1"
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.1.0.tgz",
+ "integrity": "sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.0.2",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
- "defined": {
+ "isarray": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
- "resolve": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
},
"xtend": {
@@ -1461,28 +1658,19 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
- }
- },
- "optimist": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
- "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
- "dev": true,
- "requires": {
- "wordwrap": "0.0.3"
+ "wrappy": "1"
}
},
"os-browserify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
- "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
"pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
"dev": true
},
"parents": {
@@ -1491,26 +1679,26 @@
"integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
"dev": true,
"requires": {
- "path-platform": "0.11.15"
+ "path-platform": "~0.11.15"
}
},
"parse-asn1": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
- "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "version": "5.1.1",
+ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
"dev": true,
"requires": {
- "asn1.js": "4.9.2",
- "browserify-aes": "1.1.1",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "pbkdf2": "3.0.14"
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
}
},
"path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true
},
"path-is-absolute": {
@@ -1520,9 +1708,9 @@
"dev": true
},
"path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"path-platform": {
@@ -1532,22 +1720,22 @@
"dev": true
},
"pbkdf2": {
- "version": "3.0.14",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
- "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"dev": true,
"requires": {
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.9"
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
"process": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz",
- "integrity": "sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU=",
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
"dev": true
},
"process-nextick-args": {
@@ -1557,22 +1745,31 @@
"dev": true
},
"public-encrypt": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
- "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "parse-asn1": "5.1.0",
- "randombytes": "2.0.6"
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"punycode": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz",
- "integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A=",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
"querystring": {
@@ -1593,17 +1790,64 @@
"integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.1.0"
}
},
"randomfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
- "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"requires": {
- "randombytes": "2.0.6",
- "safe-buffer": "5.1.1"
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"readable-stream": {
@@ -1612,75 +1856,29 @@
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
- },
- "readable-wrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz",
- "integrity": "sha1-O1ohHGMeEjA6VJkcgGwX564ga/8=",
- "dev": true,
- "requires": {
- "readable-stream": "1.1.14"
+ "string_decoder": "~0.10.x"
}
},
"resolve": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz",
- "integrity": "sha1-OVqe+ehz+/4SvRRAi9kbuTYAPWk=",
- "dev": true
- },
- "rfile": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rfile/-/rfile-1.0.0.tgz",
- "integrity": "sha1-WXCM+Qyh50xUw8/Fw2/bmBBDUmE=",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"dev": true,
"requires": {
- "callsite": "1.0.0",
- "resolve": "0.3.1"
- },
- "dependencies": {
- "resolve": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.3.1.tgz",
- "integrity": "sha1-NMY0R8ZkxwWY0cmxJvxDsqJDEKQ=",
- "dev": true
- }
+ "path-parse": "^1.0.5"
}
},
"ripemd160": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
- "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
- "dev": true,
- "requires": {
- "hash-base": "2.0.2",
- "inherits": "2.0.3"
- }
- },
- "ruglify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ruglify/-/ruglify-1.0.0.tgz",
- "integrity": "sha1-3Ikw4qlUSidDAcyZcldMDQmGtnU=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"requires": {
- "rfile": "1.0.0",
- "uglify-js": "2.2.5"
- },
- "dependencies": {
- "uglify-js": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
- "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
- "dev": true,
- "requires": {
- "optimist": "0.3.7",
- "source-map": "0.1.43"
- }
- }
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
}
},
"safe-buffer": {
@@ -1690,35 +1888,41 @@
"dev": true
},
"sha.js": {
- "version": "2.4.9",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
- "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "version": "2.4.11",
+ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
}
},
- "shallow-copy": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
- "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
- "dev": true
- },
"shasum": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
"integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
"dev": true,
"requires": {
- "json-stable-stringify": "0.0.1",
- "sha.js": "2.4.9"
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
}
},
"shell-quote": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz",
- "integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "~0.0.0",
+ "array-map": "~0.0.0",
+ "array-reduce": "~0.0.0",
+ "jsonify": "~0.0.0"
+ }
+ },
+ "simple-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
"dev": true
},
"source-map": {
@@ -1727,65 +1931,208 @@
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "amdefine": ">=0.0.4"
}
},
"stream-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz",
- "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14"
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"stream-combiner2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.2.tgz",
- "integrity": "sha1-unKmtQy/q/qVD8i8h2BL0B62BnE=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
"dev": true,
"requires": {
- "duplexer2": "0.0.2",
- "through2": "0.5.1"
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
},
"dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
"readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "through2": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
- "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "safe-buffer": "~5.1.0"
}
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"stream-splicer": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.2.tgz",
- "integrity": "sha1-PARBvhW5v04iYnXm3IOWR0VUZmE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
"dev": true,
"requires": {
- "indexof": "0.0.1",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "readable-stream": "1.1.14",
- "readable-wrap": "1.0.0",
- "through2": "1.1.1"
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"string_decoder": {
@@ -1800,25 +2147,25 @@
"integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "minimist": "^1.1.0"
}
},
"supports-color": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
- "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "1.0.0"
+ "has-flag": "^3.0.0"
}
},
"syntax-error": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
- "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
"dev": true,
"requires": {
- "acorn": "4.0.13"
+ "acorn-node": "^1.2.0"
}
},
"through": {
@@ -1833,8 +2180,8 @@
"integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14",
- "xtend": "4.0.1"
+ "readable-stream": ">=1.1.13-1 <1.2.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
},
"dependencies": {
"xtend": {
@@ -1851,21 +2198,19 @@
"integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
"dev": true,
"requires": {
- "process": "0.11.10"
- },
- "dependencies": {
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- }
+ "process": "~0.11.0"
}
},
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
"tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
"dev": true
},
"typedarray": {
@@ -1880,8 +2225,8 @@
"integrity": "sha512-esJIpNQIC44EFSrbeFPhiXHy2HJ+dTcnn0Zdkn+5meuLsvoV0mFJffKlyezNIIHNfhF0NpgbifygCfEyAogIhQ==",
"dev": true,
"requires": {
- "commander": "2.13.0",
- "source-map": "0.6.1"
+ "commander": "~2.13.0",
+ "source-map": "~0.6.1"
},
"dependencies": {
"commander": {
@@ -1898,51 +2243,36 @@
}
}
},
- "uglify-to-browserify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
"dev": true
},
- "umd": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/umd/-/umd-2.1.0.tgz",
- "integrity": "sha1-SmMHt2LxfwLSAbX6FU5nM5bCY88=",
+ "undeclared-identifiers": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz",
+ "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==",
"dev": true,
"requires": {
- "rfile": "1.0.0",
- "ruglify": "1.0.0",
- "through": "2.3.8",
- "uglify-js": "2.4.24"
+ "acorn-node": "^1.3.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
},
"dependencies": {
- "source-map": {
- "version": "0.1.34",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
- "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=",
- "dev": true,
- "requires": {
- "amdefine": "1.0.1"
- }
- },
- "uglify-js": {
- "version": "2.4.24",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz",
- "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=",
- "dev": true,
- "requires": {
- "async": "0.2.10",
- "source-map": "0.1.34",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.5.4"
- }
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"url": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
- "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
"dev": true,
"requires": {
"punycode": "1.3.2",
@@ -1958,20 +2288,12 @@
}
},
"util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dev": true,
"requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- }
+ "inherits": "2.0.3"
}
},
"util-deprecate": {
@@ -1981,13 +2303,10 @@
"dev": true
},
"vm-browserify": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true,
- "requires": {
- "indexof": "0.0.1"
- }
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
+ "dev": true
},
"watch": {
"version": "0.13.0",
@@ -1995,21 +2314,9 @@
"integrity": "sha1-/MbSs/DoxzSC61Qjmhn9W8+adTw=",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "minimist": "^1.1.0"
}
},
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
- "dev": true
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -2021,26 +2328,6 @@
"resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
"integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
"dev": true
- },
- "yargs": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz",
- "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=",
- "dev": true,
- "requires": {
- "camelcase": "1.2.1",
- "decamelize": "1.2.0",
- "window-size": "0.1.0",
- "wordwrap": "0.0.2"
- },
- "dependencies": {
- "wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
- "dev": true
- }
- }
}
}
}
diff --git a/package.json b/package.json
index 6ed5799..b9e701f 100644
--- a/package.json
+++ b/package.json
@@ -27,12 +27,12 @@
"watch": "make watch"
},
"devDependencies": {
+ "browserify": "^16.2.3",
+ "bundle-collapser": "~1.1.1",
+ "coffeeify": "~1.0.0",
"coffeescript": "~1.9.0",
- "watch": "~0.13.0",
+ "mocha": "^5.2.0",
"uglify-js": "~3.3.7",
- "mocha": "~3.5.3",
- "browserify": "~8.1.3",
- "coffeeify": "~1.0.0",
- "bundle-collapser": "~1.1.1"
+ "watch": "~0.13.0"
}
}
From 80d9ecb94d4d7e35228e59e51301416560484264 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 17 Oct 2018 10:39:32 -0400
Subject: [PATCH 56/62] Reposition cursor when pasting full card numbers (#51)
* Reposition cursor when pasting full card numbers
* Create a directionality utility function
---
src/payform.coffee | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/payform.coffee b/src/payform.coffee
index fe02196..bf9ab33 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -194,6 +194,14 @@
cardFromType = (type) ->
return card for card in payform.cards when card.type is type
+ getDirectionality = (target) ->
+ # Work around Firefox not returning the styles in some edge cases.
+ # In Firefox < 62, style can be `null`.
+ # In Firefox 62+, `style['direction']` can be an empty string.
+ # See https://bugzilla.mozilla.org/show_bug.cgi?id=1467722.
+ style = getComputedStyle(target)
+ style and style['direction'] or document.dir
+
luhnCheck = (num) ->
odd = true
sum = 0
@@ -237,10 +245,21 @@
reFormatCardNumber = (e) ->
cursor = _getCaretPos(e.target)
return if e.target.value is ""
+
+ if getDirectionality(e.target) == 'ltr'
+ cursor = _getCaretPos(e.target)
+
e.target.value = payform.formatCardNumber(e.target.value)
- if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
+
+ if getDirectionality(e.target) == 'ltr' and cursor isnt e.target.selectionStart
+ cursor = _getCaretPos(e.target)
+
+ if getDirectionality(e.target) == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
- if cursor? and e.type isnt 'change'
+
+ cursor = _getCaretPos(e.target)
+
+ if cursor? and cursor isnt 0 and e.type isnt 'change'
e.target.setSelectionRange(cursor, cursor)
formatCardNumber = (e) ->
@@ -302,7 +321,7 @@
reFormatExpiry = (e) ->
return if e.target.value is ""
e.target.value = payform.formatCardExpiry(e.target.value)
- if document.dir == 'rtl' and e.target.value.indexOf('\u200e') == -1
+ if getDirectionality(e.target) == 'rtl' and e.target.value.indexOf('\u200e') == -1
e.target.value = '\u200e'.concat(e.target.value)
cursor = _getCaretPos(e.target)
if cursor? and e.type isnt 'change'
From 936d261103337352c2f715b3974cd3308b0a1d27 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Wed, 17 Oct 2018 11:09:30 -0400
Subject: [PATCH 57/62] Create release 1.3.0
---
CHANGELOG | 7 ++++
dist/jquery.payform.js | 80 +++++++++++++++++++++++++++-----------
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 76 ++++++++++++++++++++++++++----------
dist/payform.min.js | 2 +-
package.json | 2 +-
src/payform.coffee | 2 +-
7 files changed, 124 insertions(+), 47 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 140c2bd..b8e8379 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+= 1.3.0
+ * Updated Issuer Identification Number (IIN) patterns with documentaion (see PR #44 and #47)
+ * Allow right and left arrow keys to be used while navigating inside all input types (see PR #45)
+ * Fix issue with clearning selected text when typing (see PR #48)
+ * Fix issuewith the expiry field parsing when typing in a RTL context (see PR #50)
+ * Allow cursor repositioning when pasting full card numbers (see PR #51)
+
= 1.2.5
* Fixes #37, allowing for vendoring and fix event normalization (PR #39)
* Fixes #38, full width character fixes for Safari
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index 9d2d55f..fab80e7 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -1,4 +1,4 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o
License: MIT
- Version: 1.2.5
+ Version: 1.3.0
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
@@ -50,7 +49,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return this[name] = definition();
}
})('payform', function() {
- var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
+ var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
_getCaretPos = function(ele) {
var r, rc, re;
if (ele.selectionStart != null) {
@@ -100,11 +99,18 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
}
};
payform = {};
+ keyCodes = {
+ UNKNOWN: 0,
+ BACKSPACE: 8,
+ PAGE_UP: 33,
+ ARROW_LEFT: 37,
+ ARROW_RIGHT: 39
+ };
defaultFormat = /(\d{1,4})/g;
payform.cards = [
{
type: 'elo',
- pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,
+ pattern: /^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -118,7 +124,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
luhn: true
}, {
type: 'maestro',
- pattern: /^(5(018|0[23]|[68])|6(39|7))/,
+ pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/,
format: defaultFormat,
length: [12, 13, 14, 15, 16, 17, 18, 19],
cvcLength: [3],
@@ -141,12 +147,12 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
type: 'visa',
pattern: /^4/,
format: defaultFormat,
- length: [13, 16],
+ length: [13, 16, 19],
cvcLength: [3],
luhn: true
}, {
type: 'mastercard',
- pattern: /^(5[1-5]|2[2-7])/,
+ pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -156,25 +162,32 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
pattern: /^3[47]/,
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
length: [15],
- cvcLength: [3, 4],
+ cvcLength: [4],
+ luhn: true
+ }, {
+ type: 'hipercard',
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/,
+ format: defaultFormat,
+ length: [14, 15, 16, 17, 18, 19],
+ cvcLength: [3],
luhn: true
}, {
type: 'dinersclub',
- pattern: /^3[0689]/,
- format: /(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,
+ pattern: /^(36|38|30[0-5])/,
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
length: [14],
cvcLength: [3],
luhn: true
}, {
type: 'discover',
- pattern: /^6([045]|22)/,
+ pattern: /^(6011|65|64[4-9]|622)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
luhn: true
}, {
type: 'unionpay',
- pattern: /^(62|88)/,
+ pattern: /^62/,
format: defaultFormat,
length: [16, 17, 18, 19],
cvcLength: [3],
@@ -183,7 +196,14 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
type: 'jcb',
pattern: /^35/,
format: defaultFormat,
- length: [16],
+ length: [16, 17, 18, 19],
+ cvcLength: [3],
+ luhn: true
+ }, {
+ type: 'laser',
+ pattern: /^(6706|6771|6709)/,
+ format: defaultFormat,
+ length: [16, 17, 18, 19],
cvcLength: [3],
luhn: true
}
@@ -209,6 +229,11 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
}
}
};
+ getDirectionality = function(target) {
+ var style;
+ style = getComputedStyle(target);
+ return style && style['direction'] || document.dir;
+ };
luhnCheck = function(num) {
var digit, digits, i, len, odd, sum;
odd = true;
@@ -257,15 +282,22 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
reFormatCardNumber = function(e) {
var cursor;
+ cursor = _getCaretPos(e.target);
if (e.target.value === "") {
return;
}
+ if (getDirectionality(e.target) === 'ltr') {
+ cursor = _getCaretPos(e.target);
+ }
e.target.value = payform.formatCardNumber(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'ltr' && cursor !== e.target.selectionStart) {
+ cursor = _getCaretPos(e.target);
+ }
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
- if ((cursor != null) && e.type !== 'change') {
+ if ((cursor != null) && cursor !== 0 && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
};
@@ -309,13 +341,16 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
formatBackCardNumber = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
if (cursor && cursor !== value.length) {
return;
}
+ if ((e.target.selectionEnd - e.target.selectionStart) > 1) {
+ return;
+ }
if (/\d\s$/.test(value)) {
e.preventDefault();
return setTimeout(function() {
@@ -334,7 +369,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return;
}
e.target.value = payform.formatCardExpiry(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
@@ -386,7 +421,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
formatBackExpiry = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
@@ -416,10 +451,10 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
if (e.metaKey || e.ctrlKey) {
return;
}
- if (e.which === 0) {
+ if ([keyCodes.UNKNOWN, keyCodes.ARROW_LEFT, keyCodes.ARROW_RIGHT].indexOf(e.which) > -1) {
return;
}
- if (e.which < 33) {
+ if (e.which < keyCodes.PAGE_UP) {
return;
}
input = String.fromCharCode(e.which);
@@ -513,7 +548,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
prefix = prefix.toString().slice(0, 2);
year = prefix + year;
}
- month = parseInt(month, 10);
+ month = parseInt(month.replace(/[\u200e]/g, ""), 10);
year = parseInt(year, 10);
return {
month: month,
@@ -636,5 +671,4 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
});
-
},{}]},{},[1]);
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index 433ffdf..d96a3d0 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month.replace(/[\u200e]/g,""),10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index 28e9d9f..21057f7 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.5
+ Version: 1.3.0
*/
(function() {
@@ -20,7 +20,7 @@
return this[name] = definition();
}
})('payform', function() {
- var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
+ var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
_getCaretPos = function(ele) {
var r, rc, re;
if (ele.selectionStart != null) {
@@ -70,11 +70,18 @@
}
};
payform = {};
+ keyCodes = {
+ UNKNOWN: 0,
+ BACKSPACE: 8,
+ PAGE_UP: 33,
+ ARROW_LEFT: 37,
+ ARROW_RIGHT: 39
+ };
defaultFormat = /(\d{1,4})/g;
payform.cards = [
{
type: 'elo',
- pattern: /^((50670[7-8])|(506715)|(50671[7-9])|(50672[0-1])|(50672[4-9])|(50673[0-3])|(506739)|(50674[0-8])|(50675[0-3])|(50677[4-8])|(50900[0-9])|(50901[3-9])|(50902[0-9])|(50903[1-9])|(50904[0-9])|(50905[0-9])|(50906[0-4])|(50906[6-9])|(50907[0-2])|(50907[4-5])|(636368)|(636297)|(504175)|(438935)|(40117[8-9])|(45763[1-2])|(457393)|(431274)|(50907[6-9])|(50908[0-9])|(627780))/,
+ pattern: /^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -88,7 +95,7 @@
luhn: true
}, {
type: 'maestro',
- pattern: /^(5(018|0[23]|[68])|6(39|7))/,
+ pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/,
format: defaultFormat,
length: [12, 13, 14, 15, 16, 17, 18, 19],
cvcLength: [3],
@@ -111,12 +118,12 @@
type: 'visa',
pattern: /^4/,
format: defaultFormat,
- length: [13, 16],
+ length: [13, 16, 19],
cvcLength: [3],
luhn: true
}, {
type: 'mastercard',
- pattern: /^(5[1-5]|2[2-7])/,
+ pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -126,25 +133,32 @@
pattern: /^3[47]/,
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
length: [15],
- cvcLength: [3, 4],
+ cvcLength: [4],
+ luhn: true
+ }, {
+ type: 'hipercard',
+ pattern: /^(384100|384140|384160|606282|637095|637568|60(?!11))/,
+ format: defaultFormat,
+ length: [14, 15, 16, 17, 18, 19],
+ cvcLength: [3],
luhn: true
}, {
type: 'dinersclub',
- pattern: /^3[0689]/,
- format: /(\d{1,4})(\d{1,4})?(\d{1,4})?(\d{1,2})?/,
+ pattern: /^(36|38|30[0-5])/,
+ format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
length: [14],
cvcLength: [3],
luhn: true
}, {
type: 'discover',
- pattern: /^6([045]|22)/,
+ pattern: /^(6011|65|64[4-9]|622)/,
format: defaultFormat,
length: [16],
cvcLength: [3],
luhn: true
}, {
type: 'unionpay',
- pattern: /^(62|88)/,
+ pattern: /^62/,
format: defaultFormat,
length: [16, 17, 18, 19],
cvcLength: [3],
@@ -153,7 +167,14 @@
type: 'jcb',
pattern: /^35/,
format: defaultFormat,
- length: [16],
+ length: [16, 17, 18, 19],
+ cvcLength: [3],
+ luhn: true
+ }, {
+ type: 'laser',
+ pattern: /^(6706|6771|6709)/,
+ format: defaultFormat,
+ length: [16, 17, 18, 19],
cvcLength: [3],
luhn: true
}
@@ -179,6 +200,11 @@
}
}
};
+ getDirectionality = function(target) {
+ var style;
+ style = getComputedStyle(target);
+ return style && style['direction'] || document.dir;
+ };
luhnCheck = function(num) {
var digit, digits, i, len, odd, sum;
odd = true;
@@ -227,15 +253,22 @@
};
reFormatCardNumber = function(e) {
var cursor;
+ cursor = _getCaretPos(e.target);
if (e.target.value === "") {
return;
}
+ if (getDirectionality(e.target) === 'ltr') {
+ cursor = _getCaretPos(e.target);
+ }
e.target.value = payform.formatCardNumber(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'ltr' && cursor !== e.target.selectionStart) {
+ cursor = _getCaretPos(e.target);
+ }
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
- if ((cursor != null) && e.type !== 'change') {
+ if ((cursor != null) && cursor !== 0 && e.type !== 'change') {
return e.target.setSelectionRange(cursor, cursor);
}
};
@@ -279,13 +312,16 @@
formatBackCardNumber = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
if (cursor && cursor !== value.length) {
return;
}
+ if ((e.target.selectionEnd - e.target.selectionStart) > 1) {
+ return;
+ }
if (/\d\s$/.test(value)) {
e.preventDefault();
return setTimeout(function() {
@@ -304,7 +340,7 @@
return;
}
e.target.value = payform.formatCardExpiry(e.target.value);
- if (document.dir === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
+ if (getDirectionality(e.target) === 'rtl' && e.target.value.indexOf('\u200e') === -1) {
e.target.value = '\u200e'.concat(e.target.value);
}
cursor = _getCaretPos(e.target);
@@ -356,7 +392,7 @@
formatBackExpiry = function(e) {
var cursor, value;
value = e.target.value;
- if (e.which !== 8) {
+ if (e.which !== keyCodes.BACKSPACE) {
return;
}
cursor = _getCaretPos(e.target);
@@ -386,10 +422,10 @@
if (e.metaKey || e.ctrlKey) {
return;
}
- if (e.which === 0) {
+ if ([keyCodes.UNKNOWN, keyCodes.ARROW_LEFT, keyCodes.ARROW_RIGHT].indexOf(e.which) > -1) {
return;
}
- if (e.which < 33) {
+ if (e.which < keyCodes.PAGE_UP) {
return;
}
input = String.fromCharCode(e.which);
@@ -483,7 +519,7 @@
prefix = prefix.toString().slice(0, 2);
year = prefix + year;
}
- month = parseInt(month, 10);
+ month = parseInt(month.replace(/[\u200e]/g, ""), 10);
year = parseInt(year, 10);
return {
month: month,
diff --git a/dist/payform.min.js b/dist/payform.min.js
index 0d17017..07f8b72 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardNumber(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(document.dir==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==8){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if(e.which===0){return}if(e.which<33){return}input=String.fromCharCode(e.which);if(!/^\d+$/.test(input)){return e.preventDefault()}};restrictCardNumber=function(e){var card,digit,maxLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=(e.target.value+digit).replace(/\D/g,"");card=cardFromNumber(value);maxLength=card?card.length[card.length.length-1]:16;if(value.length>maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month,10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month.replace(/[\u200e]/g,""),10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package.json b/package.json
index b9e701f..6ef05f4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.5",
+ "version": "1.3.0",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
diff --git a/src/payform.coffee b/src/payform.coffee
index bf9ab33..6866e00 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.2.5
+ Version: 1.3.0
###
((name, definition) ->
if module?
From 5257fca97a0f05cbb3ef78f7e406749fbd6d6fc9 Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Tue, 13 Nov 2018 16:02:39 -0500
Subject: [PATCH 58/62] Widen support for Maestro BIN patterns (#54)
* Update README.md
* Add hipercard & laser. Update patterns for others.
Based on https://github.com/jessepollak/payment/blob/329d687942098f8c25a8cbe6078ec07834ec6a8d/src/index.coffee
* Extract KeyCodes into a variable, filter right and left arrow keys on keypress
* Set cursor position before formatting the card number instead of after
* Add tests for hipercard
* Add 17-19 digit JCB support
From https://github.com/jessepollak/payment/pull/84
* Move hipercard above dinersclub for specificity
* Add documentation for credit and debit card IIN patterns
* Ignore single digit removal when selection length is not equal to 1
* add release instructions to contributing.md
* Update CONTRIBUTING.md
* add note about running tests before release
* Update CONTRIBUTING.md
* Clear control characters from expiry date string before parsing (#50)
* Clear control characters from expiry date string before parsing
* Add comment to explain U200E character removal
* Update CONTRIBUTING.md
* Update Browserify and Mocha to address dependency vulnerabilities (#52)
* Update Browserify to address dependcy vulnerabilities
* Update Mocha to address dependcy vulnerabilities
* Reposition cursor when pasting full card numbers (#51)
* Reposition cursor when pasting full card numbers
* Create a directionality utility function
* Create release 1.3.0
* Widen supported BIN numbers for Maestro debit cards
---
CARDRULES.md | 6 ++----
README.md | 14 ++++++++++++--
package-lock.json | 2 +-
src/payform.coffee | 2 +-
test/formatCardNumber_spec.coffee | 1 +
test/validateCardNumber_spec.coffee | 4 ++++
6 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/CARDRULES.md b/CARDRULES.md
index 4999801..cc20a0a 100644
--- a/CARDRULES.md
+++ b/CARDRULES.md
@@ -75,7 +75,7 @@ The following list contains Issuer Identification Number (IIN) patterns and leng
### Maestro
-**IIN Pattern:** 5018, 5020, 5038, 6304, 6703, 6708, 6759, 676[1-3] [12]
+**IIN Pattern:** 5018, 5020, 5038, 6304, 639000 to 639099, 670000 to 679999 [12], [13]
**Length:** 12-19
@@ -99,6 +99,4 @@ The following list contains Issuer Identification Number (IIN) patterns and leng
[10]: https://github.com/Adyen/adyen-magento/issues/236
[11]: https://tech.dibspayment.com/D2/Toolbox/Test_information/Cards
[12]: http://blog.unibulmerchantservices.com/12-signs-of-a-valid-mastercard-card/
-
-
-
+[13]: https://www.mastercard.us/content/dam/mccom/global/documents/mastercard-rules.pdf
diff --git a/README.md b/README.md
index 7f99bf9..b3b9b12 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,20 @@
+---
+
+
Hi! Do you use webpack?
+
+
+ I'm currently working on a product that will help you keep track of the assets you're producing and their delivery performance concerns. Along with reporting those stats right to your GitHub pull requests.
+
+
+ Check it out at packtracker.io and request early access if you want to help me kick the tires!
+
+
+---
# payform
[](https://travis-ci.org/jondavidjohn/payform)

-[](https://npmjs.org/package/payform)
-
A general purpose library for building credit card forms, validating inputs, and formatting numbers.
Supported card types:
diff --git a/package-lock.json b/package-lock.json
index 73002f6..3f8424d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.2.5",
+ "version": "1.3.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/src/payform.coffee b/src/payform.coffee
index 6866e00..99ed4dc 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -89,7 +89,7 @@
}
{
type: 'maestro'
- pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/
+ pattern: /^(5018|5020|5038|6304|6390[0-9]{2}|67[0-9]{4})/
format: defaultFormat
length: [12..19]
cvcLength: [3]
diff --git a/test/formatCardNumber_spec.coffee b/test/formatCardNumber_spec.coffee
index fc48209..256be0b 100644
--- a/test/formatCardNumber_spec.coffee
+++ b/test/formatCardNumber_spec.coffee
@@ -8,6 +8,7 @@ describe 'payform', ->
assert.equal payform.formatCardNumber('42424242'), '4242 4242'
assert.equal payform.formatCardNumber('4242424242'), '4242 4242 42'
assert.equal payform.formatCardNumber('4242424242424242'), '4242 4242 4242 4242'
+ assert.equal payform.formatCardNumber('4242424242424242424'), '4242 4242 4242 4242 424'
it 'should format amex cc number correctly', ->
assert.equal payform.formatCardNumber('37828'), '3782 8'
diff --git a/test/validateCardNumber_spec.coffee b/test/validateCardNumber_spec.coffee
index 13b08bb..b2b59af 100644
--- a/test/validateCardNumber_spec.coffee
+++ b/test/validateCardNumber_spec.coffee
@@ -43,6 +43,10 @@ describe 'payform', ->
assert(payform.validateCardNumber('4917300800000000'), 'visaelectron')
assert(payform.validateCardNumber('6759649826438453'), 'maestro')
+ assert(payform.validateCardNumber('639002000000000003'), 'maestro')
+ assert(payform.validateCardNumber('6771798021000008'), 'maestro')
+ assert(payform.validateCardNumber('6771830999991239'), 'maestro')
+ assert(payform.validateCardNumber('6799990100000000019'), 'maestro')
assert(payform.validateCardNumber('6007220000000004'), 'forbrugsforeningen')
From 981c5f96f7585d6ff501dadae9d25cd18766e011 Mon Sep 17 00:00:00 2001
From: Sergio Cruz
Date: Sat, 5 Jan 2019 12:37:40 -0500
Subject: [PATCH 59/62] Adds support for detaching events from input fields
(#62)
* Adds support for detaching events from input fields
* Updates jQuery plugin API
* Updates plugin documentation
* Refactors methods to attach and detach events
---
README.md | 57 +++++++++++++
src/jquery.payform.coffee | 8 ++
src/payform.coffee | 165 ++++++++++++++++++++++++++++++++------
3 files changed, 205 insertions(+), 25 deletions(-)
diff --git a/README.md b/README.md
index b3b9b12..603beb4 100644
--- a/README.md
+++ b/README.md
@@ -277,6 +277,63 @@ var input = document.getElementById('numeric');
payform.numericInput(input);
```
+### Detaching formatting helpers from ` `
+
+Once you have used the formatting helpers available, you might also want to remove them from your input elements. Being able to remove them is especially useful in a Single Page Application (SPA) environment where you want to make sure you're properly unsubscribing events from elements before removing them from the DOM. Detaching events will assure you will not encounter any memory leaks while using this library.
+
+These methods are specifically for use in the browser to detach ` ` formatters.
+
+#### payform.detachCardNumberInput(input)
+
+_jQuery plugin:_ `$(...).payform('detachFormatCardNumber')`
+
+Example:
+
+``` javascript
+var input = document.getElementById('ccnum');
+// now you're able to detach:
+payform.detachCardNumberInput(input);
+```
+
+#### payform.detachExpiryInput(input)
+
+_jQuery plugin:_ `$(...).payform('detachFormatCardExpiry')`
+
+Example:
+
+``` javascript
+var input = document.getElementById('expiry');
+payform.expiryInput(input);
+// now you're able to detach:
+payform.detachExpiryInput(input);
+```
+
+#### payform.detachCvcInput(input)
+
+_jQuery plugin:_ `$(...).payform('detachFormatCardCVC')`
+
+Example:
+
+``` javascript
+var input = document.getElementById('cvc');
+payform.cvcInput(input);
+// now you're able to detach:
+payform.detachCvcInput(input);
+```
+
+#### payform.detachNumericInput(input)
+
+_jQuery plugin:_ `$(...).payform('detachFormatNumeric')`
+
+Example:
+
+``` javascript
+var input = document.getElementById('numeric');
+payform.numericInput(input);
+// now you're able to detach:
+payform.detachNumericInput(input);
+```
+
### Custom Cards
#### payform.cards
diff --git a/src/jquery.payform.coffee b/src/jquery.payform.coffee
index b2399bd..a8516fc 100644
--- a/src/jquery.payform.coffee
+++ b/src/jquery.payform.coffee
@@ -12,6 +12,14 @@ do ($ = window.jQuery || window.Zepto) ->
payform.cvcInput @get(0)
formatNumeric: ->
payform.numericInput @get(0)
+ detachFormatCardNumber: ->
+ payform.detachCardNumberInput @get(0)
+ detachFormatCardExpiry: ->
+ payform.detachExpiryInput @get(0)
+ detachFormatCardCVC: ->
+ payform.detachCvcInput @get(0)
+ detachFormatNumeric: ->
+ payform.detachNumericInput @get(0)
$.fn.payform = (method) ->
$.payform.fn[method].call(this) if $.payform.fn[method]?
diff --git a/src/payform.coffee b/src/payform.coffee
index 99ed4dc..91aae00 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -46,12 +46,17 @@
listener(newEvt)
_on = (ele, event, listener) ->
- listener = _eventNormalize(listener)
if ele.addEventListener?
ele.addEventListener(event, listener, false)
else
ele.attachEvent("on#{event}", listener)
+ _off = (ele, event, listener) ->
+ if ele.removeEventListener?
+ ele.removeEventListener(event, listener, false)
+ else
+ ele.detachEvent("on#{event}", listener)
+
payform = {}
# Key Codes
@@ -436,37 +441,147 @@
# Formatting
+ eventList = {
+ cvcInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictCVC),
+ },
+ {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(reFormatCVC),
+ },
+ {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatCVC),
+ },
+ {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatCVC),
+ },
+ ],
+
+ expiryInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictExpiry),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatCardExpiry),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatForwardSlashAndSpace),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatForwardExpiry),
+ },
+ {
+ eventName: 'keydown',
+ eventHandler: _eventNormalize(formatBackExpiry),
+ },
+ {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatExpiry),
+ },
+ {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatExpiry),
+ },
+ ],
+
+ cardNumberInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictCardNumber),
+ },
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatCardNumber),
+ },
+ {
+ eventName: 'keydown',
+ eventHandler: _eventNormalize(formatBackCardNumber),
+ },
+ {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(reFormatCardNumber),
+ },
+ {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatCardNumber),
+ },
+ {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatCardNumber),
+ },
+ ],
+
+ numericInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ {
+ eventName: 'change',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ {
+ eventName: 'input',
+ eventHandler: _eventNormalize(restrictNumeric),
+ },
+ ],
+ }
+
+ attachEvents = (input, events, detach) ->
+ for evt in events
+ if (detach)
+ _off(input, evt.eventName, evt.eventHandler)
+ else
+ _on(input, evt.eventName, evt.eventHandler)
+ return
+
payform.cvcInput = (input) ->
- _on(input, 'keypress', restrictNumeric)
- _on(input, 'keypress', restrictCVC)
- _on(input, 'paste', reFormatCVC)
- _on(input, 'change', reFormatCVC)
- _on(input, 'input', reFormatCVC)
+ attachEvents(input, eventList.cvcInput)
payform.expiryInput = (input) ->
- _on(input, 'keypress', restrictNumeric)
- _on(input, 'keypress', restrictExpiry)
- _on(input, 'keypress', formatCardExpiry)
- _on(input, 'keypress', formatForwardSlashAndSpace)
- _on(input, 'keypress', formatForwardExpiry)
- _on(input, 'keydown', formatBackExpiry)
- _on(input, 'change', reFormatExpiry)
- _on(input, 'input', reFormatExpiry)
+ attachEvents(input, eventList.expiryInput)
payform.cardNumberInput = (input) ->
- _on(input, 'keypress', restrictNumeric)
- _on(input, 'keypress', restrictCardNumber)
- _on(input, 'keypress', formatCardNumber)
- _on(input, 'keydown', formatBackCardNumber)
- _on(input, 'paste', reFormatCardNumber)
- _on(input, 'change', reFormatCardNumber)
- _on(input, 'input', reFormatCardNumber)
+ attachEvents(input, eventList.cardNumberInput)
payform.numericInput = (input) ->
- _on(input, 'keypress', restrictNumeric)
- _on(input, 'paste', restrictNumeric)
- _on(input, 'change', restrictNumeric)
- _on(input, 'input', restrictNumeric)
+ attachEvents(input, eventList.numericInput)
+
+ payform.detachCvcInput = (input) ->
+ attachEvents(input, eventList.cvcInput, true)
+
+ payform.detachExpiryInput = (input) ->
+ attachEvents(input, eventList.expiryInput, true)
+
+ payform.detachCardNumberInput = (input) ->
+ attachEvents(input, eventList.cardNumberInput, true)
+
+ payform.detachNumericInput = (input) ->
+ attachEvents(input, eventList.numericInput, true)
# Validations
From 47cbdf4346361ccfbb9aa30a8b17b49a4e206bef Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Sat, 5 Jan 2019 13:41:47 -0500
Subject: [PATCH 60/62] Add 2 digit precision on Visa BIN rules (#60)
---
CARDRULES.md | 2 +-
src/payform.coffee | 2 +-
test/validateCardNumber_spec.coffee | 3 +++
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/CARDRULES.md b/CARDRULES.md
index cc20a0a..8cbef58 100644
--- a/CARDRULES.md
+++ b/CARDRULES.md
@@ -37,7 +37,7 @@ The following list contains Issuer Identification Number (IIN) patterns and leng
### Mastercard
-**IIN Pattern:** 5[1-5], 677189 ,222[1-9], 2[3-6][0-9][0-9], 27[0-1][0-9], 2720 [1], [6]
+**IIN Pattern:** 222100...272099, 510000..559999, 677189 [1], [6], [13]
**Length:** 16
diff --git a/src/payform.coffee b/src/payform.coffee
index 91aae00..ec7e344 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -127,7 +127,7 @@
}
{
type: 'mastercard'
- pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/
+ pattern: /^(5[1-5][0-9]{4}|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)([0-9]{2})/
format: defaultFormat
length: [16]
cvcLength: [3]
diff --git a/test/validateCardNumber_spec.coffee b/test/validateCardNumber_spec.coffee
index b2b59af..4f487d6 100644
--- a/test/validateCardNumber_spec.coffee
+++ b/test/validateCardNumber_spec.coffee
@@ -58,8 +58,11 @@ describe 'payform', ->
assert(payform.validateCardNumber('4462030000000000'), 'visa')
assert(payform.validateCardNumber('4484070000000000'), 'visa')
+ assert(payform.validateCardNumber('5105105105105100'), 'mastercard')
assert(payform.validateCardNumber('5555555555554444'), 'mastercard')
assert(payform.validateCardNumber('5454545454545454'), 'mastercard')
+ assert(payform.validateCardNumber('2223000048400011'), 'mastercard')
+ assert(payform.validateCardNumber('2720990010089800'), 'mastercard')
assert(payform.validateCardNumber('378282246310005'), 'amex')
assert(payform.validateCardNumber('371449635398431'), 'amex')
From 98fffc60f64e5438cfb2e948592562ea141a0f6d Mon Sep 17 00:00:00 2001
From: Darrel-Day Guerrero
Date: Sat, 5 Jan 2019 14:01:25 -0500
Subject: [PATCH 61/62] Create release 1.4.0
---
CHANGELOG | 4 +
dist/jquery.payform.js | 165 ++++++++++++++++++++++++++++++-------
dist/jquery.payform.min.js | 2 +-
dist/payform.js | 153 +++++++++++++++++++++++++++-------
dist/payform.min.js | 2 +-
package.json | 2 +-
src/payform.coffee | 2 +-
7 files changed, 268 insertions(+), 62 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index b8e8379..422b10c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+= 1.4.0
+ * Add support for detaching events from input fields (see PR #62)
+ * Use a 2-digit precision for Mastercard BIN validation patterns (see PR #62)
+
= 1.3.0
* Updated Issuer Identification Number (IIN) patterns with documentaion (see PR #44 and #47)
* Allow right and left arrow keys to be used while navigating inside all input types (see PR #45)
diff --git a/dist/jquery.payform.js b/dist/jquery.payform.js
index fab80e7..2a8ea97 100644
--- a/dist/jquery.payform.js
+++ b/dist/jquery.payform.js
@@ -17,6 +17,18 @@ payform = require(2);
},
formatNumeric: function() {
return payform.numericInput(this.get(0));
+ },
+ detachFormatCardNumber: function() {
+ return payform.detachCardNumberInput(this.get(0));
+ },
+ detachFormatCardExpiry: function() {
+ return payform.detachExpiryInput(this.get(0));
+ },
+ detachFormatCardCVC: function() {
+ return payform.detachCvcInput(this.get(0));
+ },
+ detachFormatNumeric: function() {
+ return payform.detachNumericInput(this.get(0));
}
};
return $.fn.payform = function(method) {
@@ -36,7 +48,7 @@ payform = require(2);
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.3.0
+ Version: 1.4.0
*/
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
@@ -49,7 +61,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return this[name] = definition();
}
})('payform', function() {
- var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
+ var _eventNormalize, _getCaretPos, _off, _on, attachEvents, cardFromNumber, cardFromType, defaultFormat, eventList, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
_getCaretPos = function(ele) {
var r, rc, re;
if (ele.selectionStart != null) {
@@ -91,13 +103,19 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
};
};
_on = function(ele, event, listener) {
- listener = _eventNormalize(listener);
if (ele.addEventListener != null) {
return ele.addEventListener(event, listener, false);
} else {
return ele.attachEvent("on" + event, listener);
}
};
+ _off = function(ele, event, listener) {
+ if (ele.removeEventListener != null) {
+ return ele.removeEventListener(event, listener, false);
+ } else {
+ return ele.detachEvent("on" + event, listener);
+ }
+ };
payform = {};
keyCodes = {
UNKNOWN: 0,
@@ -124,7 +142,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
luhn: true
}, {
type: 'maestro',
- pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/,
+ pattern: /^(5018|5020|5038|6304|6390[0-9]{2}|67[0-9]{4})/,
format: defaultFormat,
length: [12, 13, 14, 15, 16, 17, 18, 19],
cvcLength: [3],
@@ -152,7 +170,7 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
luhn: true
}, {
type: 'mastercard',
- pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/,
+ pattern: /^(5[1-5][0-9]{4}|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)([0-9]{2})/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -507,37 +525,126 @@ var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i
return e.preventDefault();
}
};
+ eventList = {
+ cvcInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictCVC)
+ }, {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(reFormatCVC)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatCVC)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatCVC)
+ }
+ ],
+ expiryInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictExpiry)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatCardExpiry)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatForwardSlashAndSpace)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatForwardExpiry)
+ }, {
+ eventName: 'keydown',
+ eventHandler: _eventNormalize(formatBackExpiry)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatExpiry)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatExpiry)
+ }
+ ],
+ cardNumberInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictCardNumber)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatCardNumber)
+ }, {
+ eventName: 'keydown',
+ eventHandler: _eventNormalize(formatBackCardNumber)
+ }, {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(reFormatCardNumber)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatCardNumber)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatCardNumber)
+ }
+ ],
+ numericInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }
+ ]
+ };
+ attachEvents = function(input, events, detach) {
+ var evt, i, len;
+ for (i = 0, len = events.length; i < len; i++) {
+ evt = events[i];
+ if (detach) {
+ _off(input, evt.eventName, evt.eventHandler);
+ } else {
+ _on(input, evt.eventName, evt.eventHandler);
+ }
+ }
+ };
payform.cvcInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'keypress', restrictCVC);
- _on(input, 'paste', reFormatCVC);
- _on(input, 'change', reFormatCVC);
- return _on(input, 'input', reFormatCVC);
+ return attachEvents(input, eventList.cvcInput);
};
payform.expiryInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'keypress', restrictExpiry);
- _on(input, 'keypress', formatCardExpiry);
- _on(input, 'keypress', formatForwardSlashAndSpace);
- _on(input, 'keypress', formatForwardExpiry);
- _on(input, 'keydown', formatBackExpiry);
- _on(input, 'change', reFormatExpiry);
- return _on(input, 'input', reFormatExpiry);
+ return attachEvents(input, eventList.expiryInput);
};
payform.cardNumberInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'keypress', restrictCardNumber);
- _on(input, 'keypress', formatCardNumber);
- _on(input, 'keydown', formatBackCardNumber);
- _on(input, 'paste', reFormatCardNumber);
- _on(input, 'change', reFormatCardNumber);
- return _on(input, 'input', reFormatCardNumber);
+ return attachEvents(input, eventList.cardNumberInput);
};
payform.numericInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'paste', restrictNumeric);
- _on(input, 'change', restrictNumeric);
- return _on(input, 'input', restrictNumeric);
+ return attachEvents(input, eventList.numericInput);
+ };
+ payform.detachCvcInput = function(input) {
+ return attachEvents(input, eventList.cvcInput, true);
+ };
+ payform.detachExpiryInput = function(input) {
+ return attachEvents(input, eventList.expiryInput, true);
+ };
+ payform.detachCardNumberInput = function(input) {
+ return attachEvents(input, eventList.cardNumberInput, true);
+ };
+ payform.detachNumericInput = function(input) {
+ return attachEvents(input, eventList.numericInput, true);
};
payform.parseCardExpiry = function(value) {
var month, prefix, ref, year;
diff --git a/dist/jquery.payform.min.js b/dist/jquery.payform.min.js
index d96a3d0..2044f29 100644
--- a/dist/jquery.payform.min.js
+++ b/dist/jquery.payform.min.js
@@ -1 +1 @@
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month.replace(/[\u200e]/g,""),10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};eventList={cvcInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"keypress",eventHandler:_eventNormalize(restrictCVC)},{eventName:"paste",eventHandler:_eventNormalize(reFormatCVC)},{eventName:"change",eventHandler:_eventNormalize(reFormatCVC)},{eventName:"input",eventHandler:_eventNormalize(reFormatCVC)}],expiryInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"keypress",eventHandler:_eventNormalize(restrictExpiry)},{eventName:"keypress",eventHandler:_eventNormalize(formatCardExpiry)},{eventName:"keypress",eventHandler:_eventNormalize(formatForwardSlashAndSpace)},{eventName:"keypress",eventHandler:_eventNormalize(formatForwardExpiry)},{eventName:"keydown",eventHandler:_eventNormalize(formatBackExpiry)},{eventName:"change",eventHandler:_eventNormalize(reFormatExpiry)},{eventName:"input",eventHandler:_eventNormalize(reFormatExpiry)}],cardNumberInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"keypress",eventHandler:_eventNormalize(restrictCardNumber)},{eventName:"keypress",eventHandler:_eventNormalize(formatCardNumber)},{eventName:"keydown",eventHandler:_eventNormalize(formatBackCardNumber)},{eventName:"paste",eventHandler:_eventNormalize(reFormatCardNumber)},{eventName:"change",eventHandler:_eventNormalize(reFormatCardNumber)},{eventName:"input",eventHandler:_eventNormalize(reFormatCardNumber)}],numericInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"paste",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"change",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"input",eventHandler:_eventNormalize(restrictNumeric)}]};attachEvents=function(input,events,detach){var evt,i,len;for(i=0,len=events.length;i=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})},{}]},{},[1]);
\ No newline at end of file
diff --git a/dist/payform.js b/dist/payform.js
index 21057f7..ff2528b 100644
--- a/dist/payform.js
+++ b/dist/payform.js
@@ -5,7 +5,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.3.0
+ Version: 1.4.0
*/
(function() {
@@ -20,7 +20,7 @@
return this[name] = definition();
}
})('payform', function() {
- var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
+ var _eventNormalize, _getCaretPos, _off, _on, attachEvents, cardFromNumber, cardFromType, defaultFormat, eventList, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, getDirectionality, hasTextSelected, keyCodes, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
_getCaretPos = function(ele) {
var r, rc, re;
if (ele.selectionStart != null) {
@@ -62,13 +62,19 @@
};
};
_on = function(ele, event, listener) {
- listener = _eventNormalize(listener);
if (ele.addEventListener != null) {
return ele.addEventListener(event, listener, false);
} else {
return ele.attachEvent("on" + event, listener);
}
};
+ _off = function(ele, event, listener) {
+ if (ele.removeEventListener != null) {
+ return ele.removeEventListener(event, listener, false);
+ } else {
+ return ele.detachEvent("on" + event, listener);
+ }
+ };
payform = {};
keyCodes = {
UNKNOWN: 0,
@@ -95,7 +101,7 @@
luhn: true
}, {
type: 'maestro',
- pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/,
+ pattern: /^(5018|5020|5038|6304|6390[0-9]{2}|67[0-9]{4})/,
format: defaultFormat,
length: [12, 13, 14, 15, 16, 17, 18, 19],
cvcLength: [3],
@@ -123,7 +129,7 @@
luhn: true
}, {
type: 'mastercard',
- pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/,
+ pattern: /^(5[1-5][0-9]{4}|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)([0-9]{2})/,
format: defaultFormat,
length: [16],
cvcLength: [3],
@@ -478,37 +484,126 @@
return e.preventDefault();
}
};
+ eventList = {
+ cvcInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictCVC)
+ }, {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(reFormatCVC)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatCVC)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatCVC)
+ }
+ ],
+ expiryInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictExpiry)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatCardExpiry)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatForwardSlashAndSpace)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatForwardExpiry)
+ }, {
+ eventName: 'keydown',
+ eventHandler: _eventNormalize(formatBackExpiry)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatExpiry)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatExpiry)
+ }
+ ],
+ cardNumberInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictCardNumber)
+ }, {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(formatCardNumber)
+ }, {
+ eventName: 'keydown',
+ eventHandler: _eventNormalize(formatBackCardNumber)
+ }, {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(reFormatCardNumber)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(reFormatCardNumber)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(reFormatCardNumber)
+ }
+ ],
+ numericInput: [
+ {
+ eventName: 'keypress',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'paste',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'change',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }, {
+ eventName: 'input',
+ eventHandler: _eventNormalize(restrictNumeric)
+ }
+ ]
+ };
+ attachEvents = function(input, events, detach) {
+ var evt, i, len;
+ for (i = 0, len = events.length; i < len; i++) {
+ evt = events[i];
+ if (detach) {
+ _off(input, evt.eventName, evt.eventHandler);
+ } else {
+ _on(input, evt.eventName, evt.eventHandler);
+ }
+ }
+ };
payform.cvcInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'keypress', restrictCVC);
- _on(input, 'paste', reFormatCVC);
- _on(input, 'change', reFormatCVC);
- return _on(input, 'input', reFormatCVC);
+ return attachEvents(input, eventList.cvcInput);
};
payform.expiryInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'keypress', restrictExpiry);
- _on(input, 'keypress', formatCardExpiry);
- _on(input, 'keypress', formatForwardSlashAndSpace);
- _on(input, 'keypress', formatForwardExpiry);
- _on(input, 'keydown', formatBackExpiry);
- _on(input, 'change', reFormatExpiry);
- return _on(input, 'input', reFormatExpiry);
+ return attachEvents(input, eventList.expiryInput);
};
payform.cardNumberInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'keypress', restrictCardNumber);
- _on(input, 'keypress', formatCardNumber);
- _on(input, 'keydown', formatBackCardNumber);
- _on(input, 'paste', reFormatCardNumber);
- _on(input, 'change', reFormatCardNumber);
- return _on(input, 'input', reFormatCardNumber);
+ return attachEvents(input, eventList.cardNumberInput);
};
payform.numericInput = function(input) {
- _on(input, 'keypress', restrictNumeric);
- _on(input, 'paste', restrictNumeric);
- _on(input, 'change', restrictNumeric);
- return _on(input, 'input', restrictNumeric);
+ return attachEvents(input, eventList.numericInput);
+ };
+ payform.detachCvcInput = function(input) {
+ return attachEvents(input, eventList.cvcInput, true);
+ };
+ payform.detachExpiryInput = function(input) {
+ return attachEvents(input, eventList.expiryInput, true);
+ };
+ payform.detachCardNumberInput = function(input) {
+ return attachEvents(input, eventList.cardNumberInput, true);
+ };
+ payform.detachNumericInput = function(input) {
+ return attachEvents(input, eventList.numericInput, true);
};
payform.parseCardExpiry = function(value) {
var month, prefix, ref, year;
diff --git a/dist/payform.min.js b/dist/payform.min.js
index 07f8b72..81d0860 100644
--- a/dist/payform.min.js
+++ b/dist/payform.min.js
@@ -1 +1 @@
-(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};payform.cvcInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCVC);_on(input,"paste",reFormatCVC);_on(input,"change",reFormatCVC);return _on(input,"input",reFormatCVC)};payform.expiryInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictExpiry);_on(input,"keypress",formatCardExpiry);_on(input,"keypress",formatForwardSlashAndSpace);_on(input,"keypress",formatForwardExpiry);_on(input,"keydown",formatBackExpiry);_on(input,"change",reFormatExpiry);return _on(input,"input",reFormatExpiry)};payform.cardNumberInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"keypress",restrictCardNumber);_on(input,"keypress",formatCardNumber);_on(input,"keydown",formatBackCardNumber);_on(input,"paste",reFormatCardNumber);_on(input,"change",reFormatCardNumber);return _on(input,"input",reFormatCardNumber)};payform.numericInput=function(input){_on(input,"keypress",restrictNumeric);_on(input,"paste",restrictNumeric);_on(input,"change",restrictNumeric);return _on(input,"input",restrictNumeric)};payform.parseCardExpiry=function(value){var month,prefix,ref,year;value=value.replace(/\s/g,"");ref=value.split("/",2),month=ref[0],year=ref[1];if((year!=null?year.length:void 0)===2&&/^\d+$/.test(year)){prefix=(new Date).getFullYear();prefix=prefix.toString().slice(0,2);year=prefix+year}month=parseInt(month.replace(/[\u200e]/g,""),10);year=parseInt(year,10);return{month:month,year:year}};payform.validateCardNumber=function(num){var card,ref;num=(num+"").replace(/\s+|-/g,"");if(!/^\d+$/.test(num)){return false}card=cardFromNumber(num);if(!card){return false}return(ref=num.length,indexOf.call(card.length,ref)>=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
+(function(){var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i9){digit-=9}sum+=digit}return sum%10===0};hasTextSelected=function(target){var ref;if((typeof document!=="undefined"&&document!==null?(ref=document.selection)!=null?ref.createRange:void 0:void 0)!=null){if(document.selection.createRange().text){return true}}return target.selectionStart!=null&&target.selectionStart!==target.selectionEnd};replaceFullWidthChars=function(str){var char,chars,fullWidth,halfWidth,i,idx,len,value;if(str==null){str=""}fullWidth="0123456789";halfWidth="0123456789";value="";chars=str.split("");for(i=0,len=chars.length;i-1){char=halfWidth[idx]}value+=char}return value};reFormatCardNumber=function(e){var cursor;cursor=_getCaretPos(e.target);if(e.target.value===""){return}if(getDirectionality(e.target)==="ltr"){cursor=_getCaretPos(e.target)}e.target.value=payform.formatCardNumber(e.target.value);if(getDirectionality(e.target)==="ltr"&&cursor!==e.target.selectionStart){cursor=_getCaretPos(e.target)}if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&cursor!==0&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardNumber=function(e){var card,cursor,digit,length,re,upperLength,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}value=e.target.value;card=cardFromNumber(value+digit);length=(value.replace(/\D/g,"")+digit).length;upperLength=16;if(card){upperLength=card.length[card.length.length-1]}if(length>=upperLength){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(card&&card.type==="amex"){re=/^(\d{4}|\d{4}\s\d{6})$/}else{re=/(?:^|\s)(\d{4})$/}if(re.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value+" "+digit})}else if(re.test(value+digit)){e.preventDefault();return setTimeout(function(){return e.target.value=value+digit+" "})}};formatBackCardNumber=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(e.target.selectionEnd-e.target.selectionStart>1){return}if(/\d\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s$/,"")})}else if(/\s\d?$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d$/,"")})}};reFormatExpiry=function(e){var cursor;if(e.target.value===""){return}e.target.value=payform.formatCardExpiry(e.target.value);if(getDirectionality(e.target)==="rtl"&&e.target.value.indexOf("")===-1){e.target.value="".concat(e.target.value)}cursor=_getCaretPos(e.target);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};formatCardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value+digit;if(/^\d$/.test(val)&&(val!=="0"&&val!=="1")){e.preventDefault();return setTimeout(function(){return e.target.value="0"+val+" / "})}else if(/^\d\d$/.test(val)){e.preventDefault();return setTimeout(function(){return e.target.value=val+" / "})}};formatForwardExpiry=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}val=e.target.value;if(/^\d\d$/.test(val)){return e.target.value=val+" / "}};formatForwardSlashAndSpace=function(e){var val,which;which=String.fromCharCode(e.which);if(!(which==="/"||which===" ")){return}val=e.target.value;if(/^\d$/.test(val)&&val!=="0"){return e.target.value="0"+val+" / "}};formatBackExpiry=function(e){var cursor,value;value=e.target.value;if(e.which!==keyCodes.BACKSPACE){return}cursor=_getCaretPos(e.target);if(cursor&&cursor!==value.length){return}if(/\d\s\/\s$/.test(value)){e.preventDefault();return setTimeout(function(){return e.target.value=value.replace(/\d\s\/\s$/,"")})}};reFormatCVC=function(e){var cursor;if(e.target.value===""){return}cursor=_getCaretPos(e.target);e.target.value=replaceFullWidthChars(e.target.value).replace(/\D/g,"").slice(0,4);if(cursor!=null&&e.type!=="change"){return e.target.setSelectionRange(cursor,cursor)}};restrictNumeric=function(e){var input;if(e.metaKey||e.ctrlKey){return}if([keyCodes.UNKNOWN,keyCodes.ARROW_LEFT,keyCodes.ARROW_RIGHT].indexOf(e.which)>-1){return}if(e.which maxLength){return e.preventDefault()}};restrictExpiry=function(e){var digit,value;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}value=e.target.value+digit;value=value.replace(/\D/g,"");if(value.length>6){return e.preventDefault()}};restrictCVC=function(e){var digit,val;digit=String.fromCharCode(e.which);if(!/^\d+$/.test(digit)){return}if(hasTextSelected(e.target)){return}val=e.target.value+digit;if(val.length>4){return e.preventDefault()}};eventList={cvcInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"keypress",eventHandler:_eventNormalize(restrictCVC)},{eventName:"paste",eventHandler:_eventNormalize(reFormatCVC)},{eventName:"change",eventHandler:_eventNormalize(reFormatCVC)},{eventName:"input",eventHandler:_eventNormalize(reFormatCVC)}],expiryInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"keypress",eventHandler:_eventNormalize(restrictExpiry)},{eventName:"keypress",eventHandler:_eventNormalize(formatCardExpiry)},{eventName:"keypress",eventHandler:_eventNormalize(formatForwardSlashAndSpace)},{eventName:"keypress",eventHandler:_eventNormalize(formatForwardExpiry)},{eventName:"keydown",eventHandler:_eventNormalize(formatBackExpiry)},{eventName:"change",eventHandler:_eventNormalize(reFormatExpiry)},{eventName:"input",eventHandler:_eventNormalize(reFormatExpiry)}],cardNumberInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"keypress",eventHandler:_eventNormalize(restrictCardNumber)},{eventName:"keypress",eventHandler:_eventNormalize(formatCardNumber)},{eventName:"keydown",eventHandler:_eventNormalize(formatBackCardNumber)},{eventName:"paste",eventHandler:_eventNormalize(reFormatCardNumber)},{eventName:"change",eventHandler:_eventNormalize(reFormatCardNumber)},{eventName:"input",eventHandler:_eventNormalize(reFormatCardNumber)}],numericInput:[{eventName:"keypress",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"paste",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"change",eventHandler:_eventNormalize(restrictNumeric)},{eventName:"input",eventHandler:_eventNormalize(restrictNumeric)}]};attachEvents=function(input,events,detach){var evt,i,len;for(i=0,len=events.length;i=0)&&(card.luhn===false||luhnCheck(num))};payform.validateCardExpiry=function(month,year){var currentTime,expiry,ref;if(typeof month==="object"&&"month"in month){ref=month,month=ref.month,year=ref.year}if(!(month&&year)){return false}month=String(month).trim();year=String(year).trim();if(!/^\d+$/.test(month)){return false}if(!/^\d+$/.test(year)){return false}if(!(1<=month&&month<=12)){return false}if(year.length===2){if(year<70){year="20"+year}else{year="19"+year}}if(year.length!==4){return false}expiry=new Date(year,month);currentTime=new Date;expiry.setMonth(expiry.getMonth()-1);expiry.setMonth(expiry.getMonth()+1,1);return expiry>currentTime};payform.validateCardCVC=function(cvc,type){var card,ref;cvc=String(cvc).trim();if(!/^\d+$/.test(cvc)){return false}card=cardFromType(type);if(card!=null){return ref=cvc.length,indexOf.call(card.cvcLength,ref)>=0}else{return cvc.length>=3&&cvc.length<=4}};payform.parseCardType=function(num){var ref;if(!num){return null}return((ref=cardFromNumber(num))!=null?ref.type:void 0)||null};payform.formatCardNumber=function(num){var card,groups,ref,upperLength;num=replaceFullWidthChars(num);num=num.replace(/\D/g,"");card=cardFromNumber(num);if(!card){return num}upperLength=card.length[card.length.length-1];num=num.slice(0,upperLength);if(card.format.global){return(ref=num.match(card.format))!=null?ref.join(" "):void 0}else{groups=card.format.exec(num);if(groups==null){return}groups.shift();groups=groups.filter(Boolean);return groups.join(" ")}};payform.formatCardExpiry=function(expiry){var mon,parts,sep,year;expiry=replaceFullWidthChars(expiry);parts=expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);if(!parts){return""}mon=parts[1]||"";sep=parts[2]||"";year=parts[3]||"";if(year.length>0){sep=" / "}else if(sep===" /"){mon=mon.substring(0,1);sep=""}else if(mon.length===2||sep.length>0){sep=" / "}else if(mon.length===1&&(mon!=="0"&&mon!=="1")){mon="0"+mon;sep=" / "}return mon+sep+year};return payform})}).call(this);
\ No newline at end of file
diff --git a/package.json b/package.json
index 6ef05f4..4378d54 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payform",
- "version": "1.3.0",
+ "version": "1.4.0",
"description": "A general purpose library for building credit card forms, validating inputs, and formatting numbers.",
"keywords": [
"payment",
diff --git a/src/payform.coffee b/src/payform.coffee
index ec7e344..957f6b6 100644
--- a/src/payform.coffee
+++ b/src/payform.coffee
@@ -4,7 +4,7 @@
URL: https://github.com/jondavidjohn/payform
Author: Jonathan D. Johnson
License: MIT
- Version: 1.3.0
+ Version: 1.4.0
###
((name, definition) ->
if module?
From 072c7b1c756573bac1085d61025c51a1abc87fad Mon Sep 17 00:00:00 2001
From: "Jonathan D. Johnson"
Date: Wed, 23 Jan 2019 17:57:24 -0600
Subject: [PATCH 62/62] Update README.md
---
README.md | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 603beb4..1e7d91c 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,15 @@
---
-
Hi! Do you use webpack?
+ Do you use webpack?
- I'm currently working on a product that will help you keep track of the assets you're producing and their delivery performance concerns. Along with reporting those stats right to your GitHub pull requests.
+ Wish your team made reducing the size of your webpack builds a priority? Want to know how the changes you're making impact your asset profile for every pull request ?
- Check it out at packtracker.io and request early access if you want to help me kick the tires!
+ Check it out at packtracker.io .
+
---
# payform