Taitan is a RESTful markdown to HTML supplier of pages for bawang and styrdokument-bawang.
Taitan(タイタン) is romaji for Titan.
Retrieve a markdown document.
GET /:path
An example response to GET /om-oss
could look like this:
{
"title": "Om Oss",
"slug": "om-oss",
"url": "/om-oss",
"updated_at": "2022-11-06T02:04:58Z",
"image": "https://example.com/static/hej.png",
"message": "hej",
"body": "<h1>...",
"sidebar": "<ul>...",
"sort": 1,
"expanded": false,
"anchors": [
{"id": "id", "value": "asdf", "level": 1},
{"id": "foo-baz", "value": "foo baz", "level": 2}
],
"nav": [
{
"slug": "/faq",
"title": "FAQ",
"sort": 2
},
{
"slug": "/foo",
"title": "joke",
"sort": 3,
"expanded": true,
"nav": [{
"slug": "/foo/bar",
"title": "baz",
"sort": null
}]
},
{
"slug": "/om-oss",
"title": "Om Oss",
"sort": 1,
"active": true
}
]
}
Some notable behaviours:
- A
nav
item withexpanded
set to true is equivalent to that item containing a nestednav
. - If the main
url
parameter is a nested path, that path will always appear in thenav
-tree withactive
set totrue
, and with all its ancestornav
-nodes havingexpanded
set totrue
. anchors
will contain a list of all heading tags in the page, withlevel
indicating weather it is a<h1>
,<h2>
,<h3>
, etc.
Name | Description |
---|---|
PORT | The port to listen to requests on |
TOKEN | GitHub Personal Access Token used for authorization when pulling the content repository. (Only needed if the content repo is private) |
CONTENT_URL | The repository to get content from |
CONTENT_DIR | Directory to serve contents from. Setting this disables the automatic fetching using git and makes the TOKEN and CONTENT_URL unused. |
DARKMODE_URL | URL to the darkmode system, or true or false to use that value instead of sending an http request. |
DEFAULT_LANG | The default language code that will be used for responses if a lang parameter is not passed in an API request. |
Name | Description |
---|---|
-v | Print info messages |
-vv | Print more info messages |
-w | Reload the contents when they change on disk |
If you have docker installed, you can also run the repo using docker compose up --build
Make sure to copy .env.example
to .env
first, and populate TOKEN
with you personal github token if needed (if your content repo is private).
Note that CONTENT_DIR
will not work with the current compose.yml
file.
Requires: golang
, git
Minimal setup:
- Run
go mod vendor
- Set relevant env-variables
- run
go run .
taitan
has two webhooks intended to keep it's content updated.
- Any request with the header
X-Github-Event
set topush
will causetaitan
to refetch the content-repo. Meant to be called from a workflow in the content repo that is run on new commits. - Any request with the header
X-Darkmode-Event
set toupdated
will causetaitan
to refetch the darkmode status fromDARKMODE_URL
.
Taitan uses path-based routing. I.e. if your content repo contains a directory foo
with a subdirectory bar
, you will get the content of that subdir by navigating to <taitan url>/foo/bar
.
Every directory has to contain a meta.toml
, a sidebar.md
and a body.md
file, the content of which are described below.
Directories starting with a .
is ignored by taitan. (eg. .github
).
The purpose of this file is to provide meta-data that the frontend might or might not need to render a page.
The meta.toml
files can contain the following fields:
Name | Data type | Mandatory | Description |
---|---|---|---|
Title | string | yes | The title of the page |
Image | string | no | Link to an image that can be used by the frontend in any way it wants |
Message | string | no | Specifies a string that is sent to the frontend to use as it wants |
Sort | int | no | A key appearing in the nav attribute intended for the frontend to use for the page when sorting navigation menues. |
Expanded | boolean | no | Specifies whether all the children of of a an directory should be always be expanded when it is included in the nav |
Sensitive | string | no | Weather the whole page should be hidden when DARMODE_URL returns true. |
A markdown file that will contain content intended to render as a sidebar for a route.
This is the file that will contain the html content that will be served for a route. It is written in markdown, and the generated page will be very similar to how the markdown is rendered.
taitan
has support for hiding some content during reception mode by surrounding text with {{ if .reception -}} {{- else -}} {{- end }}
.
some text
{{ if .reception -}}
nothing to see here :)
{{- else -}}
secret text
{{- end }}
more text
When DARMODE_URL
returns true
(during reception), this will render as:
some text
nothing to see here :)
more text
If it returns false
(the rest of the year), it will render as:
some text
secret text
more text
I hereby release this code into the public domain.