trilium/src/public/app/widgets/buttons/command_button.js

55 lines
1.4 KiB
JavaScript

import keyboardActionsService from "../../services/keyboard_actions.js";
import AbstractButtonWidget from "./abstract_button.js";
let actions;
keyboardActionsService.getActions().then(as => actions = as);
export default class CommandButtonWidget extends AbstractButtonWidget {
doRender() {
super.doRender();
if (this.settings.command) {
this.$widget.on("click", () => {
this.$widget.tooltip("hide");
this.triggerCommand(this._command);
});
} else {
console.warn(`Button widget '${this.componentId}' has no defined command`, this.settings);
}
}
getTitle() {
const title = super.getTitle();
const action = actions.find(act => act.actionName === this._command);
if (action && action.effectiveShortcuts.length > 0) {
return `${title} (${action.effectiveShortcuts.join(", ")})`;
} else {
return title;
}
}
onClick(handler) {
this.settings.onClick = handler;
return this;
}
/**
* @param {function|string} command
* @returns {this}
*/
command(command) {
this.settings.command = command;
return this;
}
get _command() {
return typeof this.settings.command === "function"
? this.settings.command()
: this.settings.command;
}
}