#
# REQUIRE: `has_template`
fun load_template(name: String): TemplateString do
- assert has_template(name)
+ if not has_template(name) then
+ message("Error: can't load template `{name}`", 0)
+ exit 1
+ end
var file = expand_path(config.root_dir, config.templates_dir, name)
var tpl = new TemplateString.from_file(file)
if tpl.has_macro("ROOT_URL") then
return tpl
end
+ # Does a sideblock named `name` exists for this wiki?
+ fun has_sideblock(name: String): Bool do
+ name = "{name}.{config.md_ext}"
+ return expand_path(config.root_dir, config.sidebar_dir, name).file_exists
+ end
+
+ # Load a markdown block with `name` from `WikiConfig::sidebar_dir`.
+ private fun load_sideblock(name: String): nullable String do
+ if not has_sideblock(name) then
+ message("Error: can't load sideblock `{name}`", 0)
+ return null
+ end
+ name = "{name}.{config.md_ext}"
+ var path = expand_path(config.root_dir, config.sidebar_dir, name)
+ var file = new FileReader.open(path)
+ var res = file.read_all
+ file.close
+ return res
+ end
+
# Join `parts` as a path and simplify it
fun expand_path(parts: String...): String do
var path = ""
return path.reversed
end
+ # Sidebar relative to this wiki entry.
+ var sidebar = new WikiSidebar(self)
+
# Relative path from `wiki.config.root_dir` to source if any.
fun src_path: nullable String is abstract
redef fun to_s do return "{name} ({parent or else "null"})"
end
+# The sidebar is displayed in front of the main panel of a `WikiEntry`.
+class WikiSidebar
+
+ # Wiki used to parse sidebar blocks.
+ var wiki: Nitiwiki is lazy do return entry.wiki
+
+ # WikiEntry this panel is related to.
+ var entry: WikiEntry
+
+ # Blocks are ieces of markdown that will be rendered in the sidebar.
+ var blocks: Array[Text] is lazy do
+ var res = new Array[Text]
+ # TODO get blocks from the entry for more customization
+ for name in entry.wiki.config.sidebar_blocks do
+ var block = wiki.load_sideblock(name)
+ if block == null then continue
+ res.add block
+ end
+ return res
+ end
+end
+
# Wiki configuration class.
#
# This class provides services that ensure static typing when accessing the `config.ini` file.
return value_or_default("wiki.footer", "footer.html")
end
+ # Automatically add a summary.
+ #
+ # * key: `wiki.auto_summary`
+ # * default: `true`
+ var auto_summary: Bool is lazy do
+ return value_or_default("wiki.auto_summary", "true") == "true"
+ end
+
+ # Automatically add breadcrumbs.
+ #
+ # * key: `wiki.auto_breadcrumbs`
+ # * default: `true`
+ var auto_breadcrumbs: Bool is lazy do
+ return value_or_default("wiki.auto_breadcrumbs", "true") == "true"
+ end
+
+ # Sidebar position.
+ #
+ # Position of the sidebar between `left`, `right` and `none`. Any other value
+ # will be considered as `none`.
+ #
+ # * key: `wiki.sidebar`
+ # * default: `left`
+ var sidebar: String is lazy do
+ return value_or_default("wiki.sidebar", "left")
+ end
+
+ # Sidebar markdown block to include.
+ #
+ # Blocks are specified by their filename without the extension.
+ #
+ # * key: `wiki.sidebar.blocks`
+ # * default: `[]`
+ var sidebar_blocks: Array[String] is lazy do
+ var res = new Array[String]
+ if not has_key("wiki.sidebar.blocks") then return res
+ for val in at("wiki.sidebar.blocks").values do
+ res.add val
+ end
+ return res
+ end
+
+ # Sidebar files directory.
+ #
+ # Directory where sidebar blocks are stored.
+ # **This path MUST be relative to `root_dir`.**
+ #
+ # * key: `wiki.sidebar_dir`
+ # * default: `sidebar/`
+ var sidebar_dir: String is lazy do
+ return value_or_default("wiki.sidebar_dir", "sidebar/").simplify_path
+ end
+
# Directory used by rsync to upload wiki files.
#
# This information is used to update your distant wiki files (like the webserver).
# * key: `wiki.git_branch`
# * default: `master`
var git_branch: String is lazy do return value_or_default("wiki.git_branch", "master")
+
+ # URL to source versionning used to display last changes
+ #
+ # * key: `wiki.last_changes`
+ # * default: ``
+ var last_changes: String is lazy do return value_or_default("wiki.last_changes", "")
+
+ # URL to source edition.
+ #
+ # * key: `wiki.edit`
+ # * default: ``
+ var edit: String is lazy do return value_or_default("wiki.edit", "")
end
# WikiSection custom configuration.