Highcharts test tool

by lizozomi

HTML

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js"></script>
<script src="https://code.highcharts.com/11/highcharts.js"></script>

<div id="container"></div>

CSS

#container {
    min-width: 300px;
    max-width: 800px;
    height: 300px;
    margin: 1em auto;
}

JavaScript

const stripHTMLRecurse = o => {
	if (typeof o === 'string') {
    	return DOMPurify.sanitize(o);
    }

	Object.keys(o).forEach(key => {
	    if (typeof o[key] === 'string') {
        	o[key] = DOMPurify.sanitize(o[key]);
        } else if (Array.isArray(o[key])) {
        	o[key].forEach((item, i) => {
            	o[key][i] = stripHTMLRecurse(item);
            });
        } else if (typeof o[key] === 'object') {
        	o[key] = stripHTMLRecurse(o[key]);
        }
    })
    return o;
};

const options = stripHTMLRecurse({
    xAxis: {
    	categories: [
        	'Apples',
            '<a href="javascript:console.log(document.domain)">Click me</a>',
            'Bananas',
            '<span style="color: orange">Oranges</span>'
        ],
        labels: {
        	useHTML: true
        }
    },
    title: {
    	text: '<a href="java\x09cript:console.log(document.domain)">Click me</a>',
        useHTML: true
    },
    series: [{
        data: [1, 4, 3, 5],
        type: 'column'
    }]
});



Highcharts.chart('container', options);