Created
May 6, 2018 13:47
-
-
Save rawnly/1354852b132b42e2be1e2f86ec01b340 to your computer and use it in GitHub Desktop.
Simple nodejs template engine
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function template(source, options = {}) { | |
const testers = { | |
replacer: /#\{\s?[\w]+\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}|\{\s?\{\s?[\w]+\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}\s?\}/gi, | |
alternative: /(\'|\")(.*)(\'|\")/i, | |
key: /#\{\s?([\w]+)\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}|\{\s?\{\s?([\w]+)\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}\s?\}/i, | |
doubleBrackets: /\{\{.*\}\}/g | |
}; | |
return source.split("\n").map(row => { | |
const isRepleaceable = testers.replacer.test(row); | |
const isDoubleBrackets = testers.doubleBrackets.test(row); | |
let key = null; | |
let alternative = null; | |
if (isRepleaceable) { | |
key = row.match(testers.key)[1]; | |
if ( testers.alternative.test(row) ) { | |
alternative = row.match(testers.alternative)[2]; | |
} | |
if (isDoubleBrackets) { | |
key = row.match(testers.key)[5]; | |
} | |
if ( options[key] ) { | |
return row.replace(testers.replacer, options[key]) | |
} else if ( alternative ) { | |
return row.replace(testers.replacer, alternative) | |
} | |
return row; | |
} | |
return row; | |
}).join('\n'); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment