UNPKG

ngx-tiptap-editor

Version:

[![Build and Publish](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml/badge.svg)](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [![Deploy to Github Pages](https://github.com/HuiiBuh/ngx-tiptap-edito

59 lines 9.51 kB
import { Injectable } from '@angular/core'; import { fromEvent, merge, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class TiptapEventService { /* tslint:enable */ constructor(ngZone) { this.ngZone = ngZone; this.clickSubject = new Subject(); this.keyboardSubject = new Subject(); this.clickSubscription = null; this.keyboardSubscription = null; /* tslint:disable */ this.update$ = merge(this.clickSubject, this.keyboardSubject); this.onClick$ = this.clickSubject.asObservable(); this.onKeyboard$ = this.keyboardSubject.asObservable(); } registerShortcut(shortcut) { const parts = shortcut.split('-'); let key = parts[parts.length - 1]; if (key === 'Space') key = ' '; const keyCodeSmall = key.toUpperCase().charCodeAt(0); const keyCodeLarge = key.toLowerCase().charCodeAt(0); const hasAlt = parts.includes('Alt'); const hasShift = parts.includes('Shift'); const hasMod = parts.includes('Mod'); const hasCtrl = parts.includes('Ctrl'); const hasCmd = parts.includes('Cmd'); return this.onKeyboard$.pipe(filter(e => ( // Check the keycode against the large and small letter (I hate you apple) (e.keyCode === keyCodeSmall || e.keyCode === keyCodeLarge) && e.altKey === hasAlt && e.shiftKey === hasShift && // Check if the meta key was pressed, or the combined mod is allowed (I really, really, hate you apple) ( // Both ctrl and command key hasMod && (e.ctrlKey && !e.metaKey || !e.ctrlKey && e.metaKey) // Only ctrl or command key || e.ctrlKey === hasCtrl && e.metaKey === hasCmd && !hasMod)))); } setElement(element) { this.ngZone.runOutsideAngular(() => { this.clickSubscription?.unsubscribe(); this.keyboardSubscription?.unsubscribe(); this.clickSubscription = fromEvent(element, 'click').subscribe(e => this.clickSubject.next(e)); this.keyboardSubscription = fromEvent(element, 'keydown').subscribe(e => this.keyboardSubject.next(e)); }); } } TiptapEventService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TiptapEventService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); TiptapEventService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TiptapEventService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TiptapEventService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i0.NgZone }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwdGFwLWV2ZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGlwdGFwLWVkaXRvci9zcmMvbGliL3NlcnZpY2VzL3RpcHRhcC1ldmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBTXhDLE1BQU0sT0FBTyxrQkFBa0I7SUFZN0IsbUJBQW1CO0lBRW5CLFlBQ1UsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFiaEIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUFDL0Msc0JBQWlCLEdBQXdCLElBQUksQ0FBQztRQUM5Qyx5QkFBb0IsR0FBd0IsSUFBSSxDQUFDO1FBRXpELG9CQUFvQjtRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsYUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBT3pELENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUN0QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxLQUFLLE9BQU87WUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDViwwRUFBMEU7UUFDMUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQztZQUMxRCxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU07WUFDbkIsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQ3ZCLHdHQUF3RztZQUN4RztZQUNFLDRCQUE0QjtZQUM1QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDOUQsMkJBQTJCO21CQUN4QixDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FDNUQsQ0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBdUI7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFhLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQWdCLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0dBekRVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGlwdGFwRXZlbnRTZXJ2aWNlIHtcblxuICBwcml2YXRlIGNsaWNrU3ViamVjdCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQ+KCk7XG4gIHByaXZhdGUga2V5Ym9hcmRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4oKTtcbiAgcHJpdmF0ZSBjbGlja1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUga2V5Ym9hcmRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIC8qIHRzbGludDpkaXNhYmxlICovXG4gIHB1YmxpYyB1cGRhdGUkID0gbWVyZ2UodGhpcy5jbGlja1N1YmplY3QsIHRoaXMua2V5Ym9hcmRTdWJqZWN0KTtcbiAgcHVibGljIG9uQ2xpY2skID0gdGhpcy5jbGlja1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHB1YmxpYyBvbktleWJvYXJkJCA9IHRoaXMua2V5Ym9hcmRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qIHRzbGludDplbmFibGUgKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyU2hvcnRjdXQoc2hvcnRjdXQ6IHN0cmluZyk6IE9ic2VydmFibGU8S2V5Ym9hcmRFdmVudD4ge1xuICAgIGNvbnN0IHBhcnRzID0gc2hvcnRjdXQuc3BsaXQoJy0nKTtcbiAgICBsZXQga2V5ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGtleSA9PT0gJ1NwYWNlJykga2V5ID0gJyAnO1xuICAgIGNvbnN0IGtleUNvZGVTbWFsbCA9IGtleS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG4gICAgY29uc3Qga2V5Q29kZUxhcmdlID0ga2V5LnRvTG93ZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcblxuICAgIGNvbnN0IGhhc0FsdCA9IHBhcnRzLmluY2x1ZGVzKCdBbHQnKTtcbiAgICBjb25zdCBoYXNTaGlmdCA9IHBhcnRzLmluY2x1ZGVzKCdTaGlmdCcpO1xuXG4gICAgY29uc3QgaGFzTW9kID0gcGFydHMuaW5jbHVkZXMoJ01vZCcpO1xuICAgIGNvbnN0IGhhc0N0cmwgPSBwYXJ0cy5pbmNsdWRlcygnQ3RybCcpO1xuICAgIGNvbnN0IGhhc0NtZCA9IHBhcnRzLmluY2x1ZGVzKCdDbWQnKTtcblxuICAgIHJldHVybiB0aGlzLm9uS2V5Ym9hcmQkLnBpcGUoXG4gICAgICBmaWx0ZXIoZSA9PiAoXG4gICAgICAgIC8vIENoZWNrIHRoZSBrZXljb2RlIGFnYWluc3QgdGhlIGxhcmdlIGFuZCBzbWFsbCBsZXR0ZXIgKEkgaGF0ZSB5b3UgYXBwbGUpXG4gICAgICAgIChlLmtleUNvZGUgPT09IGtleUNvZGVTbWFsbCB8fCBlLmtleUNvZGUgPT09IGtleUNvZGVMYXJnZSkgJiZcbiAgICAgICAgZS5hbHRLZXkgPT09IGhhc0FsdCAmJlxuICAgICAgICBlLnNoaWZ0S2V5ID09PSBoYXNTaGlmdCAmJlxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbWV0YSBrZXkgd2FzIHByZXNzZWQsIG9yIHRoZSBjb21iaW5lZCBtb2QgaXMgYWxsb3dlZCAgKEkgcmVhbGx5LCByZWFsbHksIGhhdGUgeW91IGFwcGxlKVxuICAgICAgICAoXG4gICAgICAgICAgLy8gQm90aCBjdHJsIGFuZCBjb21tYW5kIGtleVxuICAgICAgICAgIGhhc01vZCAmJiAoZS5jdHJsS2V5ICYmICFlLm1ldGFLZXkgfHwgIWUuY3RybEtleSAmJiBlLm1ldGFLZXkpXG4gICAgICAgICAgLy8gT25seSBjdHJsIG9yIGNvbW1hbmQga2V5XG4gICAgICAgICAgfHwgZS5jdHJsS2V5ID09PSBoYXNDdHJsICYmIGUubWV0YUtleSA9PT0gaGFzQ21kICYmICFoYXNNb2RcbiAgICAgICAgKVxuICAgICAgKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNldEVsZW1lbnQoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmNsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuY2xpY2tTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudCwgJ2NsaWNrJykuc3Vic2NyaWJlKGUgPT4gdGhpcy5jbGlja1N1YmplY3QubmV4dChlKSk7XG4gICAgICB0aGlzLmtleWJvYXJkU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGVsZW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKGUgPT4gdGhpcy5rZXlib2FyZFN1YmplY3QubmV4dChlKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==