| 147 | } |
| 148 | |
| 149 | export 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"); |
nothing calls this directly
no outgoing calls
no test coverage detected