Standalone editor: Refactor list format handler 2 #2137
Merged
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.
Today list format handlers needs to decode/encode metadata when do DOM and Content Model conversion. This now happens in
roosterjs-content-model-dom
package. However we want to make this package only contains the core conversion code, but put the complex editing part toroosterjs-content-model-editor
package. So I need to split out the metadata related code. Then the remaining code only read/write existing format styles but no need to do reformat (such as reapply list item number style)This is the second step, including:
MetadataApplier
type to help apply metadata. Here "apply" means we apply the settings in metadata to Content Model format, but not to DOM directly. Then we still need to callapplyFormat
to apply this format change into DOM tree.applyMetadata
to apply its value.listStyleType
property inListStyleFormat
listItemMetadataFormatHandler
andlistLevelMetadataFormatHandler
since they are now replaced by the metadata appliersAfter this change, if we just do DOM to model to DOM conversion without the metadata appliers (using
roosterjs-content-model-dom
package only), it will always respect the existing listStyleType if any, metadata will still be preserved but its value will be ignored. Then inside editor, metadata appliers are always added, so all format API will trigger list style type to be regenerated.And we can now put all metadata appliers and its related definition code into
roosterjs-content-model-editor
package. Forroosterjs-content-model-dom
package, it will only contain common code such asapplyMetadata
function itself, and the metadata validation common code.