This commit is contained in:
kestes%walrus.com 2002-05-10 21:20:30 +00:00
Родитель 603ce35943
Коммит be7b9c1295
5 изменённых файлов: 474 добавлений и 174 удалений

Просмотреть файл

@ -19,8 +19,8 @@
# notice board display, build display (colored squares)
# $Revision: 1.13 $
# $Date: 2002-05-07 22:50:07 $
# $Revision: 1.14 $
# $Date: 2002-05-10 21:20:30 $
# $Author: kestes%walrus.com $
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB.pm,v $
# $Name: $
@ -65,6 +65,7 @@ use File::Basename;
use lib '#tinder_libdir#';
use Utils;
use TinderDB::Notice;
# Use the DB implementations you wish to use.
@ -106,6 +107,10 @@ sub strings2columns {
main::require_modules(@IMPLS);
@HTML_COLUMNS = strings2columns(@IMPLS);
# now the notice column is special, it may not be a column but several
# columns use it and it needs to have some column like behavior.
$NOTICE= TinderDB::Notice->new();
# It would be nice if we had some kind of display of the bug tracking
@ -322,6 +327,11 @@ sub loadtree_db {
$db->loadtree_db(@_);
}
# Make sure the notice database is handled
# even if notice is not a column.
$NOTICE->loadtree_db(@_);
return ;
}
@ -340,6 +350,11 @@ sub apply_db_updates {
$out += $db->apply_db_updates(@_);
}
# Make sure the notice database is handled
# even if notice is not a column.
$NOTICE->apply_db_updates(@_);
return $out;
}
@ -360,11 +375,30 @@ sub trim_db_history {
$db->trim_db_history(@_);
}
# Make sure the notice database is handled
# even if notice is not a column.
$NOTICE->trim_db_history(@_);
return ;
}
# where can people attach notices to?
# Really this is the names the columns produced by this DB
sub notice_association {
my (@outrow) = ();
foreach $db (@{$DB}) {
push @outrow, $db->status_table_header(@_);
}
return (@outrow);
}
sub savetree_db {
# do not call this directly, its only here for testing.
# This is called by update
@ -381,6 +415,11 @@ sub savetree_db {
$db->savetree_db(@_);
}
# Make sure the notice database is handled
# even if notice is not a column.
$NOTICE->savetree_db(@_);
return ;
}

Просмотреть файл

@ -37,8 +37,8 @@
# Contributor(s):
# $Revision: 1.17 $
# $Date: 2002-05-09 03:09:12 $
# $Revision: 1.18 $
# $Date: 2002-05-10 21:20:28 $
# $Author: kestes%walrus.com $
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/BT_Generic.pm,v $
# $Name: $
@ -74,9 +74,10 @@ use Utils;
use HTMLPopUp;
use TreeData;
use VCDisplay;
use TinderDB::Notice;
$VERSION = ( qw $Revision: 1.17 $ )[1];
$VERSION = ( qw $Revision: 1.18 $ )[1];
@ISA = qw(TinderDB::BasicTxtDB);
@ -84,6 +85,9 @@ $VERSION = ( qw $Revision: 1.17 $ )[1];
# name of the bug tracking system
$BT_NAME = $TinderConfig::BT_NAME || "BT";
# We 'have a' notice so that we can put stars in our column.
$NOTICE= TinderDB::Notice->new();
# get the recent data from where the MDA puts the parsed data.
@ -181,6 +185,14 @@ sub status_table_header {
return ($out);
}
# where can people attach notices to?
# Really this is the names the columns produced by this DB
sub notice_association {
my (@columns) = BTData::get_all_columns();
return @columns;
}
sub render_bug {
my ($rec) = @_;
@ -319,16 +331,33 @@ sub cell_data {
# that no authors have checked in during this time.
sub render_empty_cell {
my ($tree, $till_time, $rowspan) = @_;
my ($tree, $till_time, $rowspan, $column) = @_;
my $notice = $NOTICE->Notice_Link(
$till_time,
$tree,
$column,
);
my $cell_contents;
if ($notice) {
$cell_contents = (
"\t\t\t".
$notice.
"\n".
"");
} else {
$cell_contents = $HTMLPopUp::EMPTY_TABLE_CELL;
}
my $local_till_time = localtime($till_time);
return ("\t<!-- BT_Generic: empty data. ".
"tree: $tree, ".
"tree: $tree, column: $column, ".
"filling till: '$local_till_time', ".
"-->\n".
"\t\t<td align=center rowspan=$rowspan>".
"$HTMLPopUp::EMPTY_TABLE_CELL</td>\n");
"$cell_contents</td>\n");
}
@ -353,9 +382,11 @@ sub status_table_start {
my (@columns) = BTData::get_all_columns();
foreach $column (@columns) {
$NOTICE->status_table_start($row_times, $tree, $column);
$NEXT_DB{$tree}{$column} = 0;
while ( ($DB_TIMES[$NEXT_DB] > $earliest_data) &&
($NEXT_DB{$tree} < $#DB_TIMES) ) {
while ( ($DB_TIMES[$NEXT_DB{$tree}{$column}] > $earliest_data) &&
($NEXT_DB{$tree}{$column} < $#DB_TIMES) ) {
$NEXT_DB{$tree}{$column}++;
}
}
@ -396,6 +427,17 @@ sub render_one_column {
my $html = render_bug($bug_ids->{$bug_id});
push @html, $html;
}
$notice .= (
"\t\t\t".
$NOTICE->Notice_Link(
$DB_TIMES[$NEXT_DB{$tree}{$column}],
$tree,
$column,
).
"\n".
"");
my $out = (
"\t<td align=center>\n".
"@html".
@ -433,7 +475,7 @@ sub render_one_column {
@html= render_empty_cell($tree,
$row_times->[$row_index+$rowspan],
$rowspan);
$rowspan, $column);
return @html;
}

Просмотреть файл

@ -7,8 +7,8 @@
# the build was and display a link to the build log.
# $Revision: 1.53 $
# $Date: 2002-05-08 22:30:12 $
# $Revision: 1.54 $
# $Date: 2002-05-10 21:20:27 $
# $Author: kestes%walrus.com $
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/Build.pm,v $
# $Name: $
@ -148,25 +148,23 @@ use File::Basename;
use lib '#tinder_libdir#';
use HTMLPopUp;
use BuildStatus;
use TinderDB::BasicTxtDB;
use VCDisplay;
use Utils;
use TinderConfig;
use TinderDB::Notice;
$VERSION = '#tinder_version#';
@ISA = qw(TinderDB::BasicTxtDB);
# as part of the configuration for mozilla.org, they want most cells
# which are empty to not have borders but the builds cells are
# different. yeck!
$EMPTY_TABLE_CELL = $HTMLPopUp::EMPTY_TABLE_CELL ||
"&nbsp;";
$DISPLAY_BUILD_ERRORS = $TinderConfig::DISPLAY_BUILD_ERRORS ||
1;
if (defined ($TinderConfig::DISPLAY_BUILD_ERRORS)) {
$DISPLAY_BUILD_ERRORS = $TinderConfig::DISPLAY_BUILD_ERRORS;
} else {
$DISPLAY_BUILD_ERRORS = 1;
}
# The number of most recent builds used in computing the averages
@ -174,6 +172,10 @@ $DISPLAY_BUILD_ERRORS = $TinderConfig::DISPLAY_BUILD_ERRORS ||
$NUM_OF_AVERAGE = 10;
# We 'have a' notice so that we can put stars in our column.
$NOTICE= TinderDB::Notice->new();
# Find the name of each build and the proper order to display them.
# No part of the code should peek at keys %{ $DATABASE{$tree} } directly.
@ -263,6 +265,12 @@ sub latest_status {
}
# where can people attach notices to?
# Really this is the names the columns produced by this DB
sub notice_association {
return build_names();
}
# Prepare information for popupwindows on row headers and also the
# link to bonsai giving the aproximate times that the build was
@ -1076,6 +1084,9 @@ sub status_table_start {
my (@all_build_names) = all_build_names($tree);
foreach $buildname (@all_build_names) {
$NOTICE->status_table_start($row_times, $tree, $buildname);
my ($db_index) = 0;
my ($current_rec) = $DATABASE{$tree}{$buildname}{'recs'}[$db_index];
while (
@ -1139,20 +1150,38 @@ sub status_table_row {
$rowspan++ ;
}
$NEXT_ROW{$tree}{$buildname} = $row_index + $rowspan;
my ($cell_color) = BuildStatus::status2html_colors('not_running');
my ($cell_options) = ("rowspan=$rowspan ".
"bgcolor=$cell_color ");
my ($lc_time) = localtime($current_rec->{'timenow'});
my $notice = $NOTICE->Notice_Link(
$row_times->[$row_index + $rowspan],
$tree,
$buildname,
);
my $cell_contents;
if ($notice) {
$cell_contents = (
"\t\t\t".
$notice.
"\n".
"");
} else {
$cell_contents = $HTMLPopUp::EMPTY_TABLE_CELL;
}
push @outrow, ("\t<!-- not_running: Build:".
"tree: $tree, ".
"build: $buildname, ".
"previous_end: $lc_time, ".
"-->\n".
"\t\t<td align=center $cell_options>".
"$EMPTY_TABLE_CELL</td>\n");
$NEXT_ROW{$tree}{$buildname} = $row_index + $rowspan;
"$cell_contents</td>\n");
next;
}
@ -1280,6 +1309,17 @@ sub status_table_row {
"");
}
$links .= (
"\t\t\t".
$NOTICE->Notice_Link(
$current_rec->{'starttime'},
$tree,
$buildname,
).
"\n".
"");
$links.= "\t\t\t".$text_browser_color_string."\n";

Просмотреть файл

@ -30,8 +30,8 @@
# kestes@walrus.com Home.
# Contributor(s):
# $Revision: 1.22 $
# $Date: 2002-05-06 19:08:55 $
# $Revision: 1.23 $
# $Date: 2002-05-10 21:20:27 $
# $Author: kestes%walrus.com $
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/Notice.pm,v $
# $Name: $
@ -84,7 +84,7 @@ use Utils;
use HTMLPopUp;
use TinderDB::BasicTxtDB;
$VERSION = ( qw $Revision: 1.22 $ )[1];
$VERSION = ( qw $Revision: 1.23 $ )[1];
@ISA = qw(TinderDB::BasicTxtDB);
@ -215,7 +215,7 @@ sub trim_db_history {
# clear data structures in preparation for printing a new table
sub status_table_start {
my ($self, $row_times, $tree, ) = @_;
my ($self, $row_times, $tree, $association) = @_;
# create an ordered list of all times which any data is stored
@ -233,16 +233,53 @@ sub status_table_start {
my ($first_cell_seconds) = 2*($row_times->[0] - $row_times->[1]);
my ($earliest_data) = $row_times->[0] + $first_cell_seconds;
$NEXT_DB = 0;
while ( ($DB_TIMES[$NEXT_DB] > $earliest_data) &&
($NEXT_DB < $#DB_TIMES) ) {
$NEXT_DB++
$NEXT_DB{$tree}{$association} = 0;
while ( ($DB_TIMES[$NEXT_DB{$tree}{$association}] > $earliest_data) &&
($NEXT_DB{$tree}{$association} < $#DB_TIMES) ) {
$NEXT_DB{$tree}{$association}++
}
return ;
}
sub cell_data {
my ($tree, $db_index, $last_time, $association) = @_;
my %authors = ();
my ($first_notice_time) = $DB_TIMES[$NEXT_DB{$tree}{$association}];
while (1) {
my ($time) = $DB_TIMES[$db_index];
# find the DB entries which are needed for this cell
($time < $last_time) && last;
($db_index >= $#DB_TIMES) && last;
$db_index++;
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
my $rec = $DATABASE{$tree}{$time}{$author};
if (
(defined($association)) &&
(!(defined($rec->{'associations'}->{$association})))
) {
next;
}
$authors{$author} = $rec;
}
} # while (1)
return ($db_index, $first_notice_time, \%authors);
}
# Given a notice return a formatted HTML representation of the text.
sub render_notice {
my ($notice) = @_;
@ -252,156 +289,274 @@ sub render_notice {
my $mailaddr = $notice->{'mailaddr'};
my ($pretty_time) = HTMLPopUp::timeHTML($time);
my $mailto = "mailto:$mailaddr?subject=Tinderbox Notice";
my $hidden_info = (
"\t\t\t<!-- ".
"posted from remote host: $remote_host".
" at time: $notice->{'localposttime'} ".
"-->\n".
"");
# If the user requests for us to lie about the time, we should
# also tell when the note was really posted.
my $localpostedtime;
if ( $notice->{'posttime'} - $notice->{'time'} > $main::SECONDS_PER_HOUR) {
$localpostedtime = (
"<br>(Actually posted at: ".
$notice->{'localposttime'}.
")\n".
"");
if (
($notice->{'posttime'} - $notice->{'time'}) >
$main::SECONDS_PER_HOUR
) {
$localpostedtime = (
"(Actually posted at: ".
$notice->{'localposttime'}.
")<br>\n".
"");
}
my $rendered_association;
my $assocations_ref = $notice->{'associations'};
if ($assocations_ref) {
foreach $association (sort keys %{ $assocations_ref }) {
$rendered_association .= (
"\t\t\t<tt>-".
$association.
"-</tt><br>\n"
);
}
}
my ($rendered_notice) = (
"\t\t<p>\n".
"\t\t\t[<b>".
HTMLPopUp::Link(
"linktxt"=>$mailaddr,
"href"=>"mailto:$mailaddr?subject=\"Tinderbox Notice\"",
"name"=>"$time\.$mailaddr",
).
" - ".
HTMLPopUp::Link(
"linktxt"=>$pretty_time,
"href"=>"\#$time",
).
"</b>]".
$localpostedtime.
"\n".
"<!-- posted from remote host: $remote_host at time : $notice->{'localposttime'} -->\n".
"\t\t</p>\n".
"\t\t<p>\n".
"$note\n".
"\t\t</p>\n"
);
my ($rendered_notice) = (
"\t\t<br>\n".
"\t\t\t[<b>".
HTMLPopUp::Link(
"linktxt"=>$mailaddr,
"href"=>$mailto,
"name"=>"$time\.$mailaddr",
).
" - ".
HTMLPopUp::Link(
"linktxt"=>$pretty_time,
"href"=>"\#$time",
).
"</b>]<br>\n".
$localpostedtime.
$rendered_association.
$hidden_info.
"\t\t<p>\n".
"$note\n".
"\t\t</p>\n"
);
return $rendered_notice;
}
# return all the notices so we can write to the disk this data. Those
# users with text browsers can view this data without popups.
sub get_all_rendered_notices {
my ($self, $tree, ) = @_;
my $rendered_notices;
my @db_times = sort {$b <=> $a} keys %{ $DATABASE{$tree} };
foreach $time (@db_times) {
$localtime = localtime($time);
$rendered_notices .= (
"\n\n".
# allow us to reference individual
# notices in the file
HTMLPopUp::Link(
"name"=>$time,
"href"=>"\#$time",
#"linktxt" => $localtime,
).
"<!-- $localtime -->".
"\n".
"");
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
my $new_notice =
render_notice($DATABASE{$tree}{$time}{$author});
$rendered_notices .= "<p>".$new_notice."</p>";
} # foreach $author
} # foreach $time
return $rendered_notices;
}
# Given a data structure which represents all applicable notices for a
# cell render the popup and graphic image which is appropriate. This
# is used by the code which renders the whole cell in <td>'s.
sub rendered_cell_contents {
my ($tree, $authors, $first_notice_time, ) = @_;
my $rendered_notices;
my $num_notices =0;
foreach $author (sort keys %{ $authors }) {
my $new_notice =
render_notice($authors->{$author});
$rendered_notices .= "<p>".$new_notice."</p>";
$num_notices++
} # foreach $author
($rendered_notices) ||
return ;
# create a url to a cgi script so that those who do not use pop up
# menus can view the notice.
my $href = (FileStructure::get_filename($tree, 'tree_URL').
"/all_notices.html\#$first_notice_time");
# the popup window software is pretty sensitive to newlines and
# terminating quotes. Take those out of the message.
my $title = (
"Notice Board: ".
HTMLPopUp::timeHTML($first_notice_time)
);
$out = (
"\t\t".
HTMLPopUp::Link(
# If notice available is an image then
# we need the spaces to make the popup
# on mouse over work.
"linktxt" => " $NOTICE_AVAILABLE ",
"href" => $href,
"windowtxt" => $rendered_notices,
"windowtitle" => $title,
"windowheight" => (175 * $num_notices)+100,
).
"\n".
"");
return $out;
}
sub get_all_rendered_notices {
my ($self, $tree, ) = @_;
my $rendered_notices;
my @db_times = sort {$b <=> $a} keys %{ $DATABASE{$tree} };
# Create one cell (possibly taking up many rows) which will show
# that no authors have checked in during this time.
foreach $time (@db_times) {
$localtime = localtime($time);
$rendered_notices .= (
"\n\n".
# allow us to reference individual
# notices in the file
HTMLPopUp::Link(
"name"=>$time,
"href"=>"\#$time",
#"linktxt" => $localtime,
).
"<!-- $localtime -->".
"\n".
"");
sub render_empty_cell {
my ($tree, $till_time, $rowspan) = @_;
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
my $new_notice =
render_notice($DATABASE{$tree}{$time}{$author});
my $local_till_time = localtime($till_time);
return ("\t<!-- Notice: empty data. ".
"tree: $tree, ".
"filling till: '$local_till_time', ".
"-->\n".
$rendered_notices .= "<p>".$new_notice."</p>";
} # foreach $author
} # foreach $time
"\t\t<td align=center rowspan=$rowspan>".
"$HTMLPopUp::EMPTY_TABLE_CELL</td>\n");
}
return $rendered_notices;
sub Notice_Link {
my ($self, $last_time, $tree, $association) = @_;
my ($db_index, $first_notice_time, $authors) =
cell_data($tree,
$NEXT_DB{$tree}{$association},
$last_time,
$association);
$NEXT_DB{$tree}{$association} = $db_index;
my $html = rendered_cell_contents($tree,
$authors, $first_notice_time);
return $html;
}
sub status_table_row {
my ($self, $row_times, $row_index, $tree, ) = @_;
my ($self, $row_times, $row_index, $tree,) = @_;
my @html;
my @outrow = ();
my @authors = ();
# skip this column because it is part of a multi-row missing data
# cell?
# we assume that tree states only change rarely so there are very
# few cells which have more then one state associated with them.
# It does not matter what we do with those cells.
if ( $NEXT_ROW{$tree}{$association} != $row_index ) {
push @html, ("\t<!-- Notice: skipping. ".
"tree: $tree, ".
"additional_skips: ".
($NEXT_ROW{$tree}{$association} - $row_index).", ".
" -->\n");
return @html;
}
my ($db_index, $first_notice_time, $authors) =
cell_data($tree,
$NEXT_DB{$tree}{$association},
$row_times->[$row_index],
undef);
# If there is data for this cell render it and return.
my $rendered_notice = '';
my $num_notices = 0;
if (scalar(%{$authors})) {
$NEXT_DB{$tree}{$association} = $db_index;
$NEXT_ROW{$tree}{$association} = $row_index + 1;
@html = rendered_cell_contents(
$tree,
$authors, $first_notice_time);
my ($first_notice_time) = $DB_TIMES[$NEXT_DB];
my $out = (
"\t<td align=center>\n".
"@html".
"\t</td>\n".
"");
while (1) {
my ($time) = $DB_TIMES[$NEXT_DB];
# find the DB entries which are needed for this cell
($time < $row_times->[$row_index]) && last;
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
my $new_notice =
render_notice($DATABASE{$tree}{$time}{$author});
$rendered_notice .= "<p>".$new_notice."</p>";
push @authors, $author;
$num_notices++;
return $out;
}
$NEXT_DB++;
($NEXT_DB > $#DB_TIMES) && last;
}
# Create a multi-row dummy cell for missing data.
# Cell stops if there is data in the following cell.
my $rowspan = 0;
my ($next_db_index);
$next_db_index = $db_index;
while (
($row_index+$rowspan <= $#{ $row_times }) &&
# create a url to a cgi script so that those who do not use pop up
# menus can view the notice.
my $href = (FileStructure::get_filename($tree, 'tree_URL').
"/all_notices.html\#$first_notice_time");
if ($rendered_notice) {
# the popup window software is pretty sensitive to newlines and
# terminating quotes. Take those out of the message.
@outrow = (
"\t<td>\n".
"\t\t".
HTMLPopUp::Link(
# if notice available is an image then
# we need the spaces to make the popup
# on mouse over work.
"linktxt" => " $NOTICE_AVAILABLE ",
"href" => $href,
"windowtxt" => $rendered_notice,
"windowtitle" => "Notice Board",
"windowheight" => (175 * $num_notices)+100,
).
"\n".
"\t</td>\n");
} else {
@outrow = ("\t<!-- skipping: Notice: tree: $tree -->\n".
"\t\t<td>$HTMLPopUp::EMPTY_TABLE_CELL</td>\n");
}
return @outrow;
(!(scalar(%{$authors})))
) {
$db_index = $next_db_index;
$rowspan++ ;
($next_db_index, $first_notice_time, $authors) =
cell_data($tree,
$db_index,
$row_times->[$row_index+$rowspan],
undef);
}
$NEXT_ROW{$tree}{$association} = $row_index + $rowspan;
$NEXT_DB{$tree}{$association} = $db_index;
@html= render_empty_cell($tree,
$row_times->[$row_index+$rowspan],
$rowspan);
return @html;
}
1;

Просмотреть файл

@ -40,8 +40,8 @@
# Contributor(s):
# $Revision: 1.59 $
# $Date: 2002-05-09 03:08:38 $
# $Revision: 1.60 $
# $Date: 2002-05-10 21:20:26 $
# $Author: kestes%walrus.com $
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/VC_Bonsai.pm,v $
# $Name: $
@ -99,9 +99,10 @@ use Utils;
use HTMLPopUp;
use TreeData;
use VCDisplay;
use TinderDB::Notice;
$VERSION = ( qw $Revision: 1.59 $ )[1];
$VERSION = ( qw $Revision: 1.60 $ )[1];
@ISA = qw(TinderDB::BasicTxtDB);
@ -112,6 +113,9 @@ $VC_NAME = $TinderConfig::VC_NAME || "CVS";
$VC_BUGNUM_REGEXP = $TinderConfig::VC_BUGNUM_REGEXP ||
'(\d\d\d+)';
# We 'have a' notice so that we can put stars in our column.
$NOTICE= TinderDB::Notice->new();
# Print out the Database in a visually useful form so that I can
# debug timing problems. This is not called by any code. I use this
@ -336,7 +340,7 @@ sub status_table_legend {
# Really this is the names the columns produced by this DB
sub notice_association {
return "$VC_NAME";
return $VC_NAME;
}
@ -411,8 +415,10 @@ sub render_authors {
}
my $query_links = '';
$query_links.= "\t\t".$text_browser_color_string."\n";
if ($text_browser_color_string) {
$query_links.= "\t\t".$text_browser_color_string."\n";
}
if ( scalar(%authors) ) {
# find the times which bound the cell so that we can set up a
@ -564,24 +570,24 @@ sub render_authors {
" -->\n".
"");
# $links .= (
# "\t\t\t".
# TinderDB::Notice::Notice_Link(
# 'tree' => $tree,
# 'associated' => $VC_NAME,
# 'mindate' => $mindate,
# 'maxdate' => $maxdate,
# )
# "\n"
# );
$query_links .= "\t\t".$query_link."\n";
} # foreach %author
} # if %authors
$query_links.= "\t\t".$text_browser_color_string."\n";
my $notice = $NOTICE->Notice_Link(
$maxdate,
$tree,
$VC_NAME,
);
if ($notice) {
$query_links.= "\t\t".$notice."\n";
}
if ($text_browser_color_string) {
$query_links.= "\t\t".$text_browser_color_string."\n";
}
@outrow = (
"\t<!-- VC_Bonsai: authors -->\n".
"\t<td align=center $cell_options>\n".
@ -612,9 +618,25 @@ sub render_empty_cell {
$text_browser_color_string =
HTMLPopUp::text_browser_color_string($cell_color, $char) ;
}
my $notice = $NOTICE->Notice_Link(
$till_time,
$tree,
$VC_NAME,
);
my $cell_contents = $text_browser_color_string ||
$HTMLPopUp::EMPTY_TABLE_CELL;
my $cell_contents;
if ($text_browser_color_string) {
$cell_contents .= $text_browser_color_string;
}
if ($notice) {
$cell_contents .= "\n\t\t".$notice."\n";
}
if (!($cell_contents)) {
$cell_contents = "\n\t\t".$HTMLPopUp::EMPTY_TABLE_CELL."\n";
}
return ("\t<!-- VC_Bonsai: empty data. ".
"tree: $tree, ".
@ -653,6 +675,8 @@ sub status_table_start {
$NEXT_DB{$tree}++
}
$NOTICE->status_table_start($row_times, $tree, $VC_NAME);
# we do not store a treestate with every database entry.
# remember the treestate as we travel through the database.