mirror of
https://github.com/stolksdorf/homebrewery.git
synced 2025-12-15 21:45:57 +00:00
'Created
This commit is contained in:
@@ -12,7 +12,8 @@
|
|||||||
"postinstall": "npm run build",
|
"postinstall": "npm run build",
|
||||||
"start": "node server.js",
|
"start": "node server.js",
|
||||||
"test": "mocha test",
|
"test": "mocha test",
|
||||||
"test:dev": "nodemon -x mocha test || exit 0"
|
"test:dev": "nodemon -x mocha test || exit 0",
|
||||||
|
"test:markdown": "nodemon -x mocha test/markdown.test.js || exit 0"
|
||||||
},
|
},
|
||||||
"author": "stolksdorf",
|
"author": "stolksdorf",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
82
shared/homebrewery/markdown.new.js
Normal file
82
shared/homebrewery/markdown.new.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
var _ = require('lodash');
|
||||||
|
var Markdown = require('marked');
|
||||||
|
var renderer = new Markdown.Renderer();
|
||||||
|
|
||||||
|
//Processes the markdown within an HTML block if it's just a class-wrapper
|
||||||
|
renderer.html = function (html) {
|
||||||
|
if(_.startsWith(_.trim(html), '<div') && _.endsWith(_.trim(html), '</div>')){
|
||||||
|
var openTag = html.substring(0, html.indexOf('>')+1);
|
||||||
|
html = html.substring(html.indexOf('>')+1);
|
||||||
|
html = html.substring(0, html.lastIndexOf('</div>'));
|
||||||
|
return `${openTag} ${Markdown(html)} </div>`;
|
||||||
|
}
|
||||||
|
return html;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const tagTypes = ['div', 'span', 'a'];
|
||||||
|
const tagRegex = new RegExp('(' +
|
||||||
|
_.map(tagTypes, (type)=>{
|
||||||
|
return `\\<${type}|\\</${type}>`;
|
||||||
|
}).join('|') + ')', 'g');
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
marked : Markdown,
|
||||||
|
render : (rawBrewText)=>{
|
||||||
|
return Markdown(rawBrewText, {renderer : renderer})
|
||||||
|
},
|
||||||
|
|
||||||
|
validate : (rawBrewText) => {
|
||||||
|
var errors = [];
|
||||||
|
var leftovers = _.reduce(rawBrewText.split('\n'), (acc, line, _lineNumber) => {
|
||||||
|
var lineNumber = _lineNumber + 1;
|
||||||
|
var matches = line.match(tagRegex);
|
||||||
|
if(!matches || !matches.length) return acc;
|
||||||
|
|
||||||
|
_.each(matches, (match)=>{
|
||||||
|
_.each(tagTypes, (type)=>{
|
||||||
|
if(match == `<${type}`){
|
||||||
|
acc.push({
|
||||||
|
type : type,
|
||||||
|
line : lineNumber
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(match === `</${type}>`){
|
||||||
|
if(!acc.length){
|
||||||
|
errors.push({
|
||||||
|
line : lineNumber,
|
||||||
|
type : type,
|
||||||
|
text : 'Unmatched closing tag',
|
||||||
|
id : 'CLOSE'
|
||||||
|
});
|
||||||
|
}else if(_.last(acc).type == type){
|
||||||
|
acc.pop();
|
||||||
|
}else{
|
||||||
|
errors.push({
|
||||||
|
line : _.last(acc).line + ' to ' + lineNumber,
|
||||||
|
type : type,
|
||||||
|
text : 'Type mismatch on closing tag',
|
||||||
|
id : 'MISMATCH'
|
||||||
|
});
|
||||||
|
acc.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return acc;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
_.each(leftovers, (unmatched)=>{
|
||||||
|
errors.push({
|
||||||
|
line : unmatched.line,
|
||||||
|
type : unmatched.type,
|
||||||
|
text : "Unmatched opening tag",
|
||||||
|
id : 'OPEN'
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
return errors;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
const testing = require('./test.init.js');
|
||||||
|
|
||||||
|
const Markdown = require('../shared/homebrewery/markdown.new.js');
|
||||||
|
|
||||||
|
describe('Markdown', ()=>{
|
||||||
|
|
||||||
|
it('should do a thing', ()=>{
|
||||||
|
|
||||||
|
const res = Markdown.render(`
|
||||||
|
test
|
||||||
|
<div> cool stuff </div>
|
||||||
|
test2
|
||||||
|
`)
|
||||||
|
console.log(res);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user