CaseChangeUI
The case change UI plugin.
Properties
- module:case-change/casechangeui~CaseChangeUI#editor- The editor instance. - Note that most editors implement the - uiproperty. However, editors with an external UI (i.e. Bootstrap-based) or a headless editor may not have this property or throw an error when accessing it.- Because of above, to make plugins more universal, it is recommended to split features into: 
- isEnabled : boolean- module:case-change/casechangeui~CaseChangeUI#isEnabled- Flag indicating whether a plugin is enabled or disabled. A disabled plugin will not transform text. - Plugin can be simply disabled like that: - // Disable the plugin so that no toolbars are visible. editor.plugins.get( 'TextTransformation' ).isEnabled = false;Copy code- You can also use - forceDisabledmethod.
Static properties
- isContextPlugin : falsereadonlyinheritedstatic- module:case-change/casechangeui~CaseChangeUI.isContextPlugin
- pluginName : 'CaseChangeUI'readonlystatic- module:case-change/casechangeui~CaseChangeUI.pluginName
Methods
- constructor( editor )inherited- module:case-change/casechangeui~CaseChangeUI#constructor- Parameters- editor : Editor
 
- bind( bindProperties ) → ObservableMultiBindChaininherited- module:case-change/casechangeui~CaseChangeUI#bind:MANY_BIND- Binds observable properties to other objects implementing the - Observableinterface.- Read more in the dedicated guide covering the topic of property bindings with some additional examples. - Consider two objects: a - buttonand an associated- command(both- Observable).- A simple property binding could be as follows: - button.bind( 'isEnabled' ).to( command, 'isEnabled' );Copy code- or even shorter: - button.bind( 'isEnabled' ).to( command );Copy code- which works in the following way: - button.isEnabledinstantly equals- command.isEnabled,
- whenever command.isEnabledchanges,button.isEnabledwill immediately reflect its value.
 - Note: To release the binding, use - 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' );Copy code- It is possible to bind more than one property at a time to shorten the code: - button.bind( 'isEnabled', 'value' ).to( command );Copy code- which corresponds to: - button.bind( 'isEnabled' ).to( command ); button.bind( 'value' ).to( command );Copy code- 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 );Copy code- Using a custom callback allows processing the value before passing it to the target property: - button.bind( 'isEnabled' ).to( command, 'value', value => value === 'heading1' );Copy code- It is also possible to bind to the same property in an array of observables. To bind a - buttonto 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 );Copy code- Parameters- bindProperties : Array<'off' | 'set' | 'bind' | 'unbind' | 'decorate' | 'stopListening' | 'on' | 'once' | 'listenTo' | 'fire' | 'delegate' | 'stopDelegating' | 'destroy' | 'init' | 'isEnabled' | 'licenseKey' | 'editor' | 'forceDisabled' | 'clearForceDisabled'>
- Observable properties that will be bound to other observable(s). 
 - Returns- ObservableMultiBindChain
- The bind chain with the - to()and- toMany()methods.
 
- bind( bindProperty1, bindProperty2 ) → ObservableDualBindChain<K1, CaseChangeUI[ K1 ], K2, CaseChangeUI[ K2 ]>inherited- module:case-change/casechangeui~CaseChangeUI#bind:DUAL_BIND- Binds observable properties to other objects implementing the - Observableinterface.- Read more in the dedicated guide covering the topic of property bindings with some additional examples. - Consider two objects: a - buttonand an associated- command(both- Observable).- A simple property binding could be as follows: - button.bind( 'isEnabled' ).to( command, 'isEnabled' );Copy code- or even shorter: - button.bind( 'isEnabled' ).to( command );Copy code- which works in the following way: - button.isEnabledinstantly equals- command.isEnabled,
- whenever command.isEnabledchanges,button.isEnabledwill immediately reflect its value.
 - Note: To release the binding, use - 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' );Copy code- It is possible to bind more than one property at a time to shorten the code: - button.bind( 'isEnabled', 'value' ).to( command );Copy code- which corresponds to: - button.bind( 'isEnabled' ).to( command ); button.bind( 'value' ).to( command );Copy code- 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 );Copy code- Using a custom callback allows processing the value before passing it to the target property: - button.bind( 'isEnabled' ).to( command, 'value', value => value === 'heading1' );Copy code- It is also possible to bind to the same property in an array of observables. To bind a - buttonto 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 );Copy code- Type parameters- K1- K2
 - 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, CaseChangeUI[ K1 ], K2, CaseChangeUI[ K2 ]>
- The bind chain with the - to()and- toMany()methods.
 
- bind( bindProperty ) → ObservableSingleBindChain<K, CaseChangeUI[ K ]>inherited- module:case-change/casechangeui~CaseChangeUI#bind:SINGLE_BIND- Binds observable properties to other objects implementing the - Observableinterface.- Read more in the dedicated guide covering the topic of property bindings with some additional examples. - Consider two objects: a - buttonand an associated- command(both- Observable).- A simple property binding could be as follows: - button.bind( 'isEnabled' ).to( command, 'isEnabled' );Copy code- or even shorter: - button.bind( 'isEnabled' ).to( command );Copy code- which works in the following way: - button.isEnabledinstantly equals- command.isEnabled,
- whenever command.isEnabledchanges,button.isEnabledwill immediately reflect its value.
 - Note: To release the binding, use - 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' );Copy code- It is possible to bind more than one property at a time to shorten the code: - button.bind( 'isEnabled', 'value' ).to( command );Copy code- which corresponds to: - button.bind( 'isEnabled' ).to( command ); button.bind( 'value' ).to( command );Copy code- 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 );Copy code- Using a custom callback allows processing the value before passing it to the target property: - button.bind( 'isEnabled' ).to( command, 'value', value => value === 'heading1' );Copy code- It is also possible to bind to the same property in an array of observables. To bind a - buttonto 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 );Copy code- Type parameters- K
 - Parameters- bindProperty : K
- Observable property that will be bound to other observable(s). 
 - Returns- ObservableSingleBindChain<K, CaseChangeUI[ K ]>
- The bind chain with the - to()and- toMany()methods.
 
- clearForceDisabled( id ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#clearForceDisabled- Clears forced disable previously set through - forceDisabled. See- forceDisabled.- Parameters- id : string
- Unique identifier, equal to the one passed in - forceDisabledcall.
 - Returns- void
 
- decorate( methodName ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#decorate- 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 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 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.Copy code- Note: The high 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'Copy code- 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'Copy code- Parameters- methodName : 'off' | 'set' | 'bind' | 'unbind' | 'decorate' | 'stopListening' | 'on' | 'once' | 'listenTo' | 'fire' | 'delegate' | 'stopDelegating' | 'destroy' | 'init' | 'isEnabled' | 'licenseKey' | 'editor' | 'forceDisabled' | 'clearForceDisabled'
- Name of the method to decorate. 
 - Returns- void
 
- delegate( events ) → EmitterMixinDelegateChaininherited- module:case-change/casechangeui~CaseChangeUI#delegate- Delegates selected events to another - Emitter. For instance:- emitterA.delegate( 'eventX' ).to( emitterB ); emitterA.delegate( 'eventX', 'eventY' ).to( emitterC );Copy code- then - eventXis delegated (fired by)- emitterBand- emitterCalong with- data:- emitterA.fire( 'eventX', data );Copy code- and - eventYis delegated (fired by)- emitterCalong with- data:- emitterA.fire( 'eventY', data );Copy code- Parameters- events : Array<string>
- Event names that will be delegated to another emitter. 
 - Returns
- destroy() → void- module:case-change/casechangeui~CaseChangeUI#destroy- Destroys the plugin. - Note: This method is optional. A plugin instance does not need to have it defined. - Returns- void
 
- fire( eventOrInfo, args ) → GetEventInfo<TEvent>[ 'return' ]inherited- module:case-change/casechangeui~CaseChangeUI#fire- Fires an event, executing all callbacks registered for it. - The first parameter passed to callbacks is an - EventInfoobject, followed by the optional- argsprovided in the- fire()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 the- evt.return's property (the event info is the first param of every callback).
 
- forceDisabled( id ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#forceDisabled- Disables the plugin. - Plugin may be disabled by multiple features or algorithms (at once). When disabling a plugin, unique id should be passed (e.g. feature name). The same identifier should be used when enabling back the plugin. The plugin becomes enabled only after all features enabled it back. - Disabling and enabling a plugin: - plugin.isEnabled; // -> true plugin.forceDisabled( 'MyFeature' ); plugin.isEnabled; // -> false plugin.clearForceDisabled( 'MyFeature' ); plugin.isEnabled; // -> trueCopy code- Plugin disabled by multiple features: - plugin.forceDisabled( 'MyFeature' ); plugin.forceDisabled( 'OtherFeature' ); plugin.clearForceDisabled( 'MyFeature' ); plugin.isEnabled; // -> false plugin.clearForceDisabled( 'OtherFeature' ); plugin.isEnabled; // -> trueCopy code- Multiple disabling with the same identifier is redundant: - plugin.forceDisabled( 'MyFeature' ); plugin.forceDisabled( 'MyFeature' ); plugin.clearForceDisabled( 'MyFeature' ); plugin.isEnabled; // -> trueCopy code- Note: some plugins or algorithms may have more complex logic when it comes to enabling or disabling certain plugins, so the plugin might be still disabled after - clearForceDisabledwas used.- Parameters- id : string
- Unique identifier for disabling. Use the same id when enabling back the plugin. 
 - Returns- void
 
- init() → void- module:case-change/casechangeui~CaseChangeUI#init- Returns- void
 
- listenTo( emitter, event, callback, [ options ] ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#listenTo:BASE_EMITTER- 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' );Copy code- An event callback can stop the event and set the return value of the - firemethod.- Type parameters- 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 ] : GetCallbackOptions<TEvent>
- Additional options. 
 - Returns- void
 
- off( event, callback ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#off- 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
 
- on( event, callback, [ options ] ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#on- 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- 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 ] ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#once- Registers a callback function to be executed on the next time the event is fired only. This is similar to calling - onfollowed by- offin 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
 
- set( values ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#set:OBJECT- 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-overrideerror 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 - declarekeyword. In example:- public declare myProp1: number; public declare myProp2: string; constructor() { this.set( { 'myProp1: 2, 'myProp2: 'foo' } ); }Copy code- Parameters- values : object
- An object with - name=>valuepairs.
 - Returns- void
 
- set( name, value ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#set:KEY_VALUE- 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-overrideerror 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 - declarekeyword. In example:- public declare myProp: number; constructor() { this.set( 'myProp', 2 ); }Copy code- Type parameters- K
 - Parameters- name : K
- The property's name. 
- value : CaseChangeUI[ K ]
- The property's value. 
 - Returns- void
 
- stopDelegating( [ event ], [ emitter ] ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#stopDelegating- 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- eventto all emitters.
 - Returns- void
 
- stopListening( [ emitter ], [ event ], [ callback ] ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#stopListening:BASE_STOP- 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- [ emitter ] : Emitter
- 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
 
- unbind( unbindProperties ) → voidinherited- module:case-change/casechangeui~CaseChangeUI#unbind- Removes the binding created with - bind.- // Removes the binding for the 'a' property. A.unbind( 'a' ); // Removes bindings for all properties. A.unbind();Copy code- Parameters- unbindProperties : Array<'off' | 'set' | 'bind' | 'unbind' | 'decorate' | 'stopListening' | 'on' | 'once' | 'listenTo' | 'fire' | 'delegate' | 'stopDelegating' | 'destroy' | 'init' | 'isEnabled' | 'licenseKey' | 'editor' | 'forceDisabled' | 'clearForceDisabled'>
- Observable properties to be unbound. All the bindings will be released if no properties are provided. 
 - Returns- void
 
Events
- change:isEnabled( eventInfo, name, value, oldValue )inherited- module:case-change/casechangeui~CaseChangeUI#event:change:isEnabled- Fired when the - isEnabledproperty changed value.- Parameters- eventInfo : EventInfo
- An object containing information about the fired event. 
- name : string
- Name of the changed property ( - isEnabled).
- value : boolean
- New value of the - isEnabledproperty with given key or- null, if operation should remove property.
- oldValue : boolean
- Old value of the - isEnabledproperty with given key or- null, if property was not set before.
 
- change:{property}( eventInfo, name, value, oldValue )inherited- module:case-change/casechangeui~CaseChangeUI#event:change:{property}- Fired when a property changed value. - observable.set( 'prop', 1 ); observable.on<ObservableChangeEvent<number>>( 'change:prop', ( evt, propertyName, newValue, oldValue ) => { console.log( `${ propertyName } has changed from ${ oldValue } to ${ newValue }` ); } ); observable.prop = 2; // -> 'prop has changed from 1 to 2'Copy code- Parameters- eventInfo : EventInfo
- An object containing information about the fired event. 
- name : string
- The property name. 
- value : TValue
- The new property value. 
- oldValue : TValue
- The previous property value. 
 
- set:isEnabled( eventInfo, name, value, oldValue )inherited- module:case-change/casechangeui~CaseChangeUI#event:set:isEnabled- Fired when the - isEnabledproperty is going to be set but is not set yet (before the- changeevent is fired).- Parameters- eventInfo : EventInfo
- An object containing information about the fired event. 
- name : string
- Name of the changed property ( - isEnabled).
- value : boolean
- New value of the - isEnabledproperty with given key or- null, if operation should remove property.
- oldValue : boolean
- Old value of the - isEnabledproperty with given key or- null, if property was not set before.
 
- set:{property}( eventInfo, name, value, oldValue )inherited- module:case-change/casechangeui~CaseChangeUI#event:set:{property}- Fired when a property value is going to be set but is not set yet (before the - changeevent is fired).- You can control the final value of the property by using the event's - returnproperty.- observable.set( 'prop', 1 ); observable.on<ObservableSetEvent<number>>( 'set:prop', ( evt, propertyName, newValue, oldValue ) => { console.log( `Value is going to be changed from ${ oldValue } to ${ newValue }` ); console.log( `Current property value is ${ observable[ propertyName ] }` ); // Let's override the value. evt.return = 3; } ); observable.on<ObservableChangeEvent<number>>( 'change:prop', ( evt, propertyName, newValue, oldValue ) => { console.log( `Value has changed from ${ oldValue } to ${ newValue }` ); } ); observable.prop = 2; // -> 'Value is going to be changed from 1 to 2' // -> 'Current property value is 1' // -> 'Value has changed from 1 to 3'Copy code- Note: The event is fired even when the new value is the same as the old value. - Parameters- eventInfo : EventInfo
- An object containing information about the fired event. 
- name : string
- The property name. 
- value : TValue
- The new property value. 
- oldValue : TValue
- The previous property value.