google plugin: Use google.com to search the local site.
authorPeter Simons <simons@cryp.to>
Thu, 9 Oct 2008 22:13:19 +0000 (00:13 +0200)
committerJoey Hess <joey@kodama.kitenet.net>
Fri, 10 Oct 2008 21:05:02 +0000 (17:05 -0400)
Google allows has a nice feature, sitesearch, that allows anyone to
limit search results to a specific site. Obviously, this feature can be
used to provide a search engine for the local ikiwiki site without the
need to install any additional software. Just enable the 'google' plugin
and make sure that --url uses the proper hostname. Thanks to Joey for
helping to get the Perl implementation right.

IkiWiki/Plugin/google.pm [new file with mode: 0644]
templates/googleform.tmpl [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/google.pm b/IkiWiki/Plugin/google.pm
new file mode 100644 (file)
index 0000000..be07ca2
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::google;
+
+use warnings;
+use strict;
+use IkiWiki 2.00;
+use URI;
+
+sub import { #{{{
+       hook(type => "getsetup", id => "google", call => \&getsetup);
+       hook(type => "checkconfig", id => "google", call => \&checkconfig);
+       hook(type => "pagetemplate", id => "google", call => \&pagetemplate);
+} # }}}
+
+sub getsetup () { #{{{
+       return
+               plugin => {
+                       safe => 1,
+                       rebuild => 1,
+               },
+} #}}}
+
+sub checkconfig () { #{{{
+       foreach my $required (qw(url)) {
+               if (! length $config{$required}) {
+                       error(sprintf(gettext("Must specify %s when using the google search plugin"), $required));
+               }
+       }
+} #}}}
+
+my $form;
+sub pagetemplate (@) { #{{{
+       my %params=@_;
+       my $page=$params{page};
+       my $template=$params{template};
+
+       # Add search box to page header.
+       if ($template->query(name => "searchform")) {
+               if (! defined $form) {
+                       my $searchform = template("googleform.tmpl", blind_cache => 1);
+                       $searchform->param(sitefqdn => URI->new($config{url})->host);
+                       $form=$searchform->output;
+               }
+
+               $template->param(searchform => $form);
+       }
+} #}}}
+
+1
diff --git a/templates/googleform.tmpl b/templates/googleform.tmpl
new file mode 100644 (file)
index 0000000..523cff0
--- /dev/null
@@ -0,0 +1,6 @@
+<form method="get" action="http://www.google.com/search" id="searchform">
+ <div>
+  <input name="sitesearch" value="<TMPL_VAR SITEFQDN>" type="hidden">
+  <input name="q" value="" id="searchbox" size="16" maxlength="255" type="text">
+ </div>
+</form>