Skip to content

Commit

Permalink
Merge pull request #2042 from TerriaJS/decodeEntities
Browse files Browse the repository at this point in the history
Decode HTML entities when parsing HTML to React components
  • Loading branch information
RacingTadpole authored Sep 13, 2016
2 parents 4d06b39 + 339885d commit 533a003
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Change Log
* Improved rendering speed when changing the display variable for large lat/lon csv files.
* Default to moving feature csvs if a time, lat, lon and a column named `id` are present.
* Fixed a bug so units flow through to charts of moving csv features.
* Fixed a bug that caused `&` to appear in some URLs instead of simply `&`, leading to an error when visiting the link.
* Added the ability to pass a LineString to a Web Processing Service.

### 4.3.2
Expand Down
4 changes: 3 additions & 1 deletion lib/ReactViews/Custom/parseCustomHtmlToReact.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ const defined = require('terriajs-cesium/Source/Core/defined');

const CustomComponents = require('./CustomComponents');

const htmlToReactParser = new HtmlToReact.Parser(React);
const htmlToReactParser = new HtmlToReact.Parser(React, {
decodeEntities: true
});
const processNodeDefinitions = new HtmlToReact.ProcessNodeDefinitions(React);

const isValidNode = function() {
Expand Down
10 changes: 10 additions & 0 deletions test/Models/parseCustomHtmlToReactSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,16 @@ describe('parseCustomHtmlToReact and registerCustomComponentTypes', function() {
expect(chart.props.tableStructure.columns[2].values.length).toEqual(4);
});

it('decodes HTML entities in text nodes and in attributes', function() {
const result = parseCustomHtmlToReact('<a href="https://programs.communications.gov.au/geoserver/ows?service=WMS&amp;version=1.3.0&amp;request=GetCapabilities">https://programs.communications.gov.au/geoserver/ows?service=WMS&amp;version=1.3.0&amp;request=GetCapabilities</a>');

expect(result.props.href).toEqual('https://programs.communications.gov.au/geoserver/ows?service=WMS&version=1.3.0&request=GetCapabilities');

const text = findAllEqualTo(result, 'https://programs.communications.gov.au/geoserver/ows?service=WMS&version=1.3.0&request=GetCapabilities');
expect(text).toBeDefined();
expect(text).not.toBeNull();
});

// TODO: add tests for badly formed data strings.

});
21 changes: 21 additions & 0 deletions test/Models/parseCustomMarkdownToReactSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import parseCustomMarkdownToReact from '../../lib/ReactViews/Custom/parseCustomMarkdownToReact';

import {findAllWithType, findAll} from 'react-shallow-testutils';

function findAllEqualTo(reactElement, text) {
return findAll(reactElement, (element) => element && element === text);
}

describe('parseCustomMarkdownToReact', function() {

it('correctly linkifies URLs with ampersands', function() {
const result = parseCustomMarkdownToReact('https://programs.communications.gov.au/geoserver/ows?service=WMS&version=1.3.0&request=GetCapabilities');

var a = findAllWithType(result, 'a')[0];
expect(a.props.href).toEqual('https://programs.communications.gov.au/geoserver/ows?service=WMS&version=1.3.0&request=GetCapabilities');

const text = findAllEqualTo(result, 'https://programs.communications.gov.au/geoserver/ows?service=WMS&version=1.3.0&request=GetCapabilities');
expect(text).toBeDefined();
expect(text).not.toBeNull();
});
});

0 comments on commit 533a003

Please sign in to comment.