angular-cc-library
Version:
angular credit card library
65 lines • 6.9 kB
JavaScript
import { Directive, HostListener, Optional, Self } from '@angular/core';
import { CreditCard } from '../credit-card';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class CvcFormatDirective {
constructor(el, control) {
this.el = el;
this.control = control;
this.target = this.el.nativeElement;
}
/**
* Updates the value to target element, or FormControl if exists.
* @param value New input value.
*/
updateValue(value) {
if (this.control) {
this.control.control.setValue(value);
}
else {
this.target.value = value;
}
}
onKeypress(e) {
if (!CreditCard.restrictNumeric(e) && !CreditCard.restrictCvc(e.which, this.target)) {
e.preventDefault();
}
}
reformatCvc() {
const val = CreditCard.replaceFullWidthChars(this.target.value)
.replace(/\D/g, '')
.slice(0, 4);
const oldVal = this.target.value;
if (val !== oldVal) {
this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(val, this.target, (safeVal => {
this.updateValue(safeVal);
}));
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: CvcFormatDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: CvcFormatDirective, isStandalone: true, selector: "[ccCVC]", host: { listeners: { "keypress": "onKeypress($event)", "paste": "reformatCvc()", "change": "reformatCvc()", "input": "reformatCvc()" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: CvcFormatDirective, decorators: [{
type: Directive,
args: [{
selector: '[ccCVC]',
standalone: true,
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
type: Self
}, {
type: Optional
}] }], propDecorators: { onKeypress: [{
type: HostListener,
args: ['keypress', ['$event']]
}], reformatCvc: [{
type: HostListener,
args: ['paste']
}, {
type: HostListener,
args: ['change']
}, {
type: HostListener,
args: ['input']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ZjLWZvcm1hdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNjLWxpYnJhcnkvc3JjL2xpYi9kaXJlY3RpdmVzL2N2Yy1mb3JtYXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFPNUMsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUNVLEVBQWMsRUFDTSxPQUFrQjtRQUR0QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ00sWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUU5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsS0FBYTtRQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFHTSxVQUFVLENBQUMsQ0FBZ0I7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDcEYsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBS00sV0FBVztRQUNoQixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDNUQsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7YUFDbEIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksR0FBRyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7OEdBMUNVLGtCQUFrQjtrR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxTQUFTO29CQUNuQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQU1JLElBQUk7OzBCQUFJLFFBQVE7eUNBa0JaLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVU3QixXQUFXO3NCQUhqQixZQUFZO3VCQUFDLE9BQU87O3NCQUNwQixZQUFZO3VCQUFDLFFBQVE7O3NCQUNyQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3B0aW9uYWwsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENyZWRpdENhcmQgfSBmcm9tICcuLi9jcmVkaXQtY2FyZCc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjY0NWQ10nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDdmNGb3JtYXREaXJlY3RpdmUge1xuICBwcml2YXRlIHRhcmdldDogSFRNTElucHV0RWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICkge1xuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHZhbHVlIHRvIHRhcmdldCBlbGVtZW50LCBvciBGb3JtQ29udHJvbCBpZiBleGlzdHMuXG4gICAqIEBwYXJhbSB2YWx1ZSBOZXcgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFyZ2V0LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5cHJlc3MnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25LZXlwcmVzcyhlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCFDcmVkaXRDYXJkLnJlc3RyaWN0TnVtZXJpYyhlKSAmJiAhQ3JlZGl0Q2FyZC5yZXN0cmljdEN2YyhlLndoaWNoLCB0aGlzLnRhcmdldCkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdwYXN0ZScpXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScpXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHVibGljIHJlZm9ybWF0Q3ZjKCkge1xuICAgIGNvbnN0IHZhbCA9IENyZWRpdENhcmQucmVwbGFjZUZ1bGxXaWR0aENoYXJzKHRoaXMudGFyZ2V0LnZhbHVlKVxuICAgICAgLnJlcGxhY2UoL1xcRC9nLCAnJylcbiAgICAgIC5zbGljZSgwLCA0KTtcbiAgICBjb25zdCBvbGRWYWwgPSB0aGlzLnRhcmdldC52YWx1ZTtcbiAgICBpZiAodmFsICE9PSBvbGRWYWwpIHtcbiAgICAgIHRoaXMudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID0gdGhpcy50YXJnZXQuc2VsZWN0aW9uRW5kID0gQ3JlZGl0Q2FyZC5zYWZlVmFsKHZhbCwgdGhpcy50YXJnZXQsIChzYWZlVmFsID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShzYWZlVmFsKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==