mikser
Version:
Real-time static site generator
57 lines (54 loc) • 1.88 kB
JavaScript
var marked = require('marked');
var S = require('string');
var fs = require('fs-extra');
var removeMd = require('remove-markdown');
module.exports = function (mikser, context) {
if (context) {
context.markdown = function (content) {
if (!content) return '';
if (typeof content != 'string' && content != undefined) {
throw new Error('Argument is not a string');
}
let renderer = new marked.Renderer();
renderer.heading = function (text, level) {
return '<h' + level + '>' + text + '</h' + level + '>';
};
renderer.link = function (href, title, text) {
let target = !href.indexOf('http') ? '_blank' : '';
return `<a href="${mikser.runtime.findHref(context.entity, href)}" title="${title || ''}" target="${target || ''}">${text}</a>`
}
renderer.image = function (href, title, text) {
return `<img src="${mikser.runtime.findHref(context.entity, href)}" title="${title || ''}" alt="${text || ''}" >`
}
return marked(content, { renderer: renderer });
}
context.removeMarkdown = function (content) {
if (content) {
return removeMd(content);
}
return content;
}
} else {
mikser.manager.extensions['.md'] = '.html';
mikser.generator.engines.push({
extensions: ['md'],
pattern: '**/*.md',
render: function(context) {
let renderer = new marked.Renderer();
let idMap = {};
renderer.heading = function (text, level) {
let id = S(text.toLowerCase()).stripTags().replaceAll(' ','-').s;
let globalId = id;
let globalCounter = 1;
while (idMap[globalId]) {
globalId = id + '-' + globalCounter++;
}
idMap[globalId] = true;
return '<h' + level + ' id="' + globalId + '">' + text + '</h' + level + '>';
};
return marked(context.content, { renderer: renderer });
}
});
}
};