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;
|
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 {
|
sub print_feed_meta {
|
||||||
if (defined $project) {
|
if (defined $project) {
|
||||||
my %href_params = get_feed_info();
|
my %href_params = get_feed_info();
|
||||||
@ -3728,45 +3742,9 @@ sub print_feed_meta {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub git_header_html {
|
sub print_header_links {
|
||||||
my $status = shift || "200 OK";
|
my $status = shift;
|
||||||
my $expires = shift;
|
|
||||||
my %opts = @_;
|
|
||||||
|
|
||||||
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
|
# print out each stylesheet that exist, providing backwards capability
|
||||||
# for those people who defined $stylesheet in a config file
|
# for those people who defined $stylesheet in a config file
|
||||||
if (defined $stylesheet) {
|
if (defined $stylesheet) {
|
||||||
@ -3782,23 +3760,11 @@ EOF
|
|||||||
if (defined $favicon) {
|
if (defined $favicon) {
|
||||||
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
|
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
print "</head>\n" .
|
sub print_nav_breadcrumbs {
|
||||||
"<body>\n";
|
my %opts = @_;
|
||||||
|
|
||||||
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 $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
|
print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
|
||||||
if (defined $project) {
|
if (defined $project) {
|
||||||
print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
|
print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
|
||||||
@ -3815,10 +3781,9 @@ EOF
|
|||||||
}
|
}
|
||||||
print "\n";
|
print "\n";
|
||||||
}
|
}
|
||||||
print "</div>\n";
|
}
|
||||||
|
|
||||||
my $have_search = gitweb_check_feature('search');
|
sub print_search_form {
|
||||||
if (defined $project && $have_search) {
|
|
||||||
if (!defined $searchtext) {
|
if (!defined $searchtext) {
|
||||||
$searchtext = "";
|
$searchtext = "";
|
||||||
}
|
}
|
||||||
@ -3852,6 +3817,59 @@ EOF
|
|||||||
"</span>" .
|
"</span>" .
|
||||||
"</div>" .
|
"</div>" .
|
||||||
$cgi->end_form() . "\n";
|
$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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user