Linker: Accept LinkTarget objects in link()
[lhc/web/wiklou.git] / includes / Linker.php
index 2ca851c..8d2829f 100644 (file)
@@ -76,7 +76,7 @@ class Linker {
         * @since 1.18 Method exists since 1.16 as non-static, made static in 1.18.
         * @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
         *
-        * @param Title $target Can currently only be a Title, but this may
+        * @param LinkTarget $target Can currently only be a LinkTarget, but this may
         *   change to support Images, literal URLs, etc.
         * @param string $html The HTML contents of the <a> element, i.e.,
         *   the link text.  This is raw HTML and will not be escaped.  If null,
@@ -107,8 +107,8 @@ class Linker {
        public static function link(
                $target, $html = null, $customAttribs = [], $query = [], $options = []
        ) {
-               if ( !$target instanceof Title ) {
-                       wfWarn( __METHOD__ . ': Requires $target to be a Title object.', 2 );
+               if ( !$target instanceof LinkTarget ) {
+                       wfWarn( __METHOD__ . ': Requires $target to be a LinkTarget object.', 2 );
                        return "<!-- ERROR -->$html";
                }
 
@@ -154,6 +154,11 @@ class Linker {
         * @since 1.16.3
         * @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
         * @see Linker::link
+        * @param Title $target
+        * @param string $html
+        * @param array $customAttribs
+        * @param array $query
+        * @param string|array $options
         * @return string
         */
        public static function linkKnown(
@@ -1286,9 +1291,7 @@ class Linker {
                                                        if ( $target->getText() == '' && !$target->isExternal()
                                                                && !$local && $title
                                                        ) {
-                                                               $newTarget = clone $title;
-                                                               $newTarget->setFragment( '#' . $target->getFragment() );
-                                                               $target = $newTarget;
+                                                               $target = $title->createFragmentTarget( $target->getFragment() );
                                                        }
 
                                                        $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
@@ -1350,7 +1353,7 @@ class Linker {
        /**
         * @param Title $contextTitle
         * @param string $target
-        * @param string $text
+        * @param string &$text
         * @return string
         */
        public static function normalizeSubpageLink( $contextTitle, $target, &$text ) {
@@ -1619,14 +1622,16 @@ class Linker {
                $link, $fallbackAnchor = false
        ) {
                $anchorEscaped = htmlspecialchars( $anchor );
-               $ret = "<h$level$attribs"
-                       . "<span class=\"mw-headline\" id=\"$anchorEscaped\">$html</span>"
-                       . $link
-                       . "</h$level>";
+               $fallback = '';
                if ( $fallbackAnchor !== false && $fallbackAnchor !== $anchor ) {
                        $fallbackAnchor = htmlspecialchars( $fallbackAnchor );
-                       $ret = "<div id=\"$fallbackAnchor\"></div>$ret";
+                       $fallback = "<span id=\"$fallbackAnchor\"></span>";
                }
+               $ret = "<h$level$attribs"
+                       . "$fallback<span class=\"mw-headline\" id=\"$anchorEscaped\">$html</span>"
+                       . $link
+                       . "</h$level>";
+
                return $ret;
        }