fix: Decode HTML entities in the test output (#111)
parent
caf85cc353
commit
8de3a4c766
|
@ -32,6 +32,8 @@ import {
|
||||||
|
|
||||||
import './classic.css';
|
import './classic.css';
|
||||||
|
|
||||||
|
import decodeHTMLEntities from '../../../../utils/decodeHTMLEntities';
|
||||||
|
|
||||||
const mapStateToProps = createSelector(
|
const mapStateToProps = createSelector(
|
||||||
challengeFilesSelector,
|
challengeFilesSelector,
|
||||||
challengeTestsSelector,
|
challengeTestsSelector,
|
||||||
|
@ -200,7 +202,7 @@ class ShowClassic extends PureComponent {
|
||||||
* Your test output will go here.
|
* Your test output will go here.
|
||||||
*/
|
*/
|
||||||
`}
|
`}
|
||||||
output={output}
|
output={decodeHTMLEntities(output)}
|
||||||
/>
|
/>
|
||||||
</ReflexElement>
|
</ReflexElement>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
Loading…
Reference in New Issue