Spaces:
Sleeping
Sleeping
| ; | |
| const internals = {}; | |
| module.exports = function (input) { | |
| if (!input) { | |
| return ''; | |
| } | |
| let escaped = ''; | |
| for (let i = 0; i < input.length; ++i) { | |
| const charCode = input.charCodeAt(i); | |
| if (internals.isSafe(charCode)) { | |
| escaped += input[i]; | |
| } | |
| else { | |
| escaped += internals.escapeHtmlChar(charCode); | |
| } | |
| } | |
| return escaped; | |
| }; | |
| internals.escapeHtmlChar = function (charCode) { | |
| const namedEscape = internals.namedHtml[charCode]; | |
| if (typeof namedEscape !== 'undefined') { | |
| return namedEscape; | |
| } | |
| if (charCode >= 256) { | |
| return '&#' + charCode + ';'; | |
| } | |
| const hexValue = charCode.toString(16).padStart(2, '0'); | |
| return `&#x${hexValue};`; | |
| }; | |
| 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 () { | |
| const safe = {}; | |
| for (let 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; | |
| }()); | |