Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 00a234fc

Přidáno uživatelem Pavel Fidranský před více než 6 roky(ů)

excluded Group related archetypes highlighting

Zobrazit rozdíly:

sources/src/main/webapp/js/components/floatingPoint.js
92 92
		if (node instanceof Vertex) {
93 93
			var edgeOffsetY = 10;
94 94
		} else if (node instanceof Group) {
95
			var edgeOffsetY = 40;
95
			var edgeOffsetY = 35;
96 96
		} else {
97 97
			var edgeOffsetY = 0;
98 98
		}
sources/src/main/webapp/js/components/group.js
67 67
			}
68 68
		}, this);
69 69

  
70
		var vertexRelatedArchetypeMap = vertex.getRelatedArchetypeMap();
71
		for (var archetypeIndex in vertexRelatedArchetypeMap) {
72
			if (!relatedArchetypeMap.hasOwnProperty(archetypeIndex)) {
73
				relatedArchetypeMap[archetypeIndex] = 0;
74
			}
75
	
76
			relatedArchetypeMap[archetypeIndex] += vertexRelatedArchetypeMap[archetypeIndex];
77
		}
78

  
70 79
		app.viewportComponent.removeVertex(vertex);
71 80

  
72 81
		if (rootElement) {
......
95 104
			edge.moveStart(this.getCenter());
96 105
		}, vertex);
97 106

  
107
		var vertexRelatedArchetypeMap = vertex.getRelatedArchetypeMap();
108
		for (var archetypeIndex in vertexRelatedArchetypeMap) {
109
			relatedArchetypeMap[archetypeIndex] -= vertexRelatedArchetypeMap[archetypeIndex];
110
		}
111

  
98 112
		app.viewportComponent.addVertex(vertex);
99 113

  
100 114
		if (rootElement) {
......
570 584
		var svg = app.utils.createSvgElement('svg', {
571 585
			'xmlns': 'http://www.w3.org/2000/svg',
572 586
			'height': 60,
573
			'width': 40,
587
			'width': 46,
574 588
		});
575 589
		rootElement.appendChild(svg);
576 590

  
577
		var group = app.utils.createSvgElement('g', {
578
			'transform': 'translate(60,10)',
591
		// related archetypes
592
		var relatedArchetypesGroup = app.dom.createSvgElement('g', {
593
			'transform': 'translate(10, 15)',
579 594
		});
580
		svg.appendChild(group);
581

  
582
		/*
583
		// required
584
		var required = app.utils.createSvgElement('g', {
585
			'class': 'required-counter',
586
		});
587
		required.addEventListener('click', requiredClick.bind(this));
588
		group.appendChild(required);
589

  
590
		required.appendChild(app.utils.createSvgElement('line', {
591
			'x1': -60,
592
			'y1': 5,
593
			'x2': -50,
594
			'y2': 5,
595
			'stroke': 'black',
596
			'class': 'outer-floater',
597
		}));
598
		required.appendChild(app.utils.createSvgElement('line', {
599
			'x1': -30,
600
			'y1': 5,
601
			'x2': -20,
602
			'y2': 5,
603
			'stroke': 'black',
604
		}));
605
		required.appendChild(app.utils.createSvgElement('path', {
606
			'class': 'lollipop',
607
			'd': 'M-42,-5 C-27,-5 -27,15 -42,15',
608
		}));
595
		svg.appendChild(relatedArchetypesGroup);
609 596

  
610
		var requiredCounterText = app.utils.createSvgElement('text', {
611
			'x': -45,
612
			'y': 10,
613
		});
614
		requiredCounterText.appendChild(document.createTextNode(requiredCounter));
615
		required.appendChild(requiredCounterText);
597
		var archetypeIconOrder = 0;
598
		for (var archetypeIndex in relatedArchetypeMap) {
599
			var relatedArchetype = app.dom.createSvgElement('g', {
600
				'class': 'related-archetype',
601
				'transform': `translate(0, ${archetypeIconOrder * 20})`,
602
			});
603
			relatedArchetypesGroup.appendChild(relatedArchetype);
616 604

  
617
		// provided
618
		var provided = app.utils.createSvgElement('g', {
619
			'class': 'provided-counter',
620
		});
621
		provided.addEventListener('click', providedClick.bind(this));
622
		group.appendChild(provided);
623

  
624
		provided.appendChild(app.utils.createSvgElement('line', {
625
			'x1': -60,
626
			'y1': 35,
627
			'x2': -50,
628
			'y2': 35,
629
			'stroke': 'black',
630
			'class': 'outer-floater',
631
		}));
632
		provided.appendChild(app.utils.createSvgElement('line', {
633
			'x1': -30,
634
			'y1': 35,
635
			'x2': -20,
636
			'y2': 35,
637
			'stroke': 'black',
638
		}));
639
		provided.appendChild(app.utils.createSvgElement('circle', {
640
			'class': 'lollipop',
641
			'cx': -42,
642
			'cy': 35,
643
			'r': 11,
644
		}));
605
			// counter
606
			var relatedArchetypeCounter = app.dom.createSvgElement('text', {});
607
			relatedArchetypeCounter.appendChild(app.dom.createTextElement(relatedArchetypeMap[archetypeIndex]));
608
			relatedArchetype.appendChild(relatedArchetypeCounter);
645 609

  
646
		var providedCounterText = app.utils.createSvgElement('text', {
647
			'x': -45,
648
			'y': 40,
649
		});
650
		providedCounterText.appendChild(document.createTextNode(providedCounter));
651
		provided.appendChild(providedCounterText);
652
		*/
610
			// icon
611
			var relatedArchetypeIcon = app.dom.createSvgElement('g', {
612
				'class': 'archetype-icon',
613
				'transform': `translate(15, -10)`,
614
			});
615
			relatedArchetypeIcon.addEventListener('click', relatedArchetypeClick.bind(this, parseInt(archetypeIndex)));
616
			relatedArchetypeIcon.innerHTML = app.archetype.icon[app.archetype.vertex[archetypeIndex].name];
617
			relatedArchetype.appendChild(relatedArchetypeIcon);
618

  
619
			// line
620
			relatedArchetype.appendChild(app.dom.createSvgElement('line', {
621
				'x1': 30,
622
				'y1': -5,
623
				'x2': 36,
624
				'y2': -5,
625
			}));
626

  
627
			archetypeIconOrder++;
628
		}
653 629

  
654 630
		// symbol
655 631
		var symbolText = app.utils.createHtmlElement('span', {
......
812 788
		app.viewportComponent.removeGroup(this);
813 789
	}
814 790
	
791
	/**
792
	 * Archetype icon click interaction. Toggles highlighting of neighbour vertices which are instances of a vertex archetype.
793
	 * @param {integer} archetypeIndex Index of the vertex archetype.
794
	 * @param {MouseEvent} e Click event.
795
	 */
796
	function relatedArchetypeClick(archetypeIndex, e) {
797
		e.stopPropagation();
798

  
799
		this.setHighlighted(!highlighted);
800
		this.setHighlightedArchetypeNeighbours(highlighted);
801

  
802
		prepareHighlighting.call(this);
803
		highlightArchetypeNeighbours.call(this, archetypeIndex);
804
	}
805
	
815 806
	/**
816 807
	 * Handles drag and drop interaction with the group. At the moment mouse button is pressed, it is not yet known whether 
817 808
	 * it is just clicked or dragged.
......
957 948
	 */
958 949
	function highlightArchetypeNeighbours(archetypeIndex) {
959 950
		if (highlightedArchetypeNeighbours === false) return;
951

  
952
		this.getInEdgeList().filter(function(edge) {
953
			return edge.getFrom().archetype === archetypeIndex;
954
		}).forEach(function(edge) {
955
			edge.setHidden(false);
956

  
957
			edge.setDimmed(false);
958
			edge.getFrom().setDimmed(false);
959

  
960
			edge.getFrom().setHighlightedArchetype(true);
961
		});
962

  
963
		this.getOutEdgeList().filter(function(edge) {
964
			return edge.getTo().archetype === archetypeIndex;
965
		}).forEach(function(edge) {
966
			edge.setHidden(false);
967

  
968
			edge.setDimmed(false);
969
			edge.getTo().setDimmed(false);
970

  
971
			edge.getTo().setHighlightedArchetype(true);
972
		});
960 973
	}
961 974
}

Také k dispozici: Unified diff