]> sipb.mit.edu Git - ikiwiki.git/blob - doc/todo/tag_pagespec_function.mdwn
0f2d306af9318ecb4b0eeec715d73a616ccff555
[ikiwiki.git] / doc / todo / tag_pagespec_function.mdwn
1 Implementing tags in terms of links is clever, but it would be nice if it was
2 opaque in both directions: tagging and matching tags. Writing pagespecs to
3 find out which pages are tagged with a given name means that the pagespec is
4 tied to whatever the tagbase is.
5
6 This patch adds a pagespec function 'tag' which lets you write pagespecs to
7 match tagged pages independent of whatever the tagbase is set to.
8
9  -- [[users/Jon]] 2009/02/17
10
11 > So, this looks good, appreciate the patch.
12
13 > The only problem I see is it could be confusing if `tag(foo)` matched
14 > a page that just linked to the tag via a wikilink, w/o actually tagging it.
15
16 >> (My [[!taglink wishlist]].) Yes, this is confusing and not nice. I observed this misbehavior, because I wanted to match two different lists of pages (only tagged or linked in any way), but it didn't work. Would this feature require a complex patch? --Ivan Z.
17
18 >>> If you link to a page 'foo' which happens to be a tag then the page you link from will turn up in the set of pages returned by tagged(foo). The only way to avoid this would be for the tag plugin to not use wikilinks as an implementation method. That itself would not be too hard to do, but there might be people relying on the older behaviour. A better alternative might be to have a "tag2" plugin (or a better name) which implements tagging entirely separately. -- [[Jon]]
19 >>>> I see; at least, your response is encouraging (that it's not hard). I could even find some work that can give similar features: [[structured page data#another_kind_of_links]] -- they envisage a pagespec like `data_link(Depends on,bugs/bugA)`, thus a "separation of dependencies between bugs from arbitrary links". Indeed, having many relations that can be used in the formulas defining classes of objects (like pagespecs here) is a common thing, so this would be a nice feature. (I'll be trying out the patches there first, probably.) In general, extending the language of pagespecs to something more powerful (like [[!wikipedia description logics]]) seems to be a nice possible feature. I saw a discussion of similar ideas about the extension of the pagespec language somewhere here. --Ivan Z.
20
21 > One other thing, perhaps it should be called `tagged()`? --[[Joey]] 
22
23 [[!tag patch done]]
24
25     --- a/plugins/IkiWiki/Plugin/tag.pm 2009-02-16 11:30:11.000000000 +0000
26     +++ b/plugins/IkiWiki/Plugin/tag.pm 2009-02-17 15:40:03.000000000 +0000
27     @@ -125,4 +125,12 @@
28         }
29      }
30      
31     +package IkiWiki::PageSpec;
32     +
33     +sub match_tag ($$;@) {
34     +   my $page = shift;
35     +   my $glob = shift;
36     +    return match_link($page, IkiWiki::Plugin::tag::tagpage($glob));
37     +}
38     +
39      1