Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: preformatted content being re-formatted (#376)
The issue had to do with how Firefox handles pasting newlines inside a <pre contenteditable> tag (TinyMCE's editor works via contenteditable) and fast-xml-parser's parsing. In Firefox, newlines are converted to <br> when pasted, while Chrome preserves them. The parser by default trims spaces in text nodes. In Firefox, the parser creates individual text nodes between the <br> elements, and those have leading spaces in the example. In Chrome, there are no <br> elements and the entire content is a single text node as-is. Setting trimValues to false disables the trimming and resolves this issue in Firefox. While investigating this, I noticed the builder also mishandles <br /> tags emitted by the editor, converting them to <br></br>. The unpairedTags option in the builder ensures they are output correctly as a single tag, and setting suppressUnpairedNode to false ensures that single tag is <br/> rather than <br> to remain XML compatible. While trying to resolve this, I was looking into the paste plugin in TinyMCE. It changes the behavior of pasting, making it more consistent between Chrome and Firefox (i.e. both emit <br>) and is incorporated into TinyMCE 6 core. Unfortunately, it seems to mangle pasting inside a <pre> tag by inserting redundant nbsp characters (tinymce/tinymce#9017). TinyMCE 6 also outputs <br> rather than <br /> - adding unpairedTags to the parser options is meant to handle this, but it does not seem to behave entirely correct (NaturalIntelligence/fast-xml-parser#609). These should be kept in mind if/when upgrading to TinyMCE 6 (the different behaviors can be seen easily at https://fiddle.tiny.cloud).
- Loading branch information