UNPKG

mida

Version:

Muiltiple Instance and Data Animator for BPMN models.

189 lines (146 loc) 6.02 kB
'use strict'; var is = require('bpmn-js/lib/util/ModelUtil').is, isAny = require('bpmn-js/lib/features/modeling/util/ModelingUtil').isAny, getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject, domQuery = require('min-dom').query, cmdHelper = require('bpmn-js-properties-panel/lib/helper/CmdHelper'), elementHelper = require('bpmn-js-properties-panel/lib/helper/ElementHelper'), eventDefinitionHelper = require('bpmn-js-properties-panel/lib/helper/EventDefinitionHelper'), script = require('bpmn-js-properties-panel/lib/provider/camunda/parts/implementation/Script')('language', 'body', true); module.exports = function(group, element, bpmnFactory, translate) { var bo = getBusinessObject(element); if (!bo) { return; } var conditionalEventDefinition = eventDefinitionHelper.getConditionalEventDefinition(element); if (!(is(element, 'bpmn:SequenceFlow') && isConditionalSource(element.source)) && !conditionalEventDefinition) { return; } group.entries.push({ id: 'condition', label: translate('Condition'), html: // '<div class="bpp-row">' + // '<label for="cam-condition-type">'+translate('Condition Type')+'</label>' + // '<div class="bpp-field-wrapper">' + // '<select id="cam-condition-type" name="conditionType" data-value>' + // '<option value="expression">'+translate('Expression')+'</option>' + // '<option value="script">'+translate('Script')+'</option>' + // '<option value="" selected></option>' + // '</select>' + // '</div>' + // '</div>' + // expression '<div class="bpp-row">' + '<label for="cam-condition" data-show="isExpression">'+translate('Expression')+'</label>' + '<div class="bpp-field-wrapper" data-show="isExpression">' + '<input id="cam-condition" type="text" name="condition" />' + '<button class="clear" data-action="clear" data-show="canClear">' + '<span>X</span>' + '</button>' + '</div>' + '<div data-show="isScript">' + script.template + '</div>' + '</div>', get: function(element, propertyName) { var conditionalEventDefinition = eventDefinitionHelper.getConditionalEventDefinition(element); var conditionExpression = conditionalEventDefinition ? conditionalEventDefinition.condition : bo.conditionExpression; var values = {}, conditionType = ''; if (conditionExpression) { var conditionLanguage = conditionExpression.language; if (typeof conditionLanguage !== 'undefined') { conditionType = 'script'; values = script.get(element, conditionExpression); } else { conditionType = 'expression'; values.condition = conditionExpression.get('body'); } } values.conditionType = conditionType; return values; }, set: function(element, values, containerElement) { var conditionType = 'script'; var commands = []; var conditionProps = { body: undefined }; // if (conditionType === 'script') { //conditionProps = script.set(element, values, containerElement); // } else { var condition = values.condition; // conditionProps.body = condition; // } var conditionOrConditionExpression; if (conditionType) { conditionOrConditionExpression = elementHelper.createElement( 'bpmn:FormalExpression', conditionProps, conditionalEventDefinition || bo, bpmnFactory ); var source = element.source; // if default-flow, remove default-property from source if (source && source.businessObject.default === bo) { commands.push(cmdHelper.updateProperties(source, { 'default': undefined })); } } var update = conditionalEventDefinition ? { condition: conditionOrConditionExpression } : { conditionExpression: conditionOrConditionExpression }; commands.push(cmdHelper.updateBusinessObject(element, conditionalEventDefinition || bo, update)); return commands; }, validate: function(element, values) { var validationResult = {}; if (!values.condition && values.conditionType === 'expression') { validationResult.condition = 'Must provide a value'; } else if (values.conditionType === 'script') { validationResult = script.validate(element, values); } return validationResult; }, isExpression: function(element, inputNode) { // var conditionType = domQuery('select[name=conditionType]', inputNode); // if (conditionType.selectedIndex >= 0) { // return conditionType.options[conditionType.selectedIndex].value === 'expression'; // } return true; }, isScript: function(element, inputNode) { // var conditionType = domQuery('select[name=conditionType]', inputNode); // if (conditionType.selectedIndex >= 0) { // return conditionType.options[conditionType.selectedIndex].value === 'script'; // } return false; }, clear: function(element, inputNode) { // clear text input domQuery('input[name=condition]', inputNode).value=''; return true; }, canClear: function(element, inputNode) { var input = domQuery('input[name=condition]', inputNode); return input.value !== ''; }, script : script, cssClasses: [ 'bpp-textfield' ] }); }; // utilities ////////////////////////// var CONDITIONAL_SOURCES = [ 'bpmn:Activity', 'bpmn:ExclusiveGateway', 'bpmn:InclusiveGateway', 'bpmn:ComplexGateway' ]; function isConditionalSource(element) { return isAny(element, CONDITIONAL_SOURCES); }