You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.8 KiB
157 lines
3.8 KiB
import { |
|
every, |
|
some |
|
} from 'min-dash'; |
|
|
|
import { |
|
getDi |
|
} from '../util/ModelUtil'; |
|
|
|
import { |
|
componentsToPath |
|
} from 'diagram-js/lib/util/RenderUtil'; |
|
|
|
// re-export getDi for compatibility |
|
export { getDi }; |
|
|
|
export var black = 'hsl(225, 10%, 15%)'; |
|
|
|
// element utils ////////////////////// |
|
|
|
/** |
|
* Checks if eventDefinition of the given element matches with semantic type. |
|
* |
|
* @return {boolean} true if element is of the given semantic type |
|
*/ |
|
export function isTypedEvent(event, eventDefinitionType, filter) { |
|
|
|
function matches(definition, filter) { |
|
return every(filter, function(val, key) { |
|
|
|
// we want a == conversion here, to be able to catch |
|
// undefined == false and friends |
|
/* jshint -W116 */ |
|
return definition[key] == val; |
|
}); |
|
} |
|
|
|
return some(event.eventDefinitions, function(definition) { |
|
return definition.$type === eventDefinitionType && matches(event, filter); |
|
}); |
|
} |
|
|
|
export function isThrowEvent(event) { |
|
return (event.$type === 'bpmn:IntermediateThrowEvent') || (event.$type === 'bpmn:EndEvent'); |
|
} |
|
|
|
export function isCollection(element) { |
|
var dataObject = element.dataObjectRef; |
|
|
|
return element.isCollection || (dataObject && dataObject.isCollection); |
|
} |
|
|
|
export function getSemantic(element) { |
|
return element.businessObject; |
|
} |
|
|
|
|
|
// color access ////////////////////// |
|
|
|
export function getFillColor(element, defaultColor) { |
|
var di = getDi(element); |
|
|
|
return di.get('color:background-color') || di.get('bioc:fill') || defaultColor || 'white'; |
|
} |
|
|
|
export function getStrokeColor(element, defaultColor) { |
|
var di = getDi(element); |
|
|
|
return di.get('color:border-color') || di.get('bioc:stroke') || defaultColor || black; |
|
} |
|
|
|
export function getLabelColor(element, defaultColor, defaultStrokeColor) { |
|
var di = getDi(element), |
|
label = di.get('label'); |
|
|
|
return label && label.get('color:color') || defaultColor || |
|
getStrokeColor(element, defaultStrokeColor); |
|
} |
|
|
|
// cropping path customizations ////////////////////// |
|
|
|
export function getCirclePath(shape) { |
|
|
|
var cx = shape.x + shape.width / 2, |
|
cy = shape.y + shape.height / 2, |
|
radius = shape.width / 2; |
|
|
|
var circlePath = [ |
|
[ 'M', cx, cy ], |
|
[ 'm', 0, -radius ], |
|
[ 'a', radius, radius, 0, 1, 1, 0, 2 * radius ], |
|
[ 'a', radius, radius, 0, 1, 1, 0, -2 * radius ], |
|
[ 'z' ] |
|
]; |
|
|
|
return componentsToPath(circlePath); |
|
} |
|
|
|
export function getRoundRectPath(shape, borderRadius) { |
|
|
|
var x = shape.x, |
|
y = shape.y, |
|
width = shape.width, |
|
height = shape.height; |
|
|
|
var roundRectPath = [ |
|
[ 'M', x + borderRadius, y ], |
|
[ 'l', width - borderRadius * 2, 0 ], |
|
[ 'a', borderRadius, borderRadius, 0, 0, 1, borderRadius, borderRadius ], |
|
[ 'l', 0, height - borderRadius * 2 ], |
|
[ 'a', borderRadius, borderRadius, 0, 0, 1, -borderRadius, borderRadius ], |
|
[ 'l', borderRadius * 2 - width, 0 ], |
|
[ 'a', borderRadius, borderRadius, 0, 0, 1, -borderRadius, -borderRadius ], |
|
[ 'l', 0, borderRadius * 2 - height ], |
|
[ 'a', borderRadius, borderRadius, 0, 0, 1, borderRadius, -borderRadius ], |
|
[ 'z' ] |
|
]; |
|
|
|
return componentsToPath(roundRectPath); |
|
} |
|
|
|
export function getDiamondPath(shape) { |
|
|
|
var width = shape.width, |
|
height = shape.height, |
|
x = shape.x, |
|
y = shape.y, |
|
halfWidth = width / 2, |
|
halfHeight = height / 2; |
|
|
|
var diamondPath = [ |
|
[ 'M', x + halfWidth, y ], |
|
[ 'l', halfWidth, halfHeight ], |
|
[ 'l', -halfWidth, halfHeight ], |
|
[ 'l', -halfWidth, -halfHeight ], |
|
[ 'z' ] |
|
]; |
|
|
|
return componentsToPath(diamondPath); |
|
} |
|
|
|
export function getRectPath(shape) { |
|
var x = shape.x, |
|
y = shape.y, |
|
width = shape.width, |
|
height = shape.height; |
|
|
|
var rectPath = [ |
|
[ 'M', x, y ], |
|
[ 'l', width, 0 ], |
|
[ 'l', 0, height ], |
|
[ 'l', -width, 0 ], |
|
[ 'z' ] |
|
]; |
|
|
|
return componentsToPath(rectPath); |
|
} |