Module: tools Branch: master Commit: accf09eca29d131f0409084f3447e6b2ea994de2 URL: https://source.winehq.org/git/tools.git/?a=commit;h=accf09eca29d131f0409084f...
Author: Francois Gouget fgouget@codeweavers.com Date: Mon Apr 25 20:50:10 2022 +0200
testbot/cgi: Pass a column descriptor to Generate{Header,Data}View().
Instead of being called for every row, DisplayProperty() is now called only once and the result is stored in the corresponding column descriptor. This also allows passing extra information such as the column index to Generate{Header,Data}View(). And this allows GenerateList() to iterate only on the properties that are actually being displayed.
Signed-off-by: Francois Gouget fgouget@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
testbot/lib/ObjectModel/CGI/CollectionBlock.pm | 81 ++++++++++++++++---------- testbot/web/JobDetails.pl | 14 ++--- testbot/web/PatchesList.pl | 6 +- testbot/web/admin/UsersList.pl | 6 +- testbot/web/index.pl | 12 ++-- 5 files changed, 68 insertions(+), 51 deletions(-)
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm index 03f1d18..14e3cfe 100644 --- a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm +++ b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm @@ -227,6 +227,20 @@ sub GetDetailsLink($$)
Generates an HTML snippet for the column title.
+The Col parameter describes the column to generate the header for. +It contains the following information: +=over 12 +=item Descriptor +The corresponding PropertyDescriptor object. + +=item Display +The value returned by DisplayProperty(), normally "ro". + +=item Index +The index of the column (see $Row->{Cols}). + +=back + The Row parameter contains the following information: =over 12
@@ -234,6 +248,10 @@ The Row parameter contains the following information: The list of item properties, including those that DisplayProperty() says should be hidden.
+=item Cols +The collection block's list of columns. This excludes any hidden property. +The following relation holds: $Row->{Cols}->[$Col->{Index}] == $Col + =item DetailsPage The base link to the item details page if any. See GetDetailsPage().
@@ -253,9 +271,9 @@ The total number of rows (excluding the header).
sub GenerateHeaderView($$$) { - my ($self, $_Row, $PropertyDescriptor) = @_; + my ($self, $_Row, $Col) = @_;
- print $self->escapeHTML($PropertyDescriptor->GetDisplayName()); + print $self->escapeHTML($Col->{Descriptor}->GetDisplayName()); }
=pod @@ -266,8 +284,8 @@ sub GenerateHeaderView($$$) Generates an HTML snippet representing the property value in a user-readable form.
-The Row parameter contains the same information as for GenerateHeaderView() -plus: +See GenerateHeaderView() for a description of the Row and Col parameters. +The Row parameter has the following extra fields: =over 12
=item Row @@ -286,11 +304,11 @@ passing the row to GetDetailsLink().
sub GenerateDataView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
- my $PropertyName = $PropertyDescriptor->GetName(); + my $PropertyName = $Col->{Descriptor}->GetName(); my $Value = $Row->{Item}->$PropertyName; - GenerateValueHTML($self, $PropertyDescriptor, $Value); + GenerateValueHTML($self, $Col->{Descriptor}, $Value); }
@@ -317,10 +335,10 @@ sub GenerateFormStart($)
sub GenerateHeaderCell($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
print "<th>"; - $self->GenerateHeaderView($Row, $PropertyDescriptor); + $self->GenerateHeaderView($Row, $Col); print "</th>\n"; }
@@ -336,12 +354,9 @@ sub GenerateHeaderRow($$) GenerateMasterCheckbox("block$self->{Unique}"); print "</th>\n"; } - foreach my $PropertyDescriptor (@{$Row->{PropertyDescriptors}}) + foreach my $Col (@{$Row->{Cols}}) { - if ($self->DisplayProperty($PropertyDescriptor)) - { - $self->GenerateHeaderCell($Row, $PropertyDescriptor); - } + $self->GenerateHeaderCell($Row, $Col); } print "</tr>\n"; } @@ -356,16 +371,16 @@ sub SelName($$)
sub GenerateDataCell($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
print "<td>"; my $CloseLink; - if ($Row->{DetailsPage} and $PropertyDescriptor->GetIsKey()) + if ($Row->{DetailsPage} and $Col->{Descriptor}->GetIsKey()) { print "<a href='", $self->escapeHTML($self->GetDetailsLink($Row)), "'>"; $CloseLink = "</a>"; } - $self->GenerateDataView($Row, $PropertyDescriptor); + $self->GenerateDataView($Row, $Col); print "$CloseLink</td>\n"; }
@@ -380,12 +395,9 @@ sub GenerateDataRow($$) print "<td><input name='", $self->SelName($Row->{Item}->GetKey()), "' type='checkbox' cbgroup='block$self->{Unique}'/></td>\n"; } - foreach my $PropertyDescriptor (@{$Row->{PropertyDescriptors}}) + foreach my $Col (@{$Row->{Cols}}) { - if ($self->DisplayProperty($PropertyDescriptor)) - { - $self->GenerateDataCell($Row, $PropertyDescriptor); - } + $self->GenerateDataCell($Row, $Col); } print "</tr>\n"; } @@ -403,18 +415,22 @@ sub GenerateList($) my $Collection = $self->{Collection}; my $PropertyDescriptors = $Collection->GetPropertyDescriptors();
+ my $ColIndex = 0; + my (@Cols, $HasDT); + foreach my $PropertyDescriptor (@$PropertyDescriptors) + { + my $Display = $self->DisplayProperty($PropertyDescriptor); + next if (!$Display); + push @Cols, {Descriptor => $PropertyDescriptor, + Display => $Display, + Index => $ColIndex++}; + $HasDT ||= ($PropertyDescriptor->GetClass() eq "Basic" and + $PropertyDescriptor->GetType() eq "DT"); + } my $Items = $self->{Collection}->GetSortedItems(); - if (@$Items != 0) + if ($HasDT and @$Items != 0) { - foreach my $PropertyDescriptor (@$PropertyDescriptors) - { - if ($PropertyDescriptor->GetClass() eq "Basic" and - $PropertyDescriptor->GetType() eq "DT") - { - $self->{EnclosingPage}->GenerateImportJS(GetDateTimeJSFile()); - last; - } - } + $self->{EnclosingPage}->GenerateImportJS(GetDateTimeJSFile()); }
print "<div class='CollectionBlock'>\n"; @@ -427,6 +443,7 @@ sub GenerateList($) print "<thead>\n"; my $Row = { PropertyDescriptors => $PropertyDescriptors, + Cols => @Cols, DetailsPage => $self->GetDetailsPage(), ItemActions => $self->{RW} ? $self->GetItemActions() : [], Row => 0, # 0 for the header ---> 1 for the first line diff --git a/testbot/web/JobDetails.pl b/testbot/web/JobDetails.pl index e39df41..591a47e 100644 --- a/testbot/web/JobDetails.pl +++ b/testbot/web/JobDetails.pl @@ -60,9 +60,9 @@ sub DisplayProperty($$)
sub GenerateHeaderView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
- my $PropertyName = $PropertyDescriptor->GetName(); + my $PropertyName = $Col->{Descriptor}->GetName(); if ($PropertyName eq "CmdLineArg") { print "Arguments / <span class='MissionHeader'>Missions</span>"; @@ -73,16 +73,16 @@ sub GenerateHeaderView($$$) } else { - $self->SUPER::GenerateHeaderView($Row, $PropertyDescriptor); + $self->SUPER::GenerateHeaderView($Row, $Col); } }
sub GenerateDataView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
my $StepTask = $Row->{Item}; - my $PropertyName = $PropertyDescriptor->GetName(); + my $PropertyName = $Col->{Descriptor}->GetName(); if ($PropertyName eq "VM") { print "<a href='#k", $self->escapeHTML($Row->{Item}->GetKey()), "'>"; @@ -103,7 +103,7 @@ sub GenerateDataView($$$) } else { - $self->SUPER::GenerateDataView($Row, $PropertyDescriptor); + $self->SUPER::GenerateDataView($Row, $Col); } } elsif ($PropertyName eq "CmdLineArg") @@ -144,7 +144,7 @@ sub GenerateDataView($$$) } else { - $self->SUPER::GenerateDataView($Row, $PropertyDescriptor); + $self->SUPER::GenerateDataView($Row, $Col); } }
diff --git a/testbot/web/PatchesList.pl b/testbot/web/PatchesList.pl index a1c5171..30cfc75 100644 --- a/testbot/web/PatchesList.pl +++ b/testbot/web/PatchesList.pl @@ -46,9 +46,9 @@ sub DisplayProperty($$)
sub GenerateDataView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
- if ($PropertyDescriptor->GetName() eq "Disposition" and + if ($Col->{Descriptor}->GetName() eq "Disposition" and $Row->{Item}->Disposition =~ /job ([0-9]+)$/) { my $JobId = $1; @@ -56,7 +56,7 @@ sub GenerateDataView($$$) } else { - $self->SUPER::GenerateDataView($Row, $PropertyDescriptor); + $self->SUPER::GenerateDataView($Row, $Col); } }
diff --git a/testbot/web/admin/UsersList.pl b/testbot/web/admin/UsersList.pl index ec6d282..5f9f47b 100644 --- a/testbot/web/admin/UsersList.pl +++ b/testbot/web/admin/UsersList.pl @@ -47,9 +47,9 @@ sub DisplayProperty($$)
sub GenerateDataView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
- if ($PropertyDescriptor->GetName() eq "Status") + if ($Col->{Descriptor}->GetName() eq "Status") { my $User = $Row->{Item}; my $Status = $User->Status; @@ -87,7 +87,7 @@ sub GenerateDataView($$$) } else { - $self->SUPER::GenerateDataView($Row, $PropertyDescriptor); + $self->SUPER::GenerateDataView($Row, $Col); } }
diff --git a/testbot/web/index.pl b/testbot/web/index.pl index 1c506c9..331ee85 100644 --- a/testbot/web/index.pl +++ b/testbot/web/index.pl @@ -51,9 +51,9 @@ sub DisplayProperty($$)
sub GenerateHeaderView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
- my $PropertyName = $PropertyDescriptor->GetName(); + my $PropertyName = $Col->{Descriptor}->GetName(); if ($PropertyName eq "Priority") { print "<a class='title' title='Higher values indicate a lower priority'>Nice</a>"; @@ -64,16 +64,16 @@ sub GenerateHeaderView($$$) } else { - $self->SUPER::GenerateHeaderView($Row, $PropertyDescriptor); + $self->SUPER::GenerateHeaderView($Row, $Col); } }
sub GenerateDataView($$$) { - my ($self, $Row, $PropertyDescriptor) = @_; + my ($self, $Row, $Col) = @_;
my $Job = $Row->{Item}; - my $PropertyName = $PropertyDescriptor->GetName(); + my $PropertyName = $Col->{Descriptor}->GetName(); if ($PropertyName eq "User") { if (defined $Job->Patch and defined $Job->Patch->FromName and @@ -166,7 +166,7 @@ sub GenerateDataView($$$) } else { - $self->SUPER::GenerateDataView($Row, $PropertyDescriptor); + $self->SUPER::GenerateDataView($Row, $Col); } }