MCPcopy
hub / github.com/callumalpass/tasknotes / TaskContextMenu

Class TaskContextMenu

src/components/TaskContextMenu.ts:149–2363  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

147}
148
149export class TaskContextMenu {
150 private menu: Menu;
151 private options: TaskContextMenuOptions;
152 private targetDoc: Document = activeDocument;
153
154 constructor(options: TaskContextMenuOptions, menu: Menu = new ContextMenu()) {
155 this.menu = menu;
156 this.options = options;
157 this.buildMenu();
158 }
159
160 static addToMenu(menu: Menu, options: TaskContextMenuOptions): void {
161 new TaskContextMenu(options, menu);
162 }
163
164 private t(key: string, params?: Record<string, string | number>): string {
165 return this.options.plugin.i18n.translate(key, params);
166 }
167
168 private buildMenu(): void {
169 const { task, plugin } = this.options;
170 const hasPromotedOccurrenceControls = this.addPromotedOccurrenceControls(task, plugin);
171
172 // Status submenu
173 this.menu.addItem((item) => {
174 item.setTitle(this.t("contextMenus.task.status"));
175 item.setIcon("circle");
176
177 const submenu = getSubmenu(item);
178 this.addStatusOptions(submenu, task, plugin);
179 });
180
181 this.menu.addSeparator();
182
183 // Priority submenu
184 this.menu.addItem((item) => {
185 item.setTitle(this.t("contextMenus.task.priority"));
186 item.setIcon("star");
187
188 const submenu = getSubmenu(item);
189 this.addPriorityOptions(submenu, task, plugin);
190 });
191
192 // Tags submenu
193 this.menu.addItem((item) => {
194 item.setTitle(this.t("contextMenus.task.tags"));
195 item.setIcon("tags");
196
197 const submenu = getSubmenu(item);
198 this.addTagOptions(submenu, task, plugin);
199 });
200
201 this.menu.addSeparator();
202
203 // Due Date submenu
204 this.menu.addItem((item) => {
205 item.setTitle(this.t("contextMenus.task.dueDate"));
206 item.setIcon("calendar");

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected