Extension:SectionLinkToTop
From MediaWiki.org
| This extension stores its source code on a wiki page. Please be aware that this code may be unreviewed or maliciously altered. They may contain security holes, outdated interfaces that are no longer compatible etc. Note: No localisation updates are provided for this extension by translatewiki.net. |
|
SectionLinkToTop Release status: beta |
|||
|---|---|---|---|
| Implementation | Tag | ||
| Description | Allows you to add a link next to the edit section link to return to the top of a page. | ||
| Author(s) | Coban Holmes (Cobantalk) | ||
| Last version | 1.0 (2009-09-17) | ||
| MediaWiki | Tested on 1.15.1 | ||
| Database changes | no | ||
| License | GPL | ||
| Download | The source is available on this page | ||
|
|||
| Check usage and version matrix | |||
Description [edit]
This extension creates a new magic word __SECTIONLINKTOTOP__ which will add a link to the top of the page next to the edit section link.
Installation [edit]
- Copy the code below and paste it into a new file called "SectionLinkToTop/SectionLinkToTop.php" in your extensions directory
- Append the following line to the end of your LocalSettings.php file:
require_once( "$IP/extensions/SectionLinkToTop/SectionLinkToTop.php" );
Source code [edit]
<?php /** * Copyright (C) 2009 Coban Holmes <coban.holmes@gmail.com> * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * This extension implements a new MagicWord __SECTIONLINKTOTOP__. * If an article contains this MagicWord, a link to the top of the page will be added next to the edit link. * * How to use: * * include this extension in LocalSettings.php: * require_once($IP.'/extensions/SectionLinkToTop/SectionLinkToTop.php'); * * Add "__SECTIONLINKTOTOP__" to any article of your choice. * * @author Coban Holmes * @version 1.0 */ if (!defined('MEDIAWIKI')) { die("This requires the MediaWiki enviroment."); } $wgExtensionCredits['parserhook'][] = array( 'name' => 'SectionLinkToTop', 'version' => '1.0', 'author' => 'Coban Holmes', 'url' => 'http://www.mediawiki.org/wiki/Extension:SectionLinkToTop', 'description' => 'Add MagicWord "__SECTIONLINKTOTOP__".', ); $sectionLinkToTop = new SectionLinkToTop(); $wgHooks['MagicWordMagicWords'][] = array($sectionLinkToTop, 'addMagicWord'); $wgHooks['MagicWordwgVariableIDs'][] = array($sectionLinkToTop, 'addMagicWordId'); $wgHooks['LanguageGetMagic'][] = array($sectionLinkToTop, 'languageGetMagic'); $wgHooks['DoEditSectionLink'][] = array($sectionLinkToTop, 'doEditSectionLink'); $wgHooks['ParserAfterStrip'][] = array($sectionLinkToTop, 'checkForMagicWord'); $wgHooks['ParserAfterTidy'][] = array($sectionLinkToTop, 'parserAfterTidy'); class SectionLinkToTop { //$linkToTopEnabled will be set to true when the magic word is found on a page private $linkToTopEnabled = false; //$isHooked will be set to true if we are able to add the link in the DoEditSectionLink hook private $isHooked = false; //The text for the link private $linkToTopText = '<span class="editsection sectionlinktotop">[<a href="#top" title="Return to the top of the page">top</a>]</span>'; //constructor - empty function SectionLinkToTop() {} //register the new magic word with the system function addMagicWord(&$magicWords) { $magicWords[] = 'MAG_SECTIONLINKTOTOP'; return true; } //add the id function addMagicWordId(&$magicWords) { $magicWords[] = MAG_SECTIONLINKTOTOP; return true; } //Find the magic word on the page, remove it and enable the extension function checkForMagicWord(&$parser, &$text, &$strip_state) { if (MagicWord::get(MAG_SECTIONLINKTOTOP)->matchAndRemove( $text )){ $this->linkToTopEnabled = true; } return true; } function languageGetMagic(&$magicWords, $langCode) { $magicWords['MAG_SECTIONLINKTOTOP'] = array( 0, '__SECTIONLINKTOTOP__' ); return true; } //This hook only gets run if the user has edit rights function doEditSectionLink($skin, $title, $section, $tooltip, $result ) { if ($this->linkToTopEnabled){ $result = $result.$this->linkToTopText; $this->isHooked = true; } return true; } //We will have to add the link here if we couldn't in doEditSectionLink function parserAfterTidy( &$parser, &$text ) { if (!$this->isHooked && $this->linkToTopEnabled){ $pattern = '#(<h[2-6]>)( <span.*</h[2-6]>)#i'; $replace = '\1'.$this->linkToTopText.'\2'; $text = preg_replace($pattern, $replace, $text); } return true; } }