Wikia code/includes/Linker.php
< Wikia code | includes
This page is obsolete. It is being retained for archival purposes. It may document extensions or features that are obsolete and/or no longer supported. Do not rely on the information here being up-to-date. The information shown below refers to the now unmaintained 1.16 MediaWiki release. The current stable release number is 1.43.0. |
--- D:\Programming\SVN\mediawiki\branches\REL1_16\phase3\includes\Linker.php 2011-07-18 22:31:28.068359400 +0100
+++ D:\Programming\SVN\wikia\trunk\includes\Linker.php 2011-08-17 15:28:46.430664100 +0100
@@ -237,9 +238,12 @@
# (i.e., for a nonexistent special page).
if( in_array( 'broken', $options ) and empty( $query['action'] )
and $target->getNamespace() != NS_SPECIAL ) {
+ global $wgWikiaEnableAutoPageCreateExt;
+ if( empty( $wgWikiaEnableAutoPageCreateExt ) ) {
$query['action'] = 'edit';
$query['redlink'] = '1';
}
+ }
$ret = $target->getLinkUrl( $query );
wfProfileOut( __METHOD__ );
return $ret;
@@ -528,6 +532,13 @@
'title' => $fp['title'],
'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false ,
'img-class' => isset( $fp['border'] ) ? 'thumbborder' : false );
+ /* Wikia change begin - @author: Marooned */
+ /* Images SEO project */
+ if (Wikia::isOasis()) {
+ $wrapperId = preg_replace('/[^a-z0-9_]/i', '-', Sanitizer::escapeId($title->getText()));
+ $params['id'] = $wrapperId;
+ }
+ /* Wikia change end */
if ( !empty( $fp['link-url'] ) ) {
$params['custom-url-link'] = $fp['link-url'];
} elseif ( !empty( $fp['link-title'] ) ) {
@@ -565,6 +576,11 @@
function makeThumbLink2( Title $title, $file, $frameParams = array(), $handlerParams = array(), $time = false, $query = "" ) {
global $wgStylePath, $wgContLang;
+
+ /*Wiki change start, author: Federico "Lox" Lucignano*/
+ global $wgUser;
+ /*Wikia change end*/
+
$exists = $file && $file->exists();
# Shortcuts
@@ -627,7 +643,16 @@
$more = htmlspecialchars( wfMsg( 'thumbnail-more' ) );
+ /* Wikia change begin - @author: Marooned */
+ /* Images SEO project */
+ if (Wikia::isOasis()) {
+ $wrapperId = preg_replace('/[^a-z0-9_]/i', '-', Sanitizer::escapeId($title->getText()));
+ $s = "<figure class=\"thumb t{$fp['align']} thumbinner\" style=\"width:{$outerWidth}px;\">";
+ } else {
+ $wrapperId = '';
$s = "<div class=\"thumb t{$fp['align']}\"><div class=\"thumbinner\" style=\"width:{$outerWidth}px;\">";
+ }
+ /* Wikia change end */
if( !$exists ) {
$s .= $this->makeBrokenImageLinkObj( $title, $fp['title'], '', '', '', $time==true );
$zoomicon = '';
@@ -638,19 +663,43 @@
$s .= $thumb->toHtml( array(
'alt' => $fp['alt'],
'title' => $fp['title'],
+ /* Wikia change begin - @author: Marooned */
+ /* Images SEO project */
+ 'id' => $wrapperId,
+ /* Wikia change end */
'img-class' => 'thumbimage',
'desc-link' => true,
'desc-query' => $query ) );
if ( isset( $fp['framed'] ) ) {
$zoomicon="";
} else {
- $zoomicon = '<div class="magnify">'.
- '<a href="'.$url.'" class="internal" title="'.$more.'">'.
- '<img src="'.$wgStylePath.'/common/images/magnify-clip.png" ' .
- 'width="15" height="11" alt="" /></a></div>';
- }
- }
+ /* Wikia change begin - @author: christian, Marooned */
+ /* Change img src from magnify-clip.png to blank.gif. Image is set via CSS Background */
+ global $wgBlankImgUrl;
+ $zoomicon = '<a href="'.$url.'" class="internal sprite details magnify" title="'.$more.'"></a>';
+ /* Wikia change end */
+ }
+ }
+ /* Wikia change begin - @author: Marooned, Federico "Lox" Lucignano */
+ /* Images SEO project */
+ if (Wikia::isOasis()) {
+ $s .= $zoomicon;
+
+ if( !empty( $fp[ 'caption' ] ) ) $s .= '<figcaption class="thumbcaption">' . $fp['caption'] . '</figcaption>';
+ $s .= '<!-- picture-attribution -->';
+
+ $s .= '</figure>';
+ } else {
$s .= ' <div class="thumbcaption">'.$zoomicon.$fp['caption']."</div></div></div>";
+ }
+ /* Wikia change end */
+
+ /* Wikia change begin - @author: macbre */
+ /* Give extensions ability to add HTML to thumbed / framed images */
+ /* @author: wladek - added outerWidth parameter for BugId: 3734 */
+ wfRunHooks('MakeThumbLink2', array($this, $title, $file, $frameParams, $handlerParams, &$s, $outerWidth));
+ /* Wikia change end */
+
return str_replace("\n", ' ', $s);
}
@@ -685,12 +734,20 @@
list( $inside, $trail ) = self::splitTrail( $trail );
+ // wikia changes start
+ $nofollow = array();
+ global $wgWikiaUseNoFollow;
+ if( !empty( $wgWikiaUseNoFollow ) ) {
+ $nofollow = array('rel' => "nofollow" );
+ }
+ // wikia changes end
+
wfProfileOut( __METHOD__ );
return Html::element( 'a', array(
'href' => $href,
'class' => 'new',
'title' => $title->getPrefixedText()
- ), $prefix . $text . $inside ) . $trail;
+ ) + $nofollow, $prefix . $text . $inside ) . $trail;
} else {
wfProfileOut( __METHOD__ );
return $this->makeKnownLinkObj( $title, $text, $query, $trail, $prefix );
@@ -739,18 +796,24 @@
} else {
$img = wfFindFile( $title, array( 'time' => $time ) );
if( $img ) {
- $url = $img->getURL();
+ $url = wfReplaceImageServer( $img->getURL(), $img->getTimestamp() );
$class = 'internal';
+ $nofollow = '';
} else {
$url = $this->getUploadUrl( $title );
$class = 'new';
+ global $wgWikiaUseNoFollow;
+ $nofollow = '';
+ if( !empty( $wgWikiaUseNoFollow ) ) {
+ $nofollow = ' rel="nofollow"';
+ }
}
$alt = htmlspecialchars( $title->getText() );
if( $text == '' ) {
$text = $alt;
}
$u = htmlspecialchars( $url );
- return "<a href=\"{$u}\" class=\"$class\" title=\"{$alt}\">{$text}</a>";
+ return "<a href=\"{$u}\" class=\"$class\" title=\"{$alt}\"{$nofollow}>{$text}</a>";
}
}
@@ -794,7 +857,7 @@
$text = htmlspecialchars( $text );
}
$link = '';
- $success = wfRunHooks('LinkerMakeExternalLink', array( &$url, &$text, &$link, &$attribs, $linktype ) );
+ $success = wfRunHooks('LinkerMakeExternalLink', array( &$url, &$text, &$link, &$attribs, &$linktype, $this ) );
if(!$success) {
wfDebug("Hook LinkerMakeExternalLink changed the output of link with url {$url} and text {$text} to {$link}\n", true);
return $link;
@@ -1280,10 +1345,15 @@
* parameter level defines if we are on an indentation level
*/
function tocLine( $anchor, $tocline, $tocnumber, $level, $sectionIndex = false ) {
+ $nofollow = '';
+ global $wgWikiaUseNoFollow;
+ if( !empty( $wgWikiaUseNoFollow ) ) {
+ $nofollow = ' rel="nofollow"';
+ }
$classes = "toclevel-$level";
if ( $sectionIndex !== false )
$classes .= " tocsection-$sectionIndex";
- return "\n<li class=\"$classes\"><a href=\"#" .
+ return "\n<li class=\"$classes\"><a{$nofollow} href=\"#" .
$anchor . '"><span class="tocnumber">' .
$tocnumber . '</span> <span class="toctext">' .
$tocline . '</span></a>';
@@ -1312,12 +1382,16 @@
# no trailing newline, script should not be wrapped in a
# paragraph
. "</ul>\n</td></tr></table>"
+ /* Wikia change begin - @author: macbre, Marooned */
+ /* Fixes for #2643 and #3730 - macbre */
+ /* Fixes for rt#18733 (do not wait for ads to run this script) - Marooned */
. Html::inlineScript(
- 'if (window.showTocToggle) {'
- . ' var tocShowText = "' . Xml::escapeJsString( wfMsg('showtoc') ) . '";'
- . ' var tocHideText = "' . Xml::escapeJsString( wfMsg('hidetoc') ) . '";'
+ 'wgAfterContentAndJS.push(function() {'
+ . 'if (window.showTocToggle) {'
+ . ' window.tocShowText = "' . Xml::escapeJsString( wfMsg('showtoc') ) . '";'
+ . ' window.tocHideText = "' . Xml::escapeJsString( wfMsg('hidetoc') ) . '";'
. ' showTocToggle();'
- . ' } ' )
+ . ' } });' )
. "\n";
}
@@ -1364,6 +1438,13 @@
// HTML generated here should probably have userlangattributes
// added to it for LTR text on RTL pages
$attribs = array();
+ global $wgWikiaUseNoFollow;
+ if( !empty( $wgWikiaUseNoFollow ) ) {
+ /* Wikia change begin - @author: uknkown */
+ /* Ad rel="nofollow" attribute to edit section links */
+ $attribs['rel'] = 'nofollow';
+ /* Wikia change end */
+ }
if( !is_null( $tooltip ) ) {
$attribs['title'] = wfMsg( 'editsectionhint', $tooltip );
}
@@ -1415,12 +1496,17 @@
* @return string HTML headline
*/
public function makeHeadline( $level, $attribs, $anchor, $text, $link, $legacyAnchor = false ) {
+ $nofollow = '';
+ global $wgWikiaUseNoFollow;
+ if( !empty( $wgWikiaUseNoFollow ) ) {
+ $nofollow = ' rel="nofollow"';
+ }
$ret = "<h$level$attribs"
. $link
. " <span class=\"mw-headline\" id=\"$anchor\">$text</span>"
. "</h$level>";
if ( $legacyAnchor !== false ) {
- $ret = "<a id=\"$legacyAnchor\"></a>$ret";
+ $ret = "<a{$nofollow} id=\"$legacyAnchor\"></a>$ret";
}
return $ret;
}
@@ -1552,6 +1638,12 @@
}
$outText .= '</ul>';
}
+
+ /* Wikia change begin - @author: Macnre */
+ /* #22760: Shorten edit page 'transcluded pages' list using JS */
+ wfRunHooks('LinkerFormatTemplates', array(&$this, &$templates, &$outText));
+ /* Wikia change end */
+
wfProfileOut( __METHOD__ );
return $outText;
}
@@ -1825,7 +1917,26 @@
$text = $this->linkText( $nt );
}
- $ret = $this->link( $nt, "$prefix$text$inside", array(), $query ) . $trail;
+ /* Wikia change begin - @author: unknown, Inez */
+ $attribs = array();
+ if( $nt && $nt->isExternal()) {
+ $iwclass = strtolower($nt->getInterwiki());
+ if(in_array($iwclass, array('w', 'wikia', 'wikicities'))) {
+ $iwclass = 'w';
+ $iw_temp = explode(':', strtolower($nt->getText()));
+ if(!empty($iw_temp[0])) {
+ if ('c' == $iw_temp[0]) {
+ if (!empty($iw_temp[1])) {
+ $iwclass .= " wikia-{$iw_temp[1]}";
+ }
+ }
+ }
+ }
+ $attribs['class'] = "interwiki-{$iwclass}";
+ }
+ /* Wikia change end */
+
+ $ret = $this->link( $nt, "$prefix$text$inside", $attribs, $query ) . $trail;
wfProfileOut( __METHOD__ );
return $ret;
@@ -1882,13 +1993,34 @@
function makeBrokenLinkObj( $title, $text = '', $query = '', $trail = '', $prefix = '' ) {
wfProfileIn( __METHOD__ );
+ // wikia change begin
+ global $wgWikiaEnableSharedHelpExt;
+ if ( $wgWikiaEnableSharedHelpExt
+ && ( NS_HELP == $title->getNamespace() )
+ && SharedHelpArticleExists($title) )
+ {
+ return $this->makeKnownLinkObj( $title, $text, $query, $trail, $prefix );
+ }
+ // wikia change end
+
list( $inside, $trail ) = Linker::splitTrail( $trail );
if( $text === '' ) {
$text = $this->linkText( $title );
}
$nt = $this->normaliseSpecialPage( $title );
- $ret = $this->link( $title, "$prefix$text$inside", array(),
+ // wikia change begin
+ $attribs = array();
+ global $wgWikiaUseNoFollow, $wgWikiaEnableAutoPageCreateExt;
+ if( !empty( $wgWikiaUseNoFollow )
+ && ( ( empty( $wgWikiaEnableAutoPageCreateExt ) && !empty( $wgWikiaUseNoFollowForContent ) )
+ || ( !$title->isContentPage() ) ) )
+ {
+ $attribs['rel'] = 'nofollow';
+ }
+ // wikia change end
+
+ $ret = $this->link( $title, "$prefix$text$inside", $attribs,
wfCgiToArray( $query ), 'broken' ) . $trail;
wfProfileOut( __METHOD__ );