mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
"use strict";
|
|
|
|
const Expression = require('./expression.js');
|
|
const NoteSet = require('../note_set.js');
|
|
const log = require('../../log');
|
|
const becca = require('../../../becca/becca');
|
|
|
|
class AncestorExp extends Expression {
|
|
constructor(ancestorNoteId, ancestorDepth) {
|
|
super();
|
|
|
|
this.ancestorNoteId = ancestorNoteId;
|
|
this.ancestorDepth = ancestorDepth; // for DEBUG mode
|
|
this.ancestorDepthComparator = this.getComparator(ancestorDepth);
|
|
}
|
|
|
|
execute(inputNoteSet, executionContext, searchContext) {
|
|
const ancestorNote = becca.notes[this.ancestorNoteId];
|
|
|
|
if (!ancestorNote) {
|
|
log.error(`Subtree note '${this.ancestorNoteId}' was not not found.`);
|
|
|
|
return new NoteSet([]);
|
|
}
|
|
|
|
const subtree = ancestorNote.getSubtree();
|
|
|
|
const subTreeNoteSet = new NoteSet(subtree.notes).intersection(inputNoteSet);
|
|
|
|
if (!this.ancestorDepthComparator) {
|
|
return subTreeNoteSet;
|
|
}
|
|
|
|
const depthConformingNoteSet = new NoteSet([]);
|
|
|
|
for (const note of subTreeNoteSet.notes) {
|
|
const distance = note.getDistanceToAncestor(ancestorNote.noteId);
|
|
|
|
if (this.ancestorDepthComparator(distance)) {
|
|
depthConformingNoteSet.add(note);
|
|
}
|
|
}
|
|
|
|
return depthConformingNoteSet;
|
|
}
|
|
|
|
getComparator(depthCondition) {
|
|
if (!depthCondition) {
|
|
return null;
|
|
}
|
|
|
|
const comparedDepth = parseInt(depthCondition.substr(2));
|
|
|
|
if (depthCondition.startsWith("eq")) {
|
|
return depth => depth === comparedDepth;
|
|
}
|
|
else if (depthCondition.startsWith("gt")) {
|
|
return depth => depth > comparedDepth;
|
|
}
|
|
else if (depthCondition.startsWith("lt")) {
|
|
return depth => depth < comparedDepth;
|
|
}
|
|
else {
|
|
log.error(`Unrecognized depth condition value ${depthCondition}`);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = AncestorExp;
|