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.
		
		
		
		
			
				
					85 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					85 lines
				
				2.2 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.type = 'full';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.active = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.description = 'remove or cleanup enable-background attribute when possible';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Remove or cleanup enable-background attr which coincides with a width/height box.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @see http://www.w3.org/TR/SVG/filters.html#EnableBackgroundProperty
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * <svg width="100" height="50" enable-background="new 0 0 100 50">
							 | 
						||
| 
								 | 
							
								 *             ⬇
							 | 
						||
| 
								 | 
							
								 * <svg width="100" height="50">
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param {Object} item current iteration item
							 | 
						||
| 
								 | 
							
								 * @return {Boolean} if false, item will be filtered out
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @author Kir Belevich
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								exports.fn = function(data) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var regEnableBackground = /^new\s0\s0\s([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)\s([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)$/,
							 | 
						||
| 
								 | 
							
								        hasFilter = false,
							 | 
						||
| 
								 | 
							
								        elems = ['svg', 'mask', 'pattern'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function checkEnableBackground(item) {
							 | 
						||
| 
								 | 
							
								        if (
							 | 
						||
| 
								 | 
							
								            item.isElem(elems) &&
							 | 
						||
| 
								 | 
							
								            item.hasAttr('enable-background') &&
							 | 
						||
| 
								 | 
							
								            item.hasAttr('width') &&
							 | 
						||
| 
								 | 
							
								            item.hasAttr('height')
							 | 
						||
| 
								 | 
							
								        ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            var match = item.attr('enable-background').value.match(regEnableBackground);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (match) {
							 | 
						||
| 
								 | 
							
								                if (
							 | 
						||
| 
								 | 
							
								                    item.attr('width').value === match[1] &&
							 | 
						||
| 
								 | 
							
								                    item.attr('height').value === match[3]
							 | 
						||
| 
								 | 
							
								                ) {
							 | 
						||
| 
								 | 
							
								                    if (item.isElem('svg')) {
							 | 
						||
| 
								 | 
							
								                        item.removeAttr('enable-background');
							 | 
						||
| 
								 | 
							
								                    } else {
							 | 
						||
| 
								 | 
							
								                        item.attr('enable-background').value = 'new';
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function checkForFilter(item) {
							 | 
						||
| 
								 | 
							
								        if (item.isElem('filter')) {
							 | 
						||
| 
								 | 
							
								            hasFilter = true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function monkeys(items, fn) {
							 | 
						||
| 
								 | 
							
								        items.content.forEach(function(item) {
							 | 
						||
| 
								 | 
							
								            fn(item);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (item.content) {
							 | 
						||
| 
								 | 
							
								                monkeys(item, fn);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        return items;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var firstStep = monkeys(data, function(item) {
							 | 
						||
| 
								 | 
							
								        checkEnableBackground(item);
							 | 
						||
| 
								 | 
							
								        if (!hasFilter) {
							 | 
						||
| 
								 | 
							
								            checkForFilter(item);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return hasFilter ? firstStep : monkeys(firstStep, function(item) {
							 | 
						||
| 
								 | 
							
								            //we don't need 'enable-background' if we have no filters
							 | 
						||
| 
								 | 
							
								            item.removeAttr('enable-background');
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								};
							 |