Browse Source

escape html characters when converting text node to HTML

pull/2446/head
Matias Cammisa 7 years ago
parent
commit
b37083d693
  1. 7
      src/dom_components/model/ComponentTextNode.js
  2. 31
      test/specs/dom_components/model/Component.js

7
src/dom_components/model/ComponentTextNode.js

@ -10,7 +10,12 @@ export default Component.extend(
}, },
toHTML() { toHTML() {
return this.get('content'); return this.get('content')
.replace(/&/g, '&')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
} }
}, },
{ {

31
test/specs/dom_components/model/Component.js

@ -3,6 +3,7 @@ import DomComponents from 'dom_components';
import Component from 'dom_components/model/Component'; import Component from 'dom_components/model/Component';
import ComponentImage from 'dom_components/model/ComponentImage'; import ComponentImage from 'dom_components/model/ComponentImage';
import ComponentText from 'dom_components/model/ComponentText'; import ComponentText from 'dom_components/model/ComponentText';
import ComponentTextNode from 'dom_components/model/ComponentTextNode';
import ComponentLink from 'dom_components/model/ComponentLink'; import ComponentLink from 'dom_components/model/ComponentLink';
import ComponentMap from 'dom_components/model/ComponentMap'; import ComponentMap from 'dom_components/model/ComponentMap';
import ComponentVideo from 'dom_components/model/ComponentVideo'; import ComponentVideo from 'dom_components/model/ComponentVideo';
@ -481,6 +482,36 @@ describe('Text Component', () => {
}); });
}); });
describe('Text Node Component', () => {
beforeEach(() => {
obj = new ComponentTextNode();
});
afterEach(() => {
obj = null;
});
test('Has content property', () => {
expect(obj.has('content')).toEqual(true);
});
test('Not droppable', () => {
expect(obj.get('droppable')).toEqual(false);
});
test('Not editable', () => {
expect(obj.get('editable')).toEqual(true);
});
test('Component toHTML with attributes', () => {
obj = new ComponentTextNode({
attributes: { 'data-test': 'value' },
content: `test content &<>"'`
});
expect(obj.toHTML()).toEqual('test content &amp;&lt;&gt;&quot;&#039;');
});
});
describe('Link Component', () => { describe('Link Component', () => {
const aEl = document.createElement('a'); const aEl = document.createElement('a');

Loading…
Cancel
Save