DataController
Controller for the data pipeline. The data pipeline controls how data is retrieved from the document and set inside it. Hence, the controller features two methods which allow to get and set data of the model using the given:
- data processor,
- downcast converters,
- upcast converters.
An instance of the data controller is always available in the editor.data
property:
editor.data.get( { rootName: 'customRoot' } ); // -> '<p>Hello!</p>'
Properties
-
downcastDispatcher : DowncastDispatcherreadonlymodule:engine/controller/datacontroller~DataController#downcastDispatcherDowncast dispatcher used by the get method. Downcast converters should be attached to it.
-
htmlProcessor : HtmlDataProcessorreadonlymodule:engine/controller/datacontroller~DataController#htmlProcessorData processor used specifically for HTML conversion.
-
module:engine/controller/datacontroller~DataController#mapperMapper used for the conversion. It has no permanent bindings, because these are created while getting data and are cleared directly after the data are converted. However, the mapper is defined as a class property, because it needs to be passed to the
DowncastDispatcheras a conversion API. -
module:engine/controller/datacontroller~DataController#modelData model.
-
module:engine/controller/datacontroller~DataController#processorData processor used during the conversion. Same instance as
htmlProcessorby default. Can be replaced at run time to handle different format, e.g. XML or Markdown. -
stylesProcessor : StylesProcessorreadonlymodule:engine/controller/datacontroller~DataController#stylesProcessorStyles processor used during the conversion.
-
upcastDispatcher : UpcastDispatcherreadonlymodule:engine/controller/datacontroller~DataController#upcastDispatcherUpcast dispatcher used by the set method. Upcast converters should be attached to it.
-
viewDocument : ViewDocumentreadonlymodule:engine/controller/datacontroller~DataController#viewDocumentThe view document used by the data controller.
-
_viewWriter : ViewDowncastWriterprivatereadonlymodule:engine/controller/datacontroller~DataController#_viewWriterThe view downcast writer just for data conversion purposes, i.e. to modify the
viewDocument.
Methods
-
constructor( model, stylesProcessor )module:engine/controller/datacontroller~DataController#constructorCreates a data controller instance.
Parameters
model : ModelData model.
stylesProcessor : StylesProcessorThe styles processor instance.
-
addStyleProcessorRules( callback ) → voidmodule:engine/controller/datacontroller~DataController#addStyleProcessorRulesAdds the style processor normalization rules.
You can implement your own rules as well as use one of the available processor rules:
- background:
addBackgroundStylesRules - border:
addBorderStylesRules - margin:
addMarginStylesRules - padding:
addPaddingStylesRules
Parameters
callback : ( stylesProcessor: StylesProcessor ) => void
Returns
void
- background:
-
delegate( events ) → EmitterMixinDelegateChaininheritedmodule:engine/controller/datacontroller~DataController#delegateDelegates selected events to another
Emitter. For instance:emitterA.delegate( 'eventX' ).to( emitterB ); emitterA.delegate( 'eventX', 'eventY' ).to( emitterC );Copy codethen
eventXis delegated (fired by)emitterBandemitterCalong withdata:emitterA.fire( 'eventX', data );Copy codeand
eventYis delegated (fired by)emitterCalong withdata:emitterA.fire( 'eventY', data );Copy codeParameters
events : Array<string>Event names that will be delegated to another emitter.
Returns
-
destroy() → voidmodule:engine/controller/datacontroller~DataController#destroy -
fire( eventOrInfo, args ) → GetEventInfo<TEvent>[ 'return' ]inheritedmodule:engine/controller/datacontroller~DataController#fireFires an event, executing all callbacks registered for it.
The first parameter passed to callbacks is an
EventInfoobject, followed by the optionalargsprovided in thefire()method call.Type parameters
Parameters
eventOrInfo : GetNameOrEventInfo<TEvent>The name of the event or
EventInfoobject 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 theevt.return's property (the event info is the first param of every callback).
-
get( options = { [options.rootName], [options.trim], options.[key: string] } ) → stringmodule:engine/controller/datacontroller~DataController#getReturns the model's data converted by downcast dispatchers attached to
downcastDispatcherand formatted by the data processor.A warning is logged when you try to retrieve data for a detached root, as most probably this is a mistake. A detached root should be treated like it is removed, and you should not save its data. Note, that the detached root data is always an empty string.
Parameters
options : objectAdditional configuration for the retrieved data.
DataControllerprovides two optional properties:rootNameandtrim. Other properties of this object are specified by various editor features.Properties[ options.rootName ] : stringRoot name. Default 'main'.
[ options.trim ] : 'none' | 'empty'Whether returned data should be trimmed. This option is set to
emptyby default, which means whenever editor content is considered empty, an empty string will be returned. To turn off trimming completely use'none'. In such cases the exact content will be returned (for example a<p> </p>for an empty editor).options.[key: string] : unknown
Defaults to
{}
Returns
stringOutput data.
Fires
-
init( data ) → Promise<void>module:engine/controller/datacontroller~DataController#initSets the initial input data parsed by the data processor and converted by the view-to-model converters. Initial data can be only set to a document whose
versionis equal 0.Note This method is decorated which is used by e.g. collaborative editing plugin that syncs remote data on init.
When data is passed as a string, it is initialized on the default
mainroot:dataController.init( '<p>Foo</p>' ); // Initializes data on the `main` root only, as no other is specified.Copy codeTo initialize data on a different root or multiple roots at once, an object containing
rootName-datapairs should be passed:dataController.init( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Initializes data on both the `main` and `title` roots.Copy codeParameters
data : string | Record<string, string>Input data as a string or an object containing the
rootName-datapairs to initialize data on multiple roots at once.
Returns
Promise<void>Promise that is resolved after the data is set on the editor.
Fires
-
listenTo( emitter, event, callback, [ options ] ) → voidinheritedmodule:engine/controller/datacontroller~DataController#listenTo:BASE_EMITTERRegisters 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' );Copy codeAn event callback can stop the event and set the return value of the
firemethod.Type parameters
Parameters
emitter : EmitterThe object that fires the event.
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
-
off( event, callback ) → voidinheritedmodule:engine/controller/datacontroller~DataController#offStops executing the callback on the given event. Shorthand for
this.stopListening( this, event, callback ).Parameters
event : stringThe name of the event.
callback : FunctionThe function to stop being called.
Returns
void
-
on( event, callback, [ options ] ) → voidinheritedmodule:engine/controller/datacontroller~DataController#onRegisters 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
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
-
once( event, callback, [ options ] ) → voidinheritedmodule:engine/controller/datacontroller~DataController#onceRegisters a callback function to be executed on the next time the event is fired only. This is similar to calling
onfollowed byoffin the callback.Type parameters
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
-
parse( data, context ) → ModelDocumentFragmentmodule:engine/controller/datacontroller~DataController#parseReturns the data parsed by the data processor and then converted by upcast converters attached to the
upcastDispatcher.Parameters
data : stringData to parse.
context : ModelSchemaContextDefinitionBase context in which the view will be converted to the model. See:
convert.Defaults to
'$root'
Returns
ModelDocumentFragmentParsed data.
Related:
-
registerRawContentMatcher( pattern ) → voidmodule:engine/controller/datacontroller~DataController#registerRawContentMatcherRegisters a
MatcherPatternon an htmlProcessor and a processor for view elements whose content should be treated as raw data and not processed during the conversion from DOM to view elements.The raw data can be later accessed by the view element custom property
"$rawContent".Parameters
pattern : MatcherPatternPattern matching all view elements whose content should be treated as a raw data.
Returns
void
-
set( data, options = { [options.batchType], options.[key: string] } ) → voidmodule:engine/controller/datacontroller~DataController#setSets the input data parsed by the data processor and converted by the view-to-model converters. This method can be used any time to replace existing editor data with the new one without clearing the document history.
This method also creates a batch with all the changes applied. If all you need is to parse data, use the
parsemethod.When data is passed as a string it is set on the default
mainroot:dataController.set( '<p>Foo</p>' ); // Sets data on the `main` root, as no other is specified.Copy codeTo set data on a different root or multiple roots at once, an object containing
rootName-datapairs should be passed:dataController.set( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Sets data on the `main` and `title` roots as specified.Copy codeTo set the data with a preserved undo stack and add the change to the undo stack, set
{ isUndoable: true }as abatchTypeoption.dataController.set( '<p>Foo</p>', { batchType: { isUndoable: true } } );Copy codeParameters
data : string | Record<string, string>Input data as a string or an object containing the
rootName-datapairs to set data on multiple roots at once.options : objectOptions for setting data.
Properties[ options.batchType ] : BatchTypeThe batch type that will be used to create a batch for the changes applied by this method. By default, the batch will be set as not undoable and the undo stack will be cleared after the new data is applied (all undo steps will be removed). If the batch type
isUndoableflag is be set totrue, the undo stack will be preserved instead and not cleared when new data is applied.options.[key: string] : unknown
Defaults to
{}
Returns
void
Fires
-
stopDelegating( [ event ], [ emitter ] ) → voidinheritedmodule:engine/controller/datacontroller~DataController#stopDelegatingStops 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 ] : stringThe 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 ofeventto all emitters.
Returns
void
-
stopListening( [ emitter ], [ event ], [ callback ] ) → voidinheritedmodule:engine/controller/datacontroller~DataController#stopListening:BASE_STOPStops 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
[ emitter ] : EmitterThe 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 fromemitter.[ callback ] : Function(Requires the
event) The function to be removed from the call list for the givenevent.
Returns
void
-
stringify( modelElementOrFragment, options ) → stringmodule:engine/controller/datacontroller~DataController#stringifyReturns the content of the given model's element or model document fragment converted by the downcast converters attached to the
downcastDispatcherand formatted by the data processor.Parameters
modelElementOrFragment : ModelElement | ModelDocumentFragmentThe element whose content will be stringified.
options : Record<string, unknown>Additional configuration passed to the conversion process.
Defaults to
{}
Returns
stringOutput data.
-
toModel( viewElementOrFragment, context ) → ModelDocumentFragmentmodule:engine/controller/datacontroller~DataController#toModelReturns the result of the given view element or view document fragment converted by the view-to-model converters, wrapped by
ModelDocumentFragment.When marker elements were converted during the conversion process, it will be set as a document fragment's static markers map.
Parameters
viewElementOrFragment : ViewElement | ViewDocumentFragmentThe element or document fragment whose content will be converted.
context : ModelSchemaContextDefinitionBase context in which the view will be converted to the model. See:
convert.Defaults to
'$root'
Returns
ModelDocumentFragmentOutput document fragment.
Fires
-
toView( modelElementOrFragment, options ) → ViewDocumentFragmentmodule:engine/controller/datacontroller~DataController#toViewReturns the content of the given model element or model document fragment converted by the downcast converters attached to
downcastDispatcherinto a view document fragment.Parameters
modelElementOrFragment : ModelElement | ModelDocumentFragmentElement or document fragment whose content will be converted.
options : Record<string, unknown>Additional configuration that will be available through the
optionsduring the conversion process.Defaults to
{}
Returns
ViewDocumentFragmentOutput view ModelDocumentFragment.
Fires
-
_checkIfRootsExists( rootNames ) → booleanprivatemodule:engine/controller/datacontroller~DataController#_checkIfRootsExistsChecks whether all provided root names are actually existing editor roots.
Parameters
rootNames : Array<string>Root names to check.
Returns
booleanWhether all provided root names are existing editor roots.
Events
-
get( eventInfo, <anonymous> )module:engine/controller/datacontroller~DataController#event:getEvent fired after the get() method has been run.
The
getevent is fired by the decoratedgetmethod. Seedecoratefor more information and samples.Parameters
eventInfo : EventInfoAn object containing information about the fired event.
<anonymous> : Parameters<DataController[ 'get' ]>
-
init( eventInfo, <anonymous> )module:engine/controller/datacontroller~DataController#event:initAn event fired after the
init()method was run. It can be listened to in order to adjust or modify the initialization flow. However, if theinitevent is stopped or prevented, thereadyevent should be fired manually.The
initevent is fired by the decoratedinitmethod. Seedecoratefor more information and samples.Parameters
eventInfo : EventInfoAn object containing information about the fired event.
<anonymous> : Parameters<DataController[ 'init' ]>
-
ready( eventInfo )module:engine/controller/datacontroller~DataController#event:readyEvent fired once the data initialization has finished.
Parameters
eventInfo : EventInfoAn object containing information about the fired event.
-
set( eventInfo, <anonymous> )module:engine/controller/datacontroller~DataController#event:setAn event fired after set() method has been run.
The
setevent is fired by the decoratedsetmethod. Seedecoratefor more information and samples.Parameters
eventInfo : EventInfoAn object containing information about the fired event.
<anonymous> : Parameters<DataController[ 'set' ]>
-
toModel( eventInfo, <anonymous> )module:engine/controller/datacontroller~DataController#event:toModelEvent fired after the toModel() method has been run.
The
toModelevent is fired by the decoratedtoModelmethod. Seedecoratefor more information and samples.Parameters
eventInfo : EventInfoAn object containing information about the fired event.
<anonymous> : Parameters<DataController[ 'toModel' ]>
-
toView( eventInfo, <anonymous> )module:engine/controller/datacontroller~DataController#event:toViewEvent fired after the toView() method has been run.
The
toViewevent is fired by the decoratedtoViewmethod. Seedecoratefor more information and samples.Parameters
eventInfo : EventInfoAn object containing information about the fired event.
<anonymous> : Parameters<DataController[ 'toView' ]>