|
|
- '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');
- }
-
- };
|