Improve time markup and tooltips
[gitweb] / gitweb.cgi
index b182f4cfbbd5a4f90a304745aa6bae4824f278b9..ea06c90313fa9d32153d38af235cfddd095b7bc4 100755 (executable)
@@ -519,18 +519,6 @@ our %feature = (
                '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,
@@ -3594,12 +3582,13 @@ sub parse_commit_text {
        $co{'age'} = $age;
        $co{'age_string'} = age_string($age);
        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($co{'committer_epoch'});
+       $co{'age_string_iso8601'} = sprintf "%4i-%02u-%02i %02u:%02u:%02uZ", 1900 + $year, $mon+1, $mday, $hour, $min, $sec;
        if ($age > 60*60*24*7*2) {
                $co{'age_string_date'} = sprintf "%4i-%02u-%02i", 1900 + $year, $mon+1, $mday;
-               $co{'age_string_age'} = $co{'age_string'};
+               $co{'age_string_age'} = "$co{'age_string_iso8601'} ($co{'age_string'})";
        } else {
                $co{'age_string_date'} = $co{'age_string'};
-               $co{'age_string_age'} = sprintf "%4i-%02u-%02i", 1900 + $year, $mon+1, $mday;
+               $co{'age_string_age'} = $co{'age_string_iso8601'};
        }
        return %co;
 }
@@ -4310,28 +4299,24 @@ sub git_footer_html {
                insert_file($site_footer);
        }
 
-       print qq!<script type="text/javascript" src="!.esc_url($javascript).qq!"></script>\n!;
        if (defined $action &&
            $action eq 'blame_incremental') {
-               print qq!<script type="text/javascript">\n!.
+               print qq!<script src="!.esc_url($javascript).qq!"></script>\n!;
+               print qq!<script>\n!.
                      qq!startBlame("!. esc_attr(href(action=>"blame_data", -replay=>1)) .qq!",\n!.
                      qq!           "!. esc_attr(href()) .qq!");\n!.
                      qq!</script>\n!;
        } else {
-               my ($jstimezone, $tz_cookie, $datetime_class) =
-                       gitweb_get_feature('javascript-timezone');
-
-               print qq!<script type="text/javascript">\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!<script src="!.esc_url($javascript).qq!"></script>\n!;
+                       print qq!<script>\n!.
+                               qq!window.onload = function () {\n!;
+                       if (gitweb_check_feature('javascript-actions')) {
+                               print qq!       fixLinks();\n!;
+                       }
+                       print qq!};\n!.
+                               qq!</script>\n!;
                }
-               print qq!};\n!.
-                     qq!</script>\n!;
        }
 
        print "</body>\n" .
@@ -4429,7 +4414,7 @@ sub git_print_page_nav {
        print "<div class=\"page_nav\">\n" .
                (join " | ",
                 map { $_ eq $current ?
-                      $_ : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_")
+                      $cgi->span({-class => "current"}, $_) : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_")
                 } @navs);
        print "<br/>\n$extra" if defined $extra; # pager or formats
        print "</div>\n";
@@ -4494,7 +4479,7 @@ sub git_print_header_div {
 
 sub format_repo_url {
        my ($name, $url) = @_;
-       return "<tr class=\"metadata_url\"><td>$name</td><td>$url</td></tr>\n";
+       return "<tr class=\"metadata_url\"><th>$name</th><td>$url</td></tr>\n";
 }
 
 # Group output by placing it in a DIV element and adding a header.
@@ -4537,23 +4522,8 @@ sub git_print_section {
 
 sub format_timestamp_html {
        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)';
-       }
-       $strtime .= ' ' .
-                   sprintf($localtime_format,
-                           $date->{'hour_local'}, $date->{'minute_local'}, $date->{'tz_local'});
-
-       return $strtime;
+       return qq!<time datetime="$date->{'iso-8601'}" title="$date->{'iso-tz'}">$date->{'rfc2822'}</time>!;
 }
 
 # Outputs the author name and date in long form
@@ -4682,11 +4652,6 @@ sub git_print_log {
 
                print format_log_line_html($line) . "<br/>\n";
        }
-
-       if ($opts{'-final_empty_line'}) {
-               # end with single empty line
-               print "<br/>\n" unless $skip_blank_line;
-       }
 }
 
 # return link target (what link points to)
@@ -5918,7 +5883,7 @@ sub git_log_body {
                my $commit = $co{'id'};
                my $ref = format_ref_marker($refs, $commit);
                git_print_header_div('commit',
-                              "<span class=\"age\">$co{'age_string'}</span>" .
+                              "<time datetime=\"$co{'age_string_iso8601'}\" title=\"$co{'age_string_iso8601'}\" class=\"age\">$co{'age_string'}</time>" .
                               esc_html($co{'title'}) . $ref,
                               $commit);
                print "<div class=\"title_text\">\n" .
@@ -5928,13 +5893,12 @@ sub git_log_body {
                      $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") .
                      " | " .
                      $cgi->a({-href => href(action=>"tree", hash=>$commit, hash_base=>$commit)}, "tree") .
-                     "<br/>\n" .
                      "</div>\n";
                      git_print_authorship(\%co, -tag => 'span');
-                     print "<br/>\n</div>\n";
+                     print "</div>\n";
 
                print "<div class=\"log_body\">\n";
-               git_print_log($co{'comment'}, -final_empty_line=> 1);
+               git_print_log($co{'comment'});
                print "</div>\n";
        }
        if ($extra) {
@@ -5964,7 +5928,7 @@ sub git_shortlog_body {
                }
                $alternate ^= 1;
                # git_summary() used print "<td><i>$co{'age_string'}</i></td>\n" .
-               print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
+               print "<td title=\"$co{'age_string_age'}\"><time datetime=\"$co{'age_string_iso8601'}\">$co{'age_string_date'}</time></td>\n" .
                      format_author_html('td', \%co, 10) . "<td>";
                print format_subject_html($co{'title'}, $co{'title_short'},
                                          href(action=>"commit", hash=>$commit), $ref);
@@ -6013,7 +5977,7 @@ sub git_history_body {
                        print "<tr class=\"light\">\n";
                }
                $alternate ^= 1;
-               print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
+               print "<td title=\"$co{'age_string_age'}\"><time datetime=\"$co{'age_string_iso8601'}\">$co{'age_string_date'}</time></td>\n" .
        # shortlog:   format_author_html('td', \%co, 10)
                      format_author_html('td', \%co, 15, 3) . "<td>";
                # originally git_history used chop_str($co{'title'}, 50)
@@ -6343,7 +6307,7 @@ sub git_search_changes {
                        $alternate ^= 1;
                        %co = parse_commit($set{'commit'});
                        my $author = chop_and_escape_str($co{'author_name'}, 15, 5);
-                       print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
+                       print "<td title=\"$co{'age_string_age'}\"><time datetime=\"$co{'age_string_iso8601'}\">$co{'age_string_date'}</time></td>\n" .
                              "<td><i>$author</i></td>\n" .
                              "<td>" .
                              $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}),
@@ -6477,7 +6441,7 @@ sub git_search_grep_body {
                        print "<tr class=\"light\">\n";
                }
                $alternate ^= 1;
-               print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
+               print "<td title=\"$co{'age_string_age'}\"><time datetime=\"$co{'age_string_iso8601'}\">$co{'age_string_date'}</time></td>\n" .
                      format_author_html('td', \%co, 15, 5) .
                      "<td>" .
                      $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}),
@@ -6624,7 +6588,6 @@ sub git_summary {
        git_header_html();
        git_print_page_nav('summary','', $head);
 
-       print "<div class=\"title\">&nbsp;</div>\n";
        print "<table class=\"projects_list\">\n" .
              "<tr id=\"metadata_desc\"><th>description</th><td>" . esc_html($descr) . "</td></tr>\n";
         if ($owner and not $omit_owner) {
@@ -8018,7 +7981,7 @@ sub git_commitdiff {
                print "<div class=\"page_body\">\n";
                if (@{$co{'comment'}} > 1) {
                        print "<div class=\"log\">\n";
-                       git_print_log($co{'comment'}, -final_empty_line=> 1, -remove_title => 1);
+                       git_print_log($co{'comment'}, -remove_title => 1);
                        print "</div>\n"; # class="log"
                }