* Switch pagetemplate hooks to using named parameters.

* Pass a "destpage" parameter to preprocessor and pagetemplate hooks.
  This will be the page that a source page will be part of, which is
  different than the source page for inlined pages.
* Audited all plugins to endure they pass page, destpage to htmllink
  appropriatly. This means inlining of various plugins will not work
  properly, with correct links generated.
master
joey 2006-07-27 23:41:58 +00:00
parent 8d2c598042
commit dea23a1031
11 changed files with 63 additions and 35 deletions

View File

@ -27,9 +27,9 @@ sub preprocess (@) { #{{{
my $bestlink=IkiWiki::bestlink($page, $link);
next if length $bestlink;
push @broken,
IkiWiki::htmllink($page, $page, $link, 1).
IkiWiki::htmllink($page, $params{destpage}, $link, 1).
" in ".
IkiWiki::htmllink($params{page}, $params{page}, $page, 1);
IkiWiki::htmllink($params{page}, $params{destpage}, $page, 1);
}
}
}

View File

@ -77,13 +77,17 @@ sub preprocess_inline (@) { #{{{
foreach my $page (@list) {
$template->param(pagelink => htmllink($params{page}, $params{page}, $page));
$template->param(content => get_inline_content($params{page}, $page))
$template->param(content => get_inline_content($page, $params{page}))
if $params{archive} eq "no";
$template->param(ctime => displaytime($pagectime{$page}));
if (exists $hooks{pagetemplate}) {
foreach my $id (keys %{$hooks{pagetemplate}}) {
$hooks{pagetemplate}{$id}{call}->($page, $template);
$hooks{pagetemplate}{$id}{call}->(
page => $page,
destpage => $params{page},
template => $template,
);
}
}
@ -104,13 +108,13 @@ sub preprocess_inline (@) { #{{{
} #}}}
sub get_inline_content ($$) { #{{{
my $parentpage=shift;
my $page=shift;
my $destpage=shift;
my $file=$pagesources{$page};
my $type=pagetype($file);
if (defined $type) {
return htmlize($type, preprocess($page, linkify($page, $parentpage, readfile(srcfile($file))), 1));
return htmlize($type, preprocess($page, $destpage, linkify($page, $destpage, readfile(srcfile($file))), 1));
}
else {
return "";
@ -156,7 +160,7 @@ sub genrss ($@) { #{{{
itemtitle => pagetitle(basename($p)),
itemurl => "$config{url}/$renderedfiles{$p}",
itempubdate => date_822($pagectime{$p}),
itemcontent => absolute_urls(get_inline_content($page, $p), $url),
itemcontent => absolute_urls(get_inline_content($p, $page), $url),
} if exists $renderedfiles{$p};
}

View File

@ -52,9 +52,10 @@ sub preprocess (@) { #{{{
return "";
} # }}}
sub pagetemplate ($$) { #{{{
my $page=shift;
my $template=shift;
sub pagetemplate (@) { #{{{
my %params=@_;
my $page=$params{page};
my $template=$params{template};
$template->param(meta => $meta{$page})
if exists $meta{$page} && $template->query(name => "meta");

View File

@ -40,7 +40,7 @@ sub preprocess (@) { #{{{
}
return "All pages are linked to by other pages." unless @orphans;
return "<ul>\n".join("\n", map { "<li>".IkiWiki::htmllink($params{page}, $params{page}, $_, 1)."</li>" } sort @orphans)."</ul>\n";
return "<ul>\n".join("\n", map { "<li>".IkiWiki::htmllink($params{page}, $params{destpage}, $_, 1)."</li>" } sort @orphans)."</ul>\n";
} # }}}
1

View File

@ -27,9 +27,10 @@ sub checkconfig () { #{{{
}
} #}}}
sub pagetemplate ($$) { #{{{
my $page=shift;
my $template=shift;
sub pagetemplate (@) { #{{{
my %params=@_;
my $page=$params{page};
my $template=$params{template};
# Add search box to page header.
if ($template->query(name => "searchform")) {

View File

@ -63,9 +63,10 @@ sub sanitize ($) { #{{{
return $content;
} # }}}
sub pagetemplate ($$) { #{{{
my $page=shift;
my $template=shift;
sub pagetemplate (@) { #{{{
my %params=@_;
my $page=$params{page};
my $template=$params{template};
IkiWiki::debug("skeleton plugin running as a pagetemplate hook");
} # }}}

View File

@ -33,12 +33,14 @@ sub preprocess (@) { #{{{
return "";
} # }}}
sub pagetemplate ($$) { #{{{
my $page=shift;
my $template=shift;
sub pagetemplate (@) { #{{{
my %params=@_;
my $page=$params{page};
my $destpage=$params{destpage};
my $template=$params{template};
$template->param(tags => join(', ',
map { IkiWiki::htmllink($page, $page, $_) }
map { IkiWiki::htmllink($page, $destpage, $_) }
@{$tags{$page}}))
if exists $tags{$page} && $template->query(name => "tags");
} # }}}

View File

@ -8,8 +8,8 @@ use IkiWiki;
use Encode;
sub linkify ($$$) { #{{{
my $lpage=shift;
my $page=shift;
my $lpage=shift; # the page containing the links
my $page=shift; # the page the link will end up on (different for inline)
my $content=shift;
$content =~ s{(\\?)$config{wiki_link_regexp}}{
@ -86,8 +86,9 @@ sub parentlinks ($) { #{{{
return @ret;
} #}}}
sub preprocess ($$;$) { #{{{
my $page=shift;
sub preprocess ($$$;$) { #{{{
my $page=shift; # the page the data comes from
my $destpage=shift; # the page the data will appear in (different for inline)
my $content=shift;
my $onlystrip=shift || 0; # strip directives without processing
@ -113,7 +114,11 @@ sub preprocess ($$;$) { #{{{
push @params, (defined $2 ? $2 : $3), '';
}
}
return $hooks{preprocess}{$command}{call}->(@params, page => $page);
return $hooks{preprocess}{$command}{call}->(
@params,
page => $page,
destpage => $destpage,
);
}
else {
return "[[$command not processed]]";
@ -203,7 +208,11 @@ sub genpage ($$$) { #{{{
if (exists $hooks{pagetemplate}) {
foreach my $id (keys %{$hooks{pagetemplate}}) {
$hooks{pagetemplate}{$id}{call}->($page, $template);
$hooks{pagetemplate}{$id}{call}->(
page => $page,
destpage => $page,
template => $template,
);
}
}
@ -286,7 +295,7 @@ sub render ($) { #{{{
$links{$page}=[findlinks($page, $content)];
$content=linkify($page, $page, $content);
$content=preprocess($page, $content);
$content=preprocess($page, $page, $content);
$content=htmlize($type, $content);
check_overwrite("$config{destdir}/".htmlpage($page), $page);

7
debian/changelog vendored
View File

@ -12,6 +12,13 @@ ikiwiki (1.11) UNRELEASED; urgency=low
list their tags.
* Make all plugins with pagetemplate hooks check that variables exist
on the template before setting them.
* Switch pagetemplate hooks to using named parameters.
* Pass a "destpage" parameter to preprocessor and pagetemplate hooks.
This will be the page that a source page will be part of, which is
different than the source page for inlined pages.
* Audited all plugins to endure they pass page, destpage to htmllink
appropriatly. This means inlining of various plugins will not work
properly, with correct links generated.
-- Joey Hess <joeyh@debian.org> Thu, 27 Jul 2006 17:03:09 -0400

View File

@ -38,9 +38,10 @@ the preprocessor directive.
Each time the directive is processed, the referenced function (`preprocess`
in the example above) is called, and is passed named parameters. A "page"
parameter gives the name of the page that embedded the preprocessor
directive. All parameters included in the directive are included as named
parameters as well. Whatever the function returns goes onto the page in
place of the directive.
directive, while a "destpage" parameter gices the name of the page the
content is going to (different for inlined pages). All parameters included
in the directive are included as named parameters as well. Whatever the
function returns goes onto the page in place of the directive.
## Error handing
@ -94,9 +95,11 @@ languages to ikiwiki.
IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
Each time a page is rendered, a [[template|templates]] is filled out.
This hook allows modifying that template. The function is passed the name
of the page, and a `HTML::Template` object that is the template that will
be used to generate the page. It can manipulate that template object.
This hook allows modifying that template. The function is passed named
parameters. The "page" and "destpage" parameters are the same as for a
preprocess hook. The "template" parameter is a `HTML::Template` object that
is the template that will be used to generate the page. The function
can manipulate that template object.
The most common thing to do is probably to call $template->param() to add
a new custom parameter to the template. Note that in order to be robust,

View File

@ -14,7 +14,7 @@ Released 29 April 2006.
* Unit test suite (with tests of at least core stuff like
[[GlobList]]). (status: exists, could of course use more tests)
* [[Plugins]] _(status: done)_
* [[Plugins]] _(status: done, interface still not quite stable)_
* [[Tags]] _(status: partial)_
* Should have fully working [[todo/utf8]] support. _(status: fair)_
* [[Optimised_rendering|todo/optimisations]] if possible. Deal with other