RemexCompatMunger: Don't split p-wrapping on style/link tags
<style> and <link> tags are metadata tags, they shouldn't split the <p> tag when p-wrapping content. Bug: T208901 Change-Id: I2ef5da68c9ccde4477d8295dfe4abf8497c5d26e
This commit is contained in:
parent
9a95b226d0
commit
4597559d84
2 changed files with 40 additions and 1 deletions
|
|
@ -72,6 +72,21 @@ class RemexCompatMunger implements TreeHandler {
|
|||
"mark" => true,
|
||||
];
|
||||
|
||||
/**
|
||||
* For the purposes of this class, "metadata" elements are those that
|
||||
* should neither trigger p-wrapping nor stop an outer p-wrapping,
|
||||
* typically those that are themselves invisible in a browser's rendering.
|
||||
* This isn't a complete list, it's just the tags that we're likely to
|
||||
* encounter in practice.
|
||||
* @var array
|
||||
*/
|
||||
private static $metadataElements = [
|
||||
'style' => true,
|
||||
'script' => true,
|
||||
'link' => true,
|
||||
'meta' => true,
|
||||
];
|
||||
|
||||
private static $formattingElements = [
|
||||
'a' => true,
|
||||
'b' => true,
|
||||
|
|
@ -261,7 +276,11 @@ class RemexCompatMunger implements TreeHandler {
|
|||
$under = $preposition === TreeBuilder::UNDER;
|
||||
$elementToEnd = null;
|
||||
|
||||
if ( $under && $parentData->isPWrapper && !$inline ) {
|
||||
if ( isset( self::$metadataElements[$elementName] ) ) {
|
||||
// The element is a metadata element, that we allow to appear in
|
||||
// both inline and block contexts.
|
||||
$this->trace( 'insert metadata' );
|
||||
} elseif ( $under && $parentData->isPWrapper && !$inline ) {
|
||||
// [B/b] The element is non-inline and the parent is a p-wrapper,
|
||||
// close the parent and insert into its parent instead
|
||||
$this->trace( 'insert B/b' );
|
||||
|
|
|
|||
|
|
@ -262,6 +262,26 @@ class RemexDriverTest extends MediaWikiTestCase {
|
|||
'<i><blockquote><p></i>',
|
||||
'<i></i><blockquote><p><i></i></p><p><i></i></p></blockquote>',
|
||||
],
|
||||
[
|
||||
'style tag isn\'t p-wrapped (T186965)',
|
||||
'<style>/* ... */</style>',
|
||||
'<style>/* ... */</style>',
|
||||
],
|
||||
[
|
||||
'link tag isn\'t p-wrapped (T186965)',
|
||||
'<link rel="foo" href="bar" />',
|
||||
'<link rel="foo" href="bar" />',
|
||||
],
|
||||
[
|
||||
'style tag doesn\'t split p-wrapping (T208901)',
|
||||
'foo <style>/* ... */</style> bar',
|
||||
'<p>foo <style>/* ... */</style> bar</p>',
|
||||
],
|
||||
[
|
||||
'link tag doesn\'t split p-wrapping (T208901)',
|
||||
'foo <link rel="foo" href="bar" /> bar',
|
||||
'<p>foo <link rel="foo" href="bar" /> bar</p>',
|
||||
],
|
||||
];
|
||||
|
||||
public function provider() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue