pixel-editor/helpers/svg.js

42 lines
831 B
JavaScript
Raw Permalink Normal View History

const fs = require("fs");
const handlebars = require("handlebars");
const ltx = require("ltx");
const resolve = require("resolve");
const path = "../svg/";
const nameToModule = {};
const cache = {};
module.exports = function (name, opts) {
name = path + name;
const mod =
nameToModule[name] ||
(nameToModule[name] = resolve.sync(name, {
extensions: [".svg"],
}));
const content =
cache[name] || (cache[name] = fs.readFileSync(mod, "utf-8"));
const svg = parse(content);
Object.assign(svg.attrs, opts.hash);
return new handlebars.SafeString(svg.root().toString());
};
module.exports.cache = cache;
function parse(xml, mod) {
const svg = ltx.parse(xml);
if (svg.name != "svg") {
throw new TypeError("Input must be an SVG");
}
delete svg.attrs.xmlns;
delete svg.attrs["xmlns:xlink"];
return svg;
}