trilium/src/public/app/services/hoisted_note.js

59 lines
1.6 KiB
JavaScript

import appContext from "./app_context.js";
import treeService from "./tree.js";
function getHoistedNoteId() {
const activeNoteContext = appContext.tabManager.getActiveContext();
return activeNoteContext ? activeNoteContext.hoistedNoteId : 'root';
}
async function unhoist() {
const activeNoteContext = appContext.tabManager.getActiveContext();
if (activeNoteContext) {
await activeNoteContext.unhoist();
}
}
function isTopLevelNode(node) {
return isHoistedNode(node.getParent());
}
function isHoistedNode(node) {
// even though check for 'root' should not be necessary, we keep it just in case
return node.data.noteId === "root"
|| node.data.noteId === getHoistedNoteId();
}
async function checkNoteAccess(notePath, noteContext) {
const resolvedNotePath = await treeService.resolveNotePath(notePath, noteContext.hoistedNoteId);
if (!resolvedNotePath) {
console.log("Cannot activate " + notePath);
return false;
}
const hoistedNoteId = noteContext.hoistedNoteId;
if (!resolvedNotePath.includes(hoistedNoteId) && !resolvedNotePath.includes("hidden")) {
const confirmDialog = await import('../dialogs/confirm.js');
if (!await confirmDialog.confirm("Requested note is outside of hoisted note subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?")) {
return false;
}
// unhoist so we can activate the note
await unhoist();
}
return true;
}
export default {
getHoistedNoteId,
unhoist,
isTopLevelNode,
isHoistedNode,
checkNoteAccess
}