(bug 18346) Automatically hide RC log items on block too
[lhc/web/wiklou.git] / includes / Linker.php
index ccb34e5..e916b04 100644 (file)
@@ -227,6 +227,13 @@ class Linker {
                return $ret;
        }
 
+       /**
+        * Identical to link(), except $options defaults to 'known'.
+        */
+       public function linkKnown( $target, $text = null, $customAttribs = array(), $query = array(), $options = 'known' ) {
+               return $this->link( $target, $text, $customAttribs, $query, $options );
+       }
+
        private function linkUrl( $target, $query, $options ) {
                wfProfileIn( __METHOD__ );
                # We don't want to include fragments for broken links, because they
@@ -284,7 +291,10 @@ class Linker {
                }
 
                # Get a default title attribute.
-               if( in_array( 'known', $options ) ) {
+               if( $target->getPrefixedText() == '' ) {
+                       # A link like [[#Foo]].  This used to mean an empty title
+                       # attribute, but that's silly.  Just don't output a title.
+               } elseif( in_array( 'known', $options ) ) {
                        $defaults['title'] = $target->getPrefixedText();
                } else {
                        $defaults['title'] = wfMsg( 'red-link-title', $target->getPrefixedText() );
@@ -882,10 +892,13 @@ class Linker {
                        }
                }
 
-               if( $page ) {
-                       $query = $query ? '&page=' . urlencode( $page ) : 'page=' . urlencode( $page );
-               }
+               # ThumbnailImage::toHtml() already adds page= onto the end of DjVu URLs
+               # So we don't need to pass it here in $query. However, the URL for the
+               # zoom icon still needs it, so we make a unique query for it. See bug 14771
                $url = $title->getLocalURL( $query );
+               if( $page ) { 
+                       $url = wfAppendQuery( $url, 'page=' . urlencode( $page ) );
+               }
 
                $more = htmlspecialchars( wfMsg( 'thumbnail-more' ) );
 
@@ -1007,22 +1020,37 @@ class Linker {
                  wfMsg( $key ) );
        }
 
-       /** @todo document */
+       /**
+        * Make an external link
+        * @param String $url URL to link to
+        * @param String $text text of link
+        * @param boolean $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 <a>
+        * 
+        * @TODO! @FIXME! This is a really crappy implementation. $linktype and 
+        * 'external' are mashed into the class attrib for the link (which is made
+        * into a string). Then, if we've got additional params in $attribs, we 
+        * add to it. People using this might want to change the classes (or other
+        * default link attributes), but passing $attribsText is just messy. Would 
+        * make a lot more sense to make put the classes into $attribs, let the 
+        * hook play with them, *then* expand it all at once. 
+        */
        function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array() ) {
                $attribsText = $this->getExternalLinkAttributes( $url, $text, 'external ' . $linktype );
-               if ( $attribs ) {
-                       $attribsText .= Xml::expandAttributes( $attribs );
-               }
                $url = htmlspecialchars( $url );
                if( $escape ) {
                        $text = htmlspecialchars( $text );
                }
                $link = '';
-               $success = wfRunHooks('LinkerMakeExternalLink', array( &$url, &$text, &$link ) );
+               $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);
                        return $link;
                }
+               if ( $attribs ) {
+                       $attribsText .= Xml::expandAttributes( $attribs );
+               }
                return '<a href="'.$url.'"'.$attribsText.'>'.$text.'</a>';
        }
 
@@ -1053,7 +1081,7 @@ class Linker {
         * @return string
         */
        public function userToolLinks( $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits=null ) {
-               global $wgUser, $wgDisableAnonTalk, $wgSysopUserBans;
+               global $wgUser, $wgDisableAnonTalk, $wgSysopUserBans, $wgLang;
                $talkable = !( $wgDisableAnonTalk && 0 == $userId );
                $blockable = ( $wgSysopUserBans || 0 == $userId ) && !$flags & self::TOOL_LINKS_NOBLOCK;
 
@@ -1079,7 +1107,7 @@ class Linker {
                }
 
                if( $items ) {
-                       return ' <span class="mw-usertoollinks">(' . implode( ' | ', $items ) . ')</span>';
+                       return ' <span class="mw-usertoollinks">(' . $wgLang->pipeList( $items ) . ')</span>';
                } else {
                        return '';
                }
@@ -1783,9 +1811,7 @@ class Linker {
                # FIXME: Per standard MW behavior, a value of '-' means to suppress the
                # attribute, but this is broken for accesskey: that might be a useful
                # value.
-               if( $accesskey != ''
-               && $accesskey != '-'
-               && !wfEmptyMsg( "accesskey-$name", $accesskey ) ) {
+               if( $accesskey != '' && $accesskey != '-' && !wfEmptyMsg( "accesskey-$name", $accesskey ) ) {
                        wfProfileOut( __METHOD__ );
                        return $accesskey;
                }
@@ -1806,9 +1832,7 @@ class Linker {
        public function revDeleteLink( $query = array(), $restricted = false ) {
                $sp = SpecialPage::getTitleFor( 'Revisiondelete' );
                $text = wfMsgHtml( 'rev-delundel' );
-               $tag = 'span';
-               if( $restricted )
-                       $tag = 'strong';
+               $tag = $restricted ? 'strong' : 'span';
                $link = $this->link( $sp, $text, array(), $query, array( 'known', 'noclasses' ) );
                return Xml::tags( $tag, array( 'class' => 'mw-revdelundel-link' ), "($link)" );
        }