/*
 * Converts HTML entity codes in a string to the characters they represent.
 *
 * Example:
 * `decodeHTMLEntities('Beets & carrots');`
 * will return "Beets & carrots".
 *
 * The regex makes sure we only replace the HTML entities in the string.
 * For example, the regex would match "<" as well as ":".
 * The decoding works by setting the innerHTML of a dummy element and then
 * retrieving the innerText. Per the spec, innerText is a property that
 * represents the "rendered" text content of an element.
 *
 * See:
 * https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText
 * https://developer.mozilla.org/en-US/docs/Glossary/Entity
 *
 */
const decodeHTMLEntities = str => {
  const el = document.createElement('div');
  return str.replace(/&[#0-9a-z]+;/gi, enc => {
    el.innerHTML = enc;
    return el.innerText;
  });
};
export default decodeHTMLEntities;