2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<!DOCTYPE html>  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< html  lang = "en" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< head >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < meta  charset = "utf-8" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < title > JSDoc: Source: entities/note_short.js< / title > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < script  src = "scripts/prettify/prettify.js" >  < / script > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < script  src = "scripts/prettify/lang-css.js" >  < / script > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    <!-- [if lt IE 9]>
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < script  src = "//html5shiv.googlecode.com/svn/trunk/html5.js" > < / script > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    <![endif]--> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < link  type = "text/css"  rel = "stylesheet"  href = "styles/prettify-tomorrow.css" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < link  type = "text/css"  rel = "stylesheet"  href = "styles/jsdoc-default.css" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / head >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< body >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  id = "main" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < h1  class = "page-title" > Source: entities/note_short.js< / h1 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < section > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < article > 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            < pre  class = "prettyprint source linenums" > < code > import server from '../services/server.js';
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import Attribute from './attribute.js';
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const LABEL = 'label';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const LABEL_DEFINITION = 'label-definition';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const RELATION = 'relation';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const RELATION_DEFINITION = 'relation-definition';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * This note's representation is used in note tree and is kept in TreeCache.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class NoteShort {
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {TreeCache} treeCache
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {Object.< string, Object>} row
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    constructor(treeCache, row) {
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        this.treeCache = treeCache;
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @type {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.attributes = [];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @type {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.targetRelations = [];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @type {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.parents = [];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @type {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.children = [];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @type {Object.< string, string>} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.parentToBranch = {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @type {Object.< string, string>} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.childToBranch = {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.update(row);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    update(row) {
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        /** @param {string} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.noteId = row.noteId;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @param {string} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.title = row.title;
							 
						 
					
						
							
								
									
										
										
										
											2019-11-16 19:07:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        /** @param {int} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.contentLength = row.contentLength;
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        /** @param {boolean} */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-08 11:41:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        this.isProtected = !!row.isProtected;
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        /** @param {string} one of 'text', 'code', 'file' or 'render' */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.type = row.type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @param {string} content-type, e.g. "application/json" */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.mime = row.mime;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        /** @param {boolean} */
							 
						 
					
						
							
								
									
										
										
										
											2019-11-05 21:26:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        this.isDeleted = row.isDeleted;
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    addParent(parentNoteId, branchId) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if (!this.parents.includes(parentNoteId)) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            this.parents.push(parentNoteId);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.parentToBranch[parentNoteId] = branchId;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    addChild(childNoteId, branchId) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if (!this.children.includes(childNoteId)) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            this.children.push(childNoteId);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.childToBranch[childNoteId] = branchId;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const branchIdPos = {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for (const branchId of Object.values(this.childToBranch)) {
							 
						 
					
						
							
								
									
										
										
										
											2019-11-05 21:26:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            branchIdPos[branchId] = this.treeCache.getBranch(branchId).notePosition;
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this.children.sort((a, b) => branchIdPos[this.childToBranch[a]] <  branchIdPos[this.childToBranch[b]] ? -1 : 1);
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** @returns {boolean} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    isJson() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.mime === "application/json";
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-09-07 22:03:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    async getContent() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // we're not caching content since these objects are in treeCache and as such pretty long lived
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const note = await server.get("notes/" + this.noteId);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return note.content;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async getJsonContent() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const content = await this.getContent();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        try {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return JSON.parse(content);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        catch (e) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            console.log(`Cannot parse content of note ${this.noteId}: `, e.message);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return null;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-08 11:41:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** @returns {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getBranchIds() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return Object.values(this.parentToBranch);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** @returns {Branch[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getBranches() {
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const branchIds = Object.values(this.parentToBranch);
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.treeCache.getBranches(branchIds);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** @returns {boolean} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hasChildren() {
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return this.children.length > 0;
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** @returns {Branch[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getChildBranches() {
							 
						 
					
						
							
								
									
										
										
										
											2019-11-05 21:26:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // don't use Object.values() to guarantee order
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const branchIds = this.children.map(childNoteId => this.childToBranch[childNoteId]);
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return this.treeCache.getBranches(branchIds);
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** @returns {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getParentNoteIds() {
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return this.parents;
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** @returns {NoteShort[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getParentNotes() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.treeCache.getNotesFromCache(this.parents);
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** @returns {string[]} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getChildNoteIds() {
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return this.children;
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** @returns {Promise< NoteShort[]>} */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async getChildNotes() {
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 10:00:26 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return await this.treeCache.getNotes(this.children);
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [type] - (optional) attribute type to filter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - (optional) attribute name to filter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's attributes, including inherited ones
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedAttributes(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attrs = this.attributes
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            .map(attributeId => this.treeCache.attributes[attributeId])
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            .filter(attr => !!attr);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.__filterAttrs(attrs, type, name)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
									
										
										
										
											2019-12-03 22:53:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @param {string} [type] - (optional) attribute type to filter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - (optional) attribute name to filter
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's attributes, including inherited ones
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getAttributes(type, name) {
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const ownedAttributes = this.getOwnedAttributes();
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const attrArrs = [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ownedAttributes
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for (const templateAttr of ownedAttributes.filter(oa => oa.type === 'relation' & &  oa.name === 'template')) {
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const templateNote = this.treeCache.getNoteFromCache(templateAttr.value);
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if (templateNote) {
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                attrArrs.push(templateNote.getAttributes());
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }
							 
						 
					
						
							
								
									
										
										
										
											2019-12-03 22:53:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if (this.noteId !== 'root') {
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            for (const parentNote of this.getParentNotes()) {
							 
						 
					
						
							
								
									
										
										
										
											2020-04-07 19:19:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                // these virtual parent-child relationships are also loaded into frontend tree cache
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if (parentNote.type !== 'search') {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    attrArrs.push(parentNote.getInheritableAttributes());
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attributes = attrArrs.flat();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.__filterAttrs(attributes, type, name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    __filterAttrs(attributes, type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if (type & &  name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return attributes.filter(attr => attr.type === type & &  attr.name === name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } else if (type) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return attributes.filter(attr => attr.type === type);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } else if (name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return attributes.filter(attr => attr.name === name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } else {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return attributes;
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getInheritableAttributes() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attrs = this.getAttributes();
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return attrs.filter(attr => attr.isInheritable);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - label name to filter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's labels (attributes with type label), including inherited ones
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedLabels(name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.getOwnedAttributes(LABEL, name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - label name to filter
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's labels (attributes with type label), including inherited ones
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getLabels(name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.getAttributes(LABEL, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - label name to filter
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's label definitions, including inherited ones
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getLabelDefinitions(name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.getAttributes(LABEL_DEFINITION, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - relation name to filter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's relations (attributes with type relation), including inherited ones
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedRelations(name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.getOwnedAttributes(RELATION, name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - relation name to filter
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's relations (attributes with type relation), including inherited ones
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getRelations(name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.getAttributes(RELATION, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - relation name to filter
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute[]} all note's relation definitions including inherited ones
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getRelationDefinitions(name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.getAttributes(RELATION_DEFINITION, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} type - attribute type (label, relation, etc.)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - attribute name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {boolean} true if note has an attribute with given type and name (including inherited)
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    hasAttribute(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return !!this.getAttribute(type, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} type - attribute type (label, relation, etc.)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - attribute name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {boolean} true if note has an attribute with given type and name (including inherited)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hasOwnedAttribute(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return !!this.getOwnedAttribute(type, name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} type - attribute type (label, relation, etc.)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - attribute name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @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.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedAttribute(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attributes = this.getOwnedAttributes(type, name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return attributes.length > 0 ? attributes[0] : 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} type - attribute type (label, relation, etc.)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - attribute name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @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.
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getAttribute(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attributes = this.getAttributes(type, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return attributes.length > 0 ? attributes[0] : 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} type - attribute type (label, relation, etc.)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - attribute name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {string} attribute value of given type and name or null if no such attribute exists.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedAttributeValue(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attr = this.getOwnedAttribute(type, name);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return attr ? attr.value : null;
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} type - attribute type (label, relation, etc.)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - attribute name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {string} attribute value of given type and name or null if no such attribute exists.
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getAttributeValue(type, name) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const attr = this.getAttribute(type, name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return attr ? attr.value : null;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - label name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {boolean} true if label exists (excluding inherited)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hasOwnedLabel(name) { return this.hasOwnedAttribute(LABEL, name); }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - label name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {boolean} true if label exists (including inherited)
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    hasLabel(name) { return this.hasAttribute(LABEL, name); }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - relation name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {boolean} true if relation exists (excluding inherited)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    hasOwnedRelation(name) { return this.hasOwnedAttribute(RELATION, name); }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - relation name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {boolean} true if relation exists (including inherited)
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    hasRelation(name) { return this.hasAttribute(RELATION, name); }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - label name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {Attribute} label if it exists, null otherwise
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedLabel(name) { return this.getOwnedAttribute(LABEL, name); }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - label name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute} label if it exists, null otherwise
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getLabel(name) { return this.getAttribute(LABEL, name); }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - relation name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {Attribute} relation if it exists, null otherwise
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedRelation(name) { return this.getOwnedAttribute(RELATION, name); }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - relation name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute} relation if it exists, null otherwise
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getRelation(name) { return this.getAttribute(RELATION, name); }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - label name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {string} label value if label exists, null otherwise
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedLabelValue(name) { return this.getOwnedAttributeValue(LABEL, name); }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - label name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {string} label value if label exists, null otherwise
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getLabelValue(name) { return this.getAttributeValue(LABEL, name); }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - relation name
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {string} relation value if relation exists, null otherwise
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getOwnedRelationValue(name) { return this.getOwnedAttributeValue(RELATION, name); }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name - relation name
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {string} relation value if relation exists, null otherwise
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getRelationValue(name) { return this.getAttributeValue(RELATION, name); }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} name
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Promise< NoteShort>|null} target note of the relation or null (if target is empty or note was not found)
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async getRelationTarget(name) {
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const targets = await this.getRelationTargets(name);
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return targets.length > 0 ? targets[0] : null;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @param {string} [name] - relation name to filter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * @returns {Promise< NoteShort[]>}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async getRelationTargets(name) {
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const relations = this.getRelations(name);
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const targets = [];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for (const relation of relations) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            targets.push(await this.treeCache.getNote(relation.value));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return targets;
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * Clear note's attributes cache to force fresh reload for next attribute request.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * Cache is note instance scoped.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    invalidateAttributeCache() {
							 
						 
					
						
							
								
									
										
										
										
											2019-12-03 22:53:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        this.__attributeCache = null;
							 
						 
					
						
							
								
									
										
										
										
											2018-12-22 22:28:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * Get relations which target this note
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * @returns {Attribute[]}
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     */
							 
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getTargetRelations() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return this.targetRelations
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            .map(attributeId => this.treeCache.attributes[attributeId]);
							 
						 
					
						
							
								
									
										
										
										
											2019-08-20 21:40:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    get toString() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return `Note(noteId=${this.noteId}, title=${this.title})`;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get dto() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const dto = Object.assign({}, this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        delete dto.treeCache;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return dto;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
									
										
										
										
											2020-03-08 11:41:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-19 09:18:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getCssClass() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const labels = this.getLabels('cssClass');
							 
						 
					
						
							
								
									
										
										
										
											2020-03-08 11:41:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return labels.map(l => l.value).join(' ');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export default NoteShort;< / code > < / pre > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / article > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / section > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< nav >  
						 
					
						
							
								
									
										
										
										
											2020-02-02 11:44:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < h2 > < a  href = "index.html" > Home< / a > < / h2 > < h3 > Classes< / h3 > < ul > < li > < a  href = "Branch.html" > Branch< / a > < / li > < li > < a  href = "FrontendScriptApi.html" > FrontendScriptApi< / a > < / li > < li > < a  href = "NoteComplement.html" > NoteComplement< / a > < / li > < li > < a  href = "NoteShort.html" > NoteShort< / a > < / li > < / ul > < h3 > < a  href = "global.html" > Global< / a > < / h3 > 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / nav >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< br  class = "clear" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< footer >  
						 
					
						
							
								
									
										
										
										
											2020-04-07 19:19:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    Documentation generated by < a  href = "https://github.com/jsdoc/jsdoc" > JSDoc 3.6.4< / a > 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 20:44:35 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / footer >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< script >  prettyPrint ( ) ;  < / script >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< script  src = "scripts/linenumber.js" >  < / script >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / body >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / html >