| 'use strict'; |
| |
| exports.type = 'perItem'; |
| |
| exports.active = true; |
| |
| exports.description = 'moves some group attributes to the content elements'; |
| |
| var collections = require('./_collections.js'), |
| pathElems = collections.pathElems.concat(['g', 'text']), |
| referencesProps = collections.referencesProps; |
| |
| /** |
| * Move group attrs to the content elements. |
| * |
| * @example |
| * <g transform="scale(2)"> |
| * <path transform="rotate(45)" d="M0,0 L10,20"/> |
| * <path transform="translate(10, 20)" d="M0,10 L20,30"/> |
| * </g> |
| * ⬇ |
| * <g> |
| * <path transform="scale(2) rotate(45)" d="M0,0 L10,20"/> |
| * <path transform="scale(2) translate(10, 20)" d="M0,10 L20,30"/> |
| * </g> |
| * |
| * @param {Object} item current iteration item |
| * @return {Boolean} if false, item will be filtered out |
| * |
| * @author Kir Belevich |
| */ |
| exports.fn = function(item) { |
| |
| // move group transform attr to content's pathElems |
| if ( |
| item.isElem('g') && |
| item.hasAttr('transform') && |
| !item.isEmpty() && |
| !item.someAttr(function(attr) { |
| return ~referencesProps.indexOf(attr.name) && ~attr.value.indexOf('url('); |
| }) && |
| item.content.every(function(inner) { |
| return inner.isElem(pathElems) && !inner.hasAttr('id'); |
| }) |
| ) { |
| item.content.forEach(function(inner) { |
| var attr = item.attr('transform'); |
| if (inner.hasAttr('transform')) { |
| inner.attr('transform').value = attr.value + ' ' + inner.attr('transform').value; |
| } else { |
| inner.addAttr({ |
| 'name': attr.name, |
| 'local': attr.local, |
| 'prefix': attr.prefix, |
| 'value': attr.value |
| }); |
| } |
| }); |
| |
| item.removeAttr('transform'); |
| } |
| |
| }; |