]> Lady’s Gitweb - Gitweb/blobdiff - gitweb.perl
gitweb: Make JavaScript ability to adjust timezones configurable
[Gitweb] / gitweb.perl
index ca3d1a95c570b1a381a6c65e246da9d5e94156c40fc471771d8e422c80c3986f..8338cb9c8211551fa84674dd977abfdc9db77d43701e3839435c31e8a9833b57 100755 (executable)
@@ -492,6 +492,18 @@ our %feature = (
                'override' => 0,
                'default' => [0]},
 
                'override' => 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
        # and Sham Chukoury's work in gitweb-xmms2.git.
        # It requires the 'highlight' program present in $PATH,
        # Syntax highlighting support. This is based on Daniel Svensson's
        # and Sham Chukoury's work in gitweb-xmms2.git.
        # It requires the 'highlight' program present in $PATH,
@@ -3886,9 +3898,20 @@ sub git_footer_html {
                      qq!startBlame("!. href(action=>"blame_data", -replay=>1) .qq!",\n!.
                      qq!           "!. href() .qq!");\n!.
                      qq!</script>\n!;
                      qq!startBlame("!. href(action=>"blame_data", -replay=>1) .qq!",\n!.
                      qq!           "!. href() .qq!");\n!.
                      qq!</script>\n!;
-       } elsif (gitweb_check_feature('javascript-actions')) {
+       } 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 = fixLinks;\n!.
+                     qq!window.onload = function () {\n!;
+               if (gitweb_check_feature('javascript-actions')) {
+                       print qq!       fixLinks();\n!;
+               }
+               if ($jstimezone && $tz_cookie && $datetime_class) {
+                       print qq!       var tz_cookie = { name: '$tz_cookie', expires: 14, path: '/' };\n!. # in days
+                             qq!       onloadTZSetup('$jstimezone', tz_cookie, '$datetime_class');\n!;
+               }
+               print qq!};\n!.
                      qq!</script>\n!;
        }
 
                      qq!</script>\n!;
        }
 
@@ -4096,6 +4119,12 @@ sub format_timestamp_html {
        my $date = shift;
        my $strtime = $date->{'rfc2822'};
 
        my $date = shift;
        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)';
        if ($date->{'hour_local'} < 6) {
                $localtime_format = '(<span class="atnight">%02d:%02d</span> %s)';
        my $localtime_format = '(%02d:%02d %s)';
        if ($date->{'hour_local'} < 6) {
                $localtime_format = '(<span class="atnight">%02d:%02d</span> %s)';
This page took 0.184181 seconds and 4 git commands to generate.