Fairly self-explanatory (and weird).
|Open||None||T76548 Provide real-time collaboration in VisualEditor-MediaWiki|
|Open||None||T76546 Provide real-time collaborative editing in VisualEditor|
|Open||None||T75202 VisualEditor: Link annotations can be split into two adjacent ones when other annotations overlap|
|Open||None||T52098 Ordered application of annotations to avoid fragmentation (e.g. ''[[Foo|Fo]]''[[Foo|o]])|
- Mentioned In
- T126022: ve.dm.SurfaceFragment#insertContent: Annotate inserted content correctly
T140538: Link with annotations gets split on re-render
T101038: Missing data in Phab reporting dump
T87842: Unnecessary <nowiki> inserted into page text (Nov 2014)
- Mentioned Here
- T105239: Enable scrubWikitext=1 in VisualEditor's save route to Parsoid
- Duplicates Merged Here
- T120226: When the begin of a word is formatted, adding a link for this word will create two links instead of one
T111627: VE and wiki-italic syntax for links can create unneeded apostrophes
T109169: Annotating link with italics annotates inside the link instead of outer
T154121: VisualEditor: Text style (bold, italic) is added inside the link markup instead of outside
T149474: Formatting links to italic inserts the '' '' inside the link, not around it
Annotations get applied to the text in the order that they're applied in reality; we should probably make links higher-priority. Thus [[Foo|F'''''o''o''']] rather than [[Foo|F]]'''''[[Foo|o]]''[[Foo|F]]'''.
(In reply to comment #2)
Except you'd probably rather have ''[[Foo|Bar]]'' than [[Foo|''Bar'']]
Yeah; so it should only break out when it's not entirely nested? Spoke to Roan about this - he says it's a relatively-major change in DM that he did "about a quarter" of the work for as part of DM rewrite 2 (or similar). Pull from release?
To re-visit this, some rules I think encapsulate what we want:
- Spanning annotations should never be broken (because that changes the render/interaction result), in the following order:
- Superscript / Subscript
- Underline / Strikethrough
- <a href="Foo"><i>Foo</i>Bar</a> -> [[Foo|''Foo''Bar]], not ''[[Foo]]''[[Foo|Bar]]
- <u>Foo<b>Bar</b></u> -> <u>Foo'''Bar'''</u>, not <u>Foo</u>'''<u>Bar</u>'''
- <u>Foo<a href="Bar">Bar</u>Baz</a> -> <u>Foo</u>[[Bar|<u>Bar</u>Baz]], not <u>Foo[[Bar]]</u>[[Bar|Baz]]
- <sup>Foo<s>Bar</sup>Baz</s> -> <sup>Foo<s>Bar</s></sup><s>Baz</s>, not <sup>Foo</sup><sup><s>Bar</s></sup><s>Baz</s>
- Annotations to links' anchors which are otherwise identical to their target
- <a href="Foo"><i>Foo</i></a> -> ''[[Foo]]'', not [[Foo|''Foo'']]
- Otherwise, annotations should be minimally-spanning
- <a href="Foo"><i>Bar</i></a> -> ''[[Foo|Bar]]'', not [[Foo|''Bar'']]
- <i><b>Foo</b>Bar</i> -> '''''Foo'''Bar'' not '''''Foo'''''<nowiki />''Bar''
Does this achieve what we want? (Obviously some of this is already done by Parsoid.)
In the meantime, can we suggest workarounds to "get the code right"?
I.e. to avoid [[Foo|''Bar'']] you should italicize first, and link only after that. I added this to the Italian User guide, other tips I might be missing? Thanks.
Now that T105239: Enable scrubWikitext=1 in VisualEditor's save route to Parsoid is done, this should only impact non-MW users in terms of save output. Still a blocker for sane RTC, but that's not a priority.
I haven't read all the comments about, but that scenario is currently not handled, but https://www.mediawiki.org/wiki/Talk:Parsoid/Normalizations has normalizations that are still on our plate.
https://www.mediawiki.org/wiki/Parsoid/Normalizations#Tag_minimization_.28.3Ci.3E.2F.3Cb.3E_tags.29 might handle some of the i/b scenarios that matter.
Is this still an issue? We've implemented tag minimization for <a> tags and it has been in production for a long time now. https://www.mediawiki.org/wiki/Parsoid/Normalizations#Tag_minimization_.28.3Ca.3E_tags.29
In the merged example, VE is generating <p><b><a href="Eat" rel="mw:WikiLink">Foo</a></b><a href="Eat" rel="mw:WikiLink">d</a></p> and Parsoid is turning it into '''[[Eat|Foo]]'''[[Eat|d]] which is a pretty faithful representation of VE's stupid DOM.
Ah, I see. At one point (actually my very first set of commits to Parsoid), I had implemented a complex minimization algorithm that would have dealt with this and other complex scenarios, but I removed it in favour of a simpler algorithm since that other algorithm couldn't keep up with all the DOM changes and other complexities that arrived over time and continued to be broken. But, I'll keep this in mind for future enhancements of our DOM normalization unless VE gets there first.