From c1f9b1f7b1b77776192048005dcc66dcf3df2bfb Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 27 Dec 2014 15:41:37 +0100 Subject: Update to MediaWiki 1.24.1 --- includes/Linker.php | 991 +++++++++++++++++++++++++--------------------------- 1 file changed, 467 insertions(+), 524 deletions(-) (limited to 'includes/Linker.php') diff --git a/includes/Linker.php b/includes/Linker.php index 23ece751..be850d02 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -25,10 +25,11 @@ * for primarily page content: links, embedded images, table of contents. Links * are also used in the skin. * + * @todo turn this into a legacy interface for HtmlPageLinkRenderer and similar services. + * * @ingroup Skins */ class Linker { - /** * Flags for userToolLinks() */ @@ -39,10 +40,11 @@ class Linker { * Get the appropriate HTML attributes to add to the "a" element of an * external link, as created by [wikisyntax]. * - * @param string $class the contents of the class attribute; if an empty + * @param string $class The contents of the class attribute; if an empty * string is passed, which is the default value, defaults to 'external'. * @return string - * @deprecated since 1.18 Just pass the external class directly to something using Html::expandAttributes + * @deprecated since 1.18 Just pass the external class directly to something + * using Html::expandAttributes. */ static function getExternalLinkAttributes( $class = 'external' ) { wfDeprecated( __METHOD__, '1.18' ); @@ -52,10 +54,10 @@ class Linker { /** * Get the appropriate HTML attributes to add to the "a" element of an interwiki link. * - * @param string $title the title text for the link, URL-encoded (???) but + * @param string $title The title text for the link, URL-encoded (???) but * not HTML-escaped - * @param string $unused unused - * @param string $class the contents of the class attribute; if an empty + * @param string $unused Unused + * @param string $class The contents of the class attribute; if an empty * string is passed, which is the default value, defaults to 'external'. * @return string */ @@ -74,10 +76,10 @@ class Linker { /** * Get the appropriate HTML attributes to add to the "a" element of an internal link. * - * @param string $title the title text for the link, URL-encoded (???) but + * @param string $title The title text for the link, URL-encoded (???) but * not HTML-escaped - * @param string $unused unused - * @param string $class the contents of the class attribute, default none + * @param string $unused Unused + * @param string $class The contents of the class attribute, default none * @return string */ static function getInternalLinkAttributes( $title, $unused = null, $class = '' ) { @@ -90,10 +92,10 @@ class Linker { * Get the appropriate HTML attributes to add to the "a" element of an internal * link, given the Title object for the page we want to link to. * - * @param $nt Title - * @param string $unused unused - * @param string $class the contents of the class attribute, default none - * @param $title Mixed: optional (unescaped) string to use in the title + * @param Title $nt + * @param string $unused Unused + * @param string $class The contents of the class attribute, default none + * @param string|bool $title Optional (unescaped) string to use in the title * attribute; if false, default to the name of the page we're linking to * @return string */ @@ -107,8 +109,8 @@ class Linker { /** * Common code for getLinkAttributesX functions * - * @param $title string - * @param $class string + * @param string $title + * @param string $class * * @return string */ @@ -128,9 +130,9 @@ class Linker { /** * Return the CSS colour of a known link * - * @param $t Title object - * @param $threshold Integer: user defined threshold - * @return String: CSS class + * @param Title $t + * @param int $threshold User defined threshold + * @return string CSS class */ public static function getLinkColour( $t, $threshold ) { $colour = ''; @@ -159,25 +161,22 @@ class Linker { * link() replaces the old functions in the makeLink() family. * * @since 1.18 Method exists since 1.16 as non-static, made static in 1.18. - * You can call it using this if you want to keep compat with these: - * $linker = class_exists( 'DummyLinker' ) ? new DummyLinker() : new Linker(); - * $linker->link( ... ); * - * @param $target Title Can currently only be a Title, but this may + * @param Title $target Can currently only be a Title, but this may * change to support Images, literal URLs, etc. - * @param $html string The HTML contents of the element, i.e., + * @param string $html The HTML contents of the element, i.e., * the link text. This is raw HTML and will not be escaped. If null, * defaults to the prefixed text of the Title; or if the Title is just a * fragment, the contents of the fragment. - * @param array $customAttribs A key => value array of extra HTML attributes, + * @param array $customAttribs A key => value array of extra HTML attributes, * such as title and class. (href is ignored.) Classes will be * merged with the default classes, while other attributes will replace * default attributes. All passed attribute values will be HTML-escaped. * A false attribute value means to suppress that attribute. - * @param $query array The query string to append to the URL + * @param array $query The query string to append to the URL * you're linking to, in key => value array form. Query keys and values * will be URL-encoded. - * @param string|array $options String or array of strings: + * @param string|array $options String or array of strings: * 'known': Page is known to exist, so don't check if it does. * 'broken': Page is known not to exist, so don't check if it does. * 'noclasses': Don't add any classes automatically (includes "new", @@ -193,11 +192,11 @@ class Linker { public static function link( $target, $html = null, $customAttribs = array(), $query = array(), $options = array() ) { - wfProfileIn( __METHOD__ ); if ( !$target instanceof Title ) { - wfProfileOut( __METHOD__ ); + wfWarn( __METHOD__ . ': Requires $target to be a Title object.' ); return "$html"; } + wfProfileIn( __METHOD__ ); if ( is_string( $query ) ) { // some functions withing core using this still hand over query strings @@ -260,30 +259,31 @@ class Linker { /** * Identical to link(), except $options defaults to 'known'. + * @see Linker::link * @return string */ public static function linkKnown( $target, $html = null, $customAttribs = array(), - $query = array(), $options = array( 'known', 'noclasses' ) ) - { + $query = array(), $options = array( 'known', 'noclasses' ) + ) { return self::link( $target, $html, $customAttribs, $query, $options ); } /** * Returns the Url used to link to a Title * - * @param $target Title - * @param array $query query parameters - * @param $options Array - * @return String + * @param Title $target + * @param array $query Query parameters + * @param array $options + * @return string */ private static function linkUrl( $target, $query, $options ) { wfProfileIn( __METHOD__ ); # We don't want to include fragments for broken links, because they # generally make no sense. - if ( in_array( 'broken', $options ) && $target->mFragment !== '' ) { + if ( in_array( 'broken', $options ) && $target->hasFragment() ) { $target = clone $target; - $target->mFragment = ''; + $target->setFragment( '' ); } # If it's a broken link, add the appropriate query pieces, unless @@ -311,9 +311,9 @@ class Linker { /** * Returns the array of attributes used when linking to the Title $target * - * @param $target Title - * @param $attribs - * @param $options + * @param Title $target + * @param array $attribs + * @param array $options * * @return array */ @@ -375,62 +375,44 @@ class Linker { /** * Default text of the links to the Title $target * - * @param $target Title + * @param Title $target * * @return string */ private static function linkText( $target ) { - // We might be passed a non-Title by make*LinkObj(). Fail gracefully. if ( !$target instanceof Title ) { + wfWarn( __METHOD__ . ': Requires $target to be a Title object.' ); return ''; } - // If the target is just a fragment, with no title, we return the fragment // text. Otherwise, we return the title text itself. - if ( $target->getPrefixedText() === '' && $target->getFragment() !== '' ) { + if ( $target->getPrefixedText() === '' && $target->hasFragment() ) { return htmlspecialchars( $target->getFragment() ); } - return htmlspecialchars( $target->getPrefixedText() ); - } - - /** - * Generate either a normal exists-style link or a stub link, depending - * on the given page size. - * - * @param $size Integer - * @param $nt Title object. - * @param $text String - * @param $query String - * @param $trail String - * @param $prefix String - * @return string HTML of link - * @deprecated since 1.17 - */ - static function makeSizeLinkObj( $size, $nt, $text = '', $query = '', $trail = '', $prefix = '' ) { - global $wgUser; - wfDeprecated( __METHOD__, '1.17' ); - $threshold = $wgUser->getStubThreshold(); - $colour = ( $size < $threshold ) ? 'stub' : ''; - // @todo FIXME: Replace deprecated makeColouredLinkObj by link() - return self::makeColouredLinkObj( $nt, $colour, $text, $query, $trail, $prefix ); + return htmlspecialchars( $target->getPrefixedText() ); } /** - * Make appropriate markup for a link to the current article. This is currently rendered - * as the bold link text. The calling sequence is the same as the other make*LinkObj static functions, - * despite $query not being used. + * Make appropriate markup for a link to the current article. This is + * currently rendered as the bold link text. The calling sequence is the + * same as the other make*LinkObj static functions, despite $query not + * being used. * - * @param $nt Title + * @param Title $nt * @param string $html [optional] * @param string $query [optional] * @param string $trail [optional] * @param string $prefix [optional] * - * * @return string */ public static function makeSelfLinkObj( $nt, $html = '', $query = '', $trail = '', $prefix = '' ) { + $ret = "{$prefix}{$html}{$trail}"; + if ( !wfRunHooks( 'SelfLinkBegin', array( $nt, &$html, &$trail, &$prefix, &$ret ) ) ) { + return $ret; + } + if ( $html == '' ) { $html = htmlspecialchars( $nt->getPrefixedText() ); } @@ -443,7 +425,7 @@ class Linker { * This should be called after a method like Title::makeTitleSafe() returned * a value indicating that the title object is invalid. * - * @param $context IContextSource context to use to get the messages + * @param IContextSource $context Context to use to get the messages * @param int $namespace Namespace number * @param string $title Text of the title, without the namespace part * @return string @@ -465,7 +447,7 @@ class Linker { } /** - * @param $title Title + * @param Title $title * @return Title */ static function normaliseSpecialPage( Title $title ) { @@ -474,8 +456,7 @@ class Linker { if ( !$name ) { return $title; } - $ret = SpecialPage::getTitleFor( $name, $subpage ); - $ret->mFragment = $title->getFragment(); + $ret = SpecialPage::getTitleFor( $name, $subpage, $title->getFragment() ); return $ret; } else { return $title; @@ -486,7 +467,7 @@ class Linker { * Returns the filename part of an url. * Used as alternative text for external images. * - * @param $url string + * @param string $url * * @return string */ @@ -504,8 +485,8 @@ class Linker { * Return the code for images which were added via external links, * via Parser::maybeMakeExternalImage(). * - * @param $url - * @param $alt + * @param string $url + * @param string $alt * * @return string */ @@ -516,7 +497,8 @@ class Linker { $img = ''; $success = wfRunHooks( 'LinkerMakeExternalImage', array( &$url, &$alt, &$img ) ); if ( !$success ) { - wfDebug( "Hook LinkerMakeExternalImage changed the output of external image with url {$url} and alt text {$alt} to {$img}\n", true ); + wfDebug( "Hook LinkerMakeExternalImage changed the output of external image " + . "with url {$url} and alt text {$alt} to {$img}\n", true ); return $img; } return Html::element( 'img', @@ -529,10 +511,10 @@ class Linker { * Given parameters derived from [[Image:Foo|options...]], generate the * HTML that that syntax inserts in the page. * - * @param $parser Parser object - * @param $title Title object of the file (not the currently viewed page) - * @param $file File object, or false if it doesn't exist - * @param array $frameParams associative array of parameters external to the media handler. + * @param Parser $parser + * @param Title $title Title object of the file (not the currently viewed page) + * @param File $file File object, or false if it doesn't exist + * @param array $frameParams Associative array of parameters external to the media handler. * Boolean parameters are indicated by presence or absence, the value is arbitrary and * will often be false. * thumbnail If present, downscale and frame @@ -553,17 +535,18 @@ class Linker { * link-target Value for the target attribute, only with link-url * no-link Boolean, suppress description link * - * @param array $handlerParams associative array of media handler parameters, to be passed + * @param array $handlerParams Associative array of media handler parameters, to be passed * to transform(). Typical keys are "width" and "page". - * @param string $time timestamp of the file, set as false for current - * @param string $query query params for desc url - * @param $widthOption: Used by the parser to remember the user preference thumbnailsize + * @param string|bool $time Timestamp of the file, set as false for current + * @param string $query Query params for desc url + * @param int|null $widthOption Used by the parser to remember the user preference thumbnailsize * @since 1.20 - * @return String: HTML for an image, with links, wrappers, etc. + * @return string HTML for an image, with links, wrappers, etc. */ - public static function makeImageLink( /*Parser*/ $parser, Title $title, $file, $frameParams = array(), - $handlerParams = array(), $time = false, $query = "", $widthOption = null ) - { + public static function makeImageLink( Parser $parser, Title $title, + $file, $frameParams = array(), $handlerParams = array(), $time = false, + $query = "", $widthOption = null + ) { $res = null; $dummy = new DummyLinker; if ( !wfRunHooks( 'ImageBeforeProduceHTML', array( &$dummy, &$title, @@ -612,8 +595,14 @@ class Linker { $hp['width'] = $file->getWidth( $page ); } - if ( isset( $fp['thumbnail'] ) || isset( $fp['manualthumb'] ) || isset( $fp['framed'] ) || isset( $fp['frameless'] ) || !$hp['width'] ) { + if ( isset( $fp['thumbnail'] ) + || isset( $fp['manualthumb'] ) + || isset( $fp['framed'] ) + || isset( $fp['frameless'] ) + || !$hp['width'] + ) { global $wgThumbLimits, $wgThumbUpright; + if ( $widthOption === null || !isset( $wgThumbLimits[$widthOption] ) ) { $widthOption = User::getDefaultOption( 'thumbsize' ); } @@ -622,7 +611,10 @@ class Linker { if ( isset( $fp['upright'] ) && $fp['upright'] == 0 ) { $fp['upright'] = $wgThumbUpright; } - // For caching health: If width scaled down due to upright parameter, round to full __0 pixel to avoid the creation of a lot of odd thumbs + + // For caching health: If width scaled down due to upright + // parameter, round to full __0 pixel to avoid the creation of a + // lot of odd thumbs. $prefWidth = isset( $fp['upright'] ) ? round( $wgThumbLimits[$widthOption] * $fp['upright'], -1 ) : $wgThumbLimits[$widthOption]; @@ -644,21 +636,16 @@ class Linker { # If a thumbnail width has not been provided, it is set # to the default user option as specified in Language*.php if ( $fp['align'] == '' ) { - if ( $parser instanceof Parser ) { - $fp['align'] = $parser->getTargetLanguage()->alignEnd(); - } else { - # backwards compatibility, remove with makeImageLink2() - global $wgContLang; - $fp['align'] = $wgContLang->alignEnd(); - } + $fp['align'] = $parser->getTargetLanguage()->alignEnd(); } return $prefix . self::makeThumbLink2( $title, $file, $fp, $hp, $time, $query ) . $postfix; } if ( $file && isset( $fp['frameless'] ) ) { $srcWidth = $file->getWidth( $page ); - # For "frameless" option: do not present an image bigger than the source (for bitmap-style images) - # This is the same behavior as the "thumb" option does it already. + # For "frameless" option: do not present an image bigger than the + # source (for bitmap-style images). This is the same behavior as the + # "thumb" option does it already. if ( $srcWidth && !$file->mustRender() && $hp['width'] > $srcWidth ) { $hp['width'] = $srcWidth; } @@ -681,8 +668,7 @@ class Linker { 'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false, 'img-class' => $fp['class'] ); if ( isset( $fp['border'] ) ) { - // TODO: BUG? Both values are identical - $params['img-class'] .= ( $params['img-class'] !== '' ) ? ' thumbborder' : 'thumbborder'; + $params['img-class'] .= ( $params['img-class'] !== '' ? ' ' : '' ) . 'thumbborder'; } $params = self::getImageLinkMTOParams( $fp, $query, $parser ) + $params; @@ -710,6 +696,7 @@ class Linker { * frame parameters supplied by the Parser. * @param array $frameParams The frame parameters * @param string $query An optional query string to add to description page links + * @param Parser|null $parser * @return array */ private static function getImageLinkMTOParams( $frameParams, $query = '', $parser = null ) { @@ -739,19 +726,19 @@ class Linker { /** * Make HTML for a thumbnail including image, border and caption - * @param $title Title object - * @param $file File object or false if it doesn't exist - * @param $label String - * @param $alt String - * @param $align String - * @param $params Array - * @param $framed Boolean - * @param $manualthumb String - * @return mixed + * @param Title $title + * @param File|bool $file File object or false if it doesn't exist + * @param string $label + * @param string $alt + * @param string $align + * @param array $params + * @param bool $framed + * @param string $manualthumb + * @return string */ public static function makeThumbLinkObj( Title $title, $file, $label = '', $alt, - $align = 'right', $params = array(), $framed = false, $manualthumb = "" ) - { + $align = 'right', $params = array(), $framed = false, $manualthumb = "" + ) { $frameParams = array( 'alt' => $alt, 'caption' => $label, @@ -767,18 +754,17 @@ class Linker { } /** - * @param $title Title - * @param $file File + * @param Title $title + * @param File $file * @param array $frameParams * @param array $handlerParams * @param bool $time * @param string $query - * @return mixed + * @return string */ public static function makeThumbLink2( Title $title, $file, $frameParams = array(), - $handlerParams = array(), $time = false, $query = "" ) - { - global $wgStylePath, $wgContLang; + $handlerParams = array(), $time = false, $query = "" + ) { $exists = $file && $file->exists(); # Shortcuts @@ -850,14 +836,16 @@ class Linker { if ( $page ) { $url = wfAppendQuery( $url, array( 'page' => $page ) ); } - if ( $manualthumb && - !isset( $fp['link-title'] ) && - !isset( $fp['link-url'] ) && - !isset( $fp['no-link'] ) ) { + if ( $manualthumb + && !isset( $fp['link-title'] ) + && !isset( $fp['link-url'] ) + && !isset( $fp['no-link'] ) ) { $fp['link-url'] = $url; } - $s = "
"; + $s = "
" + . "
"; + if ( !$exists ) { $s .= self::makeBrokenImageLinkObj( $title, $fp['title'], '', '', '', $time == true ); $zoomIcon = ''; @@ -871,7 +859,9 @@ class Linker { $params = array( 'alt' => $fp['alt'], 'title' => $fp['title'], - 'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== '' ) ? $fp['class'] . ' thumbimage' : 'thumbimage' + 'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== '' + ? $fp['class'] . ' ' + : '' ) . 'thumbimage' ); $params = self::getImageLinkMTOParams( $fp, $query ) + $params; $s .= $thumb->toHtml( $params ); @@ -883,11 +873,7 @@ class Linker { 'href' => $url, 'class' => 'internal', 'title' => wfMessage( 'thumbnail-more' )->text() ), - Html::element( 'img', array( - 'src' => $wgStylePath . '/common/images/magnify-clip' . ( $wgContLang->isRTL() ? '-rtl' : '' ) . '.png', - 'width' => 15, - 'height' => 11, - 'alt' => "" ) ) ) ); + "" ) ); } } $s .= '
' . $zoomIcon . $fp['caption'] . "
"; @@ -899,12 +885,12 @@ class Linker { * applicable. * * @param File $file - * @param MediaOutput $thumb - * @param array $hp image parameters + * @param MediaTransformOutput $thumb + * @param array $hp Image parameters */ - protected static function processResponsiveImages( $file, $thumb, $hp ) { + public static function processResponsiveImages( $file, $thumb, $hp ) { global $wgResponsiveImages; - if ( $wgResponsiveImages ) { + if ( $wgResponsiveImages && $thumb && !$thumb->isError() ) { $hp15 = $hp; $hp15['width'] = round( $hp['width'] * 1.5 ); $hp20 = $hp; @@ -916,11 +902,11 @@ class Linker { $thumb15 = $file->transform( $hp15 ); $thumb20 = $file->transform( $hp20 ); - if ( $thumb15->url !== $thumb->url ) { - $thumb->responsiveUrls['1.5'] = $thumb15->url; + if ( $thumb15 && !$thumb15->isError() && $thumb15->getUrl() !== $thumb->getUrl() ) { + $thumb->responsiveUrls['1.5'] = $thumb15->getUrl(); } - if ( $thumb20->url !== $thumb->url ) { - $thumb->responsiveUrls['2'] = $thumb20->url; + if ( $thumb20 && !$thumb20->isError() && $thumb20->getUrl() !== $thumb->getUrl() ) { + $thumb->responsiveUrls['2'] = $thumb20->getUrl(); } } } @@ -928,19 +914,23 @@ class Linker { /** * Make a "broken" link to an image * - * @param $title Title object - * @param string $label link label (plain text) - * @param string $query query string - * @param $unused1 Unused parameter kept for b/c - * @param $unused2 Unused parameter kept for b/c - * @param $time Boolean: a file of a certain timestamp was requested - * @return String + * @param Title $title + * @param string $label Link label (plain text) + * @param string $query Query string + * @param string $unused1 Unused parameter kept for b/c + * @param string $unused2 Unused parameter kept for b/c + * @param bool $time A file of a certain timestamp was requested + * @return string */ - public static function makeBrokenImageLinkObj( $title, $label = '', $query = '', $unused1 = '', $unused2 = '', $time = false ) { - global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl; - if ( ! $title instanceof Title ) { + public static function makeBrokenImageLinkObj( $title, $label = '', + $query = '', $unused1 = '', $unused2 = '', $time = false + ) { + if ( !$title instanceof Title ) { + wfWarn( __METHOD__ . ': Requires $title to be a Title object.' ); return "" . htmlspecialchars( $label ); } + + global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl; wfProfileIn( __METHOD__ ); if ( $label == '' ) { $label = $title->getPrefixedText(); @@ -948,7 +938,9 @@ class Linker { $encLabel = htmlspecialchars( $label ); $currentExists = $time ? ( wfFindFile( $title ) != false ) : false; - if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads ) && !$currentExists ) { + if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads ) + && !$currentExists + ) { $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title ); if ( $redir ) { @@ -971,9 +963,9 @@ class Linker { /** * Get the URL to upload a certain file * - * @param $destFile Title object of the file to upload - * @param string $query urlencoded query string to prepend - * @return String: urlencoded URL + * @param Title $destFile Title object of the file to upload + * @param string $query Urlencoded query string to prepend + * @return string Urlencoded URL */ protected static function getUploadUrl( $destFile, $query = '' ) { global $wgUploadMissingFileUrl, $wgUploadNavigationUrl; @@ -995,10 +987,10 @@ class Linker { /** * Create a direct link to a given uploaded file. * - * @param $title Title object. - * @param string $html pre-sanitized HTML + * @param Title $title + * @param string $html Pre-sanitized HTML * @param string $time MW timestamp of file creation time - * @return String: HTML + * @return string HTML */ public static function makeMediaLinkObj( $title, $html = '', $time = false ) { $img = wfFindFile( $title, array( 'time' => $time ) ); @@ -1009,10 +1001,10 @@ class Linker { * Create a direct link to a given uploaded file. * This will make a broken link if $file is false. * - * @param $title Title object. - * @param $file File|bool mixed File object or false - * @param string $html pre-sanitized HTML - * @return String: HTML + * @param Title $title + * @param File|bool $file File object or false + * @param string $html Pre-sanitized HTML + * @return string HTML * * @todo Handle invalid or missing images better. */ @@ -1024,12 +1016,27 @@ class Linker { $url = self::getUploadUrl( $title ); $class = 'new'; } - $alt = htmlspecialchars( $title->getText(), ENT_QUOTES ); + + $alt = $title->getText(); if ( $html == '' ) { $html = $alt; } - $u = htmlspecialchars( $url ); - return "
{$html}"; + + $ret = ''; + $attribs = array( + 'href' => $url, + 'class' => $class, + 'title' => $alt + ); + + if ( !wfRunHooks( 'LinkerMakeMediaLinkFile', + array( $title, $file, &$html, &$attribs, &$ret ) ) ) { + wfDebug( "Hook LinkerMakeMediaLinkFile changed the output of link " + . "with url {$url} and text {$html} to {$ret}\n", true ); + return $ret; + } + + return Html::rawElement( 'a', $attribs, $html ); } /** @@ -1037,6 +1044,8 @@ class Linker { * a message key from the link text. * Usage example: Linker::specialLink( 'Recentchanges' ) * + * @param string $name + * @param string $key * @return string */ public static function specialLink( $name, $key = '' ) { @@ -1050,14 +1059,16 @@ class Linker { /** * Make an external link * @param string $url URL to link to - * @param string $text text of link - * @param $escape Boolean: do we escape the link text? - * @param string $linktype type of external link. Gets added to the classes - * @param array $attribs of extra attributes to - * @param $title Title|null Title object used for title specific link attributes + * @param string $text Text of link + * @param bool $escape Do we escape the link text? + * @param string $linktype Type of external link. Gets added to the classes + * @param array $attribs Array of extra attributes to + * @param Title|null $title Title object used for title specific link attributes * @return string */ - public static function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array(), $title = null ) { + public static function makeExternalLink( $url, $text, $escape = true, + $linktype = '', $attribs = array(), $title = null + ) { global $wgTitle; $class = "external"; if ( $linktype ) { @@ -1080,7 +1091,8 @@ class Linker { $success = wfRunHooks( 'LinkerMakeExternalLink', array( &$url, &$text, &$link, &$attribs, $linktype ) ); if ( !$success ) { - wfDebug( "Hook LinkerMakeExternalLink changed the output of link with url {$url} and text {$text} to {$link}\n", true ); + wfDebug( "Hook LinkerMakeExternalLink changed the output of link " + . "with url {$url} and text {$text} to {$link}\n", true ); return $link; } $attribs['href'] = $url; @@ -1089,18 +1101,20 @@ class Linker { /** * Make user link (or user contributions for unregistered users) - * @param $userId Integer: user id in database. - * @param string $userName user name in database. - * @param string $altUserName text to display instead of the user name (optional) - * @return String: HTML fragment + * @param int $userId User id in database. + * @param string $userName User name in database. + * @param string $altUserName Text to display instead of the user name (optional) + * @return string HTML fragment * @since 1.19 Method exists for a long time. $altUserName was added in 1.19. */ public static function userLink( $userId, $userName, $altUserName = false ) { + $classes = 'mw-userlink'; if ( $userId == 0 ) { $page = SpecialPage::getTitleFor( 'Contributions', $userName ); if ( $altUserName === false ) { $altUserName = IP::prettifyIP( $userName ); } + $classes .= ' mw-anonuserlink'; // Separate link class for anons (bug 43179) } else { $page = Title::makeTitle( NS_USER, $userName ); } @@ -1108,20 +1122,21 @@ class Linker { return self::link( $page, htmlspecialchars( $altUserName !== false ? $altUserName : $userName ), - array( 'class' => 'mw-userlink' ) + array( 'class' => $classes ) ); } /** * Generate standard user tool links (talk, contributions, block link, etc.) * - * @param $userId Integer: user identifier - * @param string $userText user name or IP address - * @param $redContribsWhenNoEdits Boolean: should the contributions link be - * red if the user has no edits? - * @param $flags Integer: customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK and Linker::TOOL_LINKS_EMAIL) - * @param $edits Integer: user edit count (optional, for performance) - * @return String: HTML fragment + * @param int $userId User identifier + * @param string $userText User name or IP address + * @param bool $redContribsWhenNoEdits Should the contributions link be + * red if the user has no edits? + * @param int $flags Customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK + * and Linker::TOOL_LINKS_EMAIL). + * @param int $edits User edit count (optional, for performance) + * @return string HTML fragment */ public static function userToolLinks( $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits = null @@ -1173,19 +1188,19 @@ class Linker { /** * Alias for userToolLinks( $userId, $userText, true ); - * @param $userId Integer: user identifier - * @param string $userText user name or IP address - * @param $edits Integer: user edit count (optional, for performance) - * @return String + * @param int $userId User identifier + * @param string $userText User name or IP address + * @param int $edits User edit count (optional, for performance) + * @return string */ public static function userToolLinksRedContribs( $userId, $userText, $edits = null ) { return self::userToolLinks( $userId, $userText, true, 0, $edits ); } /** - * @param $userId Integer: user id in database. - * @param string $userText user name in database. - * @return String: HTML fragment with user talk link + * @param int $userId User id in database. + * @param string $userText User name in database. + * @return string HTML fragment with user talk link */ public static function userTalkLink( $userId, $userText ) { $userTalkPage = Title::makeTitle( NS_USER_TALK, $userText ); @@ -1194,9 +1209,9 @@ class Linker { } /** - * @param $userId Integer: userid - * @param string $userText user name in database. - * @return String: HTML fragment with block link + * @param int $userId Userid + * @param string $userText User name in database. + * @return string HTML fragment with block link */ public static function blockLink( $userId, $userText ) { $blockPage = SpecialPage::getTitleFor( 'Block', $userText ); @@ -1205,9 +1220,9 @@ class Linker { } /** - * @param $userId Integer: userid - * @param string $userText user name in database. - * @return String: HTML fragment with e-mail user link + * @param int $userId Userid + * @param string $userText User name in database. + * @return string HTML fragment with e-mail user link */ public static function emailLink( $userId, $userText ) { $emailPage = SpecialPage::getTitleFor( 'Emailuser', $userText ); @@ -1217,9 +1232,9 @@ class Linker { /** * Generate a user link if the current user is allowed to view it - * @param $rev Revision object. - * @param $isPublic Boolean: show only if all users can see it - * @return String: HTML fragment + * @param Revision $rev + * @param bool $isPublic Show only if all users can see it + * @return string HTML fragment */ public static function revUserLink( $rev, $isPublic = false ) { if ( $rev->isDeleted( Revision::DELETED_USER ) && $isPublic ) { @@ -1238,8 +1253,8 @@ class Linker { /** * Generate a user tool link cluster if the current user is allowed to view it - * @param $rev Revision object. - * @param $isPublic Boolean: show only if all users can see it + * @param Revision $rev + * @param bool $isPublic Show only if all users can see it * @return string HTML */ public static function revUserTools( $rev, $isPublic = false ) { @@ -1272,10 +1287,10 @@ class Linker { * Since you can't set a default parameter for a reference, I've turned it * temporarily to a value pass. Should be adjusted further. --brion * - * @param $comment String - * @param $title Mixed: Title object (to generate link to the section in autocomment) or null - * @param $local Boolean: whether section links should refer to local page - * @return mixed|String + * @param string $comment + * @param Title|null $title Title object (to generate link to the section in autocomment) or null + * @param bool $local Whether section links should refer to local page + * @return mixed|string */ public static function formatComment( $comment, $title = null, $local = false ) { wfProfileIn( __METHOD__ ); @@ -1293,12 +1308,6 @@ class Linker { return $comment; } - /** - * @var Title - */ - static $autocommentTitle; - static $autocommentLocal; - /** * Converts autogenerated comments in edit summaries into section links. * The pattern for autogen comments is / * foo * /, which makes for @@ -1307,99 +1316,77 @@ class Linker { * add a separator where needed and format the comment itself with CSS * Called by Linker::formatComment. * - * @param string $comment comment text - * @param $title Title|null An optional title object used to links to sections - * @param $local Boolean: whether section links should refer to local page - * @return String: formatted comment + * @param string $comment Comment text + * @param Title|null $title An optional title object used to links to sections + * @param bool $local Whether section links should refer to local page + * @return string Formatted comment */ private static function formatAutocomments( $comment, $title = null, $local = false ) { - // Bah! - self::$autocommentTitle = $title; - self::$autocommentLocal = $local; - $comment = preg_replace_callback( + return preg_replace_callback( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', - array( 'Linker', 'formatAutocommentsCallback' ), - $comment ); - self::$autocommentTitle = null; - self::$autocommentLocal = null; - return $comment; - } - - /** - * Helper function for Linker::formatAutocomments - * @param $match - * @return string - */ - private static function formatAutocommentsCallback( $match ) { - global $wgLang; - $title = self::$autocommentTitle; - $local = self::$autocommentLocal; - - $pre = $match[1]; - $auto = $match[2]; - $post = $match[3]; - $comment = null; - wfRunHooks( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) ); - if ( $comment === null ) { - $link = ''; - if ( $title ) { - $section = $auto; - - # Remove links that a user may have manually put in the autosummary - # This could be improved by copying as much of Parser::stripSectionName as desired. - $section = str_replace( '[[:', '', $section ); - $section = str_replace( '[[', '', $section ); - $section = str_replace( ']]', '', $section ); - - $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # bug 22784 - if ( $local ) { - $sectionTitle = Title::newFromText( '#' . $section ); - } else { - $sectionTitle = Title::makeTitleSafe( $title->getNamespace(), - $title->getDBkey(), $section ); - } - if ( $sectionTitle ) { - $link = self::link( $sectionTitle, - $wgLang->getArrow(), array(), array(), - 'noclasses' ); - } else { + function ( $match ) use ( $title, $local ) { + global $wgLang; + + $pre = $match[1]; + $auto = $match[2]; + $post = $match[3]; + $comment = null; + wfRunHooks( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) ); + if ( $comment === null ) { $link = ''; + if ( $title ) { + $section = $auto; + # Remove links that a user may have manually put in the autosummary + # This could be improved by copying as much of Parser::stripSectionName as desired. + $section = str_replace( '[[:', '', $section ); + $section = str_replace( '[[', '', $section ); + $section = str_replace( ']]', '', $section ); + + $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # bug 22784 + if ( $local ) { + $sectionTitle = Title::newFromText( '#' . $section ); + } else { + $sectionTitle = Title::makeTitleSafe( $title->getNamespace(), + $title->getDBkey(), $section ); + } + if ( $sectionTitle ) { + $link = Linker::link( $sectionTitle, + $wgLang->getArrow(), array(), array(), + 'noclasses' ); + } else { + $link = ''; + } + } + if ( $pre ) { + # written summary $presep autocomment (summary /* section */) + $pre .= wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped(); + } + if ( $post ) { + # autocomment $postsep written summary (/* section */ summary) + $auto .= wfMessage( 'colon-separator' )->inContentLanguage()->escaped(); + } + $auto = '' . $auto . ''; + $comment = $pre . $link . $wgLang->getDirMark() + . '' . $auto . $post . ''; } - } - if ( $pre ) { - # written summary $presep autocomment (summary /* section */) - $pre .= wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped(); - } - if ( $post ) { - # autocomment $postsep written summary (/* section */ summary) - $auto .= wfMessage( 'colon-separator' )->inContentLanguage()->escaped(); - } - $auto = '' . $auto . ''; - $comment = $pre . $link . $wgLang->getDirMark() . '' . $auto . $post . ''; - } - return $comment; + return $comment; + }, + $comment + ); } - /** - * @var Title - */ - static $commentContextTitle; - static $commentLocal; - /** * Formats wiki links and media links in text; all other wiki formatting * is ignored * * @todo FIXME: Doesn't handle sub-links as in image thumb texts like the main parser - * @param string $comment text to format links in - * @param $title Title|null An optional title object used to links to sections - * @param $local Boolean: whether section links should refer to local page - * @return String + * @param string $comment Text to format links in + * @param Title|null $title An optional title object used to links to sections + * @param bool $local Whether section links should refer to local page + * @return string */ public static function formatLinksInComment( $comment, $title = null, $local = false ) { - self::$commentContextTitle = $title; - self::$commentLocal = $local; - $html = preg_replace_callback( + return preg_replace_callback( '/ \[\[ :? # ignore optional leading colon @@ -1412,89 +1399,89 @@ class Linker { \]\] ([^[]*) # 3. link trail (the text up until the next link) /x', - array( 'Linker', 'formatLinksInCommentCallback' ), - $comment ); - self::$commentContextTitle = null; - self::$commentLocal = null; - return $html; - } - - /** - * @param $match - * @return mixed - */ - protected static function formatLinksInCommentCallback( $match ) { - global $wgContLang; + function ( $match ) use ( $title, $local ) { + global $wgContLang; - $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|'; - $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):'; + $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|'; + $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):'; - $comment = $match[0]; + $comment = $match[0]; - # fix up urlencoded title texts (copied from Parser::replaceInternalLinks) - if ( strpos( $match[1], '%' ) !== false ) { - $match[1] = str_replace( array( '<', '>' ), array( '<', '>' ), rawurldecode( $match[1] ) ); - } + # fix up urlencoded title texts (copied from Parser::replaceInternalLinks) + if ( strpos( $match[1], '%' ) !== false ) { + $match[1] = str_replace( + array( '<', '>' ), + array( '<', '>' ), + rawurldecode( $match[1] ) + ); + } - # Handle link renaming [[foo|text]] will show link as "text" - if ( $match[2] != "" ) { - $text = $match[2]; - } else { - $text = $match[1]; - } - $submatch = array(); - $thelink = null; - if ( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) { - # Media link; trail not supported. - $linkRegexp = '/\[\[(.*?)\]\]/'; - $title = Title::makeTitleSafe( NS_FILE, $submatch[1] ); - if ( $title ) { - $thelink = self::makeMediaLinkObj( $title, $text ); - } - } else { - # Other kind of link - if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) { - $trail = $submatch[1]; - } else { - $trail = ""; - } - $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/'; - if ( isset( $match[1][0] ) && $match[1][0] == ':' ) { - $match[1] = substr( $match[1], 1 ); - } - list( $inside, $trail ) = self::splitTrail( $trail ); - - $linkText = $text; - $linkTarget = self::normalizeSubpageLink( self::$commentContextTitle, - $match[1], $linkText ); - - $target = Title::newFromText( $linkTarget ); - if ( $target ) { - if ( $target->getText() == '' && $target->getInterwiki() === '' - && !self::$commentLocal && self::$commentContextTitle ) - { - $newTarget = clone ( self::$commentContextTitle ); - $newTarget->setFragment( '#' . $target->getFragment() ); - $target = $newTarget; + # Handle link renaming [[foo|text]] will show link as "text" + if ( $match[2] != "" ) { + $text = $match[2]; + } else { + $text = $match[1]; + } + $submatch = array(); + $thelink = null; + if ( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) { + # Media link; trail not supported. + $linkRegexp = '/\[\[(.*?)\]\]/'; + $title = Title::makeTitleSafe( NS_FILE, $submatch[1] ); + if ( $title ) { + $thelink = Linker::makeMediaLinkObj( $title, $text ); + } + } else { + # Other kind of link + if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) { + $trail = $submatch[1]; + } else { + $trail = ""; + } + $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/'; + if ( isset( $match[1][0] ) && $match[1][0] == ':' ) { + $match[1] = substr( $match[1], 1 ); + } + list( $inside, $trail ) = Linker::splitTrail( $trail ); + + $linkText = $text; + $linkTarget = Linker::normalizeSubpageLink( $title, $match[1], $linkText ); + + $target = Title::newFromText( $linkTarget ); + if ( $target ) { + if ( $target->getText() == '' && !$target->isExternal() + && !$local && $title + ) { + $newTarget = clone ( $title ); + $newTarget->setFragment( '#' . $target->getFragment() ); + $target = $newTarget; + } + $thelink = Linker::link( + $target, + $linkText . $inside + ) . $trail; + } + } + if ( $thelink ) { + // If the link is still valid, go ahead and replace it in! + $comment = preg_replace( + $linkRegexp, + StringUtils::escapeRegexReplacement( $thelink ), + $comment, + 1 + ); } - $thelink = self::link( - $target, - $linkText . $inside - ) . $trail; - } - } - if ( $thelink ) { - // If the link is still valid, go ahead and replace it in! - $comment = preg_replace( $linkRegexp, StringUtils::escapeRegexReplacement( $thelink ), $comment, 1 ); - } - return $comment; + return $comment; + }, + $comment + ); } /** - * @param $contextTitle Title - * @param $target - * @param $text + * @param Title $contextTitle + * @param string $target + * @param string $text * @return string */ public static function normalizeSubpageLink( $contextTitle, $target, &$text ) { @@ -1573,9 +1560,9 @@ class Linker { * Wrap a comment in standard punctuation and formatting if * it's non-empty, otherwise return empty string. * - * @param $comment String - * @param $title Mixed: Title object (to generate link to section in autocomment) or null - * @param $local Boolean: whether section links should refer to local page + * @param string $comment + * @param Title|null $title Title object (to generate link to section in autocomment) or null + * @param bool $local Whether section links should refer to local page * * @return string */ @@ -1596,10 +1583,10 @@ class Linker { * Wrap and format the given revision's comment block, if the current * user is allowed to view it. * - * @param $rev Revision object - * @param $local Boolean: whether section links should refer to local page - * @param $isPublic Boolean: show only if all users can see it - * @return String: HTML fragment + * @param Revision $rev + * @param bool $local Whether section links should refer to local page + * @param bool $isPublic Show only if all users can see it + * @return string HTML fragment */ public static function revComment( Revision $rev, $local = false, $isPublic = false ) { if ( $rev->getRawComment() == "" ) { @@ -1620,7 +1607,7 @@ class Linker { } /** - * @param $size + * @param int $size * @return string */ public static function formatRevisionSize( $size ) { @@ -1645,6 +1632,7 @@ class Linker { /** * Finish one or more sublevels on the Table of Contents * + * @param int $level * @return string */ public static function tocUnindent( $level ) { @@ -1654,6 +1642,11 @@ class Linker { /** * parameter level defines if we are on an indentation level * + * @param string $anchor + * @param string $tocline + * @param string $tocnumber + * @param string $level + * @param string|bool $sectionIndex * @return string */ public static function tocLine( $anchor, $tocline, $tocnumber, $level, $sectionIndex = false ) { @@ -1680,9 +1673,9 @@ class Linker { /** * Wraps the TOC in a table and provides the hide/collapse javascript. * - * @param string $toc html of the Table Of Contents - * @param $lang String|Language|false: Language for the toc title, defaults to user language - * @return String: full html of the TOC + * @param string $toc Html of the Table Of Contents + * @param string|Language|bool $lang Language for the toc title, defaults to user language + * @return string Full html of the TOC */ public static function tocList( $toc, $lang = false ) { $lang = wfGetLangObj( $lang ); @@ -1699,7 +1692,7 @@ class Linker { * Currently unused. * * @param array $tree Return value of ParserOutput::getSections() - * @return String: HTML fragment + * @return string HTML fragment */ public static function generateTOC( $tree ) { $toc = ''; @@ -1726,19 +1719,21 @@ class Linker { /** * Create a headline for content * - * @param $level Integer: the level of the headline (1-6) - * @param string $attribs any attributes for the headline, starting with - * a space and ending with '>' - * This *must* be at least '>' for no attribs - * @param string $anchor the anchor to give the headline (the bit after the #) - * @param string $html html for the text of the header + * @param int $level The level of the headline (1-6) + * @param string $attribs Any attributes for the headline, starting with + * a space and ending with '>' + * This *must* be at least '>' for no attribs + * @param string $anchor The anchor to give the headline (the bit after the #) + * @param string $html Html for the text of the header * @param string $link HTML to add for the section edit link - * @param $legacyAnchor Mixed: a second, optional anchor to give for + * @param bool|string $legacyAnchor A second, optional anchor to give for * backward compatibility (false to omit) * - * @return String: HTML headline + * @return string HTML headline */ - public static function makeHeadline( $level, $attribs, $anchor, $html, $link, $legacyAnchor = false ) { + public static function makeHeadline( $level, $attribs, $anchor, $html, + $link, $legacyAnchor = false + ) { $ret = "$html" . $link @@ -1752,6 +1747,7 @@ class Linker { /** * Split a link trail, return the "inside" portion and the remainder of the trail * as a two-element array + * @param string $trail * @return array */ static function splitTrail( $trail ) { @@ -1788,15 +1784,18 @@ class Linker { * * If the option noBrackets is set the rollback link wont be enclosed in [] * - * @param $rev Revision object - * @param $context IContextSource context to use or null for the main context. - * @param $options array + * @param Revision $rev + * @param IContextSource $context Context to use or null for the main context. + * @param array $options * @return string */ - public static function generateRollback( $rev, IContextSource $context = null, $options = array( 'verify' ) ) { + public static function generateRollback( $rev, IContextSource $context = null, + $options = array( 'verify' ) + ) { if ( $context === null ) { $context = RequestContext::getMain(); } + $editCount = false; if ( in_array( 'verify', $options ) ) { $editCount = self::getRollbackEditCount( $rev, true ); @@ -1825,9 +1824,9 @@ class Linker { * Returns null if $wgShowRollbackEditCount is disabled or false if $verify * is set and the user is the only contributor of the page. * - * @param $rev Revision object + * @param Revision $rev * @param bool $verify Try to verify that this revision can really be rolled back - * @return integer|bool|null + * @return int|bool|null */ public static function getRollbackEditCount( $rev, $verify ) { global $wgShowRollbackEditCount; @@ -1856,9 +1855,13 @@ class Linker { $moreRevs = false; foreach ( $res as $row ) { if ( $rev->getRawUserText() != $row->rev_user_text ) { - if ( $verify && ( $row->rev_deleted & Revision::DELETED_TEXT || $row->rev_deleted & Revision::DELETED_USER ) ) { - // If the user or the text of the revision we might rollback to is deleted in some way we can't rollback - // Similar to the sanity checks in WikiPage::commitRollback + if ( $verify && + ( $row->rev_deleted & Revision::DELETED_TEXT + || $row->rev_deleted & Revision::DELETED_USER + ) ) { + // If the user or the text of the revision we might rollback + // to is deleted in some way we can't rollback. Similar to + // the sanity checks in WikiPage::commitRollback. return false; } $moreRevs = true; @@ -1879,12 +1882,14 @@ class Linker { /** * Build a raw rollback link, useful for collections of "tool" links * - * @param $rev Revision object - * @param $context IContextSource context to use or null for the main context. - * @param $editCount integer Number of edits that would be reverted - * @return String: HTML fragment + * @param Revision $rev + * @param IContextSource|null $context Context to use or null for the main context. + * @param int $editCount Number of edits that would be reverted + * @return string HTML fragment */ - public static function buildRollbackLink( $rev, IContextSource $context = null, $editCount = false ) { + public static function buildRollbackLink( $rev, IContextSource $context = null, + $editCount = false + ) { global $wgShowRollbackEditCount, $wgMiserMode; // To config which pages are effected by miser mode @@ -1898,7 +1903,10 @@ class Linker { $query = array( 'action' => 'rollback', 'from' => $rev->getUserText(), - 'token' => $context->getUser()->getEditToken( array( $title->getPrefixedText(), $rev->getUserText() ) ), + 'token' => $context->getUser()->getEditToken( array( + $title->getPrefixedText(), + $rev->getUserText() + ) ), ); if ( $context->getRequest()->getBool( 'bot' ) ) { $query['bot'] = '1'; @@ -1915,13 +1923,17 @@ class Linker { } } - if ( !$disableRollbackEditCount && is_int( $wgShowRollbackEditCount ) && $wgShowRollbackEditCount > 0 ) { + if ( !$disableRollbackEditCount + && is_int( $wgShowRollbackEditCount ) + && $wgShowRollbackEditCount > 0 + ) { if ( !is_numeric( $editCount ) ) { $editCount = self::getRollbackEditCount( $rev, false ); } if ( $editCount > $wgShowRollbackEditCount ) { - $editCount_output = $context->msg( 'rollbacklinkcount-morethan' )->numParams( $wgShowRollbackEditCount )->parse(); + $editCount_output = $context->msg( 'rollbacklinkcount-morethan' ) + ->numParams( $wgShowRollbackEditCount )->parse(); } else { $editCount_output = $context->msg( 'rollbacklinkcount' )->numParams( $editCount )->parse(); } @@ -1957,9 +1969,11 @@ class Linker { * @param bool $preview Whether this is for a preview * @param bool $section Whether this is for a section edit * @param Title|Message|string|null $more An escaped link for "More..." of the templates - * @return String: HTML output + * @return string HTML output */ - public static function formatTemplates( $templates, $preview = false, $section = false, $more = null ) { + public static function formatTemplates( $templates, $preview = false, + $section = false, $more = null + ) { global $wgLang; wfProfileIn( __METHOD__ ); @@ -2048,9 +2062,9 @@ class Linker { /** * Returns HTML for the "hidden categories on this page" list. * - * @param array $hiddencats of hidden categories from Article::getHiddenCategories - * or similar - * @return String: HTML output + * @param array $hiddencats Array of hidden categories from Article::getHiddenCategories + * or similar + * @return string HTML output */ public static function formatHiddenCategories( $hiddencats ) { wfProfileIn( __METHOD__ ); @@ -2063,7 +2077,10 @@ class Linker { $outText .= "
'; } @@ -2076,7 +2093,7 @@ class Linker { * unit (B, KB, MB or GB) according to the magnitude in question * * @param int $size Size to format - * @return String + * @return string */ public static function formatSize( $size ) { global $wgLang; @@ -2089,10 +2106,10 @@ class Linker { * isn't always, because sometimes the accesskey needs to go on a different * element than the id, for reverse-compatibility, etc.) * - * @param string $name id of the element, minus prefixes. - * @param $options Mixed: null or the string 'withaccess' to add an access- + * @param string $name Id of the element, minus prefixes. + * @param string|null $options Null or the string 'withaccess' to add an access- * key hint - * @return String: contents of the title attribute (which you must HTML- + * @return string Contents of the title attribute (which you must HTML- * escape), or false for no title attribute */ public static function titleAttrib( $name, $options = null ) { @@ -2115,10 +2132,12 @@ class Linker { if ( $options == 'withaccess' ) { $accesskey = self::accesskey( $name ); if ( $accesskey !== false ) { + // Should be build the same as in jquery.accessKeyLabel.js if ( $tooltip === false || $tooltip === '' ) { - $tooltip = "[$accesskey]"; + $tooltip = wfMessage( 'brackets', $accesskey )->text(); } else { - $tooltip .= " [$accesskey]"; + $tooltip .= wfMessage( 'word-separator' )->text(); + $tooltip .= wfMessage( 'brackets', $accesskey )->text(); } } } @@ -2127,7 +2146,7 @@ class Linker { return $tooltip; } - static $accesskeycache; + public static $accesskeycache; /** * Given the id of an interface element, constructs the appropriate @@ -2135,8 +2154,8 @@ class Linker { * the id but isn't always, because sometimes the accesskey needs to go on * a different element than the id, for reverse-compatibility, etc.) * - * @param string $name id of the element, minus prefixes. - * @return String: contents of the accesskey attribute (which you must HTML- + * @param string $name Id of the element, minus prefixes. + * @return string Contents of the accesskey attribute (which you must HTML- * escape), or false for no accesskey attribute */ public static function accesskey( $name ) { @@ -2160,7 +2179,8 @@ class Linker { } wfProfileOut( __METHOD__ ); - return self::$accesskeycache[$name] = $accesskey; + self::$accesskeycache[$name] = $accesskey; + return self::$accesskeycache[$name]; } /** @@ -2173,7 +2193,7 @@ class Linker { * * @param User $user * @param Revision $rev - * @param Revision $title + * @param Title $title * @return string HTML fragment */ public static function getRevDeleteLink( User $user, Revision $rev, Title $title ) { @@ -2210,11 +2230,11 @@ class Linker { /** * Creates a (show/hide) link for deleting revisions/log entries * - * @param array $query query parameters to be passed to link() - * @param $restricted Boolean: set to true to use a "" instead of a "" - * @param $delete Boolean: set to true to use (show/hide) rather than (show) + * @param array $query Query parameters to be passed to link() + * @param bool $restricted Set to true to use a "" instead of a "" + * @param bool $delete Set to true to use (show/hide) rather than (show) * - * @return String: HTML "" link to Special:Revisiondelete, wrapped in a + * @return string HTML "" link to Special:Revisiondelete, wrapped in a * span to allow for customization of appearance with CSS */ public static function revDeleteLink( $query = array(), $restricted = false, $delete = true ) { @@ -2223,13 +2243,17 @@ class Linker { $html = wfMessage( $msgKey )->escaped(); $tag = $restricted ? 'strong' : 'span'; $link = self::link( $sp, $html, array(), $query, array( 'known', 'noclasses' ) ); - return Xml::tags( $tag, array( 'class' => 'mw-revdelundel-link' ), wfMessage( 'parentheses' )->rawParams( $link )->escaped() ); + return Xml::tags( + $tag, + array( 'class' => 'mw-revdelundel-link' ), + wfMessage( 'parentheses' )->rawParams( $link )->escaped() + ); } /** * Creates a dead (show/hide) link for deleting revisions/log entries * - * @param $delete Boolean: set to true to use (show/hide) rather than (show) + * @param bool $delete Set to true to use (show/hide) rather than (show) * * @return string HTML text wrapped in a span to allow for customization * of appearance with CSS @@ -2243,32 +2267,6 @@ class Linker { /* Deprecated methods */ - /** - * @deprecated since 1.16 Use link() - * - * This function is a shortcut to makeBrokenLinkObj(Title::newFromText($title),...). Do not call - * it if you already have a title object handy. See makeBrokenLinkObj for further documentation. - * - * @param string $title The text of the title - * @param string $text Link text - * @param string $query Optional query part - * @param string $trail Optional trail. Alphabetic characters at the start of this string will - * be included in the link text. Other characters will be appended after - * the end of the link. - * @return string - */ - static function makeBrokenLink( $title, $text = '', $query = '', $trail = '' ) { - wfDeprecated( __METHOD__, '1.16' ); - - $nt = Title::newFromText( $title ); - if ( $nt instanceof Title ) { - return self::makeBrokenLinkObj( $nt, $text, $query, $trail ); - } else { - wfDebug( 'Invalid title passed to self::makeBrokenLink(): "' . $title . "\"\n" ); - return $text == '' ? $title : $text; - } - } - /** * @deprecated since 1.16 Use link(); warnings since 1.21 * @@ -2276,14 +2274,13 @@ class Linker { * call this lots of times, pre-fill the link cache with a LinkBatch, otherwise each * call to this will result in a DB query. * - * @param $nt Title: the title object to make the link from, e.g. from - * Title::newFromText. - * @param $text String: link text - * @param string $query optional query part - * @param string $trail optional trail. Alphabetic characters at the start of this string will - * be included in the link text. Other characters will be appended after - * the end of the link. - * @param string $prefix optional prefix. As trail, only before instead of after. + * @param Title $nt The title object to make the link from, e.g. from Title::newFromText. + * @param string $text Link text + * @param string $query Optional query part + * @param string $trail Optional trail. Alphabetic characters at the start of this string will + * be included in the link text. Other characters will be appended after + * the end of the link. + * @param string $prefix Optional prefix. As trail, only before instead of after. * @return string */ static function makeLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) { @@ -2309,14 +2306,14 @@ class Linker { * it doesn't have to do a database query. It's also valid for interwiki titles and special * pages. * - * @param $title Title object of target page - * @param $text String: text to replace the title - * @param $query String: link target - * @param $trail String: text after link - * @param string $prefix text before link text - * @param string $aprops extra attributes to the a-element - * @param $style String: style to apply - if empty, use getInternalLinkAttributesObj instead - * @return string the a-element + * @param Title $title Title object of target page + * @param string $text Text to replace the title + * @param string $query Link target + * @param string $trail Text after link + * @param string $prefix Text before link text + * @param string $aprops Extra attributes to the a-element + * @param string $style Style to apply - if empty, use getInternalLinkAttributesObj instead + * @return string The a-element */ static function makeKnownLinkObj( $title, $text = '', $query = '', $trail = '', $prefix = '', $aprops = '', $style = '' @@ -2342,65 +2339,9 @@ class Linker { return $ret; } - /** - * @deprecated since 1.16 Use link() - * - * Make a red link to the edit page of a given title. - * - * @param $title Title object of the target page - * @param $text String: Link text - * @param string $query Optional query part - * @param string $trail Optional trail. Alphabetic characters at the start of this string will - * be included in the link text. Other characters will be appended after - * the end of the link. - * @param string $prefix Optional prefix - * @return string - */ - static function makeBrokenLinkObj( $title, $text = '', $query = '', $trail = '', $prefix = '' ) { - wfDeprecated( __METHOD__, '1.16' ); - - wfProfileIn( __METHOD__ ); - - list( $inside, $trail ) = self::splitTrail( $trail ); - if ( $text === '' ) { - $text = self::linkText( $title ); - } - - $ret = self::link( $title, "$prefix$text$inside", array(), - wfCgiToArray( $query ), 'broken' ) . $trail; - - wfProfileOut( __METHOD__ ); - return $ret; - } - - /** - * @deprecated since 1.16 Use link() - * - * Make a coloured link. - * - * @param $nt Title object of the target page - * @param $colour Integer: colour of the link - * @param $text String: link text - * @param $query String: optional query part - * @param $trail String: optional trail. Alphabetic characters at the start of this string will - * be included in the link text. Other characters will be appended after - * the end of the link. - * @param string $prefix Optional prefix - * @return string - */ - static function makeColouredLinkObj( $nt, $colour, $text = '', $query = '', $trail = '', $prefix = '' ) { - wfDeprecated( __METHOD__, '1.16' ); - - if ( $colour != '' ) { - $style = self::getInternalLinkAttributesObj( $nt, $text, $colour ); - } else { - $style = ''; - } - return self::makeKnownLinkObj( $nt, $text, $query, $trail, $prefix, '', $style ); - } - /** * Returns the attributes for the tooltip and access key. + * @param string $name * @return array */ public static function tooltipAndAccesskeyAttribs( $name ) { @@ -2422,6 +2363,8 @@ class Linker { /** * Returns raw bits of HTML, use titleAttrib() + * @param string $name + * @param array|null $options * @return null|string */ public static function tooltip( $name, $options = null ) { -- cgit v1.2.3-54-g00ecf