]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
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
 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
 
 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
                  %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};
        my $pages;
        if (exists $index->{version} && ! ref $index->{version}) {
                $pages=$index->{page};
+               %wikistate=%{$index->{state}};
        }
        else {
                $pages=$index;
        }
        else {
                $pages=$index;
+               %wikistate=();
        }
 
        foreach my $src (keys %$pages) {
        }
 
        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 $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};
        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{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.
     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.
   * 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
 
 
  -- 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.
 
 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
 ### 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"
 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"
 "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 ""
 
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1624
+#: ../IkiWiki.pm:1632
 msgid "yes"
 msgstr ""
 
 msgid "yes"
 msgstr ""