Difference between revisions of "Extension:Wiklets.php"
(general structure) |
(currently has to use iFrames not div's) |
||
Line 3: | Line 3: | ||
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html) | # - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html) | ||
# - Author: [http://www.organicdesign.co.nz/nad User:Nad]{{Category:Extensions created with Template:Extension}}{{Category:Wiklets}} | # - Author: [http://www.organicdesign.co.nz/nad User:Nad]{{Category:Extensions created with Template:Extension}}{{Category:Wiklets}} | ||
− | + | ||
if (!defined('MEDIAWIKI')) die('Not an entry point.'); | if (!defined('MEDIAWIKI')) die('Not an entry point.'); | ||
− | + | ||
− | define('WIKLETS_VERSION','0.0. | + | define('WIKLETS_VERSION','0.0.2, 2007-06-28'); |
− | + | ||
− | $wgWikletsMagic | + | $wgWikletsMagic = "wiklet"; # The parser-function name for making a wiklet (transcluded content in a popup) |
+ | $wgWikletsLoadJS = ""; # The URL of the dragiframe.js file, leave empty if loaded from elsewhere | ||
+ | $wgWikletsToTop = true; # Raise wiklets to top when clicked | ||
+ | $wgWikletsOffScreen = false; # Set to true if you want wiklets to be able to be dragged outside the screen boundaries | ||
+ | |||
$wgExtensionFunctions[] = 'wfSetupWiklets'; | $wgExtensionFunctions[] = 'wfSetupWiklets'; | ||
$wgHooks['LanguageGetMagic'][] = 'wfWikletsLanguageGetMagic'; | $wgHooks['LanguageGetMagic'][] = 'wfWikletsLanguageGetMagic'; | ||
− | + | ||
$wgExtensionCredits['parserhook'][] = array( | $wgExtensionCredits['parserhook'][] = array( | ||
'name' => 'Wiklets', | 'name' => 'Wiklets', | ||
'author' => '[http://www.organicdesign.co.nz/nad User:Nad]', | 'author' => '[http://www.organicdesign.co.nz/nad User:Nad]', | ||
'description' => 'Transclude templates into movable floating panels', | 'description' => 'Transclude templates into movable floating panels', | ||
− | 'url' => 'http://www. | + | 'url' => 'http://www.mediawiki.org/wiki/Extension:Wiklets', |
'version' => WIKLETS_VERSION | 'version' => WIKLETS_VERSION | ||
); | ); | ||
− | + | ||
class Wiklets { | class Wiklets { | ||
− | + | ||
# Properties | # Properties | ||
var $id = 0; | var $id = 0; | ||
− | + | ||
# Constructor | # Constructor | ||
function Wiklets() { | function Wiklets() { | ||
− | global $wgParser,$wgWikletsMagic; | + | global $wgParser,$wgWikletsMagic,$wgWikletsLoadJS,$wgWikletsToTop,$wgWikletsOffScreen; |
− | $wgParser->setFunctionHook($wgWikletsMagic,array($this,' | + | $wgParser->setFunctionHook($wgWikletsMagic,array($this,'magic')); |
+ | if ($wgWikletsLoadJS) $wgOut->addScript("<script type=\"text/javascript\" src=\"$wgWikletsLoadJS\"></script>"); | ||
+ | $script = ''; | ||
+ | if ($wgWikletsToTop) $script .= "bringSelectedIframeToTop(true);\n"; | ||
+ | if ($wgWikletsOffScreen) $script .= "allowDragOffScreen(true);\n"; | ||
+ | if ($script) $wgOut->addScript("<script type=\"text/javascript\">$script</script>"); | ||
} | } | ||
− | + | ||
# Expand the wiklet-magic | # Expand the wiklet-magic | ||
− | function | + | function magic(&$parser) { |
− | + | $id = 'wiklet-'.$this->id++; | |
− | $id = $this->id++; | ||
$argv = array(); | $argv = array(); | ||
$content = ''; | $content = ''; | ||
Line 40: | Line 48: | ||
if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $content = $arg; | if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $content = $arg; | ||
} | } | ||
+ | $args = ''; | ||
+ | foreach ($argv as $k => $v) $args .= " $k=\"$v\""; | ||
+ | $text = "<iframe$args id=\"$id\" name=\"$id\"></iframe>"; | ||
return array($text, 'noparse' => true, 'isHTML' => true); | return array($text, 'noparse' => true, 'isHTML' => true); | ||
} | } | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
# Needed in some versions to prevent Special:Version from breaking | # Needed in some versions to prevent Special:Version from breaking | ||
function __toString() { return 'Wiklets'; } | function __toString() { return 'Wiklets'; } | ||
} | } | ||
− | + | ||
# Called from $wgExtensionFunctions array when initialising extensions | # Called from $wgExtensionFunctions array when initialising extensions | ||
function wfSetupWiklets() { | function wfSetupWiklets() { | ||
Line 76: | Line 64: | ||
$wgWiklets->addJS(); # addScript doesn't seem to work from within parser | $wgWiklets->addJS(); # addScript doesn't seem to work from within parser | ||
} | } | ||
− | + | ||
# Needed in MediaWiki >1.8.0 for magic word hooks to work properly | # Needed in MediaWiki >1.8.0 for magic word hooks to work properly | ||
function wfWikletsLanguageGetMagic(&$magicWords,$langCode = 0) { | function wfWikletsLanguageGetMagic(&$magicWords,$langCode = 0) { |
Revision as of 04:23, 28 June 2007
<?php
- Extension:Wiklets
{{#Security:*|dev}}{{#Security:view|*}}Template:Php
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: User:NadCategory:Extensions created with Template:ExtensionCategory:Wiklets
if (!defined('MEDIAWIKI')) die('Not an entry point.');
define('WIKLETS_VERSION','0.0.2, 2007-06-28');
$wgWikletsMagic = "wiklet"; # The parser-function name for making a wiklet (transcluded content in a popup) $wgWikletsLoadJS = ""; # The URL of the dragiframe.js file, leave empty if loaded from elsewhere $wgWikletsToTop = true; # Raise wiklets to top when clicked $wgWikletsOffScreen = false; # Set to true if you want wiklets to be able to be dragged outside the screen boundaries
$wgExtensionFunctions[] = 'wfSetupWiklets'; $wgHooks['LanguageGetMagic'][] = 'wfWikletsLanguageGetMagic';
$wgExtensionCredits['parserhook'][] = array( 'name' => 'Wiklets', 'author' => 'User:Nad', 'description' => 'Transclude templates into movable floating panels', 'url' => 'http://www.mediawiki.org/wiki/Extension:Wiklets', 'version' => WIKLETS_VERSION );
class Wiklets {
# Properties var $id = 0;
# Constructor function Wiklets() { global $wgParser,$wgWikletsMagic,$wgWikletsLoadJS,$wgWikletsToTop,$wgWikletsOffScreen; $wgParser->setFunctionHook($wgWikletsMagic,array($this,'magic')); if ($wgWikletsLoadJS) $wgOut->addScript("<script type=\"text/javascript\" src=\"$wgWikletsLoadJS\"></script>"); $script = ; if ($wgWikletsToTop) $script .= "bringSelectedIframeToTop(true);\n"; if ($wgWikletsOffScreen) $script .= "allowDragOffScreen(true);\n"; if ($script) $wgOut->addScript("<script type=\"text/javascript\">$script</script>"); }
# Expand the wiklet-magic function magic(&$parser) { $id = 'wiklet-'.$this->id++; $argv = array(); $content = ; foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $content = $arg; } $args = ; foreach ($argv as $k => $v) $args .= " $k=\"$v\""; $text = "<iframe$args id=\"$id\" name=\"$id\"></iframe>"; return array($text, 'noparse' => true, 'isHTML' => true); }
# Needed in some versions to prevent Special:Version from breaking function __toString() { return 'Wiklets'; }
}
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupWiklets() { global $wgWiklets; $wgWiklets = new Wiklets(); $wgWiklets->addJS(); # addScript doesn't seem to work from within parser }
- Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function wfWikletsLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgWikletsMagic; $magicWords[$wgWikletsMagic] = array(0,$wgWikletsMagic); return true; } ?>