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.
 
 
 
 
 
 

206 lines
5.7 KiB

function _dmnGetColor(element, defaultColor)
{
var strokeColor;
if (element.current) {
strokeColor = CURRENT_COLOR;
} else if (element.completed) {
strokeColor = COMPLETED_COLOR;
} else if (element.available) {
strokeColor = AVAILABLE_COLOR;
} else {
strokeColor = defaultColor;
}
return strokeColor;
}
function _drawDecisionService(element)
{
var rectAttrs = {};
// Stroke
var strokeColor = _dmnGetColor(element, ACTIVITY_STROKE_COLOR);
rectAttrs['stroke'] = strokeColor;
var strokeWidth = DECISION_SERVICE_STROKE;
var width = element.width - (strokeWidth / 2);
var height = element.height - (strokeWidth / 2);
var rect = paper.rect(element.x, element.y, width, height, 16);
rectAttrs['stroke-width'] = strokeWidth;
// Fill
rectAttrs['fill'] = WHITE_FILL_COLOR;
rect.attr(rectAttrs);
rect.id = element.id;
var dividerElement = element.divider;
var divider = new Polyline("divider_" + element.id, dividerElement.waypoints, ACTIVITY_STROKE_COLOR, paper);
divider.element = paper.path(divider.path);
divider.element.attr({"stroke-width": ASSOCIATION_STROKE});
divider.element.attr({"stroke":"#bbbbbb"});
divider.element.id = "divider_" + element.id;
if (element.name) {
this._drawMultilineText(element.name, element.x + 10, element.y + 5, element.width, element.height, "start", "top", 11);
}
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
}
function _drawDecision(element)
{
var rectAttrs = {};
// Stroke
var strokeColor = _dmnGetColor(element, ACTIVITY_STROKE_COLOR);
rectAttrs['stroke'] = strokeColor;
var strokeWidth;
if (strokeColor === ACTIVITY_STROKE_COLOR) {
strokeWidth = TASK_STROKE;
} else {
strokeWidth = TASK_HIGHLIGHT_STROKE;
}
var width = element.width - (strokeWidth / 2);
var height = element.height - (strokeWidth / 2);
var rect = paper.rect(element.x, element.y, width, height, 4);
rectAttrs['stroke-width'] = strokeWidth;
// Fill
rectAttrs['fill'] = ACTIVITY_FILL_COLOR;
rect.attr(rectAttrs);
rect.id = element.id;
if (element.name) {
this._drawMultilineText(element.name, element.x, element.y, element.width, element.height, "middle", "middle", 11);
}
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
}
function _drawInformationRequirement(flow){
var polyline = new Polyline(flow.id, flow.waypoints, ASSOCIATION_STROKE, paper);
var strokeColor = _dmnGetColor(flow, MAIN_STROKE_COLOR);
polyline.element = paper.path(polyline.path);
polyline.element.attr({"stroke-width": ASSOCIATION_STROKE});
polyline.element.attr({"stroke":strokeColor});
polyline.element.id = flow.id;
var lastLineIndex = polyline.getLinesCount() - 1;
var line = polyline.getLine(lastLineIndex);
var polylineInvisible = new Polyline(flow.id, flow.waypoints, ASSOCIATION_STROKE, paper);
polylineInvisible.element = paper.path(polyline.path);
polylineInvisible.element.attr({
"opacity": 0,
"stroke-width": 8,
"stroke" : "#000000"
});
_showTip(jQuery(polylineInvisible.element.node), flow);
polylineInvisible.element.mouseover(function() {
paper.getById(polyline.element.id).attr({"stroke":HOVER_COLOR});
});
polylineInvisible.element.mouseout(function() {
paper.getById(polyline.element.id).attr({"stroke":strokeColor});
});
_drawArrowHead(line, strokeColor, paper);
}
function _drawMultilineText(text, x, y, boxWidth, boxHeight, horizontalAnchor, verticalAnchor, fontSize)
{
if (!text || text == "")
{
return;
}
var textBoxX, textBoxY;
var width = boxWidth - (2 * TEXT_PADDING);
if (horizontalAnchor === "middle")
{
textBoxX = x + (boxWidth / 2);
}
else if (horizontalAnchor === "start")
{
textBoxX = x;
}
textBoxY = y + (boxHeight / 2);
var t = paper.text(textBoxX + TEXT_PADDING, textBoxY + TEXT_PADDING).attr({
"text-anchor" : horizontalAnchor,
"font-family" : "Arial",
"font-size" : fontSize,
"fill" : "#373e48"
});
var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
t.attr({
"text" : abc
});
var letterWidth = t.getBBox().width / abc.length;
t.attr({
"text" : text
});
var removedLineBreaks = text.split("\n");
var x = 0, s = [];
for (var r = 0; r < removedLineBreaks.length; r++)
{
var words = removedLineBreaks[r].split(" ");
for ( var i = 0; i < words.length; i++) {
var l = words[i].length;
if (x + (l * letterWidth) > width) {
s.push("\n");
x = 0;
}
x += l * letterWidth;
s.push(words[i] + " ");
}
s.push("\n");
x = 0;
}
t.attr({
"text" : s.join("")
});
if (verticalAnchor && verticalAnchor === "top")
{
t.attr({"y": y + (t.getBBox().height / 2)});
}
}
function _drawArrowHead(line, connectionType)
{
var doubleArrowWidth = 2 * ARROW_WIDTH;
var arrowHead = paper.path("M0 0L-" + (ARROW_WIDTH / 2 + .5) + " -" + doubleArrowWidth + "L" + (ARROW_WIDTH/2 + .5) + " -" + doubleArrowWidth + "z");
// anti smoothing
if (this.strokeWidth%2 == 1)
line.x2 += .5, line.y2 += .5;
arrowHead.transform("t" + line.x2 + "," + line.y2 + "");
arrowHead.transform("...r" + Raphael.deg(line.angle - Math.PI / 2) + " " + 0 + " " + 0);
arrowHead.attr("fill", "#585858");
arrowHead.attr("stroke-width", ASSOCIATION_STROKE);
arrowHead.attr("stroke", "#585858");
return arrowHead;
}