1
0
mirror of https://github.com/pcvolkmer/etl-processor.git synced 2025-04-20 17:56:50 +00:00

Merge pull request #52 from CCC-MF/issue_51

Darstellung und Aufteilung der Konfigurationsseite verbessern
This commit is contained in:
Paul-Christian Volkmer 2024-03-05 10:27:27 +01:00 committed by GitHub
commit 69d796dab4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 142 additions and 84 deletions

View File

@ -257,6 +257,10 @@ form.samplecode-input input:focus-visible {
display: block; display: block;
} }
.userrole-form {
display: inline-block;
}
.userrole-form form { .userrole-form form {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -321,6 +325,15 @@ table {
font-family: sans-serif; font-family: sans-serif;
} }
table.config-table td:first-child {
width: 24em;
min-width: fit-content;
}
table.config-table td > button:last-of-type {
float: right;
}
.border > table { .border > table {
padding: 0; padding: 0;
border: none; border: none;
@ -618,6 +631,32 @@ input.inline:focus-visible {
color: var(--bg-red); color: var(--bg-red);
} }
.tab {
padding: 1em;
border: none;
border-radius: 3px 3px 0 0;
cursor: pointer;
transition: all 0.2s;
font-weight: bold;
}
.tab:hover,
.tab.active {
background: var(--table-border);
}
.tabcontent {
border: 1px solid var(--table-border);
border-radius: 0 .5em .5em .5em;
display: none;
padding: 1em;
}
.tabcontent.active {
display: block;
}
a.reload { a.reload {
display: none; display: none;
position: absolute; position: absolute;

View File

@ -10,9 +10,16 @@
<main> <main>
<h1>Konfiguration</h1> <h1>Konfiguration</h1>
<div class="tabs">
<button class="tab active" onclick="selectTab(this, 'common');">Allgemeine Informationen</button>
<button class="tab" onclick="selectTab(this, 'security');">Sicherheit</button>
<button class="tab" onclick="selectTab(this, 'transformation');">Transformationen</button>
</div>
<div id="common" class="tabcontent active">
<section> <section>
<h2>🔧 Allgemeine Konfiguration</h2> <h2>🔧 Allgemeine Konfiguration</h2>
<table> <table class="config-table">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
@ -37,17 +44,21 @@
</table> </table>
</section> </section>
<section hx-ext="sse" th:sse-connect="@{/configs/events}">
<div th:insert="~{configs/connectionAvailable.html}" th:hx-get="@{/configs?connectionAvailable}" hx-trigger="sse:connection-available">
</div>
</section>
</div>
<div id="security" class="tabcontent">
<section th:insert="~{configs/tokens.html}"> <section th:insert="~{configs/tokens.html}">
</section> </section>
<section th:insert="~{configs/userroles.html}"> <section th:insert="~{configs/userroles.html}">
</section> </section>
<section hx-ext="sse" th:sse-connect="@{/configs/events}">
<div th:insert="~{configs/connectionAvailable.html}" th:hx-get="@{/configs?connectionAvailable}" hx-trigger="sse:connection-available">
</div> </div>
</section>
<div id="transformation" class="tabcontent">
<section> <section>
<h2><span th:if="${not transformations.isEmpty()}"></span><span th:if="${transformations.isEmpty()}"></span> Transformationen</h2> <h2><span th:if="${not transformations.isEmpty()}"></span><span th:if="${transformations.isEmpty()}"></span> Transformationen</h2>
@ -69,7 +80,7 @@
Hier sehen Sie eine Übersicht der konfigurierten Transformationen. Hier sehen Sie eine Übersicht der konfigurierten Transformationen.
</p> </p>
<table> <table class="config-table">
<thead> <thead>
<tr> <tr>
<th>JSON-Path</th> <th>JSON-Path</th>
@ -91,9 +102,19 @@
</table> </table>
</th:block> </th:block>
</section> </section>
</div>
</main> </main>
<script th:src="@{/scripts.js}"></script> <script th:src="@{/scripts.js}"></script>
<script th:src="@{/webjars/htmx.org/dist/htmx.min.js}"></script> <script th:src="@{/webjars/htmx.org/dist/htmx.min.js}"></script>
<script th:src="@{/webjars/htmx.org/dist/ext/sse.js}"></script> <script th:src="@{/webjars/htmx.org/dist/ext/sse.js}"></script>
<script>
function selectTab(self, elem) {
Array.from(document.getElementsByClassName('tab')).forEach(e => e.className = 'tab');
self.className = 'tab active';
Array.from(document.getElementsByClassName('tabcontent')).forEach(e => e.className = 'tabcontent');
document.getElementById(elem).className = 'tabcontent active';
}
</script>
</body> </body>
</html> </html>

View File

@ -7,19 +7,20 @@
<h2><span></span> Tokens</h2> <h2><span></span> Tokens</h2>
<div class="border"> <div class="border">
<div th:if="${tokens.isEmpty()}">Noch keine Tokens vorhanden.</div> <div th:if="${tokens.isEmpty()}">Noch keine Tokens vorhanden.</div>
<table th:if="${not tokens.isEmpty()}"> <table th:if="${not tokens.isEmpty()}" class="config-table">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Erstellt</th> <th>Erstellt</th>
<th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr th:each="token : ${tokens}"> <tr th:each="token : ${tokens}">
<td>[[ ${token.name} ]]</td> <td>[[ ${token.name} ]]</td>
<td><time th:datetime="${token.createdAt}">[[ ${token.createdAt} ]]</time></td> <td>
<td><button class="btn btn-red" th:hx-delete="@{/configs/tokens/{id}(id=${token.id})}" hx-target="#tokens">Löschen</button></td> <time th:datetime="${token.createdAt}">[[ ${token.createdAt} ]]</time>
<button class="btn btn-red" th:hx-delete="@{/configs/tokens/{id}(id=${token.id})}" hx-target="#tokens">Löschen</button>
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@ -7,12 +7,11 @@
<h2><span></span> Benutzerberechtigungen</h2> <h2><span></span> Benutzerberechtigungen</h2>
<div class="border"> <div class="border">
<div th:if="${userRoles.isEmpty()}">Noch keine Benutzerberechtigungen vorhanden.</div> <div th:if="${userRoles.isEmpty()}">Noch keine Benutzerberechtigungen vorhanden.</div>
<table th:if="${not userRoles.isEmpty()}"> <table th:if="${not userRoles.isEmpty()}" class="config-table">
<thead> <thead>
<tr> <tr>
<th>Benutzername</th> <th>Benutzername</th>
<th>Rolle</th> <th>Rolle</th>
<th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -29,8 +28,6 @@
<button class="btn btn-blue" th:disabled="${#authorization.authentication.getName() == userRole.username}">Übernehmen</button> <button class="btn btn-blue" th:disabled="${#authorization.authentication.getName() == userRole.username}">Übernehmen</button>
</form> </form>
</div> </div>
</td>
<td>
<button class="btn btn-red" th:hx-delete="@{/configs/userroles/{id}(id=${userRole.id})}" hx-target="#userroles" th:disabled="${#authorization.authentication.getName() == userRole.username}">Löschen</button> <button class="btn btn-red" th:hx-delete="@{/configs/userroles/{id}(id=${userRole.id})}" hx-target="#userroles" th:disabled="${#authorization.authentication.getName() == userRole.username}">Löschen</button>
</td> </td>
</tr> </tr>