* 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.
master
joey 2006-06-02 01:17:26 +00:00
parent 140658bc51
commit ad247de723
5 changed files with 56 additions and 16 deletions

View File

@ -401,13 +401,27 @@ sub glob_match ($$) { #{{{
my $page=shift; my $page=shift;
my $glob=shift; my $glob=shift;
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 # turn glob into safe regexp
$glob=quotemeta($glob); $glob=quotemeta($glob);
$glob=~s/\\\*/.*/g; $glob=~s/\\\*/.*/g;
$glob=~s/\\\?/./g; $glob=~s/\\\?/./g;
$glob=~s!\\/!/!g; $glob=~s!\\/!/!g;
$page=~/^$glob$/i; return $page=~/^$glob$/i;
}
} #}}} } #}}}
sub globlist_match ($$) { #{{{ sub globlist_match ($$) { #{{{

View File

@ -20,3 +20,14 @@ 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: 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)"]]

View File

@ -14,3 +14,7 @@ pages that match it. So if you want to specify all pages except for
Discussion pages and the SandBox: Discussion pages and the SandBox:
* !SandBox !*/Discussion * !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)".

11
debian/changelog vendored
View 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 Note that as a side effect, dates will now be displayed using the local
timezone, not as GMT. timezone, not as GMT.
* More security review. * More security review.
* 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 15:12:29 -0400 -- Joey Hess <joeyh@debian.org> Thu, 1 Jun 2006 20:56:58 -0400
ikiwiki (1.4) unstable; urgency=low ikiwiki (1.4) unstable; urgency=low

View File

@ -37,12 +37,14 @@ Some of ikiwiki's features:
* [[blog]]s * [[blog]]s
You can turn any page in the wiki into a [[blog]]. Pages with names You can turn any page in the wiki into a [[blog]]. Pages matching a
matching a specified [[GlobList]] will be displayed as a weblog within specified [[GlobList]] will be displayed as a weblog within the blog
the blog page. And an RSS feed can be generated to follow 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 Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples
the flexible ways that this can be used. of some of the flexible ways that this can be used.
Note that this also includes support for tag-based blogging.
* Fast compiler * Fast compiler