[editor] Initialize KeyboardManager-instances lazily

As far as I can tell there's no particular reason for initializing `KeyboardManager`-instances eagerly, since the user may never use editing, and we can easily do this lazily instead by utilizing shadowed getters.
This commit is contained in:
Jonas Jenwald 2023-06-02 15:49:34 +02:00
parent 0023c4a511
commit ea93c507f5
2 changed files with 49 additions and 30 deletions

View File

@ -21,6 +21,7 @@ import {
AnnotationEditorType,
assert,
LINE_FACTOR,
shadow,
Util,
} from "../../shared/util.js";
import { bindEvents, KeyboardManager } from "./tools.js";
@ -58,12 +59,18 @@ class FreeTextEditor extends AnnotationEditor {
static _defaultFontSize = 10;
static _keyboardManager = new KeyboardManager([
[
["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"],
FreeTextEditor.prototype.commitOrRemove,
],
]);
static get _keyboardManager() {
return shadow(
this,
"_keyboardManager",
new KeyboardManager([
[
["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"],
FreeTextEditor.prototype.commitOrRemove,
],
])
);
}
static _type = "freetext";

View File

@ -396,30 +396,42 @@ class AnnotationEditorUIManager {
#container = null;
static _keyboardManager = new KeyboardManager([
[["ctrl+a", "mac+meta+a"], AnnotationEditorUIManager.prototype.selectAll],
[["ctrl+z", "mac+meta+z"], AnnotationEditorUIManager.prototype.undo],
[
["ctrl+y", "ctrl+shift+Z", "mac+meta+shift+Z"],
AnnotationEditorUIManager.prototype.redo,
],
[
[
"Backspace",
"alt+Backspace",
"ctrl+Backspace",
"shift+Backspace",
"mac+Backspace",
"mac+alt+Backspace",
"mac+ctrl+Backspace",
"Delete",
"ctrl+Delete",
"shift+Delete",
],
AnnotationEditorUIManager.prototype.delete,
],
[["Escape", "mac+Escape"], AnnotationEditorUIManager.prototype.unselectAll],
]);
static get _keyboardManager() {
return shadow(
this,
"_keyboardManager",
new KeyboardManager([
[
["ctrl+a", "mac+meta+a"],
AnnotationEditorUIManager.prototype.selectAll,
],
[["ctrl+z", "mac+meta+z"], AnnotationEditorUIManager.prototype.undo],
[
["ctrl+y", "ctrl+shift+Z", "mac+meta+shift+Z"],
AnnotationEditorUIManager.prototype.redo,
],
[
[
"Backspace",
"alt+Backspace",
"ctrl+Backspace",
"shift+Backspace",
"mac+Backspace",
"mac+alt+Backspace",
"mac+ctrl+Backspace",
"Delete",
"ctrl+Delete",
"shift+Delete",
],
AnnotationEditorUIManager.prototype.delete,
],
[
["Escape", "mac+Escape"],
AnnotationEditorUIManager.prototype.unselectAll,
],
])
);
}
constructor(container, eventBus, annotationStorage) {
this.#container = container;