Extension:PropertyTable/PropertyTable.php
From MediaWiki.org
<?php // PropertyTable MediaWiki Extension. // Outputs a table with keys and values. // Copyright (C) 2007, Benner Sistemas. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA $PropertyTableVersion = '1.2.0'; #---------------------------------------------------------------------------- # Internationalized messages #---------------------------------------------------------------------------- $wgPropertyTablePrefix = "propertytable_"; $wgPropertyTableMessages = array(); // English $wgPropertyTableMessages['en'] = array( $wgPropertyTablePrefix . 'tag' => 'properties', ); // Polish (PL) $wgPropertyTableMessages['pl'] = array( $wgPropertyTablePrefix . 'tag' => 'wlasciwosci', ); // Portuguese (Brazilian) $wgPropertyTableMessages['pt-br'] = array( $wgPropertyTablePrefix . 'tag' => 'propriedades', ); #---------------------------------------------------------------------------- # Extension initialization #---------------------------------------------------------------------------- // HTML attributes of the table tag $wgPropertyTableAttributes = 'class="property_table" border="0" cellpadding="2" cellspacing="4"'; // HTML attributes of key cells $wgPropertyTableKeyAttributes = 'class="property_key_cell" valign="top" bgcolor="#E8F3FF" style="font-weight: bold"'; // HTML attributes of value cells $wgPropertyTableValueAttributes = 'class="property_value_cell" valign="top" bgcolor="#F3F3F3"'; // credits $wgExtensionCredits['parserhook'][] = array( 'name'=>'PropertyTable', 'version'=>$PropertyTableVersion, 'author'=>'Fernando Correia', 'url'=>'http://www.mediawiki.org/wiki/Extension:PropertyTable', 'description' => 'Outputs a table with keys and values' ); // extension initialization $wgExtensionFunctions[] = "fnPropertyTableExtension"; $wgExtensionFunctions[] = 'wfPropertyTableParserFunctionSetup'; $wgHooks['LanguageGetMagic'][] = 'wfPropertyTableParserFunctionMagic'; // Registers the extension with the WikiText parser. function fnPropertyTableExtension() { // register messages global $wgMessageCache, $wgPropertyTableMessages; foreach( $wgPropertyTableMessages as $sLang => $aMsgs ) { $wgMessageCache->addMessages( $aMsgs, $sLang ); } // register the extension with the WikiText parser global $wgParser; $wgParser->setHook( wfMsg('propertytable_tag'), "fnPropertyTableTag" ); } // Initializes the parser function. function wfPropertyTableParserFunctionSetup() { global $wgParser; # Set a function hook associating the magic word with our function $wgParser->setFunctionHook( "properties", 'wfPropertyTableParserFunctionRender' ); } // Configures the parser function magic word. function wfPropertyTableParserFunctionMagic( &$magicWords, $langCode ) { # Add the magic word # The first array element is case sensitivity, in this case it is not case sensitive # All remaining elements are synonyms for our parser function $magicWords["properties"] = array( 0, "properties", "propriedades", "wlasciwosci" ); // TODO: build from $wgPropertyTableMessages # unless we return true, other parser functions extensions won't get loaded. return true; } #---------------------------------------------------------------------------- # Event handlers #---------------------------------------------------------------------------- // Processes the parser function. // Generates HTML using extension tag. // The parser function can be used within templates. function wfPropertyTableParserFunctionRender( &$parser, $lines ) { // return HTML using extension tag $tag = wfMsg('propertytable_tag'); $result = "<$tag>\n"; $result .= $lines; $result .= "</$tag>\n"; return $result; } // Processes the tag. function fnPropertyTableTag($input, $argv, &$parser) { // initialize $sequence = 0; // parse input $properties = array(); $tok = strtok($input, "\n"); while ($tok !== false) { $line = explode("=", $tok); if (count($line) == 2) { $properties[] = $line; } $tok = strtok("\n"); } // produce output if (count($properties) == 0) return ''; global $wgPropertyTableAttributes, $wgPropertyTableKeyAttributes, $wgPropertyTableValueAttributes; $result = "<table $wgPropertyTableAttributes>\n"; foreach ($properties as $line) { $key = trim($line[0]); if ($key == "#") { $sequence++; $key = strval($sequence); } else if ($key == "@") { $sequence++; $key = chr(64 + $sequence); } $value = trim($line[1]); $pout = $parser->parse($key, $parser->mTitle, $parser->mOptions, false, false); $html_key = $pout->getText(); $pout = $parser->parse($value, $parser->mTitle, $parser->mOptions, false, false); $html_value = $pout->getText(); if (!empty($key) && !empty($value)) { $result .= "<tr><td $wgPropertyTableKeyAttributes>$html_key</td>" . "<td $wgPropertyTableValueAttributes>$html_value</td></tr>\n"; } } $result .= "</table>"; return $result; } ?>
