This adds ValueFormatter::GenerateDayTimeTipDate().
As usual the full date is shown as a tooltip.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/lib/ObjectModel/CGI/ValueFormatter.pm | 55 ++++++++++++++++++-
testbot/web/PatchesList.pl | 3 +-
testbot/web/WineTestBot.css | 1 +
testbot/web/js/datetime.js | 13 +++++
4 files changed, 70 insertions(+), 2 deletions(-)
diff --git a/testbot/lib/ObjectModel/CGI/ValueFormatter.pm b/testbot/lib/ObjectModel/CGI/ValueFormatter.pm
index d987cee55..41d1e14aa 100644
--- a/testbot/lib/ObjectModel/CGI/ValueFormatter.pm
+++ b/testbot/lib/ObjectModel/CGI/ValueFormatter.pm
@@ -23,7 +23,7 @@ package ObjectModel::CGI::ValueFormatter;
use Exporter 'import';
our @EXPORT = qw(GetDateTimeJSFile GenerateDateTime GenerateTipDateTime
- GenerateTimeTipDate GenerateValueHTML);
+ GenerateDayTimeTipDate GenerateTimeTipDate GenerateValueHTML);
use POSIX qw(strftime);
@@ -151,6 +151,51 @@ sub GenerateTipDateTime($$;$$)
=pod
=over 12
+=item C<GenerateDayTimeTipDate()>
+
+Show the timestamp's day and time with the date as a tooltip.
+
+The timestamp is shown in the user's timezone if JavaScript is available and
+in the server's timezone otherwise.
+
+The default for TagAttrs is 'a' and it should always be a tag that shows the
+content of the title attribute as a tooltip.
+
+See GenerateDateTime() for more details.
+
+=back
+=cut
+
+sub GenerateDayTimeTipDate($;$$)
+{
+ my ($Sec1970, $Class, $TagAttrs) = @_;
+
+ if (defined $Sec1970)
+ {
+ my $Tag;
+ if ($TagAttrs)
+ {
+ $Tag = $TagAttrs;
+ $Tag =~ s/ .*$//;
+ }
+ else
+ {
+ $TagAttrs = $Tag = "a";
+ }
+ $Class = "$Class " if ($Class);
+ print "<$TagAttrs class='${Class}daytimetipdate' timestamp='$Sec1970' ",
+ strftime("title='%Y-%m-%d'>%d %H:%M:%S", localtime($Sec1970)),
+ "</$Tag>";
+ }
+ else
+ {
+ print " ";
+ }
+}
+
+=pod
+=over 12
+
=item C<GenerateTimeTipDate()>
Show the timestamp's time with the date as a tooltip.
@@ -221,6 +266,9 @@ for timestamp properties.
=item "timetipdate"
Same as above but put the date part in a tooltip.
+=item "daytimetipdate"
+Show the day and time and put the full date as a tooltip.
+
=back
=back
@@ -250,6 +298,11 @@ sub GenerateValueHTML($$$;$)
GenerateTimeTipDate($Value);
return;
}
+ if ($Format eq "daytimetipdate")
+ {
+ GenerateDayTimeTipDate($Value);
+ return;
+ }
}
elsif ($PropertyDescriptor->GetClass() eq "Itemref" and defined $Value)
{
diff --git a/testbot/web/PatchesList.pl b/testbot/web/PatchesList.pl
index 30cfc7547..fc074ada1 100644
--- a/testbot/web/PatchesList.pl
+++ b/testbot/web/PatchesList.pl
@@ -40,7 +40,8 @@ sub DisplayProperty($$)
my ($self, $PropertyDescriptor) = @_;
my $PropertyName = $PropertyDescriptor->GetName();
- return $PropertyName =~ /^(?:Received|Disposition|FromName|Subject)$/ ? "ro" :
+ return $PropertyName eq "Received" ? ("ro", "daytimetipdate") :
+ $PropertyName =~ /^(?:Disposition|FromName|Subject)$/ ? "ro" :
"";
}
diff --git a/testbot/web/WineTestBot.css b/testbot/web/WineTestBot.css
index 350ab64a4..a8756dfce 100644
--- a/testbot/web/WineTestBot.css
+++ b/testbot/web/WineTestBot.css
@@ -410,6 +410,7 @@ pre
a.title { color:inherit; text-decoration: none; }
a.tipdatetime { color:inherit; text-decoration: none; }
a.timetipdate { color:inherit; text-decoration: none; }
+a.daytimetipdate { color:inherit; text-decoration: none; }
th.Record { text-align: center; }
td.Record { text-align: center; }
diff --git a/testbot/web/js/datetime.js b/testbot/web/js/datetime.js
index 23b7b2718..d21bf5c6e 100644
--- a/testbot/web/js/datetime.js
+++ b/testbot/web/js/datetime.js
@@ -40,6 +40,16 @@ function ShowDateTime(dom, attr)
}
}
+function ShowDayTimeTipDate(dom)
+{
+ const sec1970 = dom.getAttribute("timestamp");
+ const dt = new Date(sec1970 * 1000);
+ dom.setAttribute('title', dt.getFullYear() +'-'+ Pad2(dt.getMonth() + 1)
+ +'-'+ Pad2(dt.getDate()));
+ dom.innerHTML = Pad2(dt.getDate()) +' '+ Pad2(dt.getHours()) +':'+
+ Pad2(dt.getMinutes()) +':'+ Pad2(dt.getSeconds());
+}
+
function ShowTimeTipDate(dom)
{
const sec1970 = dom.getAttribute("timestamp");
@@ -58,6 +68,9 @@ function init()
document.querySelectorAll(".tipdatetime").forEach(dom => {
ShowDateTime(dom, 'title');
});
+ document.querySelectorAll(".daytimetipdate").forEach(dom => {
+ ShowDayTimeTipDate(dom);
+ });
document.querySelectorAll(".timetipdate").forEach(dom => {
ShowTimeTipDate(dom);
});
--
2.30.2