Extension:Livelets.php
<?
- Extension:LiveletsTemplate:Php
- - 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.0, 2007-06-19');
$wgLiveletsMagic = "live"; # the parser-function name for doing live-transclusions $wgLiveletsMoo = ""; # the relative URL to mootools ajax.js script (don't set this if it's already been included by another extension)
$wgLiveletsSWF = dirname(__FILE__).'/Livelets.swf'; $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 $wgParser,$wgLiveletsMagic,$wgLiveletsMoo; $wgParser->setFunctionHook($wgLiveletsMagic,array($this,'functionHook')); if ($wgLiveletsMoo) $wgOut->addScript("<script type=\"text/javascript\" src=\"$wgLiveletsMoo\"></script>"); }
# Remove live container content function functionHook(&$parser,$title) { global $wgScript,$wgLiveletsPath; $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); }
function addJSandSWF() { global $wgOut,$wgLiveletsPath,$wgAddJavaScriptFunctions;
# JS SWF recv: function livelets_DoFScommand(cmd,args) { alert(args) }
# Embed livelets.swf into the output page # NOTE: this actually needs to be served by the WikiDaemon, not the PHP #$swf = "$wgLiveletsPath/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>"); }
}
- 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; } ?>