safe-text
Version:
Simple safe text
104 lines (97 loc) • 2.59 kB
JavaScript
/*
* 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)] + ';');
})
}