mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
split tree_cache and entities from note_tree
This commit is contained in:
parent
a699210a29
commit
f52d7e3c28
22
src/public/javascripts/entities/branch.js
Normal file
22
src/public/javascripts/entities/branch.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
class Branch {
|
||||||
|
constructor(treeCache, row) {
|
||||||
|
this.treeCache = treeCache;
|
||||||
|
this.branchId = row.branchId;
|
||||||
|
this.noteId = row.noteId;
|
||||||
|
this.note = null;
|
||||||
|
this.parentNoteId = row.parentNoteId;
|
||||||
|
this.notePosition = row.notePosition;
|
||||||
|
this.prefix = row.prefix;
|
||||||
|
this.isExpanded = row.isExpanded;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getNote() {
|
||||||
|
return this.treeCache.getNote(this.noteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
get toString() {
|
||||||
|
return `Branch(branchId=${this.branchId})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Branch;
|
45
src/public/javascripts/entities/note_short.js
Normal file
45
src/public/javascripts/entities/note_short.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
class NoteShort {
|
||||||
|
constructor(treeCache, row) {
|
||||||
|
this.treeCache = treeCache;
|
||||||
|
this.noteId = row.noteId;
|
||||||
|
this.title = row.title;
|
||||||
|
this.isProtected = row.isProtected;
|
||||||
|
this.type = row.type;
|
||||||
|
this.mime = row.mime;
|
||||||
|
this.hideInAutocomplete = row.hideInAutocomplete;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getBranches() {
|
||||||
|
const branches = [];
|
||||||
|
|
||||||
|
for (const parent of this.treeCache.parents[this.noteId]) {
|
||||||
|
branches.push(await this.treeCache.getBranchByChildParent(this.noteId, p.noteId));
|
||||||
|
}
|
||||||
|
|
||||||
|
return branches;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getChildBranches() {
|
||||||
|
const branches = [];
|
||||||
|
|
||||||
|
for (const child of this.treeCache.children[this.noteId]) {
|
||||||
|
branches.push(await this.treeCache.getBranchByChildParent(child.noteId, this.noteId));
|
||||||
|
}
|
||||||
|
|
||||||
|
return branches;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getParentNotes() {
|
||||||
|
return this.treeCache.parents[this.noteId] || [];
|
||||||
|
}
|
||||||
|
|
||||||
|
async getChildNotes() {
|
||||||
|
return this.treeCache.children[this.noteId] || [];
|
||||||
|
}
|
||||||
|
|
||||||
|
get toString() {
|
||||||
|
return `Note(noteId=${this.noteId}, title=${this.title})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NoteShort;
|
@ -11,134 +11,7 @@ import treeUtils from './tree_utils.js';
|
|||||||
import utils from './utils.js';
|
import utils from './utils.js';
|
||||||
import server from './server.js';
|
import server from './server.js';
|
||||||
import recentNotes from './dialogs/recent_notes.js';
|
import recentNotes from './dialogs/recent_notes.js';
|
||||||
|
import treeCache from './tree_cache.js';
|
||||||
class TreeCache {
|
|
||||||
constructor(noteRows, branchRows) {
|
|
||||||
this.parents = [];
|
|
||||||
this.children = [];
|
|
||||||
this.childParentToBranch = {};
|
|
||||||
|
|
||||||
/** @type {Object.<string, NoteShort>} */
|
|
||||||
this.notes = {};
|
|
||||||
for (const noteRow of noteRows) {
|
|
||||||
const note = new NoteShort(this, noteRow);
|
|
||||||
|
|
||||||
this.notes[note.noteId] = note;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @type {Object.<string, Branch>} */
|
|
||||||
this.branches = {};
|
|
||||||
for (const branchRow of branchRows) {
|
|
||||||
const branch = new Branch(this, branchRow);
|
|
||||||
|
|
||||||
this.addBranch(branch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getNote(noteId) {
|
|
||||||
return this.notes[noteId];
|
|
||||||
}
|
|
||||||
|
|
||||||
addBranch(branch) {
|
|
||||||
this.branches[branch.branchId] = branch;
|
|
||||||
|
|
||||||
this.parents[branch.noteId] = this.parents[branch.noteId] || [];
|
|
||||||
this.parents[branch.noteId].push(this.notes[branch.parentNoteId]);
|
|
||||||
|
|
||||||
this.children[branch.parentNoteId] = this.children[branch.parentNoteId] || [];
|
|
||||||
this.children[branch.parentNoteId].push(this.notes[branch.noteId]);
|
|
||||||
|
|
||||||
this.childParentToBranch[branch.noteId + '-' + branch.parentNoteId] = branch;
|
|
||||||
}
|
|
||||||
|
|
||||||
add(note, branch) {
|
|
||||||
this.notes[note.noteId] = note;
|
|
||||||
|
|
||||||
this.addBranch(branch);
|
|
||||||
}
|
|
||||||
|
|
||||||
getBranch(branchId) {
|
|
||||||
return this.branches[branchId];
|
|
||||||
}
|
|
||||||
|
|
||||||
getBranchByChildParent(childNoteId, parentNoteId) {
|
|
||||||
const key = (childNoteId + '-' + parentNoteId);
|
|
||||||
const branch = this.childParentToBranch[key];
|
|
||||||
|
|
||||||
if (!branch) {
|
|
||||||
utils.throwError("Cannot find branch for child-parent=" + key);
|
|
||||||
}
|
|
||||||
|
|
||||||
return branch;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class NoteShort {
|
|
||||||
constructor(treeCache, row) {
|
|
||||||
this.treeCache = treeCache;
|
|
||||||
this.noteId = row.noteId;
|
|
||||||
this.title = row.title;
|
|
||||||
this.isProtected = row.isProtected;
|
|
||||||
this.type = row.type;
|
|
||||||
this.mime = row.mime;
|
|
||||||
this.hideInAutocomplete = row.hideInAutocomplete;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getBranches() {
|
|
||||||
const branches = [];
|
|
||||||
|
|
||||||
for (const parent of this.treeCache.parents[this.noteId]) {
|
|
||||||
branches.push(await this.treeCache.getBranchByChildParent(this.noteId, p.noteId));
|
|
||||||
}
|
|
||||||
|
|
||||||
return branches;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getChildBranches() {
|
|
||||||
const branches = [];
|
|
||||||
|
|
||||||
for (const child of this.treeCache.children[this.noteId]) {
|
|
||||||
branches.push(await this.treeCache.getBranchByChildParent(child.noteId, this.noteId));
|
|
||||||
}
|
|
||||||
|
|
||||||
return branches;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getParentNotes() {
|
|
||||||
return this.treeCache.parents[this.noteId] || [];
|
|
||||||
}
|
|
||||||
|
|
||||||
async getChildNotes() {
|
|
||||||
return this.treeCache.children[this.noteId] || [];
|
|
||||||
}
|
|
||||||
|
|
||||||
get toString() {
|
|
||||||
return `Note(noteId=${this.noteId}, title=${this.title})`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Branch {
|
|
||||||
constructor(treeCache, row) {
|
|
||||||
this.treeCache = treeCache;
|
|
||||||
this.branchId = row.branchId;
|
|
||||||
this.noteId = row.noteId;
|
|
||||||
this.note = null;
|
|
||||||
this.parentNoteId = row.parentNoteId;
|
|
||||||
this.notePosition = row.notePosition;
|
|
||||||
this.prefix = row.prefix;
|
|
||||||
this.isExpanded = row.isExpanded;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getNote() {
|
|
||||||
return this.treeCache.getNote(this.noteId);
|
|
||||||
}
|
|
||||||
|
|
||||||
get toString() {
|
|
||||||
return `Branch(branchId=${this.branchId})`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let treeCache;
|
|
||||||
|
|
||||||
const $tree = $("#tree");
|
const $tree = $("#tree");
|
||||||
const $parentList = $("#parent-list");
|
const $parentList = $("#parent-list");
|
||||||
@ -244,7 +117,7 @@ function setParentChildRelation(branchId, parentNoteId, childNoteId) {
|
|||||||
async function prepareBranch(noteRows, branchRows) {
|
async function prepareBranch(noteRows, branchRows) {
|
||||||
utils.assertArguments(noteRows);
|
utils.assertArguments(noteRows);
|
||||||
|
|
||||||
treeCache = new TreeCache(noteRows, branchRows);
|
treeCache.load(noteRows, branchRows);
|
||||||
|
|
||||||
return await prepareBranchInner(treeCache.getNote('root'));
|
return await prepareBranchInner(treeCache.getNote('root'));
|
||||||
}
|
}
|
||||||
|
68
src/public/javascripts/tree_cache.js
Normal file
68
src/public/javascripts/tree_cache.js
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import utils from "./utils.js";
|
||||||
|
import Branch from "./entities/branch.js";
|
||||||
|
import NoteShort from "./entities/note_short.js";
|
||||||
|
|
||||||
|
class TreeCache {
|
||||||
|
load(noteRows, branchRows) {
|
||||||
|
this.parents = [];
|
||||||
|
this.children = [];
|
||||||
|
this.childParentToBranch = {};
|
||||||
|
|
||||||
|
/** @type {Object.<string, NoteShort>} */
|
||||||
|
this.notes = {};
|
||||||
|
for (const noteRow of noteRows) {
|
||||||
|
const note = new NoteShort(this, noteRow);
|
||||||
|
|
||||||
|
this.notes[note.noteId] = note;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @type {Object.<string, Branch>} */
|
||||||
|
this.branches = {};
|
||||||
|
for (const branchRow of branchRows) {
|
||||||
|
const branch = new Branch(this, branchRow);
|
||||||
|
|
||||||
|
this.addBranch(branch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getNote(noteId) {
|
||||||
|
return this.notes[noteId];
|
||||||
|
}
|
||||||
|
|
||||||
|
addBranch(branch) {
|
||||||
|
this.branches[branch.branchId] = branch;
|
||||||
|
|
||||||
|
this.parents[branch.noteId] = this.parents[branch.noteId] || [];
|
||||||
|
this.parents[branch.noteId].push(this.notes[branch.parentNoteId]);
|
||||||
|
|
||||||
|
this.children[branch.parentNoteId] = this.children[branch.parentNoteId] || [];
|
||||||
|
this.children[branch.parentNoteId].push(this.notes[branch.noteId]);
|
||||||
|
|
||||||
|
this.childParentToBranch[branch.noteId + '-' + branch.parentNoteId] = branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
add(note, branch) {
|
||||||
|
this.notes[note.noteId] = note;
|
||||||
|
|
||||||
|
this.addBranch(branch);
|
||||||
|
}
|
||||||
|
|
||||||
|
getBranch(branchId) {
|
||||||
|
return this.branches[branchId];
|
||||||
|
}
|
||||||
|
|
||||||
|
getBranchByChildParent(childNoteId, parentNoteId) {
|
||||||
|
const key = (childNoteId + '-' + parentNoteId);
|
||||||
|
const branch = this.childParentToBranch[key];
|
||||||
|
|
||||||
|
if (!branch) {
|
||||||
|
utils.throwError("Cannot find branch for child-parent=" + key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return branch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const treeCache = new TreeCache();
|
||||||
|
|
||||||
|
export default treeCache;
|
Loading…
x
Reference in New Issue
Block a user