Wikity is a tool that allows you to use Wikitext (used by Wikipedia, Fandom, etc) as a templating language to create HTML pages.
This package comes with built-in support for compilation using Eleventy.
See the example folder for a template on making your own wiki site!
Wikity is available on npm. Install locally to use in a Node package or install globally for use from the command-line.
| Local install | Global install |
|---|---|
npm install wikity |
npm install -g wikity |
-
wikity.compile(folder?: string, options?: object): void- Compile all Wikitext (
.wiki) files from an input folder (defaults to the current directory,.) into HTML.
- Compile all Wikitext (
-
wikity.parse(input: string, options?: object): string- Parse raw wikitext input into HTML.
-
Options:
eleventy: boolean = false- Whether front matter will be added to the outputted HTML for Eleventy to read (default:
false). (This parameter must be set totrueif you want to use this with Eleventy.)
- Whether front matter will be added to the outputted HTML for Eleventy to read (default:
outputFolder: string- Used only with
compile(). - Where outputted HTML files shall be placed.
- Default:
'wikity-out'.
- Used only with
pagesFolder: string- What folder content pages are located in.
- Default:
'.'(the root folder).
templatesFolder: string- What folder to place templates in.
- Default:
'templates'.
imagesFolder: string- What folder to place images in.
- Default:
'images'.
defaultStyles: boolean- Used only with
compile(). - Whether to use default wiki styling.
- Default: to
truewhen called fromcompile()andfalsewhen called fromparse().
- Used only with
customStyles: string- Used only with
compile(). - Custom CSS styles to add to the wiki pages.
- Default: empty (
'').
- Used only with
const wikity = require('wikity');
// compile all .wiki files inside this directory
wikity.compile();
// parse wikitext from an input string
let html = wikity.parse(`'''bold''' [[link|text]]`); // <b>bold</b> <a href="link"...>text</a>Use Wikity along with Eleventy to have all your wiki files compiled during the build process:
// .eleventy.js (eleventy's configuration file)
const wikity = require('wikity');
module.exports = function (eleventyConfig) {
const rootFolder = 'src';
// all of the following are relative to the root folder
const pagesFolder = 'pages'; // default is '.' (root folder)
const templatesFolder = 'templates'; // default
const imagesFolder = 'images'; // default
const outputFolder = 'wikity-out'; // default
const wikityOptions = { eleventy: true, pagesFolder, templatesFolder, imagesFolder, outputFolder };
const wikityPlugin = () => wikity.compile(rootFolder, wikityOptions);
eleventyConfig.addPlugin(wikityPlugin);
eleventyConfig.addPassthroughCopy({ [rootFolder + '/' + imagesFolder]: 'wiki/' + imagesFolder }); // Eleventy does not pass through images by default
}The above will use the following file structure (with some example wiki files given):
src/pages/: Directory that content pages are located inIndex.wiki: Example pageOther_Page.wiki: Example other page
templates/: Directory for wiki templates (called like{{this}})images/: Directory to place images (called like[[File:this]])
wikity-out/: File templates compiled from the.wikifiles (add this to.gitignore)wiki/: Output HTML files compiled fromwikity-out/(add this to.gitignore)
(View the above starting at the URL path /wiki/ when ran in an HTTP server.)
wikity help- Display a help message
wikity compile [<folder>] [--outputFolder <folder>] [--pagesFolder <folder>] [--templateFolder <folder>] [--imagesFolder <folder>] [--eleventy] [--defaultStyles]- Compile Wikity with various options
wikity parse <input>- Parse raw input into HTML
wikity version- Display the latest version of Wikity
## Usage
Use [Wikitext](https://en.wikipedia.org/wiki/Help:Wikitext) (file extension `.wiki`) to create your pages.
Any wiki templates (called using `{{template name}}`) must be inside the `templates/` folder by default.
Any files must be inside the `images/` folder by default.
Your wikitext (`*.wiki`) files go in the root directory by default.
### Wiki markup
| Markup | Preview |
| -------------------------------- | ----------------------------------------- |
| `'''bold'''` | **bold** |
| `''italic''` | *italic* |
| `'''''bold italic'''''` | ***bold italic*** |
| ` ``code`` ` | `code` |
| ` ```code block``` ` | <pre>code block</pre> |
| `=heading=` | <big><big><big>heading</big></big></big> |
| `==subheading==` | <big><big>subheading</big></big> |
| `*bulleted` | <ul><li>bulleted</li></ul> |
| `**sub-bulleted` | <ul><ul><li>sub-bulleted</li></ul></ul> |
| `#numbered` | <ol><li>numbered</li></ol> |
| `##sub-numbered` | <ol><ol><li>sub-numbered</li></ol></ol> |
| `;term` | <dt>**term**</dt> |
| `:definition` | <dd> definition</dd> |
| `<ref>Text</ref>` | <sup id=cite-1>[[1]](#ref-1)</sup> |
| `<references/>` | 1. <a id=ref-1>[↑](#cite-1)</a> Text |
| `[[internal link]]` | [internal link](#internal_link) |
| `[[link\|display text]]` | [display text](#link) |
| `[external-link]` | [[1]](#external-link) |
| `[external-link display text]` | [display text](#external-link) |
| `[[File:Example.png\|Caption.]]` |  |
| `{{tp name}}` | *(contents of `templates/tp_name.wiki`)* |
| `{{tp name\|arg=val}}` | *(ditto but `{{{arg}}}` is set to 'val')* |
| `{{{arg}}}` | *(value given by template)* |
| `{{{arg\|default val}}}` | *(ditto but 'default val' if unset)* |
| `{\| style="margin:1em"` | *table opening* |
| `! Cell heading` | **Cell heading** |
| `\|- class="new-row"` | *new table row* |
| `\| Cell content` | Cell content |
| `\|}` | *table closing* |
| `{{#if:non-empty-string\|text}}` | text |
| `{{#ifeq:1\|2\|true\|false}}` | false |
| `{{#vardefine:varname\|text}}` | *(saved to memory)* |
| `{{#var:varname}}` | text *(from memory)* |
| `{{#var:varname\|default val}}` | *(ditto but 'default val' if unset)* |
| `{{#switch:a\|a=1\|b=2\|c=3}}` | 1 |
| `{{#time:d/m/y\|2021-03-28}}` | 28/03/21 |
| `{{#lc:TEXT}}` | text |
| `{{#ucfirst:text}}` | Text |
| `{{#len:12345}}` | 5 |
| `{{#sub:string\|2\|4}}` | ring |
| `{{#pos:text\|x}}` | 2 |
| `{{#padleft:text\|5\|_}}` | _text |
| `{{#padright:msg\|5\|_}}` | msg__ |
| `{{#replace:Message\|e\|3}}` | M3ssag3 |
| `{{#explode:A-B-C-D\|-\|2}}` | C |
| `{{#urlencode:t e x t}}` | t%20e%20x%20t |
| `{{#urldecode:a%20b%27c}}` | a b'c |
| `{{#ev:youtube\|dQw4w9WgXcQ}}` | *(YouTube embed)* |
| `<noinclude>No</noinclude>` | *(blank outside a template)* |
| `<onlyinclude>Yes</onlyinclude>` | Yes |
| `<includeonly>Yes</includeonly>` | Yes *(blank inside a template)* |
| `<nowiki>[[no link]]</nowiki>` | [[no link]] |
| `<pre>Preformatted text</pre>` | `Preformatted text` |
| `<gallery>X.png\|Text</gallery>` | 