svg-inplace-rasterize
Version:
Rasterize parts of an SVG to keep it animatable while reducing size and improving render time.
40 lines (39 loc) • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const specialCharacters = {
'!': {
n: '!',
i: '_x21_'
},
'@': {
n: '@',
i: '_x40_'
},
'&': {
n: '&',
i: '_x26_'
}
};
const s = specialCharacters;
function getFilter(y) {
return function filter($) {
const sel = `*[id]:not([id^=XMLID]):not([id^=SVGID]):not(svg):not([id$="${s['!'][y]}"])`;
const x = $(sel).toArray();
return x.filter(el => {
const forceNotRasterize = $(el).is(`[id$="${s['@'][y]}"]`);
if (forceNotRasterize)
return false;
const forceRasterize = $(el).is(`[id$="${s['&'][y]}"]`);
if (forceRasterize)
return true;
const parentsHaveForce = !!$(el).parents(`[id$="${s['&'][y]}"], [id$="${s['@'][y]}"]`).length;
if (parentsHaveForce)
return false;
const childrenHaveId = !!$(el).children(sel).length;
if (childrenHaveId)
return false;
return true;
});
};
}
exports.getFilter = getFilter;