doc: Commands tests use `test_frontend`
[nit.git] / contrib / nitiwiki / README.md
index 77e0b56..7324487 100644 (file)
@@ -19,16 +19,18 @@ Features:
 
 Basic wiki structure:
 
-       root
-       |- assets
-       |- out
-       |- pages
-       |- templates
-       |       |- footer.html
-       |       |- header.html
-       |       |- menu.html
-       |       `- template.html
-       `- config.ini
+~~~raw
+root
+|- assets
+|- out
+|- pages
+|- templates
+|      |- footer.html
+|      |- header.html
+|      |- menu.html
+|      `- template.html
+`- config.ini
+~~~
 
 ### pages
 
@@ -37,14 +39,16 @@ Nitiwiki will render an article for each markdown file found in `pages`.
 
 You can categorize your content in sections using sub-folders:
 
-       pages
-       |- section1
-       |       `- index.md
-       |- section2
-       |       `- index.md
-       |- page1.md
-       |- page2.md
-       `- index.md
+~~~raw
+pages
+|- section1
+|      `- index.md
+|- section2
+|      `- index.md
+|- page1.md
+|- page2.md
+`- index.md
+~~~
 
 ### assets
 
@@ -53,10 +57,12 @@ This is where you store CSS and JavaScript files used in the design of your site
 You can also use this directory to put some images or other files that will be
 used in all your pages.
 
-       assets
-       |- css
-       |- js
-       `- logo.png
+~~~raw
+assets
+|- css
+|- js
+`- logo.png
+~~~
 
 ### templates
 
@@ -88,7 +94,9 @@ This is the main config file of your wiki. For more details see [Configure the w
 
 Just move to the directory where you want to store your source files and type:
 
-       nitiwiki init
+~~~sh
+nitiwiki init
+~~~
 
 This command will import the base structure of your wiki in the current directory.
 At this point nitiwiki has created the main configuration file of your site:
@@ -174,17 +182,44 @@ will appear like this: `Contact me!`.
 
 You can link to an anchor inside a page, using something like `[[WikiLink#foo]]`.
 
+#### Trails of Pages
+
+Wikilinks, with the directive `trail`, will register the target page as an element of a trail.
+Each `trail` are chained together and will display navigational link `prev` for the previous page of the trail, `next` for the next page of the trail and `up` to go to the pages that has used the `trail` wikilink.
+
+For instance, if the page `doc.md` has the following content:
+
+~~~md
+To use nitiwiki, first [[trail: install|install it]],
+then [[trail: simple_wiki|create a first wiki]].
+
+You can also do advanced things like:
+
+* [[trail: github|editing pages with github]]
+* [[trail: templating| adapting the templates]]
+~~~
+
+A trail will be made and will consist of the sequence of pages `install`, `simple_wiki`, `github` and `templating`.
+On each one of these pages, there will be links for the previous page, the next page and the `doc.md` page.
+
+If a page includes trail wikilinks and is also the target for trail wikilinks, then the two trails are merged and pages will be visitable in a depth-first order.
+This nesting of trails can be used to have sections and sub-sections.
+
 #### Render the wiki in HTML
 
 Once you have done your changes, use:
 
-       nitiwiki --status
+~~~sh
+nitiwiki --status
+~~~
 
 This will show the impacts of your changes on the wiki structure.
 
 Then type:
 
-       nitiwiki --render
+~~~sh
+nitiwiki --render
+~~~
 
 This will the generate the html output of your new content.
 The option `--force` can be used to regenerate all the wiki.
@@ -227,27 +262,31 @@ Every template can access to:
 * `SUBTITLE`: Wiki description
 * `LOGO`: Wiki logo image path
 
-Additionnal macros can be used in specialized templates.
+Additional macros can be used in specialized templates.
 
 ### Main template
 
 The template file `template.html` represents the overall structure of your wiki pages.
 
-       <!DOCTYPE html>
-       <html>
-               <head>
-                       <title>%TITLE%</title>
-                       <link href="%ROOT_URL%/assets/css/main.css" rel="stylesheet">
-               </head>
-               <body>
-                       %HEADER%
-                       %TOP_MENU%
-                       <div>
-                               %BODY%
-                               %FOOTER%
-                       </div>
-               </body>
-       </html>
+~~~html
+<!DOCTYPE html>
+<html>
+       <head>
+               <title>%TITLE%</title>
+               <link href="%ROOT_URL%/assets/css/main.css" rel="stylesheet">
+       </head>
+       <body>
+               %HEADER%
+               %TOP_MENU%
+               <div>
+                       %TRAIL%
+                       %BODY%
+                       %TRAIL%
+                       %FOOTER%
+               </div>
+       </body>
+</html>
+~~~
 
 Additionnal macros:
 
@@ -256,25 +295,30 @@ Additionnal macros:
 * `TOP_MENU`: Wiki top menu (see [Topmenu template](#Topmenu_template))
 * `HEADER`: Wiki header (see [Header template](#Header_template))
 * `BODY`: Wiki body content
+* `TRAIL`: content of the trail navigational links, if any (see [Trails of Pages](#Trails_of_Pages))
 
 ### Header template
 
 The template file `header.html` is generated on top of all the wiki pages.
 
-       <header>
-               <a href="#"><img src="%ROOT_URL%/%LOGO%" alt="logo"/></a>
-               <h2>%SUBTITLE%</h2>
-               <h1>%TITLE%</h1>
-       </header>
+~~~html
+<header>
+       <a href="#"><img src="%ROOT_URL%/%LOGO%" alt="logo"/></a>
+       <h2>%SUBTITLE%</h2>
+       <h1>%TITLE%</h1>
+</header>
+~~~
 
 ### Footer template
 
 The template file `footer.html` is generated on the bottom of all the wiki pages.
 
-       <footer>
-               <p>%TITLE% &copy; %YEAR%</p>
-               <p>last modification %GEN_TIME%</p>
-       </footer>
+~~~html
+<footer>
+       <p>%TITLE% &copy; %YEAR%</p>
+       <p>last modification %GEN_TIME%</p>
+</footer>
+~~~
 
 Additionnal macros:
 
@@ -287,21 +331,25 @@ The template file `menu.html` contains the menu structure generated on all your
 
 Its content can be static:
 
-       <nav class="menu">
-               <ul class="nav navbar-nav">
-                       <li><a href="#">Home</a></li>
-                       <li><a href="#">Page1</a></li>
-                       <li><a href="#">Page2</a></li>
-               </ul>
-       </nav>
+~~~html
+<nav class="menu">
+       <ul class="nav navbar-nav">
+               <li><a href="#">Home</a></li>
+               <li><a href="#">Page1</a></li>
+               <li><a href="#">Page2</a></li>
+       </ul>
+</nav>
+~~~
 
 Or dynamic using the macro `MENUS`:
 
-       <nav class="menu">
-               <ul class="nav navbar-nav">
-               %MENUS%
-               </ul>
-       </nav>
+~~~html
+<nav class="menu">
+       <ul class="nav navbar-nav">
+       %MENUS%
+       </ul>
+</nav>
+~~~
 
 ## Advanced usages
 
@@ -317,7 +365,9 @@ in order to correctly pull changes.
 To automatically update your wiki when changes are pushed on the
 origin repository you can use the following command in a git hook:
 
-       nitiwiki --fetch --render
+~~~sh
+nitiwiki --fetch --render
+~~~
 
 ### Working with a remote server
 
@@ -332,8 +382,24 @@ after changes or set a cron on a different server that you can control.
 Using the following command in your cron will update the web server instance
 from git:
 
-       nitiwiki --fetch --render --rsync
+~~~sh
+nitiwiki --fetch --render --rsync
+~~~
 
 Be sure to set `wiki.rsync_dir` in order to correctly push your changes.
 When using `--rsync`, keep in mind that the rendered output must be configured
 to work on the web server.
+
+### Serve and edit with nitiwiki_server
+
+nitiwiki_server is a lightweight web server to publish the generated files
+and accept modifications from a web form.
+
+The binary available in `bin/nitiwiki_server` is configured for simple usage or demo.
+The source of the server, at `src/wiki_edit`, can be tweaked for more advanced use.
+It is also possible to import the source and add an instance of `EditAction` to a custom nitcorn server.
+
+To launch the server, change directory to the root of the wiki and run `nitiwiki_server`.
+It uses `config.ini` from the local directory and listen on localhost:8080.
+The template should define the macro `%EDIT%` and `config.ini` should define `wiki.edit=/edit/`.
+To limit who can edit the wiki, list the md5 sum of accepted passwords (one per line) in the local file `passwords`.