* 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;
# 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 ($$) { #{{{

View 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)"]]

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