Search highlighting <mark>, diff recolouring
[gitweb] / gitweb.cgi
index ea06c90313fa9d32153d38af235cfddd095b7bc4..91047b0e0ba37560264572f5f43ca4d0e8ea89ec 100755 (executable)
@@ -1862,7 +1862,7 @@ sub esc_html_hl_regions {
 
                $out .= esc_html(substr($str, $pos, $begin - $pos), %opts)
                        if ($begin - $pos > 0);
-               $out .= $cgi->span({-class => $css_class}, $escaped);
+               $out .= "<mark class=\"$css_class\">$escaped</mark>";
 
                $pos = $end;
        }
@@ -1892,7 +1892,7 @@ sub esc_html_match_hl {
        my @matches = matchpos_list($str, $regexp);
        return esc_html($str) unless @matches;
 
-       return esc_html_hl_regions($str, 'match', @matches);
+       return esc_html_hl_regions($str, undef, @matches);
 }
 
 
@@ -1924,7 +1924,7 @@ sub esc_html_match_hl_chopped {
                push @filtered, $m;
        }
 
-       return esc_html_hl_regions($chopped . $tail, 'match', @filtered);
+       return esc_html_hl_regions($chopped . $tail, undef, @filtered);
 }
 
 ## ----------------------------------------------------------------------
@@ -3032,7 +3032,7 @@ sub git_populate_project_tagcloud {
                        $title =~ s/^/&nbsp;/g;
                        $title =~ s/$/&nbsp;/g;
                        if (defined $matched && $matched eq $ctag) {
-                               $title = qq(<span class="match">$title</span>);
+                               $title = qq(<mark>$title</mark>);
                        }
                        $cloud->add($title, href(project=>undef, ctag=>$ctag),
                                    $ctags_lc{$ctag}->{count});
@@ -3042,7 +3042,7 @@ sub git_populate_project_tagcloud {
                foreach my $ctag (keys %ctags_lc) {
                        my $title = esc_html($ctags_lc{$ctag}->{topname}, -nbsp=>1);
                        if (defined $matched && $matched eq $ctag) {
-                               $title = qq(<span class="match">$title</span>);
+                               $title = qq(<mark>$title</mark>);
                        }
                        $cloud->{$ctag}{count} = $ctags_lc{$ctag}->{count};
                        $cloud->{$ctag}{ctag} =
@@ -4848,11 +4848,11 @@ sub git_difftree_body {
        my ($difftree, $hash, @parents) = @_;
        my ($parent) = $parents[0];
        my $have_blame = gitweb_check_feature('blame');
-       print "<div class=\"list_head\">\n";
        if ($#{$difftree} > 10) {
+               print "<div class=\"list_head\">\n";
                print(($#{$difftree} + 1) . " files changed:\n");
+               print "</div>\n";
        }
-       print "</div>\n";
 
        print "<table class=\"" .
              (@parents > 1 ? "combined " : "") .
@@ -5877,11 +5877,13 @@ sub git_log_body {
        $from = 0 unless defined $from;
        $to = $#{$commitlist} if (!defined $to || $#{$commitlist} < $to);
 
+       print "<section class=\"cards\">\n";
        for (my $i = 0; $i <= $to; $i++) {
                my %co = %{$commitlist->[$i]};
                next if !%co;
                my $commit = $co{'id'};
                my $ref = format_ref_marker($refs, $commit);
+               print "<article>\n";
                git_print_header_div('commit',
                               "<time datetime=\"$co{'age_string_iso8601'}\" title=\"$co{'age_string_iso8601'}\" class=\"age\">$co{'age_string'}</time>" .
                               esc_html($co{'title'}) . $ref,
@@ -5900,7 +5902,9 @@ sub git_log_body {
                print "<div class=\"log_body\">\n";
                git_print_log($co{'comment'});
                print "</div>\n";
+               print "</article>\n";
        }
+       print "</section>\n";
        if ($extra) {
                print "<div class=\"page_nav\">\n";
                print "$extra\n";
@@ -6319,7 +6323,7 @@ sub git_search_changes {
                        print $cgi->a({-href => href(action=>"blob", hash_base=>$co{'id'},
                                                     hash=>$set{'to_id'}, file_name=>$set{'to_file'}),
                                      -class => "list"},
-                                     "<span class=\"match\">" . esc_path($set{'file'}) . "</span>") .
+                                     "<mark>" . esc_path($set{'file'}) . "</mark>") .
                              "<br/>\n";
                }
        }
@@ -6394,9 +6398,9 @@ sub git_search_files {
                        $ltext = untabify($ltext);
                        if ($ltext =~ m/^(.*)($search_regexp)(.*)$/i) {
                                $ltext = esc_html($1, -nbsp=>1);
-                               $ltext .= '<span class="match">';
+                               $ltext .= '<mark>';
                                $ltext .= esc_html($2, -nbsp=>1);
-                               $ltext .= '</span>';
+                               $ltext .= '</mark>';
                                $ltext .= esc_html($3, -nbsp=>1);
                        } else {
                                $ltext = esc_html($ltext, -nbsp=>1);
@@ -6461,7 +6465,7 @@ sub git_search_grep_body {
                                $match = esc_html($match);
                                $trail = esc_html($trail);
 
-                               print "$lead<span class=\"match\">$match</span>$trail<br />";
+                               print "$lead<mark>$match</mark>$trail<br />";
                        }
                }
                print "</td>\n" .
@@ -6625,51 +6629,66 @@ sub git_summary {
 
        print "</table>\n";
 
+       print("<section class=\"cards\">\n");
+
        # If XSS prevention is on, we don't include README.html.
        # TODO: Allow a readme in some safe format.
        if (!$prevent_xss && -s "$projectroot/$project/README.html") {
+               print("<article>\n");
                print "<div class=\"title\">readme</div>\n" .
                      "<div class=\"readme\">\n";
                insert_file("$projectroot/$project/README.html");
                print "\n</div>\n"; # class="readme"
+               print("</article>\n");
        }
 
        # we need to request one more than 16 (0..15) to check if
        # those 16 are all
        my @commitlist = $head ? parse_commits($head, 17) : ();
        if (@commitlist) {
+               print("<article>\n");
                git_print_header_div('shortlog');
                git_shortlog_body(\@commitlist, 0, 15, $refs,
                                  $#commitlist <=  15 ? undef :
                                  $cgi->a({-href => href(action=>"shortlog")}, "..."));
+               print("</article>\n");
        }
 
        if (@taglist) {
+               print("<article>\n");
                git_print_header_div('tags');
                git_tags_body(\@taglist, 0, 15,
                              $#taglist <=  15 ? undef :
                              $cgi->a({-href => href(action=>"tags")}, "..."));
+               print("</article>\n");
        }
 
        if (@headlist) {
+               print("<article>\n");
                git_print_header_div('heads');
                git_heads_body(\@headlist, $head, 0, 15,
                               $#headlist <= 15 ? undef :
                               $cgi->a({-href => href(action=>"heads")}, "..."));
+               print("</article>\n");
        }
 
        if (%remotedata) {
+               print("<article>\n");
                git_print_header_div('remotes');
                git_remotes_body(\%remotedata, 15, $head);
+               print("</article>\n");
        }
 
        if (@forklist) {
+               print("<article>\n");
                git_print_header_div('forks');
                git_project_list_body(\@forklist, 'age', 0, 15,
                                      $#forklist <= 15 ? undef :
                                      $cgi->a({-href => href(action=>"forks")}, "..."),
                                      'no_header');
+               print("</article>\n");
        }
+       print("</section>\n");
 
        git_footer_html();
 }