coarse = (input, options = {}) => {
const container = document.createElement('template');
container.appendChild(input.cloneNode(true));
const svg = container.querySelector('svg');
const rc = rough.svg(svg, { options });
const children = svg.querySelectorAll(
'circle, rect, ellipse, line, polygon, polyline, path'
);
for (let i = 0; i < children.length; i += 1) {
const original = children[i];
const params = [];
let shapeType;
switch (original.tagName) {
case 'circle':
params.push(
...getNum(original, ['cx', 'cy']),
...getDiam(original, ['r'])
);
shapeType = 'circle';
break;
case 'rect':
params.push(...getNum(original, ['x', 'y', 'width', 'height']));
shapeType = 'rectangle';
break;
case 'ellipse':
params.push(
...getNum(original, ['cx', 'cy']),
...getDiam(original, ['rx', 'ry'])
);
shapeType = 'ellipse';
break;
case 'line':
params.push(...getNum(original, ['x1', 'y1', 'x2', 'y2']));
shapeType = 'line';
break;
case 'polygon':
params.push(getCoords(original, 'points'));
shapeType = 'polygon';
break;
case 'polyline':
params.push(getCoords(original, 'points'));
shapeType = 'linearPath';
break;
case 'path':
params.push(original.getAttribute('d'));
shapeType = 'path';
break;
}
const replacement = rc[shapeType](...params, getSettings(original));
const attributes = getAttributes(original).filter(
attribute => !blacklist.includes(attribute.name)
);
attributes.forEach(({ name, value }) => {
replacement.setAttribute(name, value);
});
original.replaceWith(replacement);
}
return svg.parentNode.removeChild(svg);
}