ngx-vcard
Version:
Generate an RFC compliant vCard and download it.
68 lines • 8.44 kB
JavaScript
import { Directive, HostListener, Input } from '@angular/core';
import { VCardFormatter } from './ngx-vcard.formatter';
import { VCardEncoding } from './types/vCardEncoding';
import * as i0 from "@angular/core";
const ERROR_MESSAGE = "ngx-vcard: No input specified. You must specify either 'vcdDownloadVCard' or 'generateVCardFunction'";
// TODO: Remove @Directive
export class DownloadVCardDirective {
constructor(element) {
this.element = element;
this.encoding = VCardEncoding.none;
}
onclick() {
if (this.vCard == '') {
if (this.generateVCardFunction != undefined &&
this.generateVCardFunction != '') {
this.vCard = this.generateVCardFunction();
}
else {
throw new Error(ERROR_MESSAGE);
}
}
const blob = VCardFormatter.getVCardAsBlob(this.vCard, this.encoding);
let filename = 'vCard';
if (this.vCard.name != null) {
filename =
this.vCard.name.firstNames + ' ' + this.vCard.name.lastNames + '.vcf';
}
this.download(blob, filename);
}
download(data, filename) {
const a = document.createElement('a');
const url = URL.createObjectURL(data);
a.style.display = 'none';
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}
ngOnInit() {
if (this.vCard == '' &&
(this.generateVCardFunction == '' ||
this.generateVCardFunction == undefined)) {
throw new Error(ERROR_MESSAGE);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DownloadVCardDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.11", type: DownloadVCardDirective, selector: "[vcdDownloadVCard]", inputs: { vCard: ["vcdDownloadVCard", "vCard"], generateVCardFunction: "generateVCardFunction", encoding: "encoding" }, host: { listeners: { "click": "onclick()" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DownloadVCardDirective, decorators: [{
type: Directive,
args: [{
selector: '[vcdDownloadVCard]',
}]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { vCard: [{
type: Input,
args: ['vcdDownloadVCard']
}], generateVCardFunction: [{
type: Input,
args: ['generateVCardFunction']
}], encoding: [{
type: Input
}], onclick: [{
type: HostListener,
args: ['click']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtdmNhcmQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZjYXJkL3NyYy9saWIvZG93bmxvYWQtdmNhcmQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUV0RCxNQUFNLGFBQWEsR0FDakIsc0dBQXNHLENBQUM7QUFFekcsMEJBQTBCO0FBSTFCLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQU92QixhQUFRLEdBQWtCLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFQbkIsQ0FBQztJQVUzQyxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQ0UsSUFBSSxDQUFDLHFCQUFxQixJQUFJLFNBQVM7Z0JBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQ2hDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsUUFBUTtnQkFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQzNDLE1BQU0sQ0FBQyxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUNFLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNoQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxFQUFFO2dCQUMvQixJQUFJLENBQUMscUJBQXFCLElBQUksU0FBUyxDQUFDLEVBQzFDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDOytHQW5EVSxzQkFBc0I7bUdBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFIbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2lCQUMvQjsrRUFNQyxLQUFLO3NCQURKLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUd6QixxQkFBcUI7c0JBRHBCLEtBQUs7dUJBQUMsdUJBQXVCO2dCQUVkLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR04sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZDYXJkRm9ybWF0dGVyIH0gZnJvbSAnLi9uZ3gtdmNhcmQuZm9ybWF0dGVyJztcbmltcG9ydCB7IFZDYXJkIH0gZnJvbSAnLi90eXBlcy92Q2FyZCc7XG5pbXBvcnQgeyBWQ2FyZEVuY29kaW5nIH0gZnJvbSAnLi90eXBlcy92Q2FyZEVuY29kaW5nJztcblxuY29uc3QgRVJST1JfTUVTU0FHRSA9XG4gIFwibmd4LXZjYXJkOiBObyBpbnB1dCBzcGVjaWZpZWQuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyICd2Y2REb3dubG9hZFZDYXJkJyBvciAnZ2VuZXJhdGVWQ2FyZEZ1bmN0aW9uJ1wiO1xuXG4vLyBUT0RPOiBSZW1vdmUgQERpcmVjdGl2ZVxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3ZjZERvd25sb2FkVkNhcmRdJyxcbn0pXG5leHBvcnQgY2xhc3MgRG93bmxvYWRWQ2FyZERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge31cbiAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBhbHdheXMgc3BlY2lmaWVkIGFzIGl0IGlzIHRoZSBzZWxlY3RvcixcbiAgLy8gd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgdW5kZWZpbmVkXG4gIEBJbnB1dCgndmNkRG93bmxvYWRWQ2FyZCcpXG4gIHZDYXJkITogVkNhcmQgfCAnJztcbiAgQElucHV0KCdnZW5lcmF0ZVZDYXJkRnVuY3Rpb24nKVxuICBnZW5lcmF0ZVZDYXJkRnVuY3Rpb246ICgoKSA9PiBWQ2FyZCkgfCAnJyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgcHVibGljIGVuY29kaW5nOiBWQ2FyZEVuY29kaW5nID0gVkNhcmRFbmNvZGluZy5ub25lO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgb25jbGljaygpIHtcbiAgICBpZiAodGhpcy52Q2FyZCA9PSAnJykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmdlbmVyYXRlVkNhcmRGdW5jdGlvbiAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZDYXJkRnVuY3Rpb24gIT0gJydcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZDYXJkID0gdGhpcy5nZW5lcmF0ZVZDYXJkRnVuY3Rpb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NRVNTQUdFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYmxvYiA9IFZDYXJkRm9ybWF0dGVyLmdldFZDYXJkQXNCbG9iKHRoaXMudkNhcmQsIHRoaXMuZW5jb2RpbmcpO1xuICAgIGxldCBmaWxlbmFtZSA9ICd2Q2FyZCc7XG4gICAgaWYgKHRoaXMudkNhcmQubmFtZSAhPSBudWxsKSB7XG4gICAgICBmaWxlbmFtZSA9XG4gICAgICAgIHRoaXMudkNhcmQubmFtZS5maXJzdE5hbWVzICsgJyAnICsgdGhpcy52Q2FyZC5uYW1lLmxhc3ROYW1lcyArICcudmNmJztcbiAgICB9XG4gICAgdGhpcy5kb3dubG9hZChibG9iLCBmaWxlbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkKGRhdGE6IEJsb2IsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhOiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xuICAgIChhIGFzIGFueSkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgYS5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMudkNhcmQgPT0gJycgJiZcbiAgICAgICh0aGlzLmdlbmVyYXRlVkNhcmRGdW5jdGlvbiA9PSAnJyB8fFxuICAgICAgICB0aGlzLmdlbmVyYXRlVkNhcmRGdW5jdGlvbiA9PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTUVTU0FHRSk7XG4gICAgfVxuICB9XG59XG4iXX0=