contentFolder Plugin

Overview

The contentFolder plugin defines a folder in which Scully should look for content to render, and a route with params to associate rendered static files with.

It is a combination of a router plugin and render plugin, and is built into Scully.

Usage

router Plugin

The contentFolder router plugin takes a config in the form of:

const contentFolderconfig = {
  routes: {
    '/blog/:slug': {
      type: 'contentFolder',
      slug: {
        folder: './tests/assets/blog-files',
      },
    },
  },
};

The config takes and handles only one parameter, called folder which is mandatory. It is a file's location relative to the project root.

Scully traverses this folder, and its subfolders in order to make a HandledRoute for each file-extension known in there. .md(markdown) and adoc (asciiDoc) are known out of the box. That route has a templateFile property with the full path to the file. The route reflects the folder structure.

Furthermore, it parses out the date in the front-matter part, and it is added to the handledRoutes data property.

render Plugin

The contentFolder render plugin takes the pre-rendered HTML and a HandlerRoute in order to read the file indicated by the templateFile property. It extracts the Angular _ngcontent id. It looks for the file's extension in the fileHandler plugins, and it uses this plugin to convert the raw content into HTML.

Finally, it adds the _ngcontent id to the generated HTML, so that components' style works as expected.

This plugin finds the <scully-content> tag, and it injects the HTML as its previous sibling(s).