marked-filter-blocks
v1.0.0
Published
A plugin for marked that lets you conditionally exclude blocks of markdown content using custom handlebars-style tags.
Maintainers
Readme
marked-filter-blocks
A plugin for marked that lets you conditionally exclude blocks of markdown content using custom handlebars-style tags. Useful for rendering different output for platforms like a website vs. a newsletter — from the same markdown source.
Why
Sometimes your content lives in one place and needs to show up differently depending on where you use it.
Think:
- A newsletter version that strips out long or web-specific sections
- A web version that includes interactive elements or links that don't make sense in email
- A product description that has variants for different locales or platforms
Instead of maintaining multiple markdown files or duplicating content, you can write once using block tags like:
{{#newsletter}}Only for email readers.{{/newsletter}}
{{#website}}Extra info for the web version.{{/website}}Then render conditionally using marked-filter-blocks, depending on where you're publishing.
Installation
pnpm add marked-filter-blocksnpm i --save marked-filter-blocksUsage
Given this markdown:
This is shared content.
{{#website}}
This only shows on the website.
{{/website}}
{{#newsletter}}
This only shows in the newsletter.
{{/newsletter}}And this code:
import { marked } from 'marked';
import markedFilterBlocks from 'marked-filter-blocks';
marked.use(markedFilterBlocks({ without: ['newsletter'] }));
const output = marked(markdownSource);The output will exclude the newsletter block but include and parse everything else.
<p>This is shared content.</p>
<p>This only shows on the website.</p>It supports both block-level and inline-level filtering:
Hello from the {{#website}}website{{/website}}{{#newsletter}}newsletter{{/newsletter}}!Will output:
<p>Hello from the website!</p>API
markedFilterBlocks(options?: {
without?: string[] | string | null;
});| Property | Type | Required? | Description | Default |
| :------- | :----------------- | :-------: | :----------------------------------------------------------------------- | :------ |
| without | String | String[] | | The block names you want to exclude. All blocks are included by default. | null |
Syntax
{{#blockname}}
Some markdown content
{{/blockname}}Nested block syntax is not supported — block names must be flat and balanced.
License
MIT License - fork, modify and use however you want.
