UNPKG

safe-text

Version:
104 lines (97 loc) 2.59 kB
/* * JavaScript safe-text function * */ module.exports = function (str, ignores) { if(!str) return ''; ignores = ignores || []; var entities = [ 'lt', 'gt', 'quot', 'aops', 'grave', 'equals', 'colon', 'quest', 'lsqb', 'rsqb', 'lbrace', 'rbrace', 'sol', 'bsol', 'semi', 'period', 'comma', 'verbar', 'excl', 'commat', 'num', 'dollar', 'percnt', 'hat', 'amp', 'ast', 'lpar', 'rpar', 'dash', 'plus', ], chars = [ '<' , '>' , '"' , '\'' , '`' , '=' , ':' , '?' , '[' , ']' , '{' , '}' , '/' , '\\' , ';' , '.' , ',' , '|' , '!' , '@' , '#' , '$' , '%' , '^' , '&' , '*' , '(' , ')' , '-' , '+' ], ignore_cases = { emails: ['@', '.', '-', '+'], urls: [':', '/', '.', '#', '=', '+', '%', ',', '&'], markdown: ['#', '-', '`', '=', '>', '.', '*', '+', '[', ']', '(', ')', ':'] }, removeIgnored = function (ignores_arr) { for(var i = 0; i < ignores_arr.length; i++) { var idx = chars.indexOf(ignores_arr[i]); if(Object.keys(ignore_cases).indexOf(ignores_arr[i]) > -1) { removeIgnored(ignore_cases[ignores_arr[i]]); } else if(ignores_arr[i].length > 1) { removeIgnored(ignores_arr[i].split('')); } else if(idx > -1) { chars.splice(idx, 1); entities.splice(idx, 1); } } } ; removeIgnored(ignores); re = new RegExp('[' + '\\' + chars.join('|\\') + ']', 'g') return str.replace(re, function ($0) { return ('&' + entities[chars.indexOf($0)] + ';'); }) }