X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/7bde880fa8cf2e7d3413a7ede7ae5b604a97e85b..c46b17983dc5549172dabb461b72a4ed11f110ae:/doc/plugins/write.mdwn?ds=inline diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 77f336dca..1cb26a076 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -101,8 +101,8 @@ make arbitrary changes. The function is passed named parameters "page", ### preprocess -Adding a [[PreProcessorDirective]] is probably the most common use of a -plugin. +Adding a [[ikiwiki/PreProcessorDirective]] is probably the most common use +of a plugin. hook(type => "preprocess", id => "foo", call => \&preprocess); @@ -126,11 +126,11 @@ the hook modifies data in `%links`. Note that doing so will make the hook be run twice per page build, so avoid doing it for expensive hooks. Note that if the [[htmlscrubber]] is enabled, html in -[[PreProcessorDirective]] output is sanitised, which may limit what your -plugin can do. Also, the rest of the page content is not in html format at -preprocessor time. Text output by a preprocessor directive will be -linkified and passed through markdown (or whatever engine is used to htmlize -the page) along with the rest of the page. +[[ikiwiki/PreProcessorDirective]] output is sanitised, which may limit what +your plugin can do. Also, the rest of the page content is not in html +format at preprocessor time. Text output by a preprocessor directive will +be linkified and passed through markdown (or whatever engine is used to +htmlize the page) along with the rest of the page. ### htmlize @@ -164,7 +164,7 @@ a new custom parameter to the template. hook(type => "templatefile", id => "foo", call => \&templatefile); -This hook allows plugins to change the [[template|wikitemplate]] that is +This hook allows plugins to change the [[template|wikitemplates]] that is used for a page in the wiki. The hook is passed a "page" parameter, and should return the name of the template file to use, or undef if it doesn't want to change the default ("page.tmpl"). Template files are looked for in @@ -313,6 +313,20 @@ A plugin can access the wiki's configuration via the `%config` hash. The best way to understand the contents of the hash is to look at [[ikiwiki.setup]], which sets the hash content to configure the wiki. +### %pagestate + +The `%pagestate` hash can be used by plugins to save state that they will need +next time ikiwiki is run. The hash holds per-page state, so to set a value, +use `%pagestate{$page}{$id}{$key}=$value`, and to retrieve the value, +use `%pagestate{$page}{$id}{$key}`. + +`$key` can be any string you like, but `$id` must be the same as the "id" +parameter passed to `hook()` when registering the plugin. This is so +ikiwiki can know when to delete pagestate for plugins that are no longer +used. + +When pages are deleted, ikiwiki automatically deletes their pagestate too. + ### Other variables If your plugin needs to access data about other pages in the wiki. It can @@ -351,9 +365,10 @@ cleanup. Note that while any plugin can use this for a fatal error, plugins should try to avoid dying on bad input, as that will halt the entire wiki build -and make the wiki unusable. So for example, if a [[PreProcessorDirective]] -is passed bad parameters, it's better to return an error message, which can -appear on the wiki page, rather than calling error(). +and make the wiki unusable. So for example, if a +[[ikiwiki/PreProcessorDirective]] is passed bad parameters, it's better to +return an error message, which can appear on the wiki page, rather than +calling error(). #### `template($;@)` @@ -368,12 +383,12 @@ page created from it. (Ie, it appends ".html".) #### `add_depends($$)` -Makes the specified page depend on the specified [[PageSpec]]. +Makes the specified page depend on the specified [[ikiwiki/PageSpec]]. #### `pagespec_match($$;@)` -Passed a page name, and [[PageSpec]], returns true if the [[PageSpec]] -matches the page. +Passed a page name, and [[ikiwiki/PageSpec]], returns true if the +[[ikiwiki/PageSpec]] matches the page. Additional named parameters can be passed, to further limit the match. The most often used is "location", which specifies the location the @@ -386,7 +401,7 @@ Given a page and the text of a link on the page, determine which existing page that link best points to. Prefers pages under a subdirectory with the same name as the source page, failing that goes down the directory tree to the base looking for matching -pages, as described in [[SubPage/LinkingRules]]. +pages, as described in [[ikiwiki/SubPage/LinkingRules]]. #### `htmllink($$$;@)` @@ -449,6 +464,10 @@ destination directory), register that the page will result in that file being rendered. It's important to call this before writing to any file in the destination directory. +Ikiwiki uses this information to automatically clean up rendered files when +the page that rendered them goes away or is changes to no longer render +them. will_render also does a few important security checks. + #### `pagetype($)` Given the name of a source file, returns the type of page it is, if it's @@ -473,10 +492,13 @@ search for files. If the directory name is not absolute, ikiwiki will assume it is in the parent directory of the configured underlaydir. -#### `displaytime($)` +#### `displaytime($;$)` Given a time, formats it for display. +The optional second parameter is a strftime format to use to format the +time. + #### `gettext` This is the standard gettext function, although slightly optimised. @@ -507,9 +529,9 @@ See [[RCS_details|rcs/details]] for some more info. ## PageSpec plugins It's also possible to write plugins that add new functions to -[[PageSpecs|PageSpec]]. Such a plugin should add a function to the +[[PageSpecs|ikiwiki/PageSpec]]. Such a plugin should add a function to the IkiWiki::PageSpec package, that is named `match_foo`, where "foo()" is -how it will be accessed in a [[PageSpec]]. The function will be passed +how it will be accessed in a [[ikiwiki/PageSpec]]. The function will be passed two parameters: The name of the page being matched, and the thing to match against. It may also be passed additional, named parameters. It should return a IkiWiki::SuccessReason object if the match succeeds, or an