add cgitemplate

cgitemplate is a modified misctemplate that takes an optional cgi object
and uses it to set the baseurl, and also optionally the forcebaseurl,
if a page is provided.

If no cgi object is provided, it will fall back to using $config{url}.
I expect this will only be needed in exceptional cases where
that doesn't much matter, such as cgierror().

showform uses cgitemplate, so there is no more need for showform_preview.
master
Joey Hess 2011-01-05 16:58:27 -04:00
parent ea734d451c
commit 4a6ac6b485
3 changed files with 40 additions and 18 deletions

View File

@ -46,23 +46,45 @@ sub showform ($$$$;@) {
my $cgi=shift; my $cgi=shift;
printheader($session); printheader($session);
print misctemplate($form->title, $form->render(submit => $buttons), @_); print cgitemplate($cgi, $form->title,
$form->render(submit => $buttons), @_);
} }
# Like showform, but the base url will be set to allow edit previews sub cgitemplate ($$$;@) {
# that use links relative to the specified page.
sub showform_preview ($$$$;@) {
my $form=shift;
my $buttons=shift;
my $session=shift;
my $cgi=shift; my $cgi=shift;
my $title=shift;
my $content=shift;
my %params=@_; my %params=@_;
# The base url needs to be a full URL, and urlto may return a path. my $template=template("page.tmpl");
my $baseurl = urlabs(urlto($params{page}), $cgi->url);
showform($form, $buttons, $session, $cgi, @_, my $topurl = defined $cgi ? $cgi->url : $config{url};
forcebaseurl => $baseurl);
my $page="";
if (exists $params{page}) {
$page=delete $params{page};
$params{forcebaseurl}=urlabs(urlto($page), $topurl);
}
run_hooks(pagetemplate => sub {
shift->(
page => $page,
destpage => $page,
template => $template,
);
});
templateactions($template, "");
$template->param(
dynamic => 1,
title => $title,
wikiname => $config{wikiname},
content => $content,
baseurl => urlabs(urlto(undef), $topurl),
html5 => $config{html5},
%params,
);
return $template->output;
} }
sub redirect ($$) { sub redirect ($$) {
@ -439,7 +461,7 @@ sub cgierror ($) {
my $message=shift; my $message=shift;
print "Content-type: text/html\n\n"; print "Content-type: text/html\n\n";
print misctemplate(gettext("Error"), print cgitemplate(undef, gettext("Error"),
"<p class=\"error\">".gettext("Error").": $message</p>"); "<p class=\"error\">".gettext("Error").": $message</p>");
die $@; die $@;
} }

View File

@ -554,7 +554,7 @@ sub editcomment ($$) {
} }
else { else {
IkiWiki::showform_preview($form, \@buttons, $session, $cgi, IkiWiki::showform($form, \@buttons, $session, $cgi,
page => $page); page => $page);
} }

View File

@ -312,7 +312,7 @@ sub cgi_editpage ($$) {
$form->title(sprintf(gettext("editing %s"), pagetitle(basename($page)))); $form->title(sprintf(gettext("editing %s"), pagetitle(basename($page))));
} }
showform_preview($form, \@buttons, $session, $q, page => $page); showform($form, \@buttons, $session, $q, page => $page);
} }
else { else {
# save page # save page
@ -329,7 +329,7 @@ sub cgi_editpage ($$) {
$form->field(name => "page", type => 'hidden'); $form->field(name => "page", type => 'hidden');
$form->field(name => "type", type => 'hidden'); $form->field(name => "type", type => 'hidden');
$form->title(sprintf(gettext("editing %s"), $page)); $form->title(sprintf(gettext("editing %s"), $page));
showform_preview($form, \@buttons, $session, $q, showform($form, \@buttons, $session, $q,
page => $page); page => $page);
exit; exit;
} }
@ -344,7 +344,7 @@ sub cgi_editpage ($$) {
value => readfile("$config{srcdir}/$file"). value => readfile("$config{srcdir}/$file").
"\n\n\n".$form->field("editcontent"), "\n\n\n".$form->field("editcontent"),
force => 1); force => 1);
showform_preview($form, \@buttons, $session, $q, showform($form, \@buttons, $session, $q,
page => $page); page => $page);
exit; exit;
} }
@ -385,7 +385,7 @@ sub cgi_editpage ($$) {
$form->field(name => "page", type => 'hidden'); $form->field(name => "page", type => 'hidden');
$form->field(name => "type", type => 'hidden'); $form->field(name => "type", type => 'hidden');
$form->title(sprintf(gettext("editing %s"), $page)); $form->title(sprintf(gettext("editing %s"), $page));
showform_preview($form, \@buttons, $session, $q, showform($form, \@buttons, $session, $q,
page => $page); page => $page);
exit; exit;
} }
@ -427,7 +427,7 @@ sub cgi_editpage ($$) {
$form->field(name => "page", type => 'hidden'); $form->field(name => "page", type => 'hidden');
$form->field(name => "type", type => 'hidden'); $form->field(name => "type", type => 'hidden');
$form->title(sprintf(gettext("editing %s"), $page)); $form->title(sprintf(gettext("editing %s"), $page));
showform_preview($form, \@buttons, $session, $q, showform($form, \@buttons, $session, $q,
page => $page); page => $page);
} }
else { else {