Trilium Frontend API
    Preparing search index...

    Class EditingView

    Editor's view controller class. Its main responsibility is DOM - View management for editing purposes, to provide abstraction over the DOM structure and events and hide all browsers quirks.

    View controller renders view document to DOM whenever view structure changes. To determine when view can be rendered, all changes need to be done using the module:engine/view/view~EditingView#change method, using module:engine/view/downcastwriter~ViewDowncastWriter:

    view.change( writer => {
    writer.insert( position, writer.createText( 'foo' ) );
    } );

    View controller also register module:engine/view/observer/observer~Observer observers which observes changes on DOM and fire events on the module:engine/view/document~ViewDocument Document. Note that the following observers are added by the class constructor and are always available:

    • module:engine/view/observer/selectionobserver~SelectionObserver,
    • module:engine/view/observer/focusobserver~FocusObserver,
    • module:engine/view/observer/keyobserver~KeyObserver,
    • module:engine/view/observer/fakeselectionobserver~FakeSelectionObserver.
    • module:engine/view/observer/compositionobserver~CompositionObserver.
    • module:engine/view/observer/inputobserver~InputObserver.
    • module:engine/view/observer/arrowkeysobserver~ArrowKeysObserver.
    • module:engine/view/observer/tabobserver~TabObserver.

    This class also module:engine/view/view~EditingView#attachDomRoot binds the DOM and the view elements.

    If you do not need full a DOM - view management, and only want to transform a tree of view elements to a tree of DOM elements you do not need this controller. You can use the module:engine/view/domconverter~ViewDomConverter ViewDomConverter instead.

    Hierarchy (View Summary)

    Index

    Constructors

    • Parameters

      Returns EditingView

    Properties

    document: ViewDocument

    Instance of the module:engine/view/document~ViewDocument associated with this view controller.

    domConverter: ViewDomConverter

    Instance of the module:engine/view/domconverter~ViewDomConverter domConverter used by module:engine/view/view~EditingView#_renderer renderer and module:engine/view/observer/observer~Observer observers.

    domRoots: Map<string, HTMLElement>

    Roots of the DOM tree. Map on the HTMLElements with roots names as keys.

    hasDomSelection: boolean

    Informs whether the DOM selection is inside any of the DOM roots managed by the view.

    isRenderingInProgress: boolean

    Used to prevent calling #forceRender and #change during rendering view to the DOM.

    Methods

    • Internal

      Disables or enables rendering. If the flag is set to true then the rendering will be disabled. If the flag is set to false and if there was some change in the meantime, then the rendering action will be performed.

      Parameters

      • flag: boolean

        A flag indicates whether the rendering should be disabled.

      Returns void

    • Creates observer of the given type if not yet created, module:engine/view/observer/observer~Observer#enable enables it and module:engine/view/observer/observer~Observer#observe attaches to all existing and future #domRoots DOM roots.

      Note: Observers are recognized by their constructor (classes). A single observer will be instantiated and used only when registered for the first time. This means that features and other components can register a single observer multiple times without caring whether it has been already added or not.

      Parameters

      • ObserverConstructor: ObserverConstructor

        The constructor of an observer to add. Should create an instance inheriting from module:engine/view/observer/observer~Observer.

      Returns Observer

      Added observer instance.

    • Attaches a DOM root element to the view element and enable all observers on that element. Also module:engine/view/renderer~ViewRenderer#markToSync mark element to be synchronized with the view what means that all child nodes will be removed and replaced with content of the view root.

      This method also will change view element name as the same as tag name of given dom root. Name is always transformed to lower case.

      Note: Use #detachDomRoot detachDomRoot() to revert this action.

      Parameters

      • domRoot: HTMLElement

        DOM root element.

      • Optionalname: string

        Name of the root.

      Returns void

    • Binds #set observable properties to other objects implementing the module:utils/observablemixin~Observable interface.

      Read more in the {@glink framework/deep-dive/observables#property-bindings dedicated} guide covering the topic of property bindings with some additional examples.

      Consider two objects: a button and an associated command (both Observable).

      A simple property binding could be as follows:

      button.bind( 'isEnabled' ).to( command, 'isEnabled' );
      

      or even shorter:

      button.bind( 'isEnabled' ).to( command );
      

      which works in the following way:

      • button.isEnabled instantly equals command.isEnabled,
      • whenever command.isEnabled changes, button.isEnabled will immediately reflect its value.

      Note: To release the binding, use module:utils/observablemixin~Observable#unbind.

      You can also "rename" the property in the binding by specifying the new name in the to() chain:

      button.bind( 'isEnabled' ).to( command, 'isWorking' );
      

      It is possible to bind more than one property at a time to shorten the code:

      button.bind( 'isEnabled', 'value' ).to( command );
      

      which corresponds to:

      button.bind( 'isEnabled' ).to( command );
      button.bind( 'value' ).to( command );

      The binding can include more than one observable, combining multiple data sources in a custom callback:

      button.bind( 'isEnabled' ).to( command, 'isEnabled', ui, 'isVisible',
      ( isCommandEnabled, isUIVisible ) => isCommandEnabled && isUIVisible );

      Using a custom callback allows processing the value before passing it to the target property:

      button.bind( 'isEnabled' ).to( command, 'value', value => value === 'heading1' );
      

      It is also possible to bind to the same property in an array of observables. To bind a button to multiple commands (also Observables) so that each and every one of them must be enabled for the button to become enabled, use the following code:

      button.bind( 'isEnabled' ).toMany( [ commandA, commandB, commandC ], 'isEnabled',
      ( isAEnabled, isBEnabled, isCEnabled ) => isAEnabled && isBEnabled && isCEnabled );

      Type Parameters

      • K extends
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"

      Parameters

      • bindProperty: K

        Observable property that will be bound to other observable(s).

      Returns ObservableSingleBindChain<K, EditingView[K]>

      The bind chain with the to() and toMany() methods.

      SINGLE_BIND

    • Binds #set observable properties to other objects implementing the module:utils/observablemixin~Observable interface.

      Read more in the {@glink framework/deep-dive/observables#property-bindings dedicated} guide covering the topic of property bindings with some additional examples.

      Consider two objects: a button and an associated command (both Observable).

      A simple property binding could be as follows:

      button.bind( 'isEnabled' ).to( command, 'isEnabled' );
      

      or even shorter:

      button.bind( 'isEnabled' ).to( command );
      

      which works in the following way:

      • button.isEnabled instantly equals command.isEnabled,
      • whenever command.isEnabled changes, button.isEnabled will immediately reflect its value.

      Note: To release the binding, use module:utils/observablemixin~Observable#unbind.

      You can also "rename" the property in the binding by specifying the new name in the to() chain:

      button.bind( 'isEnabled' ).to( command, 'isWorking' );
      

      It is possible to bind more than one property at a time to shorten the code:

      button.bind( 'isEnabled', 'value' ).to( command );
      

      which corresponds to:

      button.bind( 'isEnabled' ).to( command );
      button.bind( 'value' ).to( command );

      The binding can include more than one observable, combining multiple data sources in a custom callback:

      button.bind( 'isEnabled' ).to( command, 'isEnabled', ui, 'isVisible',
      ( isCommandEnabled, isUIVisible ) => isCommandEnabled && isUIVisible );

      Using a custom callback allows processing the value before passing it to the target property:

      button.bind( 'isEnabled' ).to( command, 'value', value => value === 'heading1' );
      

      It is also possible to bind to the same property in an array of observables. To bind a button to multiple commands (also Observables) so that each and every one of them must be enabled for the button to become enabled, use the following code:

      button.bind( 'isEnabled' ).toMany( [ commandA, commandB, commandC ], 'isEnabled',
      ( isAEnabled, isBEnabled, isCEnabled ) => isAEnabled && isBEnabled && isCEnabled );

      Type Parameters

      • K1 extends
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"
      • K2 extends
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"

      Parameters

      • bindProperty1: K1

        Observable property that will be bound to other observable(s).

      • bindProperty2: K2

        Observable property that will be bound to other observable(s).

      Returns ObservableDualBindChain<K1, EditingView[K1], K2, EditingView[K2]>

      The bind chain with the to() and toMany() methods.

      DUAL_BIND

    • Binds #set observable properties to other objects implementing the module:utils/observablemixin~Observable interface.

      Read more in the {@glink framework/deep-dive/observables#property-bindings dedicated} guide covering the topic of property bindings with some additional examples.

      Consider two objects: a button and an associated command (both Observable).

      A simple property binding could be as follows:

      button.bind( 'isEnabled' ).to( command, 'isEnabled' );
      

      or even shorter:

      button.bind( 'isEnabled' ).to( command );
      

      which works in the following way:

      • button.isEnabled instantly equals command.isEnabled,
      • whenever command.isEnabled changes, button.isEnabled will immediately reflect its value.

      Note: To release the binding, use module:utils/observablemixin~Observable#unbind.

      You can also "rename" the property in the binding by specifying the new name in the to() chain:

      button.bind( 'isEnabled' ).to( command, 'isWorking' );
      

      It is possible to bind more than one property at a time to shorten the code:

      button.bind( 'isEnabled', 'value' ).to( command );
      

      which corresponds to:

      button.bind( 'isEnabled' ).to( command );
      button.bind( 'value' ).to( command );

      The binding can include more than one observable, combining multiple data sources in a custom callback:

      button.bind( 'isEnabled' ).to( command, 'isEnabled', ui, 'isVisible',
      ( isCommandEnabled, isUIVisible ) => isCommandEnabled && isUIVisible );

      Using a custom callback allows processing the value before passing it to the target property:

      button.bind( 'isEnabled' ).to( command, 'value', value => value === 'heading1' );
      

      It is also possible to bind to the same property in an array of observables. To bind a button to multiple commands (also Observables) so that each and every one of them must be enabled for the button to become enabled, use the following code:

      button.bind( 'isEnabled' ).toMany( [ commandA, commandB, commandC ], 'isEnabled',
      ( isAEnabled, isBEnabled, isCEnabled ) => isAEnabled && isBEnabled && isCEnabled );

      Parameters

      • ...bindProperties: (
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"
        )[]

        Observable properties that will be bound to other observable(s).

      Returns ObservableMultiBindChain

      The bind chain with the to() and toMany() methods.

      MANY_BIND

    • The change() method is the primary way of changing the view. You should use it to modify any node in the view tree. It makes sure that after all changes are made the view is rendered to the DOM (assuming that the view will be changed inside the callback). It prevents situations when the DOM is updated when the view state is not yet correct. It allows to nest calls one inside another and still performs a single rendering after all those changes are made. It also returns the return value of its callback.

      const text = view.change( writer => {
      const newText = writer.createText( 'foo' );
      writer.insert( position1, newText );

      view.change( writer => {
      writer.insert( position2, writer.createText( 'bar' ) );
      } );

      writer.remove( range );

      return newText;
      } );

      When the outermost change block is done and rendering to the DOM is over the module:engine/view/view~EditingView#event:render View#render event is fired.

      This method throws a applying-view-changes-on-rendering error when the change block is used after rendering to the DOM has started.

      Type Parameters

      • TReturn

      Parameters

      Returns TReturn

      Value returned by the callback.

    • Creates a new position after given view item.

      Parameters

      • item: ViewItem

        View item after which the position should be located.

      Returns ViewPosition

    • 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:

      • #createPositionBefore,
      • #createPositionAfter,

      Parameters

      Returns ViewPosition

    • Creates a new position before given view item.

      Parameters

      • item: ViewItem

        View item before which the position should be located.

      Returns ViewPosition

    • Creates a range spanning from start position to end position.

      Note: This factory method creates it's own module:engine/view/position~ViewPosition instances basing on passed values.

      Parameters

      • start: ViewPosition

        Start position.

      • Optionalend: ViewPosition

        End position. If not set, range will be collapsed at start position.

      Returns ViewRange

    • Creates a range inside an module:engine/view/element~ViewElement element which starts before the first child of that element and ends after the last child of that element.

      Parameters

      • element: ViewElement

        Element which is a parent for the range.

      Returns ViewRange

    • Creates a range that starts before given module:engine/view/item~ViewItem view item and ends after it.

      Parameters

      Returns ViewRange

    • Creates new module:engine/view/selection~ViewSelection instance.

      // Creates collapsed selection at the position of given item and offset.
      const paragraph = view.createContainerElement( 'paragraph' );
      const selection = view.createSelection( paragraph, offset );

      // Creates a range inside an {@link module:engine/view/element~ViewElement element} which starts before the
      // first child of that element and ends after the last child of that element.
      const selection = view.createSelection( paragraph, 'in' );

      // Creates a range on an {@link module:engine/view/item~ViewItem item} which starts before the item and ends
      // just after the item.
      const selection = view.createSelection( paragraph, 'on' );

      Selection's factory method allow passing additional options (backward, fake and label) as the last argument.

      // Creates backward selection.
      const selection = view.createSelection( paragraph, 'in', { backward: true } );

      Fake selection does not render as browser native selection over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to the user and selection over elements can be represented in other way, for example by applying proper CSS class.

      Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be properly handled by screen readers).

      // Creates fake selection with label.
      const selection = view.createSelection( element, 'in', { fake: true, label: 'foo' } );

      See also: #createSelection:SELECTABLE createSelection( selectable, options ).

      Parameters

      Returns ViewSelection

      NODE_OFFSET

    • Creates new module:engine/view/selection~ViewSelection instance.

      // Creates empty selection without ranges.
      const selection = view.createSelection();

      // Creates selection at the given range.
      const range = view.createRange( start, end );
      const selection = view.createSelection( range );

      // Creates selection at the given ranges
      const ranges = [ view.createRange( start1, end2 ), view.createRange( star2, end2 ) ];
      const selection = view.createSelection( ranges );

      // Creates selection from the other selection.
      const otherSelection = view.createSelection();
      const selection = view.createSelection( otherSelection );

      // Creates selection from the document selection.
      const selection = view.createSelection( editor.editing.view.document.selection );

      // Creates selection at the given position.
      const position = view.createPositionFromPath( root, path );
      const selection = view.createSelection( position );

      Selection's factory method allow passing additional options (backward, fake and label) as the last argument.

      // Creates backward selection.
      const selection = view.createSelection( range, { backward: true } );

      Fake selection does not render as browser native selection over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to the user and selection over elements can be represented in other way, for example by applying proper CSS class.

      Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be properly handled by screen readers).

      // Creates fake selection with label.
      const selection = view.createSelection( range, { fake: true, label: 'foo' } );

      See also: #createSelection:NODE_OFFSET createSelection( node, placeOrOffset, options ).

      Parameters

      Returns ViewSelection

      SELECTABLE

    • Turns the given methods of this object into event-based ones. This means that the new method will fire an event (named after the method) and the original action will be plugged as a listener to that event.

      Read more in the {@glink framework/deep-dive/observables#decorating-object-methods dedicated} guide covering the topic of decorating methods with some additional examples.

      Decorating the method does not change its behavior (it only adds an event), but it allows to modify it later on by listening to the method's event.

      For example, to cancel the method execution the event can be module:utils/eventinfo~EventInfo#stop stopped:

      class Foo extends ObservableMixin() {
      constructor() {
      super();
      this.decorate( 'method' );
      }

      method() {
      console.log( 'called!' );
      }
      }

      const foo = new Foo();
      foo.on( 'method', ( evt ) => {
      evt.stop();
      }, { priority: 'high' } );

      foo.method(); // Nothing is logged.

      Note: The high module:utils/priorities~PriorityString priority listener has been used to execute this particular callback before the one which calls the original method (which uses the "normal" priority).

      It is also possible to change the returned value:

      foo.on( 'method', ( evt ) => {
      evt.return = 'Foo!';
      } );

      foo.method(); // -> 'Foo'

      Finally, it is possible to access and modify the arguments the method is called with:

      method( a, b ) {
      console.log( `${ a }, ${ b }` );
      }

      // ...

      foo.on( 'method', ( evt, args ) => {
      args[ 0 ] = 3;

      console.log( args[ 1 ] ); // -> 2
      }, { priority: 'high' } );

      foo.method( 1, 2 ); // -> '3, 2'

      Parameters

      • methodName:
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"

        Name of the method to decorate.

      Returns void

    • Delegates selected events to another module:utils/emittermixin~Emitter. For instance:

      emitterA.delegate( 'eventX' ).to( emitterB );
      emitterA.delegate( 'eventX', 'eventY' ).to( emitterC );

      then eventX is delegated (fired by) emitterB and emitterC along with data:

      emitterA.fire( 'eventX', data );
      

      and eventY is delegated (fired by) emitterC along with data:

      emitterA.fire( 'eventY', data );
      

      Parameters

      • ...events: string[]

        Event names that will be delegated to another emitter.

      Returns EmitterMixinDelegateChain

    • Destroys this instance. Makes sure that all observers are destroyed and listeners removed.

      Returns void

    • Detaches a DOM root element from the view element and restores its attributes to the state before #attachDomRoot attachDomRoot().

      Parameters

      • name: string

        Name of the root to detach.

      Returns void

    • Disables all added observers.

      Returns void

    • Enables all added observers.

      Returns void

    • Fires an event, executing all callbacks registered for it.

      The first parameter passed to callbacks is an module:utils/eventinfo~EventInfo object, followed by the optional args provided in the fire() method call.

      Type Parameters

      • TEvent extends BaseEvent

        The type describing the event. See module:utils/emittermixin~BaseEvent.

      Parameters

      • eventOrInfo: GetNameOrEventInfo<TEvent>

        The name of the event or EventInfo object if event is delegated.

      • ...args: TEvent["args"]

        Additional arguments to be passed to the callbacks.

      Returns GetEventInfo<TEvent>["return"]

      By default the method returns undefined. However, the return value can be changed by listeners through modification of the module:utils/eventinfo~EventInfo#return evt.return's property (the event info is the first param of every callback).

    • It will focus DOM element representing module:engine/view/editableelement~ViewEditableElement ViewEditableElement that is currently having selection inside.

      Returns void

    • Forces rendering module:engine/view/document~ViewDocument view document to DOM. If any view changes are currently in progress, rendering will start after all #change change blocks are processed.

      Note that this method is dedicated for special cases. All view changes should be wrapped in the #change block and the view will automatically check whether it needs to render DOM or not.

      Throws module:utils/ckeditorerror~CKEditorError CKEditorError applying-view-changes-on-rendering when trying to re-render when rendering to DOM has already started.

      Returns void

    • Gets DOM root element.

      Parameters

      • Optionalname: string

        Name of the root.

      Returns HTMLElement

      DOM root element instance.

    • Registers a callback function to be executed when an event is fired in a specific (emitter) object.

      Events can be grouped in namespaces using :. When namespaced event is fired, it additionally fires all callbacks for that namespace.

      // myEmitter.on( ... ) is a shorthand for myEmitter.listenTo( myEmitter, ... ).
      myEmitter.on( 'myGroup', genericCallback );
      myEmitter.on( 'myGroup:myEvent', specificCallback );

      // genericCallback is fired.
      myEmitter.fire( 'myGroup' );
      // both genericCallback and specificCallback are fired.
      myEmitter.fire( 'myGroup:myEvent' );
      // genericCallback is fired even though there are no callbacks for "foo".
      myEmitter.fire( 'myGroup:foo' );

      An event callback can module:utils/eventinfo~EventInfo#stop stop the event and set the module:utils/eventinfo~EventInfo#return return value of the #fire method.

      Type Parameters

      • TEvent extends BaseEvent

        The type describing the event. See module:utils/emittermixin~BaseEvent.

      Parameters

      Returns void

      BASE_EMITTER

    • Stops executing the callback on the given event. Shorthand for #stopListening this.stopListening( this, event, callback ).

      Parameters

      • event: string

        The name of the event.

      • callback: Function

        The function to stop being called.

      Returns void

    • Registers a callback function to be executed when an event is fired.

      Shorthand for #listenTo this.listenTo( this, event, callback, options ) (it makes the emitter listen on itself).

      Type Parameters

      • TEvent extends BaseEvent

        The type descibing the event. See module:utils/emittermixin~BaseEvent.

      Parameters

      Returns void

    • Registers a callback function to be executed on the next time the event is fired only. This is similar to calling #on followed by #off in the callback.

      Type Parameters

      • TEvent extends BaseEvent

        The type descibing the event. See module:utils/emittermixin~BaseEvent.

      Parameters

      Returns void

    • Scrolls the page viewport and #domRoots with their ancestors to reveal the caret, if not already visible to the user.

      Note: Calling this method fires the module:engine/view/view~ViewScrollToTheSelectionEvent event that allows custom behaviors.

      Type Parameters

      • T extends boolean
      • U extends true

      Parameters

      • Optionaloptions: {
            alignToTop?: T;
            ancestorOffset?: number;
            forceScroll?: U;
            viewportOffset?:
                | number
                | { bottom: number; left: number; right: number; top: number };
        }

        Additional configuration of the scrolling behavior.

        • Optional ReadonlyalignToTop?: T

          When set true, the DOM selection will be aligned to the top of the viewport if not already visible (see forceScroll to learn more).

        • Optional ReadonlyancestorOffset?: number

          A distance between the DOM selection and scrollable DOM root ancestor(s) to be maintained while scrolling to the selection (default is 20px). Setting this value to 0 will reveal the selection precisely at the scrollable ancestor(s) boundary.

        • Optional ReadonlyforceScroll?: U

          When set true, the DOM selection will be aligned to the top of the viewport and scrollable ancestors whether it is already visible or not. This option will only work when alignToTop is true.

        • Optional ReadonlyviewportOffset?: number | { bottom: number; left: number; right: number; top: number }

          A distance between the DOM selection and the viewport boundary to be maintained while scrolling to the selection (default is 20px). Setting this value to 0 will reveal the selection precisely at the viewport boundary.

      Returns void

    • Creates and sets the value of an observable property of this object. Such a property becomes a part of the state and is observable.

      This method throws the observable-set-cannot-override error if the observable instance already has a property with the given property name. This prevents from mistakenly overriding existing properties and methods, but means that foo.set( 'bar', 1 ) may be slightly slower than foo.bar = 1.

      In TypeScript, those properties should be declared in class using declare keyword. In example:

      public declare myProp: number;

      constructor() {
      this.set( 'myProp', 2 );
      }

      Type Parameters

      • K extends
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"

      Parameters

      • name: K

        The property's name.

      • value: EditingView[K]

        The property's value.

      Returns void

      KEY_VALUE

    • Creates and sets the value of an observable properties of this object. Such a property becomes a part of the state and is observable.

      It accepts a single object literal containing key/value pairs with properties to be set.

      This method throws the observable-set-cannot-override error if the observable instance already has a property with the given property name. This prevents from mistakenly overriding existing properties and methods, but means that foo.set( 'bar', 1 ) may be slightly slower than foo.bar = 1.

      In TypeScript, those properties should be declared in class using declare keyword. In example:

      public declare myProp1: number;
      public declare myProp2: string;

      constructor() {
      this.set( {
      'myProp1: 2,
      'myProp2: 'foo'
      } );
      }

      Parameters

      • values: object & {
            _disableRendering?: unknown;
            addObserver?: unknown;
            attachDomRoot?: unknown;
            bind?: unknown;
            change?: unknown;
            createPositionAfter?: unknown;
            createPositionAt?: unknown;
            createPositionBefore?: unknown;
            createRange?: unknown;
            createRangeIn?: unknown;
            createRangeOn?: unknown;
            createSelection?: unknown;
            decorate?: unknown;
            delegate?: unknown;
            destroy?: unknown;
            detachDomRoot?: unknown;
            disableObservers?: unknown;
            document?: unknown;
            domConverter?: unknown;
            domRoots?: unknown;
            enableObservers?: unknown;
            fire?: unknown;
            focus?: unknown;
            forceRender?: unknown;
            getDomRoot?: unknown;
            getObserver?: unknown;
            hasDomSelection?: unknown;
            isRenderingInProgress?: unknown;
            listenTo?: unknown;
            off?: unknown;
            on?: unknown;
            once?: unknown;
            scrollToTheSelection?: unknown;
            set?: unknown;
            stopDelegating?: unknown;
            stopListening?: unknown;
            unbind?: unknown;
        }

        An object with name=>value pairs.

        • Optional_disableRendering?: unknown
        • OptionaladdObserver?: unknown
        • OptionalattachDomRoot?: unknown
        • Optionalbind?: unknown
        • Optionalchange?: unknown
        • OptionalcreatePositionAfter?: unknown
        • OptionalcreatePositionAt?: unknown
        • OptionalcreatePositionBefore?: unknown
        • OptionalcreateRange?: unknown
        • OptionalcreateRangeIn?: unknown
        • OptionalcreateRangeOn?: unknown
        • OptionalcreateSelection?: unknown
        • Optionaldecorate?: unknown
        • Optionaldelegate?: unknown
        • Optionaldestroy?: unknown
        • OptionaldetachDomRoot?: unknown
        • OptionaldisableObservers?: unknown
        • Optional Readonlydocument?: unknown

          Instance of the module:engine/view/document~ViewDocument associated with this view controller.

        • Optional ReadonlydomConverter?: unknown

          Instance of the module:engine/view/domconverter~ViewDomConverter domConverter used by module:engine/view/view~EditingView#_renderer renderer and module:engine/view/observer/observer~Observer observers.

        • Optional ReadonlydomRoots?: unknown

          Roots of the DOM tree. Map on the HTMLElements with roots names as keys.

        • OptionalenableObservers?: unknown
        • Optionalfire?: unknown
        • Optionalfocus?: unknown
        • OptionalforceRender?: unknown
        • OptionalgetDomRoot?: unknown
        • OptionalgetObserver?: unknown
        • Optional ReadonlyhasDomSelection?: unknown

          Informs whether the DOM selection is inside any of the DOM roots managed by the view.

        • Optional ReadonlyisRenderingInProgress?: unknown

          Used to prevent calling #forceRender and #change during rendering view to the DOM.

        • OptionallistenTo?: unknown
        • Optionaloff?: unknown
        • Optionalon?: unknown
        • Optionalonce?: unknown
        • OptionalscrollToTheSelection?: unknown
        • Optionalset?: unknown
        • OptionalstopDelegating?: unknown
        • OptionalstopListening?: unknown
        • Optionalunbind?: unknown

      Returns void

      OBJECT

    • Stops delegating events. It can be used at different levels:

      • To stop delegating all events.
      • To stop delegating a specific event to all emitters.
      • To stop delegating a specific event to a specific emitter.

      Parameters

      • Optionalevent: string

        The name of the event to stop delegating. If omitted, stops it all delegations.

      • Optionalemitter: Emitter

        (requires event) The object to stop delegating a particular event to. If omitted, stops delegation of event to all emitters.

      Returns void

    • Stops listening for events. It can be used at different levels:

      • To stop listening to a specific callback.
      • To stop listening to a specific event.
      • To stop listening to all events fired by a specific object.
      • To stop listening to all events fired by all objects.

      Parameters

      • Optionalemitter: Emitter

        The object to stop listening to. If omitted, stops it for all objects.

      • Optionalevent: string

        (Requires the emitter) The name of the event to stop listening to. If omitted, stops it for all events from emitter.

      • Optionalcallback: Function

        (Requires the event) The function to be removed from the call list for the given event.

      Returns void

      BASE_STOP

    • Removes the binding created with #bind.

      // Removes the binding for the 'a' property.
      A.unbind( 'a' );

      // Removes bindings for all properties.
      A.unbind();

      Parameters

      • ...unbindProperties: (
            | "change"
            | "focus"
            | "set"
            | "destroy"
            | "bind"
            | "unbind"
            | "decorate"
            | "on"
            | "once"
            | "off"
            | "listenTo"
            | "stopListening"
            | "fire"
            | "delegate"
            | "stopDelegating"
            | "document"
            | "createPositionAt"
            | "createPositionAfter"
            | "createPositionBefore"
            | "createRange"
            | "createRangeIn"
            | "createRangeOn"
            | "createSelection"
            | "domConverter"
            | "domRoots"
            | "isRenderingInProgress"
            | "hasDomSelection"
            | "attachDomRoot"
            | "detachDomRoot"
            | "getDomRoot"
            | "addObserver"
            | "getObserver"
            | "disableObservers"
            | "enableObservers"
            | "scrollToTheSelection"
            | "forceRender"
            | "_disableRendering"
        )[]

        Observable properties to be unbound. All the bindings will be released if no properties are provided.

      Returns void