Difference between revisions of "Extension:Livelets.php"

From Organic Design wiki
(moved to wikimedia)
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
<?
+
{{svn|http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Livelets}}
# Extension:Livelets{{php}}{{Category:Extensions|Livelets}}{{Category: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.4, 2007-08-08');
+
== Notes ==
 
+
Add dev notes here, e.g. regarding the SWF live updates
$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)
 
$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,$wgLiveletsBaseUrl,$wgLiveletsMagic,$wgLiveletsMoo,$wgLiveletsPath,
 
$wgLiveletsUseSwf,$wgLiveletsSwfBg,$wgLiveletsPort;
 
 
 
# Activate the #live parser-function
 
$wgParser->setFunctionHook($wgLiveletsMagic,array($this,'functionHook'));
 
 
 
# Include Livelets.js
 
$wgOut->addScript("<script type=\"text/javascript\" src=\"$wgLiveletsBaseUrl/Livelets.js\"></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=\"1\" height=\"1\">
 
<param name=\"movie\" value=\"$swf\" /><param name=\"bgcolor\" value=\"$wgLiveletsSwfBg\"/></object>");
 
}
 
}
 
 
 
# Render livelet container
 
function functionHook(&$parser) {
 
global $wgScript,$wgLiveletsPath,$wgLiveletsDefaultContent;
 
 
 
# Process parameters
 
$args = '';
 
$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);
 
}
 
if (isset($argv['update'])) { $update = $argv['update']; unset($argv['update']); }
 
if (isset($argv['type']))  { $type = $argv['type']; unset($argv['type']); }
 
foreach ($argv as $k => $v) $args .= " $k=\"$v\"";
 
 
 
# Determine URL
 
if (isset($argv['title'])) {
 
$title = Title::newFromText($argv['title']);
 
if (is_object($title)) $argv['url'] = $title->getLocalURL('action=render&pagename='.$wgTitle->getPrefixedText());
 
}
 
 
 
# Render container
 
$id = 'livelet'.$this->id++;
 
$content = isset($argv['url']) ? $wgLiveletsDefaultContent : "Error: No URL";
 
$html = "<div$args id='$id'>$content</div>";
 
if (isset($update)) $html .= "<script type='text/javascript'>updateLivelet('$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;
 
}
 
?>
 

Latest revision as of 02:55, 4 September 2010

Info.svg This code is in our Git repository here.

Note: If there is no information in this page about this code and it's a MediaWiki extension, there may be something at mediawiki.org.

Notes

Add dev notes here, e.g. regarding the SWF live updates