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.
		
		
		
		
		
			
		
			
				
					
					
						
							38 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							38 lines
						
					
					
						
							1.1 KiB
						
					
					
				const traverse = require('traverse'); | 
						|
const clone = require('clone'); | 
						|
 | 
						|
// Fixes Firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=353575 | 
						|
const defaultConfig = { | 
						|
  tags: ['linearGradient', 'radialGradient', 'pattern', 'clipPath', 'mask'] | 
						|
}; | 
						|
 | 
						|
function moveFromSymbolToRoot(config = null) { | 
						|
  const cfg = Object.assign({}, defaultConfig, config); | 
						|
 | 
						|
  return (tree) => { | 
						|
    traverse(tree).forEach(function (node) { | 
						|
      if (!this.isLeaf && node.tag && node.tag === 'symbol') { | 
						|
        const symbol = this.parent.node; | 
						|
        const nodesToRemove = []; | 
						|
 | 
						|
        traverse(node.content).forEach(function (n) { | 
						|
          if (!this.isLeaf && n.tag && cfg.tags.indexOf(n.tag) !== -1) { | 
						|
            const parent = this.parent.node; | 
						|
            const cloned = clone(this.node); | 
						|
            symbol.push(cloned); | 
						|
            nodesToRemove.push({ parent, node: n }); | 
						|
          } | 
						|
        }); | 
						|
 | 
						|
        nodesToRemove.forEach((item) => { | 
						|
          const nodeIndex = item.parent.indexOf(item.node); | 
						|
          item.parent.splice(nodeIndex, 1); | 
						|
        }); | 
						|
      } | 
						|
    }); | 
						|
 | 
						|
    return tree; | 
						|
  }; | 
						|
} | 
						|
 | 
						|
module.exports = moveFromSymbolToRoot;
 | 
						|
 |