summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/.gitignore2
-rw-r--r--backend/ikistrap/.gitignore5
-rw-r--r--backend/ikistrap/Makefile11
-rw-r--r--backend/ikistrap/README.md15
-rw-r--r--backend/ikistrap/basewiki/favicon.icobin0 -> 1345 bytes
-rw-r--r--backend/ikistrap/basewiki/ikiwiki.mdwn17
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/directive.mdwn56
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/formatting.mdwn106
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/markdown.mdwn11
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/openid.mdwn28
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/pagespec.mdwn86
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/pagespec/attachment.mdwn38
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/pagespec/po.mdwn23
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/pagespec/sorting.mdwn30
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/searching.mdwn20
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/subpage.mdwn12
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/subpage/linkingrules.mdwn33
-rw-r--r--backend/ikistrap/basewiki/ikiwiki/wikilink.mdwn29
-rw-r--r--backend/ikistrap/basewiki/index.mdwn7
-rw-r--r--backend/ikistrap/basewiki/local.css3
-rw-r--r--backend/ikistrap/basewiki/recentchanges.mdwn7
-rw-r--r--backend/ikistrap/basewiki/sandbox.mdwn32
-rw-r--r--backend/ikistrap/basewiki/shortcuts.mdwn86
-rw-r--r--backend/ikistrap/basewiki/style.css191
-rw-r--r--backend/ikistrap/basewiki/templates.mdwn100
-rw-r--r--backend/ikistrap/basewiki/templates/note.mdwn12
-rw-r--r--backend/ikistrap/basewiki/templates/popup.mdwn17
-rw-r--r--backend/ikistrap/example.setup400
-rw-r--r--backend/ikistrap/example/Anemones.jpgbin0 -> 87323 bytes
-rw-r--r--backend/ikistrap/example/Bootstrap_features.mdwn136
-rw-r--r--backend/ikistrap/example/Calendars.mdwn10
-rw-r--r--backend/ikistrap/example/Comments.mdwn3
-rw-r--r--backend/ikistrap/example/Comments/comment_1._comment9
-rw-r--r--backend/ikistrap/example/Comments/comment_2._comment9
-rw-r--r--backend/ikistrap/example/Inline_pages.mdwn9
-rw-r--r--backend/ikistrap/example/Lemonshark.jpgbin0 -> 31256 bytes
-rw-r--r--backend/ikistrap/example/Sea_Star.jpgbin0 -> 143211 bytes
-rw-r--r--backend/ikistrap/example/index.mdwn24
-rw-r--r--backend/ikistrap/example/inlinetest.mdwn1
-rw-r--r--backend/ikistrap/example/sample_text/Donec_dapibus.mdwn1
-rw-r--r--backend/ikistrap/example/sample_text/Donec_semper.mdwn1
-rw-r--r--backend/ikistrap/example/sample_text/Lorem_ipsum.mdwn4
-rw-r--r--backend/ikistrap/example/sample_text/Nulla_facilisi.mdwn2
-rw-r--r--backend/ikistrap/example/sample_text/Sed_eget.mdwn1
-rw-r--r--backend/ikistrap/example/sidebar.mdwn9
-rw-r--r--backend/ikistrap/ikistrap.svg180
-rw-r--r--backend/ikistrap/lib/IkiWiki/Plugin/ikistrap.pm103
-rw-r--r--backend/ikistrap/templates/aggregatepost.tmpl19
-rw-r--r--backend/ikistrap/templates/archivepage.tmpl20
-rw-r--r--backend/ikistrap/templates/atomitem.tmpl49
-rw-r--r--backend/ikistrap/templates/atompage.tmpl39
-rw-r--r--backend/ikistrap/templates/autoindex.tmpl1
-rw-r--r--backend/ikistrap/templates/autotag.tmpl4
-rw-r--r--backend/ikistrap/templates/blogpost.tmpl16
-rw-r--r--backend/ikistrap/templates/calendarmonth.tmpl5
-rw-r--r--backend/ikistrap/templates/calendaryear.tmpl1
-rw-r--r--backend/ikistrap/templates/carouselimage.tmpl3
-rw-r--r--backend/ikistrap/templates/carouselpage.tmpl5
-rw-r--r--backend/ikistrap/templates/change.tmpl58
-rw-r--r--backend/ikistrap/templates/comment.tmpl66
-rw-r--r--backend/ikistrap/templates/commentmoderation.tmpl32
-rw-r--r--backend/ikistrap/templates/editcomment.tmpl42
-rw-r--r--backend/ikistrap/templates/editconflict.tmpl7
-rw-r--r--backend/ikistrap/templates/editcreationconflict.tmpl9
-rw-r--r--backend/ikistrap/templates/editfailedsave.tmpl10
-rw-r--r--backend/ikistrap/templates/editpage.tmpl94
-rw-r--r--backend/ikistrap/templates/editpagegone.tmpl7
-rw-r--r--backend/ikistrap/templates/emailauth.tmpl10
-rw-r--r--backend/ikistrap/templates/feedlink.tmpl9
-rw-r--r--backend/ikistrap/templates/googleform.tmpl4
-rw-r--r--backend/ikistrap/templates/inlinepage.tmpl77
-rw-r--r--backend/ikistrap/templates/login-selector.tmpl65
-rw-r--r--backend/ikistrap/templates/microblog.tmpl18
-rw-r--r--backend/ikistrap/templates/notifyemail.tmpl9
-rw-r--r--backend/ikistrap/templates/page.tmpl223
-rw-r--r--backend/ikistrap/templates/passwordmail.tmpl15
-rw-r--r--backend/ikistrap/templates/pocreatepage.tmpl3
-rw-r--r--backend/ikistrap/templates/recentchanges.tmpl7
-rw-r--r--backend/ikistrap/templates/renamesummary.tmpl30
-rw-r--r--backend/ikistrap/templates/revert.tmpl22
-rw-r--r--backend/ikistrap/templates/rssitem.tmpl28
-rw-r--r--backend/ikistrap/templates/rsspage.tmpl18
-rw-r--r--backend/ikistrap/templates/searchform.tmpl6
-rw-r--r--backend/ikistrap/templates/searchquery.tmpl113
-rw-r--r--backend/ikistrap/templates/simplecard.tmpl3
-rw-r--r--backend/ikistrap/templates/titlepage.tmpl7
-rw-r--r--backend/ikistrap/templates/trails.tmpl23
-rw-r--r--backend/ikistrap/tidy.config9
-rw-r--r--backend/ikiwiki.setup384
-rw-r--r--backend/resilient/__init__.py6
90 files changed, 3451 insertions, 4 deletions
diff --git a/backend/.gitignore b/backend/.gitignore
index 9a4efdc..1f1cbc3 100644
--- a/backend/.gitignore
+++ b/backend/.gitignore
@@ -1 +1,3 @@
update_private.py
+auth/ipfs-private
+*.pyc
diff --git a/backend/ikistrap/.gitignore b/backend/ikistrap/.gitignore
new file mode 100644
index 0000000..a9ec7a3
--- /dev/null
+++ b/backend/ikistrap/.gitignore
@@ -0,0 +1,5 @@
+/example.html
+/example/.ikiwiki
+/example/cgi_wrapper
+/example/tag
+*.swp
diff --git a/backend/ikistrap/Makefile b/backend/ikistrap/Makefile
new file mode 100644
index 0000000..d9871c9
--- /dev/null
+++ b/backend/ikistrap/Makefile
@@ -0,0 +1,11 @@
+all:
+ HTML_TIDY=./tidy.config ikiwiki --setup example.setup --refresh
+
+rebuild:
+ HTML_TIDY=./tidy.config ikiwiki --setup example.setup --rebuild
+
+tidy:
+ HTML_TIDY=./tidy.config tidy -m `find example.html/ -type f -name '*.html'`
+
+
+.PHONY: all rebuild
diff --git a/backend/ikistrap/README.md b/backend/ikistrap/README.md
new file mode 100644
index 0000000..76c6f14
--- /dev/null
+++ b/backend/ikistrap/README.md
@@ -0,0 +1,15 @@
+# Ikistrap, a Bootstrap 4 theme for ikiwiki
+
+[Ikiwiki](https://ikiwiki.info/) is a very powerful [wiki](https://en.wikipedia.org/wiki/Wiki) compiler.
+However, its default theme is very minimalistic.
+Ikistrap is a theme that uses [Bootstrap 4](http://v4-alpha.getbootstrap.com/) to ensure you have a wiki that looks professional,
+whether you are viewing it on your desktop computer or on your mobile phone.
+
+To use ikistrap in your own wiki, just add the following to your setup file:
+
+ templatedir: /path/to/ikistrap/templates
+ underlaydir: /path/to/ikistrap/basewiki
+
+Ikistrap comes with an example wiki that shows off its features,
+and shows you how to integrate some Bootstrap 4 features into your `.mdwn` files.
+Use the `Makefile` to compile the example wiki.
diff --git a/backend/ikistrap/basewiki/favicon.ico b/backend/ikistrap/basewiki/favicon.ico
new file mode 100644
index 0000000..51d2781
--- /dev/null
+++ b/backend/ikistrap/basewiki/favicon.ico
Binary files differ
diff --git a/backend/ikistrap/basewiki/ikiwiki.mdwn b/backend/ikistrap/basewiki/ikiwiki.mdwn
new file mode 100644
index 0000000..4d84069
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki.mdwn
@@ -0,0 +1,17 @@
+[[!meta robots="noindex, follow"]]
+This wiki is powered by [ikiwiki](http://ikiwiki.info/).
+[[!if test="enabled(version)"
+ then="(Currently running version [[!version ]].)"
+]]
+
+Some documentation on using ikiwiki:
+
+* [[ikiwiki/formatting]]
+* [[ikiwiki/wikilink]]
+* [[ikiwiki/subpage]]
+* [[ikiwiki/pagespec]]
+* [[ikiwiki/directive]]
+* [[ikiwiki/markdown]]
+* [[ikiwiki/openid]]
+* [[ikiwiki/searching]]
+* [[templates]]
diff --git a/backend/ikistrap/basewiki/ikiwiki/directive.mdwn b/backend/ikistrap/basewiki/ikiwiki/directive.mdwn
new file mode 100644
index 0000000..1dc1e51
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/directive.mdwn
@@ -0,0 +1,56 @@
+[[!meta robots="noindex, follow"]]
+Directives are similar to a [[ikiwiki/WikiLink]] in form, except they
+begin with `!` and may contain parameters. The general form is:
+
+ \[[!directive param="value" param="value"]]
+
+This gets expanded before the rest of the page is processed, and can be used
+to transform the page in various ways.
+
+The quotes around values can be omitted if the value is a simple word.
+Also, some directives may use parameters without values, for example:
+
+ \[[!tag foo]]
+
+A directive does not need to all be on one line, it can be
+wrapped to multiple lines if you like:
+
+ \[[!directive foo="baldersnatch"
+ bar="supercalifragilisticexpialidocious" baz=11]]
+
+Also, multiple lines of *quoted* text can be used for a value.
+To allow quote marks inside the quoted text, delimit the block
+of text with triple-double-quotes or triple-single-quotes:
+
+ \[[!directive text="""
+ 1. "foo"
+ 2. "bar"
+ 3. "baz"
+ """ othertext='''
+ 1. 'quux'
+ 2. "foo"
+ ''']]
+
+If you want to put text with triple quotes into a parameter value, you can
+use perl-style here-doc syntax, even nesting it like this:
+
+ \[[!directive text=<<OUTER
+ [[!otherdirective <<INNER
+ inner text
+ INNER]]
+ outer text
+ OUTER]]
+
+ikiwiki also has an older syntax for directives, which requires a space in
+directives to distinguish them from [[wikilinks|ikiwiki/wikilink]]. This
+syntax has several disadvantages: it requires a space after directives with
+no parameters (such as `\[[pagecount ]]`), and it prohibits spaces in
+[[wikilinks|ikiwiki/wikilink]]. ikiwiki now provides the `!`-prefixed
+syntax shown above as default. However, ikiwiki still supports wikis using
+the older syntax, if the `prefix_directives` option is disabled.
+
+[[!if test="enabled(listdirectives)" then="""
+Here is a list of currently available directives in this wiki:
+
+[[!listdirectives ]]
+"""]]
diff --git a/backend/ikistrap/basewiki/ikiwiki/formatting.mdwn b/backend/ikistrap/basewiki/ikiwiki/formatting.mdwn
new file mode 100644
index 0000000..befbce9
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/formatting.mdwn
@@ -0,0 +1,106 @@
+[[!meta title="Formatting wiki pages"]]
+[[!meta robots="noindex, follow"]]
+
+Text on this wiki is, by default, written in a form very close to how you
+might write text for an email message. This style of text formatting is
+called [[MarkDown]], and it works like this:
+
+Leave blank lines between paragraphs.
+
+You can *\*emphasise\** or **\*\*strongly emphasise\*\*** text by placing it
+in single or double asterisks.
+
+To create a list, start each line with an asterisk:
+
+* "* this is my list"
+* "* another item"
+
+To make a numbered list, start each line with a number (any number will
+do) followed by a period:
+
+1. "1. first line"
+2. "2. second line"
+2. "2. third line"
+
+To create a header, start a line with one or more `#` characters followed
+by a space and the header text. The number of `#` characters controls the
+size of the header:
+
+# # h1
+## ## h2
+### ### h3
+#### #### h4
+##### ##### h5
+###### ###### h6
+
+To create a horizontal rule, just write three or more dashes or stars on
+their own line:
+
+----
+
+To quote someone, prefix the quote with ">":
+
+> To be or not to be,
+> that is the question.
+
+To write a code block, indent each line with a tab or 4 spaces:
+
+ 10 PRINT "Hello, world!"
+ 20 GOTO 10
+
+To link to an url or email address, you can just put the
+url in angle brackets: <<http://ikiwiki.info>>, or you can use the
+form \[link text\]\(url\)
+
+----
+
+In addition to basic html formatting using [[MarkDown]], this wiki lets
+you use the following additional features:
+
+* To link to another page on the wiki, place the page's name inside double
+ square brackets. So you would use `\[[WikiLink]]` to link to [[WikiLink]].
+
+[[!if test="enabled(smiley) and smileys" then="""
+* Insert [[smileys]] and some other useful symbols. :-)
+"""]]
+
+[[!if test="enabled(shortcut) and shortcuts" then="""
+* Use [[shortcuts]] to link to common resources.
+
+ \[[!wikipedia War\_of\_1812]]
+"""]]
+
+[[!if test="enabled(template) and templates" then="""
+* Create and fill out [[templates]] for repeated chunks of
+ parameterized wiki text.
+"""]]
+
+* Insert various [[directives|directive]] onto a page to perform useful
+ actions.
+[[!if test="enabled(toc) or enabled(meta) or enabled(inline)" then="""
+ For example, you can:
+"""]]
+
+[[!if test="enabled(toc)" then="""
+ * Add a table of contents to a page:
+
+ \[[!toc]]
+"""]]
+
+
+[[!if test="enabled(meta)" then="""
+ * Change the title of a page:
+
+ \[[!meta title="full page title"]]
+"""]]
+
+[[!if test="enabled(inline)" then="""
+ * Create a blog by inlining a set of pages:
+
+ \[[!inline pages="blog/*"]]
+"""]]
+
+[[!if test="enabled(listdirectives)" then="""
+ Full list of [[directives|directive]] enabled for this wiki:
+ [[!listdirectives ]]
+"""]]
diff --git a/backend/ikistrap/basewiki/ikiwiki/markdown.mdwn b/backend/ikistrap/basewiki/ikiwiki/markdown.mdwn
new file mode 100644
index 0000000..6841919
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/markdown.mdwn
@@ -0,0 +1,11 @@
+[[!meta robots="noindex, follow"]]
+[Markdown](http://daringfireball.net/projects/markdown/)
+is a minimal markup language that resembles plain text as used in
+email messages. It is the markup language used by this wiki by default.
+
+For documentation about the markdown syntax, see [[formatting]] and
+[Markdown: syntax](http://daringfireball.net/projects/markdown/syntax).
+
+Note that [[WikiLinks|WikiLink]] and [[directives|directive]] are not part
+of the markdown syntax, and are the only bit of markup that this wiki
+handles internally.
diff --git a/backend/ikistrap/basewiki/ikiwiki/openid.mdwn b/backend/ikistrap/basewiki/ikiwiki/openid.mdwn
new file mode 100644
index 0000000..2fa972e
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/openid.mdwn
@@ -0,0 +1,28 @@
+[[!meta title="OpenID"]]
+[[!meta robots="noindex, follow"]]
+
+[[!if test="enabled(openid)"
+ then="This wiki has OpenID **enabled**."
+ else="This wiki has OpenID **disabled**."]]
+
+[OpenID](http://openid.net) is a decentralized authentication mechanism
+that allows you to have one login that you can use on a growing number of
+websites.
+
+If you have an account with some of the larger web service providers,
+you might already have an OpenID.
+[Directory of OpenID providers](http://openiddirectory.com/openid-providers-c-1.html)
+
+[[!if test="enabled(openid)" then="""
+To sign in to this wiki using OpenID, just enter it in the OpenID field in the
+signin form. You do not need to give this wiki a password or go through any
+registration process when using OpenID.
+"""]]
+
+---
+
+It's also possible to make a page in the wiki usable as an OpenID url,
+by delegating it to an openid server. Here's an example of how to do that:
+
+ \[[!meta openid="http://yourid.myopenid.com/"
+ server="http://www.myopenid.com/server"]]
diff --git a/backend/ikistrap/basewiki/ikiwiki/pagespec.mdwn b/backend/ikistrap/basewiki/ikiwiki/pagespec.mdwn
new file mode 100644
index 0000000..0f298ad
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/pagespec.mdwn
@@ -0,0 +1,86 @@
+[[!meta robots="noindex, follow"]]
+To select a set of pages, such as pages that are locked, pages
+whose commit emails you want subscribe to, or pages to combine into a
+blog, the wiki uses a PageSpec. This is an expression that matches
+a set of pages.
+
+The simplest PageSpec is a simple list of pages. For example, this matches
+any of the three listed pages:
+
+ foo or bar or baz
+
+More often you will want to match any pages that have a particular thing in
+their name. You can do this using a glob pattern. "`*`" stands for any part
+of a page name, and "`?`" for any single letter of a page name. So this
+matches all pages about music, and any [[SubPage]]s of the SandBox, but does
+not match the SandBox itself:
+
+ *music* or SandBox/*
+
+You can also prefix an item with "`!`" to skip pages that match it. So to
+match all pages except for Discussion pages and the SandBox:
+
+ * and !SandBox and !*/Discussion
+
+Some more elaborate limits can be added to what matches using these functions:
+
+* "`glob(someglob)`" - matches pages and other files that match the given glob.
+ Just writing the glob by itself is actually a shorthand for this function.
+* "`page(glob)`" - like `glob()`, but only matches pages, not other files
+* "`link(page)`" - matches only pages that link to a given page (or glob)
+* "`tagged(tag)`" - matches pages that are tagged or link to the given tag (or
+ tags matched by a glob)
+* "`backlink(page)`" - matches only pages that a given page links to
+* "`creation_month(month)`" - matches only files created on the given month
+ number
+* "`creation_day(mday)`" - or day of the month
+* "`creation_year(year)`" - or year
+* "`created_after(page)`" - matches only files created after the given page
+ was created
+* "`created_before(page)`" - matches only files created before the given page
+ was created
+* "`internal(glob)`" - like `glob()`, but matches even internal-use
+ pages that globs do not usually match.
+* "`title(glob)`", "`author(glob)`", "`authorurl(glob)`",
+ "`license(glob)`", "`copyright(glob)`", "`guid(glob)`"
+ - match pages that have the given metadata, matching the specified glob.
+* "`user(username)`" - tests whether a modification is being made by a
+ user with the specified username. If openid is enabled, an openid can also
+ be put here. Glob patterns can be used in the username. For example,
+ to match all openid users, use `user(*://*)`
+* "`admin()`" - tests whether a modification is being made by one of the
+ wiki admins.
+* "`ip(address)`" - tests whether a modification is being made from the
+ specified IP address. Glob patterns can be used in the address. For
+ example, `ip(127.0.0.*)`
+* "`comment(glob)`" - matches comments to a page matching the glob.
+* "`comment_pending(glob)`" - matches unmoderated, pending comments.
+* "`postcomment(glob)`" - matches only when comments are being
+ posted to a page matching the specified glob
+
+For example, to match all pages in a blog that link to the page about music
+and were written in 2005:
+
+ blog/* and link(music) and creation_year(2005)
+
+Note the use of "and" in the above example, that means that only pages that
+match each of the three expressions match the whole. Use "and" when you
+want to combine expression like that; "or" when it's enough for a page to
+match one expression. Note that it doesn't make sense to say "index and
+SandBox", since no page can match both expressions.
+
+More complex expressions can also be created, by using parentheses for
+grouping. For example, to match pages in a blog that are tagged with either
+of two tags, use:
+
+ blog/* and (tagged(foo) or tagged(bar))
+
+Note that page names in PageSpecs are matched against the absolute
+filenames of the pages in the wiki, so a pagespec "foo" used on page
+"a/b" will not match a page named "a/foo" or "a/b/foo". To match
+relative to the directory of the page containing the pagespec, you can
+use "./". For example, "./foo" on page "a/b" matches page "a/foo".
+
+To indicate the name of the page the PageSpec is used in, you can
+use a single dot. For example, `link(.)` matches all the pages
+linking to the page containing the PageSpec.
diff --git a/backend/ikistrap/basewiki/ikiwiki/pagespec/attachment.mdwn b/backend/ikistrap/basewiki/ikiwiki/pagespec/attachment.mdwn
new file mode 100644
index 0000000..fa2bc58
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/pagespec/attachment.mdwn
@@ -0,0 +1,38 @@
+[[!meta robots="noindex, follow"]]
+[[!if test="enabled(attachment)"
+ then="This wiki has attachments **enabled**."
+ else="This wiki has attachments **disabled**."]]
+
+If attachments are enabled, the wiki admin can control what types of
+attachments will be accepted, via the `allowed_attachments`
+configuration setting.
+
+For example, to limit most users to uploading small images, and nothing else,
+while allowing larger mp3 files to be uploaded by joey into a specific
+directory, and check all attachments for viruses, something like this could be
+used:
+
+ virusfree() and ((user(joey) and podcast/*.mp3 and mimetype(audio/mpeg) and maxsize(15mb)) or (mimetype(image/*) and maxsize(50kb)))
+
+The regular [[ikiwiki/PageSpec]] syntax is expanded with the following
+additional tests:
+
+* "`maxsize(size)`" - tests whether the attachment is no larger than the
+ specified size. The size defaults to being in bytes, but "kb", "mb", "gb"
+ etc can be used to specify the units.
+
+* "`minsize(size)`" - tests whether the attachment is no smaller than the
+ specified size.
+
+* "`ispage()`" - tests whether the attachment will be treated by ikiwiki as a
+ wiki page. (Ie, if it has an extension of ".mdwn", or of any other enabled
+ page format).
+
+ So, if you don't want to allow wiki pages to be uploaded as attachments,
+ use `!ispage()` ; if you only want to allow wiki pages to be uploaded
+ as attachments, use `ispage()`.
+
+* "`mimetype(foo/bar)`" - checks the MIME type of the attachment. You can
+ include a glob in the type, for example `mimetype(image/*)`.
+
+* "`virusfree()`" - checks the attachment with an antiviral program.
diff --git a/backend/ikistrap/basewiki/ikiwiki/pagespec/po.mdwn b/backend/ikistrap/basewiki/ikiwiki/pagespec/po.mdwn
new file mode 100644
index 0000000..f995640
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/pagespec/po.mdwn
@@ -0,0 +1,23 @@
+[[!if test="enabled(po)"
+ then="This wiki has po support **enabled**."
+ else="This wiki has po support **disabled**."]]
+
+If the [[!iki plugins/po desc=po]] plugin is enabled, the regular
+[[ikiwiki/PageSpec]] syntax is expanded with the following additional
+tests that can be used to improve user navigation in a multi-lingual
+wiki:
+
+* "`lang(LL)`" - tests whether a page is written in the language
+ specified as a ISO639-1 (two-letter) language code.
+* "`currentlang()`" - tests whether a page is written in the same
+ language as the current page.
+* "`needstranslation()`" - tests whether a page needs translation
+ work. Only slave pages match this PageSpec. A minimum target
+ translation percentage can optionally be passed as an integer
+ parameter: "`needstranslation(50)`" matches only pages less than 50%
+ translated.
+
+Note that every non-po page is considered to be written in
+`po_master_language`, as specified in `ikiwiki.setup`.
+
+[[!meta robots="noindex, follow"]]
diff --git a/backend/ikistrap/basewiki/ikiwiki/pagespec/sorting.mdwn b/backend/ikistrap/basewiki/ikiwiki/pagespec/sorting.mdwn
new file mode 100644
index 0000000..0c6cc74
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/pagespec/sorting.mdwn
@@ -0,0 +1,30 @@
+Some [[directives|ikiwiki/directive]] that use
+[[PageSpecs|ikiwiki/pagespec]] allow
+specifying the order that matching pages are shown in. The following sort
+orders can be specified.
+
+* `age` - List pages from the most recently created to the oldest.
+
+* `mtime` - List pages with the most recently modified first.
+
+* `title` - Order by title (page name), e.g. "z/a a/b a/c"
+
+* `path` - Order by page name including parents, e.g. "a/b a/c z/a"
+[[!if test="enabled(sortnaturally)" then="""
+* `title_natural` - Orders by title, but numbers in the title are treated
+ as such, ("1 2 9 10 20" instead of "1 10 2 20 9")
+
+* `path_natural` - Like `path`, but numbers in the title are treated as such
+"""]]
+[[!if test="enabled(meta)" then="""
+* `meta(title)` - Order according to the `\[[!meta title="foo" sortas="bar"]]`
+ or `\[[!meta title="foo"]]` [[ikiwiki/directive]], or the page name if no
+ full title was set. `meta(author)`, `meta(date)`, `meta(updated)`, etc.
+ also work.
+"""]]
+
+In addition, you can combine several sort orders and/or reverse the order of
+sorting, with a string like `age -title` (which would sort by age, then by
+title in reverse order if two pages have the same age).
+
+[[!meta robots="noindex, follow"]]
diff --git a/backend/ikistrap/basewiki/ikiwiki/searching.mdwn b/backend/ikistrap/basewiki/ikiwiki/searching.mdwn
new file mode 100644
index 0000000..4c12879
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/searching.mdwn
@@ -0,0 +1,20 @@
+[[!meta robots="noindex, follow"]]
+
+[[!if test="enabled(search)"
+then="This wiki has searching **enabled**."
+else="This wiki has searching **disabled**."]]
+
+If searching is enabled, you can enter search terms in the search field,
+as you'd expect. There are a few special things you can do to construct
+more powerful searches.
+
+* To match a phrase, enclose it in double quotes.
+* `AND` can be used to search for documents containing two expressions.
+* `OR` can be used to search for documents containing either one of
+ two expressions.
+* Parentheses can be used to build up complicated search expressions. For
+ example, "(foo AND bar) OR (me AND you)"
+* Prefix a search term with "-" to avoid it from appearing in the results.
+ For example, "-discussion" will omit "discussion".
+* To search for a page with a given title, use "title:foo".
+* To search for pages that contain a "bar" link, use "link:bar".
diff --git a/backend/ikistrap/basewiki/ikiwiki/subpage.mdwn b/backend/ikistrap/basewiki/ikiwiki/subpage.mdwn
new file mode 100644
index 0000000..862f45e
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/subpage.mdwn
@@ -0,0 +1,12 @@
+[[!meta robots="noindex, follow"]]
+ikiwiki supports placing pages in a directory hierarchy. For example,
+this page, [[SubPage]] has some related pages placed under it, like
+[[SubPage/LinkingRules]]. This is a useful way to add some order to your
+wiki rather than just having a great big directory full of pages.
+
+To add a SubPage, just make a subdirectory and put pages in it. For
+example, this page is subpage.mdwn in this wiki's source, and there is also
+a subpage subdirectory, which contains subpage/linkingrules.mdwn. Subpages
+can be nested as deeply as you'd like.
+
+Linking to and from a SubPage is explained in [[LinkingRules]].
diff --git a/backend/ikistrap/basewiki/ikiwiki/subpage/linkingrules.mdwn b/backend/ikistrap/basewiki/ikiwiki/subpage/linkingrules.mdwn
new file mode 100644
index 0000000..e547f30
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/subpage/linkingrules.mdwn
@@ -0,0 +1,33 @@
+[[!meta robots="noindex, follow"]]
+To link to or from a [[SubPage]], you can normally use a regular
+[[WikiLink]] that does not contain the name of the parent directory of
+the [[SubPage]]. Ikiwiki descends the directory hierarchy looking for a
+page that matches your link.
+
+For example, if FooBar/SubPage links to "OtherPage", ikiwiki will first
+prefer pointing the link to FooBar/SubPage/OtherPage if it exists, next
+to FooBar/OtherPage and finally to OtherPage in the root of the wiki.
+
+Note that this means that if a link on FooBar/SomePage to "OtherPage"
+currently links to OtherPage, in the root of the wiki, and FooBar/OtherPage
+is created, the link will _change_ to point to FooBar/OtherPage. On the
+other hand, a link from BazBar to "OtherPage" would be unchanged by this
+creation of a [[SubPage]] of FooBar.
+
+You can also specify a link that contains a directory name, like
+"FooBar/OtherPage" to more exactly specify what page to link to. This is
+the only way to link to an unrelated [[SubPage]].
+
+You can use this to, for example, to link from BazBar to "FooBar/SubPage",
+or from BazBar/SubPage to "FooBar/SubPage".
+
+You can also use "/" at the start of a link, to specify exactly which page
+to link to, when there are multiple pages with similar names and the link
+goes to the wrong page by default. For example, linking from
+"FooBar/SubPage" to "/OtherPage" will link to the "OtherPage" in the root
+of the wiki, even if there is a "FooBar/OtherPage".
+
+Also, if the wiki is configured with a userdir, you can link to pages
+within the userdir without specifying a path to them. This is to allow for
+easy linking to a user's page in the userdir, to sign a comment. These
+links are checked for last of all.
diff --git a/backend/ikistrap/basewiki/ikiwiki/wikilink.mdwn b/backend/ikistrap/basewiki/ikiwiki/wikilink.mdwn
new file mode 100644
index 0000000..cf3b89c
--- /dev/null
+++ b/backend/ikistrap/basewiki/ikiwiki/wikilink.mdwn
@@ -0,0 +1,29 @@
+[[!meta robots="noindex, follow"]]
+WikiLinks provide easy linking between pages of the wiki. To create a
+[[WikiLink]], just put the name of the page to link to in double brackets.
+For example `\[[WikiLink]]`.
+
+If you ever need to write something like `\[[WikiLink]]` without creating a
+wikilink, just prefix it with a `\`, like `\\[[WikiLink]]`.
+
+There are some special [[SubPage/LinkingRules]] that come into play when
+linking between [[SubPages|SubPage]].
+
+WikiLinks are matched with page names in a case-insensitive manner, so you
+don't need to worry about getting the case the same, and can capitalise
+links at the start of a sentence, and so on.
+
+It's also possible to write a WikiLink that uses something other than the page
+name as the link text. For example `\[[foo_bar|SandBox]]` links to the SandBox
+page, but the link will appear like this: [[foo_bar|SandBox]].
+
+To link to an anchor inside a page, you can use something like
+`\[[WikiLink#foo]]` .
+
+If the file linked to by a WikiLink looks like an image, it will
+be displayed inline on the page.
+
+---
+
+You can also put an url in a WikiLink, to link to an external page.
+Email addresses can also be used to generate a mailto link.
diff --git a/backend/ikistrap/basewiki/index.mdwn b/backend/ikistrap/basewiki/index.mdwn
new file mode 100644
index 0000000..4187c11
--- /dev/null
+++ b/backend/ikistrap/basewiki/index.mdwn
@@ -0,0 +1,7 @@
+Welcome to your new wiki.
+
+All wikis are supposed to have a [[SandBox]], so this one does too.
+
+----
+
+This wiki is powered by [[ikiwiki]].
diff --git a/backend/ikistrap/basewiki/local.css b/backend/ikistrap/basewiki/local.css
new file mode 100644
index 0000000..a0dec8c
--- /dev/null
+++ b/backend/ikistrap/basewiki/local.css
@@ -0,0 +1,3 @@
+/* ikiwiki local style sheet */
+
+/* Add local styling here, instead of modifying style.css. */
diff --git a/backend/ikistrap/basewiki/recentchanges.mdwn b/backend/ikistrap/basewiki/recentchanges.mdwn
new file mode 100644
index 0000000..3383fc7
--- /dev/null
+++ b/backend/ikistrap/basewiki/recentchanges.mdwn
@@ -0,0 +1,7 @@
+[[!if test="enabled(meta)" then="""
+[[!meta title="RecentChanges"]]
+"""]]
+Recent changes to this wiki:
+
+[[!inline pages="internal(recentchanges/change_*) and !*/Discussion"
+template=recentchanges show=0]]
diff --git a/backend/ikistrap/basewiki/sandbox.mdwn b/backend/ikistrap/basewiki/sandbox.mdwn
new file mode 100644
index 0000000..c66534f
--- /dev/null
+++ b/backend/ikistrap/basewiki/sandbox.mdwn
@@ -0,0 +1,32 @@
+This is the SandBox, a page anyone can edit to learn how to use the wiki.
+
+----
+
+Here's a paragraph.
+
+Here's another one with *emphasised* text.
+
+# Header
+
+## Subheader
+
+> This is a blockquote.
+>
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+
+Numbered list
+
+1. First item.
+1. Another.
+1. And another..
+
+Bulleted list
+
+* *item*
+* item
+
+[[ikiwiki/WikiLink]]
diff --git a/backend/ikistrap/basewiki/shortcuts.mdwn b/backend/ikistrap/basewiki/shortcuts.mdwn
new file mode 100644
index 0000000..1748a02
--- /dev/null
+++ b/backend/ikistrap/basewiki/shortcuts.mdwn
@@ -0,0 +1,86 @@
+[[!if test="enabled(shortcut)"
+ then="This wiki has shortcuts **enabled**."
+ else="This wiki has shortcuts **disabled**."]]
+
+Some examples of using shortcuts include:
+
+ \[[!google foo]]
+ \[[!wikipedia War_of_1812]]
+ \[[!debbug 12345]]
+ Check the \[[!google ikiwiki desc="google search for %s"]].
+
+This page controls what shortcut links the wiki supports.
+
+* [[!shortcut name=google url="https://encrypted.google.com/search?q=%s"]]
+* [[!shortcut name=archive url="http://web.archive.org/*/%S"]]
+* [[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]]
+* [[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]]
+* [[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]]
+* [[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]]
+* [[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]]
+* [[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]]
+* [[!shortcut name=deblist url="https://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]]
+* [[!shortcut name=debpkg url="http://packages.debian.org/%s"]]
+* [[!shortcut name=debpkgsid url="http://packages.debian.org/sid/%s"]]
+* [[!shortcut name=debpts url="http://packages.qa.debian.org/%s"]]
+* [[!shortcut name=debmsg url="https://lists.debian.org/msgid-search/%s"]]
+* [[!shortcut name=debrt url="https://rt.debian.org/Ticket/Display.html?id=%s"]]
+* [[!shortcut name=debss url="http://snapshot.debian.org/package/%s/"]]
+ * Usage: `\[[!debss package]]` or `\[[!debss package/version]]`. See <http://snapshot.debian.org/> for details.
+* [[!shortcut name=debwiki url="https://wiki.debian.org/%S"]]
+* [[!shortcut name=fdobug url="https://bugs.freedesktop.org/show_bug.cgi?id=%s" desc="freedesktop.org bug #%s"]]
+* [[!shortcut name=fdolist url="http://lists.freedesktop.org/mailman/listinfo/%s" desc="%s@lists.freedesktop.org"]]
+* [[!shortcut name=gnomebug url="https://bugzilla.gnome.org/show_bug.cgi?id=%s" desc="GNOME bug #%s"]]
+* [[!shortcut name=linuxbug url="https://bugzilla.kernel.org/show_bug.cgi?id=%s" desc="Linux bug #%s"]]
+* [[!shortcut name=mozbug url="https://bugzilla.mozilla.org/show_bug.cgi?id=%s" desc="Mozilla bug #%s"]]
+* [[!shortcut name=gnulist url="https://lists.gnu.org/mailman/listinfo/%s" desc="%s@gnu.org"]]
+* [[!shortcut name=marcmsg url="http://marc.info/?i=%s"]]
+* [[!shortcut name=marclist url="http://marc.info/?l=%s"]]
+* [[!shortcut name=gmane url="http://dir.gmane.org/gmane.%s" desc="gmane.%s"]]
+* [[!shortcut name=gmanemsg url="http://mid.gmane.org/%s"]]
+* [[!shortcut name=cpan url="http://search.cpan.org/search?mode=dist&query=%s"]]
+* [[!shortcut name=ctan url="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s"]]
+* [[!shortcut name=hoogle url="http://haskell.org/hoogle/?q=%s"]]
+* [[!shortcut name=iki url="http://ikiwiki.info/%S/"]]
+* [[!shortcut name=ljuser url="http://%s.livejournal.com/"]]
+* [[!shortcut name=rfc url="https://www.ietf.org/rfc/rfc%s.txt" desc="RFC %s"]]
+* [[!shortcut name=c2 url="http://c2.com/cgi/wiki?%s"]]
+* [[!shortcut name=meatballwiki url="http://www.usemod.com/cgi-bin/mb.pl?%s"]]
+* [[!shortcut name=emacswiki url="http://www.emacswiki.org/cgi-bin/wiki/%s"]]
+* [[!shortcut name=haskellwiki url="http://haskell.org/haskellwiki/%s"]]
+* [[!shortcut name=dict url="http://www.dict.org/bin/Dict?Form=Dict1&Strategy=*&Database=*&Query=%s"]]
+* [[!shortcut name=imdb url="http://imdb.com/find?q=%s"]]
+* [[!shortcut name=gpg url="http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&exact=on&search=0x%s"]]
+* [[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]]
+* [[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain"]]
+* [[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]]
+* [[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]]
+* [[!shortcut name=man url="http://manpages.debian.org/%s"]]
+* [[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]]
+* [[!shortcut name=cpanrt url="https://rt.cpan.org/Ticket/Display.html?id=%s" desc="CPAN RT#%s"]]
+* [[!shortcut name=novellbug url="https://bugzilla.novell.com/show_bug.cgi?id=%s" desc="bug %s"]]
+* [[!shortcut name=ubupkg url="http://packages.ubuntu.com/%s"]]
+* [[!shortcut name=mozillazinekb url="http://kb.mozillazine.org/%s"]]
+* [[!shortcut name=freebsdwiki url="http://wiki.freebsd.org/%s"]]
+* [[!shortcut name=hackage url="http://hackage.haskell.org/package/%s"]]
+* [[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]]
+* [[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]]
+* [[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]]
+
+To add a new shortcut, use the `shortcut`
+[[ikiwiki/directive]]. In the url, "%s" is replaced with the
+text passed to the named shortcut, after [[!wikipedia url_encoding]]
+it, and '%S' is replaced with the raw, non-encoded text.
+Additionally, `%W` is replaced with the text encoded just right for
+Wikipedia. The optional `desc` parameter controls the description of
+the link.
+
+Remember that the `name` you give the shortcut will become a new
+[[ikiwiki/directive]]. Avoid using a `name` that conflicts
+with an existing directive. These directives also accept a `desc`
+parameter that will override the one provided at definition time.
+
+If you come up with a shortcut that you think others might find useful,
+consider contributing it to the [shortcuts page on the ikiwiki
+wiki](http://ikiwiki.info/shortcuts/), so that future versions of
+ikiwiki will include your shortcut in the standard underlay.
diff --git a/backend/ikistrap/basewiki/style.css b/backend/ikistrap/basewiki/style.css
new file mode 100644
index 0000000..c68017d
--- /dev/null
+++ b/backend/ikistrap/basewiki/style.css
@@ -0,0 +1,191 @@
+/* There isn't much space between the Bootstrap navbar and the page content */
+#header {
+ margin-bottom: 1em;
+}
+
+/* Ensure the footer is pushed down to the bottom of the screen,
+ * if the main content doesn't fill it. */
+body, html {
+ height: 100%;
+}
+
+#notfooter {
+ min-height: 100%;
+ padding-bottom: 2em;
+}
+
+#footer {
+ position: relative;
+ margin-top: -2em;
+ height: 2em;
+ color: grey;
+ border-top: 1px solid lightgrey;
+}
+
+#pagedate {
+ float: right;
+}
+
+/* Bootstrap's navbar packs everything without margins or padding.
+ * Ensure the search form has some space. */
+
+#searchform {
+ margin-left: 1em;
+}
+
+.parentlinks {
+ margin-right: 1em;
+}
+
+/* Alignment of header and footer items of the default inline pages.
+ * Using flexbox layout here, since it can wrap when things get too crowded.
+ * It's a bit better than floats. */
+.inlineheader {
+ display: flex;
+}
+
+.inlineheader header {
+ flex: 1 1 auto;
+}
+
+.inlineheader {
+ flex: 0 1 auto;
+}
+
+.inlinefooter {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.inlinefooter .pageinfo {
+ flex: 1 1 auto;
+}
+
+.inlinefooter .tags {
+ flex: 0 1 auto;
+}
+
+.inline-actions {
+ display: inline;
+}
+
+.inline-actions ul, .inline-actions li {
+ list-style-type: none;
+ display: inline;
+}
+
+/* Popups */
+/* popup template and backlinks hiding */
+.popup .balloon,
+.popup .paren,
+.popup .expand {
+ position: absolute;
+ z-index: 1000;
+ display: none;
+ color: #373a3c;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: .25rem;
+}
+
+.balloon ul {
+ list-style: none;
+ margin: 0;
+ padding: 0.5em;
+}
+
+.popup:hover .balloon,
+.popup:focus .balloon {
+ display: inline;
+}
+
+/* Table style, similar to Bootstrap .table-border and with .table-inverse headers */
+table {
+ margin-bottom: 1em;
+ background-color: white;
+ display: block;
+ overflow: auto;
+}
+
+table td, table th {
+ border: 1px solid #eceeef;
+ padding: 0.5em;
+}
+
+table th {
+ color: #eceeef;
+ background-color: #373a3c;
+ border-color: #55595c;
+}
+
+table tr:hover {
+ background-color: #f5f5f5;
+}
+
+/* Rounded corners on tables */
+table {
+ border-collapse: separate;
+}
+
+table tr:first-child td:first-child, table tr:first-child th:first-child {
+ border-top-left-radius: 0.25rem;
+}
+table tr:first-child td:last-child, table tr:first-child th:last-child {
+ border-top-right-radius: 0.25rem;
+}
+table tr:last-child td:first-child {
+ border-bottom-left-radius: 0.25rem;
+}
+table tr:last-child td:last-child {
+ border-bottom-right-radius: 0.25rem;
+}
+
+/* Improve look of calendars */
+.month-calendar td,
+.month-calendar th,
+.year-calendar td,
+.year-calendar th {
+ min-width: 2.5em;
+ text-align: center;
+}
+
+.month-calendar-day-link, .year-calendar-month-link {
+ background-color: #d9edf7;
+}
+
+/* Give RSS and Atom buttons an orange color */
+.feedbutton {
+ background: #ff8000;
+ border-color: #e07000;
+ color: white;
+ font-weight: bold;
+}
+
+.feedbutton:hover {
+ background: #ffc080;
+ border-color: #e07000;
+}
+
+/* Carousel alignment */
+.carousel-page {
+ margin: 1em;
+}
+
+.carousel-image {
+ margin: auto;
+}
+
+/* Bootstrap 4.0.0-alpha.2 forgot to define a blockquote style? */
+blockquote {
+ border-left: 4px solid rgba(0,0,0,.1);
+ padding-left: 0.5em;
+}
+
+/* Fix image width in cards. */
+.card-img-top, .card-img-bottom {
+ width: 100%;
+ height: auto;
+}
diff --git a/backend/ikistrap/basewiki/templates.mdwn b/backend/ikistrap/basewiki/templates.mdwn
new file mode 100644
index 0000000..378e579
--- /dev/null
+++ b/backend/ikistrap/basewiki/templates.mdwn
@@ -0,0 +1,100 @@
+[[Ikiwiki]] uses many templates for many purposes. By editing its templates,
+you can fully customise its appearance, and avoid duplicate content.
+
+Ikiwiki uses the HTML::Template module as its template engine. This
+supports things like conditionals and loops in templates and is pretty
+easy to learn. All you really need to know to modify templates is this:
+
+* To insert the value of a template variable, use `<TMPL_VAR variable>`.
+* To make a block of text conditional on a variable being set use
+ `<TMPL_IF variable>text</TMPL_IF>`.
+* To use one block of text if a variable is set and a second if it's not,
+ use `<TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF>`
+
+[[!if test="enabled(template) or enabled(edittemplate)" then="""
+## template pages
+
+Template pages are regular wiki pages containing a
+[[!iki ikiwiki/directive/templatebody desc="templatebody directive"]],
+used as templates for other pages. The parts of the template
+page outside the directive can be used to document it.
+"""]]
+
+[[!if test="enabled(template)" then="""
+The [[!iki ikiwiki/directive/template desc="template directive"]] allows
+template pages to be filled out and inserted into other pages in the wiki.
+"""]]
+
+[[!if test="enabled(edittemplate)" then="""
+The [[!iki ikiwiki/directive/edittemplate desc="edittemplate directive"]] can
+be used to make new pages default to containing text from a template
+page, which can be filled out as the page is edited.
+"""]]
+
+[[!if test="(enabled(template) or enabled(edittemplate))
+and enabled(inline)" then="""
+These template pages are currently available:
+
+[[!inline pages="templates/* and !*.tmpl and !templates/*/* and !*/discussion"
+feeds=no archive=yes sort=title template=titlepage
+rootpage=templates postformtext="Add a new template page named:"]]
+"""]]
+
+If the template does not contain a `templatebody` directive, the entire
+source of the page is used for the template. This is deprecated.
+
+## template files
+
+Template files are unlike template pages in that they have the extension
+`.tmpl`. Template files are used extensively by Ikiwiki to generate html.
+They can contain html that would not normally be allowed on a wiki page.
+
+Template files are located in `/usr/share/ikiwiki/templates` by default;
+the `templatedir` setting can be used to make another directory be
+searched first. Customised template files can also be placed inside the
+"templates/" directory in your wiki's source -- files placed there override
+ones in the `templatedir`.
+
+Here is a full list of the template files used:
+
+* `page.tmpl` - Used for displaying all regular wiki pages. This is the
+ key template to customise to change the look and feel of Ikiwiki.
+ [[!if test="enabled(pagetemplate)" then="""
+ (The [[!iki ikiwiki/directive/pagetemplate desc="pagetemplate directive"]]
+ can be used to make a page use a different template than `page.tmpl`.)"""]]
+* `rsspage.tmpl` - Used for generating rss feeds for blogs.
+* `rssitem.tmpl` - Used for generating individual items on rss feeds.
+* `atompage.tmpl` - Used for generating atom feeds for blogs.
+* `atomitem.tmpl` - Used for generating individual items on atom feeds.
+* `inlinepage.tmpl` - Used for displaying a post in a blog.
+* `archivepage.tmpl` - Used for listing a page in a blog archive page.
+* `titlepage.tmpl` - Used for listing a page by title in a blog archive page.
+* `microblog.tmpl` - Used for showing a microblogging post inline.
+* `blogpost.tmpl` - Used for a form to add a post to a blog (and rss/atom links)
+* `feedlink.tmpl` - Used to add rss/atom links if `blogpost.tmpl` is not used.
+* `aggregatepost.tmpl` - Used by the aggregate plugin to create
+ a page for a post.
+* `searchform.tmpl`, `googleform.tmpl` - Used by the search plugin
+ and google plugin to add search forms to wiki pages.
+* `searchquery.tmpl` - This is a Omega template, used by the
+ search plugin.
+* `comment.tmpl` - Used by the comments plugin to display a comment.
+* `change.tmpl` - Used to create a page describing a change made to the wiki.
+* `recentchanges.tmpl` - Used for listing a change on the RecentChanges page.
+* `autoindex.tmpl` - Filled in by the autoindex plugin to make index pages.
+* `autotag.tmpl` - Filled in by the tag plugin to make tag pages.
+* `calendarmonth.tmpl`, `calendaryear.tmpl` - Used by ikiwiki-calendar to
+ make calendar archive pages.
+* `trails.tmpl` - Used by the trail plugin to generate links on each page
+ that is a member of a trail.
+* `notifyemail.tmpl` - Used by the notifymail plugin to generate mails about
+ changed pages.
+* `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`,
+ `editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`,
+ `editcomment.tmpl` `commentmoderation.tmpl`, `renamesummary.tmpl`,
+ `passwordmail.tmpl`, `emailauth.tmpl`, `login-selector.tmpl`,
+ `revert.tmpl` - Parts of ikiwiki's user interface; do not normally need
+ to be customised.
+
+
+[[!meta robots="noindex, follow"]]
diff --git a/backend/ikistrap/basewiki/templates/note.mdwn b/backend/ikistrap/basewiki/templates/note.mdwn
new file mode 100644
index 0000000..8de7374
--- /dev/null
+++ b/backend/ikistrap/basewiki/templates/note.mdwn
@@ -0,0 +1,12 @@
+[[!templatebody <<ENDBODY
+<div class="notebox">
+<TMPL_VAR text>
+</div>
+ENDBODY]]
+
+Use this template to insert a note into a page. The note will be styled to
+float to the right of other text on the page. This template has one
+parameter:
+<ul>
+<li>`text` - the text to display in the note
+</ul>
diff --git a/backend/ikistrap/basewiki/templates/popup.mdwn b/backend/ikistrap/basewiki/templates/popup.mdwn
new file mode 100644
index 0000000..b721a95
--- /dev/null
+++ b/backend/ikistrap/basewiki/templates/popup.mdwn
@@ -0,0 +1,17 @@
+Use this template to create a popup window that is displayed when the mouse
+is over part of the page. This template has two parameters:
+<ul>
+<li>`mouseover` - This is the text or other content that triggers the
+popup.
+<li>`popup` - This should be the content of the popup window. It can be
+anything, even images or a whole little wiki page, but should not be too
+large for good usability.
+</ul>
+Note that browsers that do not support the CSS will display the popup
+inline in the page, inside square brackets.
+
+[[templatebody <<ENDBODY
+<span class="popup"><TMPL_VAR mouseover>
+<span class="paren">[</span><span class="balloon"><TMPL_VAR popup></span><span class="paren">]</span>
+</span>
+ENDBODY]]
diff --git a/backend/ikistrap/example.setup b/backend/ikistrap/example.setup
new file mode 100644
index 0000000..ca7525e
--- /dev/null
+++ b/backend/ikistrap/example.setup
@@ -0,0 +1,400 @@
+# IkiWiki::Setup::Yaml - YAML formatted setup file
+#
+# Setup file for ikiwiki.
+#
+# Passing this to ikiwiki --setup will make ikiwiki generate
+# wrappers and build the wiki.
+#
+# Remember to re-run ikiwiki --setup any time you edit this file.
+#
+# name of the wiki
+wikiname: Ikistrap example
+# contact email for wiki
+adminemail: me@example.com
+# users who are wiki admins
+adminuser: []
+# users who are banned from the wiki
+banned_users: []
+# where the source of the wiki is located
+srcdir: example
+# where to build the wiki
+destdir: example.html
+# base url to the wiki
+url: file://example.html/
+# url to the ikiwiki.cgi
+cgiurl: cgi
+# do not adjust cgiurl if CGI is accessed via different URL
+reverse_proxy: 0
+# filename of cgi wrapper to generate
+cgi_wrapper: example/cgi_wrapper
+# mode for cgi_wrapper (can safely be made suid)
+cgi_wrappermode: 06755
+# number of seconds to delay CGI requests when overloaded
+cgi_overload_delay: ''
+# message to display when overloaded (may contain html)
+cgi_overload_message: ''
+# enable optimization of only refreshing committed changes?
+only_committed_changes: 0
+# rcs backend to use
+rcs: ''
+# plugins to add to the default configuration
+add_plugins:
+- 404
+- goodstuff
+- favicon
+- poll
+- google
+- sidebar
+- highlight
+- typography
+- comments
+- calendar
+- ikistrap
+# plugins to disable
+disable_plugins: []
+# additional directory to search for template files
+templatedir: templates
+# base wiki source location
+underlaydir: basewiki
+# display verbose messages?
+verbose: 1
+# log to syslog?
+#syslog: 1
+# create output files named page/index.html?
+usedirs: 1
+# use '!'-prefixed preprocessor directives?
+prefix_directives: 1
+# use page/index.mdwn source files
+indexpages: 1
+# enable Discussion pages?
+discussion: 1
+# name of Discussion pages
+discussionpage: Discussion
+# use elements new in HTML5 like <section>?
+html5: 0
+# only send cookies over SSL connections?
+sslcookie: 0
+# extension to use for new pages
+default_pageext: mdwn
+# extension to use for html files
+htmlext: html
+# strftime format string to display date
+timeformat: '%c'
+# UTF-8 locale to use
+#locale: en_US.UTF-8
+# put user pages below specified page
+userdir: ''
+# how many backlinks to show before hiding excess (0 to show all)
+numbacklinks: 10
+# attempt to hardlink source files? (optimisation for large files)
+hardlink: 0
+# force ikiwiki to use a particular umask (keywords public, group or private, or a number)
+umask: 18
+# group for wrappers to run in
+#wrappergroup: ikiwiki
+# extra library and plugin directories
+libdirs: []
+# extra library and plugin directory (searched after libdirs)
+libdir: lib
+# environment variables
+ENV: {}
+# time zone name
+timezone: :/etc/localtime
+# regexp of normally excluded files to include
+#include: ^\.htaccess$
+# regexp of files that should be skipped
+#exclude: ^(*\.private|Makefile)$
+# specifies the characters that are allowed in source filenames
+wiki_file_chars: -[:alnum:]+/.:_
+# allow symlinks in the path leading to the srcdir (potentially insecure)
+allow_symlinks_before_srcdir: 0
+# cookie control
+cookiejar:
+ file: /home/users/guus/.ikiwiki/cookies
+# set custom user agent string for outbound HTTP requests e.g. when fetching aggregated RSS feeds
+useragent: ikiwiki/3.20160121
+# theme has a responsive layout? (mobile-optimized)
+responsive_layout: 1
+# try harder to produce deterministic output
+deterministic: 0
+
+######################################################################
+# core plugins
+# (editpage, htmlscrubber, inline, link, meta, parentlinks, templatebody)
+######################################################################
+
+# htmlscrubber plugin
+# PageSpec specifying pages not to scrub
+#htmlscrubber_skip: '!*/Discussion'
+
+# inline plugin
+# enable rss feeds by default?
+rss: 1
+# enable atom feeds by default?
+atom: 1
+# allow rss feeds to be used?
+#allowrss: 0
+# allow atom feeds to be used?
+#allowatom: 0
+# urls to ping (using XML-RPC) on feed update
+pingurl: []
+
+######################################################################
+# auth plugins
+# (anonok, blogspam, emailauth, httpauth, lockedit, moderatedcomments,
+# opendiscussion, openid, passwordauth, signinedit)
+######################################################################
+
+# anonok plugin
+# PageSpec to limit which pages anonymous users can edit
+#anonok_pagespec: '*/discussion'
+
+# blogspam plugin
+# PageSpec of pages to check for spam
+#blogspam_pagespec: postcomment(*)
+# options to send to blogspam server
+#blogspam_options: blacklist=1.2.3.4,blacklist=8.7.6.5,max-links=10
+# blogspam server JSON url
+#blogspam_server: ''
+
+# emailauth plugin
+# email address to send emailauth mails as (default: adminemail)
+#emailauth_sender: ''
+
+# httpauth plugin
+# url to redirect to when authentication is needed
+#cgiauthurl: http://example.com/wiki/auth/ikiwiki.cgi
+# PageSpec of pages where only httpauth will be used for authentication
+#httpauth_pagespec: '!*/Discussion'
+
+# lockedit plugin
+# PageSpec controlling which pages are locked
+#locked_pages: '!*/Discussion'
+
+# moderatedcomments plugin
+# PageSpec matching users or comment locations to moderate
+#moderate_pagespec: '*'
+
+# openid plugin
+# url pattern of openid realm (default is cgiurl)
+#openid_realm: ''
+# url to ikiwiki cgi to use for openid authentication (default is cgiurl)
+#openid_cgiurl: ''
+
+# passwordauth plugin
+# a password that must be entered when signing up for an account
+#account_creation_password: s3cr1t
+# cost of generating a password using Authen::Passphrase::BlowfishCrypt
+#password_cost: 8
+
+######################################################################
+# format plugins
+# (creole, highlight, hnb, html, mdwn, otl, rawhtml, rst, textile, txt)
+######################################################################
+
+# highlight plugin
+# types of source files to syntax highlight
+#tohighlight: .c .h .cpp .pl .py Makefile:make
+# location of highlight's filetypes.conf
+filetypes_conf: /etc/highlight/filetypes.conf
+# location of highlight's langDefs directory
+langdefdir: /usr/share/highlight/langDefs
+
+# mdwn plugin
+# enable multimarkdown features?
+multimarkdown: 1
+# disable use of markdown discount?
+#nodiscount: 0
+
+######################################################################
+# special-purpose plugins
+# (osm, underlay)
+######################################################################
+
+# osm plugin
+# the default zoom when you click on the map link
+#osm_default_zoom: 15
+# the icon shown on links and on the main map
+#osm_default_icon: ikiwiki/images/osm.png
+# the alt tag of links, defaults to empty
+#osm_alt: ''
+# the output format for waypoints, can be KML, GeoJSON or CSV (one or many, comma-separated)
+#osm_format: KML
+# the icon attached to a tag, displayed on the map for tagged pages
+#osm_tag_default_icon: icon.png
+# Url for the OpenLayers.js file
+#osm_openlayers_url: http://www.openlayers.org/api/OpenLayers.js
+# Layers to use in the map. Can be either the 'OSM' string or a type option for Google maps (GoogleNormal, GoogleSatellite, GoogleHybrid or GooglePhysical). It can also be an arbitrary URL in a syntax acceptable for OpenLayers.Layer.OSM.url parameter.
+#osm_layers:
+# OSM: GoogleSatellite
+# Google maps API key, Google layer not used if missing, see https://code.google.com/apis/console/ to get an API key
+#osm_google_apikey: ''
+
+# underlay plugin
+# extra underlay directories to add
+#add_underlays:
+#- /home/guus/wiki.underlay
+
+######################################################################
+# web plugins
+# (404, attachment, comments, editdiff, edittemplate, google, goto,
+# ikistrap, mirrorlist, remove, rename, repolist, search, theme,
+# userlist, websetup, wmd)
+######################################################################
+
+# attachment plugin
+# enhanced PageSpec specifying what attachments are allowed
+#allowed_attachments: virusfree() and mimetype(image/*) and maxsize(50kb)
+# virus checker program (reads STDIN, returns nonzero if virus found)
+#virus_checker: clamdscan -
+
+# comments plugin
+# PageSpec of pages where comments are allowed
+comments_pagespec: comments and !*/Discussion
+# PageSpec of pages where posting new comments is not allowed
+comments_closed_pagespec: ''
+# Base name for comments, e.g. "comment_" for pages like "sandbox/comment_12"
+comments_pagename: comment_
+# Interpret directives in comments?
+#comments_allowdirectives: 0
+# Allow anonymous commenters to set an author name?
+#comments_allowauthor: 0
+# commit comments to the VCS
+comments_commit: 1
+# Restrict formats for comments to (no restriction if empty)
+comments_allowformats: ''
+
+# ikistrap plugin
+# install Bootstrap css and js files locally instead of using bootstrapcdn?
+#bootstrap_local: 0
+
+# mirrorlist plugin
+# list of mirrors
+#mirrorlist: {}
+# generate links that point to the mirrors' ikiwiki CGI
+#mirrorlist_use_cgi: 1
+
+# repolist plugin
+# URIs of repositories containing the wiki's source
+#repositories:
+#- svn://svn.example.org/wiki/trunk
+
+# search plugin
+# path to the omega cgi program
+#omega_cgi: /usr/lib/cgi-bin/omega/omega
+# use google site search rather than internal xapian index?
+#google_search: 1
+
+# theme plugin
+# name of theme to enable
+#theme: actiontabs
+
+# websetup plugin
+# list of plugins that cannot be enabled/disabled via the web interface
+#websetup_force_plugins: []
+# list of additional setup field keys to treat as unsafe
+#websetup_unsafe: []
+# show unsafe settings, read-only, in web interface?
+#websetup_show_unsafe: 1
+
+######################################################################
+# widget plugins
+# (calendar, color, conditional, cutpaste, date, format, fortune,
+# graphviz, haiku, headinganchors, img, linkmap, listdirectives, map,
+# more, orphans, pagecount, pagestats, poll, polygen, postsparkline,
+# progress, shortcut, sparkline, table, template, teximg, toc, toggle,
+# version)
+######################################################################
+
+# calendar plugin
+# base of the archives hierarchy
+archivebase: archives
+# PageSpec of pages to include in the archives, if option `calendar_autocreate` is true.
+archive_pagespec: '*'
+# autocreate new calendar pages?
+calendar_autocreate: 1
+# if set, when building calendar pages, also build pages of year and month when no pages were published (building empty calendars).
+calendar_fill_gaps: 0
+
+# listdirectives plugin
+# directory in srcdir that contains directive descriptions
+#directive_description_dir: ikiwiki/directive
+
+# teximg plugin
+# Should teximg use dvipng to render, or dvips and convert?
+#teximg_dvipng: ''
+# LaTeX prefix for teximg plugin
+#teximg_prefix: '\documentclass{article}
+#
+# \usepackage[utf8]{inputenc}
+#
+# \usepackage{amsmath}
+#
+# \usepackage{amsfonts}
+#
+# \usepackage{amssymb}
+#
+# \pagestyle{empty}
+#
+# \begin{document}
+#
+#'
+# LaTeX postfix for teximg plugin
+#teximg_postfix: \end{document}
+
+######################################################################
+# other plugins
+# (aggregate, autoindex, brokenlinks, camelcase, ddate, embed, favicon,
+# filecheck, flattr, goodstuff, htmlbalance, localstyle, loginselector,
+# notifyemail, pagetemplate, pingee, pinger, prettydate, recentchanges,
+# recentchangesdiff, relativedate, rsync, sidebar, smiley,
+# sortnaturally, tag, testpagespec, trail, transient)
+######################################################################
+
+# aggregate plugin
+# enable aggregation to internal pages?
+aggregateinternal: 1
+# allow aggregation to be triggered via the web?
+#aggregate_webtrigger: 0
+
+# autoindex plugin
+# commit autocreated index pages
+#autoindex_commit: 1
+
+# camelcase plugin
+# list of words to not turn into links
+#camelcase_ignore: []
+
+# flattr plugin
+# userid or user name to use by default for Flattr buttons
+#flattr_userid: joeyh
+
+# pinger plugin
+# how many seconds to try pinging before timing out
+#pinger_timeout: 15
+
+# prettydate plugin
+# format to use to display date
+prettydateformat: '%B %o %Y'
+
+# recentchanges plugin
+# name of the recentchanges page
+recentchangespage: recentchanges
+# number of changes to track
+recentchangesnum: 25
+
+# rsync plugin
+# command to run to sync updated pages
+#rsync_command: rsync -qa --delete . user@host:/path/to/docroot/
+
+# sidebar plugin
+# show sidebar page on all pages?
+#global_sidebars: 1
+
+# tag plugin
+# parent page tags are located under
+tagbase: tag
+# autocreate new tag pages?
+#tag_autocreate: 1
+# commit autocreated tag pages
+tag_autocreate_commit: 1
diff --git a/backend/ikistrap/example/Anemones.jpg b/backend/ikistrap/example/Anemones.jpg
new file mode 100644
index 0000000..7151241
--- /dev/null
+++ b/backend/ikistrap/example/Anemones.jpg
Binary files differ
diff --git a/backend/ikistrap/example/Bootstrap_features.mdwn b/backend/ikistrap/example/Bootstrap_features.mdwn
new file mode 100644
index 0000000..12c3a08
--- /dev/null
+++ b/backend/ikistrap/example/Bootstrap_features.mdwn
@@ -0,0 +1,136 @@
+# Bootstrap features
+
+This page will contain a display of various features from Bootstrap.
+They require some manual HTML tags.
+Note that not all Markdown parsers allow Markdown markup inside all HTML tags.
+In the case of ikiwiki, adding `markdown="1"` to `div` elements usually allows markup to be used inside them.
+For a full list of features provided by Bootstrap 4, go to <http://v4-alpha.getbootstrap.com/getting-started/introduction/>.
+
+<div class="jumbotron" markdown="1">
+## Jumbotron
+
+It's big and in your face.
+
+---
+
+You can still use Markdown syntax inside HTML blocks, if you are careful.
+
+<a class="btn btn-primary btn-large" href="#">Button</a>
+</div>
+
+## Labels <span class="label label-info">Hi!</span>
+
+Span elements work inside Markdown headings.
+
+<div class="card card-block" markdown="1">
+## Cards
+
+Put a border with soft round corners around your content.
+</div>
+
+
+## Card decks
+
+These require some more work.
+You can use the `\[[!img]]` directive, but make sure to add `class="card-img-top"` or `class="card-img-bottom"` where appropriate.
+For images in cards to work properly, they need to have their width forced to 100% of their container.
+This is done in the `style.css` file that comes with ikistrap.
+
+Another issue is that due to all the nested HTML tags, even with `markdown="1"`, Markdown markup does not get parsed anymore.
+
+<div class="card-deck">
+<div class="card-deck-wrapper">
+<div class="card">
+[[!img Lemonshark.jpg alt="Lemon shark" class="card-img-top"]]
+<div class="card-block">
+<p class="card-text">
+A lemon shark and his little friends are out for a swim.
+</p>
+<p><a href="#" class="btn btn-danger">Escape</a></p>
+</div>
+</div>
+<div class="card">
+[[!img Anemones.jpg alt="Anemones" class="card-img-top"]]
+<div class="card-block">
+<p class="card-text">
+Anemones look really nice and are much less dangerous than lemon sharks.
+</p>
+<p><a href="#" class="btn btn-success">Admire</a></p>
+</div>
+</div>
+<div class="card">
+[[!img Sea_Star.jpg alt="Sea star" class="card-img-top"]]
+<div class="card-block">
+<p class="card-text">
+Sea stars are also less dangerous than lemon sharks, but they are slightly more dangerous than
+anemones, <em>especially</em> when stepped on.
+</p>
+<p><a href="#" class="btn btn-warning">Sidestep</a></p>
+</div>
+</div>
+</div>
+</div>
+
+## Card columns
+
+These can be created by writing the outer card-columns `div` elements yourself,
+and using `\[[!inline]]` with `template="simplecard"` to generate the cards.
+
+<div class="card-columns">
+[[!inline pages="sample_text/* and !*/Discussion" template="simplecard" feeds="no"]]
+</div>
+
+
+## Carousel
+
+These can be created by writing the outer two carousel `div` elements yourself,
+and using `\[[!inline]]` with `template="carouselpage"` to generate the carousel items.
+
+<p>
+<div id="carousel-example-pages" class="carousel slide" data-ride="carousel">
+<ol class="carousel-indicators"></ol>
+<div class="carousel-inner" role="listbox">
+[[!inline pages="sample_text/* and !*/Discussion" template="carouselpage" feeds="no"]]
+</div>
+<a class="left carousel-control" href="#carousel-example-pages" role="button" data-slide="prev">
+<span class="icon-prev" aria-hidden="true"></span>
+<span class="sr-only">Previous</span>
+</a>
+<a class="right carousel-control" href="#carousel-example-pages" role="button" data-slide="next">
+<span class="icon-next" aria-hidden="true"></span>
+<span class="sr-only">Next</span>
+</a>
+</div>
+</p>
+
+If you only want to show images, use `template="carouselimage"`, and select your images directly with the `pages` parameter.
+
+<p>
+<div id="carousel-example-images" class="carousel slide" data-ride="carousel">
+<div class="carousel-inner" role="listbox">
+[[!inline pages="*.jpg" template="carouselimage" feeds="no"]]
+</div>
+<a class="left carousel-control" href="#carousel-example-images" role="button" data-slide="prev">
+<span class="icon-prev" aria-hidden="true"></span>
+<span class="sr-only">Previous</span>
+</a>
+<a class="right carousel-control" href="#carousel-example-images" role="button" data-slide="next">
+<span class="icon-next" aria-hidden="true"></span>
+<span class="sr-only">Next</span>
+</a>
+</div>
+</p>
+
+## Progress bars
+
+Ikistrap also provides a progress directive which works in the same way as the progress plugin,
+but it also allows an extra class to be specified to change the style per bar.
+
+[[!progress totalpages="* and !*/Discussion" donepages="*/Discussion"]]
+[[!progress percent="33%"]]
+[[!progress percent="66%" class="progress-success progress-striped"]]
+
+## Other stuff
+
+Goes here.
+
diff --git a/backend/ikistrap/example/Calendars.mdwn b/backend/ikistrap/example/Calendars.mdwn
new file mode 100644
index 0000000..5d8e152
--- /dev/null
+++ b/backend/ikistrap/example/Calendars.mdwn
@@ -0,0 +1,10 @@
+# Calendar
+
+This is an example of the ikiwiki calendar function.
+Here is a monthly calendar:
+
+[[!calendar type="month"]]
+
+And this is a yearly calendar:
+
+[[!calendar type="year"]]
diff --git a/backend/ikistrap/example/Comments.mdwn b/backend/ikistrap/example/Comments.mdwn
new file mode 100644
index 0000000..24cc744
--- /dev/null
+++ b/backend/ikistrap/example/Comments.mdwn
@@ -0,0 +1,3 @@
+# Comments
+
+This is an example of a page where comments are allowed.
diff --git a/backend/ikistrap/example/Comments/comment_1._comment b/backend/ikistrap/example/Comments/comment_1._comment
new file mode 100644
index 0000000..ab9901d
--- /dev/null
+++ b/backend/ikistrap/example/Comments/comment_1._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+username="Anonymous Coward"
+subject="Indeed"
+date="2009-06-02T19:05:00Z"
+content="""
+Hi, I just want to say that I totally agree with you.
+Have a nice day!
+"""
+]]
diff --git a/backend/ikistrap/example/Comments/comment_2._comment b/backend/ikistrap/example/Comments/comment_2._comment
new file mode 100644
index 0000000..5b29715
--- /dev/null
+++ b/backend/ikistrap/example/Comments/comment_2._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+username="Pseudonymous Person"
+subject="I am disagree"
+date="2009-06-02T19:05:01Z"
+content="""
+I don't think so. Eggs should neither be capped at the top or at the bottom.
+Symmetry is only attained by slicing it in half in a plane spanned by the line between the top and bottom.
+"""
+]]
diff --git a/backend/ikistrap/example/Inline_pages.mdwn b/backend/ikistrap/example/Inline_pages.mdwn
new file mode 100644
index 0000000..46d540e
--- /dev/null
+++ b/backend/ikistrap/example/Inline_pages.mdwn
@@ -0,0 +1,9 @@
+# Inline pages
+
+Here is an example of inline pages using the default inlining theme:
+
+[[!inline pages="sample_text/* and !*/Discussion" reverse="yes" limit="3"]]
+
+Here is an example of inlining with actions enabled:
+
+[[!inline pages="sample_text/* and !*/Discussion" reverse="yes" skip="3" limit="2" actions="1"]]
diff --git a/backend/ikistrap/example/Lemonshark.jpg b/backend/ikistrap/example/Lemonshark.jpg
new file mode 100644
index 0000000..e568a5b
--- /dev/null
+++ b/backend/ikistrap/example/Lemonshark.jpg
Binary files differ
diff --git a/backend/ikistrap/example/Sea_Star.jpg b/backend/ikistrap/example/Sea_Star.jpg
new file mode 100644
index 0000000..5fb9001
--- /dev/null
+++ b/backend/ikistrap/example/Sea_Star.jpg
Binary files differ
diff --git a/backend/ikistrap/example/index.mdwn b/backend/ikistrap/example/index.mdwn
new file mode 100644
index 0000000..fb9d0c2
--- /dev/null
+++ b/backend/ikistrap/example/index.mdwn
@@ -0,0 +1,24 @@
+# Welcome
+
+This is an example wiki to show off the ikistrap theme.
+Ikistrap tries to provide a fully-featured, modern looking HTML5 theme for ikiwiki.
+It uses Bootstrap 4 and Fonts Awesome.
+
+## Features
+
+Ikistrap has the following features:
+
+* Good use of HTML5 semantic elements.
+* Responsive layout.
+* Standards-compliant.
+* Compatible with text-only browsers.
+* Header supporting parentlinks, wiki actions, search form, language selection and trails.
+* Sidebar styled as a Boostrap 4 card, using the Bootstrap 4 grid system.
+* Footer that is pushed down to the bottom of the screen with tags, backlinks, copyright, license and modification date.
+* [[Inline pages]] that are by default styled as Bootstrap 4 cards.
+* [[Comments]]
+* [[Calendars]]
+
+Note that ikistrap doesn't add any special support for Bootstrap to the Markdown language.
+If you want to make use of [[Bootstrap features]] inside your text, you will have to manually add the appropriate HTML tags.
+
diff --git a/backend/ikistrap/example/inlinetest.mdwn b/backend/ikistrap/example/inlinetest.mdwn
new file mode 100644
index 0000000..95cebf2
--- /dev/null
+++ b/backend/ikistrap/example/inlinetest.mdwn
@@ -0,0 +1 @@
+[[!inline pages="sample_text/*"]]
diff --git a/backend/ikistrap/example/sample_text/Donec_dapibus.mdwn b/backend/ikistrap/example/sample_text/Donec_dapibus.mdwn
new file mode 100644
index 0000000..b995fa6
--- /dev/null
+++ b/backend/ikistrap/example/sample_text/Donec_dapibus.mdwn
@@ -0,0 +1 @@
+Donec dapibus orci sit amet elit. Maecenas rutrum ultrices lectus. Aliquam suscipit, lacus a iaculis adipiscing, eros orci pellentesque nisl, non pharetra dolor urna nec dolor. Integer cursus dolor vel magna. Integer ultrices feugiat sem. Proin nec nibh. Duis eu dui quis nunc sagittis lobortis. Fusce pharetra, enim ut sodales luctus, lectus arcu rhoncus purus, in fringilla augue elit vel lacus. In hac habitasse platea dictumst. Aliquam erat volutpat. Fusce iaculis elit id tellus. Ut accumsan malesuada turpis. Suspendisse potenti. Vestibulum lacus augue, lobortis mattis, laoreet in, varius at, nisi. Nunc gravida. Phasellus faucibus. In hac habitasse platea dictumst. Integer tempor lacus eget lectus. Praesent fringilla augue fringilla dui.
diff --git a/backend/ikistrap/example/sample_text/Donec_semper.mdwn b/backend/ikistrap/example/sample_text/Donec_semper.mdwn
new file mode 100644
index 0000000..bdcb1ab
--- /dev/null
+++ b/backend/ikistrap/example/sample_text/Donec_semper.mdwn
@@ -0,0 +1 @@
+Donec semper, sem nec tristique tempus, justo neque commodo nisl, ut gravida sem tellus suscipit nunc. Aliquam erat volutpat. Ut tincidunt pretium elit. Aliquam pulvinar. Nulla cursus. Suspendisse potenti. Etiam condimentum hendrerit felis. Duis iaculis aliquam enim. Donec dignissim augue vitae orci. Curabitur luctus felis a metus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In varius neque at enim. Suspendisse massa nulla, viverra in, bibendum vitae, tempor quis, lorem.
diff --git a/backend/ikistrap/example/sample_text/Lorem_ipsum.mdwn b/backend/ikistrap/example/sample_text/Lorem_ipsum.mdwn
new file mode 100644
index 0000000..f0199bc
--- /dev/null
+++ b/backend/ikistrap/example/sample_text/Lorem_ipsum.mdwn
@@ -0,0 +1,4 @@
+[[!meta author="Cicero"]]
+[[!meta date="45 B.C."]]
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at ante. Mauris eleifend, quam a vulputate dictum, massa quam dapibus leo, eget vulputate orci purus ut lorem. In fringilla mi in ligula. Pellentesque aliquam quam vel dolor. Nunc adipiscing. Sed quam odio, tempus ac, aliquam molestie, varius ac, tellus. Vestibulum ut nulla aliquam risus rutrum interdum. Pellentesque lorem. Curabitur sit amet erat quis risus feugiat viverra. Pellentesque augue justo, sagittis et, lacinia at, venenatis non, arcu. Nunc nec libero. In cursus dictum risus. Etiam tristique nisl a nulla. Ut a orci. Curabitur dolor nunc, egestas at, accumsan at, malesuada nec, magna.
diff --git a/backend/ikistrap/example/sample_text/Nulla_facilisi.mdwn b/backend/ikistrap/example/sample_text/Nulla_facilisi.mdwn
new file mode 100644
index 0000000..0e8a0b9
--- /dev/null
+++ b/backend/ikistrap/example/sample_text/Nulla_facilisi.mdwn
@@ -0,0 +1,2 @@
+[[!tag Cicero Latin typesetting]]
+Nulla facilisi. Nunc volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut sit amet orci vel mauris blandit vehicula. Nullam quis enim. Integer dignissim viverra velit. Curabitur in odio. In hac habitasse platea dictumst. Ut consequat, tellus eu volutpat varius, justo orci elementum dolor, sed imperdiet nulla tellus ut diam. Vestibulum ipsum ante, malesuada quis, tempus ac, placerat sit amet, elit.
diff --git a/backend/ikistrap/example/sample_text/Sed_eget.mdwn b/backend/ikistrap/example/sample_text/Sed_eget.mdwn
new file mode 100644
index 0000000..d360de3
--- /dev/null
+++ b/backend/ikistrap/example/sample_text/Sed_eget.mdwn
@@ -0,0 +1 @@
+Sed eget turpis a pede tempor malesuada. Vivamus quis mi at leo pulvinar hendrerit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque aliquet lacus vitae pede. Nullam mollis dolor ac nisi. Phasellus sit amet urna. Praesent pellentesque sapien sed lacus. Donec lacinia odio in odio. In sit amet elit. Maecenas gravida interdum urna. Integer pretium, arcu vitae imperdiet facilisis, elit tellus tempor nisi, vel feugiat ante velit sit amet mauris. Vivamus arcu. Integer pharetra magna ac lacus. Aliquam vitae sapien in nibh vehicula auctor. Suspendisse leo mauris, pulvinar sed, tempor et, consequat ac, lacus. Proin velit. Nulla semper lobortis mauris. Duis urna erat, ornare et, imperdiet eu, suscipit sit amet, massa. Nulla nulla nisi, pellentesque at, egestas quis, fringilla eu, diam.
diff --git a/backend/ikistrap/example/sidebar.mdwn b/backend/ikistrap/example/sidebar.mdwn
new file mode 100644
index 0000000..06f20e8
--- /dev/null
+++ b/backend/ikistrap/example/sidebar.mdwn
@@ -0,0 +1,9 @@
+This is the sidebar.
+
+* [[/index]]
+* [[ikiwiki]]
+* [[sandbox]]
+* [[shortcuts]]
+* [[templates]]
+
+``Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam tortor augue, lacinia eget libero eget, imperdiet scelerisque neque. Nam pretium dui sit amet rhoncus commodo. Sed eget faucibus purus, vel vulputate nulla. Sed accumsan odio ac dui vulputate, non venenatis velit iaculis. Quisque efficitur orci in tellus tincidunt, non maximus nisi finibus. Vestibulum tristique id eros ut dictum. Integer congue euismod metus, at feugiat nunc sagittis quis. Curabitur iaculis mi eget volutpat sodales. Ut nec dui et mi cursus tempor ac et sem. Nulla felis neque, congue tristique ultricies a, vehicula a ante.''
diff --git a/backend/ikistrap/ikistrap.svg b/backend/ikistrap/ikistrap.svg
new file mode 100644
index 0000000..7121469
--- /dev/null
+++ b/backend/ikistrap/ikistrap.svg
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ width="2000"
+ height="2008.2758"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="ikistrap.svg"
+ inkscape:export-filename="/home/users/guus/ikistrap/basewiki/favicon.ico"
+ inkscape:export-xdpi="1.4340661"
+ inkscape:export-ydpi="1.4340661">
+ <title
+ id="title4250">Ikistrap logo</title>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10000"
+ gridtolerance="10000"
+ guidetolerance="10000"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1383"
+ inkscape:window-height="1243"
+ id="namedview2996"
+ showgrid="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="0.54618416"
+ inkscape:cx="799.9404"
+ inkscape:cy="1154.2352"
+ inkscape:window-x="1117"
+ inkscape:window-y="25"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4278"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ dotted="false"
+ spacingx="62.5"
+ spacingy="62.6"
+ empspacing="4" />
+ <sodipodi:guide
+ position="0,0"
+ orientation="0,2000"
+ id="guide4280" />
+ <sodipodi:guide
+ position="2000,0"
+ orientation="-2008.2758,0"
+ id="guide4282" />
+ <sodipodi:guide
+ position="2000,2008.2758"
+ orientation="0,-2000"
+ id="guide4284" />
+ <sodipodi:guide
+ position="0,2008.2758"
+ orientation="2008.2758,0"
+ id="guide4286" />
+ <sodipodi:guide
+ position="0,0"
+ orientation="0,2000"
+ id="guide4288" />
+ <sodipodi:guide
+ position="2000,0"
+ orientation="-2008.2758,0"
+ id="guide4290" />
+ <sodipodi:guide
+ position="2000,2008.2758"
+ orientation="0,-2000"
+ id="guide4292" />
+ <sodipodi:guide
+ position="0,2008.2758"
+ orientation="2008.2758,0"
+ id="guide4294" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3820">
+ <stop
+ id="stop3822"
+ style="stop-color:#070135;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3824"
+ style="stop-color:#612d50;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="314.62408"
+ y1="547.20599"
+ x2="427.37671"
+ y2="432.48389"
+ id="linearGradient3834"
+ xlink:href="#linearGradient3820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-52,0)" />
+ </defs>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Ikistrap logo</dc:title>
+ <cc:license
+ rdf:resource="https://www.gnu.org/licenses/gpl-2.0.html" />
+ <dc:date>2016-03-19</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Guus Sliepen</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:description>A combination of the ikiwiki and Bootstrap logos.</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ transform="matrix(15.623041,0,0,15.623041,-3987.6024,-6644.8835)">
+ <rect
+ width="128.01605"
+ height="128.54576"
+ ry="20.679518"
+ x="255.23856"
+ y="425.32587"
+ id="rect3050"
+ style="fill:url(#linearGradient3834);fill-opacity:1;stroke:none" />
+ <g
+ transform="scale(1.0052013,0.99482561)"
+ id="text3836"
+ style="font-size:109.79650116px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" />
+ </g>
+ <g
+ id="g4273"
+ transform="matrix(1.0198245,0,0,1.0897903,-19.823031,-79.425585)"
+ inkscape:export-xdpi="600"
+ inkscape:export-ydpi="600">
+ <path
+ id="text3685"
+ d="m 1625.0153,1570.6283 0,-683.54026 110.2967,0 0,-120.05098 -255.1082,0 0,803.59124 144.8115,0 m -888.37758,0 252.10673,-402.1708 124.55275,128.3045 0,273.8663 142.5609,0 0,-1132.98108 -142.5609,0 0,703.04858 -307.63014,-373.65874 -166.57077,0 257.35933,305.37974 -314.38351,498.2115 154.56561,0 m -327.13881,0 0,-683.54026 110.29684,0 0,-120.05098 -255.1083,0 0,803.59124 144.81146,0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:149.19204712px;line-height:125%;font-family:'Trebuchet MS';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect3691"
+ d="M 1589.8326,437.64677 1484.8111,545.07364 1592.4302,650.28305 1697.4517,542.85618 1589.8326,437.64677 Z"
+ style="fill:#c00040;fill-opacity:0.94117647;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect3693"
+ d="M 371.16676,437.64732 266.14528,545.07419 373.76364,650.28288 478.78512,542.85601 371.16676,437.64732 Z"
+ style="fill:#980040;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <rect
+ style="opacity:0;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:3.55577111;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2154"
+ width="1470.333"
+ height="1467.2596"
+ x="264.83359"
+ y="270.50803" />
+</svg>
diff --git a/backend/ikistrap/lib/IkiWiki/Plugin/ikistrap.pm b/backend/ikistrap/lib/IkiWiki/Plugin/ikistrap.pm
new file mode 100644
index 0000000..7c4e7f8
--- /dev/null
+++ b/backend/ikistrap/lib/IkiWiki/Plugin/ikistrap.pm
@@ -0,0 +1,103 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::ikistrap;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+ hook(type => "getsetup", id => "ikistrap", call => \&getsetup);
+ hook(type => "refresh", id => "ikistrap", call => \&refresh);
+ hook(type => "pagetemplate", id => "ikistrap", call => \&pagetemplate);
+ hook(type => "preprocess", id => "progress", call => \&progress);
+}
+
+sub getsetup() {
+ return
+ plugin => {
+ description => "Bootstrap 4 theme support",
+ section => "web",
+ safe => 1,
+ },
+ bootstrap_local => {
+ description => "install Bootstrap css and js files locally instead of using bootstrapcdn?",
+ example => 0,
+ type => "boolean",
+ default => 0,
+ rebuild => 1,
+ },
+}
+
+sub check($$) {
+ my($basename, $href) = @_;
+ my $filename = "$config{destdir}/$basename";
+ return if(-e $filename);
+ debug("Fetching missing $basename...");
+ system("/usr/bin/curl -# \"$href\" -o \"$filename\"");
+}
+
+sub refresh() {
+ return 0 unless($config{bootstrap_local});
+ mkdir("$config{destdir}/css");
+ mkdir("$config{destdir}/js");
+ mkdir("$config{destdir}/fonts");
+ check("css/bootstrap.min.css", "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css");
+ check("js/bootstrap.min.js", "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js");
+ check("css/font-awesome.min.css", "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css");
+ check("fonts/fontawesome-webfont.eot", "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/fonts/fontawesome-webfont.eot");
+ check("fonts/fontawesome-webfont.woff2", "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/fonts/fontawesome-webfont.woff2");
+ check("fonts/fontawesome-webfont.woff", "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/fonts/fontawesome-webfont.woff");
+ check("fonts/fontawesome-webfont.ttf", "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/fonts/fontawesome-webfont.ttf");
+ check("fonts/fontawesome-webfont.svg", "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/fonts/fontawesome-webfont.svg");
+ check("js/jquery.min.js", "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js");
+ check("js/tether.min.js", "https://cdnjs.cloudflare.com/ajax/libs/tether/1.2.0/js/tether.min.js");
+}
+
+sub pagetemplate(@) {
+ my %params = @_;
+ my $template = $params{template};
+
+ $template->param(bootstrap_local => $config{bootstrap_local});
+}
+
+# Emulate the progress plugin, but do it the HTML5 + Bootstrap way.
+# Also allow setting an extra class attribute.
+sub progress(@) {
+ my %params = @_;
+ my $percentage_pattern = qr/[0-9]+\%?/; # pattern to validate percentages
+ my ($fill, $value, $max);
+
+ if (defined $params{percent}) {
+ $fill = $params{percent};
+ ($fill) = $fill =~ m/($percentage_pattern)/; # fill is untainted now
+ $fill =~ s/%$//;
+ if (! defined $fill || ! length $fill || $fill > 100 || $fill < 0) {
+ error(sprintf(gettext("illegal percent value %s"), $params{percent}));
+ }
+ $value = $fill;
+ $max = "100";
+ $fill .= "%";
+ } elsif (defined $params{totalpages} and defined $params{donepages}) {
+ $max = pagespec_match_list($params{page}, $params{totalpages}, deptype => deptype("presence"));
+ $value = pagespec_match_list($params{page}, $params{donepages}, deptype => deptype("presence"));
+
+ if ($max == 0) {
+ $fill = "100%";
+ } else {
+ $fill = sprintf("%u%%", $value / $max * 100);
+ }
+ } else {
+ error(gettext("need either `percent` or `totalpages` and `donepages` parameters"));
+ }
+
+ my $class = "progress";
+ if (defined $params{class}) {
+ $class .= " $params{class}";
+ }
+
+ return <<EODIV
+<progress class="$class" value="$value" max="$max">$fill</progress>
+EODIV
+}
+
+1
diff --git a/backend/ikistrap/templates/aggregatepost.tmpl b/backend/ikistrap/templates/aggregatepost.tmpl
new file mode 100644
index 0000000..5a0f6e7
--- /dev/null
+++ b/backend/ikistrap/templates/aggregatepost.tmpl
@@ -0,0 +1,19 @@
+<TMPL_VAR CONTENT>
+<TMPL_LOOP TAGS>
+[[!tag <TMPL_VAR TAG>]]
+</TMPL_LOOP>
+<TMPL_IF TITLE>
+[[!meta title="<TMPL_VAR TITLE ESCAPE=HTML>"]]
+</TMPL_IF>
+<TMPL_IF PERMALINK>
+[[!meta permalink="<TMPL_VAR PERMALINK ESCAPE=HTML>"]]
+</TMPL_IF>
+<TMPL_IF COPYRIGHT>
+[[!meta copyright="<TMPL_VAR COPYRIGHT ESCAPE=HTML>"]]
+</TMPL_IF>
+<TMPL_IF AUTHOR>
+[[!meta author="<TMPL_VAR AUTHOR ESCAPE=HTML> (<TMPL_VAR NAME ESCAPE=HTML>)"]]
+<TMPL_ELSE>
+[[!meta author="<TMPL_VAR NAME ESCAPE=HTML>"]]
+</TMPL_IF>
+[[!meta authorurl="<TMPL_VAR URL ESCAPE=HTML>"]]
diff --git a/backend/ikistrap/templates/archivepage.tmpl b/backend/ikistrap/templates/archivepage.tmpl
new file mode 100644
index 0000000..f829904
--- /dev/null
+++ b/backend/ikistrap/templates/archivepage.tmpl
@@ -0,0 +1,20 @@
+<div class="archivepage">
+ <TMPL_IF PERMALINK>
+ <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a><br />
+ <TMPL_ELSE>
+ <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a><br />
+ </TMPL_IF>
+ <span class="archivepagedate">
+ Posted <TMPL_VAR CTIME>
+ <TMPL_IF AUTHOR>
+ by
+ <span class="author">
+ <TMPL_IF AUTHORURL>
+ <a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+ <TMPL_ELSE>
+ <TMPL_VAR AUTHOR>
+ </TMPL_IF>
+ </span>
+ </TMPL_IF>
+ </span>
+</div>
diff --git a/backend/ikistrap/templates/atomitem.tmpl b/backend/ikistrap/templates/atomitem.tmpl
new file mode 100644
index 0000000..9b056e0
--- /dev/null
+++ b/backend/ikistrap/templates/atomitem.tmpl
@@ -0,0 +1,49 @@
+<entry>
+ <title><TMPL_VAR TITLE></title>
+<TMPL_IF GUID>
+ <id><TMPL_VAR GUID></id>
+<TMPL_ELSE>
+ <id><TMPL_VAR URL></id>
+</TMPL_IF>
+ <link href="<TMPL_VAR PERMALINK>"/>
+<TMPL_IF AUTHOR>
+ <author><name><TMPL_VAR AUTHOR ESCAPE=HTML></name></author>
+</TMPL_IF>
+<TMPL_IF COPYRIGHT>
+ <rights type="html" xml:lang="en">
+<TMPL_IF LICENSE>
+ <TMPL_VAR LICENSE ESCAPE=HTML>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+<TMPL_ELSE>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+</TMPL_IF>
+ </rights>
+<TMPL_ELSE>
+<TMPL_IF LICENSE>
+ <rights type="html" xml:lang="en">
+ <TMPL_VAR LICENSE ESCAPE=HTML>
+ </rights>
+</TMPL_IF>
+</TMPL_IF>
+<TMPL_IF CATEGORIES>
+<TMPL_LOOP CATEGORIES>
+ <category term="<TMPL_VAR CATEGORY>" />
+</TMPL_LOOP>
+</TMPL_IF>
+ <updated><TMPL_VAR MDATE_3339></updated>
+ <published><TMPL_VAR CDATE_3339></published>
+<TMPL_IF ENCLOSURE>
+ <link rel="enclosure" type="<TMPL_VAR TYPE>" href="<TMPL_VAR ENCLOSURE>" length="<TMPL_VAR LENGTH>" />
+</TMPL_IF>
+<TMPL_UNLESS SIMPLEPODCAST>
+ <content type="html" xml:lang="en">
+ <TMPL_VAR CONTENT ESCAPE=HTML>
+ </content>
+</TMPL_UNLESS>
+<TMPL_IF COMMENTSURL>
+ <link rel="comments" href="<TMPL_VAR COMMENTSURL>" type="text/html" />
+</TMPL_IF>
+<TMPL_IF ATOMCOMMENTSURL>
+ <link rel="comments" href="<TMPL_VAR ATOMCOMMENTSURL>" type="application/atom+xml" />
+</TMPL_IF>
+</entry>
diff --git a/backend/ikistrap/templates/atompage.tmpl b/backend/ikistrap/templates/atompage.tmpl
new file mode 100644
index 0000000..3cdd71d
--- /dev/null
+++ b/backend/ikistrap/templates/atompage.tmpl
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+<title><TMPL_VAR TITLE></title>
+<link href="<TMPL_VAR PAGEURL>"/>
+<link href="<TMPL_VAR FEEDURL>" rel="self" type="application/atom+xml"/>
+<author>
+<TMPL_IF AUTHOR>
+<name><TMPL_VAR AUTHOR></name>
+<TMPL_ELSE>
+<name><TMPL_VAR WIKINAME></name>
+</TMPL_IF>
+</author>
+<TMPL_IF COPYRIGHT>
+<rights type="html" xml:lang="en">
+<TMPL_IF LICENSE>
+ <TMPL_VAR LICENSE>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+<TMPL_ELSE>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+</TMPL_IF>
+</rights>
+<TMPL_ELSE>
+<TMPL_IF LICENSE>
+<rights type="html">
+ <TMPL_VAR LICENSE ESCAPE=HTML>
+</rights>
+</TMPL_IF>
+</TMPL_IF>
+<TMPL_IF GUID>
+<id><TMPL_VAR GUID></id>
+<TMPL_ELSE>
+<id><TMPL_VAR PAGEURL></id>
+</TMPL_IF>
+<subtitle type="html"><TMPL_VAR FEEDDESC ESCAPE=HTML></subtitle>
+<generator uri="http://ikiwiki.info/">ikiwiki</generator>
+<updated><TMPL_VAR FEEDDATE></updated>
+<TMPL_VAR CONTENT>
+</feed>
diff --git a/backend/ikistrap/templates/autoindex.tmpl b/backend/ikistrap/templates/autoindex.tmpl
new file mode 100644
index 0000000..d5ec3b8
--- /dev/null
+++ b/backend/ikistrap/templates/autoindex.tmpl
@@ -0,0 +1 @@
+[[!map pages="<TMPL_VAR PAGE>/* and ! <TMPL_VAR PAGE>/*/*"]]
diff --git a/backend/ikistrap/templates/autotag.tmpl b/backend/ikistrap/templates/autotag.tmpl
new file mode 100644
index 0000000..9162e9e
--- /dev/null
+++ b/backend/ikistrap/templates/autotag.tmpl
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged <TMPL_VAR TAGNAME>"]]
+
+[[!inline pages="tagged(<TMPL_VAR TAG>)" actions="no" archive="yes"
+feedshow=10]]
diff --git a/backend/ikistrap/templates/blogpost.tmpl b/backend/ikistrap/templates/blogpost.tmpl
new file mode 100644
index 0000000..9b8751a
--- /dev/null
+++ b/backend/ikistrap/templates/blogpost.tmpl
@@ -0,0 +1,16 @@
+<form <TMPL_IF POSTFORMID>id="<TMPL_VAR POSTFORMID ESCAPE=HTML>"</TMPL_IF> action="<TMPL_VAR CGIURL>" method="get">
+ <div class="blogform">
+ <TMPL_IF RSSURL>
+ <a class="feedbutton" type="application/rss+xml" rel="alternate" title="<TMPL_VAR RSSDESC>" href="<TMPL_VAR RSSURL>">RSS</a>
+ </TMPL_IF>
+ <TMPL_IF ATOMURL>
+ <a class="feedbutton" type="application/atom+xml" rel="alternate" title="<TMPL_VAR ATOMDESC>" href="<TMPL_VAR ATOMURL>">Atom</a>
+ </TMPL_IF>
+ <input type="hidden" name="do" value="blog" />
+ <input type="hidden" name="from" value="<TMPL_VAR ROOTPAGE>" />
+ <input type="hidden" name="subpage" value="1" />
+ <TMPL_VAR POSTFORMTEXT>
+ <input name="title" size="40" />
+ <input type="submit" value="Edit" />
+ </div>
+</form>
diff --git a/backend/ikistrap/templates/calendarmonth.tmpl b/backend/ikistrap/templates/calendarmonth.tmpl
new file mode 100644
index 0000000..23cd954
--- /dev/null
+++ b/backend/ikistrap/templates/calendarmonth.tmpl
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=<TMPL_VAR MONTH> year=<TMPL_VAR YEAR> pages="<TMPL_VAR PAGESPEC>"]]
+"""]]
+
+[[!inline pages="creation_month(<TMPL_VAR MONTH>) and creation_year(<TMPL_VAR YEAR>) and <TMPL_VAR PAGESPEC>" show=0 feeds=no reverse=yes]]
diff --git a/backend/ikistrap/templates/calendaryear.tmpl b/backend/ikistrap/templates/calendaryear.tmpl
new file mode 100644
index 0000000..714bd6d
--- /dev/null
+++ b/backend/ikistrap/templates/calendaryear.tmpl
@@ -0,0 +1 @@
+[[!calendar type=year year=<TMPL_VAR YEAR> pages="<TMPL_VAR PAGESPEC>"]]
diff --git a/backend/ikistrap/templates/carouselimage.tmpl b/backend/ikistrap/templates/carouselimage.tmpl
new file mode 100644
index 0000000..6a91f2b
--- /dev/null
+++ b/backend/ikistrap/templates/carouselimage.tmpl
@@ -0,0 +1,3 @@
+<div class="carousel-item<TMPL_IF FIRST> active</TMPL_IF>">
+<img class="carousel-image" src="<TMPL_VAR PAGEURL>" alt="<TMPL_VAR TITLE>">
+</div>
diff --git a/backend/ikistrap/templates/carouselpage.tmpl b/backend/ikistrap/templates/carouselpage.tmpl
new file mode 100644
index 0000000..78d9754
--- /dev/null
+++ b/backend/ikistrap/templates/carouselpage.tmpl
@@ -0,0 +1,5 @@
+<div class="carousel-item<TMPL_IF FIRST> active</TMPL_IF>">
+ <div class="carousel-page">
+ <TMPL_VAR CONTENT>
+ </div>
+</div>
diff --git a/backend/ikistrap/templates/change.tmpl b/backend/ikistrap/templates/change.tmpl
new file mode 100644
index 0000000..602449c
--- /dev/null
+++ b/backend/ikistrap/templates/change.tmpl
@@ -0,0 +1,58 @@
+[[!meta author="""<TMPL_VAR AUTHOR>"""]]
+<TMPL_IF AUTHORURL>
+[[!meta authorurl="""<TMPL_VAR AUTHORURL>"""]]
+</TMPL_IF>
+[[!meta title="""change to<TMPL_LOOP PAGES> <TMPL_VAR PAGE></TMPL_LOOP> on <TMPL_VAR WIKINAME>"""]]
+<TMPL_IF PERMALINK>
+[[!meta permalink="<TMPL_VAR PERMALINK>"]]
+</TMPL_IF>
+<div id="change-<TMPL_VAR REV>" class="metadata">
+ <span class="desc"><br />Changed pages:</span>
+ <span class="pagelinks">
+ <TMPL_UNLESS HAS_DIFFURL>
+ <TMPL_IF DIFF>
+ <a href="#diff-<TMPL_VAR REV>" class="toggle" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a>
+ </TMPL_IF>
+ </TMPL_UNLESS>
+ <TMPL_LOOP PAGES>
+ <TMPL_IF DIFFURL><a href="<TMPL_VAR DIFFURL>" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a><TMPL_VAR LINK>
+ <TMPL_ELSE><TMPL_VAR LINK></TMPL_IF>
+ </TMPL_LOOP>
+ </span>
+ <span class="desc"><br />Changed by:</span>
+ <span class="committer">
+ <TMPL_IF AUTHORURL>
+ <a href="<TMPL_VAR AUTHORURL>" rel="nofollow"><TMPL_VAR USER></a>
+ <TMPL_ELSE>
+ <TMPL_VAR USER>
+ </TMPL_IF>
+ </span>
+ <span class="desc"><br />Commit type:</span>
+ <span class="committype"><TMPL_VAR COMMITTYPE></span>
+ <span class="desc"><br />Date:</span>
+ <span class="changedate"><TMPL_VAR COMMITDATE></span>
+ <span class="desc"><br /></span>
+ <TMPL_IF REVERTURL>
+ <span class="revert">
+ <a href="<TMPL_VAR REVERTURL>" title="revert" rel="nofollow">[[revert|wikiicons/revert.png]]</a>
+ </span>
+ </TMPL_IF>
+</div>
+
+<div class="changelog">
+ <TMPL_LOOP MESSAGE>
+ <TMPL_IF LINE>
+ <TMPL_VAR LINE><br />
+ </TMPL_IF>
+ </TMPL_LOOP>
+</div>
+
+<TMPL_IF DIFF>
+<TMPL_IF HAS_DIFFURL>
+<div class="diff">
+<TMPL_ELSE>
+<div class="toggleable" id="diff-<TMPL_VAR REV>">
+</TMPL_IF>
+ <pre><TMPL_VAR DIFF></pre>
+</div>
+</TMPL_IF>
diff --git a/backend/ikistrap/templates/comment.tmpl b/backend/ikistrap/templates/comment.tmpl
new file mode 100644
index 0000000..59f2463
--- /dev/null
+++ b/backend/ikistrap/templates/comment.tmpl
@@ -0,0 +1,66 @@
+<article class="comment card" id="<TMPL_VAR COMMENTID>">
+ <TMPL_IF COMMENTAUTHORAVATAR>
+ <div class="comment-avatar">
+ <img src="<TMPL_VAR COMMENTAUTHORAVATAR>" alt="" />
+ </div>
+ </TMPL_IF>
+
+ <div class="commentheader card-header">
+ <header class="comment-subject" title="<TMPL_VAR TITLE>">
+ <TMPL_IF PERMALINK>
+ <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a>
+ <TMPL_ELSE>
+ <TMPL_VAR TITLE>
+ </TMPL_IF>
+ </header>
+ </div>
+
+ <div class="commentcontent card-block card-text">
+ <TMPL_VAR CONTENT>
+ </div>
+
+ <footer class="commentfooter card-footer text-muted">
+ Posted <TMPL_VAR CTIME>
+ <TMPL_IF COMMENTUSER>
+ by
+ <TMPL_IF COMMENTOPENID>
+ <span class="author" title="OpenID">
+ <a href="<TMPL_VAR COMMENTOPENID>"><TMPL_VAR COMMENTAUTHOR></a>
+ </span>
+ <TMPL_ELSE>
+ <span class="author" title="Signed in">
+ <TMPL_IF COMMENTAUTHORURL>
+ <a href="<TMPL_VAR COMMENTAUTHORURL>"><TMPL_VAR COMMENTAUTHOR></a>
+ <TMPL_ELSE>
+ <TMPL_VAR COMMENTAUTHOR>
+ </TMPL_IF>
+ </span>
+ </TMPL_IF>
+ <TMPL_ELSE>
+ <TMPL_IF AUTHOR>
+ by
+ <TMPL_IF COMMENTIP>
+ <span class="author" title="Unauthenticated, from <TMPL_VAR COMMENTIP>">
+ <TMPL_ELSE>
+ <span class="author" title="Unauthenticated, from unknown IP address">
+ </TMPL_IF>
+ <TMPL_IF AUTHORURL>
+ <a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+ <TMPL_ELSE>
+ <TMPL_VAR AUTHOR>
+ </TMPL_IF>
+ </span>
+ </TMPL_IF>
+ </TMPL_IF>
+
+ <TMPL_IF HAVE_ACTIONS>
+ <nav class="actions">
+ <ul>
+ <TMPL_IF REMOVEURL>
+ <li><a href="<TMPL_VAR REMOVEURL>" rel="nofollow"><i class="fa fa-trash"></i>Remove comment</a></li>
+ </TMPL_IF>
+ </ul>
+ </nav>
+ </TMPL_IF>
+ </footer>
+</article>
diff --git a/backend/ikistrap/templates/commentmoderation.tmpl b/backend/ikistrap/templates/commentmoderation.tmpl
new file mode 100644
index 0000000..dcd0ec0
--- /dev/null
+++ b/backend/ikistrap/templates/commentmoderation.tmpl
@@ -0,0 +1,32 @@
+<TMPL_IF COMMENTS>
+<br />
+<form action="<TMPL_VAR CGIURL>" method="post">
+ <input type="hidden" name="do" value="commentmoderation" />
+ <input type="hidden" name="sid" value="<TMPL_VAR SID>" />
+ <input type="submit" value="Submit" />
+ <input id="rejectalldefer" type="checkbox" name="rejectalldefer" value="1" />
+ <label for="rejectalldefer">Reject all comments marked <em>Defer</em></label>
+ <br />
+ <TMPL_LOOP COMMENTS>
+ <div>
+ <div>
+ <TMPL_VAR VIEW>
+ </div>
+ <input id="defer_<TMPL_VAR ID>" type="radio" value="Defer" name="<TMPL_VAR ID>" checked="checked" />
+ <label for="defer_<TMPL_VAR ID>">Defer</label>
+ <input id="dccept_<TMPL_VAR ID>" type="radio" value="Accept" name="<TMPL_VAR ID>" />
+ <label for="dccept_<TMPL_VAR ID>">Accept</label>
+ <input id="reject_<TMPL_VAR ID>" type="radio" value="Reject" name="<TMPL_VAR ID>" />
+ <label for="reject_<TMPL_VAR ID>">Reject</label>
+ </div>
+ <br />
+ </TMPL_LOOP>
+ <input type="submit" value="Submit" />
+ <input id="rejectalldefer2" type="checkbox" name="rejectalldefer" value="1" />
+ <label for="rejectalldefer2">Reject all comments marked <em>Defer</em></label>
+</form>
+<TMPL_ELSE>
+<p>
+No comments need moderation at this time.
+</p>
+</TMPL_IF>
diff --git a/backend/ikistrap/templates/editcomment.tmpl b/backend/ikistrap/templates/editcomment.tmpl
new file mode 100644
index 0000000..e43fe0f
--- /dev/null
+++ b/backend/ikistrap/templates/editcomment.tmpl
@@ -0,0 +1,42 @@
+<div class="editcomment">
+ <TMPL_VAR MESSAGE>
+ <br />
+ <TMPL_VAR FORM-START>
+ <TMPL_VAR FIELD-DO>
+ <TMPL_VAR FIELD-SID>
+ <TMPL_VAR FIELD-PAGE>
+ <TMPL_UNLESS NAME=USERNAME>
+ <TMPL_IF NAME=ALLOWAUTHOR>
+ <label for="author" class="block">Name:</label>
+ <TMPL_VAR NAME=FIELD-AUTHOR> (optional, or <a href="<TMPL_VAR SIGNINURL>">signin</a>)
+ <br/>
+ <label for="url" class="block">Website:</label>
+ <TMPL_VAR NAME=FIELD-URL> (optional)
+ <br />
+ <label for="url" class="block">Email:</label>
+ <TMPL_VAR NAME=FIELD-EMAIL> <TMPL_VAR FIELD-ANONSUBSCRIBE>
+ <br />
+ <TMPL_ELSE>
+ (You might want to <a href="<TMPL_VAR SIGNINURL>">Signin</a> first?)
+ <br />
+ </TMPL_IF>
+ </TMPL_UNLESS>
+ <label for="subject" class="block">Subject:</label>
+ <TMPL_VAR FIELD-SUBJECT><br />
+ <label for="editcontent" class="block">Comment:</label>
+ <TMPL_VAR FIELD-EDITCONTENT><br />
+ <TMPL_VAR FORM-SUBMIT> <TMPL_VAR FIELD-TYPE> <TMPL_VAR HELPONFORMATTINGLINK>
+ <TMPL_VAR FIELD-SUBSCRIBE><br />
+ <TMPL_VAR NAME="FORM-END">
+ <TMPL_VAR WMD_PREVIEW>
+
+ <TMPL_IF NAME="PAGE_PREVIEW">
+ <hr />
+ <div class="header">
+ <span>Comment preview:</span>
+ </div>
+ <div id="preview">
+ <TMPL_VAR PAGE_PREVIEW>
+ </div>
+ </TMPL_IF>
+</div>
diff --git a/backend/ikistrap/templates/editconflict.tmpl b/backend/ikistrap/templates/editconflict.tmpl
new file mode 100644
index 0000000..1252033
--- /dev/null
+++ b/backend/ikistrap/templates/editconflict.tmpl
@@ -0,0 +1,7 @@
+<p class="error">
+<b>Your changes conflict with other changes made to the page.</b>
+</p>
+<p>
+Conflict markers have been inserted into the page content. Reconcile the
+conflict and commit again to save your changes.
+</p>
diff --git a/backend/ikistrap/templates/editcreationconflict.tmpl b/backend/ikistrap/templates/editcreationconflict.tmpl
new file mode 100644
index 0000000..c99102f
--- /dev/null
+++ b/backend/ikistrap/templates/editcreationconflict.tmpl
@@ -0,0 +1,9 @@
+<p class="error">
+<b>While you were creating this page, someone else independently created a page
+with the same name.</b>
+</p>
+<p>
+The edit box below contains the page's current content, followed by the
+content you entered previously, to allow you to merge the two
+together before saving.
+</p>
diff --git a/backend/ikistrap/templates/editfailedsave.tmpl b/backend/ikistrap/templates/editfailedsave.tmpl
new file mode 100644
index 0000000..5184f7d
--- /dev/null
+++ b/backend/ikistrap/templates/editfailedsave.tmpl
@@ -0,0 +1,10 @@
+<p class="error">
+<b>Failed to save your changes.</b>
+</p>
+<p>
+Your changes were not able to be saved to disk. The system gave the error:
+<blockquote>
+<TMPL_VAR ERROR_MESSAGE>
+</blockquote>
+Your changes are preserved below, and you can try again to save them.
+</p>
diff --git a/backend/ikistrap/templates/editpage.tmpl b/backend/ikistrap/templates/editpage.tmpl
new file mode 100644
index 0000000..f4ea2ce
--- /dev/null
+++ b/backend/ikistrap/templates/editpage.tmpl
@@ -0,0 +1,94 @@
+<TMPL_VAR JAVASCRIPT>
+<TMPL_VAR MESSAGE>
+<br />
+<TMPL_VAR FORM-START>
+<TMPL_VAR FIELD-DO>
+<TMPL_VAR FIELD-SID>
+<TMPL_VAR FIELD-FROM>
+<TMPL_VAR FIELD-RCSINFO>
+<TMPL_VAR FIELD-NEWFILE>
+<TMPL_IF NAME="PAGE_SELECT">
+<label for="page" class="inline">Page location:</label><TMPL_VAR FIELD-PAGE>
+<label for="type" class="inline">Page type:</label><TMPL_VAR FIELD-TYPE>
+<TMPL_ELSE>
+<TMPL_VAR FIELD-PAGE>
+<TMPL_VAR FIELD-TYPE>
+</TMPL_IF>
+<div class="editcontentdiv">
+ <TMPL_VAR FIELD-EDITCONTENT><br />
+</div>
+<TMPL_IF NAME="CAN_COMMIT">
+<label for="editmessage" class="block">Optional description of this change:</label>
+<TMPL_VAR FIELD-EDITMESSAGE><br />
+</TMPL_IF>
+<TMPL_VAR FORM-SUBMIT>
+<TMPL_VAR HELPONFORMATTINGLINK>
+<TMPL_IF NAME="FIELD-ATTACHMENT">
+<a class="toggle" href="#attachments">Attachments</a>
+</TMPL_IF>
+<TMPL_VAR FIELD-SUBSCRIBE>
+<TMPL_IF NAME="FIELD-ATTACHMENT">
+<div class="<TMPL_VAR ATTACHMENTS-CLASS>" id="attachments">
+ <div id="fileupload">
+ <script>
+ $(function () { $('#fileupload').fileupload(); }); // initialize upload widget
+ </script>
+ <script id="template-upload" type="text/x-jquery-tmpl">
+ <tr class="template-upload{{if error}} ui-state-error{{/if}}">
+ <td><input type="checkbox" name="attachment_select" value="${name}" />${name}</td>
+ {{if error}}
+ <td class="error" colspan="2">failed!</td>
+ {{else}}
+ <td class="progress" colspan="2"><div></div></td>
+ <td class="start"><button>Start</button></td>
+ {{/if}}
+ <td class="cancel"><button>Cancel</button></td>
+ </tr>
+ </script>
+ <script id="template-download" type="text/x-jquery-tmpl">
+ <tr class="template-download{{if error}} ui-state-error{{/if}}">
+ <td><input type="checkbox" checked name="attachment_select" value="${name}" />${name}</td>
+ <td>${humansize}</td>
+ {{if error}}
+ <td class="error" colspan="2">failed!</td>
+ {{else}}
+ <td>${stored_msg}</td>
+ {{/if}}
+ </tr>
+ </script>
+ <div class="fileupload-content">
+ <table class="files">
+ <TMPL_LOOP NAME="ATTACHMENT_LIST">
+ <tr>
+ <td><input type="checkbox" name="attachment_select" value="<TMPL_VAR NAME ESCAPE="HTML">" /><TMPL_VAR LINK></td>
+ <td><TMPL_VAR SIZE></td><td><TMPL_VAR MTIME></td>
+ </tr>
+ </TMPL_LOOP>
+ </table>
+ </div>
+ <TMPL_VAR FIELD-ATTACHMENT>
+ <noscript><TMPL_VAR FIELD-UPLOAD></noscript>
+ <TMPL_VAR FIELD-LINK><TMPL_VAR FIELD-RENAME><TMPL_VAR FIELD-REMOVE>
+ </div>
+</div>
+</TMPL_IF>
+<TMPL_VAR FORM-END>
+<TMPL_VAR WMD_PREVIEW>
+<TMPL_IF NAME="PAGE_PREVIEW">
+<hr />
+<div class="header">
+ <span>Page preview:</span>
+</div>
+<div id="preview">
+ <TMPL_VAR PAGE_PREVIEW>
+</div>
+</TMPL_IF>
+<TMPL_IF NAME="PAGE_DIFF">
+<hr />
+<div class="header">
+ <span>Diff:</span>
+</div>
+<div id="diff">
+ <TMPL_VAR PAGE_DIFF>
+</div>
+</TMPL_IF>
diff --git a/backend/ikistrap/templates/editpagegone.tmpl b/backend/ikistrap/templates/editpagegone.tmpl
new file mode 100644
index 0000000..2eed03a
--- /dev/null
+++ b/backend/ikistrap/templates/editpagegone.tmpl
@@ -0,0 +1,7 @@
+<p class="error">
+<b>The page you were editing has disappeared.</b>
+</p>
+<p>
+Perhaps someone else has deleted it or moved it. If you want to recreate
+this page with your text, click "Save Page" again.
+</p>
diff --git a/backend/ikistrap/templates/emailauth.tmpl b/backend/ikistrap/templates/emailauth.tmpl
new file mode 100644
index 0000000..5561406
--- /dev/null
+++ b/backend/ikistrap/templates/emailauth.tmpl
@@ -0,0 +1,10 @@
+To log into <TMPL_VAR WIKINAME>, just open the following link:
+
+<TMPL_VAR AUTHURL>
+
+This link can only be used once to log in, and will expire in one day.
+
+(Please disregard this email if you were not trying to log in.)
+
+--
+ikiwiki
diff --git a/backend/ikistrap/templates/feedlink.tmpl b/backend/ikistrap/templates/feedlink.tmpl
new file mode 100644
index 0000000..3fbbcf6
--- /dev/null
+++ b/backend/ikistrap/templates/feedlink.tmpl
@@ -0,0 +1,9 @@
+<div <TMPL_IF ID>id="<TMPL_VAR ID ESCAPE=HTML>"</TMPL_IF> class="feedlink btn-group">
+ <TMPL_IF RSSURL>
+ <a class="feedbutton btn btn-secondary" type="application/rss+xml" rel="alternate" title="<TMPL_VAR RSSDESC>" href="<TMPL_VAR RSSURL>"><i class="fa fa-rss"></i>RSS</a>
+ </TMPL_IF>
+ <TMPL_IF ATOMURL>
+ <a class="feedbutton btn btn-secondary" type="application/atom+xml" rel="alternate" title="<TMPL_VAR ATOMDESC>" href="<TMPL_VAR ATOMURL>"><i class="fa fa-rss"></i>Atom</a>
+ </TMPL_IF>
+</div>
+<p>
diff --git a/backend/ikistrap/templates/googleform.tmpl b/backend/ikistrap/templates/googleform.tmpl
new file mode 100644
index 0000000..0347972
--- /dev/null
+++ b/backend/ikistrap/templates/googleform.tmpl
@@ -0,0 +1,4 @@
+<form method="get" action="https://www.google.com/search" id="searchform" class="form-inline pull-xs-right">
+ <input name="sitesearch" value="<TMPL_VAR URL>" type="hidden" />
+ <input name="q" value="" id="searchbox" size="12" type="text" placeholder="Search…" class="form-control" />
+</form>
diff --git a/backend/ikistrap/templates/inlinepage.tmpl b/backend/ikistrap/templates/inlinepage.tmpl
new file mode 100644
index 0000000..68972c1
--- /dev/null
+++ b/backend/ikistrap/templates/inlinepage.tmpl
@@ -0,0 +1,77 @@
+<article class="inlinepage card">
+ <div class="inlineheader card-header">
+ <header title="<TMPL_VAR TITLE>">
+ <TMPL_IF PERMALINK>
+ <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a>
+ <TMPL_ELSE>
+ <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a>
+ </TMPL_IF>
+ </header>
+
+ <TMPL_IF HAVE_ACTIONS>
+ <div class="inline-actions">
+ <ul>
+ <TMPL_IF EDITURL>
+ <li><a href="<TMPL_VAR EDITURL>" rel="nofollow"><i class="fa fa-pencil"></i>Edit</a></li>
+ </TMPL_IF>
+ <TMPL_IF COMMENTSLINK>
+ <li><TMPL_VAR COMMENTSLINK></li>
+ <TMPL_ELSE>
+ <TMPL_IF DISCUSSIONLINK>
+ <li><TMPL_VAR DISCUSSIONLINK></li>
+ </TMPL_IF>
+ </TMPL_IF>
+ </ul>
+ </div>
+ </TMPL_IF>
+ </div>
+
+ <div class="inlinecontent card-block card-text">
+ <TMPL_VAR CONTENT>
+ </div>
+
+ <TMPL_IF ENCLOSURE>
+ <div id="inlineenclosure">
+ <a href="<TMPL_VAR ENCLOSURE>">Download</a>
+ </div>
+ </TMPL_IF>
+
+ <footer class="inlinefooter card-footer text-muted">
+ <div class="pageinfo">
+ <span class="pagedate">
+ Posted <TMPL_VAR CTIME>
+ </span>
+ <TMPL_IF AUTHOR>
+ by
+ <span class="author">
+ <TMPL_IF AUTHORURL>
+ <a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+ <TMPL_ELSE>
+ <TMPL_VAR AUTHOR>
+ </TMPL_IF>
+ </span>
+ </TMPL_IF>
+
+ <TMPL_IF COPYRIGHT>
+ <span class="pagecopyright">
+ <TMPL_VAR COPYRIGHT>
+ </span>
+ </TMPL_IF>
+
+ <TMPL_IF LICENSE>
+ <span class="pagelicense">
+ License: <TMPL_VAR LICENSE>
+ </span>
+ </TMPL_IF>
+ </div>
+
+ <TMPL_IF TAGS>
+ <nav class="tags">
+ <i class="fa fa-tag"></i>Tags:
+ <TMPL_LOOP TAGS>
+ <TMPL_VAR LINK>
+ </TMPL_LOOP>
+ </nav>
+ </TMPL_IF>
+ </footer>
+</article>
diff --git a/backend/ikistrap/templates/login-selector.tmpl b/backend/ikistrap/templates/login-selector.tmpl
new file mode 100644
index 0000000..3e7045c
--- /dev/null
+++ b/backend/ikistrap/templates/login-selector.tmpl
@@ -0,0 +1,65 @@
+<script type="text/javascript" src="ikiwiki/jquery.min.js"></script>
+<script type="text/javascript" src="ikiwiki/login-selector/login-selector.js"></script>
+<script type="text/javascript">
+$(document).ready(function() {
+ selector.init(
+ 'openid_identifier',
+ {
+ <TMPL_IF LOGIN_SELECTOR_OPENID>'openid': 1,</TMPL_IF>
+ <TMPL_IF LOGIN_SELECTOR_EMAILAUTH>'email': 1,</TMPL_IF>
+ },
+ '<TMPL_IF OTHERFORM>otherform</TMPL_IF>',
+ '<TMPL_VAR OTHERFORM_LABEL>'
+ );
+});
+</script>
+
+<form action="<TMPL_VAR CGIURL>" method="get" id="login_selector_form">
+ <div>
+ <script>
+ $('fieldset').append("<legend>Select login method</legend>");
+ </script>
+
+ <input type="hidden" name="do" value="signin" />
+ <input type="hidden" name="action" value="verify" />
+ <div id="login_choice">
+ <div id="login_btns"></div>
+ </div>
+
+ <div id="login_input_area">
+ <TMPL_IF LOGIN_SELECTOR_OPENID>
+ <div>
+ <h3>OpenId login:</h3>
+ <label for="openid_identifier" class="block">Enter your OpenID:</label>
+ <input id="openid_identifier" name="openid_identifier" type="text" value="<TMPL_VAR ESCAPE=HTML OPENID_URL>"/>
+ <input id="openid_submit" type="submit" value="Login"/>
+ </div>
+ </TMPL_IF>
+ <TMPL_IF LOGIN_SELECTOR_EMAILAUTH>
+ <div>
+ <h3>Email login:</h3>
+ <label for="email_address" class="block">Enter your email address:</label>
+ <input id="email_address" name="Email_entry" type="text" value="<TMPL_VAR ESCAPE=HTML EMAIL_ADDRESS>"/>
+ <input id="email_submit" type="submit" value="Login"/>
+ </div>
+ </TMPL_IF>
+ </div>
+
+ <TMPL_IF LOGIN_ERROR>
+ <div class="error"><TMPL_VAR LOGIN_ERROR></div>
+ </TMPL_IF>
+ <TMPL_IF LOGIN_INFO>
+ <TMPL_VAR LOGIN_INFO>
+ </TMPL_IF>
+ </div>
+</form>
+
+<div id="otherform">
+<TMPL_IF OTHERFORM>
+<br />
+<noscript>
+<h3><TMPL_VAR OTHERFORM_LABEL> login:</h3>
+</noscript>
+</TMPL_IF>
+<TMPL_VAR OTHERFORM>
+</div>
diff --git a/backend/ikistrap/templates/microblog.tmpl b/backend/ikistrap/templates/microblog.tmpl
new file mode 100644
index 0000000..ff761a6
--- /dev/null
+++ b/backend/ikistrap/templates/microblog.tmpl
@@ -0,0 +1,18 @@
+<div class="microblog">
+ <div class="inlinecontent">
+ <TMPL_VAR CONTENT>
+ </div>
+
+ <div class="microblog-header">
+ <TMPL_IF AUTHOR>
+ <span class="author">
+ <TMPL_IF AUTHORURL>
+ <a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+ <TMPL_ELSE>
+ <TMPL_VAR AUTHOR>
+ </TMPL_IF>
+ </span>
+ </TMPL_IF>
+ &mdash; <TMPL_VAR CTIME>
+ </div>
+</div>
diff --git a/backend/ikistrap/templates/notifyemail.tmpl b/backend/ikistrap/templates/notifyemail.tmpl
new file mode 100644
index 0000000..5087668
--- /dev/null
+++ b/backend/ikistrap/templates/notifyemail.tmpl
@@ -0,0 +1,9 @@
+A <TMPL_IF NAME=ISCOMMENT>comment has been posted at<TMPL_ELSE>change has been made to</TMPL_IF> <TMPL_VAR URL>
+<TMPL_IF NAME=SHOWCONTENT>
+----
+
+<TMPL_VAR CONTENT>
+
+----
+</TMPL_IF>
+To stop these notifications, visit <TMPL_VAR PREFSURL>
diff --git a/backend/ikistrap/templates/page.tmpl b/backend/ikistrap/templates/page.tmpl
new file mode 100644
index 0000000..6b964a3
--- /dev/null
+++ b/backend/ikistrap/templates/page.tmpl
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<TMPL_IF HTML_LANG_CODE><html lang="<TMPL_VAR HTML_LANG_CODE>" dir="<TMPL_VAR HTML_LANG_DIR>" xmlns="http://www.w3.org/1999/xhtml"><TMPL_ELSE><html xmlns="http://www.w3.org/1999/xhtml"></TMPL_IF>
+<head>
+ <TMPL_IF DYNAMIC>
+ <TMPL_IF FORCEBASEURL><base href="<TMPL_VAR FORCEBASEURL>" />
+ <TMPL_ELSE><TMPL_IF BASEURL><base href="<TMPL_VAR BASEURL>" /></TMPL_IF>
+ </TMPL_IF>
+ </TMPL_IF>
+ <meta charset="utf-8" />
+ <title><TMPL_VAR TITLE></title>
+ <TMPL_IF RESPONSIVE_LAYOUT><meta name="viewport" content="width=device-width, initial-scale=1" /></TMPL_IF>
+ <TMPL_IF FAVICON><link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" /></TMPL_IF>
+ <TMPL_IF BOOTSTRAP_LOCAL>
+ <link rel="stylesheet" href="<TMPL_VAR BASEURL>css/bootstrap.min.css" type="text/css" />
+ <link rel="stylesheet" href="<TMPL_VAR BASEURL>css/font-awesome.min.css" type="text/css" />
+ <script src="<TMPL_VAR BASEURL>js/jquery.min.js"></script>
+ <script src="<TMPL_VAR BASEURL>js/tether.min.js"></script>
+ <script src="<TMPL_VAR BASEURL>js/bootstrap.min.js"></script>
+ <TMPL_ELSE>
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" type="text/css" />
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" type="text/css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.2.0/js/tether.min.js"></script>
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
+ </TMPL_IF>
+ <link rel="stylesheet" href="<TMPL_VAR BASEURL>style.css" type="text/css" />
+ <TMPL_IF LOCAL_CSS>
+ <link rel="stylesheet" href="<TMPL_VAR BASEURL><TMPL_VAR LOCAL_CSS>" type="text/css" />
+ <TMPL_ELSE>
+ <link rel="stylesheet" href="<TMPL_VAR BASEURL>local.css" type="text/css" />
+ </TMPL_IF>
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF EDITURL>
+ <link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" />
+ </TMPL_IF>
+ <TMPL_IF FEEDLINKS><TMPL_VAR FEEDLINKS></TMPL_IF>
+ <TMPL_IF RELVCS><TMPL_VAR RELVCS></TMPL_IF>
+ <TMPL_IF META><TMPL_VAR META></TMPL_IF>
+ <TMPL_LOOP TRAILLOOP>
+ <TMPL_IF PREVPAGE>
+ <link rel="prev" href="<TMPL_VAR PREVURL>" title="<TMPL_VAR PREVTITLE>" />
+ </TMPL_IF>
+ <link rel="up" href="<TMPL_VAR TRAILURL>" title="<TMPL_VAR TRAILTITLE>" />
+ <TMPL_IF NEXTPAGE>
+ <link rel="next" href="<TMPL_VAR NEXTURL>" title="<TMPL_VAR NEXTTITLE>" />
+ </TMPL_IF>
+ </TMPL_LOOP>
+ </TMPL_UNLESS>
+</head>
+
+<body>
+ <div id="notfooter">
+ <div id="header">
+ <header class="navbar navbar-dark bg-inverse navbar-full">
+ <div class="container">
+ <button type="button" class="navbar-toggler hidden-sm-up pull-xs-right" data-toggle="collapse" data-target="#header-nav">&#9776;</button>
+
+ <ul class="nav navbar-nav">
+ <TMPL_LOOP NAME="PARENTLINKS">
+ <li class="nav-item <TMPL_UNLESS NAME="DEPTH_0">hidden-md-down</TMPL_UNLESS>"><a class="nav-link" href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a></li>
+ </TMPL_LOOP>
+ <li class="nav-item"><a class="nav-link active <TMPL_IF HAS_PARENTLINKS>hidden-md-down</TMPL_IF>" href="#"><TMPL_VAR TITLE><TMPL_IF ISTRANSLATION>&nbsp;(<TMPL_VAR PERCENTTRANSLATED>%)</TMPL_IF></a></li>
+ </ul>
+
+ <div class="collapse navbar-toggleable-xs" id="header-nav">
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF SEARCHFORM>
+ <TMPL_VAR SEARCHFORM>
+ </TMPL_IF>
+ </TMPL_UNLESS>
+
+ <TMPL_IF OTHERLANGUAGES>
+ <nav id="otherlanguages" class="pull-xs-right">
+ <ul class="nav navbar-nav">
+ <TMPL_LOOP OTHERLANGUAGES>
+ <li class="nav-item">
+ <a class="nav-link" href="<TMPL_VAR URL>"><TMPL_VAR LANGUAGE></a>
+ <TMPL_IF MASTER>(master)<TMPL_ELSE>&nbsp;(<TMPL_VAR PERCENT>%)</TMPL_IF>
+ </li>
+ </TMPL_LOOP>
+ </ul>
+ </nav>
+ </TMPL_IF>
+
+ <TMPL_IF HAVE_ACTIONS>
+ <nav class="actions pull-xs-right">
+ <ul class="nav navbar-nav">
+ <TMPL_IF EDITURL>
+ <li class="nav-item"><a class="nav-link" href="<TMPL_VAR EDITURL>" rel="nofollow"><i class="fa fa-pencil"></i>Edit</a></li>
+ </TMPL_IF>
+ <TMPL_IF RECENTCHANGESURL>
+ <li class="nav-item"><a class="nav-link" href="<TMPL_VAR RECENTCHANGESURL>">RecentChanges</a></li>
+ </TMPL_IF>
+ <TMPL_IF HISTORYURL>
+ <li class="nav-item"><a class="nav-link" href="<TMPL_VAR HISTORYURL>">History</a></li>
+ </TMPL_IF>
+ <TMPL_IF GETSOURCEURL>
+ <li class="nav-item"><a class="nav-link" href="<TMPL_VAR GETSOURCEURL>">Source</a></li>
+ </TMPL_IF>
+ <TMPL_IF PREFSURL>
+ <li class="nav-item"><a class="nav-link" href="<TMPL_VAR PREFSURL>"><i class="fa fa-cog"></i>Preferences</a></li>
+ </TMPL_IF>
+ <TMPL_IF ACTIONS>
+ <TMPL_LOOP ACTIONS>
+ <li class="nav-item nav-link"><TMPL_VAR ACTION></li>
+ </TMPL_LOOP>
+ </TMPL_IF>
+ <TMPL_IF COMMENTSLINK>
+ <li class="nav-item nav-link"><TMPL_VAR COMMENTSLINK></li>
+ <TMPL_ELSE>
+ <TMPL_IF DISCUSSIONLINK>
+ <li class="nav-item nav-link"><TMPL_VAR DISCUSSIONLINK></li>
+ </TMPL_IF>
+ </TMPL_IF>
+ </ul>
+ </nav>
+ </TMPL_IF>
+
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_VAR TRAILS>
+ </TMPL_UNLESS>
+ </div>
+ </div>
+ </header>
+ </div>
+
+ <div class="container">
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF SIDEBAR>
+ <div class="row">
+ <div class="col-sm-8 col-md-9">
+ </TMPL_IF>
+ </TMPL_UNLESS>
+
+ <main id="content">
+ <TMPL_VAR CONTENT>
+ </main>
+
+ <TMPL_IF ENCLOSURE>
+ <section id="enclosure" title="Download">
+ <a href="<TMPL_VAR ENCLOSURE>">Download</a>
+ </section>
+ </TMPL_IF>
+
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF COMMENTS>
+ <section id="comments" title="Comments">
+ <TMPL_IF ADDCOMMENTURL>
+ <a href="<TMPL_VAR ADDCOMMENTURL>" class="btn btn-primary">Add a comment</a>
+ <TMPL_ELSE>
+ <div class="addcomment">Comments on this page are closed.</div>
+ </TMPL_IF>
+ <TMPL_VAR COMMENTS>
+ </section>
+ </TMPL_IF>
+ </TMPL_UNLESS>
+
+ <TMPL_UNLESS DYNAMIC>
+ <TMPL_IF SIDEBAR>
+ </div>
+ <div class="col-sm-4 col-md-3">
+ <aside id="sidebar" class="card card-block">
+ <TMPL_VAR SIDEBAR>
+ </aside>
+ </div>
+ </div>
+ </TMPL_IF>
+ </TMPL_UNLESS>
+ </div>
+ </div>
+
+ <footer id="footer" class="container">
+ <TMPL_UNLESS DYNAMIC>
+ <nav id="pageinfo">
+ <TMPL_VAR TRAILS>
+ <TMPL_IF TAGS>
+ <span class="tags">
+ <i class="fa fa-tag"></i>Tags:
+ <TMPL_LOOP TAGS>
+ <TMPL_VAR LINK>
+ </TMPL_LOOP>
+ </span>
+ </TMPL_IF>
+
+ <TMPL_IF BACKLINKS>
+ <span id="backlinks">
+ <i class="fa fa-link"></i>Links:
+ <TMPL_LOOP BACKLINKS>
+ <a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>
+ </TMPL_LOOP>
+ <TMPL_IF MORE_BACKLINKS>
+ <span class="popup">...
+ <span class="balloon">
+ <TMPL_LOOP MORE_BACKLINKS>
+ <a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>
+ </TMPL_LOOP>
+ </span>
+ </span>
+ </TMPL_IF>
+ </span>
+ </TMPL_IF>
+
+ <TMPL_IF COPYRIGHT>
+ <span id="pagecopyright">
+ <a name="pagecopyright"/><TMPL_VAR COPYRIGHT>
+ </span>
+ </TMPL_IF>
+
+ <TMPL_IF LICENSE>
+ <span id="pagelicense">
+ <a name="pagelicense"/>License: <TMPL_VAR LICENSE>
+ </span>
+ </TMPL_IF>
+
+ <span id="pagedate">
+ Last edited <TMPL_VAR MTIME>.
+ </span>
+ </nav>
+ <TMPL_IF EXTRAFOOTER><TMPL_VAR EXTRAFOOTER></TMPL_IF>
+ </TMPL_UNLESS>
+ </footer>
+</body>
+</html>
diff --git a/backend/ikistrap/templates/passwordmail.tmpl b/backend/ikistrap/templates/passwordmail.tmpl
new file mode 100644
index 0000000..aa8a68c
--- /dev/null
+++ b/backend/ikistrap/templates/passwordmail.tmpl
@@ -0,0 +1,15 @@
+Someone[1], possibly you, requested that the password for
+<TMPL_VAR USER_NAME> on <TMPL_VAR WIKINAME>[2] be reset.
+
+To change your password, visit the following url, and enter a new password:
+
+<TMPL_VAR PASSWORDURL>
+
+This url can only be used once to change your password, and it will also
+stop working the next time you successfully log in.
+
+--
+ikiwiki
+
+[1] Their IP address was <TMPL_VAR REMOTE_ADDR>
+[2] Located at <TMPL_VAR WIKIURL>
diff --git a/backend/ikistrap/templates/pocreatepage.tmpl b/backend/ikistrap/templates/pocreatepage.tmpl
new file mode 100644
index 0000000..f22ee50
--- /dev/null
+++ b/backend/ikistrap/templates/pocreatepage.tmpl
@@ -0,0 +1,3 @@
+<p>
+<b>WARNING</b> this page must be written in <TMPL_VAR LANG>.
+</p>
diff --git a/backend/ikistrap/templates/recentchanges.tmpl b/backend/ikistrap/templates/recentchanges.tmpl
new file mode 100644
index 0000000..a2e8811
--- /dev/null
+++ b/backend/ikistrap/templates/recentchanges.tmpl
@@ -0,0 +1,7 @@
+<TMPL_IF FIRST>
+<div class="recentchanges">
+ </TMPL_IF>
+ <TMPL_VAR CONTENT>
+ <TMPL_IF LAST>
+</div>
+</TMPL_IF>
diff --git a/backend/ikistrap/templates/renamesummary.tmpl b/backend/ikistrap/templates/renamesummary.tmpl
new file mode 100644
index 0000000..e8eca6a
--- /dev/null
+++ b/backend/ikistrap/templates/renamesummary.tmpl
@@ -0,0 +1,30 @@
+<TMPL_IF ERROR>
+<p>
+<b>Failed to rename <TMPL_VAR SRC> to <TMPL_VAR DEST>: </b>
+<TMPL_VAR ERROR>
+</p>
+<TMPL_ELSE>
+<p>
+<b>Successfully renamed <TMPL_VAR SRC> to <TMPL_VAR DEST>.</b>
+</p>
+<p>
+<TMPL_IF FIXEDLINKS>
+The following pages have been automatically modified to update their links to <TMPL_VAR DEST>:
+<ul>
+ <TMPL_LOOP FIXEDLINKS>
+ <li><TMPL_VAR PAGE></li>
+ </TMPL_LOOP>
+</ul>
+</TMPL_IF>
+<TMPL_IF BROKENLINKS_CHECKED>
+<TMPL_IF BROKENLINKS>
+The following pages still link to <TMPL_VAR SRC>:
+<ul>
+ <TMPL_LOOP BROKENLINKS>
+ <li><TMPL_VAR PAGE></li>
+ </TMPL_LOOP>
+</ul>
+</TMPL_IF>
+</TMPL_IF>
+</p>
+</TMPL_IF>
diff --git a/backend/ikistrap/templates/revert.tmpl b/backend/ikistrap/templates/revert.tmpl
new file mode 100644
index 0000000..f41e93a
--- /dev/null
+++ b/backend/ikistrap/templates/revert.tmpl
@@ -0,0 +1,22 @@
+<TMPL_VAR FORM-START>
+<div>
+ <TMPL_VAR FIELD-DO>
+ <TMPL_VAR FIELD-SID>
+ <TMPL_VAR FIELD-REV>
+ <label for="revertmessage" class="block">Optional comment about this change:</label>
+ <TMPL_VAR FIELD-REVERTMESSAGE>
+</div>
+<div class="revert buttons">
+ <TMPL_VAR form-submit>
+ <TMPL_VAR form-cancel>
+</div>
+<TMPL_VAR FORM-END>
+<br \>
+<div class="header">
+ <span>Diff being reverted:</span>
+</div>
+<div id="diff">
+ <pre>
+ <TMPL_VAR diff>
+ </pre>
+</div>
diff --git a/backend/ikistrap/templates/rssitem.tmpl b/backend/ikistrap/templates/rssitem.tmpl
new file mode 100644
index 0000000..bb03ca5
--- /dev/null
+++ b/backend/ikistrap/templates/rssitem.tmpl
@@ -0,0 +1,28 @@
+<item>
+ <title><TMPL_VAR TITLE></title>
+<TMPL_IF GUID>
+ <guid isPermaLink="false"><TMPL_VAR GUID></guid>
+<TMPL_ELSE>
+ <guid isPermaLink="false"><TMPL_VAR URL></guid>
+</TMPL_IF>
+ <link><TMPL_VAR PERMALINK></link>
+<TMPL_IF AUTHOR>
+ <dc:creator><TMPL_VAR AUTHOR ESCAPE=HTML></dc:creator>
+</TMPL_IF>
+<TMPL_IF CATEGORIES>
+<TMPL_LOOP CATEGORIES>
+ <category><TMPL_VAR CATEGORY></category>
+</TMPL_LOOP>
+</TMPL_IF>
+ <pubDate><TMPL_VAR CDATE_822></pubDate>
+ <dcterms:modified><TMPL_VAR MDATE_3339></dcterms:modified>
+<TMPL_IF ENCLOSURE>
+ <enclosure url="<TMPL_VAR ENCLOSURE>" type="<TMPL_VAR TYPE>" length="<TMPL_VAR LENGTH>" />
+</TMPL_IF>
+<TMPL_UNLESS SIMPLEPODCAST>
+ <description><TMPL_VAR CONTENT ESCAPE=HTML></description>
+</TMPL_UNLESS>
+<TMPL_IF COMMENTSURL>
+ <comments><TMPL_VAR COMMENTSURL></comments>
+</TMPL_IF>
+</item>
diff --git a/backend/ikistrap/templates/rsspage.tmpl b/backend/ikistrap/templates/rsspage.tmpl
new file mode 100644
index 0000000..4f36306
--- /dev/null
+++ b/backend/ikistrap/templates/rsspage.tmpl
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<rss version="2.0"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:dcterms="http://purl.org/dc/terms/"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+<channel>
+ <title><TMPL_VAR TITLE></title>
+ <link><TMPL_VAR PAGEURL></link>
+ <atom:link href="<TMPL_VAR FEEDURL>" rel="self" type="application/rss+xml"/>
+ <TMPL_IF COPYRIGHT>
+ <copyright><TMPL_VAR COPYRIGHT ESCAPE=HTML></copyright>
+ </TMPL_IF>
+ <description><TMPL_VAR FEEDDESC ESCAPE=HTML></description>
+ <generator>ikiwiki</generator>
+ <pubDate><TMPL_VAR FEEDDATE_822></pubDate>
+ <TMPL_VAR CONTENT>
+</channel>
+</rss>
diff --git a/backend/ikistrap/templates/searchform.tmpl b/backend/ikistrap/templates/searchform.tmpl
new file mode 100644
index 0000000..6029000
--- /dev/null
+++ b/backend/ikistrap/templates/searchform.tmpl
@@ -0,0 +1,6 @@
+<form method="get" action="<TMPL_VAR SEARCHACTION>" id="searchform" class="form-inline input-group input-group-sm pull-xs-right">
+ <input type="text" id="searchbox" name="P" value="" size="12" placeholder="Search…" class="form-control" />
+ <span class="input-group-btn">
+ <button class="btn btn-secondary" type="submit"><i class="fa fa-search"></i></button>
+ </span>
+</form>
diff --git a/backend/ikistrap/templates/searchquery.tmpl b/backend/ikistrap/templates/searchquery.tmpl
new file mode 100644
index 0000000..6277266
--- /dev/null
+++ b/backend/ikistrap/templates/searchquery.tmpl
@@ -0,0 +1,113 @@
+$setmap{prefix,title,S}
+$setmap{prefix,link,XLINK}
+$set{thousand,$.}$set{decimal,.}$setmap{BN,,Any Country,uk,England,fr,France}
+${
+$def{PREV,
+$if{$ne{$topdoc,0},<INPUT TYPE=image NAME="&lt;" ALT="&lt;"
+SRC="/images/xapian-omega/prev.png" BORDER=0 HEIGHT=30 WIDTH=30>,
+<IMG ALT="" SRC="/images/xapian-omega/prevoff.png" HEIGHT=30 WIDTH=30>}
+}
+
+$def{NEXT,
+$if{$ne{$last,$msize},<INPUT TYPE=image NAME="&gt;" ALT="&gt;"
+SRC="/images/xapian-omega/next.png" BORDER=0 HEIGHT=30 WIDTH=30>,
+<IMG ALT="" SRC="/images/xapian-omega/nextoff.png" HEIGHT=30 WIDTH=30>}
+}
+
+$def{P,<INPUT TYPE=image NAME="$1" VALUE="$1" SRC="/images/xapian-omega/page-$2.png" BORDER=0$opt{a} ALT="$1">}
+$def{PAGE,$if{$gt{$1,9},$if{$gt{$1,99},$P{$1,$div{$1,100}}}$P{$1,$mod{$div{$1,10},10}}}$P{$1,$mod{$1,10}}}
+
+$def{S,<IMG SRC="/images/xapian-omega/page-$2s.png"$opt{a} ALT=$1>}
+$def{SPAGE,$if{$gt{$1,9},$if{$gt{$1,99},$S{$1,$div{$1,100}}}$S{$1,$mod{$div{$1,10},10}}}$S{$1,$mod{$1,10}}}
+}
+
+$def{PREV,$if{$ne{$topdoc,0},<INPUT TYPE=submit NAME="&lt;" VALUE="Previous">}}
+
+$def{PAGE,<INPUT TYPE=submit NAME="[" VALUE="$1">}
+
+$def{SPAGE,<INPUT TYPE=submit NAME="[" VALUE="$1" DISABLED=disabled>}
+
+$def{NEXT,$if{$ne{$last,$msize},<INPUT TYPE=submit NAME="&gt;" VALUE="Next">}}
+
+<p>
+
+<FORM NAME=P METHOD=GET
+ACTION="$html{$env{CGIURL}}" TARGET="_top">
+<div class="searchquery" style="text-align:center">
+<INPUT class="searchbox" NAME=P VALUE="$html{$query}" SIZE=65>
+<INPUT TYPE=SUBMIT VALUE="Search">
+$env{HELPLINK}
+<hr>
+<SELECT NAME=DEFAULTOP>
+<OPTION VALUE=or $if{$eq{$defaultop,or},SELECTED}>Matching any words
+<OPTION VALUE=and $if{$eq{$defaultop,and},SELECTED}>Matching all words
+</SELECT>
+$or{$html{$error},
+$if{$eq{$msize,0},
+$if{$query,No documents match your query,
+<hr>Searching $nice{$dbsize} documents
+},
+$if{$not{$msizeexact},
+ $nice{$add{$topdoc,1}}-$nice{$last} of about $nice{$msize} matches,
+ $if{$and{$eq{$last,$msize},$eq{$topdoc,0}},
+ All $nice{$msize} matches,
+ $nice{$add{$topdoc,1}}$if{$ne{$add{$topdoc,1},$last},-$nice{$last}} of exactly $nice{$msize} matches}
+}
+<hr>
+</div>
+$list{$map{$queryterms,$list{$html{$uniq{$unstem{$_}}},<b>,</b>/<b>,</b>}:&nbsp;$nice{$freq{$_}}},Term frequencies: ,$. ,}
+<br><small>Search took $time seconds</small>
+<table>
+$hitlist{<tr><td valign=top>
+${<IMG SRC="/images/xapian-omega/score-$div{$percentage,10}.png" ALT="$percentage%" HEIGHT=16 WIDTH=32>}
+<div title="$percentage%" style='float:left;width:60px;height:10px;border:1px solid black;margin-top:4px;'>
+<div style='width:$div{$mul{$percentage,6},10}px; height:10px; background-color: red;'>
+</div></div>
+<div style='float:left;margin-top:2px;font-size:x-small;'>
+<span title="$html{$date{$field{modtime},%Y-%m-%d %H:%M:%S}}">
+Modified:<br><b>$html{$date{$field{modtime},%Y-%m-%d}}</b></span><br>
+$if{$field{language},Language: <b>$html{$field{language}}</b><br>}
+$if{$field{size},<span title="$html{$field{size}} bytes">Size: <b>$html{$filesize{$field{size}}}</b></span><br>}
+</div>
+</td>
+<td><B><A HREF="$html{$field{url}}">$html{$or{$field{caption},$field{title},$field{url},Untitled}}</A></B><BR>
+<small>$highlight{$field{sample},$terms}$if{$field{sample},...}</small><br>
+<small>
+$percentage% relevant$. matching:
+<i>$list{$map{$terms,$html{$prettyterm{$_}}},$. ,</i> and <i>}</i></small>${for lynx:}<p></td></tr>}
+</table>
+
+<br />
+
+<div style="text-align:center">
+${suppress next, prev, and page links if there's only one page}
+$if{$ne{$lastpage,1},
+$set{a,$if{$opt{pagelink_height}, HEIGHT=$opt{pagelink_height}}$if{$opt{pagelink_width}, WIDTH=$opt{pagelink_width}}}
+
+${1-W ... X-(this)-Y ...}
+$set{w,$min{3,$add{$thispage,-1}}}
+$set{x,$max{$add{$opt{w},1},$add{$thispage,-3}}}
+$set{y,$min{$lastpage,$add{$thispage,8}}}
+$PREV
+$map{$range{1,$opt{w}},$PAGE{$_}}
+$if{$ne{$add{$opt{w},1},$opt{x}},...}
+$map{$range{$opt{x},$add{$thispage,-1}},$PAGE{$_}}
+$SPAGE{$thispage}
+$map{$range{$add{$thispage,1},$opt{y}},$PAGE{$_}}
+$if{$ne{$opt{y},$lastpage},...}
+$NEXT
+}
+}}
+</div><br />
+$if{$dbname,<INPUT TYPE=hidden NAME=DB VALUE="$html{$dbname}">}
+$if{$ne{$topdoc,0},<INPUT TYPE=hidden NAME=TOPDOC VALUE=$topdoc>}
+$if{$ne{$hitsperpage,10},<INPUT TYPE=hidden NAME=HITSPERPAGE VALUE=$hitsperpage>}
+$if{$fmt,<INPUT TYPE=hidden NAME=FMT VALUE="$html{$fmt}">}
+$if{$cgi{COLLAPSE},<INPUT TYPE=hidden NAME=COLLAPSE VALUE="$html{$cgi{COLLAPSE}}">}
+$if{$queryterms,<INPUT TYPE=hidden NAME=xP VALUE="$html{$queryterms}">}
+<INPUT TYPE=hidden NAME=xDB VALUE="$html{$dbname}">
+<INPUT TYPE=hidden NAME=xFILTERS VALUE="$html{$filters}">
+$list{$relevants,<INPUT TYPE=hidden NAME=R VALUE=",.,">}
+$if{$cgi{THRESHOLD},<INPUT TYPE=hidden NAME=THRESHOLD VALUE="$html{$cgi{THRESHOLD}}">}
+</FORM>
+<hr><div align=right><i><small><a href="http://www.xapian.org/">$html{$version}</a></small></i></div>
diff --git a/backend/ikistrap/templates/simplecard.tmpl b/backend/ikistrap/templates/simplecard.tmpl
new file mode 100644
index 0000000..041b9ef
--- /dev/null
+++ b/backend/ikistrap/templates/simplecard.tmpl
@@ -0,0 +1,3 @@
+<div class="card card-block">
+ <TMPL_VAR CONTENT>
+</div>
diff --git a/backend/ikistrap/templates/titlepage.tmpl b/backend/ikistrap/templates/titlepage.tmpl
new file mode 100644
index 0000000..6326bab
--- /dev/null
+++ b/backend/ikistrap/templates/titlepage.tmpl
@@ -0,0 +1,7 @@
+<p>
+<TMPL_IF PERMALINK>
+<a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a>
+<TMPL_ELSE>
+<a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a>
+</TMPL_IF>
+</p>
diff --git a/backend/ikistrap/templates/trails.tmpl b/backend/ikistrap/templates/trails.tmpl
new file mode 100644
index 0000000..1eb8031
--- /dev/null
+++ b/backend/ikistrap/templates/trails.tmpl
@@ -0,0 +1,23 @@
+<TMPL_LOOP TRAILLOOP>
+<TMPL_IF __FIRST__><nav class="trails"></TMPL_IF>
+<div class="trail">
+ <TMPL_IF PREVPAGE>
+ <span class="trailprev">
+ <span class="trailarrow">←</span>
+ <a href="<TMPL_VAR PREVURL>"><TMPL_VAR PREVTITLE></a>
+ <span class="trailsep">|</span>
+ </span>
+ </TMPL_IF>
+ <span class="trailup">
+ <a href="<TMPL_VAR TRAILURL>"><TMPL_VAR TRAILTITLE></a>
+ </span>
+ <TMPL_IF NEXTPAGE>
+ <span class="trailnext">
+ <span class="trailsep">|</span>
+ <a href="<TMPL_VAR NEXTURL>"><TMPL_VAR NEXTTITLE></a>
+ <span class="trailarrow">→</span>
+ </span>
+ </TMPL_IF>
+</div>
+<TMPL_IF __LAST__></nav></TMPL_IF>
+</TMPL_LOOP>
diff --git a/backend/ikistrap/tidy.config b/backend/ikistrap/tidy.config
new file mode 100644
index 0000000..e0ee067
--- /dev/null
+++ b/backend/ikistrap/tidy.config
@@ -0,0 +1,9 @@
+quiet: yes
+indent: yes
+indent-with-tabs: yes
+wrap: 0
+hide-comments: yes
+omit-optional-tags: yes
+punctuation-wrap: yes
+tidy-mark: no
+drop-empty-elements: no
diff --git a/backend/ikiwiki.setup b/backend/ikiwiki.setup
new file mode 100644
index 0000000..e58ddbc
--- /dev/null
+++ b/backend/ikiwiki.setup
@@ -0,0 +1,384 @@
+# IkiWiki::Setup::Yaml - YAML formatted setup file
+#
+# Setup file for ikiwiki.
+#
+# Passing this to ikiwiki --setup will make ikiwiki generate
+# wrappers and build the wiki.
+#
+# Remember to re-run ikiwiki --setup any time you edit this file.
+#
+# name of the wiki
+wikiname: A Wiki for Targeted Individuals
+# contact email for wiki
+#adminemail: me@example.com
+# users who are wiki admins
+adminuser: []
+# users who are banned from the wiki
+banned_users: []
+# where the source of the wiki is located
+srcdir: ../wiki
+# where to build the wiki
+destdir: ../html
+# base url to the wiki
+url: ''
+# url to the ikiwiki.cgi
+cgiurl: ''
+# do not adjust cgiurl if CGI is accessed via different URL
+reverse_proxy: 0
+# filename of cgi wrapper to generate
+cgi_wrapper: ''
+# mode for cgi_wrapper (can safely be made suid)
+cgi_wrappermode: 06755
+# number of seconds to delay CGI requests when overloaded
+cgi_overload_delay: ''
+# message to display when overloaded (may contain html)
+cgi_overload_message: ''
+# enable optimization of only refreshing committed changes?
+only_committed_changes: 0
+# rcs backend to use
+rcs: ''
+# plugins to add to the default configuration
+add_plugins:
+- ikistrap
+# plugins to disable
+disable_plugins: []
+# additional directory to search for template files
+templatedir: ikistrap/templates
+# base wiki source location
+underlaydir: ikistrap/basewiki
+# display verbose messages?
+#verbose: 1
+# log to syslog?
+#syslog: 1
+# create output files named page/index.html?
+usedirs: 1
+# use '!'-prefixed preprocessor directives?
+prefix_directives: 1
+# use page/index.mdwn source files
+indexpages: 0
+# enable Discussion pages?
+discussion: 1
+# name of Discussion pages
+discussionpage: Discussion
+# generate HTML5?
+html5: 0
+# only send cookies over SSL connections?
+sslcookie: 0
+# extension to use for new pages
+default_pageext: mdwn
+# extension to use for html files
+htmlext: html
+# strftime format string to display date
+timeformat: '%c'
+# UTF-8 locale to use
+#locale: en_US.UTF-8
+# put user pages below specified page
+userdir: ''
+# how many backlinks to show before hiding excess (0 to show all)
+numbacklinks: 10
+# attempt to hardlink source files? (optimisation for large files)
+hardlink: 0
+# force ikiwiki to use a particular umask (keywords public, group or private, or a number)
+#umask: public
+# group for wrappers to run in
+#wrappergroup: ikiwiki
+# extra library and plugin directory
+libdir: ikistrap/lib
+# environment variables
+ENV: {}
+# time zone name
+#timezone: US/Eastern
+# regexp of normally excluded files to include
+#include: ^\.htaccess$
+# regexp of files that should be skipped
+#exclude: ^(*\.private|Makefile)$
+# specifies the characters that are allowed in source filenames
+wiki_file_chars: -[:alnum:]+/.:_
+# allow symlinks in the path leading to the srcdir (potentially insecure)
+allow_symlinks_before_srcdir: 0
+# cookie control
+cookiejar:
+ file: /home/user/.ikiwiki/cookies
+# set custom user agent string for outbound HTTP requests e.g. when fetching aggregated RSS feeds
+useragent: ikiwiki/3.20141016.3
+
+######################################################################
+# core plugins
+# (editpage, htmlscrubber, inline, link, meta, parentlinks, templatebody)
+######################################################################
+
+# htmlscrubber plugin
+# PageSpec specifying pages not to scrub
+#htmlscrubber_skip: '!*/Discussion'
+
+# inline plugin
+# enable rss feeds by default?
+#rss: 0
+# enable atom feeds by default?
+#atom: 0
+# allow rss feeds to be used?
+#allowrss: 0
+# allow atom feeds to be used?
+#allowatom: 0
+# urls to ping (using XML-RPC) on feed update
+pingurl: []
+
+######################################################################
+# auth plugins
+# (anonok, blogspam, httpauth, lockedit, moderatedcomments,
+# opendiscussion, openid, passwordauth, signinedit)
+######################################################################
+
+# anonok plugin
+# PageSpec to limit which pages anonymous users can edit
+#anonok_pagespec: '*/discussion'
+
+# blogspam plugin
+# PageSpec of pages to check for spam
+#blogspam_pagespec: postcomment(*)
+# options to send to blogspam server
+#blogspam_options: blacklist=1.2.3.4,blacklist=8.7.6.5,max-links=10
+# blogspam server JSON url
+#blogspam_server: ''
+
+# httpauth plugin
+# url to redirect to when authentication is needed
+#cgiauthurl: http://example.com/wiki/auth/ikiwiki.cgi
+# PageSpec of pages where only httpauth will be used for authentication
+#httpauth_pagespec: '!*/Discussion'
+
+# lockedit plugin
+# PageSpec controlling which pages are locked
+#locked_pages: '!*/Discussion'
+
+# moderatedcomments plugin
+# PageSpec matching users or comment locations to moderate
+#moderate_pagespec: '*'
+
+# openid plugin
+# url pattern of openid realm (default is cgiurl)
+#openid_realm: ''
+# url to ikiwiki cgi to use for openid authentication (default is cgiurl)
+#openid_cgiurl: ''
+
+# passwordauth plugin
+# a password that must be entered when signing up for an account
+#account_creation_password: s3cr1t
+# cost of generating a password using Authen::Passphrase::BlowfishCrypt
+#password_cost: 8
+
+######################################################################
+# format plugins
+# (creole, highlight, hnb, html, mdwn, otl, rawhtml, rst, textile, txt)
+######################################################################
+
+# highlight plugin
+# types of source files to syntax highlight
+#tohighlight: .c .h .cpp .pl .py Makefile:make
+# location of highlight's filetypes.conf
+#filetypes_conf: /etc/highlight/filetypes.conf
+# location of highlight's langDefs directory
+#langdefdir: /usr/share/highlight/langDefs
+
+# mdwn plugin
+# enable multimarkdown features?
+#multimarkdown: 0
+# disable use of markdown discount?
+#nodiscount: 0
+
+######################################################################
+# special-purpose plugins
+# (osm, underlay)
+######################################################################
+
+# osm plugin
+# the default zoom when you click on the map link
+#osm_default_zoom: 15
+# the icon shown on links and on the main map
+#osm_default_icon: ikiwiki/images/osm.png
+# the alt tag of links, defaults to empty
+#osm_alt: ''
+# the output format for waypoints, can be KML, GeoJSON or CSV (one or many, comma-separated)
+#osm_format: KML
+# the icon attached to a tag, displayed on the map for tagged pages
+#osm_tag_default_icon: icon.png
+# Url for the OpenLayers.js file
+#osm_openlayers_url: http://www.openlayers.org/api/OpenLayers.js
+# Layers to use in the map. Can be either the 'OSM' string or a type option for Google maps (GoogleNormal, GoogleSatellite, GoogleHybrid or GooglePhysical). It can also be an arbitrary URL in a syntax acceptable for OpenLayers.Layer.OSM.url parameter.
+#osm_layers:
+# OSM: GoogleSatellite
+# Google maps API key, Google layer not used if missing, see https://code.google.com/apis/console/ to get an API key
+#osm_google_apikey: ''
+
+# underlay plugin
+# extra underlay directories to add
+#add_underlays:
+#- /home/user/wiki.underlay
+
+######################################################################
+# web plugins
+# (404, attachment, comments, editdiff, edittemplate, getsource, google,
+# goto, mirrorlist, remove, rename, repolist, search, theme, userlist,
+# websetup, wmd)
+######################################################################
+
+# attachment plugin
+# enhanced PageSpec specifying what attachments are allowed
+#allowed_attachments: virusfree() and mimetype(image/*) and maxsize(50kb)
+# virus checker program (reads STDIN, returns nonzero if virus found)
+#virus_checker: clamdscan -
+
+# comments plugin
+# PageSpec of pages where comments are allowed
+#comments_pagespec: blog/* and !*/Discussion
+# PageSpec of pages where posting new comments is not allowed
+#comments_closed_pagespec: blog/controversial or blog/flamewar
+# Base name for comments, e.g. "comment_" for pages like "sandbox/comment_12"
+#comments_pagename: ''
+# Interpret directives in comments?
+#comments_allowdirectives: 0
+# Allow anonymous commenters to set an author name?
+#comments_allowauthor: 0
+# commit comments to the VCS
+#comments_commit: 1
+# Restrict formats for comments to (no restriction if empty)
+#comments_allowformats: mdwn txt
+
+# getsource plugin
+# Mime type for returned source.
+#getsource_mimetype: text/plain; charset=utf-8
+
+# mirrorlist plugin
+# list of mirrors
+#mirrorlist: {}
+# generate links that point to the mirrors' ikiwiki CGI
+#mirrorlist_use_cgi: 1
+
+# repolist plugin
+# URIs of repositories containing the wiki's source
+#repositories:
+#- svn://svn.example.org/wiki/trunk
+
+# search plugin
+# path to the omega cgi program
+#omega_cgi: /usr/lib/cgi-bin/omega/omega
+# use google site search rather than internal xapian index?
+#google_search: 1
+
+# theme plugin
+# name of theme to enable
+#theme: actiontabs
+
+# websetup plugin
+# list of plugins that cannot be enabled/disabled via the web interface
+#websetup_force_plugins: []
+# list of additional setup field keys to treat as unsafe
+#websetup_unsafe: []
+# show unsafe settings, read-only, in web interface?
+#websetup_show_unsafe: 1
+
+######################################################################
+# widget plugins
+# (calendar, color, conditional, cutpaste, date, format, fortune,
+# graphviz, haiku, headinganchors, img, linkmap, listdirectives, map,
+# more, orphans, pagecount, pagestats, poll, polygen, postsparkline,
+# progress, shortcut, sparkline, table, template, teximg, toc, toggle,
+# version)
+######################################################################
+
+# calendar plugin
+# base of the archives hierarchy
+#archivebase: archives
+# PageSpec of pages to include in the archives; used by ikiwiki-calendar command
+#archive_pagespec: page(posts/*) and !*/Discussion
+
+# img plugin
+# Image formats to process (jpeg, png, gif, svg, pdf or 'everything' to accept all)
+#img_allowed_formats: ''
+
+# listdirectives plugin
+# directory in srcdir that contains directive descriptions
+#directive_description_dir: ikiwiki/directive
+
+# teximg plugin
+# Should teximg use dvipng to render, or dvips and convert?
+#teximg_dvipng: ''
+# LaTeX prefix for teximg plugin
+#teximg_prefix: '\documentclass{article}
+#
+# \usepackage[utf8]{inputenc}
+#
+# \usepackage{amsmath}
+#
+# \usepackage{amsfonts}
+#
+# \usepackage{amssymb}
+#
+# \pagestyle{empty}
+#
+# \begin{document}
+#
+#'
+# LaTeX postfix for teximg plugin
+#teximg_postfix: \end{document}
+
+######################################################################
+# other plugins
+# (aggregate, autoindex, brokenlinks, camelcase, ddate, embed, favicon,
+# filecheck, flattr, goodstuff, htmlbalance, localstyle, notifyemail,
+# pagetemplate, pingee, pinger, prettydate, recentchanges,
+# recentchangesdiff, relativedate, rsync, sidebar, smiley,
+# sortnaturally, tag, testpagespec, trail, transient)
+######################################################################
+
+# aggregate plugin
+# enable aggregation to internal pages?
+#aggregateinternal: 1
+# allow aggregation to be triggered via the web?
+#aggregate_webtrigger: 0
+
+# autoindex plugin
+# commit autocreated index pages
+#autoindex_commit: 1
+
+# camelcase plugin
+# list of words to not turn into links
+#camelcase_ignore: []
+
+# flattr plugin
+# userid or user name to use by default for Flattr buttons
+#flattr_userid: joeyh
+
+# pinger plugin
+# how many seconds to try pinging before timing out
+#pinger_timeout: 15
+
+# prettydate plugin
+# format to use to display date
+#prettydateformat: '%X, %B %o, %Y'
+
+# recentchanges plugin
+# name of the recentchanges page
+recentchangespage: recentchanges
+# number of changes to track
+recentchangesnum: 100
+
+# rsync plugin
+# command to run to sync updated pages
+#rsync_command: rsync -qa --delete . user@host:/path/to/docroot/
+
+# sidebar plugin
+# show sidebar page on all pages?
+#global_sidebars: 1
+
+# tag plugin
+# parent page tags are located under
+#tagbase: tag
+# autocreate new tag pages?
+#tag_autocreate: 1
+# commit autocreated tag pages
+#tag_autocreate_commit: 1
+
+# ikistrap plugin
+# css/js/fonts are stored locally
+bootstrap_local: 1
diff --git a/backend/resilient/__init__.py b/backend/resilient/__init__.py
index 07f3793..818a6f5 100644
--- a/backend/resilient/__init__.py
+++ b/backend/resilient/__init__.py
@@ -8,14 +8,12 @@ import urllib
__all__ = ["freenet"]
-## Set to change default title
-name = 'A Wiki for Targeted Individuals'
-
backend_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
auth_path = os.path.join(backend_path, 'auth')
html_path = os.path.normpath(os.path.join(backend_path, '../html'))
wiki_src_path = os.path.normpath(os.path.join(backend_path, '../wiki'))
+ikiwiki_setup_path = os.path.join(backend_path, 'ikiwiki.setup')
git_path = os.path.normpath(os.path.join(backend_path, '../.git'))
ssh_config_path = os.path.join(auth_path, "ssh-config")
@@ -78,7 +76,7 @@ class ikiwiki:
shutil.rmtree(html_path)
os.mkdir(html_path)
- status = os.system("ikiwiki --wikiname '%s' --rebuild '%s' '%s'" % (name.replace("'","'\"'\"'"), wiki_src_path, html_path))
+ status = os.system("ikiwiki --setup '%s' '%s' '%s'" % (ikiwiki_setup_path, wiki_src_path, html_path))
ikiwiki.synced = (status == 0)
if ikiwiki.synced: