Projekt

Obecné

Profil

Stáhnout (3.67 KB) Statistiky
| Větev: | Tag: | Revize:
1
/**
2
 * Class representing a popover revealed on vertex interface symbol click to display its required and provided interfaces.
3
 * @see Vertex
4
 * @constructor
5
 */
6
function VertexPopover() {
7
	var rootElement;
8
	var popoverTitle;
9
	var exportedPackagesContainer;
10
	var exportedPackagesListElement;
11
	var importedPackagesContainer;
12
	var importedPackagesListElement;
13

    
14
	/**
15
	 * Sets the contents of the popover.
16
	 * @param {string} name Title of the popover.
17
	 * @param {array} exportedPackages List of exported interfaces.
18
	 * @param {array} importedPackages List of provided interfaces.
19
	 */
20
	this.setContent = function(name, exportedPackages, importedPackages) {
21
		popoverTitle.innerText = name;
22

    
23
		if (exportedPackages.length === 0) {
24
			exportedPackagesContainer.classList.add('hidden');
25
		} else {
26
			exportedPackagesContainer.classList.remove('hidden');
27

    
28
			exportedPackages.forEach(function(pakkage) {
29
				var listItem = app.utils.createHtmlElement('li', {});
30
				listItem.appendChild(document.createTextNode(pakkage));
31

    
32
				exportedPackagesListElement.appendChild(listItem);
33
			});
34
		}
35

    
36
		if (importedPackages.length === 0) {
37
			importedPackagesContainer.classList.add('hidden');
38
		} else {
39
			importedPackagesContainer.classList.remove('hidden');
40

    
41
			importedPackages.forEach(function(pakkage) {
42
				var listItem = app.utils.createHtmlElement('li', {});
43
				listItem.appendChild(document.createTextNode(pakkage));
44

    
45
				importedPackagesListElement.appendChild(listItem);
46
			});
47
		}
48
	};
49

    
50
	/**
51
	 * Moves the popover to the coordinates.
52
	 * @param {Coordinates} coords Coordinates to display the popover at.
53
	 */
54
	this.setPosition = function(coords) {
55
		rootElement.style.top = coords.y + 'px';
56
		rootElement.style.left = coords.x + 'px';
57
	};
58

    
59
	/**
60
	 * Opens the popover.
61
	 */
62
	this.open = function() {
63
		rootElement.classList.remove('hidden');
64
	};
65

    
66
	/**
67
	 * Closes the popover.
68
	 */
69
	this.close = function() {
70
		rootElement.classList.add('hidden');
71

    
72
		exportedPackagesListElement.innerHTML = '';
73
		importedPackagesListElement.innerHTML = '';
74
	};
75

    
76
	/**
77
	 * Creates a new DOM element representing the popover in memory. Binds user interactions to local handler functions.
78
	 * @returns {Element} HTML DOM element.
79
	 */
80
	this.render = function() {
81
		rootElement = app.utils.createHtmlElement('div', {
82
			'class': 'popover vertex-popover hidden',
83
		});
84
		rootElement.addEventListener('wheel', stopPropagation.bind(this));
85
		rootElement.addEventListener('mousedown', stopPropagation.bind(this));
86
		rootElement.addEventListener('mouseleave', this.close.bind(this));
87

    
88
		popoverTitle = app.utils.createHtmlElement('span', {
89
			'class': 'popover-title',
90
		});
91
		rootElement.appendChild(popoverTitle);
92

    
93
		var popoverContent = app.utils.createHtmlElement('div', {
94
			'class': 'popover-content',
95
		});
96
		rootElement.appendChild(popoverContent);
97

    
98
		exportedPackagesContainer = app.utils.createHtmlElement('div', {});
99
		exportedPackagesContainer.appendChild(document.createTextNode('Exported packages'));
100
		popoverContent.appendChild(exportedPackagesContainer);
101

    
102
		exportedPackagesListElement = app.utils.createHtmlElement('ul', {});
103
		exportedPackagesContainer.appendChild(exportedPackagesListElement);
104

    
105
		importedPackagesContainer = app.utils.createHtmlElement('div', {});
106
		importedPackagesContainer.appendChild(document.createTextNode('Imported packages'));
107
		popoverContent.appendChild(importedPackagesContainer);
108

    
109
		importedPackagesListElement = app.utils.createHtmlElement('ul', {});
110
		importedPackagesContainer.appendChild(importedPackagesListElement);
111

    
112
		return rootElement;
113
	};
114

    
115
	/**
116
	 * Stops propagation of the event which triggered this function to its parental elements.
117
	 * @param {Event} e The event.
118
	 */
119
	function stopPropagation(e) {
120
		e.stopPropagation();
121
	}
122
}
(18-18/20)