* Switch pagetemplate hooks to using named parameters.
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Thu, 27 Jul 2006 23:41:58 +0000 (23:41 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Thu, 27 Jul 2006 23:41:58 +0000 (23:41 +0000)
* 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
IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/meta.pm
IkiWiki/Plugin/orphans.pm
IkiWiki/Plugin/search.pm
IkiWiki/Plugin/skeleton.pm
IkiWiki/Plugin/tag.pm
IkiWiki/Render.pm
debian/changelog
doc/plugins/write.mdwn
doc/roadmap.mdwn

index deee582220799b70c8f0b87e74859a71c9eb6783..3406f991978d1e707c8f33c46cdd20db419447ab 100644 (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);
                        }
                }
        }
index 749e39fb63524b1065a8bcc04446e5b0497be702..06c4a3737a7d935a5c5a86e54e8067d15d21bd30 100644 (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};
        }
 
index d4b4e5db5f09ceb919228ce41f5ac253331d2c2f..5691ff6a91e8fdba1a468acfe57ee74423b40e3a 100644 (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");
index 12b9d2e5236a1512dcb53f1a01b9d097b29d93c0..ac4b775273c6c9a0624ec79b6113c70551779837 100644 (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
index 8931e3fd4119edf69d859f70b829807c78269ff5..c79d4046954535ce340169cf9169b89c1e75ba6a 100644 (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")) {
index 306f54415c6560f62562f4ac50f91961540e8047..acbc88994048e31e6020f8f11bf8cba98711a000 100644 (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");
 } # }}}
index a6eddb019a51606bd6d92fa2927b4a5861d1b3ae..f1f3b77f5fc6ea8566607279ba3f6c6d4104e1b3 100644 (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");
 } # }}}
index 690945c49f89f91668763ebf5dfc32d5810b2a9a..02dbd34bd53dd48183c461325b388bc42a21a92f 100644 (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);
index f4fe4723842d36dd23070113acff2677c1ab8664..282fdf249bfadbb0fa0041b5f807e7cfc00cd59d 100644 (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
 
index abad875685e31b21722bc6415b4c505471ac357a..16b6e9d8ed7dd57f06df7e9dfca6ef2211d7807a 100644 (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,
index e2b74e4bec8111a77a5e6f311ff984fe018b3ed2..05ee48dff272cf801a31074aff46a6348dae3f1f 100644 (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