Class

SelectionObserver (engine/view/observer)

@ckeditor/ckeditor5-engine/src/view/observer/selectionobserver

class

Selection observer class observes selection changes in the document. If a selection changes on the document this observer checks if the DOM selection is different from the view selection. The selection observer fires event-selectionChange event only if a selection change was the only change in the document and the DOM selection is different from the view selection.

This observer also manages the isSelecting property of the view document.

Note that this observer is attached by the View and is available by default.

Filtering

Properties

  • readonly inherited

    document : Document

    A reference to the Document object.

  • readonly

    domConverter : DomConverter

    Reference to the domConverter.

  • readonly

    focusObserver : FocusObserver

    Instance of the focus observer. Focus observer calls flush to mark the latest focus change as complete.

  • readonly inherited

    isEnabled : boolean

    The state of the observer. If it is disabled, no events will be fired.

  • readonly

    mutationObserver : MutationObserver

    Instance of the mutation observer. Selection observer calls flush to ensure that the mutations will be handled before the event-selectionChange event is fired.

  • readonly

    selection : DocumentSelection

    Reference to the view DocumentSelection object used to compare new selection with it.

  • readonly inherited

    view : View

    An instance of the view controller.

  • private readonly

    _clearInfiniteLoopInterval : Timeout

    When called, starts clearing the _loopbackCounter counter in time intervals. When the number of selection changes exceeds a certain limit within the interval of time, the observer will not fire selectionChange but warn about possible infinite selection loop.

  • private readonly

    _documentIsSelectingInactivityTimeoutDebounced : DebouncedFunc<() => void>

    Unlocks the isSelecting state of the view document in case the selection observer did not record this fact correctly (for whatever reason). It is a safeguard (paranoid check), that returns document to the normal state after a certain period of time (debounced, postponed by each selectionchange event).

  • private readonly

    _documents : WeakSet<Document>

    A set of documents which have added selectionchange listener to avoid adding a listener twice to the same document.

  • private readonly

    _fireSelectionChangeDoneDebounced : DebouncedFunc<( ViewDocumentSelectionEventData ) => void>

    Fires debounced event selectionChangeDone. It uses lodash#debounce method to delay function call.

  • private

    _loopbackCounter : number

    Private property to check if the code does not enter infinite loop.

Methods

  • constructor( view )

    Parameters

    view : View
  • inherited

    checkShouldIgnoreEventFromTarget( domTarget ) → boolean

    Checks whether a given DOM event should be ignored (should not be turned into a synthetic view document event).

    Currently, an event will be ignored only if its target or any of its ancestors has the data-cke-ignore-events attribute. This attribute can be used inside the structures generated by DowncastWriter#createUIElement() to ignore events fired within a UI that should be excluded from CKEditor 5's realms.

    Parameters

    domTarget : null | Node

    The DOM event target to check (usually an element, sometimes a text node and potentially sometimes a document, too).

    Returns

    boolean

    Whether this event should be ignored by the observer.

  • inherited

    delegate( events ) → EmitterMixinDelegateChain

    Delegates selected events to another 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 : Array<string>

    Event names that will be delegated to another emitter.

    Returns

    EmitterMixinDelegateChain
  • destroy() → void

    Disables and destroys the observer, among others removes event listeners created by the observer.

    Returns

    void
  • inherited

    disable() → void

    Disables the observer. This method is called before rendering to prevent firing events during rendering.

    Returns

    void

    Related:

  • inherited

    enable() → void

    Enables the observer. This method is called when the observer is registered to the View and after rendering (all observers are disabled before rendering).

    A typical use case for disabling observers is that mutation observers need to be disabled for the rendering. However, a child class may not need to be disabled, so it can implement an empty method.

    Returns

    void

    Related:

  • inherited

    fire( eventOrInfo, args ) → GetEventInfo<TEvent>[ 'return' ]

    Fires an event, executing all callbacks registered for it.

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

    Type parameters

    TEvent : extends BaseEvent

    The type describing the event. See 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 evt.return's property (the event info is the first param of every callback).

  • inherited

    listenTo( emitter, event, callback, [ options ] ) → void

    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 stop the event and set the return value of the fire method.

    Type parameters

    TEvent : extends BaseEvent

    The type describing the event. See BaseEvent.

    Parameters

    emitter : Emitter

    The object that fires the event.

    event : TEvent[ 'name' ]

    The name of the event.

    callback : GetCallback<TEvent>

    The function to be called on event.

    [ options ] : CallbackOptions

    Additional options.

    Returns

    void
  • inherited

    listenTo( emitter, event, callback, [ options ] ) → void

    Registers a callback function to be executed when an event is fired in a specific Emitter or DOM Node. It is backwards compatible with listenTo.

    Type parameters

    K : extends keyof DomEventMap

    Parameters

    emitter : Node | Window

    The object that fires the event.

    event : K

    The name of the event.

    callback : ( SelectionObserver, EventInfo<string, unknown>, DomEventMap[ K ] ) => void

    The function to be called on event.

    [ options ] : object

    Additional options.

    Returns

    void
  • observe( domElement ) → void

    Starts observing given DOM element.

    Parameters

    domElement : HTMLElement

    DOM element to observe.

    Returns

    void
  • inherited

    off( event, callback ) → void

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

    Parameters

    event : string

    The name of the event.

    callback : Function

    The function to stop being called.

    Returns

    void
  • inherited

    on( event, callback, [ options ] ) → void

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

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

    Type parameters

    TEvent : extends BaseEvent

    The type descibing the event. See BaseEvent.

    Parameters

    event : TEvent[ 'name' ]

    The name of the event.

    callback : GetCallback<TEvent>

    The function to be called on event.

    [ options ] : GetCallbackOptions<TEvent>

    Additional options.

    Returns

    void
  • inherited

    once( event, callback, [ options ] ) → 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 BaseEvent.

    Parameters

    event : TEvent[ 'name' ]

    The name of the event.

    callback : GetCallback<TEvent>

    The function to be called on event.

    [ options ] : GetCallbackOptions<TEvent>

    Additional options.

    Returns

    void
  • inherited

    stopDelegating( [ event ], [ emitter ] ) → void

    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

    [ event ] : string

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

    [ emitter ] : Emitter

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

    Returns

    void
  • inherited

    stopListening( [ emitter ], [ event ], [ callback ] ) → void

    Stops listening for events. It can be used at different levels: It is backwards compatible with listenTo.

    • 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

    [ emitter ] : Emitter | Node | Window

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

    [ event ] : string

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

    [ callback ] : Function

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

    Returns

    void
  • stopObserving( domElement ) → void

    Stops observing given DOM element.

    Parameters

    domElement : HTMLElement

    Returns

    void
  • private

    _clearInfiniteLoop() → void

    Clears SelectionObserver internal properties connected with preventing infinite loop.

    Returns

    void
  • private

    _handleSelectionChange( domEvent, domDocument ) → void

    Selection change listener. Flush mutations, check if a selection changes and fires event-selectionChange event on every change and event-selectionChangeDone when a selection stop changing.

    Parameters

    domEvent : unknown

    DOM event.

    domDocument : Document

    DOM document.

    Returns

    void
  • private

    _reportInfiniteLoop() → void

    Returns

    void