markdown-more
Version:
Helpers for creating markdown-js filters
54 lines (48 loc) • 1.47 kB
JavaScript
registered = false;
module.exports = function(markdown){
if(registered){return false;}
registered = true;
var options = {
class_prefix:'fa'
, render:function(className,content){
return ['i'
, {class:className}
, ['span',content]
];
}
, characters:{
'+':'plus-circle'
, '-':'minus-circle'
, '#':'check'
, 'x':'times'
, '?':'question'
}
};
markdown.registerTokenFilter(
function(locals){
return locals.markdown.icons.regExp;
}
, function tokenize(token){
var pre = this.markdown.icons.class;
var icons = options.characters;
var className = pre+(icons[token] || 'default');
var render = this.markdown.icons.render;
return render(className,token);
}
);
markdown.register('before',function(data,locals){
if(!locals.markdown){locals.markdown = {};}
if(!locals.markdown.icons){locals.markdown.icons = {};}
var class_prefix = locals.markdown.icons.class_prefix || options.class_prefix;
locals.markdown.icons.class = class_prefix+' '+class_prefix+'-';
locals.markdown.icons.render = locals.markdown.icons.render || options.render;
var additionalCharacters = locals.markdown.icons.characters;
if(additionalCharacters){
for(var n in additionalCharacters){
options.characters[n] = additionalCharacters[n];
}
}
var charsString = Object.keys(options.characters).map(markdown.escapeRegExp).join('|');
locals.markdown.icons.regExp = new RegExp('(?:\\(('+charsString+')\\))','g');
});
}