Allow enabling all types of editors on paragraph-like root #762
Description
Developers should be able to initialize the editor on a paragraph-like roots. For example, someone may want to make content of just an <h1>
element editable:
<h1 id=editor>Title...</h1>
<script>
InlineEditor.create( document.getElementById( 'editor' ) )
.then( ... )
.catch( ... );
</script>
The inline type of editors are most often to be used in such a cases and there's even a ticket for InlineEditor
already (https://github.com/ckeditor/ckeditor5-editor-inline/issues/3 and https://github.com/ckeditor/ckeditor5-editor-inline/issues/5). But this requirement applies also to BalloonEditor
and I may imagine that someone might want to enable ClassicEditor
in such a mode. So, since most of the work is needed in the common part of the code base (core, engine), I'd say that the solution could be generic to all kinds of editors from day one.
In case of editors which upcast existing DOM elements (like inline and balloon editors), the information about the type of element (whether it's div-like or paragraph-like) can be taken from that element itself. But in case of the classic editor it will need to be specified in the config. The config option could work for all editors, overriding the upcasted element.
What's kinda tricky here is mapping DOM element name to schema item name so we can create a model root with the right name. However, I think that this should be enough, taken that the automatic behaviour will be overridable by configuration anyway:
const paragraphLikeElements = [ 'p', 'h1', ... ];
getRootName( domElementName ) {
if ( paragraphLikeElements.includes( domElementName ) {
return '$block';
} else {
return '$root';
}
}
Defaulting to the generic $block
item for all p/h1/etc elements should be enough.
Add 👍 to this post if you'd like this feature to be implemented.