mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { ActionKeyboardShortcut } from "@triliumnext/commons";
 | |
| import type { CommandNames } from "../../components/app_context.js";
 | |
| import keyboardActionsService from "../../services/keyboard_actions.js";
 | |
| import AbstractButtonWidget, { type AbstractButtonWidgetSettings } from "./abstract_button.js";
 | |
| import type { ButtonNoteIdProvider } from "./button_from_note.js";
 | |
| 
 | |
| let actions: ActionKeyboardShortcut[];
 | |
| 
 | |
| keyboardActionsService.getActions().then((as) => (actions = as));
 | |
| 
 | |
| // TODO: Is this actually used?
 | |
| export type ClickHandler = (widget: CommandButtonWidget, e: JQuery.ClickEvent<any, any, any, any>) => void;
 | |
| type CommandOrCallback = CommandNames | (() => CommandNames);
 | |
| 
 | |
| interface CommandButtonWidgetSettings extends AbstractButtonWidgetSettings {
 | |
|     command?: CommandOrCallback;
 | |
|     onClick?: ClickHandler;
 | |
|     buttonNoteIdProvider?: ButtonNoteIdProvider | null;
 | |
| }
 | |
| 
 | |
| export default class CommandButtonWidget extends AbstractButtonWidget<CommandButtonWidgetSettings> {
 | |
|     constructor() {
 | |
|         super();
 | |
|         this.settings = {
 | |
|             titlePlacement: "right",
 | |
|             title: null,
 | |
|             icon: null,
 | |
|             onContextMenu: null
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     doRender() {
 | |
|         super.doRender();
 | |
| 
 | |
|         if (this.settings.command) {
 | |
|             this.$widget.on("click", () => {
 | |
|                 this.tooltip.hide();
 | |
| 
 | |
|                 if (this._command) {
 | |
|                     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?.effectiveShortcuts && action.effectiveShortcuts.length > 0) {
 | |
|             return `${title} (${action.effectiveShortcuts.join(", ")})`;
 | |
|         } else {
 | |
|             return title;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     onClick(handler: ClickHandler) {
 | |
|         this.settings.onClick = handler;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     command(command: CommandOrCallback) {
 | |
|         this.settings.command = command;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     get _command() {
 | |
|         return typeof this.settings.command === "function" ? this.settings.command() : this.settings.command;
 | |
|     }
 | |
| }
 |