From 66b46576ec097b9f10b45d4b1de18bb214cd5bd5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 8 Nov 2009 13:48:07 -0500 Subject: [PATCH] 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. --- IkiWiki/Render.pm | 8 +++---- debian/changelog | 4 ++++ ...ludes_text_from_navigational_elements.mdwn | 13 +++++++++++ doc/plugins/write.mdwn | 22 +++++++++---------- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 0889fed62..ab3a71671 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -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, diff --git a/debian/changelog b/debian/changelog index 0026d9ddc..6a5ae30ab 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Fri, 06 Nov 2009 12:04:29 -0500 diff --git a/doc/bugs/Search_summary_includes_text_from_navigational_elements.mdwn b/doc/bugs/Search_summary_includes_text_from_navigational_elements.mdwn index 874b9ffeb..b774c4531 100644 --- a/doc/bugs/Search_summary_includes_text_from_navigational_elements.mdwn +++ b/doc/bugs/Search_summary_includes_text_from_navigational_elements.mdwn @@ -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]] diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index c72418c3c..2f179d46f 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -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); -- 2.44.0