39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const svg_data_attributes = require('../data/attributes.cjs');
|
|
const svg_data_tags = require('../data/tags.cjs');
|
|
const svg_parse = require('../parse.cjs');
|
|
|
|
function removeBadAttributes(svg) {
|
|
svg_parse.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" || svg_data_attributes.badAttributes.has(attr) || svg_data_attributes.badSoftwareAttributes.has(attr) || svg_data_attributes.badAttributePrefixes.has(attr.split("-").shift())) {
|
|
$element.removeAttr(attr);
|
|
return;
|
|
}
|
|
if (svg_data_tags.defsTag.has(tagName) && !svg_data_attributes.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);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.removeBadAttributes = removeBadAttributes;
|