A simple file system based markdown flat page.
Folder structure
Only characters allowed in urls are ASCII, numbers and hyphen with underscore.
Urls map to files by simply substituting /
to ^
and adding .md
extension.
I believe it should eliminate all kinds of security issues.
url | file name |
---|---|
/ |
^.md |
/foo/bar-baz |
^foo^bar-baz.md |
Page format
File could provide title and description in a yaml-based frontmatter, if there's
no frontmatter the first line would be considered the title (and cleaned from
possible header marker #
).
File content | title |
description |
body |
html() |
---|---|---|---|---|
# Foo Bar |
"Foo" |
None |
"# Foo\nBar" |
"<h1>Foo</h1>\n<p>Bar</p>\n" |
--- description: Bar --- # Foo |
"Foo" |
Some("Bar") |
"# Foo" |
"<h1>Foo</h1>\n" |
--- title: Foo description: Bar --- |
"Foo" |
Some("Bar") |
"" |
"" |
Reading a page
let root_folder = "./";
if let Some = by_url.unwrap else
Extra frontmatter fields
You can define extra statically typed frontmatter fields
let _page = by_url.unwrap;
Cached metadata
It's a common for a page to have a list of related pages. To avoid reading all
the files each time, you can use [FlatPageStore
] to cache pages metadata
(titles and descriptions).
let root_folder = "./";
let store = read_dir.unwrap;
if let Some = store.meta_by_url else
Contributing
Please run .pre-commit.sh before sending a PR, it will check everything.
License
This project is licensed under the MIT license.