gitweb: Refactor git_header_html
Extract the following parts into separate subroutines: * finding correct MIME content type for HTML pages (text/html or application/xhtml+xml?) into get_content_type_html() * printing <link ...> elements in HTML head into print_header_links() * printing navigation "breadcrumbs" for given action into print_nav_breadcrumbs() * printing search form into print_search_form() This reduces git_header_html to two pages long (53 lines), making gitweb code easier to read. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2765233c64
commit
6ee9033d67
@ -3683,6 +3683,20 @@ sub get_page_title {
|
||||
return $title;
|
||||
}
|
||||
|
||||
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';
|
||||
}
|
||||
}
|
||||
|
||||
sub print_feed_meta {
|
||||
if (defined $project) {
|
||||
my %href_params = get_feed_info();
|
||||
@ -3728,45 +3742,9 @@ sub print_feed_meta {
|
||||
}
|
||||
}
|
||||
|
||||
sub git_header_html {
|
||||
my $status = shift || "200 OK";
|
||||
my $expires = shift;
|
||||
my %opts = @_;
|
||||
sub print_header_links {
|
||||
my $status = shift;
|
||||
|
||||
my $title = get_page_title();
|
||||
my $content_type;
|
||||
# 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) {
|
||||
$content_type = 'application/xhtml+xml';
|
||||
} else {
|
||||
$content_type = 'text/html';
|
||||
}
|
||||
print $cgi->header(-type=>$content_type, -charset => 'utf-8',
|
||||
-status=> $status, -expires => $expires)
|
||||
unless ($opts{'-no_http_header'});
|
||||
my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : '';
|
||||
print <<EOF;
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
|
||||
<!-- git web interface version $version, (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
|
||||
<!-- git core binaries version $git_version -->
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="$content_type; charset=utf-8"/>
|
||||
<meta name="generator" content="gitweb/$version git/$git_version$mod_perl_version"/>
|
||||
<meta name="robots" content="index, nofollow"/>
|
||||
<title>$title</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 "<base href=\"".esc_url($base_url)."\" />\n";
|
||||
}
|
||||
# print out each stylesheet that exist, providing backwards capability
|
||||
# for those people who defined $stylesheet in a config file
|
||||
if (defined $stylesheet) {
|
||||
@ -3782,23 +3760,11 @@ EOF
|
||||
if (defined $favicon) {
|
||||
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
|
||||
}
|
||||
|
||||
print "</head>\n" .
|
||||
"<body>\n";
|
||||
|
||||
if (defined $site_header && -f $site_header) {
|
||||
insert_file($site_header);
|
||||
}
|
||||
|
||||
print "<div class=\"page_header\">\n";
|
||||
if (defined $logo) {
|
||||
print $cgi->a({-href => esc_url($logo_url),
|
||||
-title => $logo_label},
|
||||
$cgi->img({-src => esc_url($logo),
|
||||
-width => 72, -height => 27,
|
||||
-alt => "git",
|
||||
-class => "logo"}));
|
||||
}
|
||||
sub print_nav_breadcrumbs {
|
||||
my %opts = @_;
|
||||
|
||||
print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
|
||||
if (defined $project) {
|
||||
print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
|
||||
@ -3815,10 +3781,9 @@ EOF
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
print "</div>\n";
|
||||
}
|
||||
|
||||
my $have_search = gitweb_check_feature('search');
|
||||
if (defined $project && $have_search) {
|
||||
sub print_search_form {
|
||||
if (!defined $searchtext) {
|
||||
$searchtext = "";
|
||||
}
|
||||
@ -3853,6 +3818,59 @@ EOF
|
||||
"</div>" .
|
||||
$cgi->end_form() . "\n";
|
||||
}
|
||||
|
||||
sub git_header_html {
|
||||
my $status = shift || "200 OK";
|
||||
my $expires = shift;
|
||||
my %opts = @_;
|
||||
|
||||
my $title = get_page_title();
|
||||
my $content_type = get_content_type_html();
|
||||
print $cgi->header(-type=>$content_type, -charset => 'utf-8',
|
||||
-status=> $status, -expires => $expires)
|
||||
unless ($opts{'-no_http_header'});
|
||||
my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : '';
|
||||
print <<EOF;
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
|
||||
<!-- git web interface version $version, (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
|
||||
<!-- git core binaries version $git_version -->
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="$content_type; charset=utf-8"/>
|
||||
<meta name="generator" content="gitweb/$version git/$git_version$mod_perl_version"/>
|
||||
<meta name="robots" content="index, nofollow"/>
|
||||
<title>$title</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 "<base href=\"".esc_url($base_url)."\" />\n";
|
||||
}
|
||||
print_header_links($status);
|
||||
print "</head>\n" .
|
||||
"<body>\n";
|
||||
|
||||
if (defined $site_header && -f $site_header) {
|
||||
insert_file($site_header);
|
||||
}
|
||||
|
||||
print "<div class=\"page_header\">\n";
|
||||
if (defined $logo) {
|
||||
print $cgi->a({-href => esc_url($logo_url),
|
||||
-title => $logo_label},
|
||||
$cgi->img({-src => esc_url($logo),
|
||||
-width => 72, -height => 27,
|
||||
-alt => "git",
|
||||
-class => "logo"}));
|
||||
}
|
||||
print_nav_breadcrumbs(%opts);
|
||||
print "</div>\n";
|
||||
|
||||
my $have_search = gitweb_check_feature('search');
|
||||
if (defined $project && $have_search) {
|
||||
print_search_form();
|
||||
}
|
||||
}
|
||||
|
||||
sub git_footer_html {
|
||||
|
Loading…
Reference in New Issue
Block a user