diff --git a/src/plots/plots.js b/src/plots/plots.js index 5e262f3ffab..f3a04690292 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -579,8 +579,8 @@ function getTraceUids(oldFullData, newData) { * Single-trace subplots (which have no `id`) such as pie, table, etc * do not need to be collected because we just draw all visible traces. */ -var collectableSubplotTypes; function emptySubplotLists() { + var collectableSubplotTypes = Registry.collectableSubplotTypes; var out = {}; var i, j; diff --git a/src/registry.js b/src/registry.js index 0fffe86fc1d..37e17595f0f 100644 --- a/src/registry.js +++ b/src/registry.js @@ -31,6 +31,7 @@ exports.layoutArrayRegexes = []; exports.traceLayoutAttributes = {}; exports.localeRegistry = {}; exports.apiMethodRegistry = {}; +exports.collectableSubplotTypes = null; /** * Top-level register routine, exported as Plotly.register @@ -72,6 +73,8 @@ exports.apiMethodRegistry = {}; * */ exports.register = function register(_modules) { + exports.collectableSubplotTypes = null; + if(!_modules) { throw new Error('No argument passed to Plotly.register.'); } else if(_modules && !Array.isArray(_modules)) { diff --git a/test/jasmine/bundle_tests/dynamic_import_test.js b/test/jasmine/bundle_tests/dynamic_import_test.js new file mode 100644 index 00000000000..eeeb5341003 --- /dev/null +++ b/test/jasmine/bundle_tests/dynamic_import_test.js @@ -0,0 +1,40 @@ +var Plotly = require('@lib/core'); + +var d3 = require('d3'); +var createGraphDiv = require('../assets/create_graph_div'); +var destroyGraphDiv = require('../assets/destroy_graph_div'); +var failTest = require('../assets/fail_test'); + +describe('Dynamic @lib/ module imports', function() { + var gd; + + afterEach(destroyGraphDiv); + + it('should work', function(done) { + gd = createGraphDiv(); + + Plotly.newPlot(gd, [{ + y: [1, 2, 1] + }]) + .then(function() { + // N.B. from a different subplot type + // more info in: + // https://github.com/plotly/plotly.js/issues/3428 + var ScatterPolar = require('@lib/scatterpolar'); + Plotly.register(ScatterPolar); + }) + .then(function() { + return Plotly.newPlot(gd, [{ + type: 'scatterpolar', + r: [1, 2, 1] + }]); + }) + .then(function() { + var polarLayer = d3.select('.polarlayer'); + expect(polarLayer.size()).toBe(1, 'one polar layer'); + expect(polarLayer.selectAll('.trace').size()).toBe(1, 'one scatterpolar trace'); + }) + .catch(failTest) + .then(done); + }); +});