golfnet-editor
Version:
91 lines (74 loc) • 2.19 kB
JavaScript
import PostitTreeWalker from './PostitTreeWalker';
/**
* The importPostitDiagram result.
*
* @typedef {Object} importPostitDiagramResult
*
* @property {Array<string>} warnings
*/
/**
* The importPostitDiagram error.
*
* @typedef {Error} importPostitDiagramError
*
* @property {Array<string>} warnings
*/
/**
* Import the definitions into a diagram.
*
* Errors and warnings are reported through the specified callback.
*
* @param {djs.Diagram} diagram
* @param {ModdleElement<Definitions>} definitions
* @param {ModdleElement<PotitRootBoard>} [rootBoard] the diagram to be rendered
* (if not provided, the first one will be rendered)
*
* Returns {Promise<importPostitDiagramResult, importPostitDiagramError>}
*/
export function importPostitDiagram(diagram, definitions, rootBoard) {
var importer,
eventBus,
translate;
var error,
warnings = [];
/**
* Walk the diagram semantically, importing (=drawing)
* all elements you encounter.
*
* @param {ModdleElement<Definitions>} definitions
* @param {ModdleElement<PostitRootBoard>} rootBoard
*/
function render(definitions, rootBoard) {
var visitor = {
root: function(element) {
return importer.add(element);
},
element: function(element, parentShape) {
return importer.add(element, parentShape);
},
error: function(message, context) {
warnings.push({ message: message, context: context });
}
};
var walker = new PostitTreeWalker(visitor, translate);
// traverse xml document model,
// starting at definitions
walker.handleDefinitions(definitions, rootBoard);
}
return new Promise(function(resolve, reject) {
try {
importer = diagram.get('postitImporter');
eventBus = diagram.get('eventBus');
translate = diagram.get('translate');
eventBus.fire('import.render.start', { definitions: definitions });
render(definitions, rootBoard);
eventBus.fire('import.render.complete', {
error: error,
warnings: warnings
});
return resolve({ warnings: warnings });
} catch (e) {
return reject(e);
}
});
}