import NoteContextAwareWidget from "../note_context_aware_widget.js"; import utils from "../../services/utils.js"; import branchService from "../../services/branches.js"; import dialogService from "../../services/dialog.js"; import server from "../../services/server.js"; import toastService from "../../services/toast.js"; import ws from "../../services/ws.js"; import appContext from "../../components/app_context.js"; const TPL = ` `; export default class NoteActionsWidget extends NoteContextAwareWidget { isEnabled() { return this.note?.type !== 'launcher'; } doRender() { this.$widget = $(TPL); this.$convertNoteIntoAttachmentButton = this.$widget.find("[data-trigger-command='convertNoteIntoAttachment']"); this.$findInTextButton = this.$widget.find('.find-in-text-button'); this.$printActiveNoteButton = this.$widget.find('.print-active-note-button'); this.$showSourceButton = this.$widget.find('.show-source-button'); this.$renderNoteButton = this.$widget.find('.render-note-button'); this.$exportNoteButton = this.$widget.find('.export-note-button'); this.$exportNoteButton.on("click", () => { if (this.$exportNoteButton.hasClass("disabled")) { return; } this.triggerCommand("showExportDialog", { notePath: this.noteContext.notePath, defaultType: "single" }); }); this.$importNoteButton = this.$widget.find('.import-files-button'); this.$importNoteButton.on("click", () => this.triggerCommand("showImportDialog", {noteId: this.noteId})); this.$widget.on('click', '.dropdown-item', () => this.$widget.find("[data-toggle='dropdown']").dropdown('toggle')); this.$openNoteExternallyButton = this.$widget.find(".open-note-externally-button"); this.$deleteNoteButton = this.$widget.find(".delete-note-button"); this.$deleteNoteButton.on("click", () => { if (this.note.noteId === 'root') { return; } branchService.deleteNotes([this.note.getParentBranches()[0].branchId], true); }); } refreshWithNote(note) { this.$convertNoteIntoAttachmentButton.toggle(note.isEligibleForConversionToAttachment()); this.toggleDisabled(this.$findInTextButton, ['text', 'code', 'book', 'search'].includes(note.type)); this.toggleDisabled(this.$showSourceButton, ['text', 'relationMap', 'mermaid'].includes(note.type)); this.toggleDisabled(this.$printActiveNoteButton, ['text', 'code'].includes(note.type)); this.$renderNoteButton.toggle(note.type === 'render'); this.$openNoteExternallyButton.toggle(utils.isElectron()); } async convertNoteIntoAttachmentCommand() { if (!await dialogService.confirm(`Are you sure you want to convert note '${this.note.title}' into an attachment of the parent note?`)) { return; } const {attachment: newAttachment} = await server.post(`notes/${this.noteId}/convert-to-attachment`); if (!newAttachment) { toastService.showMessage(`Converting note '${this.note.title}' failed.`); return; } toastService.showMessage(`Note '${newAttachment.title}' has been converted to attachment.`); await ws.waitForMaxKnownEntityChangeId(); await appContext.tabManager.getActiveContext().setNote(newAttachment.parentId, { viewScope: { viewMode: 'attachments', attachmentId: newAttachment.attachmentId } }); } toggleDisabled($el, enable) { if (enable) { $el.removeAttr('disabled'); } else { $el.attr('disabled', 'disabled'); } } entitiesReloadedEvent({loadResults}) { if (loadResults.isNoteReloaded(this.noteId)) { this.refresh(); } } }