| 17 | } |
| 18 | |
| 19 | export function D3Node ({ d3Module = d3, selector = '', container = '', styles = '', svgStyles = '', canvasModule = '' } = {}) { |
| 20 | // deprecates props |
| 21 | if (svgStyles && !styles) { // deprecated svgStyles option |
| 22 | console.warn('WARNING: svgStyles is deprecated, please use styles instead !!') |
| 23 | styles = svgStyles |
| 24 | } |
| 25 | |
| 26 | // auto-new instance, so we always have 'this' |
| 27 | if (!(this instanceof D3Node)) { |
| 28 | return new D3Node({ d3Module, selector, container, styles, svgStyles, canvasModule }) |
| 29 | } |
| 30 | |
| 31 | // setup DOM |
| 32 | let jsDom = new JSDOM() |
| 33 | if (container) { |
| 34 | jsDom = new JSDOM(container) |
| 35 | } |
| 36 | const document = jsDom.window.document |
| 37 | |
| 38 | // setup d3 selection |
| 39 | let d3Element = d3Module.select(document.body) |
| 40 | if (selector) { |
| 41 | d3Element = d3Element.select(selector) |
| 42 | } |
| 43 | |
| 44 | this.options = { d3Module, selector, container, styles, canvasModule } |
| 45 | this.jsDom = jsDom |
| 46 | this.document = document |
| 47 | this.window = document.defaultView |
| 48 | this.d3Element = d3Element |
| 49 | this.d3 = d3Module |
| 50 | } |
| 51 | |
| 52 | D3Node.prototype.createSVG = function (width, height, attrs) { |
| 53 | const svg = this.d3Element.append('svg') |