Add %wikistate, which is like %pagestate except not specific to a given page, and...
authorJoey Hess <joey@kodama.kitenet.net>
Sat, 27 Sep 2008 20:45:27 +0000 (16:45 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sat, 27 Sep 2008 20:45:27 +0000 (16:45 -0400)
IkiWiki.pm
debian/changelog
doc/plugins/write.mdwn
po/ikiwiki.pot

index 9a81c7da4caaf635cfe111afa807ebea30401b76..e303c8f4fc556b65037ee5549acb367a4de3b45d 100644 (file)
@@ -12,16 +12,16 @@ use Storable;
 use open qw{:utf8 :std};
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
-           %pagestate %renderedfiles %oldrenderedfiles %pagesources
-           %destsources %depends %hooks %forcerebuild $gettext_obj
-           %loaded_plugins};
+           %pagestate %wikistate %renderedfiles %oldrenderedfiles
+           %pagesources %destsources %depends %hooks %forcerebuild
+           $gettext_obj %loaded_plugins};
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
                  bestlink htmllink readfile writefile pagetype srcfile pagename
                  displaytime will_render gettext urlto targetpage
                 add_underlay pagetitle titlepage linkpage
-                 %config %links %pagestate %renderedfiles
+                 %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources);
 our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
 our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
@@ -1318,9 +1318,11 @@ sub loadindex () { #{{{
        my $pages;
        if (exists $index->{version} && ! ref $index->{version}) {
                $pages=$index->{page};
+               %wikistate=%{$index->{state}};
        }
        else {
                $pages=$index;
+               %wikistate=();
        }
 
        foreach my $src (keys %$pages) {
@@ -1368,6 +1370,7 @@ sub saveindex () { #{{{
        my $newfile="$config{wikistatedir}/indexdb.new";
        my $cleanup = sub { unlink($newfile) };
        open (my $out, '>', $newfile) || error("cannot write to $newfile: $!", $cleanup);
+
        my %index;
        foreach my $page (keys %pagemtime) {
                next unless $pagemtime{$page};
@@ -1392,6 +1395,14 @@ sub saveindex () { #{{{
                        }
                }
        }
+
+       $index{state}={};
+       foreach my $id (@hookids) {
+               foreach my $key (keys %{$wikistate{$id}}) {
+                       $index{state}{$id}{$key}=$wikistate{$id}{$key};
+               }
+       }
+       
        $index{version}="3";
        my $ret=Storable::nstore_fd(\%index, $out);
        return if ! defined $ret || ! $ret;
index 2ea92c4c3e4ff04101ef6dffce4a04b76e0631f4..04a3975c88cb959bd8ba24fce350ea15670ab534 100644 (file)
@@ -19,10 +19,10 @@ ikiwiki (2.66) UNRELEASED; urgency=low
     untidied content if tidy crashes. In either case, it seems best to tidy
     the content to nothing.
   * htmltidy: Avoid spewing tidy errors to stderr.
-  * Add %wikistate, which is like %pagestate except not specific to a given
-    page, and is preserved across rebuilds.
   * Reorganize index file, add a format version field. Upgrades to the new
     index format should be transparent.
+  * Add %wikistate, which is like %pagestate except not specific to a given
+    page, and is preserved across rebuilds.
 
  -- Joey Hess <joeyh@debian.org>  Thu, 25 Sep 2008 13:45:55 -0400
 
index 0e4f2fd6fc364e9cef7676824cd0e5d0e6aca10f..4e27d361d36d06353230318a5e31f98539f5dee4 100644 (file)
@@ -467,6 +467,15 @@ When pages are deleted, ikiwiki automatically deletes their pagestate too.
 Note that page state does not persist across wiki rebuilds, only across
 wiki updates.
 
+### %wikistate
+
+The `%wikistate` hash can be used by a plugin to store persistant state
+that is not bound to any one page. To set a value, use
+`$wikistate{$id}{$key}=$value, where `$value` is anything Storable can
+serialize, `$key` is any string you like, and `$id` must be the same as the
+"id" parameter passed to `hook()` when registering the plugin, so that the
+state can be dropped if the plugin is no longer used.
+
 ### Other variables
 
 If your plugin needs to access data about other pages in the wiki. It can
index f338750eadf23108a7a60e13a9c310a0d9761953..200b3f6d8e197fa3d8016f2b52db6d97dbde9211 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-27 16:35-0400\n"
+"POT-Creation-Date: 2008-09-27 16:40-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -910,7 +910,7 @@ msgstr ""
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1624
+#: ../IkiWiki.pm:1632
 msgid "yes"
 msgstr ""