/** * @private */Ext.define('Ext.d3.mixin.Detached', { extend: 'Ext.Mixin', detached: null, constructor: function (config) { this.detached = d3.select('body').append('svg').remove().attr('version', '1.1'); }, getDetached: function () { return this.detached; }, isDetached: function (selection) { return selection && selection.node().parentElement === this.detached.node(); }, attach: function (parent, child) { if (parent instanceof d3.selection) { parent = parent.node(); } if (!(parent instanceof SVGElement)) { Ext.raise('The `parent` must either be a D3 selection or an SVG element.'); } if (child instanceof d3.selection) { parent.appendChild(child.node()); } else if (child instanceof SVGElement) { parent.appendChild(child); } else { Ext.raise('The `child` must either be a D3 selection or an SVG element.'); } }, detach: function (child) { this.attach(this.detached, child); }, destroy: function() { var node = this.detached.node(); // IE does not support Element.remove() on SVG elements if (node && node.parentNode) { node.parentNode.removeChild(node); } this.callParent(); } });