-
Notifications
You must be signed in to change notification settings - Fork 0
/
svg-to-data-url.js
43 lines (30 loc) · 1.2 KB
/
svg-to-data-url.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
const SVGToDataURL = (SVG) => {
let output;
const { SVGNamespaceMatches, wellFormedXML, parsedDocument } = validateSVG(SVG);
// ASSIGN TO OUTPUT: SVG CONVERTED INTO DATA URL
if ((SVGNamespaceMatches === true) && (wellFormedXML === true)) {
let dataURL = SVG;
dataURL = dataURL.replace(/(\s*\n)+\s*/g, ' ');
dataURL = dataURL.replace(/\s+\{/g, '{');
dataURL = dataURL.replace(/\}\s+/g, '}');
dataURL = dataURL.replace(/\:\s+/g, ':');
dataURL = dataURL.replace(/\,\s+/g, ',');
dataURL = dataURL.replace(/\s\/>/g, '/>');
dataURL = dataURL.replace(/\>\s+\</g, '><');
dataURL = dataURL.replace(/\"/g, '\'');
dataURL = dataURL.trim();
const characterArray = dataURL.split('');
for (let i = 0; i < characterArray.length; i++) {
if (characterArray[i].match(/[A-Za-z0-9\.\,\;\:\/\*\-\=\_\~\'\!\$\@]/) === null) {
characterArray[i] = encodeURIComponent(characterArray[i]);
}
}
dataURL = 'data:image/svg+xml,' + characterArray.join('');
output = dataURL;
}
// ELSE ASSIGN TO OUTPUT: ASHIVA CONSOLE WITH ANALYSIS OF SVG CODE
else {
output = consoleSVG({SVG, parsedDocument, SVGNamespaceMatches, wellFormedXML});
}
return output;
}