metalsmith-scoping
v1.0.0
Published
Metalsmith plugin for hiding content at build time
Downloads
3
Readme
metalsmith-scoping
This is a plugin for Metalsmith that allows marking pages of your site as private. At build time, you can then specify if you want to include private content as well.
Usage
In your YAML front-matter, put private: true
for marking a page as private.
Per default, pages are public.
If using the CLI for Metalsmith, metalsmith-scoping can be used like any other
plugin by including it in metalsmith.json
. For example:
{
"plugins": {
"metalsmith-scoping": {
"scope": "public"
}
}
}
For Metalscript's JavaScript API, metalsmith-scoping can be used like any other plugin, by attaching it to the function invocation chain on the Metalscript object. For example:
var scoping = require('metalsmith-scoping');
require('metalsmith')(__dirname)
.use(scoping({
scope: 'public'
})
.build();
Options
All options are optional. For defaults see below. Note that the privateProcess
and publicProcess
options cannot be used via CLI, as JSON doesn't serialize
JavaScript functions.
scope
defines which mode you're building. When set toprivate
it will include private pages, otherwise discard them. Default ispublic
.marked
is passed as options to Marked, the Markdown compiler. Per default, no options are passed.privateProcess
is a function when you can manipulate private content before it's printed, like adding a "private" indicator to the output. It takes uncompiled Markdown as an argument and should return the processed HTML.publicProcess
is a function executed on public content before it's printed. It takes the uncompiled Markdown as an argument and should return the processed HTML.
Finer-grained Scoping
You might want to mark only parts of a given document as private. This can be achieved by making use of the processing functions. Let's say we have a document like this:
Some *Markdown* content here that is public
<private>
Now here some content that should only appear when building in private
mode.
</private>
Back to public.
Using the following functions makes the content within the <private>
tags
only show up when building with private scope:
var marked = require('marked');
var opts = {
privateProcess: function(contents) {
return contents.replace(/[\r\n]<private>([\s\S]*?)<\/private>/gi, function (match, md) {
return '<div class="private">' + marked(md, markdown) + '</div>';
});
},
publicProcess: function(contents) {
return contents.replace(/[\r\n]<private>[\s\S]*?<\/private>/gi, '')
}
};
This wraps the given block into a <div class="private"></div>
element when
building with private scope and removes it entirely when building with public
scope.
License
MIT, see LICENSE.