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.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							64 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');
 | 
						|
    }
 | 
						|
 | 
						|
};
 |