ngx-extended-pdf-viewer
Version:
Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.
139 lines • 15 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class NgxKeyboardManagerService {
/** Allows the user to disable the keyboard bindings completely */
ignoreKeyboard = false;
/** Allows the user to disable a list of key bindings. */
ignoreKeys = [];
/** Allows the user to enable a list of key bindings explicitly. If this property is set, every other key binding is ignored. */
acceptKeys = [];
constructor() { }
isKeyIgnored(cmd, keycode) {
if (keycode === 'WHEEL') {
if (!!this.ignoreKeys && this.isKeyInList(this.ignoreKeys, cmd, 'WHEEL')) {
return true;
}
if (!!this.acceptKeys && this.acceptKeys.length > 0) {
return !this.isKeyInList(this.acceptKeys, cmd, 'WHEEL');
}
return false;
}
if (keycode === 16 || keycode === 17 || keycode === 18 || keycode === 224) {
// ignore solitary SHIFT, ALT, CMD, and CTRL because they only make sense as two-key-combinations
return true;
}
// cmd is a bit-array:
// 1 == CTRL
// 2 == ALT
// 4 == SHIFT
// 8 == META
if (!!this.ignoreKeyboard) {
return true;
}
if (!!this.ignoreKeys && this.ignoreKeys.length > 0) {
if (this.isKeyInList(this.ignoreKeys, cmd, keycode)) {
return true;
}
}
if (!!this.acceptKeys && this.acceptKeys.length > 0) {
return !this.isKeyInList(this.acceptKeys, cmd, keycode);
}
return false;
}
isKeyInList(settings, cmd, keycode) {
if (!settings) {
return true;
}
return settings.some((keyDef) => this.isKey(keyDef, cmd, keycode));
}
isKey(keyDef, cmd, keycode) {
let cmdDef = 0;
let key = 0;
keyDef = keyDef.toLowerCase();
// tslint:disable: no-bitwise
if (keyDef.includes('ctrl+')) {
cmdDef |= 1;
keyDef = keyDef.replace('ctrl+', '');
}
if (keyDef.includes('cmd+')) {
cmdDef |= 8;
keyDef = keyDef.replace('cmd+', '');
}
if (keyDef.includes('alt+')) {
cmdDef |= 2;
keyDef = keyDef.replace('alt+', '');
}
if (keyDef.includes('shift+')) {
cmdDef |= 4;
keyDef = keyDef.replace('shift+', '');
}
if (keyDef.includes('meta+')) {
cmdDef |= 8;
keyDef = keyDef.replace('meta+', '');
}
if (keyDef === 'up') {
key = 38;
}
else if (keyDef === 'down') {
key = 40;
}
else if (keyDef === '+' || keyDef === '"+"') {
key = 171;
}
else if (keyDef === '-' || keyDef === '"-"') {
key = 173;
}
else if (keyDef === 'esc') {
key = 27;
}
else if (keyDef === 'enter') {
key = 13;
}
else if (keyDef === 'space') {
key = 32;
}
else if (keyDef === 'f4') {
key = 115;
}
else if (keyDef === 'backspace') {
key = 8;
}
else if (keyDef === 'home') {
key = 36;
}
else if (keyDef === 'end') {
key = 35;
}
else if (keyDef === 'left') {
key = 37;
}
else if (keyDef === 'right') {
key = 39;
}
else if (keyDef === 'pagedown') {
key = 34;
}
else if (keyDef === 'pageup') {
key = 33;
}
else {
key = keyDef.toUpperCase().charCodeAt(0);
}
if (keycode === 'WHEEL') {
return keyDef === 'wheel' && cmd === cmdDef;
}
return key === keycode && cmd === cmdDef;
}
registerKeyboardListener(PDFViewerApplication) {
PDFViewerApplication.ngxKeyboardManager = this;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxKeyboardManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxKeyboardManagerService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgxKeyboardManagerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWtleWJvYXJkLW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvbmd4LWtleWJvYXJkLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQyxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLGtFQUFrRTtJQUMzRCxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRTlCLHlEQUF5RDtJQUNsRCxVQUFVLEdBQWtCLEVBQUUsQ0FBQztJQUV0QyxnSUFBZ0k7SUFDekgsVUFBVSxHQUFrQixFQUFFLENBQUM7SUFFdEMsZ0JBQWUsQ0FBQztJQUVULFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBeUI7UUFDeEQsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDeEUsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUN6RDtZQUVELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUU7WUFDekUsaUdBQWlHO1lBQ2pHLE9BQU8sSUFBSSxD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LEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRU0sd0JBQXdCLENBQUMsb0JBQTJDO1FBQ3pFLG9CQUFvQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNqRCxDQUFDO3dHQTNIVSx5QkFBeUI7NEdBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzs0RkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVBERlZpZXdlckFwcGxpY2F0aW9uIH0gZnJvbSAnLi4vcHVibGljX2FwaSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hLZXlib2FyZE1hbmFnZXJTZXJ2aWNlIHtcbiAgLyoqIEFsbG93cyB0aGUgdXNlciB0byBkaXNhYmxlIHRoZSBrZXlib2FyZCBiaW5kaW5ncyBjb21wbGV0ZWx5ICovXG4gIHB1YmxpYyBpZ25vcmVLZXlib2FyZCA9IGZhbHNlO1xuXG4gIC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZGlzYWJsZSBhIGxpc3Qgb2Yga2V5IGJpbmRpbmdzLiAqL1xuICBwdWJsaWMgaWdub3JlS2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZW5hYmxlIGEgbGlzdCBvZiBrZXkgYmluZGluZ3MgZXhwbGljaXRseS4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQsIGV2ZXJ5IG90aGVyIGtleSBiaW5kaW5nIGlzIGlnbm9yZWQuICovXG4gIHB1YmxpYyBhY2NlcHRLZXlzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBpc0tleUlnbm9yZWQoY21kOiBudW1iZXIsIGtleWNvZGU6IG51bWJlciB8ICdXSEVFTCcpOiBib29sZWFuIHtcbiAgICBpZiAoa2V5Y29kZSA9PT0gJ1dIRUVMJykge1xuICAgICAgaWYgKCEhdGhpcy5pZ25vcmVLZXlzICYmIHRoaXMuaXNLZXlJbkxpc3QodGhpcy5pZ25vcmVLZXlzLCBjbWQsICdXSEVFTCcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCEhdGhpcy5hY2NlcHRLZXlzICYmIHRoaXMuYWNjZXB0S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0tleUluTGlzdCh0aGlzLmFjY2VwdEtleXMsIGNtZCwgJ1dIRUVMJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Y29kZSA9PT0gMTYgfHwga2V5Y29kZSA9PT0gMTcgfHwga2V5Y29kZSA9PT0gMTggfHwga2V5Y29kZSA9PT0gMjI0KSB7XG4gICAgICAvLyBpZ25vcmUgc29saXRhcnkgU0hJRlQsIEFMVCwgQ01ELCBhbmQgQ1RSTCBiZWNhdXNlIHRoZXkgb25seSBtYWtlIHNlbnNlIGFzIHR3by1rZXktY29tYmluYXRpb25zXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gY21kIGlzIGEgYml0LWFycmF5OlxuICAgIC8vIDEgPT0gQ1RSTFxuICAgIC8vIDIgPT0gQUxUXG4gICAgLy8gNCA9PSBTSElGVFxuICAgIC8vIDggPT0gTUVUQVxuICAgIGlmICghIXRoaXMuaWdub3JlS2V5Ym9hcmQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghIXRoaXMuaWdub3JlS2V5cyAmJiB0aGlzLmlnbm9yZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuaXNLZXlJbkxpc3QodGhpcy5pZ25vcmVLZXlzLCBjbWQsIGtleWNvZGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghIXRoaXMuYWNjZXB0S2V5cyAmJiB0aGlzLmFjY2VwdEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzS2V5SW5MaXN0KHRoaXMuYWNjZXB0S2V5cywgY21kLCBrZXljb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0tleUluTGlzdChzZXR0aW5nczogQXJyYXk8c3RyaW5nPiwgY21kOiBudW1iZXIsIGtleWNvZGU6IG51bWJlciB8ICdXSEVFTCcpOiBib29sZWFuIHtcbiAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNldHRpbmdzLnNvbWUoKGtleURlZikgPT4gdGhpcy5pc0tleShrZXlEZWYsIGNtZCwga2V5Y29kZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0tleShrZXlEZWY6IHN0cmluZywgY21kOiBudW1iZXIsIGtleWNvZGU6IG51bWJlciB8ICdXSEVFTCcpOiBib29sZWFuIHtcbiAgICBsZXQgY21kRGVmID0gMDtcbiAgICBsZXQga2V5ID0gMDtcbiAgICBrZXlEZWYgPSBrZXlEZWYudG9Mb3dlckNhc2UoKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTogbm8tYml0d2lzZVxuICAgIGlmIChrZXlEZWYuaW5jbHVkZXMoJ2N0cmwrJykpIHtcbiAgICAgIGNtZERlZiB8PSAxO1xuICAgICAga2V5RGVmID0ga2V5RGVmLnJlcGxhY2UoJ2N0cmwrJywgJycpO1xuICAgIH1cbiAgICBpZiAoa2V5RGVmLmluY2x1ZGVzKCdjbWQrJykpIHtcbiAgICAgIGNtZERlZiB8PSA4O1xuICAgICAga2V5RGVmID0ga2V5RGVmLnJlcGxhY2UoJ2NtZCsnLCAnJyk7XG4gICAgfVxuICAgIGlmIChrZXlEZWYuaW5jbHVkZXMoJ2FsdCsnKSkge1xuICAgICAgY21kRGVmIHw9IDI7XG4gICAgICBrZXlEZWYgPSBrZXlEZWYucmVwbGFjZSgnYWx0KycsICcnKTtcbiAgICB9XG4gICAgaWYgKGtleURlZi5pbmNsdWRlcygnc2hpZnQrJykpIHtcbiAgICAgIGNtZERlZiB8PSA0O1xuICAgICAga2V5RGVmID0ga2V5RGVmLnJlcGxhY2UoJ3NoaWZ0KycsICcnKTtcbiAgICB9XG4gICAgaWYgKGtleURlZi5pbmNsdWRlcygnbWV0YSsnKSkge1xuICAgICAgY21kRGVmIHw9IDg7XG4gICAgICBrZXlEZWYgPSBrZXlEZWYucmVwbGFjZSgnbWV0YSsnLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKGtleURlZiA9PT0gJ3VwJykge1xuICAgICAga2V5ID0gMzg7XG4gICAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdkb3duJykge1xuICAgICAga2V5ID0gNDA7XG4gICAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICcrJyB8fCBrZXlEZWYgPT09ICdcIitcIicpIHtcbiAgICAgIGtleSA9IDE3MTtcbiAgICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJy0nIHx8IGtleURlZiA9PT0gJ1wiLVwiJykge1xuICAgICAga2V5ID0gMTczO1xuICAgIH0gZWxzZSBpZiAoa2V5RGVmID09PSAnZXNjJykge1xuICAgICAga2V5ID0gMjc7XG4gICAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdlbnRlcicpIHtcbiAgICAgIGtleSA9IDEzO1xuICAgIH0gZWxzZSBpZiAoa2V5RGVmID09PSAnc3BhY2UnKSB7XG4gICAgICBrZXkgPSAzMjtcbiAgICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ2Y0Jykge1xuICAgICAga2V5ID0gMTE1O1xuICAgIH0gZWxzZSBpZiAoa2V5RGVmID09PSAnYmFja3NwYWNlJykge1xuICAgICAga2V5ID0gODtcbiAgICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ2hvbWUnKSB7XG4gICAgICBrZXkgPSAzNjtcbiAgICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ2VuZCcpIHtcbiAgICAgIGtleSA9IDM1O1xuICAgIH0gZWxzZSBpZiAoa2V5RGVmID09PSAnbGVmdCcpIHtcbiAgICAgIGtleSA9IDM3O1xuICAgIH0gZWxzZSBpZiAoa2V5RGVmID09PSAncmlnaHQnKSB7XG4gICAgICBrZXkgPSAzOTtcbiAgICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAga2V5ID0gMzQ7XG4gICAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdwYWdldXAnKSB7XG4gICAgICBrZXkgPSAzMztcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0ga2V5RGVmLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbiAgICB9XG4gICAgaWYgKGtleWNvZGUgPT09ICdXSEVFTCcpIHtcbiAgICAgIHJldHVybiBrZXlEZWYgPT09ICd3aGVlbCcgJiYgY21kID09PSBjbWREZWY7XG4gICAgfVxuICAgIHJldHVybiBrZXkgPT09IGtleWNvZGUgJiYgY21kID09PSBjbWREZWY7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJLZXlib2FyZExpc3RlbmVyKFBERlZpZXdlckFwcGxpY2F0aW9uOiBJUERGVmlld2VyQXBwbGljYXRpb24pIHtcbiAgICBQREZWaWV3ZXJBcHBsaWNhdGlvbi5uZ3hLZXlib2FyZE1hbmFnZXIgPSB0aGlzO1xuICB9XG59XG4iXX0=