UNPKG

ngx-vcard

Version:

Generate an RFC compliant vCard and download it.

68 lines 8.44 kB
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=