102 lines
3.9 KiB
JavaScript
Raw Normal View History

2022-12-01 16:22:04 +01:00
import CalendarWidget from "../buttons/calendar.js";
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";
import BackInHistoryButtonWidget from "../buttons/history/history_back.js";
import ForwardInHistoryButtonWidget from "../buttons/history/history_forward.js";
import BasicWidget from "../basic_widget.js";
2022-12-02 16:46:14 +01:00
import NoteLauncher from "../buttons/launcher/note_launcher.js";
import ScriptLauncher from "../buttons/launcher/script_launcher.js";
import CommandButtonWidget from "../buttons/command_button.js";
2022-12-01 16:22:04 +01:00
export default class LauncherWidget extends BasicWidget {
2022-12-02 16:46:14 +01:00
constructor() {
2022-12-01 16:22:04 +01:00
super();
2022-12-07 12:46:41 +01:00
2022-12-01 16:22:04 +01:00
this.innerWidget = null;
}
isEnabled() {
return this.innerWidget.isEnabled();
}
doRender() {
this.$widget = this.innerWidget.render();
}
2022-12-02 16:46:14 +01:00
async initLauncher(note) {
if (note.type !== 'launcher') {
throw new Error(`Note '${note.noteId}' '${note.title}' is not a launcher even though it's in the launcher subtree`);
}
2022-12-01 16:22:04 +01:00
2022-12-02 16:46:14 +01:00
const launcherType = note.getLabelValue("launcherType");
2022-12-01 16:22:04 +01:00
2022-12-02 16:46:14 +01:00
if (launcherType === 'command') {
2022-12-11 22:26:18 +01:00
this.innerWidget = this.initCommandLauncherWidget(note)
2022-12-11 13:20:37 +01:00
.class("launcher-button");
2022-12-01 16:22:04 +01:00
} else if (launcherType === 'note') {
2022-12-11 13:20:37 +01:00
this.innerWidget = new NoteLauncher(note)
.class("launcher-button");
2022-12-01 16:22:04 +01:00
} else if (launcherType === 'script') {
2022-12-11 13:20:37 +01:00
this.innerWidget = new ScriptLauncher(note)
.class("launcher-button");
2022-12-01 16:22:04 +01:00
} else if (launcherType === 'customWidget') {
2022-12-02 16:46:14 +01:00
this.innerWidget = await this.initCustomWidget(note);
2022-12-01 16:22:04 +01:00
} else if (launcherType === 'builtinWidget') {
2022-12-02 16:46:14 +01:00
this.innerWidget = this.initBuiltinWidget(note);
2022-12-01 16:22:04 +01:00
} else {
2022-12-07 12:46:41 +01:00
throw new Error(`Unrecognized launcher type '${launcherType}' for launcher '${note.noteId}' title '${note.title}'`);
2022-12-01 16:22:04 +01:00
}
if (!this.innerWidget) {
2022-12-02 16:46:14 +01:00
throw new Error(`Unknown initialization error for note '${note.noteId}', title '${note.title}'`);
2022-12-01 16:22:04 +01:00
}
this.child(this.innerWidget);
}
2022-12-11 22:26:18 +01:00
initCommandLauncherWidget(note) {
2022-12-02 16:46:14 +01:00
return new CommandButtonWidget()
.title(note.title)
.icon(note.getIcon())
.command(() => note.getLabelValue("command"));
}
2022-12-01 16:22:04 +01:00
2022-12-02 16:46:14 +01:00
async initCustomWidget(note) {
const widget = await note.getRelationTarget('widget');
2022-12-01 16:22:04 +01:00
2022-12-02 16:46:14 +01:00
if (widget) {
return await widget.executeScript();
2022-12-01 16:22:04 +01:00
} else {
2022-12-02 16:46:14 +01:00
throw new Error(`Custom widget of launcher '${note.noteId}' '${note.title}' is not defined.`);
2022-12-01 16:22:04 +01:00
}
}
2022-12-02 16:46:14 +01:00
initBuiltinWidget(note) {
const builtinWidget = note.getLabelValue("builtinWidget");
if (builtinWidget === 'calendar') {
return new CalendarWidget(note.title, note.getIcon());
} else if (builtinWidget === 'spacer') {
// || has to be inside since 0 is a valid value
const baseSize = parseInt(note.getLabelValue("baseSize") || "40");
const growthFactor = parseInt(note.getLabelValue("growthFactor") || "100");
return new SpacerWidget(baseSize, growthFactor);
} else if (builtinWidget === 'bookmarks') {
return new BookmarkButtons();
} else if (builtinWidget === 'protectedSession') {
return new ProtectedSessionStatusWidget();
} else if (builtinWidget === 'syncStatus') {
return new SyncStatusWidget();
} else if (builtinWidget === 'backInHistoryButton') {
return new BackInHistoryButtonWidget();
} else if (builtinWidget === 'forwardInHistoryButton') {
return new ForwardInHistoryButtonWidget();
} else {
throw new Error(`Unrecognized builtin widget ${builtinWidget} for launcher ${note.noteId} "${note.title}"`);
2022-12-01 16:22:04 +01:00
}
}
}