Home

Awesome

Jekyll-Namespaces

⚠️ This is gem is under active development! ⚠️

⚠️ Expect breaking changes and surprises until otherwise noted (likely by v0.1.0 or v1.0.0). ⚠️

Jekyll-Namespaces provides support for long namespacing of markdown filenames with dot . delimiters. Frontmatter metadata is added to each document so that they may be referenced by the relationships that make up the overarching hierarchy built from the namespaces. (For example, on a page it may be desirable to link to all children of the current page or to build a breadcrumb trail from the current page's ancestry.)

This gem works in conjunction with jekyll-graph.

This gem is part of the jekyll-bonsai project. 🎋

Installation

Follow the instructions for installing a jekyll plugin for jekyll-namespaces.

Configuration

Defaults look like this:

namespaces:
  enabled: true
  exclude: []

enabled: Toggles the plugin on or off.

exclude: A list of any jekyll document type (pages, posts, and collections. Here is a post on them) to exclude from the namespace tree.

Usage

Namespaces are delineated by dots, like.this.md. There must also be a root document named root.md.

Missing levels will not break the build. They will be processed and marked as missing by replacing urls with the namespaced filename.

Metadata

ancestors: Contains a list of url strings for documents along the path from the root document to the current document in the tree.

children: Contains a list of url strings of all immediate children of the current document.

siblings: Contains a list of url strings of all nodes that share the same direct parent as the current node.

The document for the url can be retrieved in liquid templates like so:

<!-- print all ancestors as links with the document title as its innertext -->

{% for ancestor_url in page.ancestors %}
    {% assign ancestor_doc = site.documents | where: "url", ancestor_url | first %}
    <a href="{{ ancestor_doc.url }}">{{ ancestor_doc.title }}</a>
{% endfor %}
<!-- print all children as links with the document title as its innertext -->

{% for child_url in page.children %}
    {% assign child_doc = site.documents | where: "url", child_url | first %}
    <a href="{{ child_doc.url }}">{{ child_doc.title }}</a>
{% endfor %}