├── .gitignore ├── Makefile ├── README.md ├── basewiki ├── favicon.ico ├── ikiwiki.mdwn ├── ikiwiki │ ├── directive.mdwn │ ├── formatting.mdwn │ ├── markdown.mdwn │ ├── openid.mdwn │ ├── pagespec.mdwn │ ├── pagespec │ │ ├── attachment.mdwn │ │ ├── po.mdwn │ │ └── sorting.mdwn │ ├── searching.mdwn │ ├── subpage.mdwn │ ├── subpage │ │ └── linkingrules.mdwn │ └── wikilink.mdwn ├── index.mdwn ├── local.css ├── recentchanges.mdwn ├── sandbox.mdwn ├── shortcuts.mdwn ├── style.css ├── templates.mdwn ├── templates │ ├── note.mdwn │ └── popup.mdwn └── wikiicons │ ├── diff.png │ ├── email.png │ ├── openidlogin-bg.gif │ ├── revert.png │ └── search-bg.gif ├── example.setup ├── example ├── Anemones.jpg ├── Bootstrap_features.mdwn ├── Calendars.mdwn ├── Comments.mdwn ├── Comments │ ├── comment_1._comment │ └── comment_2._comment ├── Inline_pages.mdwn ├── Lemonshark.jpg ├── Sea_Star.jpg ├── index.mdwn ├── inlinetest.mdwn ├── sample_text │ ├── Donec_dapibus.mdwn │ ├── Donec_semper.mdwn │ ├── Lorem_ipsum.mdwn │ ├── Nulla_facilisi.mdwn │ └── Sed_eget.mdwn └── sidebar.mdwn ├── ikistrap.svg ├── lib └── IkiWiki │ └── Plugin │ ├── ikistrap.pm │ └── recentchanges.pm ├── templates ├── aggregatepost.tmpl ├── archivepage.tmpl ├── atomitem.tmpl ├── atompage.tmpl ├── autoindex.tmpl ├── autotag.tmpl ├── blogpost.tmpl ├── calendarmonth.tmpl ├── calendaryear.tmpl ├── carouselimage.tmpl ├── carouselpage.tmpl ├── change.tmpl ├── comment.tmpl ├── commentmoderation.tmpl ├── editcomment.tmpl ├── editconflict.tmpl ├── editcreationconflict.tmpl ├── editfailedsave.tmpl ├── editpage.tmpl ├── editpagegone.tmpl ├── emailauth.tmpl ├── feedlink.tmpl ├── googleform.tmpl ├── gridcard.tmpl ├── inlinepage.tmpl ├── login-selector.tmpl ├── microblog.tmpl ├── notifyemail.tmpl ├── page.tmpl ├── passwordmail.tmpl ├── pocreatepage.tmpl ├── recentchanges.tmpl ├── renamesummary.tmpl ├── revert.tmpl ├── rssitem.tmpl ├── rsspage.tmpl ├── searchform.tmpl ├── searchquery.tmpl ├── simplecard.tmpl ├── titlepage.tmpl └── trails.tmpl └── tidy.config /.gitignore: -------------------------------------------------------------------------------- 1 | /example.html 2 | /example/.ikiwiki 3 | /example/cgi_wrapper 4 | /example/tag 5 | *.swp 6 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | HTML_TIDY=./tidy.config ikiwiki --setup example.setup --refresh 3 | 4 | rebuild: 5 | HTML_TIDY=./tidy.config ikiwiki --setup example.setup --rebuild 6 | 7 | tidy: 8 | HTML_TIDY=./tidy.config tidy -m `find example.html/ -type f -name '*.html'` 9 | 10 | 11 | .PHONY: all rebuild 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ikistrap, a Bootstrap 5 theme for ikiwiki 2 | 3 | [Ikiwiki](https://ikiwiki.info/) is a very powerful [wiki](https://en.wikipedia.org/wiki/Wiki) compiler. 4 | However, its default theme is very minimalistic. 5 | Ikistrap is a theme that uses [Bootstrap](http://getbootstrap.com/) 5 to ensure you have a wiki that looks professional, 6 | whether you are viewing it on your desktop computer or on your mobile phone. 7 | 8 | To use ikistrap in your own wiki, just add the following to your setup file: 9 | 10 | templatedir: /path/to/ikistrap/templates 11 | underlaydir: /path/to/ikistrap/basewiki 12 | 13 | Ikistrap comes with an example wiki that shows off its features, 14 | and shows you how to integrate some Bootstrap 5 features into your `.mdwn` files. 15 | Use the `Makefile` to compile the example wiki. The example wiki relies on the 16 | multimarkdown and imagemagick libraries for Perl. On Debian, these are available 17 | in the libtext-multimarkdown-perl and perlmagick packages. 18 | -------------------------------------------------------------------------------- /basewiki/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/basewiki/favicon.ico -------------------------------------------------------------------------------- /basewiki/ikiwiki.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | This wiki is powered by [ikiwiki](http://ikiwiki.info/). 3 | [[!if test="enabled(version)" 4 | then="(Currently running version [[!version ]].)" 5 | ]] 6 | 7 | Some documentation on using ikiwiki: 8 | 9 | * [[ikiwiki/formatting]] 10 | * [[ikiwiki/wikilink]] 11 | * [[ikiwiki/subpage]] 12 | * [[ikiwiki/pagespec]] 13 | * [[ikiwiki/directive]] 14 | * [[ikiwiki/markdown]] 15 | * [[ikiwiki/openid]] 16 | * [[ikiwiki/searching]] 17 | * [[templates]] 18 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/directive.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | Directives are similar to a [[ikiwiki/WikiLink]] in form, except they 3 | begin with `!` and may contain parameters. The general form is: 4 | 5 | \[[!directive param="value" param="value"]] 6 | 7 | This gets expanded before the rest of the page is processed, and can be used 8 | to transform the page in various ways. 9 | 10 | The quotes around values can be omitted if the value is a simple word. 11 | Also, some directives may use parameters without values, for example: 12 | 13 | \[[!tag foo]] 14 | 15 | A directive does not need to all be on one line, it can be 16 | wrapped to multiple lines if you like: 17 | 18 | \[[!directive foo="baldersnatch" 19 | bar="supercalifragilisticexpialidocious" baz=11]] 20 | 21 | Also, multiple lines of *quoted* text can be used for a value. 22 | To allow quote marks inside the quoted text, delimit the block 23 | of text with triple-double-quotes or triple-single-quotes: 24 | 25 | \[[!directive text=""" 26 | 1. "foo" 27 | 2. "bar" 28 | 3. "baz" 29 | """ othertext=''' 30 | 1. 'quux' 31 | 2. "foo" 32 | ''']] 33 | 34 | If you want to put text with triple quotes into a parameter value, you can 35 | use perl-style here-doc syntax, even nesting it like this: 36 | 37 | \[[!directive text=<": 42 | 43 | > To be or not to be, 44 | > that is the question. 45 | 46 | To write a code block, indent each line with a tab or 4 spaces: 47 | 48 | 10 PRINT "Hello, world!" 49 | 20 GOTO 10 50 | 51 | To link to an url or email address, you can just put the 52 | url in angle brackets: <>, or you can use the 53 | form \[link text\]\(url\) 54 | 55 | ---- 56 | 57 | In addition to basic html formatting using [[MarkDown]], this wiki lets 58 | you use the following additional features: 59 | 60 | * To link to another page on the wiki, place the page's name inside double 61 | square brackets. So you would use `\[[WikiLink]]` to link to [[WikiLink]]. 62 | 63 | [[!if test="enabled(smiley) and smileys" then=""" 64 | * Insert [[smileys]] and some other useful symbols. :-) 65 | """]] 66 | 67 | [[!if test="enabled(shortcut) and shortcuts" then=""" 68 | * Use [[shortcuts]] to link to common resources. 69 | 70 | \[[!wikipedia War\_of\_1812]] 71 | """]] 72 | 73 | [[!if test="enabled(template) and templates" then=""" 74 | * Create and fill out [[templates]] for repeated chunks of 75 | parameterized wiki text. 76 | """]] 77 | 78 | * Insert various [[directives|directive]] onto a page to perform useful 79 | actions. 80 | [[!if test="enabled(toc) or enabled(meta) or enabled(inline)" then=""" 81 | For example, you can: 82 | """]] 83 | 84 | [[!if test="enabled(toc)" then=""" 85 | * Add a table of contents to a page: 86 | 87 | \[[!toc]] 88 | """]] 89 | 90 | 91 | [[!if test="enabled(meta)" then=""" 92 | * Change the title of a page: 93 | 94 | \[[!meta title="full page title"]] 95 | """]] 96 | 97 | [[!if test="enabled(inline)" then=""" 98 | * Create a blog by inlining a set of pages: 99 | 100 | \[[!inline pages="blog/*"]] 101 | """]] 102 | 103 | [[!if test="enabled(listdirectives)" then=""" 104 | Full list of [[directives|directive]] enabled for this wiki: 105 | [[!listdirectives ]] 106 | """]] 107 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/markdown.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | [Markdown](http://daringfireball.net/projects/markdown/) 3 | is a minimal markup language that resembles plain text as used in 4 | email messages. It is the markup language used by this wiki by default. 5 | 6 | For documentation about the markdown syntax, see [[formatting]] and 7 | [Markdown: syntax](http://daringfireball.net/projects/markdown/syntax). 8 | 9 | Note that [[WikiLinks|WikiLink]] and [[directives|directive]] are not part 10 | of the markdown syntax, and are the only bit of markup that this wiki 11 | handles internally. 12 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/openid.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta title="OpenID"]] 2 | [[!meta robots="noindex, follow"]] 3 | 4 | [[!if test="enabled(openid)" 5 | then="This wiki has OpenID **enabled**." 6 | else="This wiki has OpenID **disabled**."]] 7 | 8 | [OpenID](http://openid.net) is a decentralized authentication mechanism 9 | that allows you to have one login that you can use on a growing number of 10 | websites. 11 | 12 | If you have an account with some of the larger web service providers, 13 | you might already have an OpenID. 14 | [Directory of OpenID providers](http://openiddirectory.com/openid-providers-c-1.html) 15 | 16 | [[!if test="enabled(openid)" then=""" 17 | To sign in to this wiki using OpenID, just enter it in the OpenID field in the 18 | signin form. You do not need to give this wiki a password or go through any 19 | registration process when using OpenID. 20 | """]] 21 | 22 | --- 23 | 24 | It's also possible to make a page in the wiki usable as an OpenID url, 25 | by delegating it to an openid server. Here's an example of how to do that: 26 | 27 | \[[!meta openid="http://yourid.myopenid.com/" 28 | server="http://www.myopenid.com/server"]] 29 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/pagespec.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | To select a set of pages, such as pages that are locked, pages 3 | whose commit emails you want subscribe to, or pages to combine into a 4 | blog, the wiki uses a PageSpec. This is an expression that matches 5 | a set of pages. 6 | 7 | The simplest PageSpec is a simple list of pages. For example, this matches 8 | any of the three listed pages: 9 | 10 | foo or bar or baz 11 | 12 | More often you will want to match any pages that have a particular thing in 13 | their name. You can do this using a glob pattern. "`*`" stands for any part 14 | of a page name, and "`?`" for any single letter of a page name. So this 15 | matches all pages about music, and any [[SubPage]]s of the SandBox, but does 16 | not match the SandBox itself: 17 | 18 | *music* or SandBox/* 19 | 20 | You can also prefix an item with "`!`" to skip pages that match it. So to 21 | match all pages except for Discussion pages and the SandBox: 22 | 23 | * and !SandBox and !*/Discussion 24 | 25 | Some more elaborate limits can be added to what matches using these functions: 26 | 27 | * "`glob(someglob)`" - matches pages and other files that match the given glob. 28 | Just writing the glob by itself is actually a shorthand for this function. 29 | * "`page(glob)`" - like `glob()`, but only matches pages, not other files 30 | * "`link(page)`" - matches only pages that link to a given page (or glob) 31 | * "`tagged(tag)`" - matches pages that are tagged or link to the given tag (or 32 | tags matched by a glob) 33 | * "`backlink(page)`" - matches only pages that a given page links to 34 | * "`creation_month(month)`" - matches only files created on the given month 35 | number 36 | * "`creation_day(mday)`" - or day of the month 37 | * "`creation_year(year)`" - or year 38 | * "`created_after(page)`" - matches only files created after the given page 39 | was created 40 | * "`created_before(page)`" - matches only files created before the given page 41 | was created 42 | * "`internal(glob)`" - like `glob()`, but matches even internal-use 43 | pages that globs do not usually match. 44 | * "`title(glob)`", "`author(glob)`", "`authorurl(glob)`", 45 | "`license(glob)`", "`copyright(glob)`", "`guid(glob)`" 46 | - match pages that have the given metadata, matching the specified glob. 47 | * "`user(username)`" - tests whether a modification is being made by a 48 | user with the specified username. If openid is enabled, an openid can also 49 | be put here. Glob patterns can be used in the username. For example, 50 | to match all openid users, use `user(*://*)` 51 | * "`admin()`" - tests whether a modification is being made by one of the 52 | wiki admins. 53 | * "`ip(address)`" - tests whether a modification is being made from the 54 | specified IP address. Glob patterns can be used in the address. For 55 | example, `ip(127.0.0.*)` 56 | * "`comment(glob)`" - matches comments to a page matching the glob. 57 | * "`comment_pending(glob)`" - matches unmoderated, pending comments. 58 | * "`postcomment(glob)`" - matches only when comments are being 59 | posted to a page matching the specified glob 60 | 61 | For example, to match all pages in a blog that link to the page about music 62 | and were written in 2005: 63 | 64 | blog/* and link(music) and creation_year(2005) 65 | 66 | Note the use of "and" in the above example, that means that only pages that 67 | match each of the three expressions match the whole. Use "and" when you 68 | want to combine expression like that; "or" when it's enough for a page to 69 | match one expression. Note that it doesn't make sense to say "index and 70 | SandBox", since no page can match both expressions. 71 | 72 | If you want to include only one level of subpages, you can use 73 | 74 | blog/* and !blog/*/* 75 | 76 | More complex expressions can also be created, by using parentheses for 77 | grouping. For example, to match pages in a blog that are tagged with either 78 | of two tags, use: 79 | 80 | blog/* and (tagged(foo) or tagged(bar)) 81 | 82 | Note that page names in PageSpecs are matched against the absolute 83 | filenames of the pages in the wiki, so a pagespec "foo" used on page 84 | "a/b" will not match a page named "a/foo" or "a/b/foo". To match 85 | relative to the directory of the page containing the pagespec, you can 86 | use "./". For example, "./foo" on page "a/b" matches page "a/foo". 87 | 88 | To indicate the name of the page the PageSpec is used in, you can 89 | use a single dot. For example, `link(.)` matches all the pages 90 | linking to the page containing the PageSpec. 91 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/pagespec/attachment.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | [[!if test="enabled(attachment)" 3 | then="This wiki has attachments **enabled**." 4 | else="This wiki has attachments **disabled**."]] 5 | 6 | If attachments are enabled, the wiki admin can control what types of 7 | attachments will be accepted, via the `allowed_attachments` 8 | configuration setting. 9 | 10 | For example, to limit most users to uploading small images, and nothing else, 11 | while allowing larger mp3 files to be uploaded by joey into a specific 12 | directory, and check all attachments for viruses, something like this could be 13 | used: 14 | 15 | virusfree() and ((user(joey) and podcast/*.mp3 and mimetype(audio/mpeg) and maxsize(15mb)) or ((mimetype(image/jpeg) or mimetype(image/png)) and maxsize(50kb))) 16 | 17 | The regular [[ikiwiki/PageSpec]] syntax is expanded with the following 18 | additional tests: 19 | 20 | * "`maxsize(size)`" - tests whether the attachment is no larger than the 21 | specified size. The size defaults to being in bytes, but "kb", "mb", "gb" 22 | etc can be used to specify the units. 23 | 24 | * "`minsize(size)`" - tests whether the attachment is no smaller than the 25 | specified size. 26 | 27 | * "`ispage()`" - tests whether the attachment will be treated by ikiwiki as a 28 | wiki page. (Ie, if it has an extension of ".mdwn", or of any other enabled 29 | page format). 30 | 31 | So, if you don't want to allow wiki pages to be uploaded as attachments, 32 | use `!ispage()` ; if you only want to allow wiki pages to be uploaded 33 | as attachments, use `ispage()`. 34 | 35 | * "`mimetype(foo/bar)`" - checks the MIME type of the attachment. You can 36 | include a glob in the type, for example `mimetype(image/*)`. 37 | 38 | * "`virusfree()`" - checks the attachment with an antiviral program. 39 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/pagespec/po.mdwn: -------------------------------------------------------------------------------- 1 | [[!if test="enabled(po)" 2 | then="This wiki has po support **enabled**." 3 | else="This wiki has po support **disabled**."]] 4 | 5 | If the [[!iki plugins/po desc=po]] plugin is enabled, the regular 6 | [[ikiwiki/PageSpec]] syntax is expanded with the following additional 7 | tests that can be used to improve user navigation in a multi-lingual 8 | wiki: 9 | 10 | * "`lang(LL)`" - tests whether a page is written in the language 11 | specified as a ISO639-1 (two-letter) language code. 12 | * "`currentlang()`" - tests whether a page is written in the same 13 | language as the current page. 14 | * "`needstranslation()`" - tests whether a page needs translation 15 | work. Only slave pages match this PageSpec. A minimum target 16 | translation percentage can optionally be passed as an integer 17 | parameter: "`needstranslation(50)`" matches only pages less than 50% 18 | translated. 19 | 20 | Note that every non-po page is considered to be written in 21 | `po_master_language`, as specified in `ikiwiki.setup`. 22 | 23 | [[!meta robots="noindex, follow"]] 24 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/pagespec/sorting.mdwn: -------------------------------------------------------------------------------- 1 | Some [[directives|ikiwiki/directive]] that use 2 | [[PageSpecs|ikiwiki/pagespec]] allow 3 | specifying the order that matching pages are shown in. The following sort 4 | orders can be specified using the `sort` parameter: 5 | 6 | * `age` - List pages from the most recently created to the oldest. 7 | 8 | * `mtime` - List pages with the most recently modified first. 9 | 10 | * `title` - Order by title (page name), e.g. "z/a a/b a/c" 11 | 12 | * `path` - Order by page name including parents, e.g. "a/b a/c z/a" 13 | [[!if test="enabled(sortnaturally)" then=""" 14 | * `title_natural` - Orders by title, but numbers in the title are treated 15 | as such, ("1 2 9 10 20" instead of "1 10 2 20 9") 16 | 17 | * `path_natural` - Like `path`, but numbers in the title are treated as such 18 | """]] 19 | [[!if test="enabled(meta)" then=""" 20 | * `meta(title)` - Order according to the `\[[!meta title="foo" sortas="bar"]]` 21 | or `\[[!meta title="foo"]]` [[ikiwiki/directive]], or the page name if no 22 | full title was set. `meta(author)`, `meta(date)`, `meta(updated)`, etc. 23 | also work. 24 | """]] 25 | 26 | In addition, you can combine several sort orders and/or reverse the order of 27 | sorting, with a string like `age -title` (which would sort by age, then by 28 | title in reverse order if two pages have the same age). 29 | 30 | [[!meta robots="noindex, follow"]] 31 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/searching.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | 3 | [[!if test="enabled(search)" 4 | then="This wiki has searching **enabled**." 5 | else="This wiki has searching **disabled**."]] 6 | 7 | If searching is enabled, you can enter search terms in the search field, 8 | as you'd expect. There are a few special things you can do to construct 9 | more powerful searches. 10 | 11 | * To match a phrase, enclose it in double quotes. 12 | * `AND` can be used to search for documents containing two expressions. 13 | * `OR` can be used to search for documents containing either one of 14 | two expressions. 15 | * Parentheses can be used to build up complicated search expressions. For 16 | example, "(foo AND bar) OR (me AND you)" 17 | * Prefix a search term with "-" to avoid it from appearing in the results. 18 | For example, "-discussion" will omit "discussion". 19 | * To search for a page with a given title, use "title:foo". 20 | * To search for pages that contain a "bar" link, use "link:bar". 21 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/subpage.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | ikiwiki supports placing pages in a directory hierarchy. For example, 3 | this page, [[SubPage]] has some related pages placed under it, like 4 | [[SubPage/LinkingRules]]. This is a useful way to add some order to your 5 | wiki rather than just having a great big directory full of pages. 6 | 7 | To add a SubPage, just make a subdirectory and put pages in it. For 8 | example, this page is subpage.mdwn in this wiki's source, and there is also 9 | a subpage subdirectory, which contains subpage/linkingrules.mdwn. Subpages 10 | can be nested as deeply as you'd like. 11 | 12 | Linking to and from a SubPage is explained in [[LinkingRules]]. 13 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/subpage/linkingrules.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | To link to or from a [[SubPage]], you can normally use a regular 3 | [[WikiLink]] that does not contain the name of the parent directory of 4 | the [[SubPage]]. Ikiwiki descends the directory hierarchy looking for a 5 | page that matches your link. 6 | 7 | For example, if FooBar/SubPage links to "OtherPage", ikiwiki will first 8 | prefer pointing the link to FooBar/SubPage/OtherPage if it exists, next 9 | to FooBar/OtherPage and finally to OtherPage in the root of the wiki. 10 | 11 | Note that this means that if a link on FooBar/SomePage to "OtherPage" 12 | currently links to OtherPage, in the root of the wiki, and FooBar/OtherPage 13 | is created, the link will _change_ to point to FooBar/OtherPage. On the 14 | other hand, a link from BazBar to "OtherPage" would be unchanged by this 15 | creation of a [[SubPage]] of FooBar. 16 | 17 | You can also specify a link that contains a directory name, like 18 | "FooBar/OtherPage" to more exactly specify what page to link to. This is 19 | the only way to link to an unrelated [[SubPage]]. 20 | 21 | You can use this to, for example, to link from BazBar to "FooBar/SubPage", 22 | or from BazBar/SubPage to "FooBar/SubPage". 23 | 24 | You can also use "/" at the start of a link, to specify exactly which page 25 | to link to, when there are multiple pages with similar names and the link 26 | goes to the wrong page by default. For example, linking from 27 | "FooBar/SubPage" to "/OtherPage" will link to the "OtherPage" in the root 28 | of the wiki, even if there is a "FooBar/OtherPage". 29 | 30 | Also, if the wiki is configured with a userdir, you can link to pages 31 | within the userdir without specifying a path to them. This is to allow for 32 | easy linking to a user's page in the userdir, to sign a comment. These 33 | links are checked for last of all. 34 | -------------------------------------------------------------------------------- /basewiki/ikiwiki/wikilink.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta robots="noindex, follow"]] 2 | WikiLinks provide easy linking between pages of the wiki. To create a 3 | [[WikiLink]], just put the name of the page to link to in double brackets. 4 | For example `\[[WikiLink]]`. 5 | 6 | If you ever need to write something like `\[[WikiLink]]` without creating a 7 | wikilink, just prefix it with a `\`, like `\\[[WikiLink]]`. 8 | 9 | There are some special [[SubPage/LinkingRules]] that come into play when 10 | linking between [[SubPages|SubPage]]. 11 | 12 | WikiLinks are matched with page names in a case-insensitive manner, so you 13 | don't need to worry about getting the case the same, and can capitalise 14 | links at the start of a sentence, and so on. 15 | 16 | It's also possible to write a WikiLink that uses something other than the page 17 | name as the link text. For example `\[[foo_bar|SandBox]]` links to the SandBox 18 | page, but the link will appear like this: [[foo_bar|SandBox]]. 19 | 20 | To link to an anchor inside a page, you can use something like 21 | `\[[WikiLink#foo]]` . 22 | 23 | If the file linked to by a WikiLink looks like an image, it will 24 | be displayed inline on the page. 25 | 26 | --- 27 | 28 | You can also put an url in a WikiLink, to link to an external page. 29 | Email addresses can also be used to generate a mailto link. 30 | -------------------------------------------------------------------------------- /basewiki/index.mdwn: -------------------------------------------------------------------------------- 1 | Welcome to your new wiki. 2 | 3 | All wikis are supposed to have a [[SandBox]], so this one does too. 4 | 5 | ---- 6 | 7 | This wiki is powered by [[ikiwiki]]. 8 | -------------------------------------------------------------------------------- /basewiki/local.css: -------------------------------------------------------------------------------- 1 | /* ikiwiki local style sheet */ 2 | 3 | /* Add local styling here, instead of modifying style.css. */ 4 | -------------------------------------------------------------------------------- /basewiki/recentchanges.mdwn: -------------------------------------------------------------------------------- 1 | [[!if test="enabled(meta)" then=""" 2 | [[!meta title="RecentChanges"]] 3 | """]] 4 | Recent changes to this wiki: 5 | 6 | [[!inline pages="internal(recentchanges/change_*) and !*/Discussion" 7 | template=recentchanges show=0]] 8 | -------------------------------------------------------------------------------- /basewiki/sandbox.mdwn: -------------------------------------------------------------------------------- 1 | This is the SandBox, a page anyone can edit to learn how to use the wiki. 2 | 3 | ---- 4 | 5 | Here's a paragraph. 6 | 7 | Here's another one with *emphasised* text. 8 | 9 | # Header 10 | 11 | ## Subheader 12 | 13 | > This is a blockquote. 14 | > 15 | > This is the first level of quoting. 16 | > 17 | > > This is nested blockquote. 18 | > 19 | > Back to the first level. 20 | 21 | Numbered list 22 | 23 | 1. First item. 24 | 1. Another. 25 | 1. And another.. 26 | 27 | Bulleted list 28 | 29 | * *item* 30 | * item 31 | 32 | [[ikiwiki/WikiLink]] 33 | -------------------------------------------------------------------------------- /basewiki/shortcuts.mdwn: -------------------------------------------------------------------------------- 1 | [[!if test="enabled(shortcut)" 2 | then="This wiki has shortcuts **enabled**." 3 | else="This wiki has shortcuts **disabled**."]] 4 | 5 | Some examples of using shortcuts include: 6 | 7 | \[[!google foo]] 8 | \[[!wikipedia War_of_1812]] 9 | \[[!debbug 12345]] 10 | Check the \[[!google ikiwiki desc="google search for %s"]]. 11 | 12 | This page controls what shortcut links the wiki supports. 13 | 14 | * [[!shortcut name=google url="https://encrypted.google.com/search?q=%s"]] 15 | * [[!shortcut name=archive url="http://web.archive.org/*/%S"]] 16 | * [[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]] 17 | * [[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]] 18 | * [[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]] 19 | * [[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]] 20 | * [[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]] 21 | * [[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]] 22 | * [[!shortcut name=deblist url="https://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]] 23 | * [[!shortcut name=debpkg url="http://packages.debian.org/%s"]] 24 | * [[!shortcut name=debpkgsid url="http://packages.debian.org/sid/%s"]] 25 | * [[!shortcut name=debpts url="http://packages.qa.debian.org/%s"]] 26 | * [[!shortcut name=debmsg url="https://lists.debian.org/msgid-search/%s"]] 27 | * [[!shortcut name=debrt url="https://rt.debian.org/Ticket/Display.html?id=%s"]] 28 | * [[!shortcut name=debss url="http://snapshot.debian.org/package/%s/"]] 29 | * Usage: `\[[!debss package]]` or `\[[!debss package/version]]`. See for details. 30 | * [[!shortcut name=debwiki url="https://wiki.debian.org/%S"]] 31 | * [[!shortcut name=debcve url="https://security-tracker.debian.org/tracker/%S"]] 32 | * also supports Debian bug numbers, packages and whatever the [security tracker](https://security-tracker.debian.org/tracker/) supports. 33 | * [[!shortcut name=fdobug url="https://bugs.freedesktop.org/show_bug.cgi?id=%s" desc="freedesktop.org bug #%s"]] 34 | * [[!shortcut name=fdolist url="http://lists.freedesktop.org/mailman/listinfo/%s" desc="%s@lists.freedesktop.org"]] 35 | * [[!shortcut name=gnomebug url="https://bugzilla.gnome.org/show_bug.cgi?id=%s" desc="GNOME bug #%s"]] 36 | * [[!shortcut name=linuxbug url="https://bugzilla.kernel.org/show_bug.cgi?id=%s" desc="Linux bug #%s"]] 37 | * [[!shortcut name=mozbug url="https://bugzilla.mozilla.org/show_bug.cgi?id=%s" desc="Mozilla bug #%s"]] 38 | * [[!shortcut name=gnulist url="https://lists.gnu.org/mailman/listinfo/%s" desc="%s@gnu.org"]] 39 | * [[!shortcut name=marcmsg url="http://marc.info/?i=%s"]] 40 | * [[!shortcut name=marclist url="http://marc.info/?l=%s"]] 41 | * [[!shortcut name=gmane url="http://dir.gmane.org/gmane.%s" desc="gmane.%s"]] 42 | * [[!shortcut name=gmanemsg url="http://mid.gmane.org/%s"]] 43 | * [[!shortcut name=cpan url="http://search.cpan.org/search?mode=dist&query=%s"]] 44 | * [[!shortcut name=ctan url="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s"]] 45 | * [[!shortcut name=hoogle url="http://haskell.org/hoogle/?q=%s"]] 46 | * [[!shortcut name=iki url="http://ikiwiki.info/%S/"]] 47 | * [[!shortcut name=ljuser url="http://%s.livejournal.com/"]] 48 | * [[!shortcut name=rfc url="https://www.ietf.org/rfc/rfc%s.txt" desc="RFC %s"]] 49 | * [[!shortcut name=c2 url="http://wiki.c2.com/?%s"]] 50 | * [[!shortcut name=meatballwiki url="http://www.usemod.com/cgi-bin/mb.pl?%s"]] 51 | * [[!shortcut name=emacswiki url="http://www.emacswiki.org/cgi-bin/wiki/%s"]] 52 | * [[!shortcut name=haskellwiki url="http://haskell.org/haskellwiki/%s"]] 53 | * [[!shortcut name=dict url="http://www.dict.org/bin/Dict?Form=Dict1&Strategy=*&Database=*&Query=%s"]] 54 | * [[!shortcut name=imdb url="http://imdb.com/find?q=%s"]] 55 | * [[!shortcut name=gpg url="http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&exact=on&search=0x%s"]] 56 | * [[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]] 57 | * [[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain"]] 58 | * [[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]] 59 | * [[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]] 60 | * [[!shortcut name=man url="http://manpages.debian.org/%s"]] 61 | * [[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]] 62 | * [[!shortcut name=cpanrt url="https://rt.cpan.org/Ticket/Display.html?id=%s" desc="CPAN RT#%s"]] 63 | * [[!shortcut name=novellbug url="https://bugzilla.novell.com/show_bug.cgi?id=%s" desc="bug %s"]] 64 | * [[!shortcut name=ubupkg url="http://packages.ubuntu.com/%s"]] 65 | * [[!shortcut name=mozillazinekb url="http://kb.mozillazine.org/%s"]] 66 | * [[!shortcut name=freebsdwiki url="http://wiki.freebsd.org/%s"]] 67 | * [[!shortcut name=hackage url="http://hackage.haskell.org/package/%s"]] 68 | * [[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]] 69 | * [[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]] 70 | * [[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]] 71 | 72 | To add a new shortcut, use the `shortcut` 73 | [[ikiwiki/directive]]. In the url, "%s" is replaced with the 74 | text passed to the named shortcut, after [[!wikipedia url_encoding]] 75 | it, and '%S' is replaced with the raw, non-encoded text. 76 | Additionally, `%W` is replaced with the text encoded just right for 77 | Wikipedia. The optional `desc` parameter controls the description of 78 | the link. 79 | 80 | Remember that the `name` you give the shortcut will become a new 81 | [[ikiwiki/directive]]. Avoid using a `name` that conflicts 82 | with an existing directive. These directives also accept a `desc` 83 | parameter that will override the one provided at definition time. 84 | 85 | If you come up with a shortcut that you think others might find useful, 86 | consider contributing it to the [shortcuts page on the ikiwiki 87 | wiki](http://ikiwiki.info/shortcuts/), so that future versions of 88 | ikiwiki will include your shortcut in the standard underlay. 89 | -------------------------------------------------------------------------------- /basewiki/style.css: -------------------------------------------------------------------------------- 1 | /* There isn't much space between the Bootstrap navbar and the page content */ 2 | #header { 3 | margin-bottom: 1em; 4 | } 5 | 6 | #header { 7 | border-bottom: 1px solid lightgrey; 8 | } 9 | 10 | #footer { 11 | border-top: 1px solid lightgrey; 12 | } 13 | 14 | #pagedate { 15 | float: right; 16 | } 17 | 18 | /* Bootstrap's navbar packs everything without margins or padding. 19 | * Ensure the search form has some space. */ 20 | 21 | #searchform { 22 | margin-left: 1em; 23 | } 24 | 25 | .parentlinks { 26 | margin-right: 1em; 27 | } 28 | 29 | /* Alignment of header and footer items of the default inline pages. 30 | * Using flexbox layout here, since it can wrap when things get too crowded. 31 | * It's a bit better than floats. */ 32 | .inlineheader { 33 | display: flex; 34 | } 35 | 36 | .inlineheader header { 37 | flex: 1 1 auto; 38 | } 39 | 40 | .inlineheader { 41 | flex: 0 1 auto; 42 | } 43 | 44 | .inlinefooter { 45 | display: flex; 46 | flex-wrap: wrap; 47 | } 48 | 49 | .inlinefooter .pageinfo { 50 | flex: 1 1 auto; 51 | } 52 | 53 | .inlinefooter .tags { 54 | flex: 0 1 auto; 55 | } 56 | 57 | .inline-actions { 58 | display: inline; 59 | } 60 | 61 | .inline-actions ul, .inline-actions li { 62 | list-style-type: none; 63 | display: inline; 64 | } 65 | 66 | /* Popups */ 67 | /* popup template and backlinks hiding */ 68 | .popup .balloon, 69 | .popup .paren, 70 | .popup .expand { 71 | position: absolute; 72 | z-index: 1000; 73 | display: none; 74 | color: #373a3c; 75 | text-align: left; 76 | list-style: none; 77 | background-color: #fff; 78 | background-clip: padding-box; 79 | border: 1px solid rgba(0, 0, 0, .15); 80 | border-radius: .25rem; 81 | } 82 | 83 | .balloon ul { 84 | list-style: none; 85 | margin: 0; 86 | padding: 0.5em; 87 | } 88 | 89 | .popup:hover .balloon, 90 | .popup:focus .balloon { 91 | display: inline; 92 | } 93 | 94 | /* Table style, similar to Bootstrap .table-border and with .table-inverse headers */ 95 | table { 96 | margin-bottom: 1em; 97 | background-color: white; 98 | display: block; 99 | overflow: auto; 100 | } 101 | 102 | table td, table th { 103 | border: 1px solid #eceeef; 104 | padding: 0.5em; 105 | } 106 | 107 | table th { 108 | color: #eceeef; 109 | background-color: #373a3c; 110 | border-color: #55595c; 111 | } 112 | 113 | table tr:hover { 114 | background-color: #f5f5f5; 115 | } 116 | 117 | /* Rounded corners on tables */ 118 | table { 119 | border-collapse: separate; 120 | border-spacing: 0; 121 | } 122 | 123 | table tr:first-child td:first-child, table tr:first-child th:first-child { 124 | border-top-left-radius: 0.25rem; 125 | } 126 | table tr:first-child td:last-child, table tr:first-child th:last-child { 127 | border-top-right-radius: 0.25rem; 128 | } 129 | table tr:last-child td:first-child { 130 | border-bottom-left-radius: 0.25rem; 131 | } 132 | table tr:last-child td:last-child { 133 | border-bottom-right-radius: 0.25rem; 134 | } 135 | 136 | /* Improve look of calendars */ 137 | .month-calendar td, 138 | .month-calendar th, 139 | .year-calendar td, 140 | .year-calendar th { 141 | min-width: 2.5em; 142 | text-align: center; 143 | } 144 | 145 | .month-calendar-day-link, .year-calendar-month-link { 146 | background-color: #d9edf7; 147 | } 148 | 149 | /* Give RSS and Atom buttons an orange color */ 150 | .feedbutton { 151 | background: #ff8000; 152 | border-color: #e07000; 153 | color: white; 154 | font-weight: bold; 155 | } 156 | 157 | .feedbutton:hover { 158 | background: #ffc080; 159 | } 160 | 161 | /* Carousel alignment */ 162 | .carousel-page { 163 | margin: 1em; 164 | } 165 | 166 | .carousel-image { 167 | margin: auto; 168 | } 169 | 170 | /* Improve the Bootstrap blockquote style */ 171 | blockquote { 172 | border-left: 4px solid rgba(0,0,0,.1); 173 | padding-left: 0.5em; 174 | } 175 | 176 | /* Fix image width in cards. */ 177 | .card-img-top, .card-img-bottom { 178 | width: 100%; 179 | height: auto; 180 | } 181 | 182 | /* Dark mode */ 183 | @media only screen and (prefers-color-scheme: dark) { 184 | body { 185 | background-color: #000; 186 | color: #aaa; 187 | } 188 | 189 | .bg-light, #header { 190 | background-color: #333 !important; 191 | border-color: #666; 192 | } 193 | 194 | .card { 195 | background-color: #000 !important; 196 | border-color: #666; 197 | } 198 | 199 | table, tbody { 200 | background-color: inherit; 201 | } 202 | 203 | table td, table th, #footer { 204 | border-color: #666; 205 | } 206 | 207 | blockquote { 208 | border-color: #444; 209 | } 210 | 211 | .card-header, #searchbox { 212 | background-color: #222; 213 | border-color: #666; 214 | } 215 | 216 | #searchform button { 217 | background-color: #666; 218 | border-color: #666; 219 | } 220 | 221 | #searchbox { 222 | color: #aaa; 223 | } 224 | 225 | .text-body { 226 | color: #aaa !important; 227 | } 228 | 229 | a { 230 | color: #5ae; 231 | } 232 | 233 | a:hover { 234 | color: #48d; 235 | } 236 | 237 | table tr:hover { 238 | background-color: #111; 239 | } 240 | 241 | thead th { 242 | background-color: #222; 243 | color: #ccc; 244 | } 245 | 246 | .navbar-toggler img { 247 | filter: invert(1); 248 | } 249 | -------------------------------------------------------------------------------- /basewiki/templates.mdwn: -------------------------------------------------------------------------------- 1 | [[Ikiwiki]] uses many templates for many purposes. By editing its templates, 2 | you can fully customise its appearance, and avoid duplicate content. 3 | 4 | Ikiwiki uses the HTML::Template module as its template engine. This 5 | supports things like conditionals and loops in templates and is pretty 6 | easy to learn. All you really need to know to modify templates is this: 7 | 8 | * To insert the value of a template variable, use ``. 9 | * To make a block of text conditional on a variable being set use 10 | `text`. 11 | * To use one block of text if a variable is set and a second if it's not, 12 | use `textother text` 13 | 14 | [[!if test="enabled(template) or enabled(edittemplate)" then=""" 15 | ## template pages 16 | 17 | Template pages are regular wiki pages containing a 18 | [[!iki ikiwiki/directive/templatebody desc="templatebody directive"]], 19 | used as templates for other pages. The parts of the template 20 | page outside the directive can be used to document it. 21 | """]] 22 | 23 | [[!if test="enabled(template)" then=""" 24 | The [[!iki ikiwiki/directive/template desc="template directive"]] allows 25 | template pages to be filled out and inserted into other pages in the wiki. 26 | """]] 27 | 28 | [[!if test="enabled(edittemplate)" then=""" 29 | The [[!iki ikiwiki/directive/edittemplate desc="edittemplate directive"]] can 30 | be used to make new pages default to containing text from a template 31 | page, which can be filled out as the page is edited. 32 | """]] 33 | 34 | [[!if test="(enabled(template) or enabled(edittemplate)) 35 | and enabled(inline)" then=""" 36 | These template pages are currently available: 37 | 38 | [[!inline pages="templates/* and !*.tmpl and !templates/*/* and !*/discussion" 39 | feeds=no archive=yes sort=title template=titlepage 40 | rootpage=templates postformtext="Add a new template page named:"]] 41 | """]] 42 | 43 | If the template does not contain a `templatebody` directive, the entire 44 | source of the page is used for the template. This is deprecated. 45 | 46 | ## template files 47 | 48 | Template files are unlike template pages in that they have the extension 49 | `.tmpl`. Template files are used extensively by Ikiwiki to generate html. 50 | They can contain html that would not normally be allowed on a wiki page. 51 | 52 | Template files are located in `/usr/share/ikiwiki/templates` by default; 53 | the `templatedir` setting can be used to make another directory be 54 | searched first. Customised template files can also be placed inside the 55 | "templates/" directory in your wiki's source -- files placed there override 56 | ones in the `templatedir`. 57 | 58 | Here is a full list of the template files used: 59 | 60 | * `page.tmpl` - Used for displaying all regular wiki pages. This is the 61 | key template to customise to change the look and feel of Ikiwiki. 62 | [[!if test="enabled(pagetemplate)" then=""" 63 | (The [[!iki ikiwiki/directive/pagetemplate desc="pagetemplate directive"]] 64 | can be used to make a page use a different template than `page.tmpl`.)"""]] 65 | * `rsspage.tmpl` - Used for generating rss feeds for blogs. 66 | * `rssitem.tmpl` - Used for generating individual items on rss feeds. 67 | * `atompage.tmpl` - Used for generating atom feeds for blogs. 68 | * `atomitem.tmpl` - Used for generating individual items on atom feeds. 69 | * `inlinepage.tmpl` - Used for displaying a post in a blog. 70 | * `archivepage.tmpl` - Used for listing a page in a blog archive page. 71 | * `titlepage.tmpl` - Used for listing a page by title in a blog archive page. 72 | * `microblog.tmpl` - Used for showing a microblogging post inline. 73 | * `blogpost.tmpl` - Used for a form to add a post to a blog (and rss/atom links) 74 | * `feedlink.tmpl` - Used to add rss/atom links if `blogpost.tmpl` is not used. 75 | * `aggregatepost.tmpl` - Used by the aggregate plugin to create 76 | a page for a post. 77 | * `searchform.tmpl`, `googleform.tmpl` - Used by the search plugin 78 | and google plugin to add search forms to wiki pages. 79 | * `searchquery.tmpl` - This is a Omega template, used by the 80 | search plugin. 81 | * `comment.tmpl` - Used by the comments plugin to display a comment. 82 | * `change.tmpl` - Used to create a page describing a change made to the wiki. 83 | * `recentchanges.tmpl` - Used for listing a change on the RecentChanges page. 84 | * `autoindex.tmpl` - Filled in by the autoindex plugin to make index pages. 85 | * `autotag.tmpl` - Filled in by the tag plugin to make tag pages. 86 | * `calendarmonth.tmpl`, `calendaryear.tmpl` - Used by ikiwiki-calendar to 87 | make calendar archive pages. 88 | * `trails.tmpl` - Used by the trail plugin to generate links on each page 89 | that is a member of a trail. 90 | * `notifyemail.tmpl` - Used by the notifymail plugin to generate mails about 91 | changed pages. 92 | * `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`, 93 | `editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`, 94 | `editcomment.tmpl` `commentmoderation.tmpl`, `renamesummary.tmpl`, 95 | `passwordmail.tmpl`, `emailauth.tmpl`, `login-selector.tmpl`, 96 | `revert.tmpl` - Parts of ikiwiki's user interface; do not normally need 97 | to be customised. 98 | 99 | 100 | [[!meta robots="noindex, follow"]] 101 | -------------------------------------------------------------------------------- /basewiki/templates/note.mdwn: -------------------------------------------------------------------------------- 1 | [[!templatebody < 3 | 4 | 5 | ENDBODY]] 6 | 7 | Use this template to insert a note into a page. The note will be styled to 8 | float to the right of other text on the page. This template has one 9 | parameter: 10 |
    11 |
  • `text` - the text to display in the note 12 |
13 | -------------------------------------------------------------------------------- /basewiki/templates/popup.mdwn: -------------------------------------------------------------------------------- 1 | Use this template to create a popup window that is displayed when the mouse 2 | is over part of the page. This template has two parameters: 3 |
    4 |
  • `mouseover` - This is the text or other content that triggers the 5 | popup. 6 |
  • `popup` - This should be the content of the popup window. It can be 7 | anything, even images or a whole little wiki page, but should not be too 8 | large for good usability. 9 |
10 | Note that browsers that do not support the CSS will display the popup 11 | inline in the page, inside square brackets. 12 | 13 | [[!templatebody < 15 | [] 16 | 17 | ENDBODY]] 18 | -------------------------------------------------------------------------------- /basewiki/wikiicons/diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/basewiki/wikiicons/diff.png -------------------------------------------------------------------------------- /basewiki/wikiicons/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/basewiki/wikiicons/email.png -------------------------------------------------------------------------------- /basewiki/wikiicons/openidlogin-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/basewiki/wikiicons/openidlogin-bg.gif -------------------------------------------------------------------------------- /basewiki/wikiicons/revert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/basewiki/wikiicons/revert.png -------------------------------------------------------------------------------- /basewiki/wikiicons/search-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/basewiki/wikiicons/search-bg.gif -------------------------------------------------------------------------------- /example.setup: -------------------------------------------------------------------------------- 1 | # IkiWiki::Setup::Yaml - YAML formatted setup file 2 | # 3 | # Setup file for ikiwiki. 4 | # 5 | # Passing this to ikiwiki --setup will make ikiwiki generate 6 | # wrappers and build the wiki. 7 | # 8 | # Remember to re-run ikiwiki --setup any time you edit this file. 9 | # 10 | # name of the wiki 11 | wikiname: Ikistrap example 12 | # contact email for wiki 13 | adminemail: me@example.com 14 | # users who are wiki admins 15 | adminuser: [] 16 | # users who are banned from the wiki 17 | banned_users: [] 18 | # where the source of the wiki is located 19 | srcdir: example 20 | # where to build the wiki 21 | destdir: example.html 22 | # base url to the wiki 23 | url: file://example.html/ 24 | # url to the ikiwiki.cgi 25 | cgiurl: cgi 26 | # do not adjust cgiurl if CGI is accessed via different URL 27 | reverse_proxy: 0 28 | # filename of cgi wrapper to generate 29 | cgi_wrapper: example/cgi_wrapper 30 | # mode for cgi_wrapper (can safely be made suid) 31 | cgi_wrappermode: 06755 32 | # number of seconds to delay CGI requests when overloaded 33 | cgi_overload_delay: '' 34 | # message to display when overloaded (may contain html) 35 | cgi_overload_message: '' 36 | # enable optimization of only refreshing committed changes? 37 | only_committed_changes: 0 38 | # rcs backend to use 39 | rcs: '' 40 | # plugins to add to the default configuration 41 | add_plugins: 42 | - 404 43 | - goodstuff 44 | - favicon 45 | - poll 46 | - google 47 | - sidebar 48 | - highlight 49 | - typography 50 | - comments 51 | - calendar 52 | - ikistrap 53 | # plugins to disable 54 | disable_plugins: 55 | - htmlscrubber 56 | # additional directory to search for template files 57 | templatedir: templates 58 | # base wiki source location 59 | underlaydir: basewiki 60 | # display verbose messages? 61 | verbose: 1 62 | # log to syslog? 63 | #syslog: 1 64 | # create output files named page/index.html? 65 | usedirs: 1 66 | # use '!'-prefixed preprocessor directives? 67 | prefix_directives: 1 68 | # use page/index.mdwn source files 69 | indexpages: 1 70 | # enable Discussion pages? 71 | discussion: 1 72 | # name of Discussion pages 73 | discussionpage: Discussion 74 | # use elements new in HTML5 like
? 75 | html5: 0 76 | # only send cookies over SSL connections? 77 | sslcookie: 0 78 | # extension to use for new pages 79 | default_pageext: mdwn 80 | # extension to use for html files 81 | htmlext: html 82 | # strftime format string to display date 83 | timeformat: '%c' 84 | # UTF-8 locale to use 85 | #locale: en_US.UTF-8 86 | # put user pages below specified page 87 | userdir: '' 88 | # how many backlinks to show before hiding excess (0 to show all) 89 | numbacklinks: 10 90 | # attempt to hardlink source files? (optimisation for large files) 91 | hardlink: 0 92 | # force ikiwiki to use a particular umask (keywords public, group or private, or a number) 93 | umask: 18 94 | # group for wrappers to run in 95 | #wrappergroup: ikiwiki 96 | # extra library and plugin directories 97 | libdirs: [] 98 | # extra library and plugin directory (searched after libdirs) 99 | libdir: lib 100 | # environment variables 101 | ENV: {} 102 | # time zone name 103 | timezone: :/etc/localtime 104 | # regexp of normally excluded files to include 105 | #include: ^\.htaccess$ 106 | # regexp of files that should be skipped 107 | #exclude: ^(*\.private|Makefile)$ 108 | # specifies the characters that are allowed in source filenames 109 | wiki_file_chars: -[:alnum:]+/.:_ 110 | # allow symlinks in the path leading to the srcdir (potentially insecure) 111 | allow_symlinks_before_srcdir: 0 112 | # cookie control 113 | cookiejar: 114 | file: /home/users/guus/.ikiwiki/cookies 115 | # set custom user agent string for outbound HTTP requests e.g. when fetching aggregated RSS feeds 116 | useragent: ikiwiki/3.20160121 117 | # theme has a responsive layout? (mobile-optimized) 118 | responsive_layout: 1 119 | # try harder to produce deterministic output 120 | deterministic: 0 121 | 122 | ###################################################################### 123 | # core plugins 124 | # (editpage, htmlscrubber, inline, link, meta, parentlinks, templatebody) 125 | ###################################################################### 126 | 127 | # htmlscrubber plugin 128 | # PageSpec specifying pages not to scrub 129 | #htmlscrubber_skip: '!*/Discussion' 130 | 131 | # inline plugin 132 | # enable rss feeds by default? 133 | rss: 1 134 | # enable atom feeds by default? 135 | atom: 1 136 | # allow rss feeds to be used? 137 | #allowrss: 0 138 | # allow atom feeds to be used? 139 | #allowatom: 0 140 | # urls to ping (using XML-RPC) on feed update 141 | pingurl: [] 142 | 143 | ###################################################################### 144 | # auth plugins 145 | # (anonok, blogspam, emailauth, httpauth, lockedit, moderatedcomments, 146 | # opendiscussion, openid, passwordauth, signinedit) 147 | ###################################################################### 148 | 149 | # anonok plugin 150 | # PageSpec to limit which pages anonymous users can edit 151 | #anonok_pagespec: '*/discussion' 152 | 153 | # blogspam plugin 154 | # PageSpec of pages to check for spam 155 | #blogspam_pagespec: postcomment(*) 156 | # options to send to blogspam server 157 | #blogspam_options: blacklist=1.2.3.4,blacklist=8.7.6.5,max-links=10 158 | # blogspam server JSON url 159 | #blogspam_server: '' 160 | 161 | # emailauth plugin 162 | # email address to send emailauth mails as (default: adminemail) 163 | #emailauth_sender: '' 164 | 165 | # httpauth plugin 166 | # url to redirect to when authentication is needed 167 | #cgiauthurl: http://example.com/wiki/auth/ikiwiki.cgi 168 | # PageSpec of pages where only httpauth will be used for authentication 169 | #httpauth_pagespec: '!*/Discussion' 170 | 171 | # lockedit plugin 172 | # PageSpec controlling which pages are locked 173 | #locked_pages: '!*/Discussion' 174 | 175 | # moderatedcomments plugin 176 | # PageSpec matching users or comment locations to moderate 177 | #moderate_pagespec: '*' 178 | 179 | # openid plugin 180 | # url pattern of openid realm (default is cgiurl) 181 | #openid_realm: '' 182 | # url to ikiwiki cgi to use for openid authentication (default is cgiurl) 183 | #openid_cgiurl: '' 184 | 185 | # passwordauth plugin 186 | # a password that must be entered when signing up for an account 187 | #account_creation_password: s3cr1t 188 | # cost of generating a password using Authen::Passphrase::BlowfishCrypt 189 | #password_cost: 8 190 | 191 | ###################################################################### 192 | # format plugins 193 | # (creole, highlight, hnb, html, mdwn, otl, rawhtml, rst, textile, txt) 194 | ###################################################################### 195 | 196 | # highlight plugin 197 | # types of source files to syntax highlight 198 | #tohighlight: .c .h .cpp .pl .py Makefile:make 199 | # location of highlight's filetypes.conf 200 | filetypes_conf: /etc/highlight/filetypes.conf 201 | # location of highlight's langDefs directory 202 | langdefdir: /usr/share/highlight/langDefs 203 | 204 | # mdwn plugin 205 | # enable multimarkdown features? 206 | multimarkdown: 1 207 | # disable use of markdown discount? 208 | #nodiscount: 0 209 | 210 | ###################################################################### 211 | # special-purpose plugins 212 | # (osm, underlay) 213 | ###################################################################### 214 | 215 | # osm plugin 216 | # the default zoom when you click on the map link 217 | #osm_default_zoom: 15 218 | # the icon shown on links and on the main map 219 | #osm_default_icon: ikiwiki/images/osm.png 220 | # the alt tag of links, defaults to empty 221 | #osm_alt: '' 222 | # the output format for waypoints, can be KML, GeoJSON or CSV (one or many, comma-separated) 223 | #osm_format: KML 224 | # the icon attached to a tag, displayed on the map for tagged pages 225 | #osm_tag_default_icon: icon.png 226 | # Url for the OpenLayers.js file 227 | #osm_openlayers_url: http://www.openlayers.org/api/OpenLayers.js 228 | # 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. 229 | #osm_layers: 230 | # OSM: GoogleSatellite 231 | # Google maps API key, Google layer not used if missing, see https://code.google.com/apis/console/ to get an API key 232 | #osm_google_apikey: '' 233 | 234 | # underlay plugin 235 | # extra underlay directories to add 236 | #add_underlays: 237 | #- /home/guus/wiki.underlay 238 | 239 | ###################################################################### 240 | # web plugins 241 | # (404, attachment, comments, editdiff, edittemplate, google, goto, 242 | # ikistrap, mirrorlist, remove, rename, repolist, search, theme, 243 | # userlist, websetup, wmd) 244 | ###################################################################### 245 | 246 | # attachment plugin 247 | # enhanced PageSpec specifying what attachments are allowed 248 | #allowed_attachments: virusfree() and mimetype(image/*) and maxsize(50kb) 249 | # virus checker program (reads STDIN, returns nonzero if virus found) 250 | #virus_checker: clamdscan - 251 | 252 | # comments plugin 253 | # PageSpec of pages where comments are allowed 254 | comments_pagespec: comments and !*/Discussion 255 | # PageSpec of pages where posting new comments is not allowed 256 | comments_closed_pagespec: '' 257 | # Base name for comments, e.g. "comment_" for pages like "sandbox/comment_12" 258 | comments_pagename: comment_ 259 | # Interpret directives in comments? 260 | #comments_allowdirectives: 0 261 | # Allow anonymous commenters to set an author name? 262 | #comments_allowauthor: 0 263 | # commit comments to the VCS 264 | comments_commit: 1 265 | # Restrict formats for comments to (no restriction if empty) 266 | comments_allowformats: '' 267 | 268 | # ikistrap plugin 269 | # Install Bootstrap css and js files locally instead of using jsDelivr? 270 | #bootstrap_local: 0 271 | # Load Bootstrap's Javascript helpers? 272 | #bootstrap_js: 1 273 | 274 | # mirrorlist plugin 275 | # list of mirrors 276 | #mirrorlist: {} 277 | # generate links that point to the mirrors' ikiwiki CGI 278 | #mirrorlist_use_cgi: 1 279 | 280 | # repolist plugin 281 | # URIs of repositories containing the wiki's source 282 | #repositories: 283 | #- svn://svn.example.org/wiki/trunk 284 | 285 | # search plugin 286 | # path to the omega cgi program 287 | #omega_cgi: /usr/lib/cgi-bin/omega/omega 288 | # use google site search rather than internal xapian index? 289 | #google_search: 1 290 | 291 | # theme plugin 292 | # name of theme to enable 293 | #theme: actiontabs 294 | 295 | # websetup plugin 296 | # list of plugins that cannot be enabled/disabled via the web interface 297 | #websetup_force_plugins: [] 298 | # list of additional setup field keys to treat as unsafe 299 | #websetup_unsafe: [] 300 | # show unsafe settings, read-only, in web interface? 301 | #websetup_show_unsafe: 1 302 | 303 | ###################################################################### 304 | # widget plugins 305 | # (calendar, color, conditional, cutpaste, date, format, fortune, 306 | # graphviz, haiku, headinganchors, img, linkmap, listdirectives, map, 307 | # more, orphans, pagecount, pagestats, poll, polygen, postsparkline, 308 | # progress, shortcut, sparkline, table, template, teximg, toc, toggle, 309 | # version) 310 | ###################################################################### 311 | 312 | # calendar plugin 313 | # base of the archives hierarchy 314 | archivebase: archives 315 | # PageSpec of pages to include in the archives, if option `calendar_autocreate` is true. 316 | archive_pagespec: '*' 317 | # autocreate new calendar pages? 318 | calendar_autocreate: 1 319 | # if set, when building calendar pages, also build pages of year and month when no pages were published (building empty calendars). 320 | calendar_fill_gaps: 0 321 | 322 | # listdirectives plugin 323 | # directory in srcdir that contains directive descriptions 324 | #directive_description_dir: ikiwiki/directive 325 | 326 | # teximg plugin 327 | # Should teximg use dvipng to render, or dvips and convert? 328 | #teximg_dvipng: '' 329 | # LaTeX prefix for teximg plugin 330 | #teximg_prefix: '\documentclass{article} 331 | # 332 | # \usepackage[utf8]{inputenc} 333 | # 334 | # \usepackage{amsmath} 335 | # 336 | # \usepackage{amsfonts} 337 | # 338 | # \usepackage{amssymb} 339 | # 340 | # \pagestyle{empty} 341 | # 342 | # \begin{document} 343 | # 344 | #' 345 | # LaTeX postfix for teximg plugin 346 | #teximg_postfix: \end{document} 347 | 348 | ###################################################################### 349 | # other plugins 350 | # (aggregate, autoindex, brokenlinks, camelcase, ddate, embed, favicon, 351 | # filecheck, flattr, goodstuff, htmlbalance, localstyle, loginselector, 352 | # notifyemail, pagetemplate, pingee, pinger, prettydate, recentchanges, 353 | # recentchangesdiff, relativedate, rsync, sidebar, smiley, 354 | # sortnaturally, tag, testpagespec, trail, transient) 355 | ###################################################################### 356 | 357 | # aggregate plugin 358 | # enable aggregation to internal pages? 359 | aggregateinternal: 1 360 | # allow aggregation to be triggered via the web? 361 | #aggregate_webtrigger: 0 362 | 363 | # autoindex plugin 364 | # commit autocreated index pages 365 | #autoindex_commit: 1 366 | 367 | # camelcase plugin 368 | # list of words to not turn into links 369 | #camelcase_ignore: [] 370 | 371 | # flattr plugin 372 | # userid or user name to use by default for Flattr buttons 373 | #flattr_userid: joeyh 374 | 375 | # pinger plugin 376 | # how many seconds to try pinging before timing out 377 | #pinger_timeout: 15 378 | 379 | # prettydate plugin 380 | # format to use to display date 381 | prettydateformat: '%B %o %Y' 382 | 383 | # recentchanges plugin 384 | # name of the recentchanges page 385 | recentchangespage: recentchanges 386 | # number of changes to track 387 | recentchangesnum: 25 388 | 389 | # rsync plugin 390 | # command to run to sync updated pages 391 | #rsync_command: rsync -qa --delete . user@host:/path/to/docroot/ 392 | 393 | # sidebar plugin 394 | # show sidebar page on all pages? 395 | #global_sidebars: 1 396 | 397 | # tag plugin 398 | # parent page tags are located under 399 | tagbase: tag 400 | # autocreate new tag pages? 401 | #tag_autocreate: 1 402 | # commit autocreated tag pages 403 | tag_autocreate_commit: 1 404 | -------------------------------------------------------------------------------- /example/Anemones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/example/Anemones.jpg -------------------------------------------------------------------------------- /example/Bootstrap_features.mdwn: -------------------------------------------------------------------------------- 1 | # Bootstrap features 2 | 3 | This page will contain a display of various features from Bootstrap. 4 | They require some manual HTML tags. 5 | Note that not all Markdown parsers allow Markdown markup inside all HTML tags. 6 | In the case of MultiMarkdown, adding `markdown="1"` to outer `div` elements usually allows markup to be used inside them. 7 | For a full list of features provided by Bootstrap 5, go to . 8 | 9 | 10 | ## Badges Hi! 11 | 12 | Span elements work inside Markdown headings. 13 | 14 |
15 |
16 | ## Cards 17 | 18 | Put a border with soft round corners around your content. 19 |
20 |
21 |

22 | 23 | 24 | ## Cards groups 25 | 26 | 27 | These require some more work. 28 | You can use the `\[[!img]]` directive, but make sure to add `class="card-img-top"` or `class="card-img-bottom"` where appropriate. 29 | For images in cards to work properly, they need to have their width forced to 100% of their container. 30 | This is done in the `style.css` file that comes with ikistrap. 31 | 32 | Another issue is that due to all the nested HTML tags, even with `markdown="1"`, Markdown markup does not get parsed anymore. 33 | 34 |

35 |
36 | [[!img Lemonshark.jpg alt="Lemon shark" class="card-img-top"]] 37 |
38 |

39 | A lemon shark and his little friends are out for a swim. 40 |

41 |
42 | 43 |
44 |
45 | [[!img Anemones.jpg alt="Anemones" class="card-img-top"]] 46 |
47 |

48 | Anemones look really nice and are much less dangerous than lemon sharks. 49 |

50 |
51 | 52 |
53 |
54 | [[!img Sea_Star.jpg alt="Sea star" class="card-img-top"]] 55 |
56 |

57 | Sea stars are also less dangerous than lemon sharks, but they are slightly more dangerous than 58 | anemones, especially when stepped on. 59 |

60 |
61 | 62 |
63 |
64 |

65 | 66 | 67 | ## Grid cards 68 | 69 | Use the grid system to lay out cards in ordered grids. 70 | These can be created by writing the outer `div` elements yourself, 71 | and using `\[[!inline]]` with `template="gridcard"` to generate the cards. 72 | 73 |

74 | [[!inline pages="sample_text/* and !*/Discussion" template="gridcard" feeds="no"]] 75 |
76 | 77 | 78 | ## Carousel 79 | 80 | These can be created by writing the outer two carousel `div` elements yourself, 81 | and using `\[[!inline]]` with `template="carouselpage"` to generate the carousel items. 82 | However, care must be taken to properly style the contents of the carousel. 83 | You might want to copy the carouselpage template and edit it to ensure the contents of the carousel have big enough margins. 84 | You also need to ensure all pages have the same height, or enforce a fixed height for the whole carousel. 85 | Here is an example with bare text: 86 | 87 |

88 |

101 |

102 | 103 | If you only want to show images, use `template="carouselimage"`, and select your images directly with the `pages` parameter. 104 | 105 |

106 |

119 |

120 | 121 | ## Progress bars 122 | 123 | Ikistrap also provides a progress directive which works in the same way as the progress plugin, 124 | but it also allows an extra class to be specified to change the style per bar. 125 | 126 | [[!progress totalpages="* and !*/Discussion" donepages="*/Discussion"]] 127 | [[!progress percent="33%" class="bg-info" height="2em"]] 128 | [[!progress percent="66%" class="bg-success progress-bar-striped progress-bar-animated" height="3em"]] 129 | 130 | ## Other stuff 131 | 132 | Goes here. 133 | 134 | -------------------------------------------------------------------------------- /example/Calendars.mdwn: -------------------------------------------------------------------------------- 1 | # Calendar 2 | 3 | This is an example of the ikiwiki calendar function. 4 | Here is a monthly calendar: 5 | 6 | [[!calendar type="month"]] 7 | 8 | And this is a yearly calendar: 9 | 10 | [[!calendar type="year"]] 11 | -------------------------------------------------------------------------------- /example/Comments.mdwn: -------------------------------------------------------------------------------- 1 | # Comments 2 | 3 | This is an example of a page where comments are allowed. 4 | -------------------------------------------------------------------------------- /example/Comments/comment_1._comment: -------------------------------------------------------------------------------- 1 | [[!comment format=mdwn 2 | username="Anonymous Coward" 3 | subject="Indeed" 4 | date="2009-06-02T19:05:00Z" 5 | content=""" 6 | Hi, I just want to say that I totally agree with you. 7 | Have a nice day! 8 | """ 9 | ]] 10 | -------------------------------------------------------------------------------- /example/Comments/comment_2._comment: -------------------------------------------------------------------------------- 1 | [[!comment format=mdwn 2 | username="Pseudonymous Person" 3 | subject="I am disagree" 4 | date="2009-06-02T19:05:01Z" 5 | content=""" 6 | I don't think so. Eggs should neither be capped at the top or at the bottom. 7 | Symmetry is only attained by slicing it in half in a plane spanned by the line between the top and bottom. 8 | """ 9 | ]] 10 | -------------------------------------------------------------------------------- /example/Inline_pages.mdwn: -------------------------------------------------------------------------------- 1 | # Inline pages 2 | 3 | Here is an example of inline pages using the default inlining theme: 4 | 5 | [[!inline pages="sample_text/* and !*/Discussion" reverse="yes" limit="3"]] 6 | 7 | Here is an example of inlining with actions enabled: 8 | 9 | [[!inline pages="sample_text/* and !*/Discussion" reverse="yes" skip="3" limit="2" actions="1"]] 10 | -------------------------------------------------------------------------------- /example/Lemonshark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/example/Lemonshark.jpg -------------------------------------------------------------------------------- /example/Sea_Star.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gsliepen/ikistrap/dba7cf02f08173bac178ab4a7b281a367fe21344/example/Sea_Star.jpg -------------------------------------------------------------------------------- /example/index.mdwn: -------------------------------------------------------------------------------- 1 | # Welcome 2 | 3 | This is an example wiki to show off the ikistrap theme. 4 | Ikistrap tries to provide a fully-featured, modern looking HTML5 theme for ikiwiki. 5 | It uses Bootstrap 5 and Bootstrap Icons. 6 | 7 | ## Features 8 | 9 | Ikistrap has the following features: 10 | 11 | * Good use of HTML5 semantic elements. 12 | * Responsive layout. 13 | * Standards-compliant. 14 | * Compatible with text-only browsers. 15 | * Header supporting parentlinks, wiki actions, search form, language selection and trails. 16 | * Sidebar styled as a Boostrap 5 card, using the Bootstrap 5 grid system. 17 | * Footer that is pushed down to the bottom of the screen with tags, backlinks, copyright, license and modification date. 18 | * [[Inline pages]] that are by default styled as Bootstrap 5 cards. 19 | * [[Comments]] 20 | * [[Calendars]] 21 | 22 | Note that ikistrap doesn't add any special support for Bootstrap to the Markdown language. 23 | If you want to make use of [[Bootstrap features]] inside your text, you will have to manually add the appropriate HTML tags. 24 | 25 | -------------------------------------------------------------------------------- /example/inlinetest.mdwn: -------------------------------------------------------------------------------- 1 | [[!inline pages="sample_text/*"]] 2 | -------------------------------------------------------------------------------- /example/sample_text/Donec_dapibus.mdwn: -------------------------------------------------------------------------------- 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. 2 | -------------------------------------------------------------------------------- /example/sample_text/Donec_semper.mdwn: -------------------------------------------------------------------------------- 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. 2 | -------------------------------------------------------------------------------- /example/sample_text/Lorem_ipsum.mdwn: -------------------------------------------------------------------------------- 1 | [[!meta author="Cicero"]] 2 | 3 | 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. 4 | -------------------------------------------------------------------------------- /example/sample_text/Nulla_facilisi.mdwn: -------------------------------------------------------------------------------- 1 | [[!tag Cicero Latin typesetting]] 2 | 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. 3 | -------------------------------------------------------------------------------- /example/sample_text/Sed_eget.mdwn: -------------------------------------------------------------------------------- 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. 2 | -------------------------------------------------------------------------------- /example/sidebar.mdwn: -------------------------------------------------------------------------------- 1 | This is the sidebar. 2 | 3 | * [[/index]] 4 | * [[ikiwiki]] 5 | * [[sandbox]] 6 | * [[shortcuts]] 7 | * [[templates]] 8 | 9 | ``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.'' 10 | -------------------------------------------------------------------------------- /ikistrap.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | Ikistrap logo 24 | 49 | 59 | 63 | 67 | 71 | 75 | 79 | 83 | 87 | 91 | 92 | 94 | 96 | 100 | 104 | 105 | 114 | 115 | 117 | 118 | 120 | image/svg+xml 121 | 123 | Ikistrap logo 124 | 126 | 2016-03-19 127 | 128 | 129 | Guus Sliepen 130 | 131 | 132 | A combination of the ikiwiki and Bootstrap logos. 133 | 134 | 135 | 136 | 139 | 147 | 151 | 152 | 157 | 162 | 167 | 172 | 173 | 180 | 181 | -------------------------------------------------------------------------------- /lib/IkiWiki/Plugin/ikistrap.pm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | package IkiWiki::Plugin::ikistrap; 3 | 4 | use warnings; 5 | use strict; 6 | use IkiWiki 3.00; 7 | 8 | sub import { 9 | hook(type => "checkconfig", id => "ikistrap", call => \&checkconfig); 10 | hook(type => "getsetup", id => "ikistrap", call => \&getsetup); 11 | hook(type => "refresh", id => "ikistrap", call => \&refresh); 12 | hook(type => "pagetemplate", id => "ikistrap", call => \&pagetemplate); 13 | hook(type => "preprocess", id => "progress", call => \&progress); 14 | } 15 | 16 | sub checkconfig() { 17 | if (! defined $config{bootstrap_js}) { 18 | $config{bootstrap_js} = 1; 19 | } 20 | } 21 | 22 | sub getsetup() { 23 | return 24 | plugin => { 25 | description => "Bootstrap 5 theme support", 26 | section => "web", 27 | safe => 1, 28 | }, 29 | bootstrap_local => { 30 | description => "Install Bootstrap css and js files locally instead of using jsDelivr?", 31 | example => 0, 32 | type => "boolean", 33 | default => 0, 34 | rebuild => 1, 35 | }, 36 | bootstrap_js => { 37 | description => "Load Bootstrap's Javascript helpers?", 38 | example => 0, 39 | type => "boolean", 40 | default => 1, 41 | rebuild => 1, 42 | } 43 | } 44 | 45 | sub check($$) { 46 | my($basename, $href) = @_; 47 | my $filename = "$config{destdir}/$basename"; 48 | return if(-e $filename); 49 | debug("Fetching missing $basename..."); 50 | system("/usr/bin/curl -# \"$href\" -o \"$filename\""); 51 | } 52 | 53 | sub refresh() { 54 | return 0 unless($config{bootstrap_local}); 55 | mkdir("$config{destdir}"); 56 | 57 | # CSS 58 | mkdir("$config{destdir}/css"); 59 | check("css/bootstrap.min.css", "https://cdn.jsdelivr.net/npm/bootstrap\@5.0.0/dist/css/bootstrap.min.css"); 60 | check("css/bootstrap-icons.css", "https://cdn.jsdelivr.net/npm/bootstrap-icons\@1.4.1/font/bootstrap-icons.css"); 61 | 62 | # Fonts 63 | mkdir("$config{destdir}/css/fonts"); 64 | check("css/fonts/bootstrap-icons.woff2", "https://cdn.jsdelivr.net/npm/bootstrap-icons\@1.4.1/font/fonts/bootstrap-icons.woff2"); 65 | 66 | # JavaScript (if enabled) 67 | return 0 unless($config{bootstrap_js}); 68 | mkdir("$config{destdir}/js"); 69 | check("js/bootstrap.bundle.min.js", "https://cdn.jsdelivr.net/npm/bootstrap\@5.0.0/dist/js/bootstrap.bundle.min.js"); 70 | } 71 | 72 | sub pagetemplate(@) { 73 | my %params = @_; 74 | my $template = $params{template}; 75 | 76 | $template->param(bootstrap_js => $config{bootstrap_js}); 77 | $template->param(bootstrap_local => $config{bootstrap_local}); 78 | } 79 | 80 | # Emulate the progress plugin, but do it the HTML5 + Bootstrap way. 81 | # Also allow setting an extra class attribute. 82 | sub progress(@) { 83 | my %params = @_; 84 | my $percentage_pattern = qr/[0-9]+\%?/; # pattern to validate percentages 85 | my ($fill, $value, $max); 86 | 87 | if (defined $params{percent}) { 88 | $fill = $params{percent}; 89 | ($fill) = $fill =~ m/($percentage_pattern)/; # fill is untainted now 90 | $fill =~ s/%$//; 91 | if (! defined $fill || ! length $fill || $fill > 100 || $fill < 0) { 92 | error(sprintf(gettext("illegal percent value %s"), $params{percent})); 93 | } 94 | $value = $fill; 95 | $max = "100"; 96 | $fill .= "%"; 97 | } elsif (defined $params{totalpages} and defined $params{donepages}) { 98 | $max = pagespec_match_list($params{page}, $params{totalpages}, deptype => deptype("presence")); 99 | $value = pagespec_match_list($params{page}, $params{donepages}, deptype => deptype("presence")); 100 | 101 | if ($max == 0) { 102 | $fill = "100%"; 103 | } else { 104 | $fill = sprintf("%u%%", $value / $max * 100); 105 | } 106 | } else { 107 | error(gettext("need either `percent` or `totalpages` and `donepages` parameters")); 108 | } 109 | 110 | my $class = "progress-bar"; 111 | if (defined $params{class}) { 112 | $class .= " $params{class}"; 113 | } 114 | 115 | return <
$fill

117 | EODIV 118 | } 119 | 120 | 1 121 | -------------------------------------------------------------------------------- /lib/IkiWiki/Plugin/recentchanges.pm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | package IkiWiki::Plugin::recentchanges; 3 | 4 | use warnings; 5 | use strict; 6 | use IkiWiki 3.00; 7 | use Encode; 8 | use HTML::Entities; 9 | 10 | sub import { 11 | hook(type => "getsetup", id => "recentchanges", call => \&getsetup); 12 | hook(type => "checkconfig", id => "recentchanges", call => \&checkconfig); 13 | hook(type => "refresh", id => "recentchanges", call => \&refresh); 14 | hook(type => "pagetemplate", id => "recentchanges", call => \&pagetemplate); 15 | hook(type => "htmlize", id => "_change", call => \&htmlize); 16 | hook(type => "sessioncgi", id => "recentchanges", call => \&sessioncgi); 17 | # Load goto to fix up links from recentchanges 18 | IkiWiki::loadplugin("goto"); 19 | # ... and transient as somewhere to put our internal pages 20 | IkiWiki::loadplugin("transient"); 21 | } 22 | 23 | sub getsetup () { 24 | return 25 | plugin => { 26 | safe => 1, 27 | rebuild => 1, 28 | }, 29 | recentchangespage => { 30 | type => "string", 31 | example => "recentchanges", 32 | description => "name of the recentchanges page", 33 | safe => 1, 34 | rebuild => 1, 35 | }, 36 | recentchangesnum => { 37 | type => "integer", 38 | example => 100, 39 | description => "number of changes to track", 40 | safe => 1, 41 | rebuild => 0, 42 | }, 43 | } 44 | 45 | sub checkconfig () { 46 | $config{recentchangespage}='recentchanges' unless defined $config{recentchangespage}; 47 | $config{recentchangesnum}=100 unless defined $config{recentchangesnum}; 48 | } 49 | 50 | sub refresh ($) { 51 | my %seen; 52 | 53 | # add new changes 54 | foreach my $change (IkiWiki::rcs_recentchanges($config{recentchangesnum})) { 55 | $seen{store($change, $config{recentchangespage})}=1; 56 | } 57 | 58 | # delete old and excess changes 59 | foreach my $page (keys %pagesources) { 60 | if ($pagesources{$page} =~ /\._change$/ && ! $seen{$page}) { 61 | unlink($IkiWiki::Plugin::transient::transientdir.'/'.$pagesources{$page}) || unlink($config{srcdir}.'/'.$pagesources{$page}); 62 | } 63 | } 64 | } 65 | 66 | sub sessioncgi ($$) { 67 | my ($q, $session) = @_; 68 | my $do = $q->param('do'); 69 | my $rev = $q->param('rev'); 70 | 71 | return unless $do eq 'revert' && $rev; 72 | 73 | my @changes=$IkiWiki::hooks{rcs}{rcs_preprevert}{call}->($rev); 74 | IkiWiki::check_canchange( 75 | cgi => $q, 76 | session => $session, 77 | changes => \@changes, 78 | ); 79 | 80 | eval q{use CGI::FormBuilder}; 81 | error($@) if $@; 82 | my $form = CGI::FormBuilder->new( 83 | name => "revert", 84 | header => 0, 85 | charset => "utf-8", 86 | method => 'POST', 87 | javascript => 0, 88 | params => $q, 89 | action => IkiWiki::cgiurl(), 90 | stylesheet => 1, 91 | template => { template('revert.tmpl') }, 92 | fields => [qw{revertmessage do sid rev}], 93 | ); 94 | my $buttons=["Revert", "Cancel"]; 95 | 96 | $form->field(name => "revertmessage", type => "text", size => 80); 97 | $form->field(name => "sid", type => "hidden", value => $session->id, 98 | force => 1); 99 | $form->field(name => "do", type => "hidden", value => "revert", 100 | force => 1); 101 | 102 | IkiWiki::decode_form_utf8($form); 103 | 104 | if ($form->submitted eq 'Revert' && $form->validate) { 105 | IkiWiki::checksessionexpiry($q, $session); 106 | my $message=sprintf(gettext("This reverts commit %s"), $rev); 107 | if (defined $form->field('revertmessage') && 108 | length $form->field('revertmessage')) { 109 | $message=$form->field('revertmessage')."\n\n".$message; 110 | } 111 | my $r = $IkiWiki::hooks{rcs}{rcs_revert}{call}->($rev); 112 | error $r if defined $r; 113 | IkiWiki::disable_commit_hook(); 114 | IkiWiki::rcs_commit_staged( 115 | message => $message, 116 | session => $session, 117 | ); 118 | IkiWiki::enable_commit_hook(); 119 | 120 | require IkiWiki::Render; 121 | IkiWiki::refresh(); 122 | IkiWiki::saveindex(); 123 | } 124 | elsif ($form->submitted ne 'Cancel') { 125 | $form->title(sprintf(gettext("confirm reversion of %s"), $rev)); 126 | $form->tmpl_param(diff => encode_entities(scalar IkiWiki::rcs_diff($rev, 200))); 127 | $form->field(name => "rev", type => "hidden", value => $rev, force => 1); 128 | IkiWiki::showform($form, $buttons, $session, $q); 129 | exit 0; 130 | } 131 | 132 | IkiWiki::redirect($q, urlto($config{recentchangespage})); 133 | exit 0; 134 | } 135 | 136 | # Enable the recentchanges link. 137 | sub pagetemplate (@) { 138 | my %params=@_; 139 | my $template=$params{template}; 140 | my $page=$params{page}; 141 | 142 | if (defined $config{recentchangespage} && $config{rcs} && 143 | $template->query(name => "recentchangesurl") && 144 | $page ne $config{recentchangespage}) { 145 | $template->param(recentchangesurl => urlto($config{recentchangespage}, $page)); 146 | $template->param(have_actions => 1); 147 | } 148 | } 149 | 150 | # Pages with extension _change have plain html markup, pass through. 151 | sub htmlize (@) { 152 | my %params=@_; 153 | return $params{content}; 154 | } 155 | 156 | sub store ($$$) { 157 | my $change=shift; 158 | 159 | my $page="$config{recentchangespage}/change_".titlepage($change->{rev}); 160 | 161 | # Optimisation to avoid re-writing pages. Assumes commits never 162 | # change (or that any changes are not important). 163 | return $page if exists $pagesources{$page} && ! $config{rebuild}; 164 | 165 | # Limit pages to first 10, and add links to the changed pages. 166 | my $is_excess = exists $change->{pages}[10]; 167 | delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess; 168 | my $has_diffurl=0; 169 | $change->{pages} = [ 170 | map { 171 | if (length $config{cgiurl}) { 172 | $_->{link} = " "goto", 175 | page => $_->{page} 176 | ). 177 | "\" rel=\"nofollow\">". 178 | pagetitle($_->{page}). 179 | "" 180 | } 181 | else { 182 | $_->{link} = pagetitle($_->{page}); 183 | } 184 | if (defined $_->{diffurl} && length($_->{diffurl})) { 185 | $has_diffurl=1; 186 | } 187 | 188 | $_; 189 | } @{$change->{pages}} 190 | ]; 191 | push @{$change->{pages}}, { link => '...' } if $is_excess; 192 | 193 | if (length $config{cgiurl} && 194 | exists $IkiWiki::hooks{rcs}{rcs_preprevert} && 195 | exists $IkiWiki::hooks{rcs}{rcs_revert}) { 196 | $change->{reverturl} = IkiWiki::cgiurl( 197 | do => "revert", 198 | rev => $change->{rev} 199 | ); 200 | } 201 | 202 | $change->{author}=$change->{user}; 203 | my $oiduser=eval { IkiWiki::openiduser($change->{user}) }; 204 | if (defined $oiduser) { 205 | $change->{authorurl}=$change->{user}; 206 | $change->{user}=defined $change->{nickname} ? $change->{nickname} : $oiduser; 207 | } 208 | elsif (length $config{cgiurl}) { 209 | $change->{authorurl} = IkiWiki::cgiurl( 210 | do => "goto", 211 | page => IkiWiki::userpage($change->{author}), 212 | ); 213 | } 214 | 215 | if (ref $change->{message}) { 216 | my $title = shift @{$change->{message}}; 217 | $change->{title} = $title->{line}; 218 | 219 | foreach my $field (@{$change->{message}}) { 220 | if (exists $field->{line}) { 221 | # escape html 222 | $field->{line} = encode_entities($field->{line}); 223 | # escape links and preprocessor stuff 224 | $field->{line} = encode_entities($field->{line}, '\[\]'); 225 | } 226 | } 227 | } 228 | 229 | # Fill out a template with the change info. 230 | my $template=template("change.tmpl", blind_cache => 1); 231 | $template->param( 232 | %$change, 233 | commitdate => displaytime($change->{when}, "%X %x"), 234 | wikiname => $config{wikiname}, 235 | ); 236 | 237 | $template->param(has_diffurl => 1) if $has_diffurl; 238 | 239 | $template->param(permalink => urlto($config{recentchangespage})."#change-".titlepage($change->{rev})) 240 | if exists $config{url}; 241 | 242 | IkiWiki::run_hooks(pagetemplate => sub { 243 | shift->(page => $page, destpage => $page, 244 | template => $template, rev => $change->{rev}); 245 | }); 246 | 247 | my $file=$page."._change"; 248 | writefile($file, $IkiWiki::Plugin::transient::transientdir, $template->output); 249 | utime $change->{when}, $change->{when}, $IkiWiki::Plugin::transient::transientdir.'/'.$file; 250 | 251 | return $page; 252 | } 253 | 254 | 1 255 | -------------------------------------------------------------------------------- /templates/aggregatepost.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | [[!tag ]] 4 | 5 | 6 | [[!meta title=""]] 7 | 8 | 9 | [[!meta permalink=""]] 10 | 11 | 12 | [[!meta copyright=""]] 13 | 14 | 15 | [[!meta author=" ()"]] 16 | 17 | [[!meta author=""]] 18 | 19 | [[!meta authorurl=""]] 20 | -------------------------------------------------------------------------------- /templates/archivepage.tmpl: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |
7 | 8 | Posted 9 | 10 | by 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | -------------------------------------------------------------------------------- /templates/atomitem.tmpl: -------------------------------------------------------------------------------- 1 | 2 | <TMPL_VAR TITLE> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /templates/atompage.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <TMPL_VAR TITLE> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | ikiwiki 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /templates/autoindex.tmpl: -------------------------------------------------------------------------------- 1 | [[!map pages="/* and ! /*/*"]] 2 | -------------------------------------------------------------------------------- /templates/autotag.tmpl: -------------------------------------------------------------------------------- 1 | [[!meta title="pages tagged "]] 2 | 3 | [[!inline pages="tagged()" actions="no" archive="yes" 4 | feedshow=10]] 5 | -------------------------------------------------------------------------------- /templates/blogpost.tmpl: -------------------------------------------------------------------------------- 1 |
id="" action="" method="get"> 2 |
3 | 4 | RSS 5 | 6 | 7 | Atom 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | -------------------------------------------------------------------------------- /templates/calendarmonth.tmpl: -------------------------------------------------------------------------------- 1 | [[!sidebar content=""" 2 | [[!calendar type=month month= year= pages=""]] 3 | """]] 4 | 5 | [[!inline pages="creation_month() and creation_year() and " show=0 feeds=no reverse=yes]] 6 | -------------------------------------------------------------------------------- /templates/calendaryear.tmpl: -------------------------------------------------------------------------------- 1 | [[!calendar type=year year= pages=""]] 2 | -------------------------------------------------------------------------------- /templates/carouselimage.tmpl: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /templates/carouselpage.tmpl: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /templates/change.tmpl: -------------------------------------------------------------------------------- 1 |
2 | [[!meta author=""""""]] 3 | 4 | [[!meta authorurl=""""""]] 5 | 6 | [[!meta title="""change to on """]] 7 | 8 | [[!meta permalink=""]] 9 | 10 |
11 |

12 | 13 |

14 | 15 | 16 |
17 |
18 |
19 |

20 |
21 | 22 |

23 |
Changed pages:
24 | 25 | 26 | 27 | [[diff|wikiicons/diff.png]] 28 | 29 | 30 | 31 | [[diff|wikiicons/diff.png]] 32 | 33 | 34 | 35 | 36 |
37 | 38 | 39 | [[revert|wikiicons/revert.png]] 40 | 41 | 42 |

43 |
44 | 45 | 46 | 47 |
48 | 49 |
50 | 51 |
52 |
53 | 54 | 55 | 65 |
66 | -------------------------------------------------------------------------------- /templates/comment.tmpl: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |
7 | 8 |
9 |
10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 | 20 |
21 | 22 |
23 | Posted 24 | 25 | by 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | by 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 64 | 65 |
66 |
67 | -------------------------------------------------------------------------------- /templates/commentmoderation.tmpl: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 |
12 |
13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |
24 | 25 | 26 | 27 |
28 | 29 |

30 | No comments need moderation at this time. 31 |

32 |
33 | -------------------------------------------------------------------------------- /templates/editcomment.tmpl: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | (optional, or signin) 12 |
13 | 14 | (optional) 15 |
16 | 17 | 18 |
19 | 20 | (You might want to Signin first?) 21 |
22 |
23 |
24 | 25 |
26 | 27 |
28 | 29 |
30 | 31 | 32 | 33 | 34 |
35 |
36 | Comment preview: 37 |
38 |
39 | 40 |
41 |
42 |
43 | -------------------------------------------------------------------------------- /templates/editconflict.tmpl: -------------------------------------------------------------------------------- 1 |

2 | Your changes conflict with other changes made to the page. 3 |

4 |

5 | Conflict markers have been inserted into the page content. Reconcile the 6 | conflict and commit again to save your changes. 7 |

8 | -------------------------------------------------------------------------------- /templates/editcreationconflict.tmpl: -------------------------------------------------------------------------------- 1 |

2 | While you were creating this page, someone else independently created a page 3 | with the same name. 4 |

5 |

6 | The edit box below contains the page's current content, followed by the 7 | content you entered previously, to allow you to merge the two 8 | together before saving. 9 |

10 | -------------------------------------------------------------------------------- /templates/editfailedsave.tmpl: -------------------------------------------------------------------------------- 1 |

2 | Failed to save your changes. 3 |

4 |

5 | Your changes were not able to be saved to disk. The system gave the error: 6 |

7 | 8 |
9 | Your changes are preserved below, and you can try again to save them. 10 |

11 | -------------------------------------------------------------------------------- /templates/editpage.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 26 | 27 | Attachments 28 | 29 | 30 | 31 |
32 |
33 | 36 | 48 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
" />
68 |
69 | 70 | 71 | 72 |
73 |
74 |
75 | 76 | 77 | 78 |
79 |
80 | Page preview: 81 |
82 |
83 | 84 |
85 |
86 | 87 |
88 |
89 | Diff: 90 |
91 |
92 | 93 |
94 |
95 | -------------------------------------------------------------------------------- /templates/editpagegone.tmpl: -------------------------------------------------------------------------------- 1 |

2 | The page you were editing has disappeared. 3 |

4 |

5 | Perhaps someone else has deleted it or moved it. If you want to recreate 6 | this page with your text, click "Save Page" again. 7 |

8 | -------------------------------------------------------------------------------- /templates/emailauth.tmpl: -------------------------------------------------------------------------------- 1 | To log into , just open the following link: 2 | 3 | 4 | 5 | This link can only be used once to log in, and will expire in one day. 6 | 7 | (Please disregard this email if you were not trying to log in.) 8 | 9 | -- 10 | ikiwiki 11 | -------------------------------------------------------------------------------- /templates/feedlink.tmpl: -------------------------------------------------------------------------------- 1 |
id="" class="feedlink btn-group float-right"> 2 | 3 | RSS 4 | 5 | 6 | Atom 7 | 8 |
9 |

10 | -------------------------------------------------------------------------------- /templates/googleform.tmpl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 |
7 |
8 | -------------------------------------------------------------------------------- /templates/gridcard.tmpl: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 | -------------------------------------------------------------------------------- /templates/inlinepage.tmpl: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 |
13 |
    14 | 15 |
  • Edit
  • 16 |
    17 | 18 |
  • 19 | 20 | 21 |
  • 22 |
    23 |
    24 |
25 |
26 |
27 |
28 | 29 |
30 | 31 |
32 | 33 | 34 |
35 | Download 36 |
37 |
38 | 39 |
40 |
41 | 42 | Posted 43 | 44 | 45 | by 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | License: 64 | 65 | 66 |
67 | 68 | 69 | 75 | 76 |
77 |
78 | -------------------------------------------------------------------------------- /templates/login-selector.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 |
18 |
19 | 22 | 23 | 24 | 25 |
26 |
27 |
28 | 29 |
30 | 31 |
32 |

OpenId login:

33 | 34 | 35 | 36 |
37 |
38 | 39 |
40 |

Email login:

41 | 42 | 43 | 44 |
45 |
46 |
47 | 48 | 49 |
50 |
51 | 52 | 53 | 54 |
55 |
56 | 57 |
58 | 59 |
60 | 63 |
64 | 65 |
66 | -------------------------------------------------------------------------------- /templates/microblog.tmpl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | — 17 |
18 |
19 | -------------------------------------------------------------------------------- /templates/notifyemail.tmpl: -------------------------------------------------------------------------------- 1 | A comment has been posted atchange has been made to 2 | 3 | ---- 4 | 5 | 6 | 7 | ---- 8 | 9 | To stop these notifications, visit 10 | -------------------------------------------------------------------------------- /templates/page.tmpl: -------------------------------------------------------------------------------- 1 | 2 | lang="" dir=""
xmlns="http://www.w3.org/1999/xhtml"> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | <TMPL_VAR TITLE> 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 | 131 | 132 |
133 | 134 | 135 |
136 |
137 | 138 | 139 | 140 |
141 | 142 |
143 | 144 | 145 |
146 | Download 147 |
148 |
149 | 150 | 151 | 152 |
153 | 154 | Add a comment 155 | 156 |
Comments on this page are closed.
157 |
158 | 159 |
160 |
161 |
162 | 163 | 164 | 165 |
166 |
167 | 170 |
171 |
172 |
173 |
174 |
175 |
176 | 177 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | -------------------------------------------------------------------------------- /templates/passwordmail.tmpl: -------------------------------------------------------------------------------- 1 | Someone[1], possibly you, requested that the password for 2 | on [2] be reset. 3 | 4 | To change your password, visit the following url, and enter a new password: 5 | 6 | 7 | 8 | This url can only be used once to change your password, and it will also 9 | stop working the next time you successfully log in. 10 | 11 | -- 12 | ikiwiki 13 | 14 | [1] Their IP address was 15 | [2] Located at 16 | -------------------------------------------------------------------------------- /templates/pocreatepage.tmpl: -------------------------------------------------------------------------------- 1 |

2 | WARNING this page must be written in . 3 |

4 | -------------------------------------------------------------------------------- /templates/recentchanges.tmpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 |
7 |
8 | -------------------------------------------------------------------------------- /templates/renamesummary.tmpl: -------------------------------------------------------------------------------- 1 | 2 |

3 | Failed to rename to : 4 | 5 |

6 | 7 |

8 | Successfully renamed to . 9 |

10 |

11 | 12 | The following pages have been automatically modified to update their links to : 13 |

    14 | 15 |
  • 16 |
    17 |
18 |
19 | 20 | 21 | The following pages still link to : 22 |
    23 | 24 |
  • 25 |
    26 |
27 |
28 |
29 |

30 |
31 | -------------------------------------------------------------------------------- /templates/revert.tmpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 | 14 |
15 |
16 | Diff being reverted: 17 |
18 |
19 |
20 | 		
21 | 	
22 |
23 | -------------------------------------------------------------------------------- /templates/rssitem.tmpl: -------------------------------------------------------------------------------- 1 | 2 | <TMPL_VAR TITLE> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /templates/rsspage.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | <TMPL_VAR TITLE> 8 | 9 | 10 | 11 | 12 | 13 | 14 | ikiwiki 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /templates/searchform.tmpl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 |
6 |
7 | -------------------------------------------------------------------------------- /templates/searchquery.tmpl: -------------------------------------------------------------------------------- 1 | $setmap{prefix,title,S} 2 | $setmap{prefix,link,XLINK} 3 | $set{thousand,$.}$set{decimal,.}$setmap{BN,,Any Country,uk,England,fr,France} 4 | ${ 5 | $def{PREV, 6 | $if{$ne{$topdoc,0},, 8 | } 9 | } 10 | 11 | $def{NEXT, 12 | $if{$ne{$last,$msize},, 14 | } 15 | } 16 | 17 | $def{P,} 18 | $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}}} 19 | 20 | $def{S,$1} 21 | $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}}} 22 | } 23 | 24 | $def{PREV,$if{$ne{$topdoc,0},}} 25 | 26 | $def{PAGE,} 27 | 28 | $def{SPAGE,} 29 | 30 | $def{NEXT,$if{$ne{$last,$msize},}} 31 | 32 |

33 | 34 |

36 |
37 | 38 | 39 | $env{HELPLINK} 40 |
41 | 45 | $or{$html{$error}, 46 | $if{$eq{$msize,0}, 47 | $if{$query,No documents match your query, 48 |
Searching $nice{$dbsize} documents 49 | }, 50 | $if{$not{$msizeexact}, 51 | $nice{$add{$topdoc,1}}-$nice{$last} of about $nice{$msize} matches, 52 | $if{$and{$eq{$last,$msize},$eq{$topdoc,0}}, 53 | All $nice{$msize} matches, 54 | $nice{$add{$topdoc,1}}$if{$ne{$add{$topdoc,1},$last},-$nice{$last}} of exactly $nice{$msize} matches} 55 | } 56 |
57 |
58 | $list{$map{$queryterms,$list{$html{$uniq{$unstem{$_}}},,/,}: $nice{$freq{$_}}},Term frequencies: ,$. ,} 59 |
Search took $time seconds 60 | 61 | $hitlist{ 73 | } 78 |
62 | ${$percentage%} 63 |
64 |
65 |
66 |
67 | 68 | Modified:
$html{$date{$field{modtime},%Y-%m-%d}}

69 | $if{$field{language},Language: $html{$field{language}}
} 70 | $if{$field{size},Size: $html{$filesize{$field{size}}}
} 71 |
72 |
$html{$or{$field{caption},$field{title},$field{url},Untitled}}
74 | $highlight{$field{sample},$terms}$if{$field{sample},...}
75 | 76 | $percentage% relevant$. matching: 77 | $list{$map{$terms,$html{$prettyterm{$_}}},$. , and }${for lynx:}

79 | 80 |
81 | 82 |
83 | ${suppress next, prev, and page links if there's only one page} 84 | $if{$ne{$lastpage,1}, 85 | $set{a,$if{$opt{pagelink_height}, HEIGHT=$opt{pagelink_height}}$if{$opt{pagelink_width}, WIDTH=$opt{pagelink_width}}} 86 | 87 | ${1-W ... X-(this)-Y ...} 88 | $set{w,$min{3,$add{$thispage,-1}}} 89 | $set{x,$max{$add{$opt{w},1},$add{$thispage,-3}}} 90 | $set{y,$min{$lastpage,$add{$thispage,8}}} 91 | $PREV 92 | $map{$range{1,$opt{w}},$PAGE{$_}} 93 | $if{$ne{$add{$opt{w},1},$opt{x}},...} 94 | $map{$range{$opt{x},$add{$thispage,-1}},$PAGE{$_}} 95 | $SPAGE{$thispage} 96 | $map{$range{$add{$thispage,1},$opt{y}},$PAGE{$_}} 97 | $if{$ne{$opt{y},$lastpage},...} 98 | $NEXT 99 | } 100 | }} 101 |

102 | $if{$dbname,} 103 | $if{$ne{$topdoc,0},} 104 | $if{$ne{$hitsperpage,10},} 105 | $if{$fmt,} 106 | $if{$cgi{COLLAPSE},} 107 | $if{$queryterms,} 108 | 109 | 110 | $list{$relevants,} 111 | $if{$cgi{THRESHOLD},} 112 |
113 |
114 | -------------------------------------------------------------------------------- /templates/simplecard.tmpl: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /templates/titlepage.tmpl: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 | 6 | 7 |

8 | -------------------------------------------------------------------------------- /templates/trails.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 23 | 24 | -------------------------------------------------------------------------------- /tidy.config: -------------------------------------------------------------------------------- 1 | quiet: yes 2 | indent: yes 3 | indent-with-tabs: yes 4 | wrap: 0 5 | hide-comments: yes 6 | omit-optional-tags: no 7 | punctuation-wrap: yes 8 | tidy-mark: no 9 | drop-empty-elements: no 10 | doctype: html5 11 | --------------------------------------------------------------------------------