Author: DanielRohde Date: 2006-10-04 15:50:07 -0500 (Wed, 04 Oct 2006) New Revision: 11661 Modified: twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/data/TWiki/RackPlannerPlugin.txt twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin.pm twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin/RackPlanner.pm Log: Item2961: allowed multiple entries in a single unit Modified: twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/data/TWiki/RackPlannerPlugin.txt =================================================================== --- twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/data/TWiki/RackPlannerPlugin.txt 2006-10-04 13:14:14 UTC (rev 11660) +++ twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/data/TWiki/RackPlannerPlugin.txt 2006-10-04 20:50:07 UTC (rev 11661) @@ -1,12 +1,15 @@ -%META:TOPICINFO{author="TWikiContributor" date="1157634031" format="1.0" version="$Rev$"}% +%META:TOPICINFO{author="TWikiContributor" date="1159975034" format="1.0" version="$Rev$"}% ---+ <nop>RackPlannerPlugin The <nop>RackPlannerPlugin handles the tag =%<nop>RACKPLANNER%= and renders a rack overview (HTML table) with devices (computer, router, switches, ...). ---++ Syntax Rules Devices are defined within a TWiki table. Following columns are supported (one row per device): | *Device* | *Rack* | *Starting Unit* | *Form Factor* | *Connected to:* | *Owner* | *Color/Image* | *Notes* | -| device name | rack name | a starting unit (a number between 1 and =units=) | a form factor (units, e.g. 4U, 2, 1U, ...) | device is connected to ... (comma separated list of other devices, ports ...); every 'connected to' item is displayed as a icon (see =connectedtoicon=, e.g. %M%) with the text as tooltip; if you use links the icons are also links | the device owner is displayed as tooltip of the server name | a color or a background image URL for the table data cell | notes are displayed as a icon (=notesicon= e.g. %P%) with the note as tooltip; if you use a link the icon is also a link | +| device name(s) (separated by =' / '= or =' # '=) | rack name | a starting unit (a number between 1 and =units=) | a form factor (units, e.g. 4U, 2, 1U, ...) | device(s) is/are connected to ... (comma separated list of other devices, ports ...); every 'connected to' item is displayed as a icon (see =connectedtoicon=, e.g. %M%) with the text as tooltip; if you use links the icons are also links; | the device owner(s) is/are displayed as tooltip of the server name | colors or a background image URL for the table data cell | notes are displayed as a icon (=notesicon= e.g. %P%) with the note as tooltip; if you use a link the icon is also a link | | *must* | *must*| *must* | *must* | *optional* | *optional* | *optional* | *optional* | +| *Examples* |||||||| +| Server1 | RackS21 | 10 | 2U | port31 | server admins | blue,white | not in use | +| Patchfield1 / Switch2 | RackS21 | 40 | 1U | switch3 / router4 | network admins / network admins | blue,white / green,white | 3 ports free / 8 ports free | You can use following =%<nop>EDITTABLE%= tag (EditTablePlugin must be installed) to simplify some things (%X% it must be one line): <verbatim> @@ -18,6 +21,7 @@ *Notes:* * The device order in the table is not relevant (except there's a conflict) but the column order is relevant (because the table header will be ignored). * If more than one device uses the same unit the conflict will be displayed with a icon (see =conflicticon= attribute, e.g. %S%). The tooltip of the icon contains the server names. + * If you have more than one device in the same unit you have to put them into a single table row and separate server names, 'connected to', owner, colors, notes with a =' / '= or a ' # ' (a whitespace before and after the separator is required). @@ -88,7 +92,7 @@ a plugin setting write ==%<nop><plugin>_<setting>%==, i.e. ==%<nop>EMPTYPLUGIN_SHORTDESCRIPTION%== * One line description, is shown in the %TWIKIWEB%.TextFormattingRules topic: - * Set SHORTDESCRIPTION = This plugin renders a rack overview (e.g. of 19'' computer racks) with HTML tables. + * Set SHORTDESCRIPTION = Render a rack overview (e.g. of 19'' computer racks) with HTML tables * Debug plugin: (See output in =data/debug.txt=) * Set DEBUG = 0 @@ -117,8 +121,9 @@ | Plugin Author: | TWiki:Main.DanielRohde | | Copyright: | © 2006, TWiki:Main.DanielRohde | | License: | GPL ([[http://www.gnu.org/copyleft/gpl.html][GNU General Public License]]) | -| Plugin Version: | V1.001 (7 Aug 2006) | +| Plugin Version: | V1.002 (BETA) | | Change History: | <!-- versions below in reverse order --> | +| V1.002 (BETA): | TWiki:Main.DanielRohde: allowed multiple entries in a single unit | | V1.001 (7 Aug 2006): | TWiki:Main.DanielRohde: improved some features (added statistics); added attributes (rackstatformat, displayunitcolumn, unitcolumn*); renamed attribute statformat; fixed documentation; fixed tooltip bug; fixed conflict bug;| | V1.000 (4 Aug 2006): | TWiki:Main.DanielRohde: Initial version | | TWiki Dependency: | $TWiki::Plugins::VERSION 1.021 | Modified: twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin/RackPlanner.pm =================================================================== --- twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin/RackPlanner.pm 2006-10-04 13:14:14 UTC (rev 11660) +++ twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin/RackPlanner.pm 2006-10-04 20:50:07 UTC (rev 11661) @@ -228,8 +228,6 @@ $tr.=$unitColumn if $options{'displayunitcolumn'} && $options{'unitcolumnpos'}=~/^(left|both|all)$/ig; - my $notesIcon = &_resizeIcon($options{'notesicon'}); - my $connectedtoIcon = &_resizeIcon($options{'connectedtoicon'}); my $conflictIcon = &_resizeIcon($options{'conflicticon'}); my $statRow = $cgi->td(""); @@ -264,8 +262,7 @@ $fillRows=$rowspan-1; $itd = &_renderTextContent($entryRef); - $itd .= &_renderIconContent($entryRef, $connectedtoIcon, $notesIcon); - ($fgcolor, $bgcolor, $style) = &_getColorsAndStyle($entryRef); + ($fgcolor, $bgcolor, $style) = &_getColorsAndStyle($$entryRef{'colimg'}); $itd = $cgi->td({ -title=>&_encodeTitle($$entryRef{'formfactor'}).'('.abs($unit).'-'.(abs($unit+$rowspan-1)).')', @@ -367,22 +364,44 @@ } sub _renderTextContent { my ($entryRef) = @_; - my $text=$$entryRef{'server'}; - $text.=":" if ( $options{'displayconnectedto'}||$options{'displayowner'}||$options{'displaynotes'}); - $text.=" ".$$entryRef{'connectedto'} if defined $$entryRef{'connectedto'} && $options{'displayconnectedto'}; - $text.=" ".$$entryRef{'owner'} if defined $$entryRef{'owner'} && $options{'owner'}; - $text.=" ".$$entryRef{'notes'} if defined $$entryRef{'notes'} && $options{'notes'}; + my $ret =""; + my @colors = split /\s+[\/\#]\s+/, $$entryRef{'colimg'}; + my @connectedtos = split /\s+[\/\#]\s+/, $$entryRef{'connectedto'}; + my @owners = split /\s+[\/\#]\s+/, $$entryRef{'owner'}; + my @notes = split /\s+[\/\#]\s+/, $$entryRef{'notes'}; + foreach my $s (split(/\s+[\/\#]\s+/,$$entryRef{'server'})) { + my $colors = ""; + $colors = shift @colors if $#colors !=-1; + my $owner = undef; + $owner = shift @owners if $#owners !=-1; + my $note = undef; + $note = shift @notes if $#notes !=-1 ; + my $connectedto = undef; + $connectedto = shift @connectedtos if $#connectedtos !=-1; + - $text = $cgi->span({-title=>&_encodeTitle($$entryRef{'owner'},1)}, &TWiki::Func::renderText($text)); + my $text=$s; + $text.=":" if ( $options{'displayconnectedto'}||$options{'displayowner'}||$options{'displaynotes'}); + $text.=" ".$connectedto if defined $connectedto && $options{'displayconnectedto'}; + $text.=" ".$owner if defined $owner && $options{'owner'}; + $text.=" ".$note if defined $note && $options{'notes'}; + + $text .= &_renderIconContent($connectedto,$note); + my ($fgcolor, $bgcolor, $style) = &_getColorsAndStyle($colors); + $text = $cgi->span({-style=>$style, -title=>&_encodeTitle($$entryRef{'owner'},1)}, &TWiki::Func::renderText($text)); + $ret.=$text; + } - return $text; + return $ret; } sub _renderIconContent { - my ($entryRef, $connectedtoIcon, $notesIcon) = @_; + my ($connectedto, $note) = @_; my $text=""; - if ((defined $$entryRef{'connectedto'}) && ($$entryRef{'connectedto'}!~/^\s*$/) && (!$options{'displayconnectedto'})) { - foreach my $ct (split(/\s*\,\s*/, $$entryRef{'connectedto'})) { + my $notesIcon = &_resizeIcon($options{'notesicon'}); + my $connectedtoIcon = &_resizeIcon($options{'connectedtoicon'}); + if ((defined $connectedto) && ($connectedto!~/^\s*$/) && (!$options{'displayconnectedto'})) { + foreach my $ct (split(/\s*\,\s*/, $connectedto)) { my $rt = TWiki::Func::renderText($ct); my $title = &_encodeTitle($ct); my $icon = &_retitleIcon($connectedtoIcon, $title); @@ -396,9 +415,9 @@ } - if (defined $$entryRef{'notes'} && $$entryRef{'notes'}!~/^\s*$/ && !$options{'notes'}) { - my $rt = TWiki::Func::renderText($$entryRef{'notes'}); - my $title = &_encodeTitle($$entryRef{'notes'}); + if (defined $note && $note!~/^\s*$/ && !$options{'notes'}) { + my $rt = TWiki::Func::renderText($note); + my $title = &_encodeTitle($note); my $icon = &_retitleIcon($notesIcon, $title); if ($rt=~/<a\s+[^>]*?href=\"([^\">]+)\"/) { $text.=$cgi->a({-href=>&_encode_entities($1),-title=>$title},$icon); @@ -409,9 +428,9 @@ return $text; } sub _getColorsAndStyle { - my ($entryRef) = @_; + my ($colors) = @_; my ($fgcolor,$bgcolor,$style) = ($options{'devicefgcolor'}, $options{'devicebgcolor'}, ""); - foreach my $colimg (split(/\s*,\s*/, $$entryRef{'colimg'})) { + foreach my $colimg (split(/\s*,\s*/, $colors)) { if ($colimg=~/[\.\/\:]/) { $style .= $style eq '' ? '' : ';'; $style .= 'background-image:url('._encode_entities($colimg).');'; Modified: twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin.pm =================================================================== --- twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin.pm 2006-10-04 13:14:14 UTC (rev 11660) +++ twiki/branches/TWikiRelease04x00/twikiplugins/RackPlannerPlugin/lib/TWiki/Plugins/RackPlannerPlugin.pm 2006-10-04 20:50:07 UTC (rev 11661) @@ -38,7 +38,8 @@ # of the version number in PLUGINDESCRIPTIONS. $RELEASE = 'Dakar'; -$REVISION = '1.001'; #dro# improved some features (added statistics); added attributes (rackstatformat, displayunitcolumn, unitcolumn*); renamed attribute statformat; fixed documentation; fixed tooltip bug; fixed conflict bug; +$REVISION = '1.002'; #dro# allowed multiple entries in a single unit +#$REVISION = '1.001'; #dro# improved some features (added statistics); added attributes (rackstatformat, displayunitcolumn, unitcolumn*); renamed attribute statformat; fixed documentation; fixed tooltip bug; fixed conflict bug; #$REVISION = '1.000'; #dro# initial version # Name of this Plugin, only used in this module |