BlockToolbar and BalloonToolbar should init after all plugins are init-ed (and afterInit-ed). #15898
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Suggested merge commit message (convention)
Fix (ckbox): Plugin order should not matter when it comes to registering schema for
ckboxImageId
attribute. Closes #15581.Fix (ui): BlockToolbar and BalloonToolbar plugins order should not matter when it comes to registering toolbar items. Closes #15581.
MINOR BREAKING CHANGE (ui): The contents of the
BlockToolbar
andBalloonToolbar
are now filled on theEditorUIReadyEvent
instead ofafterInit()
.Additional information
This PR solves actually 3 issues:
CKBox
plugin before theImageBlock
andImageInline
plugins, the schema for schema forckboxImageId
attribute was not registered.BlockToolbar
(orBalloonToolbar
) beforeCKBox
(or actually any other plugin that registers toolbar buttons inafterInit()
) resulted in the button not being registered.InsertImage
integration sometimes happens ininit()
, and it is possible to load the pluginui
part beforeediting
, it could happen that when theui
was loaded first, the command was not yet created, resulting in an error saying that it was not possible to bind dropdown'sisEnabled
to the observable (the command) - because the command was undefined. So we added the ability to pass a function to the integration registration instead, and we used that in all of our integrations. This way we always make sure that the command is there when we bind it.