ngx-tiptap-editor
Version:
[](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [ {
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==