diff --git a/docs/frontend_api/NoteShort.html b/docs/frontend_api/NoteShort.html index 3fb72f5b2..19c7b6425 100644 --- a/docs/frontend_api/NoteShort.html +++ b/docs/frontend_api/NoteShort.html @@ -1039,7 +1039,7 @@ -

(async) getAttribute(type, name) → {Promise.<Attribute>}

+

getAttribute(type, name) → {Attribute}

@@ -1199,7 +1199,7 @@
-Promise.<Attribute> +Attribute
@@ -1217,7 +1217,7 @@ -

(async) getAttributes(typeopt, nameopt) → {Promise.<Array.<Attribute>>}

+

getAttributes(typeopt, nameopt) → {Array.<Attribute>}

@@ -1399,7 +1399,7 @@
-Promise.<Array.<Attribute>> +Array.<Attribute>
@@ -1417,7 +1417,7 @@ -

(async) getAttributeValue(type, name) → {Promise.<string>}

+

getAttributeValue(type, name) → {string}

@@ -1577,7 +1577,7 @@
-Promise.<string> +string
@@ -1595,7 +1595,7 @@ -

(async) getBranches() → {Promise.<Array.<Branch>>}

+

getBranches() → {Array.<Branch>}

@@ -1679,7 +1679,7 @@
-Promise.<Array.<Branch>> +Array.<Branch>
@@ -1799,7 +1799,7 @@ -

(async) getChildBranches() → {Promise.<Array.<Branch>>}

+

getChildBranches() → {Array.<Branch>}

@@ -1883,7 +1883,7 @@
-Promise.<Array.<Branch>> +Array.<Branch>
@@ -2105,7 +2105,7 @@ -

(async) getLabel(name) → {Promise.<Attribute>}

+

getLabel(name) → {Attribute}

@@ -2242,7 +2242,7 @@
-Promise.<Attribute> +Attribute
@@ -2260,7 +2260,7 @@ -

(async) getLabelDefinitions(nameopt) → {Promise.<Array.<Attribute>>}

+

getLabelDefinitions(nameopt) → {Array.<Attribute>}

@@ -2409,7 +2409,7 @@
-Promise.<Array.<Attribute>> +Array.<Attribute>
@@ -2427,7 +2427,7 @@ -

(async) getLabels(nameopt) → {Promise.<Array.<Attribute>>}

+

getLabels(nameopt) → {Array.<Attribute>}

@@ -2576,7 +2576,7 @@
-Promise.<Array.<Attribute>> +Array.<Attribute>
@@ -2594,7 +2594,7 @@ -

(async) getLabelValue(name) → {Promise.<string>}

+

getLabelValue(name) → {string}

@@ -2731,7 +2731,7 @@
-Promise.<string> +string
@@ -4361,7 +4361,7 @@ -

(async) getParentNotes() → {Promise.<Array.<NoteShort>>}

+

getParentNotes() → {Array.<NoteShort>}

@@ -4445,7 +4445,7 @@
-Promise.<Array.<NoteShort>> +Array.<NoteShort>
@@ -4463,7 +4463,7 @@ -

(async) getRelation(name) → {Promise.<Attribute>}

+

getRelation(name) → {Attribute}

@@ -4600,7 +4600,7 @@
-Promise.<Attribute> +Attribute
@@ -4618,7 +4618,7 @@ -

(async) getRelationDefinitions(nameopt) → {Promise.<Array.<Attribute>>}

+

getRelationDefinitions(nameopt) → {Array.<Attribute>}

@@ -4767,7 +4767,7 @@
-Promise.<Array.<Attribute>> +Array.<Attribute>
@@ -4785,7 +4785,7 @@ -

(async) getRelations(nameopt) → {Promise.<Array.<Attribute>>}

+

getRelations(nameopt) → {Array.<Attribute>}

@@ -4934,7 +4934,7 @@
-Promise.<Array.<Attribute>> +Array.<Attribute>
@@ -5273,7 +5273,7 @@ -

(async) getRelationValue(name) → {Promise.<string>}

+

getRelationValue(name) → {string}

@@ -5410,7 +5410,7 @@
-Promise.<string> +string
@@ -5534,7 +5534,7 @@ -

(async) hasAttribute(type, name) → {Promise.<boolean>}

+

hasAttribute(type, name) → {boolean}

@@ -5694,7 +5694,7 @@
-Promise.<boolean> +boolean
@@ -5814,7 +5814,7 @@ -

(async) hasLabel(name) → {Promise.<boolean>}

+

hasLabel(name) → {boolean}

@@ -5951,7 +5951,7 @@
-Promise.<boolean> +boolean
@@ -6457,7 +6457,7 @@ -

(async) hasRelation(name) → {Promise.<boolean>}

+

hasRelation(name) → {boolean}

@@ -6594,7 +6594,7 @@
-Promise.<boolean> +boolean
diff --git a/docs/frontend_api/entities_note_short.js.html b/docs/frontend_api/entities_note_short.js.html index 772230b86..bffc5366b 100644 --- a/docs/frontend_api/entities_note_short.js.html +++ b/docs/frontend_api/entities_note_short.js.html @@ -136,8 +136,8 @@ class NoteShort { return Object.values(this.parentToBranch); } - /** @returns {Promise<Branch[]>} */ - async getBranches() { + /** @returns {Branch[]} */ + getBranches() { const branchIds = Object.values(this.parentToBranch); return this.treeCache.getBranches(branchIds); @@ -148,8 +148,8 @@ class NoteShort { return this.children.length > 0; } - /** @returns {Promise<Branch[]>} */ - async getChildBranches() { + /** @returns {Branch[]} */ + getChildBranches() { // don't use Object.values() to guarantee order const branchIds = this.children.map(childNoteId => this.childToBranch[childNoteId]); @@ -161,9 +161,9 @@ class NoteShort { return this.parents; } - /** @returns {Promise<NoteShort[]>} */ - async getParentNotes() { - return await this.treeCache.getNotes(this.parents); + /** @returns {NoteShort[]} */ + getParentNotes() { + return this.treeCache.getNotesFromCache(this.parents); } /** @returns {string[]} */ @@ -192,9 +192,9 @@ class NoteShort { /** * @param {string} [type] - (optional) attribute type to filter * @param {string} [name] - (optional) attribute name to filter - * @returns {Promise<Attribute[]>} all note's attributes, including inherited ones + * @returns {Attribute[]} all note's attributes, including inherited ones */ - async getAttributes(type, name) { + getAttributes(type, name) { const ownedAttributes = this.getOwnedAttributes(); const attrArrs = [ @@ -202,16 +202,16 @@ class NoteShort { ]; for (const templateAttr of ownedAttributes.filter(oa => oa.type === 'relation' && oa.name === 'template')) { - const templateNote = await this.treeCache.getNote(templateAttr.value); + const templateNote = this.treeCache.getNoteFromCache(templateAttr.value); if (templateNote) { - attrArrs.push(await templateNote.getAttributes()); + attrArrs.push(templateNote.getAttributes()); } } if (this.noteId !== 'root') { - for (const parentNote of await this.getParentNotes()) { - attrArrs.push(await parentNote.getInheritableAttributes()); + for (const parentNote of this.getParentNotes()) { + attrArrs.push(parentNote.getInheritableAttributes()); } } @@ -232,8 +232,8 @@ class NoteShort { } } - async getInheritableAttributes() { - const attrs = await this.getAttributes(); + getInheritableAttributes() { + const attrs = this.getAttributes(); return attrs.filter(attr => attr.isInheritable); } @@ -248,18 +248,18 @@ class NoteShort { /** * @param {string} [name] - label name to filter - * @returns {Promise<Attribute[]>} all note's labels (attributes with type label), including inherited ones + * @returns {Attribute[]} all note's labels (attributes with type label), including inherited ones */ - async getLabels(name) { - return await this.getAttributes(LABEL, name); + getLabels(name) { + return this.getAttributes(LABEL, name); } /** * @param {string} [name] - label name to filter - * @returns {Promise<Attribute[]>} all note's label definitions, including inherited ones + * @returns {Attribute[]} all note's label definitions, including inherited ones */ - async getLabelDefinitions(name) { - return await this.getAttributes(LABEL_DEFINITION, name); + getLabelDefinitions(name) { + return this.getAttributes(LABEL_DEFINITION, name); } /** @@ -272,27 +272,27 @@ class NoteShort { /** * @param {string} [name] - relation name to filter - * @returns {Promise<Attribute[]>} all note's relations (attributes with type relation), including inherited ones + * @returns {Attribute[]} all note's relations (attributes with type relation), including inherited ones */ - async getRelations(name) { - return await this.getAttributes(RELATION, name); + getRelations(name) { + return this.getAttributes(RELATION, name); } /** * @param {string} [name] - relation name to filter - * @returns {Promise<Attribute[]>} all note's relation definitions including inherited ones + * @returns {Attribute[]} all note's relation definitions including inherited ones */ - async getRelationDefinitions(name) { - return await this.getAttributes(RELATION_DEFINITION, name); + getRelationDefinitions(name) { + return this.getAttributes(RELATION_DEFINITION, name); } /** * @param {string} type - attribute type (label, relation, etc.) * @param {string} name - attribute name - * @returns {Promise<boolean>} true if note has an attribute with given type and name (including inherited) + * @returns {boolean} true if note has an attribute with given type and name (including inherited) */ - async hasAttribute(type, name) { - return !!await this.getAttribute(type, name); + hasAttribute(type, name) { + return !!this.getAttribute(type, name); } /** @@ -318,10 +318,10 @@ class NoteShort { /** * @param {string} type - attribute type (label, relation, etc.) * @param {string} name - attribute name - * @returns {Promise<Attribute>} attribute of given type and name. If there's more such attributes, first is returned. Returns null if there's no such attribute belonging to this note. + * @returns {Attribute} attribute of given type and name. If there's more such attributes, first is returned. Returns null if there's no such attribute belonging to this note. */ - async getAttribute(type, name) { - const attributes = await this.getAttributes(type, name); + getAttribute(type, name) { + const attributes = this.getAttributes(type, name); return attributes.length > 0 ? attributes[0] : 0; } @@ -340,10 +340,10 @@ class NoteShort { /** * @param {string} type - attribute type (label, relation, etc.) * @param {string} name - attribute name - * @returns {Promise<string>} attribute value of given type and name or null if no such attribute exists. + * @returns {string} attribute value of given type and name or null if no such attribute exists. */ - async getAttributeValue(type, name) { - const attr = await this.getAttribute(type, name); + getAttributeValue(type, name) { + const attr = this.getAttribute(type, name); return attr ? attr.value : null; } @@ -356,9 +356,9 @@ class NoteShort { /** * @param {string} name - label name - * @returns {Promise<boolean>} true if label exists (including inherited) + * @returns {boolean} true if label exists (including inherited) */ - async hasLabel(name) { return await this.hasAttribute(LABEL, name); } + hasLabel(name) { return this.hasAttribute(LABEL, name); } /** * @param {string} name - relation name @@ -368,9 +368,9 @@ class NoteShort { /** * @param {string} name - relation name - * @returns {Promise<boolean>} true if relation exists (including inherited) + * @returns {boolean} true if relation exists (including inherited) */ - async hasRelation(name) { return await this.hasAttribute(RELATION, name); } + hasRelation(name) { return this.hasAttribute(RELATION, name); } /** * @param {string} name - label name @@ -380,9 +380,9 @@ class NoteShort { /** * @param {string} name - label name - * @returns {Promise<Attribute>} label if it exists, null otherwise + * @returns {Attribute} label if it exists, null otherwise */ - async getLabel(name) { return await this.getAttribute(LABEL, name); } + getLabel(name) { return this.getAttribute(LABEL, name); } /** * @param {string} name - relation name @@ -392,9 +392,9 @@ class NoteShort { /** * @param {string} name - relation name - * @returns {Promise<Attribute>} relation if it exists, null otherwise + * @returns {Attribute} relation if it exists, null otherwise */ - async getRelation(name) { return await this.getAttribute(RELATION, name); } + getRelation(name) { return this.getAttribute(RELATION, name); } /** * @param {string} name - label name @@ -404,9 +404,9 @@ class NoteShort { /** * @param {string} name - label name - * @returns {Promise<string>} label value if label exists, null otherwise + * @returns {string} label value if label exists, null otherwise */ - async getLabelValue(name) { return await this.getAttributeValue(LABEL, name); } + getLabelValue(name) { return this.getAttributeValue(LABEL, name); } /** * @param {string} name - relation name @@ -416,9 +416,9 @@ class NoteShort { /** * @param {string} name - relation name - * @returns {Promise<string>} relation value if relation exists, null otherwise + * @returns {string} relation value if relation exists, null otherwise */ - async getRelationValue(name) { return await this.getAttributeValue(RELATION, name); } + getRelationValue(name) { return this.getAttributeValue(RELATION, name); } /** * @param {string} name @@ -435,7 +435,7 @@ class NoteShort { * @returns {Promise<NoteShort[]>} */ async getRelationTargets(name) { - const relations = await this.getRelations(name); + const relations = this.getRelations(name); const targets = []; for (const relation of relations) { @@ -474,8 +474,8 @@ class NoteShort { return dto; } - async getCssClass() { - const labels = await this.getLabels('cssClass'); + getCssClass() { + const labels = this.getLabels('cssClass'); return labels.map(l => l.value).join(' '); } } diff --git a/docs/frontend_api/services_frontend_script_api.js.html b/docs/frontend_api/services_frontend_script_api.js.html index a49e3f105..b026ce913 100644 --- a/docs/frontend_api/services_frontend_script_api.js.html +++ b/docs/frontend_api/services_frontend_script_api.js.html @@ -86,7 +86,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain await ws.waitForMaxKnownSyncId(); await appContext.tabManager.getActiveTabContext().setNote(notePath); - appContext.triggerCommand('focusAndSelectTitle'); + appContext.triggerEvent('focusAndSelectTitle'); }; /** @@ -310,7 +310,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain * @method * @returns {NoteShort} active note (loaded into right pane) */ - this.getActiveTabNote = appContext.tabManager.getActiveTabNote; + this.getActiveTabNote = () => appContext.tabManager.getActiveTabNote(); /** * See https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html for a documentation on the returned instance. @@ -324,7 +324,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain * @method * @returns {Promise<string|null>} returns note path of active note or null if there isn't active note */ - this.getActiveTabNotePath = appContext.tabManager.getActiveTabNotePath; + this.getActiveTabNotePath = () => appContext.tabManager.getActiveTabNotePath(); /** * @method diff --git a/src/public/javascripts/services/ws.js b/src/public/javascripts/services/ws.js index 321220c75..0fe4ce0b6 100644 --- a/src/public/javascripts/services/ws.js +++ b/src/public/javascripts/services/ws.js @@ -203,6 +203,25 @@ subscribeToMessages(message => { }); async function processSyncRows(syncRows) { + const missingNoteIds = []; + + syncRows.forEach(({entityName, entity}) => { + if (entityName === 'branches' && !(entity.parentNoteId in treeCache.notes)) { + missingNoteIds.push(entity.parentNoteId); + } + else if (entityName === 'attributes' + && entity.type === 'relation' + && entity.name === 'template' + && !(entity.noteId in treeCache.notes)) { + + missingNoteIds.push(entity.value); + } + }); + + if (missingNoteIds.length > 0) { + await treeCache.reloadNotes(missingNoteIds); + } + const loadResults = new LoadResults(treeCache); syncRows.filter(sync => sync.entityName === 'notes').forEach(sync => {