Personal tools


Extension:ExpandableTables.php

From OrganicDesign

Jump to: navigation, search
Image:legacy.png
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
# Extension:ExpandableTables
# - See http://www.mediawiki.org/wiki/Extension:ExpandableTables for installation and usage details
# - Started: 2007-02-22
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
 
if (!defined('MEDIAWIKI')) die('Not an entry point.');
 
define('EXPANDABLES_VERSION','1.1.1, 2007-05-10');
 
$wgExtensionCredits['other'][] = array(
	'name'        => "ExpandableTables",
	'author'      => '[http://www.organicdesign.co.nz/nad User:Nad]',
	'description' => 'Allows expandable/collapsable tables to be created similar to [http://en.wikinews.org WikiNews]',
	'url'         => 'http://www.mediawiki.org/wiki/Extension:Expandable tables',
	'version'     => EXPANDABLES_VERSION
	);
 
$wgHooks['ParserAfterTidy'][] = 'allowExpandables';
function allowExpandables(&$parser,&$text) {
	if ($GLOBALS['allowex-done']++) return true;
	# Replace all the expandable tables with html containing CSS classes and the show/hide links
	$text = preg_replace_callback(
		'/<table class=["\']?expandable["\']? title=["\']?(.+?)["\']?\\s*(id=["\']?.+?["\']?)?\\s*>(.+?<\\/table\\s*?>)/s',
		'expandableCallback',
		"\n<script type='text/javascript'>
		function toggleExpandable(id) {
			var heading = document.getElementById('expandable-heading-'+id);
			var content = document.getElementById('expandable-content-'+id);
			if (content.style.display == 'none') content.style.display = '';
			else content.style.display = 'none';
			this.parent.focus();
			}
		</script>\n$text"
		);
	return true;
	}
 
# Callback function executed for rendering each expandable table
function expandableCallback($matches) {
	$i = ++$GLOBALS["expandable/tbl-count"];
	$open = $matches[2] ? '' : ' style="display:none;"'; # default to expanded in id present after title attribute
	return '<table class=expandable-heading id=expandable-heading-'.$i.'>
		<tr><td><a class=expandable-link href="javascript:toggleExpandable('.$i.')">&#9658; '.$matches[1].'</a></td></tr>
		<tr id=expandable-content-'.$i.$open.'><td><table class=expandable-content>'.$matches[3].'</td></tr></table>';
	}