* 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 $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
$glob=quotemeta($glob);
$glob=~s/\\\*/.*/g;
$glob=~s/\\\?/./g;
$glob=~s!\\/!/!g;
$page=~/^$glob$/i;
return $page=~/^$glob$/i;
}
} #}}}
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:
\\[[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:
* !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
timezone, not as GMT.
* 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

View 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