Extension:Livelets.php
<?
- Extension:LiveletsTemplate:Php
Scripts and articles related to Extension:Livelets, see also Wiklets
- - Allows articles to be transcluded which load after the main page content and can update dynamically with Ajax
- - See http://www.mediawiki.org/wiki/Extension:Livelets for installation and usage details
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: http://www.organicdesign.co.nz/nad
define('LIVELETS_VERSION', '0.2.5, 2007-10-05');
$wgLiveletsMagic = 'live'; # the parser-function name for doing live-transclusions
$wgLiveletsUseSWF = false; # Set this to true to use SWF to make livelets fully event-driven (no polling for change) $wgLiveletsSwfBg = '#ffffff'; # The background colour of the embedded SWF $wgLiveletsPort = '1729'; # The port that Livelets.pl can be reached on (using $wgServer:$wgLiveletsPort)
$wgLiveletsPath = dirname(__FILE__); $wgLiveletsBaseUrl = preg_replace('|^.+(?=/extensions)|',$wgScriptPath,$wgLiveletsPath);
$wgLiveletsDefaultContent = "
";
$wgExtensionFunctions[] = 'wfSetupLivelets'; $wgHooks['LanguageGetMagic'][] = 'wfLiveletsLanguageGetMagic';
$wgExtensionCredits['parserhook'][] = array( 'name' => 'Livelets', 'author' => 'User:Nad', 'description' => 'Allows articles to be transcluded which load after the main page content and can update dynamically with Ajax', 'url' => 'http://www.mediawiki.org/wiki/Extension:Livelets', 'version' => LIVELETS_VERSION );
class Livelets {
var $version = LIVELETS_VERSION; var $id = 0;
# Constructor function Livelets() { global $IP,$wgOut,$wgParser,$wgServer,$wgLiveletsMagic,$wgLiveletsUseSwf,$wgLiveletsSwfBg,$wgLiveletsPort;
# Activate the #live parser-function $wgParser->setFunctionHook($wgLiveletsMagic,array($this,'functionHook'));
# Embed the SWF if enabled (SWF must be requested from Livelets.pl) if ($wgLiveletsUseSwf) { $swf = "$wgServer:$wgLiveletsPort/Livelets.swf"; $wgOut->addHTML("<object type=\"application/x-shockwave-flash\" data=\"$swf\" width=\"1\" height=\"1\"> <param name=\"movie\" value=\"$swf\" /><param name=\"bgcolor\" value=\"$wgLiveletsSwfBg\"/></object>"); } }
# Render livelet container function functionHook(&$parser) { global $wgScript,$wgTitle,$wgLiveletsPath,$wgLiveletsDefaultContent;
# Process parameters $argv = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^([a-z0-9_]+?)\\s*=(.+)$/is',$arg,$match)) $argv[trim($match[1])] = trim($match[2]); else $argv['title'] = trim($arg); } $title = $argv['title']; $update = isset($argv['update']) ? $argv['update'] : 0; unset($argv['update']); if (isset($argv['type'])) $type = $argv['type']; unset($argv['type']);
# Render container $args = ; foreach ($argv as $k => $v) $args .= " $k=\"$v\""; $id = 'livelet'.$this->id++;
$html = "<div$args id='$id'>$wgLiveletsDefaultContent";
if ($update >= 0) $html .= "<script type='text/javascript'>x = sajax_do_call('wfSimpleFormsAjax',['title=$title'],document.getElementById('$id'))</script>";
return array($html,'isHTML' => true,'noparse' => true); }
}
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupLivelets() { global $wgLivelets; $wgLivelets = new Livelets(); }
- Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function wfLiveletsLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgLiveletsMagic; $magicWords[$wgLiveletsMagic] = array(0,$wgLiveletsMagic); return true; } ?>