Francois Gouget : testbot/cgi: Add SimpleCollectionPage.
Alexandre Julliard
julliard at winehq.org
Thu Mar 31 14:36:59 CDT 2022
Module: tools
Branch: master
Commit: 1af4892ec58788f17e4ab12b92d3e16fe9fdff56
URL: https://source.winehq.org/git/tools.git/?a=commit;h=1af4892ec58788f17e4ab12b92d3e16fe9fdff56
Author: Francois Gouget <fgouget at codeweavers.com>
Date: Thu Mar 31 16:53:07 2022 +0200
testbot/cgi: Add SimpleCollectionPage.
SimpleCollectionPage embeds a single collection block. But unlike
CollectionPage it is only a Page subclass instead of implementing both
the Page and CollectionBlock interfaces. Customizing the collection
block is done by creating a CollectionBlock subclass and passing the
appropriate creator function to the page constructor.
This better separates the page customization aspects (implement a
SimpleCollectionPage subclass) from the collection block ones
(implement a CollectionBlock subclass). Most of the time only the
collection block needs to be customized and SimpleCollectionPage can
be used as is.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
testbot/lib/ObjectModel/CGI/CollectionBlock.pm | 5 +
.../lib/ObjectModel/CGI/SimpleCollectionPage.pm | 138 +++++++++++++++++++++
2 files changed, 143 insertions(+)
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm
index 9a52f11..200734a 100644
--- a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm
+++ b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm
@@ -91,6 +91,11 @@ sub _initialize($$$)
#my ($self, $Collection, $EnclosingPage) = @_;
}
+sub Create($$@)
+{
+ return ObjectModel::CGI::CollectionBlock->new(@_);
+}
+
sub CallGetDetailsPage($)
{
my ($self) = @_;
diff --git a/testbot/lib/ObjectModel/CGI/SimpleCollectionPage.pm b/testbot/lib/ObjectModel/CGI/SimpleCollectionPage.pm
new file mode 100644
index 0000000..76e4d51
--- /dev/null
+++ b/testbot/lib/ObjectModel/CGI/SimpleCollectionPage.pm
@@ -0,0 +1,138 @@
+# -*- Mode: Perl; perl-indent-level: 2; indent-tabs-mode: nil -*-
+# Base class for list pages
+#
+# Copyright 2009 Ge van Geldorp
+# Copyright 2014, 2017-2018, 2022 Francois Gouget
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+use strict;
+
+package ObjectModel::CGI::SimpleCollectionPage;
+
+=head1 NAME
+
+ObjectModel::CGI::SimpleCollectionPage - Base class for list pages
+
+A page containing a single collection block.
+
+The SimpleCollectionPage instances have the following properties:
+=over
+=item Collection
+The collection containing the items to be shown in the CollectionBlock widget.
+
+=item CollectionBlock
+The widget showing the items in the specified collection.
+
+=item ActionPerformed
+Set to true if an action was specified and succeeded.
+=back
+
+=cut
+
+use ObjectModel::CGI::Page;
+our @ISA = qw(ObjectModel::CGI::Page);
+
+# Use require to avoid overriding Page::new()
+require ObjectModel::CGI::CollectionBlock;
+
+
+=pod
+=over 12
+
+=item C<_initialize()>
+
+Sets up the new page object.
+
+Parameters:
+=over
+
+=item Request
+=item RequiredRole
+See Page::new().
+
+=item Collection
+This is the collection of items that should be shown in the CollectionBlock
+widget.
+
+=item BlockCreator
+If undefined the page will create an instance of the CollectionBlock class.
+Otherwise it will use this function to create the CollectionBlock widget, thus
+enabling use of a CollectionBlock subclass.
+
+=back
+
+=back
+=cut
+
+sub _initialize($$$$;$)
+{
+ my ($self, $Request, $RequiredRole, $Collection, $BlockCreator) = @_;
+
+ $self->{Collection} = $Collection;
+ $BlockCreator ||= \&ObjectModel::CGI::CollectionBlock::Create;
+ $self->{CollectionBlock} = &$BlockCreator($Collection, $self);
+ $self->SUPER::_initialize($Request, $RequiredRole);
+}
+
+
+#
+# HTML page generation
+#
+
+sub GetTitle($)
+{
+ my ($self) = @_;
+
+ my $Title = ucfirst($self->{Collection}->GetCollectionName());
+ $Title =~ s/([a-z])([A-Z])/$1 $2/g;
+ return $Title;
+}
+
+sub GenerateTitle($)
+{
+ my ($self) = @_;
+
+ my $Title = $self->GetTitle();
+ if ($Title)
+ {
+ print "<h1 id='PageTitle'>", $self->escapeHTML($Title), "</h1>\n";
+ }
+}
+
+sub GenerateBody($)
+{
+ my ($self) = @_;
+
+ print "<div class='CollectionPageBody'>\n";
+ $self->GenerateTitle();
+ print "<div class='Content'>\n";
+ $self->{CollectionBlock}->GenerateList();
+ print "</div>\n";
+ print "</div>\n";
+}
+
+sub GeneratePage($)
+{
+ my ($self) = @_;
+
+ if ($self->GetParam("Action"))
+ {
+ $self->{ActionPerformed} = $self->{CollectionBlock}->OnAction($self->GetParam("Action"));
+ }
+ $self->SUPER::GeneratePage();
+}
+
+1;
More information about the wine-cvs
mailing list