diff --git a/lib/Modeler.js b/lib/Modeler.js index 68c981a7..27f026f0 100644 --- a/lib/Modeler.js +++ b/lib/Modeler.js @@ -18,17 +18,13 @@ function Modeler(options) { Modeler.prototype = Object.create(Viewer.prototype); -Modeler.prototype.createDiagram = function(modules) { - return Viewer.prototype.createDiagram.call(this, modules || Modeler.modules); -}; - -Modeler.modules = [ +// modules that comprise the bpmn modeler +Modeler.prototype._modules = Modeler.prototype._modules.concat([ // TODO (nre): buggy in conjunction with zoomscroll / move canvas // require('diagram-js/lib/features/move'), require('./features/label-editing'), - require('./core'), require('./features/zoomscroll'), require('./features/movecanvas') -]; +]); module.exports = Modeler; diff --git a/lib/Viewer.js b/lib/Viewer.js index a0bd75e7..00841e0e 100644 --- a/lib/Viewer.js +++ b/lib/Viewer.js @@ -141,12 +141,21 @@ Viewer.prototype.saveSVG = function(options, done) { Viewer.prototype.get = function(name) { if (!this.diagram) { - return null; + throw new Error('no diagram loaded'); } return this.diagram.get(name); }; +Viewer.prototype.invoke = function(fn) { + + if (!this.diagram) { + throw new Error('no diagram loaded'); + } + + return this.diagram.invoke(fn); +}; + Viewer.prototype.importDefinitions = util.failSafeAsync(function(definitions, done) { var diagram = this.diagram; @@ -172,12 +181,23 @@ Viewer.prototype.initDiagram = function(diagram) { Viewer.prototype.createDiagram = function(modules) { + modules = [].concat(modules || this.getModules()); + + // add self as an available service + modules.unshift({ + bpmnjs: [ 'value', this ] + }); + return new Diagram({ canvas: { container: this.container }, - modules: modules || Viewer.modules + modules: modules }); }; +Viewer.prototype.getModules = function() { + return this._modules; +}; + Viewer.prototype.clear = function() { var diagram = this.diagram; @@ -198,7 +218,8 @@ Viewer.prototype.on = function(event, handler) { } }; -Viewer.modules = [ +// modules that comprise the bpmn viewer +Viewer.prototype._modules = [ require('./core') ]; diff --git a/test/spec/browser/ModelerSpec.js b/test/spec/browser/ModelerSpec.js index f33eea5e..4a163938 100644 --- a/test/spec/browser/ModelerSpec.js +++ b/test/spec/browser/ModelerSpec.js @@ -17,28 +17,23 @@ describe('Modeler', function() { }); - it('should import simple process', function(done) { + function createModeler(xml, done) { + var modeler = new Modeler({ container: container }); - var xml = fs.readFileSync('test/fixtures/bpmn/simple.bpmn', 'utf8'); - - var renderer = new Modeler(container); - - renderer.importXML(xml, function(err) { - done(err); + modeler.importXML(xml, function(err) { + done(err, modeler); }); + } + + it('should import simple process', function(done) { + var xml = fs.readFileSync('test/fixtures/bpmn/simple.bpmn', 'utf8'); + createModeler(xml, done); }); it('should import empty definitions', function(done) { - var xml = fs.readFileSync('test/fixtures/bpmn/empty-definitions.bpmn', 'utf8'); - - var renderer = new Modeler(container); - - renderer.importXML(xml, function(err) { - - done(err); - }); + createModeler(xml, done); }); @@ -56,4 +51,22 @@ describe('Modeler', function() { }); }); + + describe('dependency injection', function() { + + it('should be available via di as ', function(done) { + + debugger; + + var xml = fs.readFileSync('test/fixtures/bpmn/simple.bpmn', 'utf8'); + + createModeler(xml, function(err, modeler) { + + expect(modeler.get('bpmnjs')).toBe(modeler); + done(err); + }); + }); + + }); + }); \ No newline at end of file diff --git a/test/spec/browser/ViewerSpec.js b/test/spec/browser/ViewerSpec.js index c6077bdd..e293a339 100644 --- a/test/spec/browser/ViewerSpec.js +++ b/test/spec/browser/ViewerSpec.js @@ -73,6 +73,23 @@ describe('Viewer', function() { }); + describe('dependency injection', function() { + + it('should be available via di as ', function(done) { + + var xml = fs.readFileSync('test/fixtures/bpmn/simple.bpmn', 'utf8'); + + createViewer(xml, function(err, viewer) { + + expect(viewer.get('bpmnjs')).toBe(viewer); + + done(err); + }); + }); + + }); + + describe('export', function() { it('should export svg', function(done) {