Overview

Use case: I want to publish customized documentation to users that I
support.  The pages will be largely identical with small items such as
hostnames that are specific to the different users.  I could do this
with templates, but I also want to avoid keeping each document in sync
manually when I need to update the documentation.

I've written two new macros and one action that build on top of the
existing GetVal macro to accomplish this.

The first macro:
  <<IncludeWithVals(template, vardict)>>
saves the value given in "vardict" in the request object.  This value
should name a page formatted as a wiki dict to provide values which will
be referenced in the page named by "template".  If the query includes
the key "edit" (as in /url?edit), the template will be surrounded by
<form> tags and a submit button will be included at the end.

The second macro:
  <<IncludeVal(key)>>
is used in the template.  It will load the value named by "key" from the
wiki dict referenced in the IncludeWithVals macro that included this
page.  If the query includes the key "edit"), the values will be printed
as form input items rather than text.

The action is referenced by the form printed by <<IncludeWithVals>>.  It
will load all of the values present in the wiki dict named by "vardict",
replace any values which are present in the form input, and save the
results.  Any content of the wiki dict which is not part of the dict
itself will be lost.