viewer.on('element.click', function(event) { var element = event.element, moddle = viewer.get('moddle'), // the underlaying BPMN 2.0 element businessObject = element.businessObject, analysis, score, message; // do not allow on root element if (!element.parent) { return; } // we can access extension attribute properties score = businessObject.suitable; analysis = getExtension(businessObject, 'qa:AnalysisDetails'); // right click if (event.originalEvent.ctrlKey) { var result = parseFloat(window.prompt('assign a new suitability score to ' + businessObject.id), 10); if (isNaN(result)) { return; } businessObject.suitable = result; if (!analysis) { analysis = moddle.create('qa:AnalysisDetails'); businessObject.extensionElements = businessObject.extensionElements || moddle.create('bpmn:ExtensionElements'); businessObject.extensionElements.get('values').push(analysis); } analysis.lastChecked = new Date().toString(); } else { if (isNaN(score)) { message = 'No suitability score yet, CTRL+Click to assign one'; } else { message = 'Diagram element has a suitability score of ' + score; } if (analysis) { message += '\n Last analyzed at ' + analysis.lastChecked; } window.alert(message); } });
viewer.saveXML(function(err, xml) { var encodedData = err ? '' : encodeURIComponent(xml); $download.attr({ 'href': encodedData ? 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData : '', }); if (err) { console.log('failed to serialize BPMN 2.0 xml', err); } }); } viewer.on('comments.updated', serialize); viewer.on('commandStack.changed', serialize); viewer.on('canvas.click', function() { viewer.get('comments').collapseAll(); }); // file open handling var $file = $('[data-open-file]'); function readFile(file, done) { if (!file) { return done(new Error('no file chosen'));