You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
'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'); |
|
} |
|
|
|
};
|
|
|