You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
867 B
30 lines
867 B
'use strict' |
|
|
|
/* eslint-env browser */ |
|
|
|
var el |
|
|
|
var semicolon = 59 // ';' |
|
|
|
module.exports = decodeEntity |
|
|
|
function decodeEntity(characters) { |
|
var entity = '&' + characters + ';' |
|
var char |
|
|
|
el = el || document.createElement('i') |
|
el.innerHTML = entity |
|
char = el.textContent |
|
|
|
// Some entities do not require the closing semicolon (`¬` - for instance), |
|
// which leads to situations where parsing the assumed entity of ¬it; will |
|
// result in the string `¬it;`. When we encounter a trailing semicolon after |
|
// parsing and the entity to decode was not a semicolon (`;`), we can |
|
// assume that the matching was incomplete |
|
if (char.charCodeAt(char.length - 1) === semicolon && characters !== 'semi') { |
|
return false |
|
} |
|
|
|
// If the decoded string is equal to the input, the entity was not valid |
|
return char === entity ? false : char |
|
}
|
|
|