Add footer, correct error page template
This commit is contained in:
parent
343d7a68ba
commit
ed9bac4d4e
9 changed files with 187 additions and 140 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
|||
postgres/docker-compose.yml
|
||||
target/
|
||||
|
|
|
@ -4,13 +4,20 @@
|
|||
}
|
||||
|
||||
body {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
font-family: Terminus;
|
||||
background-color: #212121;
|
||||
color: #cfcfcf;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.page{
|
||||
flex: 1 0 auto;
|
||||
padding: 0 0 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.validationError {
|
||||
|
@ -179,3 +186,46 @@ button:hover {
|
|||
margin-right: auto;
|
||||
width: 25em;
|
||||
}
|
||||
|
||||
/* footer */
|
||||
.footer{
|
||||
background: #323833;
|
||||
color: #a7a691;
|
||||
margin-top: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
.inner_footer{
|
||||
padding: 10px;
|
||||
display: block;
|
||||
float: right;
|
||||
}
|
||||
.copy_link{
|
||||
font-family: sans-serif;
|
||||
text-shadow: -1px -1px 0 #1e1e1e, 1px -1px 0 #1e1e1e, -1px 1px 0 #1e1e1e, 1px 1px 0 #1e1e1e;
|
||||
color: #74bfbd;
|
||||
}
|
||||
.copy_link:hover {
|
||||
color: #b6a795;
|
||||
}
|
||||
|
||||
/* error */
|
||||
.error {
|
||||
text-align: center;
|
||||
background: #283338;
|
||||
padding: 20px;
|
||||
box-shadow: 0 0 8px -3px #37474e;
|
||||
border-radius: 3px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.bli {
|
||||
padding: 3px;
|
||||
background-color: #D00000;
|
||||
animation: blinker 2.5s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes blinker {
|
||||
50% {
|
||||
opacity: 0.0;
|
||||
}
|
||||
}
|
|
@ -3,50 +3,19 @@
|
|||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type=text/css>
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #212121;
|
||||
color: #cfcfcf;
|
||||
font-family: Terminus;
|
||||
}
|
||||
|
||||
.error {
|
||||
border-width: 3px;
|
||||
border-style: double;
|
||||
padding: 8px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.bli {
|
||||
padding: 3px;
|
||||
background-color: #D00000;
|
||||
animation: blinker 2.5s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes blinker {
|
||||
50% {
|
||||
opacity: 0.0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<link rel="stylesheet" th:href="@{/styles/styles.css}" />
|
||||
<title th:text="${code}">title</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class='error'>
|
||||
ОШИБКА: <span class='bli' th:text="${code}"></span>
|
||||
<a href="/">
|
||||
<img height="65px" th:src="@{/images/s_logo.svg}" alt="Marinesco">
|
||||
</a>
|
||||
<p>
|
||||
ОШИБКА <span class='bli' th:text="${code}"></span>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
|
|
@ -1,10 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div th:fragment="footer">
|
||||
<a href="https://redrise.ru">© 2023 Dmitry Isaenko</a>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="footer" th:fragment="footer">
|
||||
<div class="container">
|
||||
<footer class="inner_footer">
|
||||
<a class="entry" href="https://redrise.ru">
|
||||
<div class="copy_link">© 2023 Dmitry Isaenko</div>
|
||||
</a>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -9,25 +9,29 @@
|
|||
|
||||
<body>
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="center">
|
||||
<div class="container base">
|
||||
<h1>Log in</h1>
|
||||
<a href="/register">Register</a>
|
||||
<form class="form-signin" method="post" action="/login">
|
||||
<br /><span class="validationError" th:if="${param.error}">Unable to login. Check your username and
|
||||
password.</span>
|
||||
<p>
|
||||
<label for="username" class="sr-only">Username</label>
|
||||
<input type="text" id="username" name="login" class="form-control" placeholder="Username" required autofocus>
|
||||
</p>
|
||||
<p>
|
||||
<label for="password" class="sr-only">Password</label>
|
||||
<input type="password" id="password" name="pwd" class="form-control" placeholder="Password" required>
|
||||
</p>
|
||||
<button class="sign" type="submit">Sign in</button>
|
||||
</form>
|
||||
<div class="page">
|
||||
<div class="center">
|
||||
<div class="container base">
|
||||
<h1>Log in</h1>
|
||||
<a href="/register">Register</a>
|
||||
<form class="form-signin" method="post" action="/login">
|
||||
<br /><span class="validationError" th:if="${param.error}">Unable to login. Check your username and
|
||||
password.</span>
|
||||
<p>
|
||||
<label for="username" class="sr-only">Username</label>
|
||||
<input type="text" id="username" name="login" class="form-control" placeholder="Username" required
|
||||
autofocus>
|
||||
</p>
|
||||
<p>
|
||||
<label for="password" class="sr-only">Password</label>
|
||||
<input type="password" id="password" name="pwd" class="form-control" placeholder="Password" required>
|
||||
</p>
|
||||
<button class="sign" type="submit">Sign in</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:replace="~{fragments/footer :: 'footer'}"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -8,28 +8,31 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<h1 th:text="${header_text}"></h1>
|
||||
<p>
|
||||
<div th:each="user : ${USR}">
|
||||
<span th:text="${user.id+' '+user.name+' '+user.displayName}+' ROLES: '">user</span>
|
||||
<span th:each="role : ${user.role}">
|
||||
<span th:text="'[ '+${role.id+' '+role.name+' '+role.type}+' ]'">user</span>
|
||||
</span>
|
||||
<form method="POST" th:action="@{/manage_users/delete}" th:object="${userGenerified}">
|
||||
<input type="hidden" th:value="${user.id}" name="id" />
|
||||
<input type="hidden" th:value="${user.name}" name="name" />
|
||||
<input type="hidden" th:value="${user.displayName}" name="displayName" />
|
||||
<div class="page">
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<h1 th:text="${header_text}"></h1>
|
||||
<p>
|
||||
<div th:each="user : ${USR}">
|
||||
<span th:text="${user.id+' '+user.name+' '+user.displayName}+' ROLES: '">user</span>
|
||||
<span th:each="role : ${user.role}">
|
||||
<input type="hidden" th:value="${role.id}" th:attr="name='role'" />
|
||||
<span th:text="'[ '+${role.id+' '+role.name+' '+role.type}+' ]'">user</span>
|
||||
</span>
|
||||
<form method="POST" th:action="@{/manage_users/delete}" th:object="${userGenerified}">
|
||||
<input type="hidden" th:value="${user.id}" name="id" />
|
||||
<input type="hidden" th:value="${user.name}" name="name" />
|
||||
<input type="hidden" th:value="${user.displayName}" name="displayName" />
|
||||
<span th:each="role : ${user.role}">
|
||||
<input type="hidden" th:value="${role.id}" th:attr="name='role'" />
|
||||
</span>
|
||||
|
||||
<button>DELETE</button>
|
||||
</form>
|
||||
<br />
|
||||
<button>DELETE</button>
|
||||
</form>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:replace="~{fragments/footer :: 'footer'}"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -9,41 +9,46 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<h1>Register</h1>
|
||||
<form class="regForm" method="POST" th:action="@{/register}" th:object="${registrationForm}">
|
||||
<div class="page">
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<h1>Register</h1>
|
||||
<form class="regForm" method="POST" th:action="@{/register}" th:object="${registrationForm}">
|
||||
|
||||
<span class="validationError" th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Error</span>
|
||||
<br />
|
||||
<label for="username">Username: </label>
|
||||
<br />
|
||||
<input type="text" name="username" id="username" size="50%" /><br />
|
||||
<span class="validationError" th:if="${#fields.hasErrors('username')}"
|
||||
th:errors="*{username}">Error</span>
|
||||
<br />
|
||||
<label for="username">Username: </label>
|
||||
<br />
|
||||
<input type="text" name="username" id="username" size="50%" /><br />
|
||||
|
||||
<span class="validationError" th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Error</span>
|
||||
<br />
|
||||
<label for="password">Password: </label>
|
||||
<br />
|
||||
<input type="password" name="password" id="password" size="50%" /><br />
|
||||
<span class="validationError" th:if="${#fields.hasErrors('password')}"
|
||||
th:errors="*{password}">Error</span>
|
||||
<br />
|
||||
<label for="password">Password: </label>
|
||||
<br />
|
||||
<input type="password" name="password" id="password" size="50%" /><br />
|
||||
|
||||
<span class="validationError" th:if="${passwordsMismatch} != null"
|
||||
th:text="${passwordsMismatch}">false</span>
|
||||
<br />
|
||||
<label for="confirm">Confirm password: </label>
|
||||
<br />
|
||||
<input type="password" name="passwordConfirm" id="passwordConfirm" size="50%" /><br />
|
||||
<span class="validationError" th:if="${passwordsMismatch} != null"
|
||||
th:text="${passwordsMismatch}">false</span>
|
||||
<br />
|
||||
<label for="confirm">Confirm password: </label>
|
||||
<br />
|
||||
<input type="password" name="passwordConfirm" id="passwordConfirm" size="50%" /><br />
|
||||
|
||||
<span class="validationError" th:if="${#fields.hasErrors('displayname')}"
|
||||
th:errors="*{displayname}">Error</span>
|
||||
<br />
|
||||
<label for="displayname">Displayed name: </label>
|
||||
<br />
|
||||
<input type="text" name="displayname" id="displayname" size="50%" /><br />
|
||||
<p>
|
||||
<button class="sign" type="submit">Register</button>
|
||||
</p>
|
||||
</form>
|
||||
<span class="validationError" th:if="${#fields.hasErrors('displayname')}"
|
||||
th:errors="*{displayname}">Error</span>
|
||||
<br />
|
||||
<label for="displayname">Displayed name: </label>
|
||||
<br />
|
||||
<input type="text" name="displayname" id="displayname" size="50%" /><br />
|
||||
<p>
|
||||
<button class="sign" type="submit">Register</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div th:replace="~{fragments/footer :: 'footer'}"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -8,14 +8,17 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<img th:src="@{/images/logo.svg}" />
|
||||
<br /><a href="/login">Login</a>
|
||||
<br /><a href="/profile">/profile</a>
|
||||
<br /><a href="/manage_users">/manage_users</a>
|
||||
<br /><a href="/h2">H2</a>
|
||||
<div class="page">
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<img th:src="@{/images/logo.svg}" />
|
||||
<br /><a href="/login">Login</a>
|
||||
<br /><a href="/profile">/profile</a>
|
||||
<br /><a href="/manage_users">/manage_users</a>
|
||||
<br /><a href="/h2">H2</a>
|
||||
</div>
|
||||
</div>
|
||||
<div th:replace="~{fragments/footer :: 'footer'}"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -8,28 +8,31 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<h1 th:text="${header_text}">welcome</h1>
|
||||
<form method="POST" th:action="@{/profile/settings}" th:object="${userSettingsForm}"> <!-- -->
|
||||
<span class="validationError" th:if="${#fields.hasErrors('displayname')}"
|
||||
th:errors="*{displayname}">Error</span>
|
||||
<br />
|
||||
<label for="displayname">Displayed name: </label>
|
||||
<br />
|
||||
<input type="text" name="displayname" id="displayname" th:value="${userSettingsForm.displayname}"
|
||||
size="50%" /><br />
|
||||
<div class="page">
|
||||
<div th:replace="~{fragments/header :: 'header'}"></div>
|
||||
<div class="container base">
|
||||
<h1 th:text="${header_text}">welcome</h1>
|
||||
<form method="POST" th:action="@{/profile/settings}" th:object="${userSettingsForm}"> <!-- -->
|
||||
<span class="validationError" th:if="${#fields.hasErrors('displayname')}"
|
||||
th:errors="*{displayname}">Error</span>
|
||||
<br />
|
||||
<label for="displayname">Displayed name: </label>
|
||||
<br />
|
||||
<input type="text" name="displayname" id="displayname" th:value="${userSettingsForm.displayname}"
|
||||
size="50%" /><br />
|
||||
|
||||
<span class="validationError" th:if="${password_incorrect} != null"
|
||||
th:text="${password_incorrect}">false</span>
|
||||
<br />
|
||||
<label for="password">New password: </label>
|
||||
<br />
|
||||
<input type="password" name="newPassword" id="newPassword" size="50%" /><br />
|
||||
<span class="validationError" th:if="${password_incorrect} != null"
|
||||
th:text="${password_incorrect}">false</span>
|
||||
<br />
|
||||
<label for="password">New password: </label>
|
||||
<br />
|
||||
<input type="password" name="newPassword" id="newPassword" size="50%" /><br />
|
||||
|
||||
<button class="sign" type="submit">Save Changes</button>
|
||||
</form>
|
||||
<button class="sign" type="submit">Save Changes</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div th:replace="~{fragments/footer :: 'footer'}"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
Reference in a new issue