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;
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
# that use links relative to the specified page.
sub showform_preview ($$$$;@) {
my $form=shift;
my $buttons=shift;
my $session=shift;
sub cgitemplate ($$$;@) {
my $cgi=shift;
my $title=shift;
my $content=shift;
my %params=@_;
my $template=template("page.tmpl");
# The base url needs to be a full URL, and urlto may return a path.
my $baseurl = urlabs(urlto($params{page}), $cgi->url);
my $topurl = defined $cgi ? $cgi->url : $config{url};
showform($form, $buttons, $session, $cgi, @_,
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 ($$) {
@ -439,7 +461,7 @@ sub cgierror ($) {
my $message=shift;
print "Content-type: text/html\n\n";
print misctemplate(gettext("Error"),
print cgitemplate(undef, gettext("Error"),
"<p class=\"error\">".gettext("Error").": $message</p>");
die $@;
}

View File

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

View File

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