Personal tools




Extension:Livelets.php

From OrganicDesign Wiki

Jump to: navigation, search
<?
# Extension:Livelets
# - 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.6, 2007-11-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      = "<div style='text-align:center'><img src='$wgLiveletsBaseUrl/wait.gif'/></div>";
$wgExtensionFunctions[]        = 'wfSetupLivelets';
$wgHooks['LanguageGetMagic'][] = 'wfLiveletsLanguageGetMagic';
 
$wgExtensionCredits['parserhook'][] = array(
	'name'        => 'Livelets',
	'author'      => '[http://www.organicdesign.co.nz/User:Nad 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</div>";
		if ($update >= 0) $html .= "<script type='text/javascript'>x = sajax_do_call('wfSimpleFormsAjax',['title=$title','pagename={$wgTitle->getFullText()}'],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;
}

The GNU Project Debian Linux Ubuntu Linux Wikipedia Affiliate Button MediaWiki