import NoteContextAwareWidget from "../note_context_aware_widget.js"; import keyboardActionsService from "../../services/keyboard_actions.js"; const TPL = ``; let actions; keyboardActionsService.getActions().then(as => actions = as); export default class ButtonWidget extends NoteContextAwareWidget { isEnabled() { return true; } constructor() { super(); this.settings = { titlePlacement: 'right' }; } doRender() { this.$widget = $(TPL); if (this.settings.onClick) { this.$widget.on("click", e => { this.$widget.tooltip("hide"); this.settings.onClick(this, e); }); } else { this.$widget.on("click", () => { this.$widget.tooltip("hide"); this.triggerCommand(this.settings.command); }); } this.$widget.attr("data-placement", this.settings.titlePlacement); this.$widget.tooltip({ html: true, title: () => { const title = typeof this.settings.title === "function" ? this.settings.title() : this.settings.title; const action = actions.find(act => act.actionName === this.settings.command); if (action && action.effectiveShortcuts.length > 0) { return `${title} (${action.effectiveShortcuts.join(", ")})`; } else { return title; } }, trigger: "hover" }); super.doRender(); } refreshIcon() { for (const className of this.$widget[0].classList) { if (className.startsWith("bx-")) { this.$widget.removeClass(className); } } this.$widget .addClass(this.settings.icon); } initialRenderCompleteEvent() { this.refreshIcon(); } icon(icon) { this.settings.icon = icon; return this; } title(title) { this.settings.title = title; return this; } titlePlacement(placement) { this.settings.titlePlacement = placement; return this; } command(command) { this.settings.command = command; return this; } onClick(handler) { this.settings.onClick = handler; return this; } }