Extension:AllowAnchorTags
From MediaWiki.org
|
Allow Anchor Tags Release status: stable |
|
|---|---|
| Implementation | Tag |
| Description | Adds <anchor></anchor> tags and parses them to <a href=''></a> tags. |
| Version | 1.0 |
| MediaWiki | 1.9.3 |
| Download | #Download & screenshot |
| Example | #Download & screenshot |
Contents |
[edit] What can this extension do?
Adds <anchor></anchor> tags and parses them to <a href=></a> tags.
[edit] Usage
The URL must be specified in the following format: <anchor url='http://someurl.com' target='_blank'>Some Text</anchor>
[edit] Installation
To install/test the extension, save the code into a file called AllowAnchorTags.php add the following to the end of your LocalSettings.php file in your MediaWiki installation folder:
require_once("/extensions/AllowAnchorTags/AllowAnchorTags.php");
[edit] Code
<?php //Extension credits that show up on Special:Version $wgExtensionCredits['parserhook'][] = array( 'name' => 'AllowAnchorTags', 'version' => 1.0, 'author' => ' Amolsodhi', 'url' => 'http://www.mediawiki.org/wiki/Extension:AllowAnchorTags', 'description' => 'Adds <tt><anchor></tt> tag and parses it to <tt><nowiki><a href=''></a></nowiki></tt> tags.', ); # Defines the main function to be executed for this extension. $wgExtensionFunctions[] = 'addAnchorTag'; # Sets the hook to be executed once the parser has stripped HTML tags. $wgHooks['ParserAfterStrip'][] = 'addAnchorTag'; # This function initiates the hook for the parser to convert <anchor></anchor> # tags to <a href=''></a> tags. function addAnchorTag() { // Declaring the global parser.. global $wgParser; // Setting the hook to parse <anchor></anchor> tags from the parser output.. $wgParser->setHook( 'anchor', 'startAddAnchor' ); } # This function extracts the parameters from the <anchor></anchor> tags and # the text between the <anchor> and </anchor> tags and formats them as "<a href=''>" # tags and writes them in the document. function startAddAnchor( $input, $argv ) { // Matching to see if the URL matches the prefixes in $wgUrlProtocols.. if (preg_match("/^(http:\/\/|https:\/\/|ftp:\/\/|irc:\/\/|gopher:\/\/|news:|mailto:)/", $argv['url'])) { // Fetching the 'url' parameter.. $url = $argv['url']; } else { $url = ''; } // Fetching the 'target' parameter.. $target = $argv['target']; if ($url != '' && $target != '') { // If a target parameter exists then print the link with it.. return "<a href=\"" . htmlspecialchars($url) . "\" target=\"" . htmlspecialchars($target) . "\">" . htmlspecialchars($input) . "</a>"; } else if ($url != '') { // If a target parameter does not exist then just print the link with the 'href' URL.. return "<a href=\"" . htmlspecialchars($url) . "\">" . htmlspecialchars($input) . "</a>"; } else { return ''; } }
[edit] Modification to allow the use of <IMG...>
Replace
if ($url != '' && $target != '') { // If a target parameter exists then print the link with it.. return "<a href=\"" . htmlspecialchars($url) . "\" target=\"" . htmlspecialchars($target) . "\">" . htmlspecialchars($input) . "</a>"; } else if ($url != '') { // If a target parameter does not exist then just print the link with the 'href' URL.. return "<a href=\"" . htmlspecialchars($url) . "\">" . htmlspecialchars($input) . "</a>";
with
if (strncasecmp($input,'<img ',5) == 0) { $body = "<" . htmlspecialchars(preg_replace("/(^<)(.+)(>$)/","$2",$input)) . ">"; } else { $body = htmlspecialchars($input); } if ($url != '' && $target != '') { // If a target parameter exists then print the link with it.. return "<a href=\"" . htmlspecialchars($url) . "\" target=\"" . htmlspecialchars($target) . "\">" . $body . "</a>"; } else if ($url != '') { // If a target parameter does not exist then just print the link with the 'href' URL.. return "<a href=\"" . htmlspecialchars($url) . "\">" . $body . "</a>";
When using <IMG...> in this way, you must use single quotes - for example:
<anchor url='http://www.site.tld'><img align='left' src='url'></anchor>
[edit] Error message fix
Change the line
$target = $argv['target'];
to
if(isset($argv['target'])) {$target = $argv['target'];} else { $target = '';}
to eliminate an annoying Undefined index: error message. Here's a gzipped tar file with both this fix and the <img...> change in it. Fetch it if you have access to gunzip and tar. You'll have to rename it or change your LocalSettings.php to use this version.

