From dea23a1031b55dbc408e9f99c761fd667331cccd Mon Sep 17 00:00:00 2001 From: joey Date: Thu, 27 Jul 2006 23:41:58 +0000 Subject: * 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. --- IkiWiki/Plugin/brokenlinks.pm | 4 ++-- IkiWiki/Plugin/inline.pm | 14 +++++++++----- IkiWiki/Plugin/meta.pm | 7 ++++--- IkiWiki/Plugin/orphans.pm | 2 +- IkiWiki/Plugin/search.pm | 7 ++++--- IkiWiki/Plugin/skeleton.pm | 7 ++++--- IkiWiki/Plugin/tag.pm | 10 ++++++---- IkiWiki/Render.pm | 23 ++++++++++++++++------- 8 files changed, 46 insertions(+), 28 deletions(-) (limited to 'IkiWiki') diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm index deee58222..3406f9919 100644 --- a/IkiWiki/Plugin/brokenlinks.pm +++ b/IkiWiki/Plugin/brokenlinks.pm @@ -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); } } } diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 749e39fb6..06c4a3737 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -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}; } diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index d4b4e5db5..5691ff6a9 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -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"); diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm index 12b9d2e52..ac4b77527 100644 --- a/IkiWiki/Plugin/orphans.pm +++ b/IkiWiki/Plugin/orphans.pm @@ -40,7 +40,7 @@ sub preprocess (@) { #{{{ } return "All pages are linked to by other pages." unless @orphans; - return "\n"; + return "\n"; } # }}} 1 diff --git a/IkiWiki/Plugin/search.pm b/IkiWiki/Plugin/search.pm index 8931e3fd4..c79d40469 100644 --- a/IkiWiki/Plugin/search.pm +++ b/IkiWiki/Plugin/search.pm @@ -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")) { diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm index 306f54415..acbc88994 100644 --- a/IkiWiki/Plugin/skeleton.pm +++ b/IkiWiki/Plugin/skeleton.pm @@ -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"); } # }}} diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm index a6eddb019..f1f3b77f5 100644 --- a/IkiWiki/Plugin/tag.pm +++ b/IkiWiki/Plugin/tag.pm @@ -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"); } # }}} diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 690945c49..02dbd34bd 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -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); -- cgit v1.2.3