Wikia code/includes/Linker.php

From MediaWiki.org
Jump to: navigation, search
--- 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__ );
Personal tools
Namespaces

Variants
Actions
Navigation
Support
Download
Development
Communication
Print/export
Toolbox