Projekt

Obecné

Profil

Stáhnout (3.67 KB) Statistiky
| Větev: | Tag: | Revize:
1 1e2b2c27 Tomáš Šimandl
/**
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
}