| // Declare internals |
| |
| var internals = {}; |
| |
| |
| exports.escapeJavaScript = function (input) { |
| |
| if (!input) { |
| return ''; |
| } |
| |
| var escaped = ''; |
| |
| for (var i = 0, il = input.length; i < il; ++i) { |
| |
| var charCode = input.charCodeAt(i); |
| |
| if (internals.isSafe(charCode)) { |
| escaped += input[i]; |
| } |
| else { |
| escaped += internals.escapeJavaScriptChar(charCode); |
| } |
| } |
| |
| return escaped; |
| }; |
| |
| |
| exports.escapeHtml = function (input) { |
| |
| if (!input) { |
| return ''; |
| } |
| |
| var escaped = ''; |
| |
| for (var i = 0, il = input.length; i < il; ++i) { |
| |
| var charCode = input.charCodeAt(i); |
| |
| if (internals.isSafe(charCode)) { |
| escaped += input[i]; |
| } |
| else { |
| escaped += internals.escapeHtmlChar(charCode); |
| } |
| } |
| |
| return escaped; |
| }; |
| |
| |
| internals.escapeJavaScriptChar = function (charCode) { |
| |
| if (charCode >= 256) { |
| return '\\u' + internals.padLeft('' + charCode, 4); |
| } |
| |
| var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); |
| return '\\x' + internals.padLeft(hexValue, 2); |
| }; |
| |
| |
| internals.escapeHtmlChar = function (charCode) { |
| |
| var namedEscape = internals.namedHtml[charCode]; |
| if (typeof namedEscape !== 'undefined') { |
| return namedEscape; |
| } |
| |
| if (charCode >= 256) { |
| return '&#' + charCode + ';'; |
| } |
| |
| var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex'); |
| return '&#x' + internals.padLeft(hexValue, 2) + ';'; |
| }; |
| |
| |
| internals.padLeft = function (str, len) { |
| |
| while (str.length < len) { |
| str = '0' + str; |
| } |
| |
| return str; |
| }; |
| |
| |
| internals.isSafe = function (charCode) { |
| |
| return (typeof internals.safeCharCodes[charCode] !== 'undefined'); |
| }; |
| |
| |
| internals.namedHtml = { |
| '38': '&', |
| '60': '<', |
| '62': '>', |
| '34': '"', |
| '160': ' ', |
| '162': '¢', |
| '163': '£', |
| '164': '¤', |
| '169': '©', |
| '174': '®' |
| }; |
| |
| |
| internals.safeCharCodes = (function () { |
| |
| var safe = {}; |
| |
| for (var i = 32; i < 123; ++i) { |
| |
| if ((i >= 97) || // a-z |
| (i >= 65 && i <= 90) || // A-Z |
| (i >= 48 && i <= 57) || // 0-9 |
| i === 32 || // space |
| i === 46 || // . |
| i === 44 || // , |
| i === 45 || // - |
| i === 58 || // : |
| i === 95) { // _ |
| |
| safe[i] = null; |
| } |
| } |
| |
| return safe; |
| }()); |