37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
import { badAttributes, badSoftwareAttributes, badAttributePrefixes, tagSpecificPresentationalAttributes } from '../data/attributes.mjs';
|
|
import { defsTag } from '../data/tags.mjs';
|
|
import { parseSVG } from '../parse.mjs';
|
|
|
|
function removeBadAttributes(svg) {
|
|
parseSVG(svg, (item) => {
|
|
const tagName = item.tagName;
|
|
const attribs = item.element.attribs;
|
|
const $element = item.$element;
|
|
Object.keys(attribs).forEach((attr) => {
|
|
if (attr.slice(0, 2) === "on" || badAttributes.has(attr) || badSoftwareAttributes.has(attr) || badAttributePrefixes.has(attr.split("-").shift())) {
|
|
$element.removeAttr(attr);
|
|
return;
|
|
}
|
|
if (defsTag.has(tagName) && !tagSpecificPresentationalAttributes[tagName].has(attr)) {
|
|
$element.removeAttr(attr);
|
|
return;
|
|
}
|
|
const nsParts = attr.split(":");
|
|
if (nsParts.length > 1) {
|
|
const namespace = nsParts.shift();
|
|
const newAttr = nsParts.join(":");
|
|
switch (namespace) {
|
|
case "xlink": {
|
|
if (attribs[newAttr] === void 0) {
|
|
$element.attr(newAttr, attribs[attr]);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
$element.removeAttr(attr);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export { removeBadAttributes };
|