Skip to content

Commit 44c457a

Browse files
committed
Merge branch 'release/1.2.0'
2 parents fe33ffe + 7d06e8e commit 44c457a

14 files changed

+118
-80
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
language: node_js
2+
sudo: false
23
node_js:
34
- "0.10"
5+
- "0.12"

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
= 1.2.0
2+
* Updated Diners Club Pattern
3+
* New Mastercard Ranges
4+
* Support for full width input modes
5+
16
= 1.1.0
27
* Add jQuery Plugin shim
38
* Add numeric input formatter `numericInput`

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Supported card types:
2525

2626
Works in IE8+ and all other modern browsers.
2727

28-
[**Demo**](http://jondavidjohn.github.io/payform)
28+
[**Demo**](https://jondavidjohn.github.io/payform)
2929

3030
## Installation / Usage
3131

bower.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
{
22
"name": "payform",
3-
"version": "1.1.0",
43
"main": "dist/payform.js"
54
}

dist/jquery.payform.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/payform.js

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*/
1010

1111
(function() {
12-
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; };
12+
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; };
1313

1414
(function(name, definition) {
1515
if (typeof module !== "undefined" && module !== null) {
@@ -20,7 +20,7 @@
2020
return this[name] = definition();
2121
}
2222
})('payform', function() {
23-
var cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, _eventNormalize, _getCaretPos, _on;
23+
var _eventNormalize, _getCaretPos, _on, cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatCVC, reFormatCardNumber, reFormatExpiry, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric;
2424
_getCaretPos = function(ele) {
2525
var r, rc, re;
2626
if (ele.selectionStart != null) {
@@ -98,7 +98,7 @@
9898
luhn: true
9999
}, {
100100
type: 'mastercard',
101-
pattern: /^5[0-5]/,
101+
pattern: /^(5[1-5]|2[2-7])/,
102102
format: defaultFormat,
103103
length: [16],
104104
cvcLength: [3],
@@ -113,7 +113,7 @@
113113
}, {
114114
type: 'dinersclub',
115115
pattern: /^3[0689]/,
116-
format: defaultFormat,
116+
format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
117117
length: [14],
118118
cvcLength: [3],
119119
luhn: true
@@ -141,33 +141,33 @@
141141
}
142142
];
143143
cardFromNumber = function(num) {
144-
var card, _i, _len, _ref;
144+
var card, i, len, ref;
145145
num = (num + '').replace(/\D/g, '');
146-
_ref = payform.cards;
147-
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
148-
card = _ref[_i];
146+
ref = payform.cards;
147+
for (i = 0, len = ref.length; i < len; i++) {
148+
card = ref[i];
149149
if (card.pattern.test(num)) {
150150
return card;
151151
}
152152
}
153153
};
154154
cardFromType = function(type) {
155-
var card, _i, _len, _ref;
156-
_ref = payform.cards;
157-
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
158-
card = _ref[_i];
155+
var card, i, len, ref;
156+
ref = payform.cards;
157+
for (i = 0, len = ref.length; i < len; i++) {
158+
card = ref[i];
159159
if (card.type === type) {
160160
return card;
161161
}
162162
}
163163
};
164164
luhnCheck = function(num) {
165-
var digit, digits, odd, sum, _i, _len;
165+
var digit, digits, i, len, odd, sum;
166166
odd = true;
167167
sum = 0;
168168
digits = (num + '').split('').reverse();
169-
for (_i = 0, _len = digits.length; _i < _len; _i++) {
170-
digit = digits[_i];
169+
for (i = 0, len = digits.length; i < len; i++) {
170+
digit = digits[i];
171171
digit = parseInt(digit, 10);
172172
if ((odd = !odd)) {
173173
digit *= 2;
@@ -180,14 +180,33 @@
180180
return sum % 10 === 0;
181181
};
182182
hasTextSelected = function(target) {
183-
var _ref;
184-
if ((typeof document !== "undefined" && document !== null ? (_ref = document.selection) != null ? _ref.createRange : void 0 : void 0) != null) {
183+
var ref;
184+
if ((typeof document !== "undefined" && document !== null ? (ref = document.selection) != null ? ref.createRange : void 0 : void 0) != null) {
185185
if (document.selection.createRange().text) {
186186
return true;
187187
}
188188
}
189189
return (target.selectionStart != null) && target.selectionStart !== target.selectionEnd;
190190
};
191+
replaceFullWidthChars = function(str) {
192+
var char, chars, fullWidth, halfWidth, i, idx, len, value;
193+
if (str == null) {
194+
str = '';
195+
}
196+
fullWidth = '\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19';
197+
halfWidth = '0123456789';
198+
value = '';
199+
chars = str.split('');
200+
for (i = 0, len = chars.length; i < len; i++) {
201+
char = chars[i];
202+
idx = fullWidth.indexOf(char);
203+
if (idx > -1) {
204+
char = halfWidth[idx];
205+
}
206+
value += char;
207+
}
208+
return value;
209+
};
191210
reFormatCardNumber = function(e) {
192211
var cursor;
193212
cursor = _getCaretPos(e.target);
@@ -324,7 +343,7 @@
324343
reFormatCVC = function(e) {
325344
var cursor;
326345
cursor = _getCaretPos(e.target);
327-
e.target.value = e.target.value.replace(/\D/g, '').slice(0, 4);
346+
e.target.value = replaceFullWidthChars(e.target.value).replace(/\D/g, '').slice(0, 4);
328347
if ((cursor != null) && e.type !== 'change') {
329348
return e.target.setSelectionRange(cursor, cursor);
330349
}
@@ -424,9 +443,9 @@
424443
return _on(input, 'input', restrictNumeric);
425444
};
426445
payform.parseCardExpiry = function(value) {
427-
var month, prefix, year, _ref;
446+
var month, prefix, ref, year;
428447
value = value.replace(/\s/g, '');
429-
_ref = value.split('/', 2), month = _ref[0], year = _ref[1];
448+
ref = value.split('/', 2), month = ref[0], year = ref[1];
430449
if ((year != null ? year.length : void 0) === 2 && /^\d+$/.test(year)) {
431450
prefix = (new Date).getFullYear();
432451
prefix = prefix.toString().slice(0, 2);
@@ -440,7 +459,7 @@
440459
};
441460
};
442461
payform.validateCardNumber = function(num) {
443-
var card, _ref;
462+
var card, ref;
444463
num = (num + '').replace(/\s+|-/g, '');
445464
if (!/^\d+$/.test(num)) {
446465
return false;
@@ -449,12 +468,12 @@
449468
if (!card) {
450469
return false;
451470
}
452-
return (_ref = num.length, __indexOf.call(card.length, _ref) >= 0) && (card.luhn === false || luhnCheck(num));
471+
return (ref = num.length, indexOf.call(card.length, ref) >= 0) && (card.luhn === false || luhnCheck(num));
453472
};
454473
payform.validateCardExpiry = function(month, year) {
455-
var currentTime, expiry, _ref;
474+
var currentTime, expiry, ref;
456475
if (typeof month === 'object' && 'month' in month) {
457-
_ref = month, month = _ref.month, year = _ref.year;
476+
ref = month, month = ref.month, year = ref.year;
458477
}
459478
if (!(month && year)) {
460479
return false;
@@ -487,27 +506,28 @@
487506
return expiry > currentTime;
488507
};
489508
payform.validateCardCVC = function(cvc, type) {
490-
var card, _ref;
509+
var card, ref;
491510
cvc = String(cvc).trim();
492511
if (!/^\d+$/.test(cvc)) {
493512
return false;
494513
}
495514
card = cardFromType(type);
496515
if (card != null) {
497-
return _ref = cvc.length, __indexOf.call(card.cvcLength, _ref) >= 0;
516+
return ref = cvc.length, indexOf.call(card.cvcLength, ref) >= 0;
498517
} else {
499518
return cvc.length >= 3 && cvc.length <= 4;
500519
}
501520
};
502521
payform.parseCardType = function(num) {
503-
var _ref;
522+
var ref;
504523
if (!num) {
505524
return null;
506525
}
507-
return ((_ref = cardFromNumber(num)) != null ? _ref.type : void 0) || null;
526+
return ((ref = cardFromNumber(num)) != null ? ref.type : void 0) || null;
508527
};
509528
payform.formatCardNumber = function(num) {
510-
var card, groups, upperLength, _ref;
529+
var card, groups, ref, upperLength;
530+
num = replaceFullWidthChars(num);
511531
num = num.replace(/\D/g, '');
512532
card = cardFromNumber(num);
513533
if (!card) {
@@ -516,7 +536,7 @@
516536
upperLength = card.length[card.length.length - 1];
517537
num = num.slice(0, upperLength);
518538
if (card.format.global) {
519-
return (_ref = num.match(card.format)) != null ? _ref.join(' ') : void 0;
539+
return (ref = num.match(card.format)) != null ? ref.join(' ') : void 0;
520540
} else {
521541
groups = card.format.exec(num);
522542
if (groups == null) {
@@ -529,6 +549,7 @@
529549
};
530550
payform.formatCardExpiry = function(expiry) {
531551
var mon, parts, sep, year;
552+
expiry = replaceFullWidthChars(expiry);
532553
parts = expiry.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/);
533554
if (!parts) {
534555
return '';

0 commit comments

Comments
 (0)