import treeUtils from "./tree_utils.js"; import treeChangesService from "./branches.js"; import cloningService from "./cloning.js"; import infoService from "./info.js"; let clipboardIds = []; let clipboardMode = null; async function pasteAfter(node) { if (clipboardMode === 'cut') { const nodes = clipboardIds.map(nodeKey => treeUtils.getNodeByKey(nodeKey)); await treeChangesService.moveAfterNode(nodes, node); clipboardIds = []; clipboardMode = null; } else if (clipboardMode === 'copy') { for (const noteId of clipboardIds) { await cloningService.cloneNoteAfter(noteId, node.data.branchId); } // copy will keep clipboardIds and clipboardMode so it's possible to paste into multiple places } else if (clipboardIds.length === 0) { // just do nothing } else { infoService.throwError("Unrecognized clipboard mode=" + clipboardMode); } } async function pasteInto(node) { if (clipboardMode === 'cut') { const nodes = clipboardIds.map(nodeKey => treeUtils.getNodeByKey(nodeKey)); await treeChangesService.moveToNode(nodes, node); await node.setExpanded(true); clipboardIds = []; clipboardMode = null; } else if (clipboardMode === 'copy') { for (const noteId of clipboardIds) { await cloningService.cloneNoteTo(noteId, node.data.noteId); } await node.setExpanded(true); // copy will keep clipboardIds and clipboardMode so it's possible to paste into multiple places } else if (clipboardIds.length === 0) { // just do nothing } else { infoService.throwError("Unrecognized clipboard mode=" + mode); } } function copy(nodes) { clipboardIds = nodes.map(node => node.data.noteId); clipboardMode = 'copy'; infoService.showMessage("Note(s) have been copied into clipboard."); } function cut(nodes) { clipboardIds = nodes.map(node => node.key); clipboardMode = 'cut'; infoService.showMessage("Note(s) have been cut into clipboard."); } function isEmpty() { return clipboardIds.length === 0; } export default { pasteAfter, pasteInto, cut, copy, isEmpty }