|
|
Line 1: |
Line 1: |
− | <?
| + | {{svn|http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Livelets}} |
− | # Extension:Livelets{{php}}{{Category:Extensions|Livelets}}{{Category:Livelets}}{{Category:Extensions in progress|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');
| + | == Notes == |
− | | + | Add dev notes here, e.g. regarding the SWF live updates |
− | $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;
| |
− | }
| |