2014-03-18 16:01:24 +00:00
|
|
|
var Diagram = require('diagram-js');
|
2014-03-21 20:10:01 +00:00
|
|
|
|
2014-03-25 13:08:11 +00:00
|
|
|
var Importer = require('./import/Importer'),
|
2014-04-03 17:26:00 +00:00
|
|
|
BpmnModel = require('bpmn-moddle'),
|
2014-04-03 09:47:26 +00:00
|
|
|
failSafeAsync = require('./Util').failSafeAsync;
|
2014-03-18 16:01:24 +00:00
|
|
|
|
2014-03-26 16:45:04 +00:00
|
|
|
|
|
|
|
function initListeners(diagram, listeners) {
|
2014-04-03 09:47:26 +00:00
|
|
|
var events = diagram.get('eventBus');
|
2014-03-26 16:45:04 +00:00
|
|
|
|
|
|
|
listeners.forEach(function(l) {
|
|
|
|
events.on(l.event, l.handler);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2014-03-20 15:18:23 +00:00
|
|
|
function Viewer(container) {
|
2014-03-18 16:01:24 +00:00
|
|
|
this.container = container;
|
|
|
|
}
|
|
|
|
|
2014-03-21 20:10:01 +00:00
|
|
|
Viewer.prototype.importXML = function(xml, done) {
|
|
|
|
|
|
|
|
var self = this;
|
|
|
|
|
2014-04-03 17:26:00 +00:00
|
|
|
BpmnModel.fromXML(xml, 'bpmn:Definitions', function(err, definitions) {
|
2014-03-21 20:10:01 +00:00
|
|
|
if (err) {
|
|
|
|
return done(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
self.importDefinitions(definitions, done);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2014-03-24 10:02:58 +00:00
|
|
|
Viewer.prototype.saveXML = function(options, done) {
|
|
|
|
|
|
|
|
if (!done) {
|
|
|
|
done = options;
|
|
|
|
options = {};
|
|
|
|
}
|
|
|
|
|
|
|
|
var definitions = this.definitions;
|
|
|
|
|
|
|
|
if (!definitions) {
|
|
|
|
return done(new Error('no definitions loaded'));
|
|
|
|
}
|
|
|
|
|
2014-04-03 17:26:00 +00:00
|
|
|
BpmnModel.toXML(definitions, options, function(err, xml) {
|
2014-03-24 10:02:58 +00:00
|
|
|
done(err, xml);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var SVG_HEADER =
|
|
|
|
'<?xml version="1.0" encoding="utf-8"?>\n' +
|
|
|
|
'<!-- created with bpmn-js / http://bpmn.io -->\n' +
|
|
|
|
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">\n' +
|
2014-04-01 12:16:18 +00:00
|
|
|
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
|
|
|
|
'version="1.1" baseProfile="basic">\n';
|
2014-03-24 10:02:58 +00:00
|
|
|
|
2014-04-03 19:20:13 +00:00
|
|
|
var SVG_FOOTER = '</svg>';
|
|
|
|
|
2014-03-24 10:02:58 +00:00
|
|
|
Viewer.prototype.saveSVG = function(options, done) {
|
|
|
|
if (!done) {
|
|
|
|
done = options;
|
|
|
|
options = {};
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!this.definitions) {
|
|
|
|
return done(new Error('no definitions loaded'));
|
|
|
|
}
|
|
|
|
|
2014-04-03 19:20:13 +00:00
|
|
|
var svgElement = this.diagram.get('canvas').getContext();
|
|
|
|
|
|
|
|
var svg = svgElement.node.innerHTML;
|
2014-03-24 10:02:58 +00:00
|
|
|
|
2014-04-03 19:20:13 +00:00
|
|
|
svg = SVG_HEADER + svg + SVG_FOOTER;
|
2014-03-24 10:02:58 +00:00
|
|
|
|
|
|
|
done(null, svg);
|
|
|
|
};
|
|
|
|
|
2014-04-03 09:47:26 +00:00
|
|
|
Viewer.prototype.importDefinitions = failSafeAsync(function(definitions, done) {
|
2014-03-18 16:01:24 +00:00
|
|
|
|
|
|
|
if (this.diagram) {
|
|
|
|
this.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
this.diagram = this.createDiagram();
|
2014-03-26 16:45:04 +00:00
|
|
|
|
|
|
|
initListeners(this.diagram, this.__listeners || []);
|
|
|
|
|
2014-03-18 16:01:24 +00:00
|
|
|
this.definitions = definitions;
|
|
|
|
|
|
|
|
Importer.importBpmnDiagram(this.diagram, definitions, done);
|
2014-04-03 09:47:26 +00:00
|
|
|
});
|
2014-03-18 16:01:24 +00:00
|
|
|
|
2014-03-20 15:18:23 +00:00
|
|
|
Viewer.prototype.createDiagram = function() {
|
2014-03-18 16:01:24 +00:00
|
|
|
return new Diagram({ canvas: { container: this.container }});
|
|
|
|
};
|
|
|
|
|
2014-03-20 15:18:23 +00:00
|
|
|
Viewer.prototype.clear = function() {
|
2014-03-18 16:01:24 +00:00
|
|
|
this.container.innerHTML = '';
|
|
|
|
};
|
|
|
|
|
2014-03-26 16:45:04 +00:00
|
|
|
Viewer.prototype.on = function(event, handler) {
|
|
|
|
this.__listeners = this.__listeners || [];
|
|
|
|
this.__listeners.push({ event: event, handler: handler });
|
|
|
|
};
|
|
|
|
|
2014-03-20 15:18:23 +00:00
|
|
|
module.exports = Viewer;
|