2018-03-25 23:09:17 +08:00
|
|
|
import utils from './utils.js';
|
2019-04-17 03:40:04 +08:00
|
|
|
import hoistedNoteService from './hoisted_note.js';
|
2018-03-27 09:50:47 +08:00
|
|
|
import treeCache from "./tree_cache.js";
|
2017-11-05 07:28:49 +08:00
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
const $tree = $("#tree");
|
2017-09-10 00:06:15 +08:00
|
|
|
|
2019-04-17 03:40:04 +08:00
|
|
|
async function getParentProtectedStatus(node) {
|
|
|
|
return await hoistedNoteService.isRootNode(node) ? 0 : node.getParent().data.isProtected;
|
2018-03-25 23:09:17 +08:00
|
|
|
}
|
2017-10-02 11:07:32 +08:00
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
function getNodeByKey(key) {
|
|
|
|
return $tree.fancytree('getNodeByKey', key);
|
|
|
|
}
|
2017-10-02 11:07:32 +08:00
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
function getNoteIdFromNotePath(notePath) {
|
2018-08-30 02:22:57 +08:00
|
|
|
if (!notePath) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
const path = notePath.split("/");
|
2017-09-19 08:48:02 +08:00
|
|
|
|
2019-07-10 04:12:05 +08:00
|
|
|
const lastSegment = path[path.length - 1];
|
|
|
|
|
|
|
|
// path could have also tabId suffix
|
|
|
|
return lastSegment.split("-")[0];
|
2018-03-25 23:09:17 +08:00
|
|
|
}
|
2017-11-19 21:47:22 +08:00
|
|
|
|
2019-04-17 03:40:04 +08:00
|
|
|
async function getNotePath(node) {
|
|
|
|
if (!node) {
|
|
|
|
console.error("Node is null");
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
const path = [];
|
2017-11-19 21:47:22 +08:00
|
|
|
|
2019-04-17 03:40:04 +08:00
|
|
|
while (node && !await hoistedNoteService.isRootNode(node)) {
|
2018-03-25 23:09:17 +08:00
|
|
|
if (node.data.noteId) {
|
|
|
|
path.push(node.data.noteId);
|
2017-11-19 21:47:22 +08:00
|
|
|
}
|
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
node = node.getParent();
|
2017-11-19 21:47:22 +08:00
|
|
|
}
|
|
|
|
|
2019-06-14 04:45:55 +08:00
|
|
|
if (node) { // null node can happen directly after unhoisting when tree is still hoisted but option has been changed already
|
|
|
|
path.push(node.data.noteId); // root or hoisted noteId
|
|
|
|
}
|
2018-10-22 04:42:20 +08:00
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
return path.reverse().join("/");
|
|
|
|
}
|
|
|
|
|
2018-03-27 09:50:47 +08:00
|
|
|
async function getNoteTitle(noteId, parentNoteId = null) {
|
|
|
|
utils.assertArguments(noteId);
|
|
|
|
|
2018-08-15 21:27:22 +08:00
|
|
|
const note = await treeCache.getNote(noteId);
|
|
|
|
if (!note) {
|
|
|
|
return "[not found]";
|
|
|
|
}
|
|
|
|
|
|
|
|
let {title} = note;
|
2018-03-27 09:50:47 +08:00
|
|
|
|
|
|
|
if (parentNoteId !== null) {
|
|
|
|
const branch = await treeCache.getBranchByChildParent(noteId, parentNoteId);
|
|
|
|
|
|
|
|
if (branch && branch.prefix) {
|
|
|
|
title = branch.prefix + ' - ' + title;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return title;
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getNotePathTitle(notePath) {
|
|
|
|
utils.assertArguments(notePath);
|
|
|
|
|
|
|
|
const titlePath = [];
|
|
|
|
|
2018-06-07 10:38:36 +08:00
|
|
|
if (notePath.startsWith('root/')) {
|
|
|
|
notePath = notePath.substr(5);
|
|
|
|
}
|
|
|
|
|
|
|
|
// special case when we want just root's title
|
|
|
|
if (notePath === 'root') {
|
|
|
|
return await getNoteTitle(notePath);
|
|
|
|
}
|
|
|
|
|
2018-03-27 09:50:47 +08:00
|
|
|
let parentNoteId = 'root';
|
|
|
|
|
|
|
|
for (const noteId of notePath.split('/')) {
|
|
|
|
titlePath.push(await getNoteTitle(noteId, parentNoteId));
|
|
|
|
|
|
|
|
parentNoteId = noteId;
|
|
|
|
}
|
|
|
|
|
|
|
|
return titlePath.join(' / ');
|
|
|
|
}
|
|
|
|
|
2018-03-25 23:09:17 +08:00
|
|
|
export default {
|
|
|
|
getParentProtectedStatus,
|
|
|
|
getNodeByKey,
|
|
|
|
getNotePath,
|
|
|
|
getNoteIdFromNotePath,
|
2018-03-27 09:50:47 +08:00
|
|
|
getNoteTitle,
|
|
|
|
getNotePathTitle,
|
2018-03-25 23:09:17 +08:00
|
|
|
};
|