* @var string The contents of <h1> */
private $mPageTitle = '';
+ /**
+ * @var string The displayed title of the page. Different from page title
+ * if overridden by display title magic word or hooks. Can contain safe
+ * HTML. Different from page title which may contain messages such as
+ * "Editing X" which is displayed in h1. This can be used for other places
+ * where the page name is referred on the page.
+ */
+ private $displayTitle;
+
/**
* @var string Contains all of the "<body>" content. Should be private we
* got set/get accessors and the append() method.
return $this->mPageTitle;
}
+ /**
+ * Same as page title but only contains name of the page, not any other text.
+ *
+ * @since 1.32
+ * @param string $html Page title text.
+ * @see OutputPage::setPageTitle
+ */
+ public function setDisplayTitle( $html ) {
+ $this->displayTitle = $html;
+ }
+
+ /**
+ * Returns page display title.
+ *
+ * Performs some normalization, but this not as strict the magic word.
+ *
+ * @since 1.32
+ * @return string HTML
+ */
+ public function getDisplayTitle() {
+ $html = $this->displayTitle;
+ if ( $html === null ) {
+ $html = $this->getTitle()->getPrefixedText();
+ }
+
+ return Sanitizer::normalizeCharReferences( Sanitizer::removeHTMLtags( $html ) );
+ }
+
+ /**
+ * Returns page display title without namespace prefix if possible.
+ *
+ * @since 1.32
+ * @return string HTML
+ */
+ public function getUnprefixedDisplayTitle() {
+ $text = $this->getDisplayTitle();
+ $nsPrefix = $this->getTitle()->getNsText() . ':';
+ $prefix = preg_quote( $nsPrefix, '/' );
+
+ return preg_replace( "/^$prefix/i", '', $text );
+ }
+
/**
* Set the Title object to use
*
}
/**
- * Add wikitext with a custom Title object
+ * Add wikitext with a custom Title object.
+ * Output is unwrapped.
*
* @param string $text Wikitext
* @param Title $title
$this->addParserOutput( $parserOutput, [
'enableSectionEditLinks' => false,
+ 'wrapperDivClass' => '',
] );
}
foreach ( $this->contentOverrideCallbacks as $callback ) {
$content = $callback( $title );
if ( $content !== null ) {
+ $text = ContentHandler::getContentText( $content );
+ if ( strpos( $text, '</script>' ) !== false ) {
+ // Proactively replace this so that we can display a message
+ // to the user, instead of letting it go to Html::inlineScript(),
+ // where it would be considered a server-side issue.
+ $titleFormatted = $title->getPrefixedText();
+ $content = new JavaScriptContent(
+ Xml::encodeJsCall( 'mw.log.error', [
+ "Cannot preview $titleFormatted due to script-closing tag."
+ ] )
+ );
+ }
return $content;
}
}