Trilium Frontend API
    Preparing search index...

    Class ViewPosition

    Position in the view tree. Position is represented by its parent node and an offset in this parent.

    In order to create a new position instance use the createPosition*() factory methods available in:

    • module:engine/view/view~EditingView
    • module:engine/view/downcastwriter~ViewDowncastWriter
    • module:engine/view/upcastwriter~ViewUpcastWriter

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    offset: number

    Position offset.

    Position parent.

    Accessors

    • get editableElement(): ViewEditableElement

      module:engine/view/editableelement~ViewEditableElement ViewEditableElement instance that contains this position, or null if position is not inside an editable element.

      Returns ViewEditableElement

    • get isAtEnd(): boolean

      Is true if position is at the end of its module:engine/view/position~ViewPosition#parent parent, false otherwise.

      Returns boolean

    • get isAtStart(): boolean

      Is true if position is at the beginning of its module:engine/view/position~ViewPosition#parent parent, false otherwise.

      Returns boolean

    • get nodeAfter(): ViewNode

      Node directly after the position. Equals null when there is no node after position or position is located inside text node.

      Returns ViewNode

    • get nodeBefore(): ViewNode

      Node directly before the position. Equals null when there is no node before position or position is located inside text node.

      Returns ViewNode

    Methods

    • Clones this position.

      Returns ViewPosition

    • Checks whether this position is before, after or in same position that other position. Two positions may be also different when they are located in separate roots.

      Parameters

      Returns ViewPositionRelation

    • Returns ancestors array of this position, that is this position's parent and it's ancestors.

      Returns (ViewDocumentFragment | ViewNode)[]

      Array with ancestors.

    • Gets the farthest position which matches the callback using module:engine/view/treewalker~ViewTreeWalker TreeWalker.

      For example:

      getLastMatchingPosition( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>
      getLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } ); // <p>foo[]</p> -> <p>{}foo</p>
      getLastMatchingPosition( value => false ); // Do not move the position.

      Parameters

      • skip: (value: ViewTreeWalkerValue) => boolean

        Callback function. Gets module:engine/view/treewalker~ViewTreeWalkerValue and should return true if the value should be skipped or false if not.

      • Optionaloptions: ViewTreeWalkerOptions

        Object with configuration options. See module:engine/view/treewalker~ViewTreeWalker.

      Returns ViewPosition

      The position after the last item which matches the skip callback test.

    • Returns a new instance of Position with offset incremented by shift value.

      Parameters

      • shift: number

        How position offset should get changed. Accepts negative values.

      Returns ViewPosition

      Shifted position.

    • Creates a module:engine/view/treewalker~ViewTreeWalker TreeWalker instance with this positions as a start position.

      Parameters

      • Optionaloptions: ViewTreeWalkerOptions

        Object with configuration options. See module:engine/view/treewalker~ViewTreeWalker

      Returns ViewTreeWalker

    • Checks whether this object is of type module:engine/view/node~ViewNode or its subclass.

      This method is useful when processing view objects that are of unknown type. For example, a function may return a module:engine/view/documentfragment~ViewDocumentFragment or a module:engine/view/node~ViewNode that can be either a text node or an element. This method can be used to check what kind of object is returned.

      someObject.is( 'element' ); // -> true if this is an element
      someObject.is( 'node' ); // -> true if this is a node (a text node or an element)
      someObject.is( 'documentFragment' ); // -> true if this is a document fragment

      Since this method is also available on a range of model objects, you can prefix the type of the object with model: or view: to check, for example, if this is the model's or view's element:

      viewElement.is( 'view:element' ); // -> true
      viewElement.is( 'model:element' ); // -> false

      By using this method it is also possible to check a name of an element:

      imgElement.is( 'element', 'img' ); // -> true
      imgElement.is( 'view:element', 'img' ); // -> same as above, but more precise

      Parameters

      • type: "node" | "view:node"

      Returns this is
          | ViewElement
          | ViewNode
          | ViewRootEditableElement
          | ViewText
          | ViewAttributeElement
          | ViewContainerElement
          | ViewEditableElement
          | ViewEmptyElement
          | ViewRawElement
          | ViewUIElement

      NODE

    • Checks whether this object is of type module:engine/view/element~ViewElement or its subclass.

      element.is( 'element' ); // -> true
      element.is( 'node' ); // -> true
      element.is( 'view:element' ); // -> true
      element.is( 'view:node' ); // -> true

      element.is( 'model:element' ); // -> false
      element.is( 'documentSelection' ); // -> false

      Assuming that the object being checked is an element, you can also check its module:engine/view/element~ViewElement#name name:

      element.is( 'element', 'img' ); // -> true if this is an <img> element
      text.is( 'element', 'img' ); -> false

      Parameters

      • type: "element" | "view:element"

      Returns this is
          | ViewElement
          | ViewRootEditableElement
          | ViewAttributeElement
          | ViewContainerElement
          | ViewEditableElement
          | ViewEmptyElement
          | ViewRawElement
          | ViewUIElement

      ELEMENT

    • Checks whether this object is of type module:engine/view/attributeelement~ViewAttributeElement.

      attributeElement.is( 'attributeElement' ); // -> true
      attributeElement.is( 'element' ); // -> true
      attributeElement.is( 'node' ); // -> true
      attributeElement.is( 'view:attributeElement' ); // -> true
      attributeElement.is( 'view:element' ); // -> true
      attributeElement.is( 'view:node' ); // -> true

      attributeElement.is( 'model:element' ); // -> false
      attributeElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is an attribute element, you can also check its module:engine/view/attributeelement~ViewAttributeElement#name name:

      attributeElement.is( 'element', 'b' ); // -> true if this is a bold element
      attributeElement.is( 'attributeElement', 'b' ); // -> same as above
      text.is( 'element', 'b' ); -> false

      Parameters

      • type: "attributeElement" | "view:attributeElement"

      Returns this is ViewAttributeElement

      ATTRIBUTE_ELEMENT

    • Checks whether this object is of type module:engine/view/containerelement~ViewContainerElement or its subclass.

      containerElement.is( 'containerElement' ); // -> true
      containerElement.is( 'element' ); // -> true
      containerElement.is( 'node' ); // -> true
      containerElement.is( 'view:containerElement' ); // -> true
      containerElement.is( 'view:element' ); // -> true
      containerElement.is( 'view:node' ); // -> true

      containerElement.is( 'model:element' ); // -> false
      containerElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is a container element, you can also check its module:engine/view/containerelement~ViewContainerElement#name name:

      containerElement.is( 'element', 'div' ); // -> true if this is a div container element
      containerElement.is( 'contaienrElement', 'div' ); // -> same as above
      text.is( 'element', 'div' ); -> false

      Parameters

      • type: "containerElement" | "view:containerElement"

      Returns this is ViewRootEditableElement | ViewContainerElement | ViewEditableElement

      CONTAINER_ELEMENT

    • Checks whether this object is of type module:engine/view/editableelement~ViewEditableElement or its subclass.

      editableElement.is( 'editableElement' ); // -> true
      editableElement.is( 'element' ); // -> true
      editableElement.is( 'node' ); // -> true
      editableElement.is( 'view:editableElement' ); // -> true
      editableElement.is( 'view:element' ); // -> true
      editableElement.is( 'view:node' ); // -> true

      editableElement.is( 'model:element' ); // -> false
      editableElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is an editbale element, you can also check its module:engine/view/editableelement~ViewEditableElement#name name:

      editableElement.is( 'element', 'div' ); // -> true if this is a div element
      editableElement.is( 'editableElement', 'div' ); // -> same as above
      text.is( 'element', 'div' ); -> false

      Parameters

      • type: "editableElement" | "view:editableElement"

      Returns this is ViewRootEditableElement | ViewEditableElement

      EDITABLE_ELEMENT

    • Checks whether this object is of type module:engine/view/emptyelement~ViewEmptyElement.

      emptyElement.is( 'emptyElement' ); // -> true
      emptyElement.is( 'element' ); // -> true
      emptyElement.is( 'node' ); // -> true
      emptyElement.is( 'view:emptyElement' ); // -> true
      emptyElement.is( 'view:element' ); // -> true
      emptyElement.is( 'view:node' ); // -> true

      emptyElement.is( 'model:element' ); // -> false
      emptyElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is an empty element, you can also check its module:engine/view/emptyelement~ViewEmptyElement#name name:

      emptyElement.is( 'element', 'img' ); // -> true if this is a img element
      emptyElement.is( 'emptyElement', 'img' ); // -> same as above
      text.is( 'element', 'img' ); -> false

      Parameters

      • type: "emptyElement" | "view:emptyElement"

      Returns this is ViewEmptyElement

      EMPTY_ELEMENT

    • Checks whether this object is of type module:engine/view/rawelement~ViewRawElement.

      rawElement.is( 'rawElement' ); // -> true
      rawElement.is( 'element' ); // -> true
      rawElement.is( 'node' ); // -> true
      rawElement.is( 'view:rawElement' ); // -> true
      rawElement.is( 'view:element' ); // -> true
      rawElement.is( 'view:node' ); // -> true

      rawElement.is( 'model:element' ); // -> false
      rawElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is a raw element, you can also check its module:engine/view/rawelement~ViewRawElement#name name:

      rawElement.is( 'img' ); // -> true if this is an img element
      rawElement.is( 'rawElement', 'img' ); // -> same as above
      text.is( 'img' ); -> false

      Parameters

      • type: "rawElement" | "view:rawElement"

      Returns this is ViewRawElement

      RAW_ELEMENT

    • Checks whether this object is of type module:engine/view/rooteditableelement~ViewRootEditableElement.

      rootEditableElement.is( 'rootElement' ); // -> true
      rootEditableElement.is( 'editableElement' ); // -> true
      rootEditableElement.is( 'element' ); // -> true
      rootEditableElement.is( 'node' ); // -> true
      rootEditableElement.is( 'view:editableElement' ); // -> true
      rootEditableElement.is( 'view:element' ); // -> true
      rootEditableElement.is( 'view:node' ); // -> true

      rootEditableElement.is( 'model:element' ); // -> false
      rootEditableElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is a root editable element, you can also check its module:engine/view/rooteditableelement~ViewRootEditableElement#name name:

      rootEditableElement.is( 'element', 'div' ); // -> true if this is a div root editable element
      rootEditableElement.is( 'rootElement', 'div' ); // -> same as above
      text.is( 'element', 'div' ); -> false

      Parameters

      • type: "rootElement" | "view:rootElement"

      Returns this is ViewRootEditableElement

      ROOT_ELEMENT

    • Checks whether this object is of type module:engine/view/uielement~ViewUIElement.

      uiElement.is( 'uiElement' ); // -> true
      uiElement.is( 'element' ); // -> true
      uiElement.is( 'node' ); // -> true
      uiElement.is( 'view:uiElement' ); // -> true
      uiElement.is( 'view:element' ); // -> true
      uiElement.is( 'view:node' ); // -> true

      uiElement.is( 'model:element' ); // -> false
      uiElement.is( 'documentFragment' ); // -> false

      Assuming that the object being checked is an ui element, you can also check its module:engine/view/uielement~ViewUIElement#name name:

      uiElement.is( 'element', 'span' ); // -> true if this is a span ui element
      uiElement.is( 'uiElement', 'span' ); // -> same as above
      text.is( 'element', 'span' ); -> false

      Parameters

      • type: "uiElement" | "view:uiElement"

      Returns this is ViewUIElement

      UI_ELEMENT

    • Checks whether this object is of type module:engine/view/text~ViewText.

      text.is( '$text' ); // -> true
      text.is( 'node' ); // -> true
      text.is( 'view:$text' ); // -> true
      text.is( 'view:node' ); // -> true

      text.is( 'model:$text' ); // -> false
      text.is( 'element' ); // -> false
      text.is( 'range' ); // -> false

      Parameters

      • type: "$text" | "view:$text"

      Returns this is ViewText

      TEXT

    • hecks whether this object is of type module:engine/view/documentfragment~ViewDocumentFragment.

      docFrag.is( 'documentFragment' ); // -> true
      docFrag.is( 'view:documentFragment' ); // -> true

      docFrag.is( 'model:documentFragment' ); // -> false
      docFrag.is( 'element' ); // -> false
      docFrag.is( 'node' ); // -> false

      Parameters

      • type: "documentFragment" | "view:documentFragment"

      Returns this is ViewDocumentFragment

      DOCUMENT_FRAGMENT

    • Checks whether this object is of type module:engine/view/textproxy~ViewTextProxy.

      textProxy.is( '$textProxy' ); // -> true
      textProxy.is( 'view:$textProxy' ); // -> true

      textProxy.is( 'model:$textProxy' ); // -> false
      textProxy.is( 'element' ); // -> false
      textProxy.is( 'range' ); // -> false

      Note: Until version 20.0.0 this method wasn't accepting '$textProxy' type. The legacy 'textProxy' type is still accepted for backward compatibility.

      Parameters

      • type: "$textProxy" | "view:$textProxy"

      Returns this is ViewTextProxy

      TEXT_PROXY

    • Checks whether this object is of type module:engine/view/position~ViewPosition.

      position.is( 'position' ); // -> true
      position.is( 'view:position' ); // -> true

      position.is( 'model:position' ); // -> false
      position.is( 'element' ); // -> false
      position.is( 'range' ); // -> false

      Parameters

      • type: "position" | "view:position"

      Returns this is ViewPosition

      POSITION

    • Checks whether this object is of type module:engine/view/range~ViewRange.

      range.is( 'range' ); // -> true
      range.is( 'view:range' ); // -> true

      range.is( 'model:range' ); // -> false
      range.is( 'element' ); // -> false
      range.is( 'selection' ); // -> false

      Parameters

      • type: "range" | "view:range"

      Returns this is ViewRange

      RANGE

    • Checks whether this object is of type module:engine/view/selection~ViewSelection or module:engine/view/documentselection~ViewDocumentSelection.

      selection.is( 'selection' ); // -> true
      selection.is( 'view:selection' ); // -> true

      selection.is( 'model:selection' ); // -> false
      selection.is( 'element' ); // -> false
      selection.is( 'range' ); // -> false

      Parameters

      • type: "selection" | "view:selection"

      Returns this is ViewDocumentSelection | ViewSelection

      SELECTION

    • Checks whether this object is of type module:engine/view/documentselection~ViewDocumentSelection.

      `docSelection.is( 'selection' ); // -> true
      docSelection.is( 'documentSelection' ); // -> true
      docSelection.is( 'view:selection' ); // -> true
      docSelection.is( 'view:documentSelection' ); // -> true

      docSelection.is( 'model:documentSelection' ); // -> false
      docSelection.is( 'element' ); // -> false
      docSelection.is( 'node' ); // -> false

      Parameters

      • type: "documentSelection" | "view:documentSelection"

      Returns this is ViewDocumentSelection

      DOCUMENT_SELECTION

    • Checks whether the object is of type module:engine/view/element~ViewElement or its subclass and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "element" | "view:element"
      • name: N

      Returns this is (
          | ViewElement
          | ViewRootEditableElement
          | ViewAttributeElement
          | ViewContainerElement
          | ViewEditableElement
          | ViewEmptyElement
          | ViewRawElement
          | ViewUIElement
      ) & { name: N }

      ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/attributeelement~ViewAttributeElement and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "attributeElement" | "view:attributeElement"
      • name: N

      Returns this is ViewAttributeElement & { name: N }

      ATTRIBUTE_ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/containerelement~ViewContainerElement or its subclass and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "containerElement" | "view:containerElement"
      • name: N

      Returns this is (ViewRootEditableElement | ViewContainerElement | ViewEditableElement) & {
          name: N;
      }

      CONTAINER_ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/editableelement~ViewEditableElement or its subclass and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "editableElement" | "view:editableElement"
      • name: N

      Returns this is (ViewRootEditableElement | ViewEditableElement) & { name: N }

      EDITABLE_ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/emptyelement~ViewEmptyElement has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "emptyElement" | "view:emptyElement"
      • name: N

      Returns this is ViewEmptyElement & { name: N }

      EMPTY_ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/rawelement~ViewRawElement and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "rawElement" | "view:rawElement"
      • name: N

      Returns this is ViewRawElement & { name: N }

      RAW_ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/rooteditableelement~ViewRootEditableElement and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "rootElement" | "view:rootElement"
      • name: N

      Returns this is ViewRootEditableElement & { name: N }

      ROOT_ELEMENT_NAME

    • Checks whether the object is of type module:engine/view/uielement~ViewUIElement and has the specified name.

      Type Parameters

      • N extends string

      Parameters

      • type: "uiElement" | "view:uiElement"
      • name: N

      Returns this is ViewUIElement & { name: N }

      UI_ELEMENT_NAME

    • Checks whether this position is located after given position. When method returns false it does not mean that this position is before give one. Two positions may be located inside separate roots and in that situation this method will still return false.

      Parameters

      Returns boolean

      Returns true if this position is after given position.

      • module:engine/view/position~ViewPosition#isBefore
      • module:engine/view/position~ViewPosition#compareWith
    • Checks whether this position is located before given position. When method returns false it does not mean that this position is after give one. Two positions may be located inside separate roots and in that situation this method will still return false.

      Parameters

      Returns boolean

      Returns true if this position is before given position.

      • module:engine/view/position~ViewPosition#isAfter
      • module:engine/view/position~ViewPosition#compareWith
    • Checks whether this position equals given position.

      Parameters

      Returns boolean

      True if positions are same.

    • Converts ViewPosition instance to plain object and returns it.

      Returns unknown

      ViewPosition instance converted to plain object.

    • Internal

      Creates a new position after given view item.

      Parameters

      • item: ViewItem

        View item after which the position should be located.

      Returns ViewPosition

    • Internal

      Creates position at the given location. The location can be specified as:

      • a module:engine/view/position~ViewPosition position,
      • parent element and offset (offset defaults to 0),
      • parent element and 'end' (sets position at the end of that element),
      • module:engine/view/item~ViewItem view item and 'before' or 'after' (sets position before or after given view item).

      This method is a shortcut to other constructors such as:

      • module:engine/view/position~ViewPosition._createBefore,
      • module:engine/view/position~ViewPosition._createAfter.

      Parameters

      Returns ViewPosition

    • Internal

      Creates a new position before given view item.

      Parameters

      • item: ViewItem

        View item before which the position should be located.

      Returns ViewPosition