Skip to content

Commit 6ee9033

Browse files
jnarebgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 2765233 commit 6ee9033

File tree

1 file changed

+95
-77
lines changed

1 file changed

+95
-77
lines changed

gitweb/gitweb.perl

Lines changed: 95 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -3683,6 +3683,20 @@ sub get_page_title {
36833683
return $title;
36843684
}
36853685

3686+
sub get_content_type_html {
3687+
# require explicit support from the UA if we are to send the page as
3688+
# 'application/xhtml+xml', otherwise send it as plain old 'text/html'.
3689+
# we have to do this because MSIE sometimes globs '*/*', pretending to
3690+
# support xhtml+xml but choking when it gets what it asked for.
3691+
if (defined $cgi->http('HTTP_ACCEPT') &&
3692+
$cgi->http('HTTP_ACCEPT') =~ m/(,|;|\s|^)application\/xhtml\+xml(,|;|\s|$)/ &&
3693+
$cgi->Accept('application/xhtml+xml') != 0) {
3694+
return 'application/xhtml+xml';
3695+
} else {
3696+
return 'text/html';
3697+
}
3698+
}
3699+
36863700
sub print_feed_meta {
36873701
if (defined $project) {
36883702
my %href_params = get_feed_info();
@@ -3728,24 +3742,90 @@ sub print_feed_meta {
37283742
}
37293743
}
37303744

3745+
sub print_header_links {
3746+
my $status = shift;
3747+
3748+
# print out each stylesheet that exist, providing backwards capability
3749+
# for those people who defined $stylesheet in a config file
3750+
if (defined $stylesheet) {
3751+
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
3752+
} else {
3753+
foreach my $stylesheet (@stylesheets) {
3754+
next unless $stylesheet;
3755+
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
3756+
}
3757+
}
3758+
print_feed_meta()
3759+
if ($status eq '200 OK');
3760+
if (defined $favicon) {
3761+
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
3762+
}
3763+
}
3764+
3765+
sub print_nav_breadcrumbs {
3766+
my %opts = @_;
3767+
3768+
print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
3769+
if (defined $project) {
3770+
print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
3771+
if (defined $action) {
3772+
my $action_print = $action ;
3773+
if (defined $opts{-action_extra}) {
3774+
$action_print = $cgi->a({-href => href(action=>$action)},
3775+
$action);
3776+
}
3777+
print " / $action_print";
3778+
}
3779+
if (defined $opts{-action_extra}) {
3780+
print " / $opts{-action_extra}";
3781+
}
3782+
print "\n";
3783+
}
3784+
}
3785+
3786+
sub print_search_form {
3787+
if (!defined $searchtext) {
3788+
$searchtext = "";
3789+
}
3790+
my $search_hash;
3791+
if (defined $hash_base) {
3792+
$search_hash = $hash_base;
3793+
} elsif (defined $hash) {
3794+
$search_hash = $hash;
3795+
} else {
3796+
$search_hash = "HEAD";
3797+
}
3798+
my $action = $my_uri;
3799+
my $use_pathinfo = gitweb_check_feature('pathinfo');
3800+
if ($use_pathinfo) {
3801+
$action .= "/".esc_url($project);
3802+
}
3803+
print $cgi->startform(-method => "get", -action => $action) .
3804+
"<div class=\"search\">\n" .
3805+
(!$use_pathinfo &&
3806+
$cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") .
3807+
$cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" .
3808+
$cgi->input({-name=>"h", -value=>$search_hash, -type=>"hidden"}) . "\n" .
3809+
$cgi->popup_menu(-name => 'st', -default => 'commit',
3810+
-values => ['commit', 'grep', 'author', 'committer', 'pickaxe']) .
3811+
$cgi->sup($cgi->a({-href => href(action=>"search_help")}, "?")) .
3812+
" search:\n",
3813+
$cgi->textfield(-name => "s", -value => $searchtext) . "\n" .
3814+
"<span title=\"Extended regular expression\">" .
3815+
$cgi->checkbox(-name => 'sr', -value => 1, -label => 're',
3816+
-checked => $search_use_regexp) .
3817+
"</span>" .
3818+
"</div>" .
3819+
$cgi->end_form() . "\n";
3820+
}
3821+
37313822
sub git_header_html {
37323823
my $status = shift || "200 OK";
37333824
my $expires = shift;
37343825
my %opts = @_;
37353826

37363827
my $title = get_page_title();
3737-
my $content_type;
3738-
# require explicit support from the UA if we are to send the page as
3739-
# 'application/xhtml+xml', otherwise send it as plain old 'text/html'.
3740-
# we have to do this because MSIE sometimes globs '*/*', pretending to
3741-
# support xhtml+xml but choking when it gets what it asked for.
3742-
if (defined $cgi->http('HTTP_ACCEPT') &&
3743-
$cgi->http('HTTP_ACCEPT') =~ m/(,|;|\s|^)application\/xhtml\+xml(,|;|\s|$)/ &&
3744-
$cgi->Accept('application/xhtml+xml') != 0) {
3745-
$content_type = 'application/xhtml+xml';
3746-
} else {
3747-
$content_type = 'text/html';
3748-
}
3828+
my $content_type = get_content_type_html();
37493829
print $cgi->header(-type=>$content_type, -charset => 'utf-8',
37503830
-status=> $status, -expires => $expires)
37513831
unless ($opts{'-no_http_header'});
@@ -3767,22 +3847,7 @@ sub git_header_html {
37673847
if ($ENV{'PATH_INFO'}) {
37683848
print "<base href=\"".esc_url($base_url)."\" />\n";
37693849
}
3770-
# print out each stylesheet that exist, providing backwards capability
3771-
# for those people who defined $stylesheet in a config file
3772-
if (defined $stylesheet) {
3773-
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
3774-
} else {
3775-
foreach my $stylesheet (@stylesheets) {
3776-
next unless $stylesheet;
3777-
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n";
3778-
}
3779-
}
3780-
print_feed_meta()
3781-
if ($status eq '200 OK');
3782-
if (defined $favicon) {
3783-
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n);
3784-
}
3785-
3850+
print_header_links($status);
37863851
print "</head>\n" .
37873852
"<body>\n";
37883853

@@ -3799,59 +3864,12 @@ sub git_header_html {
37993864
-alt => "git",
38003865
-class => "logo"}));
38013866
}
3802-
print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
3803-
if (defined $project) {
3804-
print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
3805-
if (defined $action) {
3806-
my $action_print = $action ;
3807-
if (defined $opts{-action_extra}) {
3808-
$action_print = $cgi->a({-href => href(action=>$action)},
3809-
$action);
3810-
}
3811-
print " / $action_print";
3812-
}
3813-
if (defined $opts{-action_extra}) {
3814-
print " / $opts{-action_extra}";
3815-
}
3816-
print "\n";
3817-
}
3867+
print_nav_breadcrumbs(%opts);
38183868
print "</div>\n";
38193869

38203870
my $have_search = gitweb_check_feature('search');
38213871
if (defined $project && $have_search) {
3822-
if (!defined $searchtext) {
3823-
$searchtext = "";
3824-
}
3825-
my $search_hash;
3826-
if (defined $hash_base) {
3827-
$search_hash = $hash_base;
3828-
} elsif (defined $hash) {
3829-
$search_hash = $hash;
3830-
} else {
3831-
$search_hash = "HEAD";
3832-
}
3833-
my $action = $my_uri;
3834-
my $use_pathinfo = gitweb_check_feature('pathinfo');
3835-
if ($use_pathinfo) {
3836-
$action .= "/".esc_url($project);
3837-
}
3838-
print $cgi->startform(-method => "get", -action => $action) .
3839-
"<div class=\"search\">\n" .
3840-
(!$use_pathinfo &&
3841-
$cgi->input({-name=>"p", -value=>$project, -type=>"hidden"}) . "\n") .
3842-
$cgi->input({-name=>"a", -value=>"search", -type=>"hidden"}) . "\n" .
3843-
$cgi->input({-name=>"h", -value=>$search_hash, -type=>"hidden"}) . "\n" .
3844-
$cgi->popup_menu(-name => 'st', -default => 'commit',
3845-
-values => ['commit', 'grep', 'author', 'committer', 'pickaxe']) .
3846-
$cgi->sup($cgi->a({-href => href(action=>"search_help")}, "?")) .
3847-
" search:\n",
3848-
$cgi->textfield(-name => "s", -value => $searchtext) . "\n" .
3849-
"<span title=\"Extended regular expression\">" .
3850-
$cgi->checkbox(-name => 'sr', -value => 1, -label => 're',
3851-
-checked => $search_use_regexp) .
3852-
"</span>" .
3853-
"</div>" .
3854-
$cgi->end_form() . "\n";
3872+
print_search_form();
38553873
}
38563874
}
38573875

0 commit comments

Comments
 (0)