summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2008-10-10 00:13:19 +0200
committerJoey Hess <joey@kodama.kitenet.net>2008-10-10 17:05:02 -0400
commitf9957d11ed3674b5c2ff7ba7c234bed7cb036b5f (patch)
treeab5a3f746b7584c5bf5389d5c95fddd0a42fec12 /IkiWiki/Plugin
parent61b37a3d73d7777e32fcc6aaa45699581494969d (diff)
google plugin: Use google.com to search the local site.
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.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/google.pm49
1 files changed, 49 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/google.pm b/IkiWiki/Plugin/google.pm
new file mode 100644
index 000000000..be07ca2be
--- /dev/null
+++ b/IkiWiki/Plugin/google.pm
@@ -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