Revize 70453f8a
Přidáno uživatelem Pavel Fidranský před více než 6 roky(ů)
sources/src/main/webapp/css/main.css | ||
---|---|---|
584 | 584 |
display: inline-block; |
585 | 585 |
} |
586 | 586 |
|
587 |
.sidebar .node .required-counter, |
|
588 |
.sidebar .node .provided-counter { |
|
589 |
fill: white; |
|
590 |
stroke: #000; |
|
591 |
stroke-width: 1; |
|
592 |
} |
|
593 |
|
|
594 |
.sidebar .node .required-counter > text, |
|
595 |
.sidebar .node .provided-counter > text { |
|
596 |
fill: #000; |
|
597 |
stroke-width: 0; |
|
587 |
.sidebar .node .related-archetype > text { |
|
588 |
font-size: 0.8em; |
|
598 | 589 |
} |
599 | 590 |
|
600 |
.sidebar .node--highlighted-required-neighbours .required-counter .lollipop {
|
|
601 |
fill: red;
|
|
591 |
.sidebar .node .related-archetype > g {
|
|
592 |
dominant-baseline: central;
|
|
602 | 593 |
} |
603 | 594 |
|
604 |
.sidebar .node--highlighted-provided-neighbours .provided-counter .lollipop {
|
|
605 |
fill: #5896ff;
|
|
595 |
.sidebar .node .related-archetype > line {
|
|
596 |
stroke: #000;
|
|
606 | 597 |
} |
607 | 598 |
|
608 | 599 |
.sidebar .group { |
sources/src/main/webapp/js/components/floatingPoint.js | ||
---|---|---|
90 | 90 |
position.y = (bbox.top - viewportPosition.y - app.headerHeight); |
91 | 91 |
|
92 | 92 |
if (node instanceof Vertex) { |
93 |
var inEdgeOffsetY = 15; |
|
94 |
var outEdgeOffsetY = 45; |
|
93 |
var edgeOffsetY = 10; |
|
95 | 94 |
} else if (node instanceof Group) { |
96 |
var inEdgeOffsetY = 40; |
|
97 |
var outEdgeOffsetY = 70; |
|
95 |
var edgeOffsetY = 40; |
|
96 |
} else { |
|
97 |
var edgeOffsetY = 0; |
|
98 | 98 |
} |
99 | 99 |
|
100 |
var archetypeList = Object.keys(node.getRelatedArchetypeMap()).map(function(archetypeIndex) { |
|
101 |
return parseInt(archetypeIndex); |
|
102 |
}); |
|
103 |
var archetypeIconOrder; |
|
104 |
|
|
100 | 105 |
// redraw dependent edges |
101 | 106 |
inEdgeList.forEach(function(edge) { |
107 |
archetypeIconOrder = archetypeList.indexOf(edge.getFrom().archetype); |
|
108 |
|
|
102 | 109 |
edge.moveEnd(new Coordinates( |
103 | 110 |
position.x / app.zoom.scale, |
104 |
(position.y + inEdgeOffsetY) / app.zoom.scale,
|
|
111 |
(position.y + edgeOffsetY + archetypeIconOrder * 20) / app.zoom.scale,
|
|
105 | 112 |
)); |
106 | 113 |
}, this); |
107 | 114 |
|
108 | 115 |
outEdgeList.forEach(function(edge) { |
116 |
archetypeIconOrder = archetypeList.indexOf(edge.getTo().archetype); |
|
117 |
|
|
109 | 118 |
edge.moveStart(new Coordinates( |
110 | 119 |
position.x / app.zoom.scale, |
111 |
(position.y + outEdgeOffsetY) / app.zoom.scale,
|
|
120 |
(position.y + edgeOffsetY + archetypeIconOrder * 20) / app.zoom.scale,
|
|
112 | 121 |
)); |
113 | 122 |
}, this); |
114 | 123 |
}; |
sources/src/main/webapp/js/components/group.js | ||
---|---|---|
32 | 32 |
var dimmed = false; |
33 | 33 |
|
34 | 34 |
var vertexList = []; |
35 |
var relatedArchetypeMap = {}; |
|
35 | 36 |
|
36 | 37 |
/** |
37 | 38 |
* Adds a new vertex to the group. The vertex is set as excluded and its DOM element is removed from document. Its edges are moved so that they end at the group. |
... | ... | |
151 | 152 |
return [].concat(this.getInEdgeList(), this.getOutEdgeList()); |
152 | 153 |
}; |
153 | 154 |
|
155 |
/** |
|
156 |
* @returns {object} Map with archetype indexes as keys and counters of their instances as values. |
|
157 |
*/ |
|
158 |
this.getRelatedArchetypeMap = function() { |
|
159 |
return relatedArchetypeMap; |
|
160 |
}; |
|
161 |
|
|
154 | 162 |
/** |
155 | 163 |
* @returns {Coordinates} Current position of the group in graph. |
156 | 164 |
*/ |
sources/src/main/webapp/js/components/vertex.js | ||
---|---|---|
506 | 506 |
}); |
507 | 507 |
rootElement.appendChild(relatedArchetypeListContainer); |
508 | 508 |
|
509 |
var i = 0;
|
|
509 |
var archetypeIconOrder = 0;
|
|
510 | 510 |
for (var archetypeIndex in relatedArchetypeMap) { |
511 | 511 |
var relatedArchetype = app.utils.createSvgElement('g', { |
512 | 512 |
'class': 'related-archetype', |
513 |
'transform': `translate(${i * relatedArchetypeIconWidth}, 8)`,
|
|
513 |
'transform': `translate(${archetypeIconOrder * relatedArchetypeIconWidth}, 8)`,
|
|
514 | 514 |
}); |
515 | 515 |
relatedArchetype.addEventListener('click', relatedArchetypeClick.bind(this, parseInt(archetypeIndex))); |
516 | 516 |
|
... | ... | |
518 | 518 |
|
519 | 519 |
relatedArchetypeListContainer.appendChild(relatedArchetype); |
520 | 520 |
|
521 |
i++;
|
|
521 |
archetypeIconOrder++;
|
|
522 | 522 |
} |
523 | 523 |
|
524 | 524 |
// symbol list |
... | ... | |
548 | 548 |
}); |
549 | 549 |
rootElement.appendChild(svg); |
550 | 550 |
|
551 |
var group = app.dom.createSvgElement('g', { |
|
552 |
'transform': 'translate(60,10)', |
|
551 |
// related archetypes |
|
552 |
var relatedArchetypesGroup = app.dom.createSvgElement('g', { |
|
553 |
'transform': 'translate(10, 15)', |
|
553 | 554 |
}); |
554 |
svg.appendChild(group);
|
|
555 |
svg.appendChild(relatedArchetypesGroup);
|
|
555 | 556 |
|
556 |
// related |
|
557 |
var i = 0; |
|
557 |
var archetypeIconOrder = 0; |
|
558 | 558 |
for (var archetypeIndex in relatedArchetypeMap) { |
559 | 559 |
var relatedArchetype = app.dom.createSvgElement('g', { |
560 | 560 |
'class': 'related-archetype', |
561 |
'transform': `translate(0, ${i * 20})`, |
|
562 |
}); |
|
563 |
relatedArchetype.addEventListener('click', relatedArchetypeClick.bind(this, parseInt(archetypeIndex))); |
|
564 |
|
|
565 |
relatedArchetype.innerHTML = app.archetype.icon[app.archetype.vertex[archetypeIndex].name]; |
|
561 |
'transform': `translate(0, ${archetypeIconOrder * 20})`, |
|
562 |
}); |
|
563 |
relatedArchetypesGroup.appendChild(relatedArchetype); |
|
566 | 564 |
|
567 |
group.appendChild(relatedArchetype); |
|
565 |
// counter |
|
566 |
var relatedArchetypeCounter = app.dom.createSvgElement('text', {}); |
|
567 |
relatedArchetypeCounter.appendChild(app.dom.createTextElement(relatedArchetypeMap[archetypeIndex])); |
|
568 |
relatedArchetype.appendChild(relatedArchetypeCounter); |
|
568 | 569 |
|
569 |
i++; |
|
570 |
// icon |
|
571 |
var relatedArchetypeIcon = app.dom.createSvgElement('g', { |
|
572 |
'transform': `translate(15, -10)`, |
|
573 |
}); |
|
574 |
relatedArchetypeIcon.addEventListener('click', relatedArchetypeClick.bind(this, parseInt(archetypeIndex))); |
|
575 |
relatedArchetypeIcon.innerHTML = app.archetype.icon[app.archetype.vertex[archetypeIndex].name]; |
|
576 |
relatedArchetype.appendChild(relatedArchetypeIcon); |
|
577 |
|
|
578 |
// line |
|
579 |
relatedArchetype.appendChild(app.dom.createSvgElement('line', { |
|
580 |
'x1': 30, |
|
581 |
'y1': -5, |
|
582 |
'x2': 36, |
|
583 |
'y2': -5, |
|
584 |
})); |
|
585 |
|
|
586 |
archetypeIconOrder++; |
|
570 | 587 |
} |
571 | 588 |
|
572 | 589 |
// name |
Také k dispozici: Unified diff
excluded Vertex related archetypes highlighting