Page MenuHomePhabricator

Using ; : syntax for definition lists, with a multi-line <pre> block in the definition part, ends the <dd> too early.
Closed, DuplicatePublic

Description

On the sample page, you find three block which I expected to be identical (like the 3rd) but two of them are not.

URL: http://de.wikipedia.org/wiki/Benutzer:Purodha/ws2008/error

Details

Reference
bz16352

Event Timeline

bzimport raised the priority of this task from to Low.Nov 21 2014, 10:28 PM
bzimport set Reference to bz16352.
bzimport added a subscriber: Unknown Object (MLST).

There's no need to use <nowiki> inside <pre>, <pre> is already nowiki-fied, as such I've removed them from your example page to simplify the demo since there is no difference between them in output.

The bug is related to where the line-break is. Rephrasing summary.

This is partially a tidy issue (well actually without tidy its even more borked... Anyways, try it in [[special:expandtemplates]] to see what i mean).

Mediawiki interprets
;Foo: Bar

To mean a definition list where the term Foo is defined by Bar. MediaWiki expects all the content of the definition when using ; : lists to be on the same line, so after the first line break in the pre, MediaWiki considers that to be the end of the <dd> tag (Thus in your example, resulting in a <dd> tag that looks like <dd><pre></dd>, which is striped by tidy). The browser (or tidy) see's the closed </dd> but no closing </pre> , so assumes the closing tag for pre was missed, and closes it.

So MediaWiki would either have to see that a pre started inside the <dd> and wait for the </pre> before closing the <dd>, or it could just stop the <dd> as soon as it sees a <pre>. However doing that would break the usecase of doing ;Foo:<pre>bar</pre> which does work fine.

Minimal test case is:
;Foo:<pre>
bar</pre>

Compared to:
;Foo:
<pre>
bar</pre>

Or (probably closer to your expected behaviour)

;Foo:<pre>bar</pre>

Krinkle unsubscribed.