# Class: Note

## Note(row)

This represents a Note which is a central object in the Trilium Notes project.

## Constructor

#### new Note(row)

##### Parameters:

Name | Type | Description
--- | --- | ---
`row` |  | object containing database row from "notes" table

##### Properties:

Name | Type | Description
--- | --- | ---
`noteId` | string | primary key
`type` | string | one of "text", "code", "file" or "render"
`mime` | string | MIME type, e.g. "text/html"
`title` | string | note title
`isProtected` | boolean | true if note is protected
`isDeleted` | boolean | true if note is deleted
`dateCreated` | string | local date time (with offset)
`dateModified` | string | local date time (with offset)
`utcDateCreated` | string |
`utcDateModified` | string |

Source:
  - entities/note.js, line 36

### Extends

- Entity

### Methods

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`type` | string | attribute type (label, relation, etc.)
`name` | string | attribute name

Source:
  - entities/note.js, line 326

##### Returns:

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.

Type
  Promise.<Attribute>

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

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | attribute name to filter

Source:
  - entities/note.js, line 195

##### Returns:

all note's attributes, including inherited ones

Type
  Promise.<Array.<Attribute>>

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`type` | string | attribute type (label, relation, etc.)
`name` | string | attribute name

Source:
  - entities/note.js, line 337

##### Returns:

attribute value of given type and name or null if no such attribute exists.

Type
  Promise.<string>

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

Source:
  - entities/note.js, line 624

##### Returns:

Type
  Promise.<Array.<Branch>>

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

Source:
  - entities/note.js, line 652

##### Returns:

child branches of this note

Type
  Promise.<Array.<Branch>>

#### (async) getChildNotes() → {Promise.<Array.<Note>>}

Source:
  - entities/note.js, line 638

##### Returns:

child notes of this note

Type
  Promise.<Array.<Note>>

#### (async) getContent() → {Promise.<*>}

Source:
  - entities/note.js, line 66

##### Returns:

Type
  Promise.<*>

#### (async) getDescendantNoteIds() → {Promise.<Array.<string>>}

Source:
  - entities/note.js, line 513

##### Returns:

return list of all descendant noteIds of this note. Returning just noteIds because number of notes can be huge. Includes also this note's noteId

Type
  Promise.<Array.<string>>

#### (async) getDescendantNotesWithAttribute(type, name, valueopt) → {Promise.<Array.<Note>>}

Finds descendant notes with given attribute name and value. Only own attributes are considered, not inherited ones

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`type` | string |  | attribute type (label, relation, etc.)
`name` | string |  | attribute name
`value` | string | <optional> | attribute value

Source:
  - entities/note.js, line 536

##### Returns:

Type
  Promise.<Array.<Note>>

#### (async) getDescendantNotesWithLabel(name, valueopt) → {Promise.<Array.<Note>>}

Finds descendant notes with given label name and value. Only own labels are considered, not inherited ones

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string |  | label name
`value` | string | <optional> | label value

Source:
  - entities/note.js, line 574

##### Returns:

Type
  Promise.<Array.<Note>>

#### (async) getDescendantNotesWithRelation(name, valueopt) → {Promise.<Array.<Note>>}

Finds descendant notes with given relation name and value. Only own relations are considered, not inherited ones

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string |  | relation name
`value` | string | <optional> | relation value

Source:
  - entities/note.js, line 583

##### Returns:

Type
  Promise.<Array.<Note>>

#### (async) getJsonContent() → {Promise.<*>}

Source:
  - entities/note.js, line 90

##### Returns:

Type
  Promise.<*>

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string | label name

Source:
  - entities/note.js, line 424

##### Returns:

label if it exists, null otherwise

Type
  Promise.<Attribute>

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

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | label name to filter

Source:
  - entities/note.js, line 220

##### Returns:

all note's label definitions, including inherited ones

Type
  Promise.<Array.<Attribute>>

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

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | label name to filter

Source:
  - entities/note.js, line 212

##### Returns:

all note's labels (attributes with type label), including inherited ones

Type
  Promise.<Array.<Attribute>>

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string | label name

Source:
  - entities/note.js, line 436

##### Returns:

label value if label exists, null otherwise

Type
  Promise.<string>

#### (async) getLinks() → {Promise.<Array.<Link>>}

Get list of links coming out of this note.

Source:
  - entities/note.js, line 599

##### Returns:

Type
  Promise.<Array.<Link>>

#### (async) getLinksWithDeleted() → {Promise.<Array.<Link>>}

Return all links from this note, including deleted ones.

Source:
  - entities/note.js, line 617

##### Returns:

Type
  Promise.<Array.<Link>>

#### (async) getOwnedAttributes() → {Promise.<Array.<Attribute>>}

Source:
  - entities/note.js, line 180

##### Returns:

attributes belonging to this specific note (excludes inherited attributes)

Type
  Promise.<Array.<Attribute>>

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

Source:
  - entities/note.js, line 664

##### Returns:

parent notes of this note (note can have multiple parents because of cloning)

Type
  Promise.<Array.<Note>>

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string | relation name

Source:
  - entities/note.js, line 430

##### Returns:

relation if it exists, null otherwise

Type
  Promise.<Attribute>

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

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | relation name to filter

Source:
  - entities/note.js, line 236

##### Returns:

all note's relation definitions including inherited ones

Type
  Promise.<Array.<Attribute>>

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

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | relation name to filter

Source:
  - entities/note.js, line 228

##### Returns:

all note's relations (attributes with type relation), including inherited ones

Type
  Promise.<Array.<Attribute>>

#### (async) getRelationTarget(name) → {Promise.<Note>|null}

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string |

Source:
  - entities/note.js, line 448

##### Returns:

target note of the relation or null (if target is empty or note was not found)

Type
  Promise.<Note> | null

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string | relation name

Source:
  - entities/note.js, line 442

##### Returns:

relation value if relation exists, null otherwise

Type
  Promise.<string>

#### (async) getRevisions() → {Promise.<Array.<NoteRevision>>}

Returns note revisions of this note.

Source:
  - entities/note.js, line 590

##### Returns:

Type
  Promise.<Array.<NoteRevision>>

#### getScriptEnv() → {string}

Source:
  - entities/note.js, line 161

##### Returns:

JS script environment - either "frontend" or "backend"

Type
  string

#### (async) getTargetLinks() → {Promise.<Array.<Link>>}

Get list of links targetting this note.

Source:
  - entities/note.js, line 608

##### Returns:

Type
  Promise.<Array.<Link>>

#### (async) getTargetRelations() → {Promise.<Array.<Attribute>>}

Source:
  - entities/note.js, line 187

##### Returns:

relations targetting this specific note

Type
  Promise.<Array.<Attribute>>

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`type` | string | attribute type (label, relation, etc.)
`name` | string | attribute name

Source:
  - entities/note.js, line 317

##### Returns:

true if note has an attribute with given type and name (including inherited)

Type
  Promise.<boolean>

#### (async) hasChildren() → {boolean}

Source:
  - entities/note.js, line 631

##### Returns:

- true if note has children

Type
  boolean

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string | label name

Source:
  - entities/note.js, line 412

##### Returns:

true if label exists (including inherited)

Type
  Promise.<boolean>

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

##### Parameters:

Name | Type | Description
--- | --- | ---
`name` | string | relation name

Source:
  - entities/note.js, line 418

##### Returns:

true if relation exists (including inherited)

Type
  Promise.<boolean>

#### invalidateAttributeCache()

Clear note's attributes cache to force fresh reload for next attribute request. Cache is note instance scoped.

Source:
  - entities/note.js, line 244

#### isHtml() → {boolean}

Source:
  - entities/note.js, line 149

##### Returns:

true if this note is HTML

Type
  boolean

#### isJavaScript() → {boolean}

Source:
  - entities/note.js, line 141

##### Returns:

true if this note is JavaScript (code or attachment)

Type
  boolean

#### isJson() → {boolean}

Source:
  - entities/note.js, line 136

##### Returns:

true if this note is of application/json content type

Type
  boolean

#### isRoot() → {boolean}

Source:
  - entities/note.js, line 131

##### Returns:

true if this note is the root of the note tree. Root note has "root" noteId

Type
  boolean

#### isStringNote() → {boolean}

Source:
  - entities/note.js, line 154

##### Returns:

true if the note has string content (not binary)

Type
  boolean

#### (async) loadAttributesToCache() → {Promise.<void>}

Source:
  - entities/note.js, line 249

##### Returns:

Type
  Promise.<void>

#### (async) removeAttribute(type, name, valueopt) → {Promise.<void>}

Removes given attribute name-value pair if it exists.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`type` | string |  | attribute type (label, relation, etc.)
`name` | string |  | attribute name
`value` | string | <optional> | attribute value (optional)

Source:
  - entities/note.js, line 395

##### Returns:

Type
  Promise.<void>

#### (async) removeLabel(name, valueopt) → {Promise.<void>}

Remove label name-value pair, if it exists.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string |  | label name
`value` | string | <optional> | label value

Source:
  - entities/note.js, line 499

##### Returns:

Type
  Promise.<void>

#### (async) removeRelation(name, valueopt) → {Promise.<void>}

Remove relation name-value pair, if it exists.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string |  | relation name
`value` | string | <optional> | relation value (noteId)

Source:
  - entities/note.js, line 508

##### Returns:

Type
  Promise.<void>

#### (async) setAttribute(type, name, valueopt) → {Promise.<void>}

Creates given attribute name-value pair if it doesn't exist.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`type` | string |  | attribute type (label, relation, etc.)
`name` | string |  | attribute name
`value` | string | <optional> | attribute value (optional)

Source:
  - entities/note.js, line 369

##### Returns:

Type
  Promise.<void>

#### (async) setContent() → {Promise}

Source:
  - entities/note.js, line 97

##### Returns:

Type
  Promise

#### (async) setJsonContent() → {Promise}

Source:
  - entities/note.js, line 126

##### Returns:

Type
  Promise

#### (async) setLabel(name, valueopt) → {Promise.<void>}

Create label name-value pair if it doesn't exist yet.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string |  | label name
`value` | string | <optional> | label value

Source:
  - entities/note.js, line 481

##### Returns:

Type
  Promise.<void>

#### (async) setRelation(name, valueopt) → {Promise.<void>}

Create relation name-value pair if it doesn't exist yet.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string |  | relation name
`value` | string | <optional> | relation value (noteId)

Source:
  - entities/note.js, line 490

##### Returns:

Type
  Promise.<void>

#### (async) toggleAttribute(type, enabled, name, valueopt) → {Promise.<void>}

Based on enabled, attribute is either set or removed.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`type` | string |  | attribute type ('relation', 'label' etc.)
`enabled` | boolean |  | toggle On or Off
`name` | string |  | attribute name
`value` | string | <optional> | attribute value (optional)

Source:
  - entities/note.js, line 352

##### Returns:

Type
  Promise.<void>

#### (async) toggleLabel(enabled, name, valueopt) → {Promise.<void>}

Based on enabled, label is either set or removed.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`enabled` | boolean |  | toggle On or Off
`name` | string |  | label name
`value` | string | <optional> | label value (optional)

Source:
  - entities/note.js, line 462

##### Returns:

Type
  Promise.<void>

#### (async) toggleRelation(enabled, name, valueopt) → {Promise.<void>}

Based on enabled, relation is either set or removed.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`enabled` | boolean |  | toggle On or Off
`name` | string |  | relation name
`value` | string | <optional> | relation value (noteId)

Source:
  - entities/note.js, line 472

##### Returns:

Type
  Promise.<void>