aboutsummaryrefslogtreecommitdiff
path: root/doc/todo/conditional_text_based_on_ikiwiki_features.mdwn
blob: 444f1c2d5423316ef80351966c0f59c7c60bd669 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
I'd like to see some way to conditionally include wiki text based on
whether the wiki enables or disables certain features.  For example,
[[helponformatting]], could use `\[[if (enabled smiley) """Also, because
this wiki has the smiley plugin enabled, you can insert \[[smileys]] and
some other useful symbols."""]]`, and a standard template for [[plugins]]
pages could check for the given plugin name to print "enabled" or
"disabled".

Some potentially useful conditionals:

* `enabled pluginname`
* `disabled pluginname`
* `any pagespec`: true if any of the pages in the [[PageSpec]] exist
* `all pagespec`: true if all of the pages in the [[PageSpec]] exist
* `no pagespec` or `none pagespec`: true if none of the pages in the [[PageSpec]] exist
* `thispage pagespec`: true if pagespec includes the page getting rendered (possibly one including the page with this content on it).
* `sourcepage pagespec`: true if pagespec includes the page corresponding to the file actually containing this content, rather than a page including it.
* `included`: true if included on another page, via [[plugins/inline]], [[plugins/sidebar]], [[plugins/contrib/navbar]], etc.

You may or may not want to include boolean operations (`and`, `or`, and
`not`); if you do, you could replace `disabled` with `not enabled`, and `no
pagespec` or `none pagespec` with `not any pagespec` (but you may want to
keep the aliases for simplicity anyway).  You also may or may not want to
include an `else` clause; if so, you could label the text used if true as
`then`.

Syntax could vary greatly here, both for the [[PreprocessorDirective]] and
for the condition itself.

> I think this is a good thing to consider, although conditionals tend to
> make everything a lot more complicated, so I also want to KISS, and not
> use too many of them.
> 
> I'd probably implement this using the same method as pagespecs, so 'and',
> 'or', '!', and paren groupings work.
> 
> It could be thought of as simply testing to see if a pagespec matches
> anything, using a slightly expanded syntax for the pagespec, which would
> also allow testing for things like link(somepage),
> created_before(somepage), etc.
> 
> That also gives us your "any pagespec" for free: "page or page or page".
> And for "all pagespec", you can do "page and page and page". 
> 
> For plugins testing, maybe just use "enabled(name)"?
> 
> I'm not sure what the use cases are for thispage, sourcepage, and
> included. I don't know if the included test is even doable. I'd be
> inclined to not bother with these three unless there are use cases I'm
> not seeing.
> 
> As to the syntax, to fit it into standard preprocessor syntax, it would
> need to look something like this:
>
>	\[[if test="enabled(smiley)" """foo"""]]
> 
> --[[Joey]]