r44271 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r44270‎ | r44271 | r44272 >
Date:18:00, 6 December 2008
Author:aaron
Status:reverted (Comments)
Tags:
Comment:
(bug 12998) Weaken DISPLAYTITLE restictions (patch by 'rememberthedot@gmail.com')
Modified paths:
  • /trunk/phase3/includes/EditPage.php (modified) (history)
  • /trunk/phase3/includes/OutputPage.php (modified) (history)
  • /trunk/phase3/includes/Skin.php (modified) (history)
  • /trunk/phase3/includes/parser/CoreParserFunctions.php (modified) (history)
  • /trunk/phase3/includes/parser/ParserOutput.php (modified) (history)
  • /trunk/phase3/skins/Modern.php (modified) (history)
  • /trunk/phase3/skins/MonoBook.php (modified) (history)

Diff [purge]

Index: trunk/phase3/skins/MonoBook.php
@@ -115,7 +115,7 @@
116116 <div id="content">
117117 <a name="top" id="top"></a>
118118 <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
119 - <h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
 119+ <h1 class="firstHeading"><?php $this->html('title'); ?></h1>
120120 <div id="bodyContent">
121121 <h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
122122 <div id="contentSub"><?php $this->html('subtitle') ?></div>
Index: trunk/phase3/skins/Modern.php
@@ -102,7 +102,7 @@
103103 class="mediawiki <?php $this->text('dir') ?> <?php $this->text('pageclass') ?> <?php $this->text('skinnameclass') ?>">
104104
105105 <!-- heading -->
106 - <div id="mw_header"><h1 id="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1></div>
 106+ <div id="mw_header"><h1 id="firstHeading"><?php $this->html('title') ?></h1></div>
107107
108108 <div id="mw_main">
109109 <div id="mw_contentwrapper">
Index: trunk/phase3/includes/parser/ParserOutput.php
@@ -29,7 +29,8 @@
3030 /**
3131 * Overridden title for display
3232 */
33 - private $displayTitle = false;
 33+ private $displayTitle = false; #for use in the <title> tag
 34+ private $displayTitleH1 = false; #for use in the <h1> tag, may contain further HTML tags
3435
3536 function ParserOutput( $text = '', $languageLinks = array(), $categoryLinks = array(),
3637 $containsOldMagic = false, $titletext = '' )
@@ -145,6 +146,15 @@
146147 }
147148
148149 /**
 150+ * Get the title to be used for display
 151+ *
 152+ * @return string
 153+ */
 154+ public function getDisplayTitle() {
 155+ return $this->displayTitle;
 156+ }
 157+
 158+ /**
149159 * Override the title to be used for display
150160 * -- this is assumed to have been validated
151161 * (check equal normalisation, etc.)
@@ -154,15 +164,14 @@
155165 public function setDisplayTitle( $text ) {
156166 $this->displayTitle = $text;
157167 }
158 -
159 - /**
160 - * Get the title to be used for display
161 - *
162 - * @return string
163 - */
164 - public function getDisplayTitle() {
165 - return $this->displayTitle;
 168+
 169+ public function getDisplayTitleH1() {
 170+ return $this->displayTitleH1;
166171 }
 172+
 173+ public function setDisplayTitleH1( $html ) {
 174+ $this->displayTitleH1 = $html;
 175+ }
167176
168177 /**
169178 * Fairly generic flag setter thingy.
Index: trunk/phase3/includes/parser/CoreParserFunctions.php
@@ -164,17 +164,32 @@
165165 * @param string $text Desired title text
166166 * @return string
167167 */
168 - static function displaytitle( $parser, $text = '' ) {
 168+ static function displaytitle( $parser, $displayTitleH1 = '', $displayTitleTitle = '' ) {
169169 global $wgRestrictDisplayTitle;
170 - $text = trim( Sanitizer::decodeCharReferences( $text ) );
171 -
 170+
 171+ $titleHTML = Sanitizer::removeHTMLtags( $displayTitleH1 ); #escape the bad tags
 172+ $titleText = trim( Sanitizer::stripAllTags( $titleHTML ) ); #remove the good tags, leaving the bad tags escaped, and trim it to make sure it comes out pretty
 173+
 174+ #the user can put any sanitized text into the page title used in the <title> attribute, since it is not copy-pasteable like the <h1> tag
 175+ if ($displayTitleTitle == '') {
 176+ $parser->mOutput->setDisplayTitle( $titleText ); #use the stripped contents of <h1>
 177+ } else {
 178+ $parser->mOutput->setDisplayTitle( $displayTitleTitle ); #use what the user explicitly requested, MediaWiki escapes this automatically before it is served out
 179+ }
 180+
172181 if ( !$wgRestrictDisplayTitle ) {
173 - $parser->mOutput->setDisplayTitle( $text );
 182+ $parser->mOutput->setDisplayTitleH1( $titleHTML );
174183 } else {
175 - $title = Title::newFromText( $text );
176 - if( $title instanceof Title && $title->getFragment() == '' && $title->equals( $parser->mTitle ) )
177 - $parser->mOutput->setDisplayTitle( $text );
 184+ #only titles that normalize to the same title are allowed in the <h1> tag
 185+ $title = Title::newFromText( $titleText );
 186+
 187+ if ( $title instanceof Title && $title->getFragment() == '' && $title->equals( $parser->mTitle ) ) {
 188+ $parser->mOutput->setDisplayTitleH1( $titleHTML );
 189+ } else {
 190+ $parser->mOutput->setDisplayTitleH1( $parser->mTitle );
 191+ }
178192 }
 193+
179194 return '';
180195 }
181196
Index: trunk/phase3/includes/EditPage.php
@@ -1083,11 +1083,11 @@
10841084 # Use the title defined by DISPLAYTITLE magic word when present
10851085 if ( isset($this->mParserOutput)
10861086 && ( $dt = $this->mParserOutput->getDisplayTitle() ) !== false ) {
1087 - $title = $dt;
 1087+ $wgOut->setPageTitle( wfMsg( 'editing', $this->mParserOutput->getDisplayTitleH1() ) );
 1088+ $wgOut->setHTMLTitle( wfMsg( 'editing', $dt ) ); #override the HTML that setPageTitle slated for inclusion in the <title>
10881089 } else {
1089 - $title = $wgTitle->getPrefixedText();
 1090+ $wgOut->setPageTitle( wfMsg( 'editing', $wgTitle->getPrefixedText() ) );
10901091 }
1091 - $wgOut->setPageTitle( wfMsg( 'editing', $title ) );
10921092 }
10931093 }
10941094
Index: trunk/phase3/includes/OutputPage.php
@@ -309,7 +309,10 @@
310310 }
311311 }
312312
313 - public function setHTMLTitle( $name ) {$this->mHTMLtitle = $name; }
 313+ # "HTML title" means <title>
 314+ public function setHTMLTitle( $name ) { $this->mHTMLtitle = $name; }
 315+
 316+ # "Page title" means <h1>
314317 public function setPageTitle( $name ) {
315318 global $action, $wgContLang;
316319 $name = $wgContLang->convert($name, true);
@@ -320,7 +323,7 @@
321324 $name .= ' - '.$taction;
322325 }
323326 }
324 -
 327+
325328 $this->setHTMLTitle( wfMsg( 'pagetitle', $name ) );
326329 }
327330 public function getHTMLTitle() { return $this->mHTMLtitle; }
@@ -539,8 +542,10 @@
540543 }
541544 }
542545 // Display title
543 - if( ( $dt = $parserOutput->getDisplayTitle() ) !== false )
544 - $this->setPageTitle( $dt );
 546+ if( ( $displayTitleText = $parserOutput->getDisplayTitle() ) !== false ) {
 547+ $this->setPageTitle( $parserOutput->getDisplayTitleH1() );
 548+ $this->setHTMLTitle( wfMsg( 'pagetitle', $displayTitleText ) ); #override the HTML that setPageTitle slated for inclusion in the <title>
 549+ }
545550
546551 // Hooks registered in the object
547552 global $wgParserOutputHooks;
Index: trunk/phase3/includes/Skin.php
@@ -1013,7 +1013,7 @@
10141014
10151015 function pageTitle() {
10161016 global $wgOut;
1017 - $s = '<h1 class="pagetitle">' . htmlspecialchars( $wgOut->getPageTitle() ) . '</h1>';
 1017+ $s = '<h1 class="pagetitle">' . $wgOut->getPageTitle() . '</h1>';
10181018 return $s;
10191019 }
10201020

Follow-up revisions

RevisionCommit summaryAuthorDate
r44432Revert r44271 "(bug 12998) Weaken DISPLAYTITLE restictions (patch by 'remembe...brion23:21, 10 December 2008
r45181(Bug 12998) Weaken DISPLAYTITLE restictions (patch by rememberthedot@gmail.com)aaron12:22, 30 December 2008
r45226Pull back r45181 "(Bug 12998) Weaken DISPLAYTITLE restictions (patch by remem...brion16:49, 31 December 2008
r49330(bug 12998) Allow <sup>, <sub>, etc. in DISPLAYTITLErememberthedot05:15, 9 April 2009

Comments

#Comment by Brion VIBBER (talk | contribs)   23:21, 10 December 2008

Behavior seems a bit hard to predict, as far as what's going to go in the header and what in the browser window etc. Pulling it back for further testing and discussion.

Reverted in r44432

Status & tagging log