Skip to content

Commit c5496ea

Browse files
authored
Merge pull request #1 from easyship/hotfix/firefox-cvc
Hotfix/firefox cvc
2 parents 9643191 + 7110e4c commit c5496ea

3 files changed

Lines changed: 111 additions & 100 deletions

File tree

lib/angular-payments.js

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -161,35 +161,35 @@ angular.module('angularPayments', []);angular.module('angularPayments')
161161

162162
var _hasTextSelected = function($target) {
163163
var ref;
164-
164+
165165
if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== $target.prop('selectionEnd')) {
166166
return true;
167167
}
168-
168+
169169
if (typeof document !== "undefined" && document !== null ? (ref = document.selection) != null ? typeof ref.createRange === "function" ? ref.createRange().text : void 0 : void 0 : void 0) {
170170
return true;
171171
}
172-
172+
173173
return false;
174174
};
175175

176176
// card formatting
177177

178178
var _formatCardNumber = function(e) {
179179
var $target, card, digit, length, re, upperLength, value;
180-
180+
181181
digit = String.fromCharCode(e.which);
182182
$target = angular.element(e.currentTarget);
183183
value = $target.val();
184184
card = Cards.fromNumber(value + digit);
185185
length = (value.replace(/\D/g, '') + digit).length;
186-
186+
187187
upperLength = 16;
188-
188+
189189
if (card) {
190190
upperLength = card.length[card.length.length - 1];
191191
}
192-
192+
193193
if (length >= upperLength) {
194194
return;
195195
}
@@ -221,21 +221,21 @@ angular.module('angularPayments', []);angular.module('angularPayments')
221221

222222
var _restrictCardNumber = function(e) {
223223
var $target, card, digit, value;
224-
224+
225225
$target = angular.element(e.currentTarget);
226226
digit = String.fromCharCode(e.which);
227-
227+
228228
if(!/^\d+$/.test(digit)) {
229229
return;
230230
}
231-
231+
232232
if(_hasTextSelected($target)) {
233233
return;
234234
}
235-
235+
236236
value = ($target.val() + digit).replace(/\D/g, '');
237237
card = Cards.fromNumber(value);
238-
238+
239239
if(card) {
240240
if(!(value.length <= card.length[card.length.length - 1])){
241241
e.preventDefault();
@@ -249,22 +249,22 @@ angular.module('angularPayments', []);angular.module('angularPayments')
249249

250250
var _formatBackCardNumber = function(e) {
251251
var $target, value;
252-
252+
253253
$target = angular.element(e.currentTarget);
254254
value = $target.val();
255-
255+
256256
if(e.meta) {
257257
return;
258258
}
259-
259+
260260
if(e.which !== 8) {
261261
return;
262262
}
263-
263+
264264
if(($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {
265265
return;
266266
}
267-
267+
268268
if(/\d\s$/.test(value) && !e.meta && e.keyCode >= 46) {
269269
e.preventDefault();
270270
return $target.val(value.replace(/\d\s$/, ''));
@@ -276,22 +276,22 @@ angular.module('angularPayments', []);angular.module('angularPayments')
276276

277277
var _getFormattedCardNumber = function(num) {
278278
var card, groups, upperLength, ref;
279-
279+
280280
card = Cards.fromNumber(num);
281-
281+
282282
if (!card) {
283283
return num;
284284
}
285-
285+
286286
upperLength = card.length[card.length.length - 1];
287287
num = num.replace(/\D/g, '');
288288
num = num.slice(0, +upperLength + 1 || 9e9);
289-
289+
290290
if(card.format.global) {
291291
return (ref = num.match(card.format)) != null ? ref.join(' ') : void 0;
292292
} else {
293293
groups = card.format.exec(num);
294-
294+
295295
if (groups != null) {
296296
groups.shift();
297297
}
@@ -304,7 +304,7 @@ angular.module('angularPayments', []);angular.module('angularPayments')
304304
return setTimeout(function() {
305305
var $target, value;
306306
$target = angular.element(e.target);
307-
307+
308308
value = $target.val();
309309
value = _getFormattedCardNumber(value);
310310
return $target.val(value);
@@ -331,14 +331,19 @@ angular.module('angularPayments', []);angular.module('angularPayments')
331331
_formatCVC = function(e){
332332
$target = angular.element(e.currentTarget);
333333
digit = String.fromCharCode(e.which);
334-
335-
if (!/^\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {
334+
335+
// Allows backspace, delete and arrow keys when input length is 4 and the browser is Firefox
336+
if (e.keyCode == 46 || e.keyCode == 8||(e.keyCode >=37 && e.keyCode <=40)) {
337+
return;
338+
}
339+
340+
if (!/^\d+$/.test(digit) && !e.meta && e.which >= 46) {
336341
e.preventDefault();
337342
return;
338343
}
339344

340345
val = $target.val() + digit;
341-
346+
342347
if(val.length <= 4){
343348
return;
344349
} else {
@@ -355,22 +360,22 @@ angular.module('angularPayments', []);angular.module('angularPayments')
355360

356361
_restrictExpiry = function(e) {
357362
var $target, digit, value;
358-
363+
359364
$target = angular.element(e.currentTarget);
360365
digit = String.fromCharCode(e.which);
361-
366+
362367
if (!/^\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {
363368
e.preventDefault();
364369
return;
365370
}
366-
371+
367372
if(_hasTextSelected($target)) {
368373
return;
369374
}
370-
375+
371376
value = $target.val() + digit;
372377
value = value.replace(/\D/g, '');
373-
378+
374379
if (value.length > 6) {
375380
e.preventDefault()
376381
return;
@@ -379,17 +384,17 @@ angular.module('angularPayments', []);angular.module('angularPayments')
379384

380385
_formatExpiry = function(e) {
381386
var $target, digit, val;
382-
387+
383388
digit = String.fromCharCode(e.which);
384-
389+
385390
if (!/^\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {
386391
e.preventDefault();
387392
return;
388393
}
389-
394+
390395
$target = angular.element(e.currentTarget);
391396
val = $target.val() + digit;
392-
397+
393398
if (/^\d$/.test(val) && (val !== '0' && val !== '1')) {
394399
e.preventDefault();
395400
return $target.val("0" + val + " / ");
@@ -403,56 +408,56 @@ angular.module('angularPayments', []);angular.module('angularPayments')
403408

404409
_formatForwardExpiry = function(e) {
405410
var $target, digit, val;
406-
411+
407412
digit = String.fromCharCode(e.which);
408-
413+
409414
if (!/^\d+$/.test(digit) && !e.meta && e.keyCode >= 46) {
410415
return;
411416
}
412-
417+
413418
$target = angular.element(e.currentTarget);
414419
val = $target.val();
415-
420+
416421
if (/^\d\d$/.test(val)) {
417422
return $target.val("" + val + " / ");
418423
}
419424
};
420425

421426
_formatForwardSlash = function(e) {
422427
var $target, slash, val;
423-
428+
424429
slash = String.fromCharCode(e.which);
425-
430+
426431
if (slash !== '/') {
427432
return;
428433
}
429-
434+
430435
$target = angular.element(e.currentTarget);
431436
val = $target.val();
432-
437+
433438
if (/^\d$/.test(val) && val !== '0') {
434439
return $target.val("0" + val + " / ");
435440
}
436441
};
437442

438443
_formatBackExpiry = function(e) {
439444
var $target, value;
440-
445+
441446
if (e.meta) {
442447
return;
443448
}
444-
449+
445450
$target = angular.element(e.currentTarget);
446451
value = $target.val();
447-
452+
448453
if (e.which !== 8) {
449454
return;
450455
}
451-
456+
452457
if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {
453458
return;
454459
}
455-
460+
456461
if (/\d(\s|\/)+$/.test(value)) {
457462
e.preventDefault();
458463
return $target.val(value.replace(/\d(\s|\/)*$/, ''));
@@ -517,7 +522,8 @@ angular.module('angularPayments', []);angular.module('angularPayments')
517522
_Format(attr.paymentsFormat, elem, ctrl);
518523
}
519524
}
520-
}]);angular.module('angularPayments')
525+
}])
526+
;angular.module('angularPayments')
521527

522528

523529

0 commit comments

Comments
 (0)