avbarchart plugin by Sherri W. (http://www.start.ofitall.com)
Generates a simple HTML/CSS bar chart.
Last updated on 2009-05-15. Provides Syntax.
Compatible with DokuWiki rc2007-05-24 +.
Similar to pchart.
| Download/Install | plugin-avbarchart.zip (Paste this into the Plugin Manager to install automatically.) |
|---|---|
| Last Updated | 2009-05-15 |
With this plugin you can create a quick and easy bar chart on your DokuWiki page. It uses CSS and HTML only and no images needed.
Screenshot and info available here: source.ofitall.com.
<barchart>1000|A:500,B:50,C:250,D:1000</barchart>
You can then use regular DokuWiki syntax to put a title above it and if needed, a legend below to describe the labels. If you make the bars wide, the labels can be full text.
avbarchart/ in your plugins directory.syntax.php in the avbarchart directory.// ********* CHART CONFIG SETTINGS ************* var $barWidth = 20; //Pixel width of chart bars. var $barColor = "#ccccff"; //Color of graph bars. var $fontSize = "8pt;"; //Font size of labels and values. var $maxPxHeight = "100"; //Maximum height of the chart in pixels. // *********************************************
If your barWidth is not wider than the labels, your chart will look funny. Different colors for different bars is not supported currently.
Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\xampp\htdocs\dokuwiki_castor\lib\plugins\avbarchart\syntax.php:157) in C:\Program Files\xampp\htdocs\dokuwiki_castor\inc\actions.php on line 154 when using headings (H1-H5). 2007-10-19
2009-05-15
<?php /** * Plugin AVBarChart: Generates a very simple CSS/HTML bar chart" * * USAGE: <barchart>MAXVAL|Label1:#,Label2:#,Label3:#</barchart> * * EXAMPLE: <barchart>100|A:55,B:5,C:23,D:38</barchart> * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Sherri W. (http://www.start.ofitall.com) */ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_avbarchart extends DokuWiki_Syntax_Plugin { // ********* CHART CONFIG SETTINGS ************* var $barWidth = 20; //Pixel width of chart bars. var $barColor = "#ccccff"; //Color of graph bars. var $fontSize = "8pt;"; //Font size of labels and values. var $maxPxHeight = "100"; //Maximum height of the chart in pixels. // ********************************************* /** * return some info */ function getInfo(){ return array( 'author' => 'Sherri W.', 'email' => 'Use my website: www.start.ofitall.com', 'date' => '2009-05-15, 'name' => 'AV Bar Chart', 'desc' => 'Generates a very simple CSS/HTML bar chart.', 'url' => 'http://www.dokuwiki.org/wiki:plugins', ); } /** * What kind of syntax are we? */ function getType(){ return 'substition'; } /** * Where to sort in? */ function getSort(){ return 999; } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addEntryPattern('\<barchart\>',$mode,'plugin_avbarchart'); } function postConnect() { $this->Lexer->addExitPattern('\</barchart\>','plugin_avbarchart'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler){ switch ($state) { case DOKU_LEXER_ENTER : return array($state, ''); case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : $chart = ""; list($maxRange,$data1) = split("\|", $match); $maxRange = floatval($maxRange); if($maxRange > 0 && !empty($data1)){ $values = split(",", $data1); $chart = ""; foreach($values as $col){ if(!empty($col)){ list($label, $amount) = split(":", $col); $amount = floatval($amount); if(empty($label)){$label=' ';} if($amount >= 0){ $height = round(($amount/$maxRange*$this->maxPxHeight)); $chart .= "<td valign='bottom' align='center'><span style='font-size:".$this->fontSize.";'>".$amount."</span><br clear='all'><table style='display:inline;' cellpadding='1' cellspacing='0'><tr><td height='".$height."' width='".$this->barWidth."' bgcolor='".$this->barColor."' valign='bottom'></td></tr></table><br clear='all' /><span style='font-size:".$this->fontSize.";'><b>".$label."</b></span></td>"; } } } } $match = $chart; return array($state, $match); case DOKU_LEXER_EXIT : return array($state, ''); case DOKU_LEXER_SPECIAL : break; } return array(); } /** * Create output */ function render($mode, &$renderer, $data) { if($mode == 'xhtml'){ list($state, $match) = $data; switch ($state) { case DOKU_LEXER_ENTER : $renderer->doc .= "<table border='0' cellspacing='2'><tr>"; break; case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : $renderer->doc .= $match; break; case DOKU_LEXER_EXIT : $renderer->doc .= "</tr></table>"; break; case DOKU_LEXER_SPECIAL : break; } return true; } return false; } } // End class ?>
Hi everyone, let me know what you think. ~Sherri
Simple and elegant plugin. Excellent work!. ~Dmitri
I liked it, too. But what I miss is a simple plugin for Gantt charts. This plugin could be the one if horizontal bars and different start points were allowed. Thanks! ~TJPP
This is a nice plugin. Whenever I use this avbarchart plugin, I kept getting an error message IF I'm using headers (H1-H5), stating that headers already been sent bla bla bla… How to solve this? Thanks ~Yohan