@mdefy/ngx-markdown-editor
Version:
An Angular Markdown Editor in WYSIWYG style with extensive functionality, high customizability and an integrated material theme.
42 lines • 4.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { EventManager } from '@angular/platform-browser';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/platform-browser";
/**
* An injectable hotkeys service to add keybindings.
*/
export class Keybindings {
constructor(eventManager) {
this.eventManager = eventManager;
}
/**
* Adds an _keydown_ event listener to the Angular `EventManager` with the specified
* `keys`. The listener is applied to specified `element`. Returns an RxJS observable
* of the keyboard event.
*
* @param element The HTML element to which the keybinding shall be applied to.
* @param keys The key combination which shall trigger the event.
*/
addKeybinding(element, keys) {
const event = `keydown.${keys}`;
return new Observable((observer) => {
const handler = (e) => {
e.preventDefault();
observer.next(e);
};
const dispose = this.eventManager.addEventListener(element, event, handler);
return () => {
dispose();
};
});
}
}
Keybindings.ɵprov = i0.ɵɵdefineInjectable({ factory: function Keybindings_Factory() { return new Keybindings(i0.ɵɵinject(i1.EventManager)); }, token: Keybindings, providedIn: "root" });
Keybindings.decorators = [
{ type: Injectable, args: [{ providedIn: 'root' },] }
];
Keybindings.ctorParameters = () => [
{ type: EventManager }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5YmluZGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXJrZG93bi1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9rZXliaW5kaW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUVsQzs7R0FFRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQUcsQ0FBQztJQUVsRDs7Ozs7OztPQU9HO0lBQ0gsYUFBYSxDQUFDLE9BQW9CLEVBQUUsSUFBWTtRQUM5QyxNQUFNLEtBQUssR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDO1FBRWhDLE9BQU8sSUFBSSxVQUFVLENBQWdCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDaEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFnQixFQUFFLEVBQUU7Z0JBQ25DLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUM7WUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFNUUsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7WUEzQkYsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7O1lBTnpCLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBbiBpbmplY3RhYmxlIGhvdGtleXMgc2VydmljZSB0byBhZGQga2V5YmluZGluZ3MuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgS2V5YmluZGluZ3Mge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV2ZW50TWFuYWdlcjogRXZlbnRNYW5hZ2VyKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIF9rZXlkb3duXyBldmVudCBsaXN0ZW5lciB0byB0aGUgQW5ndWxhciBgRXZlbnRNYW5hZ2VyYCB3aXRoIHRoZSBzcGVjaWZpZWRcbiAgICogYGtleXNgLiBUaGUgbGlzdGVuZXIgaXMgYXBwbGllZCB0byBzcGVjaWZpZWQgYGVsZW1lbnRgLiBSZXR1cm5zIGFuIFJ4SlMgb2JzZXJ2YWJsZVxuICAgKiBvZiB0aGUga2V5Ym9hcmQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVE1MIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGtleWJpbmRpbmcgc2hhbGwgYmUgYXBwbGllZCB0by5cbiAgICogQHBhcmFtIGtleXMgVGhlIGtleSBjb21iaW5hdGlvbiB3aGljaCBzaGFsbCB0cmlnZ2VyIHRoZSBldmVudC5cbiAgICovXG4gIGFkZEtleWJpbmRpbmcoZWxlbWVudDogSFRNTEVsZW1lbnQsIGtleXM6IHN0cmluZyk6IE9ic2VydmFibGU8S2V5Ym9hcmRFdmVudD4ge1xuICAgIGNvbnN0IGV2ZW50ID0gYGtleWRvd24uJHtrZXlzfWA7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8S2V5Ym9hcmRFdmVudD4oKG9ic2VydmVyKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZGlzcG9zZSA9IHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBkaXNwb3NlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=