mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 18:08:33 +02:00
converting note properties to methods
This commit is contained in:
parent
a5d702b143
commit
2451596e8c
@ -337,11 +337,11 @@ describe("Search", () => {
|
|||||||
|
|
||||||
const searchContext = new SearchContext();
|
const searchContext = new SearchContext();
|
||||||
|
|
||||||
let searchResults = searchService.findResultsWithQuery('#city AND note.ancestors.title = Europe', searchContext);
|
let searchResults = searchService.findResultsWithQuery('#city AND note.getAncestors().title = Europe', searchContext);
|
||||||
expect(searchResults.length).toEqual(1);
|
expect(searchResults.length).toEqual(1);
|
||||||
expect(findNoteByTitle(searchResults, "Prague")).toBeTruthy();
|
expect(findNoteByTitle(searchResults, "Prague")).toBeTruthy();
|
||||||
|
|
||||||
searchResults = searchService.findResultsWithQuery('#city AND note.ancestors.title = Asia', searchContext);
|
searchResults = searchService.findResultsWithQuery('#city AND note.getAncestors().title = Asia', searchContext);
|
||||||
expect(searchResults.length).toEqual(1);
|
expect(searchResults.length).toEqual(1);
|
||||||
expect(findNoteByTitle(searchResults, "Taipei")).toBeTruthy();
|
expect(findNoteByTitle(searchResults, "Taipei")).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
@ -115,7 +115,7 @@ function attributeDeleted(attribute) {
|
|||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
// first invalidate and only then remove the attribute (otherwise invalidation wouldn't be complete)
|
// first invalidate and only then remove the attribute (otherwise invalidation wouldn't be complete)
|
||||||
if (attribute.isAffectingSubtree || note.isTemplate) {
|
if (attribute.isAffectingSubtree || note.isTemplate()) {
|
||||||
note.invalidateSubTree();
|
note.invalidateSubTree();
|
||||||
} else {
|
} else {
|
||||||
note.invalidateThisCache();
|
note.invalidateThisCache();
|
||||||
@ -143,7 +143,7 @@ function attributeUpdated(attribute) {
|
|||||||
const note = becca.notes[attribute.noteId];
|
const note = becca.notes[attribute.noteId];
|
||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
if (attribute.isAffectingSubtree || note.isTemplate) {
|
if (attribute.isAffectingSubtree || note.isTemplate()) {
|
||||||
note.invalidateSubTree();
|
note.invalidateSubTree();
|
||||||
} else {
|
} else {
|
||||||
note.invalidateThisCache();
|
note.invalidateThisCache();
|
||||||
|
@ -9,7 +9,7 @@ function isNotePathArchived(notePath) {
|
|||||||
const noteId = notePath[notePath.length - 1];
|
const noteId = notePath[notePath.length - 1];
|
||||||
const note = becca.notes[noteId];
|
const note = becca.notes[noteId];
|
||||||
|
|
||||||
if (note.isArchived) {
|
if (note.isArchived()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ function isNotePathArchived(notePath) {
|
|||||||
const note = becca.notes[notePath[i]];
|
const note = becca.notes[notePath[i]];
|
||||||
|
|
||||||
// this is going through parents so archived must be inheritable
|
// this is going through parents so archived must be inheritable
|
||||||
if (note.hasInheritableOwnedArchivedLabel) {
|
if (note.hasInheritableOwnedArchivedLabel()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ class Note extends AbstractEntity {
|
|||||||
// ------ Derived attributes ------
|
// ------ Derived attributes ------
|
||||||
|
|
||||||
/** @param {boolean} */
|
/** @param {boolean} */
|
||||||
this.isDecrypted = !row.isProtected || row.isContentAvailable;
|
this.isDecrypted = !this.isProtected;
|
||||||
|
|
||||||
this.decrypt();
|
this.decrypt();
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ class Note extends AbstractEntity {
|
|||||||
this.flatTextCache = null;
|
this.flatTextCache = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
get isContentAvailable() {
|
isContentAvailable() {
|
||||||
return !this.noteId // new note which was not encrypted yet
|
return !this.noteId // new note which was not encrypted yet
|
||||||
|| !this.isProtected
|
|| !this.isProtected
|
||||||
|| protectedSessionService.isProtectedSessionAvailable()
|
|| protectedSessionService.isProtectedSessionAvailable()
|
||||||
@ -568,11 +568,11 @@ class Note extends AbstractEntity {
|
|||||||
return attrs.length > 0 ? attrs[0] : null;
|
return attrs.length > 0 ? attrs[0] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
get isArchived() {
|
isArchived() {
|
||||||
return this.hasAttribute('label', 'archived');
|
return this.hasAttribute('label', 'archived');
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasInheritableOwnedArchivedLabel() {
|
hasInheritableOwnedArchivedLabel() {
|
||||||
return !!this.ownedAttributes.find(attr => attr.type === 'label' && attr.name === 'archived' && attr.isInheritable);
|
return !!this.ownedAttributes.find(attr => attr.type === 'label' && attr.name === 'archived' && attr.isInheritable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,7 +581,7 @@ class Note extends AbstractEntity {
|
|||||||
resortParents() {
|
resortParents() {
|
||||||
this.parentBranches.sort((a, b) =>
|
this.parentBranches.sort((a, b) =>
|
||||||
a.branchId.startsWith('virt-')
|
a.branchId.startsWith('virt-')
|
||||||
|| a.parentNote.hasInheritableOwnedArchivedLabel ? 1 : -1);
|
|| a.parentNote.hasInheritableOwnedArchivedLabel() ? 1 : -1);
|
||||||
|
|
||||||
this.parents = this.parentBranches.map(branch => branch.parentNote);
|
this.parents = this.parentBranches.map(branch => branch.parentNote);
|
||||||
}
|
}
|
||||||
@ -593,7 +593,7 @@ class Note extends AbstractEntity {
|
|||||||
*
|
*
|
||||||
* @return {string} - returns flattened textual representation of note, prefixes and attributes
|
* @return {string} - returns flattened textual representation of note, prefixes and attributes
|
||||||
*/
|
*/
|
||||||
get flatText() {
|
getFlatText() {
|
||||||
if (!this.flatTextCache) {
|
if (!this.flatTextCache) {
|
||||||
this.flatTextCache = this.noteId + ' ' + this.type + ' ' + this.mime + ' ';
|
this.flatTextCache = this.noteId + ' ' + this.type + ' ' + this.mime + ' ';
|
||||||
|
|
||||||
@ -674,16 +674,16 @@ class Note extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get isTemplate() {
|
isTemplate() {
|
||||||
return !!this.targetRelations.find(rel => rel.name === 'template');
|
return !!this.targetRelations.find(rel => rel.name === 'template');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {Note[]} */
|
/** @return {Note[]} */
|
||||||
get subtreeNotesIncludingTemplated() {
|
getSubtreeNotesIncludingTemplated() {
|
||||||
const arr = [[this]];
|
const arr = [[this]];
|
||||||
|
|
||||||
for (const childNote of this.children) {
|
for (const childNote of this.children) {
|
||||||
arr.push(childNote.subtreeNotesIncludingTemplated);
|
arr.push(childNote.getSubtreeNotesIncludingTemplated());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const targetRelation of this.targetRelations) {
|
for (const targetRelation of this.targetRelations) {
|
||||||
@ -691,7 +691,7 @@ class Note extends AbstractEntity {
|
|||||||
const note = targetRelation.note;
|
const note = targetRelation.note;
|
||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
arr.push(note.subtreeNotesIncludingTemplated);
|
arr.push(note.getSubtreeNotesIncludingTemplated());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -700,23 +700,23 @@ class Note extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @return {Note[]} */
|
/** @return {Note[]} */
|
||||||
get subtreeNotes() {
|
getSubtreeNotes() {
|
||||||
const arr = [[this]];
|
const arr = [[this]];
|
||||||
|
|
||||||
for (const childNote of this.children) {
|
for (const childNote of this.children) {
|
||||||
arr.push(childNote.subtreeNotes);
|
arr.push(childNote.getSubtreeNotes());
|
||||||
}
|
}
|
||||||
|
|
||||||
return arr.flat();
|
return arr.flat();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {String[]} */
|
/** @return {String[]} */
|
||||||
get subtreeNoteIds() {
|
getSubtreeNoteIds() {
|
||||||
return this.subtreeNotes.map(note => note.noteId);
|
return this.getSubtreeNotes().map(note => note.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
getDescendantNoteIds() {
|
getDescendantNoteIds() {
|
||||||
return this.subtreeNoteIds;
|
return this.getSubtreeNoteIds();
|
||||||
}
|
}
|
||||||
|
|
||||||
get parentCount() {
|
get parentCount() {
|
||||||
@ -767,7 +767,7 @@ class Note extends AbstractEntity {
|
|||||||
return this.getAttributes().length;
|
return this.getAttributes().length;
|
||||||
}
|
}
|
||||||
|
|
||||||
get ancestors() {
|
getAncestors() {
|
||||||
if (!this.ancestorCache) {
|
if (!this.ancestorCache) {
|
||||||
const noteIds = new Set();
|
const noteIds = new Set();
|
||||||
this.ancestorCache = [];
|
this.ancestorCache = [];
|
||||||
@ -778,7 +778,7 @@ class Note extends AbstractEntity {
|
|||||||
noteIds.add(parent.noteId);
|
noteIds.add(parent.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const ancestorNote of parent.ancestors) {
|
for (const ancestorNote of parent.getAncestors()) {
|
||||||
if (!noteIds.has(ancestorNote.noteId)) {
|
if (!noteIds.has(ancestorNote.noteId)) {
|
||||||
this.ancestorCache.push(ancestorNote);
|
this.ancestorCache.push(ancestorNote);
|
||||||
noteIds.add(ancestorNote.noteId);
|
noteIds.add(ancestorNote.noteId);
|
||||||
@ -796,7 +796,7 @@ class Note extends AbstractEntity {
|
|||||||
|
|
||||||
/** @return {Note[]} - returns only notes which are templated, does not include their subtrees
|
/** @return {Note[]} - returns only notes which are templated, does not include their subtrees
|
||||||
* in effect returns notes which are influenced by note's non-inheritable attributes */
|
* in effect returns notes which are influenced by note's non-inheritable attributes */
|
||||||
get templatedNotes() {
|
getTemplatedNotes() {
|
||||||
const arr = [this];
|
const arr = [this];
|
||||||
|
|
||||||
for (const targetRelation of this.targetRelations) {
|
for (const targetRelation of this.targetRelations) {
|
||||||
|
@ -64,7 +64,7 @@ function buildRewardMap(note) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const ancestorNote of note.ancestors) {
|
for (const ancestorNote of note.getAncestors()) {
|
||||||
if (ancestorNote.noteId === 'root') {
|
if (ancestorNote.noteId === 'root') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -249,7 +249,7 @@ async function findSimilarNotes(noteId) {
|
|||||||
|
|
||||||
const rewardMap = buildRewardMap(baseNote);
|
const rewardMap = buildRewardMap(baseNote);
|
||||||
let ancestorRewardCache = {};
|
let ancestorRewardCache = {};
|
||||||
const ancestorNoteIds = new Set(baseNote.ancestors.map(note => note.noteId));
|
const ancestorNoteIds = new Set(baseNote.getAncestors().map(note => note.noteId));
|
||||||
ancestorNoteIds.add(baseNote.noteId);
|
ancestorNoteIds.add(baseNote.noteId);
|
||||||
|
|
||||||
let displayRewards = false;
|
let displayRewards = false;
|
||||||
|
@ -308,8 +308,8 @@ class NoteShort {
|
|||||||
return a.isInHoistedSubTree ? -1 : 1;
|
return a.isInHoistedSubTree ? -1 : 1;
|
||||||
} else if (a.isSearch !== b.isSearch) {
|
} else if (a.isSearch !== b.isSearch) {
|
||||||
return a.isSearch ? 1 : -1;
|
return a.isSearch ? 1 : -1;
|
||||||
} else if (a.isArchived !== b.isArchived) {
|
} else if (a.isArchived() !== b.isArchived()) {
|
||||||
return a.isArchived ? 1 : -1;
|
return a.isArchived() ? 1 : -1;
|
||||||
} else {
|
} else {
|
||||||
return a.notePath.length - b.notePath.length;
|
return a.notePath.length - b.notePath.length;
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ export default class NotePathsWidget extends TabAwareWidget {
|
|||||||
icons.push(`<span class="bx bx-trending-up" title="This path is outside of hoisted note and you would have to unhoist."></span>`);
|
icons.push(`<span class="bx bx-trending-up" title="This path is outside of hoisted note and you would have to unhoist."></span>`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notePathRecord.isArchived) {
|
if (notePathRecord.isArchived()) {
|
||||||
$noteLink.addClass("path-archived");
|
$noteLink.addClass("path-archived");
|
||||||
|
|
||||||
icons.push(`<span class="bx bx-archive" title="Archived"></span>`);
|
icons.push(`<span class="bx bx-archive" title="Archived"></span>`);
|
||||||
|
@ -195,7 +195,7 @@ function changeTitle(req) {
|
|||||||
return [404, `Note ${noteId} has not been found`];
|
return [404, `Note ${noteId} has not been found`];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!note.isContentAvailable) {
|
if (!note.isContentAvailable()) {
|
||||||
return [400, `Note ${noteId} is not available for change`];
|
return [400, `Note ${noteId} is not available for change`];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ function searchFromRelation(note, relationName) {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!note.isContentAvailable) {
|
if (!note.isContentAvailable()) {
|
||||||
log.info(`Note ${scriptNote.noteId} is not available outside of protected session.`);
|
log.info(`Note ${scriptNote.noteId} is not available outside of protected session.`);
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
|
@ -29,7 +29,7 @@ function getSubtreeSize(req) {
|
|||||||
return [404, `Note ${noteId} was not found.`];
|
return [404, `Note ${noteId} was not found.`];
|
||||||
}
|
}
|
||||||
|
|
||||||
const subTreeNoteIds = note.subtreeNotes.map(note => note.noteId);
|
const subTreeNoteIds = note.getSubtreeNotes().map(note => note.noteId);
|
||||||
|
|
||||||
sql.fillParamList(subTreeNoteIds);
|
sql.fillParamList(subTreeNoteIds);
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ eventService.subscribe(eventService.ENTITY_CREATED, ({ entityName, entity }) =>
|
|||||||
const note = becca.notes[entity.noteId];
|
const note = becca.notes[entity.noteId];
|
||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
for (const noteId of note.subtreeNoteIds) {
|
for (const noteId of note.getSubtreeNoteIds()) {
|
||||||
treeService.sortNotesByTitle(noteId);
|
treeService.sortNotesByTitle(noteId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -475,7 +475,7 @@ function saveNoteRevision(note) {
|
|||||||
function updateNote(noteId, noteUpdates) {
|
function updateNote(noteId, noteUpdates) {
|
||||||
const note = becca.getNote(noteId);
|
const note = becca.getNote(noteId);
|
||||||
|
|
||||||
if (!note.isContentAvailable) {
|
if (!note.isContentAvailable()) {
|
||||||
throw new Error(`Note ${noteId} is not available for change!`);
|
throw new Error(`Note ${noteId} is not available for change!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ const log = require('./log');
|
|||||||
const becca = require("../becca/becca.js");
|
const becca = require("../becca/becca.js");
|
||||||
|
|
||||||
function executeNote(note, apiParams) {
|
function executeNote(note, apiParams) {
|
||||||
if (!note.isJavaScript() || note.getScriptEnv() !== 'backend' || !note.isContentAvailable) {
|
if (!note.isJavaScript() || note.getScriptEnv() !== 'backend' || !note.isContentAvailable()) {
|
||||||
log.info(`Cannot execute note ${note.noteId} "${note.title}", note must be of type "Code: JS frontend"`);
|
log.info(`Cannot execute note ${note.noteId} "${note.title}", note must be of type "Code: JS frontend"`);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -105,7 +105,7 @@ function getScriptBundleForFrontend(note) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getScriptBundle(note, root = true, scriptEnv = null, includedNoteIds = [], backendOverrideContent = null) {
|
function getScriptBundle(note, root = true, scriptEnv = null, includedNoteIds = [], backendOverrideContent = null) {
|
||||||
if (!note.isContentAvailable) {
|
if (!note.isContentAvailable()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ class AncestorExp extends Expression {
|
|||||||
return new NoteSet([]);
|
return new NoteSet([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const subTreeNoteSet = new NoteSet(ancestorNote.subtreeNotes).intersection(inputNoteSet);
|
const subTreeNoteSet = new NoteSet(ancestorNote.getSubtreeNotes()).intersection(inputNoteSet);
|
||||||
|
|
||||||
if (!this.ancestorDepthComparator) {
|
if (!this.ancestorDepthComparator) {
|
||||||
return subTreeNoteSet;
|
return subTreeNoteSet;
|
||||||
|
@ -25,10 +25,10 @@ class AttributeExistsExp extends Expression {
|
|||||||
|
|
||||||
if (inputNoteSet.hasNoteId(note.noteId)) {
|
if (inputNoteSet.hasNoteId(note.noteId)) {
|
||||||
if (attr.isInheritable) {
|
if (attr.isInheritable) {
|
||||||
resultNoteSet.addAll(note.subtreeNotesIncludingTemplated);
|
resultNoteSet.addAll(note.getSubtreeNotesIncludingTemplated());
|
||||||
}
|
}
|
||||||
else if (note.isTemplate) {
|
else if (note.isTemplate()) {
|
||||||
resultNoteSet.addAll(note.templatedNotes);
|
resultNoteSet.addAll(note.getTemplatedNotes());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
resultNoteSet.add(note);
|
resultNoteSet.add(note);
|
||||||
|
@ -18,7 +18,7 @@ class DescendantOfExp extends Expression {
|
|||||||
const subTreeNoteSet = new NoteSet();
|
const subTreeNoteSet = new NoteSet();
|
||||||
|
|
||||||
for (const note of subResNoteSet.notes) {
|
for (const note of subResNoteSet.notes) {
|
||||||
subTreeNoteSet.addAll(note.subtreeNotes);
|
subTreeNoteSet.addAll(note.getSubtreeNotes());
|
||||||
}
|
}
|
||||||
|
|
||||||
return inputNoteSet.intersection(subTreeNoteSet);
|
return inputNoteSet.intersection(subTreeNoteSet);
|
||||||
|
@ -23,10 +23,10 @@ class LabelComparisonExp extends Expression {
|
|||||||
|
|
||||||
if (inputNoteSet.hasNoteId(note.noteId) && this.comparator(value)) {
|
if (inputNoteSet.hasNoteId(note.noteId) && this.comparator(value)) {
|
||||||
if (attr.isInheritable) {
|
if (attr.isInheritable) {
|
||||||
resultNoteSet.addAll(note.subtreeNotesIncludingTemplated);
|
resultNoteSet.addAll(note.getSubtreeNotesIncludingTemplated());
|
||||||
}
|
}
|
||||||
else if (note.isTemplate) {
|
else if (note.isTemplate()) {
|
||||||
resultNoteSet.addAll(note.templatedNotes);
|
resultNoteSet.addAll(note.getTemplatedNotes());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
resultNoteSet.add(note);
|
resultNoteSet.add(note);
|
||||||
|
@ -129,7 +129,7 @@ class BeccaFlatTextExp extends Expression {
|
|||||||
|
|
||||||
for (const note of noteSet.notes) {
|
for (const note of noteSet.notes) {
|
||||||
for (const token of this.tokens) {
|
for (const token of this.tokens) {
|
||||||
if (note.flatText.includes(token)) {
|
if (note.getFlatText().includes(token)) {
|
||||||
candidateNotes.push(note);
|
candidateNotes.push(note);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,9 @@ class RelationWhereExp extends Expression {
|
|||||||
|
|
||||||
if (subResNoteSet.hasNote(attr.targetNote)) {
|
if (subResNoteSet.hasNote(attr.targetNote)) {
|
||||||
if (attr.isInheritable) {
|
if (attr.isInheritable) {
|
||||||
candidateNoteSet.addAll(note.subtreeNotesIncludingTemplated);
|
candidateNoteSet.addAll(note.getSubtreeNotesIncludingTemplated());
|
||||||
} else if (note.isTemplate) {
|
} else if (note.isTemplate()) {
|
||||||
candidateNoteSet.addAll(note.templatedNotes);
|
candidateNoteSet.addAll(note.getTemplatedNotes());
|
||||||
} else {
|
} else {
|
||||||
candidateNoteSet.add(note);
|
candidateNoteSet.add(note);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user