X-Git-Url: https://git.chrismorgan.info/gitweb/blobdiff_plain/071afd4cc5b307c3e00bca83fb40215a4a5560b6..5166394508950033584da34385aa24f9065b7a60:/gitweb.cgi diff --git a/gitweb.cgi b/gitweb.cgi index b74ebd5..ef15a70 100755 --- a/gitweb.cgi +++ b/gitweb.cgi @@ -4026,40 +4026,36 @@ sub run_highlighter { ## functions printing HTML: header, footer, error page sub get_page_title { - my $title = to_utf8($site_name); - + # Formats: + # SITE_NAME + # SITE_NAME - projects in FILTER + # PROJECT - SITE_NAME + # PROJECT ACTION - SITE_NAME + # FILENAME - PROJECT ACTION - SITE_NAME + my $title; unless (defined $project) { + $title = to_utf8($site_name); if (defined $project_filter) { $title .= " - projects in '" . esc_path($project_filter) . "'"; } return $title; } - $title .= " - " . to_utf8($project); - - return $title unless (defined $action); - $title .= "/$action"; # $action is US-ASCII (7bit ASCII) + $title = to_utf8($project); - return $title unless (defined $file_name); - $title .= " - " . esc_path($file_name); - if ($action eq "tree" && $file_name !~ m|/$|) { - $title .= "/"; + if (defined $action) { + $title .= " $action"; # $action is US-ASCII (7bit ASCII) + if (defined $file_name) { + $title = " - " . $title; + if ($action eq "tree" && $file_name !~ m|/$|) { + $title = "/" . $title; + } + $title = esc_path($file_name) . $title; + } } - return $title; -} + $title .= " - " . to_utf8($site_name); -sub get_content_type_html { - # require explicit support from the UA if we are to send the page as - # 'application/xhtml+xml', otherwise send it as plain old 'text/html'. - # we have to do this because MSIE sometimes globs '*/*', pretending to - # support xhtml+xml but choking when it gets what it asked for. - if (defined $cgi->http('HTTP_ACCEPT') && - $cgi->http('HTTP_ACCEPT') =~ m/(,|;|\s|^)application\/xhtml\+xml(,|;|\s|$)/ && - $cgi->Accept('application/xhtml+xml') != 0) { - return 'application/xhtml+xml'; - } else { - return 'text/html'; - } + return $title; } sub print_feed_meta { @@ -4116,17 +4112,17 @@ sub print_header_links { # print out each stylesheet that exist, providing backwards capability # for those people who defined $stylesheet in a config file if (defined $stylesheet) { - print ''."\n"; + print ''."\n"; } else { foreach my $stylesheet (@stylesheets) { next unless $stylesheet; - print ''."\n"; + print ''."\n"; } } print_feed_meta() if ($status eq '200 OK'); if (defined $favicon) { - print qq(\n); + print qq(\n); } } @@ -4187,8 +4183,7 @@ sub print_search_form { if ($use_pathinfo) { $action .= "/".esc_url($project); } - print $cgi->start_form(-method => "get", -action => $action) . - "
\n" . + print $cgi->start_form(-method => "get", -action => $action, -role => "search") . (!$use_pathinfo && $cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") . $cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" . @@ -4202,7 +4197,6 @@ sub print_search_form { $cgi->checkbox(-name => 'sr', -value => 1, -label => 're', -checked => $search_use_regexp) . "" . - "
" . $cgi->end_form() . "\n"; } @@ -4212,27 +4206,25 @@ sub git_header_html { my %opts = @_; my $title = get_page_title(); - my $content_type = get_content_type_html(); - print $cgi->header(-type=>$content_type, -charset => 'utf-8', + # I wanted to switch to text/html, but it uses nested in a couple of places (e.g. log refs are links inside the commit summary link), which is invalid but works in the XML syntax. Pity. + # (Various other invalid HTML is produced that HTML would have fixed but XHTML allows to be broken, like table > tr, lacking tbody.) + # TODO: reduce the doctype to , but that takes replacing entities like ⋅ with ⋅. + print $cgi->header(-type => 'application/xhtml+xml', -charset => 'utf-8', -status=> $status, -expires => $expires) unless ($opts{'-no_http_header'}); - my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : ''; print < - - - + - - + $title EOF # the stylesheet, favicon etc urls won't work correctly with path_info # unless we set the appropriate base URL if ($ENV{'PATH_INFO'}) { - print "\n"; + print "\n"; } print_header_links($status); @@ -4240,14 +4232,11 @@ EOF print to_utf8($site_html_head_string); } - print "\n" . - "\n"; - if (defined $site_header && -f $site_header) { insert_file($site_header); } - print "
\n"; + print "\n\n
\n"; if (defined $logo) { print $cgi->a({-href => esc_url($logo_url), -title => $logo_label}, @@ -4257,18 +4246,23 @@ EOF -class => "logo"})); } print_nav_breadcrumbs(%opts); - print "
\n"; + print "\n"; + + print "\n"; } sub git_footer_html { my $feed_class = 'rss_logo'; - print "
\n"; + print "
\n"; if (defined $project) { my $descr = git_get_project_description($project); if (defined $descr) { @@ -4296,7 +4290,7 @@ sub git_footer_html { project_filter => $project_filter), -class => $feed_class}, "TXT") . "\n"; } - print "
\n"; # class="page_footer" + print "\n"; # class="page_footer" if (defined $t0 && gitweb_check_feature('timed')) { print "
\n"; @@ -4309,7 +4303,7 @@ sub git_footer_html { $number_of_git_cmds. ' git commands '. " to generate.\n"; - print "
\n"; # class="page_footer" + print "\n"; } if (defined $site_footer && -f $site_footer) { @@ -4371,6 +4365,7 @@ sub die_error { 503 => '503 Service Unavailable', ); git_header_html($http_responses{$status}, undef, %opts); + git_end_subhead_html(); print <

@@ -4393,7 +4388,6 @@ EOF sub git_print_page_nav { my ($current, $suppress, $head, $treehead, $treebase, $extra) = @_; - $extra = '' if !defined $extra; # pager or formats my @navs = qw(summary shortlog log commit commitdiff tree); if ($suppress) { @@ -4437,8 +4431,9 @@ sub git_print_page_nav { map { $_ eq $current ? $_ : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_") } @navs); - print "
\n$extra
\n" . - "\n"; + print "
\n$extra" if defined $extra; # pager or formats + print "\n"; + git_end_subhead_html(); } # returns a submenu for the navigation of the refs views (tags, heads, @@ -4588,7 +4583,7 @@ sub git_print_authorship_rows { @people = ('author', 'committer') unless @people; foreach my $who (@people) { my %wd = parse_date($co->{"${who}_epoch"}, $co->{"${who}_tz"}); - print "$who" . + print "$who" . format_search_author($co->{"${who}_name"}, $who, esc_html($co->{"${who}_name"})) . " " . format_search_author($co->{"${who}_email"}, $who, @@ -6539,6 +6534,7 @@ sub git_project_list { } git_header_html(); + git_end_subhead_html(); if (defined $home_text && -f $home_text) { print "
\n"; insert_file($home_text); @@ -6628,14 +6624,13 @@ sub git_summary { git_header_html(); git_print_page_nav('summary','', $head); - print "
 
\n"; print "\n" . - "\n"; + "\n"; if ($owner and not $omit_owner) { - print "\n"; + print "\n"; } if (defined $cd{'rfc2822'}) { - print "" . + print "" . "\n"; } @@ -6658,7 +6653,7 @@ sub git_summary { # without ability to add tags, don't show if there are none my $cloud = git_populate_project_tagcloud($ctags); print "" . - "" . + "" . "" . "\n"; } @@ -6729,7 +6724,7 @@ sub git_tag { print "
\n" . "
description" . esc_html($descr) . "
description" . esc_html($descr) . "
owner" . esc_html($owner) . "
owner" . esc_html($owner) . "
last change
last change".format_timestamp_html(\%cd)."
content tagscontent tags".git_show_project_tagcloud($cloud, 48)."
\n" . "\n" . - "\n" . + "\n" . "\n" . "
objectobject" . $cgi->a({-class => "list", -href => href(action=>$tag{'type'}, hash=>$tag{'object'})}, $tag{'object'}) . "" . $cgi->a({-href => href(action=>$tag{'type'}, hash=>$tag{'object'})}, @@ -7177,9 +7172,8 @@ sub git_blob { git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_header_div('commit', esc_html($co{'title'}), $hash_base); } else { - print "
\n" . - "

\n" . - "
".esc_html($hash)."
\n"; + git_end_subhead_html(); + print "
".esc_html($hash)."
\n"; } git_print_page_path($file_name, "blob", $hash_base); print "
\n"; @@ -7260,8 +7254,7 @@ sub git_tree { git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base); } else { undef $hash_base; - print "
\n"; - print "

\n"; + git_end_subhead_html(); print "
".esc_html($hash)."
\n"; } if (defined $file_name) { @@ -7608,9 +7601,9 @@ sub git_commit { print "
\n" . "\n"; git_print_authorship_rows(\%co); - print "\n"; + print "\n"; print "" . - "" . + "" . "" . - "" . + "" . "
commit$co{'id'}
commit$co{'id'}
treetree" . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$hash), class => "list"}, $co{'tree'}) . @@ -7627,7 +7620,7 @@ sub git_commit { foreach my $par (@$parents) { print "
parentparent" . $cgi->a({-href => href(action=>"commit", hash=>$par), class => "list"}, $par) . @@ -7785,7 +7778,8 @@ sub git_blobdiff { git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_header_div('commit', esc_html($co{'title'}), $hash_base); } else { - print "

$formats_nav
\n"; + print "

$formats_nav
\n"; + git_end_subhead_html(); print "
".esc_html("$hash vs $hash_parent")."
\n"; } if (defined $file_name) {