Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 3817d6f3

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

reworked UploadFiles page to use extended App JS class

Zobrazit rozdíly:

sources/src/main/webapp/js/uploadFiles.js
1
document.addEventListener('DOMContentLoaded', function() {
2
	var privateDiagramList = document.getElementById('privateDiagramList');
3

  
4
	privateDiagramList.querySelectorAll('.remove-diagram-button').forEach(function(button) {
5
		button.addEventListener('click', removeDiagram);
6
	});
7

  
8
	document.addEventListener('imiger.userLoggedIn', function() {
9
		loadPrivateDiagrams();
10
	});
11

  
12
	document.addEventListener('imiger.userLoggedOut', function() {
13
		privateDiagramList.innerHTML = '';
14
	});
15

  
16
	async function loadPrivateDiagrams() {
17
		try {
18
			const data = await AJAX.getJSON(Constants.API.getPrivateDiagrams);
19

  
20
			data.forEach(function(diagram) {
21
				var openDiagramLink = document.createElement('a');
22
				openDiagramLink.setAttribute('href', './graph?diagramId=' + diagram.id);
23
				openDiagramLink.innerText = diagram.name;
24

  
25
				var removeDiagramIcon = document.createElement('img');
26
				removeDiagramIcon.setAttribute('src', 'images/button_cancel.png');
27
				removeDiagramIcon.setAttribute('alt', 'odstranit');
28

  
29
				var removeDiagramButton = document.createElement('button');
30
				removeDiagramButton.setAttribute('class', 'remove-diagram-button');
31
				removeDiagramButton.setAttribute('data-id', diagram.id);
32
				removeDiagramButton.setAttribute('data-name', diagram.name);
33
				removeDiagramButton.addEventListener('click', removeDiagram);
34
				removeDiagramButton.appendChild(removeDiagramIcon);
35

  
36
				var diagramListItem = document.createElement('li');
37
				diagramListItem.appendChild(openDiagramLink);
38
				diagramListItem.appendChild(removeDiagramButton);
39

  
40
				privateDiagramList.appendChild(diagramListItem);
41
			});
42
		} catch (error) {
43
			if (error instanceof HttpError) {
44
				alert('Something went wrong.');
45
			} else {
46
				alert('Server has probably gone away.');
47
			}
48
		}
49
	}
50

  
51
	async function removeDiagram() {
52
		let diagramId = this.getAttribute('data-id');
53
		let diagramName = this.getAttribute('data-name');
54

  
55
		if (confirm('Do you really want to delete ' + diagramName + '?')) {
56
			try {
57
				await AJAX.delete(Constants.API.removeDiagram + '?diagramId=' + diagramId);
58

  
59
				location.reload(true);
60

  
61
			} catch (error) {
62
				if (error instanceof HttpError) {
63
					switch (error.response.status) {
64
						case 401:
65
							alert('You are either not logged in or not an owner of this diagram.');
66
							break;
67
						default:
68
							alert('Something went wrong.');
69
					}
70
				} else {
71
					alert('Server has probably gone away.');
72
				}
73
			}
74
		}
75
	}
76
});
sources/src/main/webapp/js/uploadFilesApp.js
1
/**
2
 * Application running on the Upload files page.
3
 * @constructor
4
 */
5
class UploadFilesApp extends App {
6
	/**
7
	 * Application startup method. It hooks event listeners to elements already present on the page and add listeners of auth events.
8
	 */
9
	run() {
10
		console.log('running...');
11

  
12
		let privateDiagramList = document.getElementById('privateDiagramList');
13
		privateDiagramList.querySelectorAll('.remove-diagram-button').forEach(button => {
14
			button.addEventListener('click', this._removeDiagram);
15
		});
16

  
17
		document.addEventListener('imiger.userLoggedIn', () => this._loadPrivateDiagrams());
18
		document.addEventListener('imiger.userLoggedOut', () => privateDiagramList.innerHTML = '');
19
	}
20

  
21
	/**
22
	 * Loads private diagrams of the logged in user and adds them to a list.
23
	 */
24
	async _loadPrivateDiagrams() {
25
		try {
26
			const data = await AJAX.getJSON(Constants.API.getPrivateDiagrams);
27

  
28
			data.forEach(function(diagram) {
29
				var openDiagramLink = document.createElement('a');
30
				openDiagramLink.setAttribute('href', './graph?diagramId=' + diagram.id);
31
				openDiagramLink.innerText = diagram.name;
32

  
33
				var removeDiagramIcon = document.createElement('img');
34
				removeDiagramIcon.setAttribute('src', 'images/button_cancel.png');
35
				removeDiagramIcon.setAttribute('alt', 'odstranit');
36

  
37
				var removeDiagramButton = document.createElement('button');
38
				removeDiagramButton.setAttribute('class', 'remove-diagram-button');
39
				removeDiagramButton.setAttribute('data-id', diagram.id);
40
				removeDiagramButton.setAttribute('data-name', diagram.name);
41
				removeDiagramButton.addEventListener('click', this._removeDiagram);
42
				removeDiagramButton.appendChild(removeDiagramIcon);
43

  
44
				var diagramListItem = document.createElement('li');
45
				diagramListItem.appendChild(openDiagramLink);
46
				diagramListItem.appendChild(removeDiagramButton);
47

  
48
				privateDiagramList.appendChild(diagramListItem);
49
			});
50
		} catch (error) {
51
			if (error instanceof HttpError) {
52
				alert('Something went wrong.');
53
			} else {
54
				alert('Server has probably gone away.');
55
			}
56
		}
57
	}
58

  
59
	/**
60
	 * Removes diagram from DB and reloads the page.
61
	 */
62
	async _removeDiagram() {
63
		let diagramId = this.getAttribute('data-id');
64
		let diagramName = this.getAttribute('data-name');
65

  
66
		if (confirm('Do you really want to delete ' + diagramName + '?')) {
67
			try {
68
				await AJAX.delete(Constants.API.removeDiagram + '?diagramId=' + diagramId);
69

  
70
				location.reload(true);
71

  
72
			} catch (error) {
73
				if (error instanceof HttpError) {
74
					switch (error.response.status) {
75
						case 401:
76
							alert('You are either not logged in or not an owner of this diagram.');
77
							break;
78
						default:
79
							alert('Something went wrong.');
80
					}
81
				} else {
82
					alert('Server has probably gone away.');
83
				}
84
			}
85
		}
86
	}
87
}
sources/src/main/webapp/uploadFiles.jsp
1 1
<%@page contentType="text/html" pageEncoding="UTF-8"%>
2 2
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 3

  
4
<c:set var="HOME_URL" value="${initParam.HOME_URL}"/>
4
<c:set var="APP_NAME" value="IMiGEr"/>
5
<c:set var="APP_HOME_URL" value="${initParam.HOME_URL}"/>
5 6
<c:set var="isLoggedIn" value="${sessionScope.isLoggedIn}"/>
6 7
<c:set var="user" value="${sessionScope.user}"/>
7 8

  
......
12 13

  
13 14
		<link rel="stylesheet" href="css/main.css">
14 15

  
16
		<script src="js/errors/abstractMethodError.js"></script>
15 17
		<script src="js/errors/httpError.js"></script>
18

  
16 19
		<script src="js/utils/ajax.js"></script>
20

  
17 21
		<script src="js/constants.js"></script>
18
		<script src="js/uploadFiles.js"></script>
22

  
23
		<script src="js/app.js"></script>
24
		<script src="js/uploadFilesApp.js"></script>
25

  
19 26
		<script src="js/userMenu.js"></script>
20 27

  
21
		<title>IMiGEr</title>
28
		<title>${APP_NAME}</title>
22 29
	</head>
23 30

  
24 31
	<body class="${isLoggedIn ? 'loggedIn' : 'loggedOut'}">
......
61 68
					<c:forEach items="${diagramsPrivate}" var="diagram">
62 69
						<li>
63 70
							<a href="${HOME_URL}graph?diagramId=${diagram.id}">${diagram.name}</a>
64
							<button class="remove-diagram-button" data-id="${diagram.id}" data-name="${diagram.name}"><img src="images/button_cancel.png" alt="odstranit"></button>
71

  
72
							<button class="button remove-diagram-button" data-id="${diagram.id}" data-name="${diagram.name}">
73
								<img src="images/button_cancel.png" alt="odstranit">
74
							</button>
65 75
						</li>
66 76
					</c:forEach>
67 77
				</ul>
......
79 89
				</ul>
80 90
			</div>
81 91
		</main>
92
	
93
		<script>
94
			const app = new UploadFilesApp('${APP_NAME}', '${APP_HOME_URL}');
95

  
96
			document.addEventListener('DOMContentLoaded', () => {
97
				app.run();
98
			});
99
		</script>
82 100
	</body>
83 101
</html>

Také k dispozici: Unified diff