Extension:Wiklets.php
<php><?php
- Extension:Wiklets
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: User:Nad
if (!defined('MEDIAWIKI')) die('Not an entry point.');
define('WIKLETS_VERSION','0.1.0, 2007-06-28');
$wgWikletsMagic = "wiklet"; # The parser-function name for making a wiklet (transcluded content in a popup) $wgWikletsLoadJS = ""; # The URL of the dragiframe.js file, leave empty if loaded from elsewhere $wgWikletsToTop = true; # Raise wiklets to top when clicked $wgWikletsOffScreen = false; # Set to true if you want wiklets to be able to be dragged outside the screen boundaries
$wgExtensionFunctions[] = 'wfSetupWiklets'; $wgHooks['LanguageGetMagic'][] = 'wfWikletsLanguageGetMagic';
$wgExtensionCredits['parserhook'][] = array( 'name' => 'Wiklets', 'author' => 'User:Nad', 'description' => 'Transclude templates into movable floating panels', 'url' => 'http://www.mediawiki.org/wiki/Extension:Wiklets', 'version' => WIKLETS_VERSION );
class Wiklets {
# Properties var $id = 0;
# Constructor function Wiklets() { global $wgParser,$wgOut,$wgHooks,$wgWikletsMagic,$wgWikletsLoadJS, $wgWikletsToTop,$wgWikletsOffScreen,$wgWikletsUseCSS; $wgParser->setFunctionHook($wgWikletsMagic,array($this,'magic')); if ($wgWikletsLoadJS) $wgOut->addScript("<script type=\"text/javascript\" src=\"$wgWikletsLoadJS\"></script>"); $script = ; if ($_REQUEST['action'] == 'render' && isset($_REQUEST['wiklet'])) $wgHooks['OutputPageBeforeHTML'][] = $this; else { if ($wgWikletsToTop) $script .= "bringSelectedIframeToTop(true);\n"; if ($wgWikletsOffScreen) $script .= "allowDragOffScreen(true);\n"; if ($script) $wgOut->addScript("<script type=\"text/javascript\">$script</script>"); } }
# Expand the wiklet-magic function magic(&$parser) { $id = 'wiklet-'.$this->id++; $argv = array(); $content = ; foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $content = $arg; } if (preg_match('/^\\w/',$argv['src'])) { $title = Title::newFromText($argv['src']); $argv['src'] = $title->getLocalURL('action=render&wiklet'); } $args = ; foreach ($argv as $k => $v) $args .= " $k=\"$v\""; $text = "<iframe$args id=\"$id\" name=\"$id\"></iframe>"; return array($text, 'noparse' => true, 'isHTML' => true); }
function onOutputPageBeforeHTML(&$out,&$text) { global $wgWikletsUseCSS; $head = $out->getScript(); if ($wgWikletsUseCSS) $head .= '<link rel="stylesheet" type="text/css" media="all" href="'. $wgWikletsUseCSS.'" />'; $body = "onLoad=\"addHandle(document.getElementsByTagName('body').item(0),window);\""; $text = "$head$text"; return true; }
# Needed in some versions to prevent Special:Version from breaking function __toString() { return 'Wiklets'; } }
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupWiklets() { global $wgWiklets; $wgWiklets = new Wiklets(); }
- Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function wfWikletsLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgWikletsMagic; $magicWords[$wgWikletsMagic] = array(0,$wgWikletsMagic); return true; } ?> </php>