Difference between revisions of "Extension:DisplayFilter.php"

From Organic Design wiki
(general pf struct)
m
 
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
<?php
+
{{legacy}}
# Extension:Display Filter{{Category:Extensions|DisplayFilter}}{{#Security:*|dev}}{{#Security:view|*}}{{php}}
+
<php><?php
 +
# Extension:Display Filter
 
# - 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|DisplayFilter}}
+
# - Author: [http://www.organicdesign.co.nz/nad User:Nad]
 
   
 
   
 
if (!defined('MEDIAWIKI')) die('Not an entry point.');
 
if (!defined('MEDIAWIKI')) die('Not an entry point.');
Line 24: Line 25:
  
 
class DisplayFilter {
 
class DisplayFilter {
 
# Properties
 
var $prop1: 'default value';
 
var $prop2: 'default value';
 
 
   
 
   
 
# Constructor
 
# Constructor
Line 36: Line 33:
 
   
 
   
 
# Expand the filter-magic
 
# Expand the filter-magic
function magicFilter(&$parser) {
+
function filter(&$parser) {
 
$this->addJS();
 
$this->addJS();
 
$argv = array();
 
$argv = array();
 
foreach (func_get_args() as $arg) if (!is_object($arg)) {
 
foreach (func_get_args() as $arg) if (!is_object($arg)) {
 +
$arg = ereg_replace('[\\\\\'"]','',$arg);
 
if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg;
 
if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg;
 
}
 
}
 
$anchor = array_shift($argv);
 
$anchor = array_shift($argv);
 
$atts = array();
 
$atts = array();
$atts['href'] = 'javascript:filter(['.join(',',$arg).'])';
+
$atts['href'] = "javascript:filter(['".join("','",$argv)."'])";
 
$link = '<a';
 
$link = '<a';
foreach ($atts as $k => $v) $link .= "$k=\"$v\"";
+
foreach ($atts as $k => $v) $link .= " $k=\"$v\"";
 
$link .= ">$anchor</a>";
 
$link .= ">$anchor</a>";
 
return array($link,'noparse' => true, 'isHTML'  => true);
 
return array($link,'noparse' => true, 'isHTML'  => true);
Line 54: Line 52:
 
function addJS() {
 
function addJS() {
 
global $wgOut,$wgJS,$wgJsMimeType;
 
global $wgOut,$wgJS,$wgJsMimeType;
if (isset($wgJS['TreeView'])) return;
+
if (isset($wgJS['DisplayFilter'])) return;
 
$wgJS['DisplayFilter'] = true;
 
$wgJS['DisplayFilter'] = true;
 
$wgOut->addScript('<script type="'.$wgJsMimeType.'">
 
$wgOut->addScript('<script type="'.$wgJsMimeType.'">
Line 74: Line 72:
 
global $wgDisplayFilter;
 
global $wgDisplayFilter;
 
$wgDisplayFilter = new DisplayFilter();
 
$wgDisplayFilter = new DisplayFilter();
if (version_compare($wgVersion,'1.9.0')<0) $wgTreeView->addJS(); # addScript doesn't seem to work from within parser on MW versions < 1.9.x
+
$wgDisplayFilter->addJS(); # addScript doesn't seem to work from within parser
 
}
 
}
 
   
 
   
Line 84: Line 82:
 
}
 
}
 
?>
 
?>
 +
</php>
 +
[[Category:Legacy Extensions|DisplayFilter]]

Latest revision as of 14:55, 22 October 2014

Legacy.svg Legacy: This article describes a concept that has been superseded in the course of ongoing development on the Organic Design wiki. Please do not develop this any further or base work on this concept, this is only useful for a historic record of work done. You may find a link to the currently used concept or function in this article, if not you can contact the author to find out what has taken the place of this legacy item.

<php><?php

  1. Extension:Display Filter
  2. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
  3. - Author: User:Nad

if (!defined('MEDIAWIKI')) die('Not an entry point.');

define('DISPLAYFILTER_VERSION','0.0.2, 2007-05-15');

$wgDisplayFilterMagic = "filter"; $wgExtensionFunctions[] = 'wfSetupDisplayFilter'; $wgHooks['LanguageGetMagic'][] = 'wfDisplayFilterLanguageGetMagic';

$wgExtensionCredits['parserhook'][] = array( 'name' => 'Display Filter', 'author' => 'User:Nad', 'description' => 'Create links which control visibility of areas by CSS class', 'url' => 'http://www.mediawiki.org/wiki/Extension:Display_Filter', 'version' => DISPLAYFILTER_VERSION );

  1. Keep track of JavaScript added to page to avoid doubleups

if (!isset($wgJS)) $wgJS = array();

class DisplayFilter {

# Constructor function DisplayFilter() { global $wgParser,$wgDisplayFilterMagic; $wgParser->setFunctionHook($wgDisplayFilterMagic,array($this,'filter')); }

# Expand the filter-magic function filter(&$parser) { $this->addJS(); $argv = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { $arg = ereg_replace('[\\\\\'"]',,$arg); if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg; } $anchor = array_shift($argv); $atts = array(); $atts['href'] = "javascript:filter(['".join("','",$argv)."'])"; $link = '<a'; foreach ($atts as $k => $v) $link .= " $k=\"$v\""; $link .= ">$anchor</a>"; return array($link,'noparse' => true, 'isHTML' => true); }

# Add the javascript to the output object if not added yet and there is at least one tree function addJS() { global $wgOut,$wgJS,$wgJsMimeType; if (isset($wgJS['DisplayFilter'])) return; $wgJS['DisplayFilter'] = true; $wgOut->addScript('<script type="'.$wgJsMimeType.'"> function filter(args) { if (args.length == 1) { } else { } } </script>'); }

# Needed in some versions to prevent Special:Version from breaking function __toString() { return 'Display Filter'; }

	}

  1. Called from $wgExtensionFunctions array when initialising extensions

function wfSetupDisplayFilter() { global $wgDisplayFilter; $wgDisplayFilter = new DisplayFilter(); $wgDisplayFilter->addJS(); # addScript doesn't seem to work from within parser }

  1. Needed in MediaWiki >1.8.0 for magic word hooks to work properly

function wfDisplayFilterLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgDisplayFilterMagic; $magicWords[$wgDisplayFilterMagic] = array(0,$wgDisplayFilterMagic); return true; } ?> </php>