Extension:Livelets.php

From Organic Design wiki
Revision as of 11:59, 30 March 2007 by Nad (talk | contribs) (framework)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

<?

  1. LiveWiki Extension
  2. - Allows live articles to be transcluded which update automatically on change in a non-polling, fully event-driven way
  3. - Version 0.1 (2007-03-30)
  4. - See http://www.mediawiki.org/wiki/Extension:LiveWiki for installation and usage details
  5. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
  6. - Author: http://www.organicdesign.co.nz/nad

$wgLiveWikiMagic = "live"; # the parser-function name for doing live-transclusions $wgExtensionFunctions[] = 'wfSetupLiveWiki'; $wgHooks['LanguageGetMagic'][] = 'wfLiveWikiLanguageGetMagic';

class LiveWiki {

var $version = '0.1, 2007-03-30'; var $magic; var $args; var $id = 0;

# Constructor function LiveWiki($magic) { global $wgParser,$wgHooks; $this->magic = $magic $this->args = array(); $wgParser->setFunctionHook($magic,array($this,'functionHook')); $wgParser->setHook($magic,array($this,'tagHook')); }

# Remove live container content, store its parameters and convert it to $magic tags function functionHook(&$parser) { $magic = $this->magic; $id = $this->id++; $args = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)=(.+)$/',$arg,$match)) $args[$match[1]] = $match[2]; else $args[] = $arg; } $this->args[$id] = $args; return "<$magic>$id</$magic>"; }

# Convert the $magic tags to client-side javascript request code from its stored parameters function tagHook($id,$argv,&$parser) {

$args = $this->args[$id];

return ""; }

  1. Called from $wgExtensionFunctions array when initialising extensions

function wfSetupLiveWiki() { global $wgLiveWiki,$wgLiveWikiMagic; $wgLiveWiki = new LiveWiki($wgLiveWikiMagic); }

  1. Needed in MediaWiki >1.8.0 for magic word hooks to work properly

function wfLiveWikiLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgLiveWikiMagic; $magicWords[$wgLiveWikiMagic] = array(0,$wgLiveWikiMagic); return true; } ?>