-
Notifications
You must be signed in to change notification settings - Fork 0
/
data-url-to-svg.js
51 lines (32 loc) · 1.17 KB
/
data-url-to-svg.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const dataURLtoSVG = (dataURL) => {
let output;
// CONVERT DATA URL TO SVG
let SVG = dataURL;
SVG = SVG.replace('data:image/svg+xml,', '');
SVG = decodeURIComponent(SVG);
SVG = SVG.replace(/\'/g, '"');
SVG = SVG.trim();
// VALIDATE SVG
const { SVGNamespaceMatches, wellFormedXML, parsedDocument } = validateSVG(SVG);
// ASSIGN TO OUTPUT: FORMATTED SVG
if ((SVGNamespaceMatches === true) && (wellFormedXML === true)) {
// ADD A NEWLINE BEFORE EACH SVG ELEMENT
SVG = SVG.replace('><', '>\n\n<');
SVG = SVG.replace(/\>\<\/svg\>$/, '>\n\n</svg>');
SVG = SVG.replace(/></g, '>\n<');
// FORMAT SVG ROOT ELEMENT
let svgRoot = SVG.match(/^\<svg([^\>]+?)\>/)[0];
svgRootPieces = svgRoot.split('"');
for (let i = 0; i < svgRootPieces.length; i = i + 2) {
svgRootPieces[i] = svgRootPieces[i].split(' ').join('\n ');
}
let reformattedRoot = svgRootPieces.join('"');
SVG = SVG.replace(svgRoot, reformattedRoot);
output = SVG;
}
// ELSE ASSIGN TO OUTPUT: ASHIVA CONSOLE WITH ANALYSIS OF SVG CODE
else {
output = consoleSVG({SVG, parsedDocument, SVGNamespaceMatches, wellFormedXML});
}
return output;
}