Revize 3817d6f3
Přidáno uživatelem Pavel Fidranský před více než 6 roky(ů)
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
reworked UploadFiles page to use extended App JS class