2022-08-04 23:00:32 +02:00
|
|
|
import FlexContainer from "./flex_container.js";
|
|
|
|
import froca from "../../services/froca.js";
|
|
|
|
import ButtonWidget from "../buttons/button_widget.js";
|
2022-08-05 16:44:26 +02:00
|
|
|
import CalendarWidget from "../buttons/calendar.js";
|
|
|
|
import appContext from "../../services/app_context.js";
|
2022-08-05 19:15:28 +02:00
|
|
|
import SpacerWidget from "../spacer.js";
|
|
|
|
import BookmarkButtons from "../bookmark_buttons.js";
|
|
|
|
import ProtectedSessionStatusWidget from "../buttons/protected_session_status.js";
|
|
|
|
import SyncStatusWidget from "../sync_status.js";
|
2022-11-25 15:29:57 +01:00
|
|
|
import BackInHistoryButtonWidget from "../buttons/history/history_back.js";
|
|
|
|
import ForwardInHistoryButtonWidget from "../buttons/history/history_forward.js";
|
2022-08-04 23:00:32 +02:00
|
|
|
|
|
|
|
export default class ShortcutContainer extends FlexContainer {
|
|
|
|
constructor() {
|
|
|
|
super('column');
|
|
|
|
|
|
|
|
this.id('shortcut-container');
|
|
|
|
this.css('height', '100%');
|
|
|
|
this.filling();
|
|
|
|
|
|
|
|
this.load();
|
|
|
|
}
|
|
|
|
|
|
|
|
async load() {
|
|
|
|
this.children = [];
|
|
|
|
|
2022-08-06 15:00:56 +02:00
|
|
|
const visibleShortcutsRoot = await froca.getNote('lb_visibleshortcuts', true);
|
|
|
|
|
|
|
|
if (!visibleShortcutsRoot) {
|
|
|
|
console.log("Visible shortcuts root note doesn't exist.");
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
2022-08-04 23:00:32 +02:00
|
|
|
|
|
|
|
for (const shortcut of await visibleShortcutsRoot.getChildNotes()) {
|
2022-11-27 23:43:25 +01:00
|
|
|
try {
|
|
|
|
await this.initShortcut(shortcut);
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
console.error(`Initialization of shortcut '${shortcut.noteId}' with title '${shortcut.title}' failed with error: ${e.message} ${e.stack}`);
|
|
|
|
continue;
|
2022-08-05 16:44:26 +02:00
|
|
|
}
|
2022-08-04 23:00:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
this.$widget.empty();
|
|
|
|
this.renderChildren();
|
|
|
|
|
2022-11-27 23:43:25 +01:00
|
|
|
await this.handleEventInChildren('initialRenderComplete');
|
|
|
|
|
|
|
|
const activeContext = appContext.tabManager.getActiveContext();
|
|
|
|
|
|
|
|
await this.handleEvent('setNoteContext', {
|
|
|
|
noteContext: activeContext
|
|
|
|
});
|
|
|
|
await this.handleEvent('noteSwitched', {
|
|
|
|
noteContext: activeContext,
|
|
|
|
notePath: activeContext.notePath
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
async initShortcut(shortcut) {
|
|
|
|
if (shortcut.type !== 'shortcut') {
|
|
|
|
console.warn(`Note ${shortcut.noteId} is not a shortcut even though it's in shortcut subtree`);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (shortcut.getLabelValue("command")) {
|
|
|
|
this.child(new ButtonWidget()
|
|
|
|
.title(shortcut.title)
|
|
|
|
.icon(shortcut.getIcon())
|
|
|
|
.command(shortcut.getLabelValue("command")));
|
|
|
|
} else if (shortcut.hasRelation('targetNote')) {
|
|
|
|
this.child(new ButtonWidget()
|
|
|
|
.title(shortcut.title)
|
|
|
|
.icon(shortcut.getIcon())
|
|
|
|
.onClick(() => appContext.tabManager.openTabWithNoteWithHoisting(shortcut.getRelationValue('targetNote'), true)));
|
|
|
|
} else if (shortcut.hasRelation('script')) {
|
|
|
|
this.child(new ButtonWidget()
|
|
|
|
.title(shortcut.title)
|
|
|
|
.icon(shortcut.getIcon())
|
|
|
|
.onClick(async () => {
|
|
|
|
const script = await shortcut.getRelationTarget('script');
|
|
|
|
|
|
|
|
await script.executeScript();
|
|
|
|
}));
|
|
|
|
} else if (shortcut.hasRelation('widget')) {
|
|
|
|
const widget = await shortcut.getRelationTarget('widget');
|
|
|
|
|
|
|
|
const res = await widget.executeScript();
|
|
|
|
|
|
|
|
this.child(res);
|
|
|
|
} else {
|
|
|
|
const builtinWidget = shortcut.getLabelValue("builtinWidget");
|
|
|
|
|
|
|
|
if (builtinWidget) {
|
|
|
|
if (builtinWidget === 'calendar') {
|
|
|
|
this.child(new CalendarWidget(shortcut.title, shortcut.getIcon()));
|
|
|
|
} else if (builtinWidget === 'spacer') {
|
|
|
|
// || has to be inside since 0 is a valid value
|
|
|
|
const baseSize = parseInt(shortcut.getLabelValue("baseSize") || "40");
|
|
|
|
const growthFactor = parseInt(shortcut.getLabelValue("growthFactor") || "100");
|
|
|
|
|
|
|
|
this.child(new SpacerWidget(baseSize, growthFactor));
|
|
|
|
} else if (builtinWidget === 'pluginButtons') {
|
|
|
|
this.child(new FlexContainer("column")
|
|
|
|
.id("plugin-buttons")
|
|
|
|
.contentSized());
|
|
|
|
} else if (builtinWidget === 'bookmarks') {
|
|
|
|
this.child(new BookmarkButtons());
|
|
|
|
} else if (builtinWidget === 'protectedSession') {
|
|
|
|
this.child(new ProtectedSessionStatusWidget());
|
|
|
|
} else if (builtinWidget === 'syncStatus') {
|
|
|
|
this.child(new SyncStatusWidget());
|
|
|
|
} else if (builtinWidget === 'backInHistoryButton') {
|
|
|
|
this.child(new BackInHistoryButtonWidget());
|
|
|
|
} else if (builtinWidget === 'forwardInHistoryButton') {
|
|
|
|
this.child(new ForwardInHistoryButtonWidget());
|
|
|
|
} else {
|
|
|
|
console.log(`Unrecognized builtin widget ${builtinWidget} for shortcut ${shortcut.noteId} "${shortcut.title}"`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-08-04 23:00:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
entitiesReloadedEvent({loadResults}) {
|
2022-08-07 15:34:59 +02:00
|
|
|
if (loadResults.getNoteIds().find(noteId => froca.notes[noteId]?.isLaunchBarConfig())
|
|
|
|
|| loadResults.getBranches().find(branch => branch.parentNoteId.startsWith("lb_"))
|
|
|
|
|| loadResults.getAttributes().find(attr => froca.notes[attr.noteId]?.isLaunchBarConfig())) {
|
2022-08-04 23:00:32 +02:00
|
|
|
this.load();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|