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.1, 2007-07-09');
$wgLiveletsMagic = "live"; # the parser-function name for doing live-transclusions $wgLiveletsMoo = ; # Set this to the relative path of Mootools.js unless loaded elsewhere $wgLiveletsUseSWF = false; # Set this to true to use SWF to make livelets fully event-driven (no polling for change)
$wgLiveletsPath = dirname(__FILE__);
$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,$wgParser,$wgServer,$wgLiveletsMagic,$wgLiveletsMoo,$wgLiveletsUseSWF,$wgLiveletsPort,$wgLiveletsPath;
# Activate the #live parser-function $wgParser->setFunctionHook($wgLiveletsMagic,array($this,'functionHook'));
# Include Livelets.js $url = str_replace($wgLiveletsPath,$IP,).'/Livelets.js'; $wgOut->addScript("<script type=\"text/javascript\" src=\"$url\"></script>");
# Include Mootools.js is set if ($wgLiveletsMoo) $wgOut->addScript("<script type=\"text/javascript\" src=\"$wgLiveletsMoo\"></script>");
# 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=\"width\" height=\"$height\"> <param name=\"movie\" value=\"$swf\" /><param name=\"bgcolor\" value=\"#ffffff\"/></object>"); } }
# Render livelet container function functionHook(&$parser,$title) { global $wgScript,$wgLiveletsPath,$wgLiveletsDefaultContent; $id = 'livelet'.$this->id++; # this should be a GUID unset($argv['type']); $element = 'a'; $options = "{data:'action=render',update:$('$update')}"; if ($content == ) $content = $link; if (preg_match('/^\\w/',$link)) { $title = Title::newFromText($link); $argv['class'] = $title->exists() ? 'ajax' : 'new ajax'; $link = $title->getLocalURL(); } $argv['href'] = "javascript:var a=new Ajax('$link',$options).request()";
$url = Title::newFromText($title)->getFullURL('action=render');
$html = "
";
$html .= "<script type='text/javascript'>liveletRequest('$id')</script>"; return array($html,'isHTML' => true,'noparse' => true); }
}
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupLivelets() { global $wgLivelets,$wgScriptPath,$wgLiveletsPath; $wgLivelets = new Livelets(); if ($wgLiveletsPath == ) $wgLiveletsPath = "$wgScriptPath/extensions/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; } ?>