]> sipb.mit.edu Git - ikiwiki.git/commitdiff
* Patch from Dr. Zini to add link() and backlink() to globlists. This allows
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 2 Jun 2006 01:17:26 +0000 (01:17 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 2 Jun 2006 01:17:26 +0000 (01:17 +0000)
  for some handy stuff like:
  - Using links as a kind of tag; creating blog pages that list all pages
    containing a given tag/link or not containing some other tag.
  - Subscribing to mail notifications whenever a change is made to a page
    that is a backlink of page foo. Ie, "Please notify me of changes in all
    pages that link to my home page in the wiki"
  - Locking any pages that are linked to from a particular page, so that
    lists of locks can be exposed in the wiki.

IkiWiki.pm
basewiki/blog.mdwn
basewiki/globlist.mdwn
debian/changelog
doc/features.mdwn

index ce9542f628ecbc055ecd331742e438ef3e6f56e9..357c1cd2d0ed0567538b41d585f7483d86238847 100644 (file)
@@ -401,13 +401,27 @@ sub glob_match ($$) { #{{{
        my $page=shift;
        my $glob=shift;
 
-       # turn glob into safe regexp
-       $glob=quotemeta($glob);
-       $glob=~s/\\\*/.*/g;
-       $glob=~s/\\\?/./g;
-       $glob=~s!\\/!/!g;
-       
-       $page=~/^$glob$/i;
+       if ($glob =~ /^link\((.+)\)$/) {
+               my $rev = $links{$page} or return undef;
+               foreach my $p (@$rev) {
+                       return 1 if lc $p eq $1;
+               }
+               return 0;
+       } elsif ($glob =~ /^backlink\((.+)\)$/) {
+               my $rev = $links{$1} or return undef;
+               foreach my $p (@$rev) {
+                       return 1 if lc $p eq $page;
+               }
+               return 0;
+       } else {
+               # turn glob into safe regexp
+               $glob=quotemeta($glob);
+               $glob=~s/\\\*/.*/g;
+               $glob=~s/\\\?/./g;
+               $glob=~s!\\/!/!g;
+               
+               return $page=~/^$glob$/i;
+       }
 } #}}}
 
 sub globlist_match ($$) { #{{{
index 38476d2d6f5dd5d2363bff1e31cfddf105ed1d2a..1276cb1e8db37f2d8ac34bf5613b7241884d9bd3 100644 (file)
@@ -1,7 +1,7 @@
 You can turn any page on this wiki into a weblog by inserting a
 [[PreProcessorDirective]]. Like this:
 
-\\[[inline pages="blog/* !*/Discussion" show="10" rootpage="blog"]]
+       \\[[inline pages="blog/* !*/Discussion" show="10" rootpage="blog"]]
 
 Any pages that match the specified [[GlobList]] (in the example, any
 [[SubPage]] of "blog") will be part of the blog, and the newest 10
@@ -14,9 +14,20 @@ top of the blog that can be used to add new items.
 If you want your blog to have an archive page listing every post ever made
 to it, you can accomplish that like this:
 
-\\[[inline pages="blog/* !*/Discussion" archive="yes"]]
+       \\[[inline pages="blog/* !*/Discussion" archive="yes"]]
 
 You can even create an automatically generated list of all the pages on the
 wiki, with the most recently added at the top, like this:
 
-\\[[inline pages="* !*/Discussion" archive="yes"]]
+       \\[[inline pages="* !*/Discussion" archive="yes"]]
+
+If you want to be able to add pages to a given blog feed by tagging them,
+you can do that too. To tag a page, just make it link to a page or pages 
+that represent its tags. Then use the special link() [[GlobList]] to match
+all pages that have a given tag:
+
+       \\[[inline pages="link(life)"]]
+
+Or include some tags and exclude others:
+
+       \\[[inline pages="link(debian) !link(social)"]]
index 5255a3beec1ea25afe8881e369d52b301520dffe..20a9eed1b98c86af51692380eb4f94c02429d081 100644 (file)
@@ -14,3 +14,7 @@ pages that match it. So if you want to specify all pages except for
 Discussion pages and the SandBox:
 
        * !SandBox !*/Discussion
+
+It's also possible to match pages that link to a given page, by writing
+"link(page)" in a globlist. Or, match pages that a given page links to, by
+writing "backlink(page)".
index bc08036dbeb67d7fe405937e6c8d49f5bdc83e09..c75eb80b7bac7d2f198b1f3f31124c95d41a4a34 100644 (file)
@@ -4,8 +4,17 @@ ikiwiki (1.5) UNRELEASED; urgency=low
     Note that as a side effect, dates will now be displayed using the local
     timezone, not as GMT.
   * More security review.
-
- -- Joey Hess <joeyh@debian.org>  Thu,  1 Jun 2006 15:12:29 -0400
+  * Patch from Dr. Zini to add link() and backlink() to globlists. This allows
+    for some handy stuff like:
+    - Using links as a kind of tag; creating blog pages that list all pages
+      containing a given tag/link or not containing some other tag.
+    - Subscribing to mail notifications whenever a change is made to a page
+      that is a backlink of page foo. Ie, "Please notify me of changes in all
+      pages that link to my home page in the wiki"
+    - Locking any pages that are linked to from a particular page, so that
+      lists of locks can be exposed in the wiki.
+
+ -- Joey Hess <joeyh@debian.org>  Thu,  1 Jun 2006 20:56:58 -0400
 
 ikiwiki (1.4) unstable; urgency=low
 
index b58392fd5277985919cc6d6749ed7df82e7f11eb..ac5dc03752049dcab125b8839b11b68928985eae 100644 (file)
@@ -37,12 +37,14 @@ Some of ikiwiki's features:
 
 * [[blog]]s
 
-  You can turn any page in the wiki into a [[blog]]. Pages with names 
-  matching a specified [[GlobList]] will be displayed as a weblog within
-  the blog page. And an RSS feed can be generated to follow the blog.
+  You can turn any page in the wiki into a [[blog]]. Pages matching a
+  specified [[GlobList]] will be displayed as a weblog within the blog
+  page. And an RSS feed can be generated to follow the blog.
 
-  Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples of some of
-  the flexible ways that this can be used.
+  Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples
+  of some of the flexible ways that this can be used.
+
+  Note that this also includes support for tag-based blogging.
 
 * Fast compiler