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,24 +3742,90 @@ sub print_feed_meta {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub print_header_links {
|
||||||
|
my $status = shift;
|
||||||
|
|
||||||
|
# print out each stylesheet that exist, providing backwards capability
|
||||||
|
# for those people who defined $stylesheet in a config file
|
||||||
|
if (defined $stylesheet) {
|
||||||
|
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
|
||||||
|
} else {
|
||||||
|
foreach my $stylesheet (@stylesheets) {
|
||||||
|
next unless $stylesheet;
|
||||||
|
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print_feed_meta()
|
||||||
|
if ($status eq '200 OK');
|
||||||
|
if (defined $favicon) {
|
||||||
|
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
if (defined $action) {
|
||||||
|
my $action_print = $action ;
|
||||||
|
if (defined $opts{-action_extra}) {
|
||||||
|
$action_print = $cgi->a({-href => href(action=>$action)},
|
||||||
|
$action);
|
||||||
|
}
|
||||||
|
print " / $action_print";
|
||||||
|
}
|
||||||
|
if (defined $opts{-action_extra}) {
|
||||||
|
print " / $opts{-action_extra}";
|
||||||
|
}
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_search_form {
|
||||||
|
if (!defined $searchtext) {
|
||||||
|
$searchtext = "";
|
||||||
|
}
|
||||||
|
my $search_hash;
|
||||||
|
if (defined $hash_base) {
|
||||||
|
$search_hash = $hash_base;
|
||||||
|
} elsif (defined $hash) {
|
||||||
|
$search_hash = $hash;
|
||||||
|
} else {
|
||||||
|
$search_hash = "HEAD";
|
||||||
|
}
|
||||||
|
my $action = $my_uri;
|
||||||
|
my $use_pathinfo = gitweb_check_feature('pathinfo');
|
||||||
|
if ($use_pathinfo) {
|
||||||
|
$action .= "/".esc_url($project);
|
||||||
|
}
|
||||||
|
print $cgi->startform(-method => "get", -action => $action) .
|
||||||
|
"<div class=\"search\">\n" .
|
||||||
|
(!$use_pathinfo &&
|
||||||
|
$cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") .
|
||||||
|
$cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" .
|
||||||
|
$cgi->input({-name=>"h", -value=>$search_hash, -type=>"hidden"}) . "\n" .
|
||||||
|
$cgi->popup_menu(-name => 'st', -default => 'commit',
|
||||||
|
-values => ['commit', 'grep', 'author', 'committer', 'pickaxe']) .
|
||||||
|
$cgi->sup($cgi->a({-href => href(action=>"search_help")}, "?")) .
|
||||||
|
" search:\n",
|
||||||
|
$cgi->textfield(-name => "s", -value => $searchtext) . "\n" .
|
||||||
|
"<span title=\"Extended regular expression\">" .
|
||||||
|
$cgi->checkbox(-name => 'sr', -value => 1, -label => 're',
|
||||||
|
-checked => $search_use_regexp) .
|
||||||
|
"</span>" .
|
||||||
|
"</div>" .
|
||||||
|
$cgi->end_form() . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
sub git_header_html {
|
sub git_header_html {
|
||||||
my $status = shift || "200 OK";
|
my $status = shift || "200 OK";
|
||||||
my $expires = shift;
|
my $expires = shift;
|
||||||
my %opts = @_;
|
my %opts = @_;
|
||||||
|
|
||||||
my $title = get_page_title();
|
my $title = get_page_title();
|
||||||
my $content_type;
|
my $content_type = 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) {
|
|
||||||
$content_type = 'application/xhtml+xml';
|
|
||||||
} else {
|
|
||||||
$content_type = 'text/html';
|
|
||||||
}
|
|
||||||
print $cgi->header(-type=>$content_type, -charset => 'utf-8',
|
print $cgi->header(-type=>$content_type, -charset => 'utf-8',
|
||||||
-status=> $status, -expires => $expires)
|
-status=> $status, -expires => $expires)
|
||||||
unless ($opts{'-no_http_header'});
|
unless ($opts{'-no_http_header'});
|
||||||
@ -3767,22 +3847,7 @@ EOF
|
|||||||
if ($ENV{'PATH_INFO'}) {
|
if ($ENV{'PATH_INFO'}) {
|
||||||
print "<base href=\"".esc_url($base_url)."\" />\n";
|
print "<base href=\"".esc_url($base_url)."\" />\n";
|
||||||
}
|
}
|
||||||
# print out each stylesheet that exist, providing backwards capability
|
print_header_links($status);
|
||||||
# for those people who defined $stylesheet in a config file
|
|
||||||
if (defined $stylesheet) {
|
|
||||||
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
|
|
||||||
} else {
|
|
||||||
foreach my $stylesheet (@stylesheets) {
|
|
||||||
next unless $stylesheet;
|
|
||||||
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print_feed_meta()
|
|
||||||
if ($status eq '200 OK');
|
|
||||||
if (defined $favicon) {
|
|
||||||
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
|
|
||||||
}
|
|
||||||
|
|
||||||
print "</head>\n" .
|
print "</head>\n" .
|
||||||
"<body>\n";
|
"<body>\n";
|
||||||
|
|
||||||
@ -3799,59 +3864,12 @@ EOF
|
|||||||
-alt => "git",
|
-alt => "git",
|
||||||
-class => "logo"}));
|
-class => "logo"}));
|
||||||
}
|
}
|
||||||
print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
|
print_nav_breadcrumbs(%opts);
|
||||||
if (defined $project) {
|
|
||||||
print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
|
|
||||||
if (defined $action) {
|
|
||||||
my $action_print = $action ;
|
|
||||||
if (defined $opts{-action_extra}) {
|
|
||||||
$action_print = $cgi->a({-href => href(action=>$action)},
|
|
||||||
$action);
|
|
||||||
}
|
|
||||||
print " / $action_print";
|
|
||||||
}
|
|
||||||
if (defined $opts{-action_extra}) {
|
|
||||||
print " / $opts{-action_extra}";
|
|
||||||
}
|
|
||||||
print "\n";
|
|
||||||
}
|
|
||||||
print "</div>\n";
|
print "</div>\n";
|
||||||
|
|
||||||
my $have_search = gitweb_check_feature('search');
|
my $have_search = gitweb_check_feature('search');
|
||||||
if (defined $project && $have_search) {
|
if (defined $project && $have_search) {
|
||||||
if (!defined $searchtext) {
|
print_search_form();
|
||||||
$searchtext = "";
|
|
||||||
}
|
|
||||||
my $search_hash;
|
|
||||||
if (defined $hash_base) {
|
|
||||||
$search_hash = $hash_base;
|
|
||||||
} elsif (defined $hash) {
|
|
||||||
$search_hash = $hash;
|
|
||||||
} else {
|
|
||||||
$search_hash = "HEAD";
|
|
||||||
}
|
|
||||||
my $action = $my_uri;
|
|
||||||
my $use_pathinfo = gitweb_check_feature('pathinfo');
|
|
||||||
if ($use_pathinfo) {
|
|
||||||
$action .= "/".esc_url($project);
|
|
||||||
}
|
|
||||||
print $cgi->startform(-method => "get", -action => $action) .
|
|
||||||
"<div class=\"search\">\n" .
|
|
||||||
(!$use_pathinfo &&
|
|
||||||
$cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") .
|
|
||||||
$cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" .
|
|
||||||
$cgi->input({-name=>"h", -value=>$search_hash, -type=>"hidden"}) . "\n" .
|
|
||||||
$cgi->popup_menu(-name => 'st', -default => 'commit',
|
|
||||||
-values => ['commit', 'grep', 'author', 'committer', 'pickaxe']) .
|
|
||||||
$cgi->sup($cgi->a({-href => href(action=>"search_help")}, "?")) .
|
|
||||||
" search:\n",
|
|
||||||
$cgi->textfield(-name => "s", -value => $searchtext) . "\n" .
|
|
||||||
"<span title=\"Extended regular expression\">" .
|
|
||||||
$cgi->checkbox(-name => 'sr', -value => 1, -label => 're',
|
|
||||||
-checked => $search_use_regexp) .
|
|
||||||
"</span>" .
|
|
||||||
"</div>" .
|
|
||||||
$cgi->end_form() . "\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user