*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
use MediaWiki\Session\SessionManager;
use WrappedString\WrappedString;
use WrappedString\WrappedStringList;
protected $mCategoryLinks = [];
/** @var array */
- protected $mCategories = [];
+ protected $mCategories = [
+ 'hidden' => [],
+ 'normal' => [],
+ ];
/** @var array */
protected $mIndicators = [];
*/
private $copyrightUrl;
- /** @var array Profiling data */
- private $limitReportData = [];
-
/**
* Constructor for OutputPage. This should not be called directly.
* Instead a new RequestContext should be created and it will implicitly create
if ( $title->isRedirect() ) {
$query['redirect'] = 'no';
}
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
return wfMessage( 'backlinksubtitle' )
- ->rawParams( Linker::link( $title, null, [], $query ) );
+ ->rawParams( $linkRenderer->makeLink( $title, null, [], $query ) );
}
/**
/**
* Add new language links
*
- * @param array $newLinkArray Associative array mapping language code to the page
- * name
+ * @param string[] $newLinkArray Array of interwiki-prefixed (non DB key) titles
+ * (e.g. 'fr:Test page')
*/
public function addLanguageLinks( array $newLinkArray ) {
$this->mLanguageLinks += $newLinkArray;
/**
* Reset the language links and add new language links
*
- * @param array $newLinkArray Associative array mapping language code to the page
- * name
+ * @param string[] $newLinkArray Array of interwiki-prefixed (non DB key) titles
+ * (e.g. 'fr:Test page')
*/
public function setLanguageLinks( array $newLinkArray ) {
$this->mLanguageLinks = $newLinkArray;
/**
* Get the list of language links
*
- * @return array Array of Interwiki Prefixed (non DB key) Titles (e.g. 'fr:Test page')
+ * @return string[] Array of interwiki-prefixed (non DB key) titles (e.g. 'fr:Test page')
*/
public function getLanguageLinks() {
return $this->mLanguageLinks;
return;
}
- # Add the links to a LinkBatch
- $arr = [ NS_CATEGORY => $categories ];
- $lb = new LinkBatch;
- $lb->setArray( $arr );
-
- # Fetch existence plus the hiddencat property
- $dbr = wfGetDB( DB_REPLICA );
- $fields = array_merge(
- LinkCache::getSelectFields(),
- [ 'page_namespace', 'page_title', 'pp_value' ]
- );
-
- $res = $dbr->select( [ 'page', 'page_props' ],
- $fields,
- $lb->constructSet( 'page', $dbr ),
- __METHOD__,
- [],
- [ 'page_props' => [ 'LEFT JOIN', [
- 'pp_propname' => 'hiddencat',
- 'pp_page = page_id'
- ] ] ]
- );
-
- # Add the results to the link cache
- $lb->addResultToCache( LinkCache::singleton(), $res );
+ $res = $this->addCategoryLinksToLBAndGetResult( $categories );
# Set all the values to 'normal'.
$categories = array_fill_keys( array_keys( $categories ), 'normal' );
'OutputPageMakeCategoryLinks',
[ &$this, $categories, &$this->mCategoryLinks ] )
) {
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
foreach ( $categories as $category => $type ) {
// array keys will cast numeric category names to ints, so cast back to string
$category = (string)$category;
continue;
}
$text = $wgContLang->convertHtml( $title->getText() );
- $this->mCategories[] = $title->getText();
- $this->mCategoryLinks[$type][] = Linker::link( $title, $text );
+ $this->mCategories[$type][] = $title->getText();
+ $this->mCategoryLinks[$type][] = $linkRenderer->makeLink( $title, new HtmlArmor( $text ) );
}
}
}
+ /**
+ * @param array $categories
+ * @return bool|ResultWrapper
+ */
+ protected function addCategoryLinksToLBAndGetResult( array $categories ) {
+ # Add the links to a LinkBatch
+ $arr = [ NS_CATEGORY => $categories ];
+ $lb = new LinkBatch;
+ $lb->setArray( $arr );
+
+ # Fetch existence plus the hiddencat property
+ $dbr = wfGetDB( DB_REPLICA );
+ $fields = array_merge(
+ LinkCache::getSelectFields(),
+ [ 'page_namespace', 'page_title', 'pp_value' ]
+ );
+
+ $res = $dbr->select( [ 'page', 'page_props' ],
+ $fields,
+ $lb->constructSet( 'page', $dbr ),
+ __METHOD__,
+ [],
+ [ 'page_props' => [ 'LEFT JOIN', [
+ 'pp_propname' => 'hiddencat',
+ 'pp_page = page_id'
+ ] ] ]
+ );
+
+ # Add the results to the link cache
+ $lb->addResultToCache( LinkCache::singleton(), $res );
+
+ return $res;
+ }
+
/**
* Reset the category links (but not the category list) and add $categories
*
}
/**
- * Get the list of category names this page belongs to
+ * Get the list of category names this page belongs to.
*
+ * @param string $type The type of categories which should be returned. Possible values:
+ * * all: all categories of all types
+ * * hidden: only the hidden categories
+ * * normal: all categories, except hidden categories
* @return array Array of strings
*/
- public function getCategories() {
- return $this->mCategories;
+ public function getCategories( $type = 'all' ) {
+ if ( $type === 'all' ) {
+ $allCategories = [];
+ foreach ( $this->mCategories as $categories ) {
+ $allCategories = array_merge( $allCategories, $categories );
+ }
+ return $allCategories;
+ }
+ if ( !isset( $this->mCategories[$type] ) ) {
+ throw new InvalidArgumentException( 'Invalid category type given: ' . $type );
+ }
+ return $this->mCategories[$type];
}
/**
}
}
- // Enable OOUI if requested via ParserOutput
+ // enable OOUI if requested via ParserOutput
if ( $parserOutput->getEnableOOUI() ) {
$this->enableOOUI();
}
- // Include profiling data
- if ( !$this->limitReportData ) {
- $this->setLimitReportData( $parserOutput->getLimitReportData() );
- }
-
// Link flags are ignored for now, but may in the future be
// used to mark individual language links.
$linkFlags = [];
* if there isn't one. This is used by Skin to determine whether to enable
* JavaScript frame-breaking, for clients that don't support X-Frame-Options.
*
- * @return string
+ * @return string|false
*/
public function getFrameOptions() {
$config = $this->getConfig();
$response->header( "Content-Type: text/html; charset=utf-8" );
if ( $config->get( 'DebugRedirects' ) ) {
$url = htmlspecialchars( $redirect );
- print "<html>\n<head>\n<title>Redirect</title>\n</head>\n<body>\n";
+ print "<!DOCTYPE html>\n<html>\n<head>\n<title>Redirect</title>\n</head>\n<body>\n";
print "<p>Location: <a href=\"$url\">$url</a></p>\n";
print "</body>\n</html>\n";
} else {
* @param array $options Options array to pass to Linker
*/
public function addReturnTo( $title, array $query = [], $text = null, $options = [] ) {
+ $linkRenderer = MediaWikiServices::getInstance()
+ ->getLinkRendererFactory()->createFromLegacyOptions( $options );
$link = $this->msg( 'returnto' )->rawParams(
- Linker::link( $title, $text, [], $query, $options ) )->escaped();
+ $linkRenderer->makeLink( $title, $text, [], $query ) )->escaped();
$this->addHTML( "<p id=\"mw-returnto\">{$link}</p>\n" );
}
'site.styles',
'noscript',
'user.styles',
- 'user.cssprefs',
] );
$this->getSkin()->setupSkinUserCss( $this );
// The spec recommends defining XHTML5's charset using the XML declaration
// instead of meta.
// Our XML declaration is output by Html::htmlHeader.
- // http://www.whatwg.org/html/semantics.html#attr-meta-http-equiv-content-type
- // http://www.whatwg.org/html/semantics.html#charset
+ // https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-type
+ // https://html.spec.whatwg.org/multipage/semantics.html#charset
$pieces[] = Html::element( 'meta', [ 'charset' => 'UTF-8' ] );
}
$bodyClasses[] = $userdir;
$bodyClasses[] = "sitedir-$sitedir";
+ $underline = $this->getUser()->getOption( 'underline' );
+ if ( $underline < 2 ) {
+ // The following classes can be used here:
+ // * mw-underline-always
+ // * mw-underline-never
+ $bodyClasses[] = 'mw-underline-' . ( $underline ? 'always' : 'never' );
+ }
+
if ( $this->getLanguage()->capitalizeAllNouns() ) {
# A <body> class is probably not the best way to do this . . .
$bodyClasses[] = 'capitalize-all-nouns';
}
}
- if ( $this->limitReportData ) {
- $chunks[] = ResourceLoader::makeInlineScript(
- ResourceLoader::makeConfigSetScript(
- [ 'wgPageParseReport' => $this->limitReportData ],
- true
- )
- );
- }
-
return self::combineWrappedStrings( $chunks );
}
public static function transformCssMedia( $media ) {
global $wgRequest;
- // http://www.w3.org/TR/css3-mediaqueries/#syntax
+ // https://www.w3.org/TR/css3-mediaqueries/#syntax
$screenMediaQueryRegex = '/^(?:only\s+)?screen\b/i';
// Switch in on-screen display for media testing
'mediawiki.widgets.styles',
] );
}
-
- /**
- * @param array $data Data from ParserOutput::getLimitReportData()
- * @since 1.28
- */
- public function setLimitReportData( array $data ) {
- $this->limitReportData = $data;
- }
}