![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/clinic.corals.io/node_modules/svgo/plugins/ |
'use strict'; const { inheritableAttrs, elemsGroups } = require('./_collections'); exports.type = 'perItemReverse'; exports.active = true; exports.description = 'collapses useless groups'; function hasAnimatedAttr(item, name) { if (item.type === 'element') { return ( (elemsGroups.animation.includes(item.name) && item.attributes.attributeName === name) || (item.children.length !== 0 && item.children.some((child) => hasAnimatedAttr(child, name))) ); } return false; } /* * Collapse useless groups. * * @example * <g> * <g attr1="val1"> * <path d="..."/> * </g> * </g> * ⬇ * <g> * <g> * <path attr1="val1" d="..."/> * </g> * </g> * ⬇ * <path attr1="val1" d="..."/> * * @param {Object} item current iteration item * @return {Boolean} if false, item will be filtered out * * @author Kir Belevich */ exports.fn = function (item) { // non-empty elements if ( item.type === 'element' && item.name !== 'switch' && item.children.length !== 0 ) { item.children.forEach(function (g, i) { // non-empty groups if (g.type === 'element' && g.name === 'g' && g.children.length !== 0) { // move group attibutes to the single child element if (Object.keys(g.attributes).length !== 0 && g.children.length === 1) { var inner = g.children[0]; if ( inner.type === 'element' && inner.attributes.id == null && g.attributes.filter == null && (g.attributes.class == null || inner.attributes.class == null) && ((g.attributes['clip-path'] == null && g.attributes.mask == null) || (inner.type === 'element' && inner.name === 'g' && g.attributes.transform == null && inner.attributes.transform == null)) ) { for (const [name, value] of Object.entries(g.attributes)) { if (g.children.some((item) => hasAnimatedAttr(item, name))) return; if (inner.attributes[name] == null) { inner.attributes[name] = value; } else if (name == 'transform') { inner.attributes[name] = value + ' ' + inner.attributes[name]; } else if (inner.attributes[name] === 'inherit') { inner.attributes[name] = value; } else if ( inheritableAttrs.includes(name) === false && inner.attributes[name] !== value ) { return; } delete g.attributes[name]; } } } // collapse groups without attributes if ( Object.keys(g.attributes).length === 0 && !g.children.some((item) => item.isElem(elemsGroups.animation)) ) { item.spliceContent(i, 1, g.children); } } }); } };