notes with #keyboardShortcut don't need reload to take effect

This commit is contained in:
zadam 2022-12-01 13:24:34 +01:00
parent fc080f785b
commit 7aa801fc1f
4 changed files with 34 additions and 26 deletions

View file

@ -12,6 +12,7 @@ import keyboardActionsService from "../services/keyboard_actions.js";
import MobileScreenSwitcherExecutor from "./mobile_screen_switcher.js";
import MainTreeExecutors from "./main_tree_executors.js";
import toast from "../services/toast.js";
import ShortcutComponent from "./shortcut_component.js";
class AppContext extends Component {
constructor(isMainWindow) {
@ -46,7 +47,8 @@ class AppContext extends Component {
this.tabManager,
new RootCommandExecutor(),
new Entrypoints(),
new MainTreeExecutors()
new MainTreeExecutors(),
new ShortcutComponent()
];
if (utils.isMobile()) {

View file

@ -2,18 +2,39 @@ import appContext from "./app_context.js";
import shortcutService from "../services/shortcuts.js";
import server from "../services/server.js";
import Component from "./component.js";
import froca from "../services/froca.js";
export default class ShortcutComponent extends Component {
constructor() {
super();
server.get('keyboard-shortcuts-for-notes').then(shortcutAttributes => {
for (const attr in shortcutAttributes) {
bindNoteShortcutHandler(attr);
for (const attr of shortcutAttributes) {
this.bindNoteShortcutHandler(attr);
}
});
}
bindNoteShortcutHandler(attr) {
const handler = async () => appContext.tabManager.getActiveContext().setNote(attr.noteId);
const handler = () => appContext.tabManager.getActiveContext().setNote(attr.noteId);
const namespace = attr.attributeId;
shortcutService.bindGlobalShortcut(attr.value, handler, attr.attributeId);
if (attr.isDeleted) {
shortcutService.removeGlobalShortcut(namespace);
} else {
shortcutService.bindGlobalShortcut(attr.value, handler, namespace);
}
}
async entitiesReloadedEvent({loadResults}) {
for (const attr of loadResults.getAttributes()) {
if (attr.type === 'label' && attr.name === 'keyboardShortcut') {
const note = await froca.getNote(attr.noteId);
// launcher shortcuts are handled specifically
if (note && note.type !== 'launcher') {
this.bindNoteShortcutHandler(attr);
}
}
}
}
}

View file

@ -44,24 +44,6 @@ getActionsForScope("window").then(actions => {
}
});
function setElementActionHandler($el, actionName, handler) {
keyboardActionsLoaded.then(() => {
const action = keyboardActionRepo[actionName];
if (!action) {
throw new Error(`Cannot find keyboard action '${actionName}'`);
}
// not setting action.handler since this is not global
for (const shortcut of action.effectiveShortcuts) {
if (shortcut) {
shortcutService.bindElShortcut($el, shortcut, handler);
}
}
});
}
async function getAction(actionName, silent = false) {
await keyboardActionsLoaded;
@ -108,10 +90,8 @@ function updateDisplayedShortcuts($container) {
}
export default {
setElementActionHandler,
updateDisplayedShortcuts,
setupActionsForElement,
getActions,
getActionsForScope,
getAction
getActionsForScope
};

View file

@ -1,5 +1,9 @@
import utils from "./utils.js";
function removeGlobalShortcut(namespace) {
bindGlobalShortcut('', null, namespace);
}
function bindGlobalShortcut(keyboardShortcut, handler, namespace = null) {
bindElShortcut($(document), keyboardShortcut, handler, namespace);
}
@ -48,5 +52,6 @@ function normalizeShortcut(shortcut) {
export default {
bindGlobalShortcut,
bindElShortcut,
removeGlobalShortcut,
normalizeShortcut
}