From c21b295ec2ccf9328572c2e9b7cb21aae04e5f57 Mon Sep 17 00:00:00 2001 From: Nico Rehwaldt Date: Tue, 5 Aug 2014 08:34:54 +0200 Subject: [PATCH] feat(Viewer): fire events --- lib/Viewer.js | 10 ++++------ lib/import/Importer.js | 18 ++++++++++++++---- test/spec/ViewerSpec.js | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 10 deletions(-) diff --git a/lib/Viewer.js b/lib/Viewer.js index 36bb14bc..d8e5fc88 100644 --- a/lib/Viewer.js +++ b/lib/Viewer.js @@ -185,21 +185,19 @@ Viewer.prototype.invoke = function(fn) { Viewer.prototype.importDefinitions = function(definitions, done) { - var diagram = this.diagram; - // use try/catch to not swallow synchronous exceptions // that may be raised during model parsing try { - if (diagram) { + if (this.diagram) { this.clear(); } - this.diagram = diagram = this._createDiagram(this.options); this.definitions = definitions; + this.diagram = this._createDiagram(this.options); - this._init(diagram); + this._init(this.diagram); - Importer.importBpmnDiagram(diagram, definitions, done); + Importer.importBpmnDiagram(this.diagram, definitions, done); } catch (e) { done(e); } diff --git a/lib/import/Importer.js b/lib/import/Importer.js index dda600ac..62dc9171 100644 --- a/lib/import/Importer.js +++ b/lib/import/Importer.js @@ -14,7 +14,8 @@ var BpmnTreeWalker = require('./BpmnTreeWalker'); */ function importBpmnDiagram(diagram, definitions, done) { - var importer = diagram.get('bpmnImporter'); + var importer = diagram.get('bpmnImporter'), + eventBus = diagram.get('eventBus'); var warnings = []; @@ -35,10 +36,19 @@ function importBpmnDiagram(diagram, definitions, done) { var walker = new BpmnTreeWalker(visitor); - // import - walker.handleDefinitions(definitions); + try { + eventBus.fire('import.start'); - done(null, warnings); + // import + walker.handleDefinitions(definitions); + + eventBus.fire('import.success', warnings); + + done(null, warnings); + } catch (e) { + eventBus.fire('import.error', e); + done(e); + } } module.exports.importBpmnDiagram = importBpmnDiagram; \ No newline at end of file diff --git a/test/spec/ViewerSpec.js b/test/spec/ViewerSpec.js index 401f35a2..6181fc95 100644 --- a/test/spec/ViewerSpec.js +++ b/test/spec/ViewerSpec.js @@ -48,6 +48,45 @@ describe('viewer', function() { }); + describe('import events', function() { + + iit('should fire events', function(done) { + + // given + var viewer = new Viewer({ container: container }); + + var xml = fs.readFileSync('test/fixtures/bpmn/empty-definitions.bpmn', 'utf8'); + + var events = []; + + viewer.on('import.start', function() { + events.push('import.start'); + }); + + viewer.on('import.success', function() { + events.push('import.success'); + }); + + viewer.on('import.error', function() { + events.push('import.error'); + }); + + // when + viewer.importXML(xml, function(err) { + + // then + expect(events).toEqual([ + 'import.start', + 'import.success' + ]); + + done(err); + }); + }); + + }); + + describe('error handling', function() { it('should handle non-bpmn input', function(done) {