* 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
parent
8d2c598042
commit
dea23a1031
|
@ -27,9 +27,9 @@ sub preprocess (@) { #{{{
|
||||||
my $bestlink=IkiWiki::bestlink($page, $link);
|
my $bestlink=IkiWiki::bestlink($page, $link);
|
||||||
next if length $bestlink;
|
next if length $bestlink;
|
||||||
push @broken,
|
push @broken,
|
||||||
IkiWiki::htmllink($page, $page, $link, 1).
|
IkiWiki::htmllink($page, $params{destpage}, $link, 1).
|
||||||
" in ".
|
" in ".
|
||||||
IkiWiki::htmllink($params{page}, $params{page}, $page, 1);
|
IkiWiki::htmllink($params{page}, $params{destpage}, $page, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,13 +77,17 @@ sub preprocess_inline (@) { #{{{
|
||||||
|
|
||||||
foreach my $page (@list) {
|
foreach my $page (@list) {
|
||||||
$template->param(pagelink => htmllink($params{page}, $params{page}, $page));
|
$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";
|
if $params{archive} eq "no";
|
||||||
$template->param(ctime => displaytime($pagectime{$page}));
|
$template->param(ctime => displaytime($pagectime{$page}));
|
||||||
|
|
||||||
if (exists $hooks{pagetemplate}) {
|
if (exists $hooks{pagetemplate}) {
|
||||||
foreach my $id (keys %{$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 ($$) { #{{{
|
sub get_inline_content ($$) { #{{{
|
||||||
my $parentpage=shift;
|
|
||||||
my $page=shift;
|
my $page=shift;
|
||||||
|
my $destpage=shift;
|
||||||
|
|
||||||
my $file=$pagesources{$page};
|
my $file=$pagesources{$page};
|
||||||
my $type=pagetype($file);
|
my $type=pagetype($file);
|
||||||
if (defined $type) {
|
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 {
|
else {
|
||||||
return "";
|
return "";
|
||||||
|
@ -156,7 +160,7 @@ sub genrss ($@) { #{{{
|
||||||
itemtitle => pagetitle(basename($p)),
|
itemtitle => pagetitle(basename($p)),
|
||||||
itemurl => "$config{url}/$renderedfiles{$p}",
|
itemurl => "$config{url}/$renderedfiles{$p}",
|
||||||
itempubdate => date_822($pagectime{$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};
|
} if exists $renderedfiles{$p};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,10 @@ sub preprocess (@) { #{{{
|
||||||
return "";
|
return "";
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
sub pagetemplate ($$) { #{{{
|
sub pagetemplate (@) { #{{{
|
||||||
my $page=shift;
|
my %params=@_;
|
||||||
my $template=shift;
|
my $page=$params{page};
|
||||||
|
my $template=$params{template};
|
||||||
|
|
||||||
$template->param(meta => $meta{$page})
|
$template->param(meta => $meta{$page})
|
||||||
if exists $meta{$page} && $template->query(name => "meta");
|
if exists $meta{$page} && $template->query(name => "meta");
|
||||||
|
|
|
@ -40,7 +40,7 @@ sub preprocess (@) { #{{{
|
||||||
}
|
}
|
||||||
|
|
||||||
return "All pages are linked to by other pages." unless @orphans;
|
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
|
1
|
||||||
|
|
|
@ -27,9 +27,10 @@ sub checkconfig () { #{{{
|
||||||
}
|
}
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub pagetemplate ($$) { #{{{
|
sub pagetemplate (@) { #{{{
|
||||||
my $page=shift;
|
my %params=@_;
|
||||||
my $template=shift;
|
my $page=$params{page};
|
||||||
|
my $template=$params{template};
|
||||||
|
|
||||||
# Add search box to page header.
|
# Add search box to page header.
|
||||||
if ($template->query(name => "searchform")) {
|
if ($template->query(name => "searchform")) {
|
||||||
|
|
|
@ -63,9 +63,10 @@ sub sanitize ($) { #{{{
|
||||||
return $content;
|
return $content;
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
sub pagetemplate ($$) { #{{{
|
sub pagetemplate (@) { #{{{
|
||||||
my $page=shift;
|
my %params=@_;
|
||||||
my $template=shift;
|
my $page=$params{page};
|
||||||
|
my $template=$params{template};
|
||||||
|
|
||||||
IkiWiki::debug("skeleton plugin running as a pagetemplate hook");
|
IkiWiki::debug("skeleton plugin running as a pagetemplate hook");
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
|
@ -33,12 +33,14 @@ sub preprocess (@) { #{{{
|
||||||
return "";
|
return "";
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
sub pagetemplate ($$) { #{{{
|
sub pagetemplate (@) { #{{{
|
||||||
my $page=shift;
|
my %params=@_;
|
||||||
my $template=shift;
|
my $page=$params{page};
|
||||||
|
my $destpage=$params{destpage};
|
||||||
|
my $template=$params{template};
|
||||||
|
|
||||||
$template->param(tags => join(', ',
|
$template->param(tags => join(', ',
|
||||||
map { IkiWiki::htmllink($page, $page, $_) }
|
map { IkiWiki::htmllink($page, $destpage, $_) }
|
||||||
@{$tags{$page}}))
|
@{$tags{$page}}))
|
||||||
if exists $tags{$page} && $template->query(name => "tags");
|
if exists $tags{$page} && $template->query(name => "tags");
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
|
@ -8,8 +8,8 @@ use IkiWiki;
|
||||||
use Encode;
|
use Encode;
|
||||||
|
|
||||||
sub linkify ($$$) { #{{{
|
sub linkify ($$$) { #{{{
|
||||||
my $lpage=shift;
|
my $lpage=shift; # the page containing the links
|
||||||
my $page=shift;
|
my $page=shift; # the page the link will end up on (different for inline)
|
||||||
my $content=shift;
|
my $content=shift;
|
||||||
|
|
||||||
$content =~ s{(\\?)$config{wiki_link_regexp}}{
|
$content =~ s{(\\?)$config{wiki_link_regexp}}{
|
||||||
|
@ -86,8 +86,9 @@ sub parentlinks ($) { #{{{
|
||||||
return @ret;
|
return @ret;
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub preprocess ($$;$) { #{{{
|
sub preprocess ($$$;$) { #{{{
|
||||||
my $page=shift;
|
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 $content=shift;
|
||||||
my $onlystrip=shift || 0; # strip directives without processing
|
my $onlystrip=shift || 0; # strip directives without processing
|
||||||
|
|
||||||
|
@ -113,7 +114,11 @@ sub preprocess ($$;$) { #{{{
|
||||||
push @params, (defined $2 ? $2 : $3), '';
|
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 {
|
else {
|
||||||
return "[[$command not processed]]";
|
return "[[$command not processed]]";
|
||||||
|
@ -203,7 +208,11 @@ sub genpage ($$$) { #{{{
|
||||||
|
|
||||||
if (exists $hooks{pagetemplate}) {
|
if (exists $hooks{pagetemplate}) {
|
||||||
foreach my $id (keys %{$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)];
|
$links{$page}=[findlinks($page, $content)];
|
||||||
|
|
||||||
$content=linkify($page, $page, $content);
|
$content=linkify($page, $page, $content);
|
||||||
$content=preprocess($page, $content);
|
$content=preprocess($page, $page, $content);
|
||||||
$content=htmlize($type, $content);
|
$content=htmlize($type, $content);
|
||||||
|
|
||||||
check_overwrite("$config{destdir}/".htmlpage($page), $page);
|
check_overwrite("$config{destdir}/".htmlpage($page), $page);
|
||||||
|
|
|
@ -12,6 +12,13 @@ ikiwiki (1.11) UNRELEASED; urgency=low
|
||||||
list their tags.
|
list their tags.
|
||||||
* Make all plugins with pagetemplate hooks check that variables exist
|
* Make all plugins with pagetemplate hooks check that variables exist
|
||||||
on the template before setting them.
|
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
|
-- Joey Hess <joeyh@debian.org> Thu, 27 Jul 2006 17:03:09 -0400
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,10 @@ the preprocessor directive.
|
||||||
Each time the directive is processed, the referenced function (`preprocess`
|
Each time the directive is processed, the referenced function (`preprocess`
|
||||||
in the example above) is called, and is passed named parameters. A "page"
|
in the example above) is called, and is passed named parameters. A "page"
|
||||||
parameter gives the name of the page that embedded the preprocessor
|
parameter gives the name of the page that embedded the preprocessor
|
||||||
directive. All parameters included in the directive are included as named
|
directive, while a "destpage" parameter gices the name of the page the
|
||||||
parameters as well. Whatever the function returns goes onto the page in
|
content is going to (different for inlined pages). All parameters included
|
||||||
place of the directive.
|
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
|
## Error handing
|
||||||
|
|
||||||
|
@ -94,9 +95,11 @@ languages to ikiwiki.
|
||||||
IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
|
IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
|
||||||
|
|
||||||
Each time a page is rendered, a [[template|templates]] is filled out.
|
Each time a page is rendered, a [[template|templates]] is filled out.
|
||||||
This hook allows modifying that template. The function is passed the name
|
This hook allows modifying that template. The function is passed named
|
||||||
of the page, and a `HTML::Template` object that is the template that will
|
parameters. The "page" and "destpage" parameters are the same as for a
|
||||||
be used to generate the page. It can manipulate that template object.
|
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
|
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,
|
a new custom parameter to the template. Note that in order to be robust,
|
||||||
|
|
|
@ -14,7 +14,7 @@ Released 29 April 2006.
|
||||||
|
|
||||||
* Unit test suite (with tests of at least core stuff like
|
* Unit test suite (with tests of at least core stuff like
|
||||||
[[GlobList]]). (status: exists, could of course use more tests)
|
[[GlobList]]). (status: exists, could of course use more tests)
|
||||||
* [[Plugins]] _(status: done)_
|
* [[Plugins]] _(status: done, interface still not quite stable)_
|
||||||
* [[Tags]] _(status: partial)_
|
* [[Tags]] _(status: partial)_
|
||||||
* Should have fully working [[todo/utf8]] support. _(status: fair)_
|
* Should have fully working [[todo/utf8]] support. _(status: fair)_
|
||||||
* [[Optimised_rendering|todo/optimisations]] if possible. Deal with other
|
* [[Optimised_rendering|todo/optimisations]] if possible. Deal with other
|
||||||
|
|
Loading…
Reference in New Issue