Moved the postscan hook to run on the raw html of a page, before the template is...
authorJoey Hess <joey@gnu.kitenet.net>
Sun, 8 Nov 2009 18:48:07 +0000 (13:48 -0500)
committerJoey Hess <joey@gnu.kitenet.net>
Sun, 8 Nov 2009 18:48:07 +0000 (13:48 -0500)
IkiWiki/Render.pm
debian/changelog
doc/bugs/Search_summary_includes_text_from_navigational_elements.mdwn
doc/plugins/write.mdwn

index 0889fed6218aa79e551b3656c2a93ba9607c9d69..ab3a71671455874a0b8032bfd8d09f5b362339aa 100644 (file)
@@ -61,6 +61,10 @@ sub backlinks ($) {
 sub genpage ($$) {
        my $page=shift;
        my $content=shift;
+       
+       run_hooks(postscan => sub {
+               shift->(page => $page, content => $content);
+       });
 
        my $templatefile;
        run_hooks(templatefile => sub {
@@ -130,10 +134,6 @@ sub genpage ($$) {
        
        $content=$template->output;
        
-       run_hooks(postscan => sub {
-               shift->(page => $page, content => $content);
-       });
-
        run_hooks(format => sub {
                $content=shift->(
                        page => $page,
index 0026d9ddc8a5befb0824523efda4d312019ec812..6a5ae30abdd526a3c9543e22ba19a17cf40e080a 100644 (file)
@@ -4,6 +4,10 @@ ikiwiki (3.20091032) UNRELEASED; urgency=low
     references.
   * underlay: Avoid crashing if lists of underlays (or template
     directories) are not configured.
+  * Moved the postscan hook to run on the raw html of a page, before
+    the template is filled out. This improves the search plugin's indexing,
+    since it will not include navigational elements from the page template
+    or sidebar.
 
  -- Joey Hess <joeyh@debian.org>  Fri, 06 Nov 2009 12:04:29 -0500
 
index 874b9ffeb531749834af682f46d12c7d067e2f5c..b774c4531cbf4adab0252f101de36445bdf95526 100644 (file)
@@ -7,3 +7,16 @@ A way to name some CSS ids that should be removed in search results within the i
 http://leaf.dragonflybsd.org/mailarchive/users/2009-11/msg00077.html
 
 (bin attachment on that page is actually a .diff.)
+
+> So I was looking at this and I relized that while the search plugin used
+> to use the format hook, and so there was no way to avoid it seeing all
+> the gunk around the page body, it was changed a while ago for different
+> reasons to use its own hook, postscan. So there's really no reason not
+> to move postscan so it runs before said gunk is added to the page.
+> (Aside from a small risk of breaking other third-party plugins that
+> somehow use postscan.)
+> 
+> I've implemented that in git, and it drops the navigation elements nicely.
+> It's perhaps less general than allowing specific divs to be skipped from
+> search, but it seems good enough. Please thank the dragonfly guys for their
+> work on this. [[done]] --[[Joey]] 
index c72418c3c24eefe06662497a1197c33b5c0d4fab..2f179d46fd589f5902d26a4c6fea78f4707d4668 100644 (file)
@@ -201,6 +201,17 @@ like `Makefile` that have no extension.
 If `hook` is passed an optional "longname" parameter, this value is used
 when prompting a user to choose a page type on the edit page form.
 
+### postscan
+
+       hook(type => "postscan", id => "foo", call => \&postscan);
+
+This hook is called once the page has been converted to html (but before
+the generated html is put in a template). The most common use is to
+update search indexes. Added in ikiwiki 2.54.
+
+The function is passed named parameters "page" and "content". Its return
+value is ignored.
+
 ### pagetemplate
 
        hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
@@ -237,17 +248,6 @@ modify the body of a page after it has been fully converted to html.
 The function is passed named parameters: "page", "destpage", and "content",
 and should return the sanitized content.
 
-### postscan
-
-       hook(type => "postscan", id => "foo", call => \&postscan);
-
-This hook is called once the full page body is available (but before the
-format hook). The most common use is to update search indexes. Added in
-ikiwiki 2.54.
-
-The function is passed named parameters "page" and "content". Its return
-value is ignored.
-
 ### format
 
        hook(type => "format", id => "foo", call => \&format);