* Removed the namespace parameter from Linker::makeExternalLink(), added a generic associative array of attributes instead. Let the Parser decide whether to use rel=nofollow.
* Improved upload file type detection for OpenDocument formats
* (bug 15739) Add $wgArticlePathForCurid to make links with only curid=# as the
query string use the article path, rather than the script path
+* Added the ability to set the target attribute on external links with
+ $wgExternalLinkTarget
=== Bug fixes in 1.14 ===
*/
$wgSearchForwardUrl = null;
+/**
+ * Set a default target for external links, e.g. _blank to pop up a new window
+ */
+$wgExternalLinkTarget = false;
+
/**
* If true, external URL links in wiki text will be given the
* rel="nofollow" attribute as a hint to search engines that
}
/** @todo document */
- function makeExternalLink( $url, $text, $escape = true, $linktype = '', $ns = null ) {
- $style = $this->getExternalLinkAttributes( $url, $text, 'external ' . $linktype );
- global $wgNoFollowLinks, $wgNoFollowNsExceptions;
- if( $wgNoFollowLinks && !(isset($ns) && in_array($ns, $wgNoFollowNsExceptions)) ) {
- $style .= ' rel="nofollow"';
+ 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 ) {
wfDebug("Hook LinkerMakeExternalLink changed the output of link with url {$url} and text {$text} to {$link}", true);
return $link;
}
- return '<a href="'.$url.'"'.$style.'>'.$text.'</a>';
+ return '<a href="'.$url.'"'.$attribsText.'>'.$text.'</a>';
}
/**
$text = $this->maybeMakeExternalImage( $url );
if ( $text === false ) {
# Not an image, make a link
- $text = $sk->makeExternalLink( $url, $wgContLang->markNoConversion($url), true, 'free', $this->mTitle->getNamespace() );
+ $text = $sk->makeExternalLink( $url, $wgContLang->markNoConversion($url), true, 'free',
+ $this->getExternalLinkAttribs() );
# Register it in the output object...
# Replace unnecessary URL escape codes with their equivalent characters
$pasteurized = self::replaceUnusualEscapes( $url );
$url = Sanitizer::cleanUrl( $url );
+ if ( $this->mOptions->mExternalLinkTarget ) {
+ $attribs = array( 'target' => $this->mOptions->mExternalLinkTarget );
+ } else {
+ $attribs = array();
+ }
+
# Use the encoded URL
# This means that users can paste URLs directly into the text
# Funny characters like ö aren't valid in URLs anyway
# This was changed in August 2004
- $s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->mTitle->getNamespace() ) . $dtrail . $trail;
+ $s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->getExternalLinkAttribs() )
+ . $dtrail . $trail;
# Register link in the output object.
# Replace unnecessary URL escape codes with the referenced character
return $s;
}
+ function getExternalLinkAttribs() {
+ $attribs = array();
+ global $wgNoFollowLinks, $wgNoFollowNsExceptions;
+ $ns = $this->mTitle->getNamespace();
+ if( $wgNoFollowLinks && !in_array($ns, $wgNoFollowNsExceptions) ) {
+ $attribs['rel'] = 'nofollow';
+ }
+ if ( $this->mOptions->getExternalLinkTarget() ) {
+ $attribs['target'] = $this->mOptions->getExternalLinkTarget();
+ }
+ return $attribs;
+ }
+
+
/**
* Replace unusual URL escape codes with their equivalent characters
* @param string
var $mTemplateCallback; # Callback for template fetching
var $mEnableLimitReport; # Enable limit report in an HTML comment on output
var $mTimestamp; # Timestamp used for {{CURRENTDAY}} etc.
+ var $mExternalLinkTarget; # Target attribute for external links
var $mUser; # Stored user object, just used to initialise the skin
function getTemplateCallback() { return $this->mTemplateCallback; }
function getEnableLimitReport() { return $this->mEnableLimitReport; }
function getCleanSignatures() { return $this->mCleanSignatures; }
+ function getExternalLinkTarget() { return $this->mExternalLinkTarget; }
function getSkin() {
if ( !isset( $this->mSkin ) ) {
function enableLimitReport( $x = true ) { return wfSetVar( $this->mEnableLimitReport, $x ); }
function setTimestamp( $x ) { return wfSetVar( $this->mTimestamp, $x ); }
function setCleanSignatures( $x ) { return wfSetVar( $this->mCleanSignatures, $x ); }
+ function setExternalLinkTarget( $x ) { return wfSetVar( $this->mExternalLinkTarget, $x ); }
function __construct( $user = null ) {
$this->initialiseFromUser( $user );
global $wgUseTeX, $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages;
global $wgAllowExternalImagesFrom, $wgEnableImageWhitelist, $wgAllowSpecialInclusion, $wgMaxArticleSize;
global $wgMaxPPNodeCount, $wgMaxTemplateDepth, $wgMaxPPExpandDepth, $wgCleanSignatures;
+ global $wgExternalLinkTarget;
$fname = 'ParserOptions::initialiseFromUser';
wfProfileIn( $fname );
if ( !$userInput ) {
$this->mTemplateCallback = array( 'Parser', 'statelessFetchTemplate' );
$this->mEnableLimitReport = false;
$this->mCleanSignatures = $wgCleanSignatures;
+ $this->mExternalLinkTarget = $wgExternalLinkTarget;
wfProfileOut( $fname );
}
}
# This means that users can paste URLs directly into the text
# Funny characters like ö aren't valid in URLs anyway
# This was changed in August 2004
- $s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->mTitle->getNamespace() ) . $dtrail . $trail;
+ $s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->getExternalLinkAttribs() ) . $dtrail . $trail;
# Register link in the output object.
# Replace unnecessary URL escape codes with the referenced character
return $s;
}
+ function getExternalLinkAttribs() {
+ $attribs = array();
+ global $wgNoFollowLinks, $wgNoFollowNsExceptions;
+ $ns = $this->mTitle->getNamespace();
+ if( $wgNoFollowLinks && !in_array($ns, $wgNoFollowNsExceptions) ) {
+ $attribs['rel'] = 'nofollow';
+ }
+ if ( $this->mOptions->getExternalLinkTarget() ) {
+ $attribs['target'] = $this->mOptions->getExternalLinkTarget();
+ }
+ return $attribs;
+ }
+
/**
* Replace anything that looks like a URL with a link
* @private
$text = $this->maybeMakeExternalImage( $url );
if ( $text === false ) {
# Not an image, make a link
- $text = $sk->makeExternalLink( $url, $wgContLang->markNoConversion($url), true, 'free', $this->mTitle->getNamespace() );
+ $text = $sk->makeExternalLink( $url, $wgContLang->markNoConversion($url), true, 'free',
+ $this->getExternalLinkAttribs() );
# Register it in the output object...
# Replace unnecessary URL escape codes with their equivalent characters
$pasteurized = self::replaceUnusualEscapes( $url );