电子档案
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

  1. function _dmnGetColor(element, defaultColor)
  2. {
  3. var strokeColor;
  4. if (element.current) {
  5. strokeColor = CURRENT_COLOR;
  6. } else if (element.completed) {
  7. strokeColor = COMPLETED_COLOR;
  8. } else if (element.available) {
  9. strokeColor = AVAILABLE_COLOR;
  10. } else {
  11. strokeColor = defaultColor;
  12. }
  13. return strokeColor;
  14. }
  15. function _drawDecisionService(element)
  16. {
  17. var rectAttrs = {};
  18. // Stroke
  19. var strokeColor = _dmnGetColor(element, ACTIVITY_STROKE_COLOR);
  20. rectAttrs['stroke'] = strokeColor;
  21. var strokeWidth = DECISION_SERVICE_STROKE;
  22. var width = element.width - (strokeWidth / 2);
  23. var height = element.height - (strokeWidth / 2);
  24. var rect = paper.rect(element.x, element.y, width, height, 16);
  25. rectAttrs['stroke-width'] = strokeWidth;
  26. // Fill
  27. rectAttrs['fill'] = WHITE_FILL_COLOR;
  28. rect.attr(rectAttrs);
  29. rect.id = element.id;
  30. var dividerElement = element.divider;
  31. var divider = new Polyline("divider_" + element.id, dividerElement.waypoints, ACTIVITY_STROKE_COLOR, paper);
  32. divider.element = paper.path(divider.path);
  33. divider.element.attr({"stroke-width": ASSOCIATION_STROKE});
  34. divider.element.attr({"stroke":"#bbbbbb"});
  35. divider.element.id = "divider_" + element.id;
  36. if (element.name) {
  37. this._drawMultilineText(element.name, element.x + 10, element.y + 5, element.width, element.height, "start", "top", 11);
  38. }
  39. _addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
  40. }
  41. function _drawDecision(element)
  42. {
  43. var rectAttrs = {};
  44. // Stroke
  45. var strokeColor = _dmnGetColor(element, ACTIVITY_STROKE_COLOR);
  46. rectAttrs['stroke'] = strokeColor;
  47. var strokeWidth;
  48. if (strokeColor === ACTIVITY_STROKE_COLOR) {
  49. strokeWidth = TASK_STROKE;
  50. } else {
  51. strokeWidth = TASK_HIGHLIGHT_STROKE;
  52. }
  53. var width = element.width - (strokeWidth / 2);
  54. var height = element.height - (strokeWidth / 2);
  55. var rect = paper.rect(element.x, element.y, width, height, 4);
  56. rectAttrs['stroke-width'] = strokeWidth;
  57. // Fill
  58. rectAttrs['fill'] = ACTIVITY_FILL_COLOR;
  59. rect.attr(rectAttrs);
  60. rect.id = element.id;
  61. if (element.name) {
  62. this._drawMultilineText(element.name, element.x, element.y, element.width, element.height, "middle", "middle", 11);
  63. }
  64. _addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
  65. }
  66. function _drawInformationRequirement(flow){
  67. var polyline = new Polyline(flow.id, flow.waypoints, ASSOCIATION_STROKE, paper);
  68. var strokeColor = _dmnGetColor(flow, MAIN_STROKE_COLOR);
  69. polyline.element = paper.path(polyline.path);
  70. polyline.element.attr({"stroke-width": ASSOCIATION_STROKE});
  71. polyline.element.attr({"stroke":strokeColor});
  72. polyline.element.id = flow.id;
  73. var lastLineIndex = polyline.getLinesCount() - 1;
  74. var line = polyline.getLine(lastLineIndex);
  75. var polylineInvisible = new Polyline(flow.id, flow.waypoints, ASSOCIATION_STROKE, paper);
  76. polylineInvisible.element = paper.path(polyline.path);
  77. polylineInvisible.element.attr({
  78. "opacity": 0,
  79. "stroke-width": 8,
  80. "stroke" : "#000000"
  81. });
  82. _showTip(jQuery(polylineInvisible.element.node), flow);
  83. polylineInvisible.element.mouseover(function() {
  84. paper.getById(polyline.element.id).attr({"stroke":HOVER_COLOR});
  85. });
  86. polylineInvisible.element.mouseout(function() {
  87. paper.getById(polyline.element.id).attr({"stroke":strokeColor});
  88. });
  89. _drawArrowHead(line, strokeColor, paper);
  90. }
  91. function _drawMultilineText(text, x, y, boxWidth, boxHeight, horizontalAnchor, verticalAnchor, fontSize)
  92. {
  93. if (!text || text == "")
  94. {
  95. return;
  96. }
  97. var textBoxX, textBoxY;
  98. var width = boxWidth - (2 * TEXT_PADDING);
  99. if (horizontalAnchor === "middle")
  100. {
  101. textBoxX = x + (boxWidth / 2);
  102. }
  103. else if (horizontalAnchor === "start")
  104. {
  105. textBoxX = x;
  106. }
  107. textBoxY = y + (boxHeight / 2);
  108. var t = paper.text(textBoxX + TEXT_PADDING, textBoxY + TEXT_PADDING).attr({
  109. "text-anchor" : horizontalAnchor,
  110. "font-family" : "Arial",
  111. "font-size" : fontSize,
  112. "fill" : "#373e48"
  113. });
  114. var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  115. t.attr({
  116. "text" : abc
  117. });
  118. var letterWidth = t.getBBox().width / abc.length;
  119. t.attr({
  120. "text" : text
  121. });
  122. var removedLineBreaks = text.split("\n");
  123. var x = 0, s = [];
  124. for (var r = 0; r < removedLineBreaks.length; r++)
  125. {
  126. var words = removedLineBreaks[r].split(" ");
  127. for ( var i = 0; i < words.length; i++) {
  128. var l = words[i].length;
  129. if (x + (l * letterWidth) > width) {
  130. s.push("\n");
  131. x = 0;
  132. }
  133. x += l * letterWidth;
  134. s.push(words[i] + " ");
  135. }
  136. s.push("\n");
  137. x = 0;
  138. }
  139. t.attr({
  140. "text" : s.join("")
  141. });
  142. if (verticalAnchor && verticalAnchor === "top")
  143. {
  144. t.attr({"y": y + (t.getBBox().height / 2)});
  145. }
  146. }
  147. function _drawArrowHead(line, connectionType)
  148. {
  149. var doubleArrowWidth = 2 * ARROW_WIDTH;
  150. var arrowHead = paper.path("M0 0L-" + (ARROW_WIDTH / 2 + .5) + " -" + doubleArrowWidth + "L" + (ARROW_WIDTH/2 + .5) + " -" + doubleArrowWidth + "z");
  151. // anti smoothing
  152. if (this.strokeWidth%2 == 1)
  153. line.x2 += .5, line.y2 += .5;
  154. arrowHead.transform("t" + line.x2 + "," + line.y2 + "");
  155. arrowHead.transform("...r" + Raphael.deg(line.angle - Math.PI / 2) + " " + 0 + " " + 0);
  156. arrowHead.attr("fill", "#585858");
  157. arrowHead.attr("stroke-width", ASSOCIATION_STROKE);
  158. arrowHead.attr("stroke", "#585858");
  159. return arrowHead;
  160. }