gitweb: Make JavaScript ability to adjust timezones configurable

Configure JavaScript-based ability to select common timezone for git
dates via %feature mechanism, namely 'javascript-timezone' feature.

The following settings are configurable:
* default timezone (defaults to 'local' i.e. browser timezone);
  this also can function as a way to disable this ability,
  by setting it to false-ish value (undef or '')
* name of cookie to store user's choice of timezone
* class name to mark dates

NOTE: This is a bit of abuse of %feature system, which can store only
sequence of values, rather than dictionary (hash); usually but not
always only a single value is used.

Based-on-code-by: John 'Warthog9' Hawley <warthog9@eaglescrag.net>
Helped-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jakub Narebski 2011-04-28 21:04:11 +02:00 committed by Junio C Hamano
parent 2ae8da2552
commit 2e987f9240

View File

@ -480,6 +480,18 @@ our %feature = (
'override' => 0, 'override' => 0,
'default' => [0]}, 'default' => [0]},
# Enable and configure ability to change common timezone for dates
# in gitweb output via JavaScript. Enabled by default.
# Project specific override is not supported.
'javascript-timezone' => {
'override' => 0,
'default' => [
'local', # default timezone: 'utc', 'local', or '(-|+)HHMM' format,
# or undef to turn off this feature
'gitweb_tz', # name of cookie where to store selected timezone
'datetime', # CSS class used to mark up dates for manipulation
]},
# Syntax highlighting support. This is based on Daniel Svensson's # Syntax highlighting support. This is based on Daniel Svensson's
# and Sham Chukoury's work in gitweb-xmms2.git. # and Sham Chukoury's work in gitweb-xmms2.git.
# It requires the 'highlight' program present in $PATH, # It requires the 'highlight' program present in $PATH,
@ -3733,14 +3745,19 @@ sub git_footer_html {
qq! "!. href() .qq!");\n!. qq! "!. href() .qq!");\n!.
qq!</script>\n!; qq!</script>\n!;
} else { } else {
my ($jstimezone, $tz_cookie, $datetime_class) =
gitweb_get_feature('javascript-timezone');
print qq!<script type="text/javascript">\n!. print qq!<script type="text/javascript">\n!.
qq!window.onload = function () {\n!. qq!window.onload = function () {\n!;
(gitweb_check_feature('javascript-actions') ? if (gitweb_check_feature('javascript-actions')) {
qq! fixLinks();\n! : ''). print qq! fixLinks();\n!;
# last parameter to onloadTZSetup must be CSS class used by format_timestamp_html }
qq! var tz_cookie = { name: 'gitweb_tz', expires: 14, path: '/' };\n!. # in days if ($jstimezone && $tz_cookie && $datetime_class) {
qq! onloadTZSetup('local', tz_cookie, 'datetime');\n!. print qq! var tz_cookie = { name: '$tz_cookie', expires: 14, path: '/' };\n!. # in days
qq!};\n!. qq! onloadTZSetup('$jstimezone', tz_cookie, '$datetime_class');\n!;
}
print qq!};\n!.
qq!</script>\n!; qq!</script>\n!;
} }
@ -3946,7 +3963,13 @@ sub git_print_section {
sub format_timestamp_html { sub format_timestamp_html {
my $date = shift; my $date = shift;
my $strtime = '<span class="datetime">'.$date->{'rfc2822'}.'</span>'; my $strtime = $date->{'rfc2822'};
my (undef, undef, $datetime_class) =
gitweb_get_feature('javascript-timezone');
if ($datetime_class) {
$strtime = qq!<span class="$datetime_class">$strtime</span>!;
}
my $localtime_format = '(%02d:%02d %s)'; my $localtime_format = '(%02d:%02d %s)';
if ($date->{'hour_local'} < 6) { if ($date->{'hour_local'} < 6) {