Changed names of global ModelAttributes in order to avoid clashes with client-defined variables

This commit is contained in:
Francesco 2023-10-09 17:53:02 +02:00
parent 6819206bc6
commit 0fd9226a80
13 changed files with 72 additions and 72 deletions

View File

@ -33,8 +33,8 @@ import tech.ailef.dbadmin.external.exceptions.DbAdminNotFoundException;
import tech.ailef.dbadmin.internal.UserConfiguration; import tech.ailef.dbadmin.internal.UserConfiguration;
/** /**
* This class registers some ModelAttribute objects that are * This class registers some global ModelAttributes and exception handlers.
* used in all templates. *
*/ */
@ControllerAdvice @ControllerAdvice
public class GlobalController { public class GlobalController {
@ -50,7 +50,7 @@ public class GlobalController {
model.addAttribute("status", "404"); model.addAttribute("status", "404");
model.addAttribute("error", "Error"); model.addAttribute("error", "Error");
model.addAttribute("message", e.getMessage()); model.addAttribute("message", e.getMessage());
model.addAttribute("userConf", userConf); model.addAttribute("dbadmin_userConf", userConf);
model.addAttribute("baseUrl", getBaseUrl()); model.addAttribute("baseUrl", getBaseUrl());
return "other/error"; return "other/error";
} }
@ -61,7 +61,7 @@ public class GlobalController {
* @param request the incoming request * @param request the incoming request
* @return multi valued map of request parameters * @return multi valued map of request parameters
*/ */
@ModelAttribute("queryParams") @ModelAttribute("dbadmin_queryParams")
public Map<String, String[]> getQueryParams(HttpServletRequest request) { public Map<String, String[]> getQueryParams(HttpServletRequest request) {
return request.getParameterMap(); return request.getParameterMap();
} }
@ -70,7 +70,7 @@ public class GlobalController {
* The baseUrl as specified in the properties file by the user * The baseUrl as specified in the properties file by the user
* @return * @return
*/ */
@ModelAttribute("baseUrl") @ModelAttribute("dbadmin_baseUrl")
public String getBaseUrl() { public String getBaseUrl() {
return props.getBaseUrl(); return props.getBaseUrl();
} }
@ -80,7 +80,7 @@ public class GlobalController {
* @param request * @param request
* @return * @return
*/ */
@ModelAttribute("requestUrl") @ModelAttribute("dbadmin_requestUrl")
public String getRequestUrl(HttpServletRequest request) { public String getRequestUrl(HttpServletRequest request) {
return request.getRequestURI(); return request.getRequestURI();
} }
@ -90,7 +90,7 @@ public class GlobalController {
* in the settings table. * in the settings table.
* @return * @return
*/ */
@ModelAttribute("userConf") @ModelAttribute("dbadmin_userConf")
public UserConfiguration getUserConf() { public UserConfiguration getUserConf() {
return userConf; return userConf;
} }

View File

@ -11,10 +11,10 @@
<td class="text-center row-icons"> <td class="text-center row-icons">
<a class="ps-1" <a class="ps-1"
th:classAppend="|${!schema.isEditEnabled() ? 'disable' : ''}|" th:classAppend="|${!schema.isEditEnabled() ? 'disable' : ''}|"
th:href="|/${baseUrl}/model/${schema.getJavaClass().getName()}/edit/${row.getPrimaryKeyValue()}|"> th:href="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}/edit/${row.getPrimaryKeyValue()}|">
<i class="bi bi-pencil-square"></i></a> <i class="bi bi-pencil-square"></i></a>
<form class="delete-form" method="POST" <form class="delete-form" method="POST"
th:action="|/${baseUrl}/model/${schema.getJavaClass().getName()}/delete/${row.getPrimaryKeyValue()}|"> th:action="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}/delete/${row.getPrimaryKeyValue()}|">
<button th:class="|${!schema.isDeleteEnabled() ? 'disable' : ''}|"><i class="bi bi-trash"></i></button> <button th:class="|${!schema.isDeleteEnabled() ? 'disable' : ''}|"><i class="bi bi-trash"></i></button>
</form> </form>
</td> </td>
@ -37,7 +37,7 @@
<!-- data-row-field fragment --> <!-- data-row-field fragment -->
<th:block th:fragment="data_row_field(field, object)"> <th:block th:fragment="data_row_field(field, object)">
<th:block th:if="${field.getConnectedType() != null && object.traverse(field) != null}"> <th:block th:if="${field.getConnectedType() != null && object.traverse(field) != null}">
<a th:href="|/${baseUrl}/model/${field.getConnectedType().getName()}/show/${object.traverse(field).getPrimaryKeyValue()}|"> <a th:href="|/${dbadmin_baseUrl}/model/${field.getConnectedType().getName()}/show/${object.traverse(field).getPrimaryKeyValue()}|">
<span th:text="${object.has(field) ? object.traverse(field).getPrimaryKeyValue() : 'NULL'}"></span> <span th:text="${object.has(field) ? object.traverse(field).getPrimaryKeyValue() : 'NULL'}"></span>
</a> </a>
<p class="p-0 m-0" <p class="p-0 m-0"
@ -45,7 +45,7 @@
</th:block> </th:block>
<th:block th:if="${field.getConnectedType() == null}"> <th:block th:if="${field.getConnectedType() == null}">
<th:block th:if="${field.isPrimaryKey()}"> <th:block th:if="${field.isPrimaryKey()}">
<a th:href="|/${baseUrl}/model/${schema.getClassName()}/show/${object.get(field).getValue()}|"> <a th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/show/${object.get(field).getValue()}|">
<span th:text="${object.get(field).getFormattedValue()}"> <span th:text="${object.get(field).getFormattedValue()}">
</span> </span>
</a> </a>
@ -66,11 +66,11 @@
<th:block th:if="${object.get(field).getValue()}"> <th:block th:if="${object.get(field).getValue()}">
<div th:if="${field.isImage()}" class="mb-2"> <div th:if="${field.isImage()}" class="mb-2">
<img class="thumb-image" <img class="thumb-image"
th:src="|/${baseUrl}/download/${schema.getClassName()}/${field.getJavaName()}/${object.getPrimaryKeyValue()}/image|"> th:src="|/${dbadmin_baseUrl}/download/${schema.getClassName()}/${field.getJavaName()}/${object.getPrimaryKeyValue()}/image|">
</div> </div>
<a class="text-decoration-none null-label" <a class="text-decoration-none null-label"
th:href="|/${baseUrl}/download/${schema.getClassName()}/${field.getJavaName()}/${object.getPrimaryKeyValue()}|"> th:href="|/${dbadmin_baseUrl}/download/${schema.getClassName()}/${field.getJavaName()}/${object.getPrimaryKeyValue()}|">
<i class="align-middle bi bi-box-arrow-down"></i><span class="align-middle"> Download <i class="align-middle bi bi-box-arrow-down"></i><span class="align-middle"> Download
<!--/*--> <span class="text-muted">([[ ${object.get(field).getValue().length} ]] bytes)</span> <!--*/--> <!--/*--> <span class="text-muted">([[ ${object.get(field).getValue().length} ]] bytes)</span> <!--*/-->
</span> </span>

View File

@ -136,7 +136,7 @@
<div th:if="${field.isImage()}" class="mb-2"> <div th:if="${field.isImage()}" class="mb-2">
<img class="thumb-image" <img class="thumb-image"
th:id="|__thumb_${name}|" th:id="|__thumb_${name}|"
th:src="|/${baseUrl}/download/${schema.getClassName()}/${field.getJavaName()}/${object.getPrimaryKeyValue()}/image|"> th:src="|/${dbadmin_baseUrl}/download/${schema.getClassName()}/${field.getJavaName()}/${object.getPrimaryKeyValue()}/image|">
</div> </div>
</div> </div>
<!--/*--> File input <!--*/--> <!--/*--> File input <!--*/-->

View File

@ -14,10 +14,10 @@
<script type="text/javascript" src="/js/create.js"></script> <script type="text/javascript" src="/js/create.js"></script>
<title th:text="${title != null ? title + ' | Spring Boot DB Admin Panel' : 'Spring Boot DB Admin Panel'}"></title> <title th:text="${title != null ? title + ' | Spring Boot DB Admin Panel' : 'Spring Boot DB Admin Panel'}"></title>
<script th:inline="javascript"> <script th:inline="javascript">
let baseUrl = [[ ${baseUrl} ]]; let baseUrl = [[ ${dbadmin_baseUrl} ]];
</script> </script>
<style type="text/css" th:if="${userConf != null}"> <style type="text/css" th:if="${dbadmin_userConf != null}">
[( ${userConf.get('additionalCss')} )] [( ${dbadmin_userConf.get('additionalCss')} )]
</style> </style>
</head> </head>
@ -35,7 +35,7 @@
<nav class="navbar fixed-top navbar-expand-lg bg-accent color-white" th:fragment="navbar"> <nav class="navbar fixed-top navbar-expand-lg bg-accent color-white" th:fragment="navbar">
<div class="container-fluid"> <div class="container-fluid">
<a class=" fw-bold navbar-brand" href="/"><i class="bi bi-hexagon-fill"></i> <a class=" fw-bold navbar-brand" href="/"><i class="bi bi-hexagon-fill"></i>
[[ ${userConf.get('brandName')} ]] [[ ${dbadmin_userConf.get('brandName')} ]]
</a> </a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
@ -47,7 +47,7 @@
<h6 class="fw-bold pt-2 ms-3 menu-subheading d-none d-md-block">MENU</h6> <h6 class="fw-bold pt-2 ms-3 menu-subheading d-none d-md-block">MENU</h6>
<ul class="sidebar-menu pb-0 mb-0 "> <ul class="sidebar-menu pb-0 mb-0 ">
<li th:class="${#strings.equals(activePage, 'entities') ? 'active' : ''}"> <li th:class="${#strings.equals(activePage, 'entities') ? 'active' : ''}">
<a th:href="|/${baseUrl}|"> <a th:href="|/${dbadmin_baseUrl}|">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="menu-icon"> <div class="menu-icon">
<i class="bi bi-database"></i> <i class="bi bi-database"></i>
@ -59,7 +59,7 @@
</a> </a>
</li> </li>
<li th:class="${#strings.equals(activePage, 'logs') ? 'active' : ''}"> <li th:class="${#strings.equals(activePage, 'logs') ? 'active' : ''}">
<a th:href="|/${baseUrl}/logs|"> <a th:href="|/${dbadmin_baseUrl}/logs|">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="menu-icon"> <div class="menu-icon">
<i class="bi bi-file-text"></i> <i class="bi bi-file-text"></i>
@ -71,7 +71,7 @@
</a> </a>
</li> </li>
<li th:class="${#strings.equals(activePage, 'settings') ? 'active' : ''}"> <li th:class="${#strings.equals(activePage, 'settings') ? 'active' : ''}">
<a th:href="|/${baseUrl}/settings|"> <a th:href="|/${dbadmin_baseUrl}/settings|">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="menu-icon"> <div class="menu-icon">
<i class="bi bi-gear"></i> <i class="bi bi-gear"></i>
@ -114,7 +114,7 @@
<div class="separator"></div> <div class="separator"></div>
<ul class="sidebar-menu mb-0 pb-0"> <ul class="sidebar-menu mb-0 pb-0">
<li th:class="${#strings.equals(page, 'about') ? 'active' : ''}"> <li th:class="${#strings.equals(page, 'about') ? 'active' : ''}">
<a th:href="|/${baseUrl}/about|"> <a th:href="|/${dbadmin_baseUrl}/about|">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="menu-icon"> <div class="menu-icon">
<i class="bi bi-question-circle"></i> <i class="bi bi-question-circle"></i>
@ -137,7 +137,7 @@
<ul class="pagination me-3"> <ul class="pagination me-3">
<li class="page-item" th:if="${page.getPagination().getCurrentPage() != 1}"> <li class="page-item" th:if="${page.getPagination().getCurrentPage() != 1}">
<a class="page-link" <a class="page-link"
th:href="@{|${requestUrl}${page.getPagination().getLink(page.getPagination.getCurrentPage() - 1)}|}" th:href="@{|${dbadmin_requestUrl}${page.getPagination().getLink(page.getPagination.getCurrentPage() - 1)}|}"
aria-label="Previous"> aria-label="Previous">
<span aria-hidden="true">&laquo;</span> <span aria-hidden="true">&laquo;</span>
<span class="sr-only">Previous</span> <span class="sr-only">Previous</span>
@ -146,7 +146,7 @@
<li class="page-item" th:each="p : ${page.getPagination().getBeforePages()}"> <li class="page-item" th:each="p : ${page.getPagination().getBeforePages()}">
<a class="page-link" <a class="page-link"
th:href="@{|${requestUrl}${page.getPagination().getLink(p)}|}" th:text="${p}"></a> th:href="@{|${dbadmin_requestUrl}${page.getPagination().getLink(p)}|}" th:text="${p}"></a>
</li> </li>
<li class="page-item active"> <li class="page-item active">
@ -155,13 +155,13 @@
<li class="page-item" th:each="p : ${page.getPagination().getAfterPages()}"> <li class="page-item" th:each="p : ${page.getPagination().getAfterPages()}">
<a class="page-link" <a class="page-link"
th:href="@{|${requestUrl}${page.getPagination().getLink(p)}|}" th:href="@{|${dbadmin_requestUrl}${page.getPagination().getLink(p)}|}"
th:text="${p}"></a> th:text="${p}"></a>
</li> </li>
<li class="page-item"> <li class="page-item">
<a class="page-link" <a class="page-link"
th:if="${!page.getPagination().isLastPage()}" th:if="${!page.getPagination().isLastPage()}"
th:href="@{|${requestUrl}${page.getPagination().getLink(page.getPagination.getCurrentPage() + 1)}|}" th:href="@{|${dbadmin_requestUrl}${page.getPagination().getLink(page.getPagination.getCurrentPage() + 1)}|}"
aria-label="Next"> aria-label="Next">
<span class="sr-only">Next</span> <span class="sr-only">Next</span>
<span aria-hidden="true">&raquo;</span> <span aria-hidden="true">&raquo;</span>
@ -169,12 +169,12 @@
</li> </li>
</ul> </ul>
<div class="me-3"> <div class="me-3">
<form method="GET" th:action="@{|${requestUrl}|}"> <form method="GET" th:action="@{|${dbadmin_requestUrl}|}">
<input type="hidden" th:value="${page.getPagination().getCurrentPage()}" th:name="page"> <input type="hidden" th:value="${page.getPagination().getCurrentPage()}" th:name="page">
<input type="hidden" th:value="${query}" th:name="query"> <input type="hidden" th:value="${query}" th:name="query">
<input type="hidden" name="pageSize"> <input type="hidden" name="pageSize">
<th:block th:each="p : ${queryParams.keySet()}"> <th:block th:each="p : ${dbadmin_queryParams.keySet()}">
<input th:each="v : ${queryParams.get(p)}" <input th:each="v : ${dbadmin_queryParams.get(p)}"
th:name="${p}" th:value="${v}" type="hidden" th:name="${p}" th:value="${v}" type="hidden"
th:if="${p.startsWith('filter_')}"> th:if="${p.startsWith('filter_')}">
</th:block> </th:block>
@ -197,7 +197,7 @@
<div class="d-flex align-items-center" th:if="${page.getPagination().getMaxPage() == 1}"> <div class="d-flex align-items-center" th:if="${page.getPagination().getMaxPage() == 1}">
<div class="me-3"> <div class="me-3">
<form method="GET" th:action="@{|${requestUrl}|}"> <form method="GET" th:action="@{|${dbadmin_requestUrl}|}">
<input type="hidden" th:value="${page.getPagination().getCurrentPage()}" th:name="page"> <input type="hidden" th:value="${page.getPagination().getCurrentPage()}" th:name="page">
<input type="hidden" th:value="${query}" th:name="query"> <input type="hidden" th:value="${query}" th:name="query">
<input type="hidden" name="pageSize"> <input type="hidden" name="pageSize">

View File

@ -4,17 +4,17 @@
<body> <body>
<th:block th:fragment="sort_arrow(sortKey, sortOrder, fieldName)"> <th:block th:fragment="sort_arrow(sortKey, sortOrder, fieldName)">
<th:block th:if="${sortKey != fieldName}" > <th:block th:if="${sortKey != fieldName}" >
<a th:href="@{|${requestUrl}${page.getPagination().getSortedPageLink(fieldName, 'DESC')}|}"> <a th:href="@{|${dbadmin_requestUrl}${page.getPagination().getSortedPageLink(fieldName, 'DESC')}|}">
<i title="Sort" class="bi bi-caret-up"></i> <i title="Sort" class="bi bi-caret-up"></i>
</a> </a>
</th:block> </th:block>
<th:block th:unless="${sortKey != fieldName}"> <th:block th:unless="${sortKey != fieldName}">
<a th:if="${sortOrder == 'DESC'}" <a th:if="${sortOrder == 'DESC'}"
th:href="@{|${requestUrl}${page.getPagination().getSortedPageLink(fieldName, 'ASC')}|}"> th:href="@{|${dbadmin_requestUrl}${page.getPagination().getSortedPageLink(fieldName, 'ASC')}|}">
<i title="Sort" class="bi bi-caret-down-fill"></i> <i title="Sort" class="bi bi-caret-down-fill"></i>
</a> </a>
<a th:if="${sortOrder == 'ASC'}" <a th:if="${sortOrder == 'ASC'}"
th:href="@{|${requestUrl}${page.getPagination().getSortedPageLink(fieldName, 'DESC')}|}"> th:href="@{|${dbadmin_requestUrl}${page.getPagination().getSortedPageLink(fieldName, 'DESC')}|}">
<i title="Sort" class="bi bi-caret-up-fill"></i> <i title="Sort" class="bi bi-caret-up-fill"></i>
</a> </a>
</th:block> </th:block>
@ -26,7 +26,7 @@
<p>This table contains no data.</p> <p>This table contains no data.</p>
</div> </div>
<div th:if="${results.size() > 0}"> <div th:if="${results.size() > 0}">
<form id="multi-delete-form" th:action="|/${baseUrl}/model/${schema.getClassName()}/delete|" method="POST"> <form id="multi-delete-form" th:action="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/delete|" method="POST">
</form> </form>
<nav th:replace="~{fragments/resources :: pagination(${page})}"> <nav th:replace="~{fragments/resources :: pagination(${page})}">
</nav> </nav>

View File

@ -9,7 +9,7 @@
<div th:replace="~{fragments/resources :: sidebar('entities')}"></div> <div th:replace="~{fragments/resources :: sidebar('entities')}"></div>
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i><span class="align-middle"> Entities</span></h1> <h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i><span class="align-middle"> Entities</span></h1>
<form th:action="|/${baseUrl}|" method="GET"> <form th:action="|/${dbadmin_baseUrl}|" method="GET">
<div class="input-group"> <div class="input-group">
<input type="text" th:value="${query}" <input type="text" th:value="${query}"
placeholder="Type a class or a table name and press ENTER to search" placeholder="Type a class or a table name and press ENTER to search"
@ -35,12 +35,12 @@
<td class="warning-col"> <td class="warning-col">
<a th:if="${!schema.getErrors().isEmpty()}" <a th:if="${!schema.getErrors().isEmpty()}"
title="Some errors or warnings were raised during processing of this schema." title="Some errors or warnings were raised during processing of this schema."
th:href="|/${baseUrl}/model/${schema.getClassName()}/schema|"> th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/schema|">
<i class="bi bi-exclamation-triangle"></i></a> <i class="bi bi-exclamation-triangle"></i></a>
</td> </td>
<td> <td>
<a th:text="${schema.getTableName()}" <a th:text="${schema.getTableName()}"
th:href="|/${baseUrl}/model/${schema.getClassName()}|"></a> th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}|"></a>
</td> </td>
<td> <td>
<span th:text="${counts.get(schema.getClassName())}"></span> <span th:text="${counts.get(schema.getClassName())}"></span>
@ -49,10 +49,10 @@
<span th:text="${schema.getClassName()}"></span> <span th:text="${schema.getClassName()}"></span>
</td> </td>
<td class="text-end row-icons"> <td class="text-end row-icons">
<a title="List all" th:href="|/${baseUrl}/model/${schema.getClassName()}|"><i class="bi bi-list"></i></i></a> <a title="List all" th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}|"><i class="bi bi-list"></i></i></a>
<a th:title="|${!schema.isCreateEnabled() ? 'CREATE disabled for this type' : 'Create new item'}|" <a th:title="|${!schema.isCreateEnabled() ? 'CREATE disabled for this type' : 'Create new item'}|"
th:class="|${!schema.isCreateEnabled() ? 'disable' : ''}|" th:class="|${!schema.isCreateEnabled() ? 'disable' : ''}|"
th:href="|/${baseUrl}/model/${schema.getClassName()}/create|"><i class="bi bi-plus-square"></i> th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/create|"><i class="bi bi-plus-square"></i>
</a> </a>
</td> </td>
</tr> </tr>

View File

@ -17,7 +17,7 @@
<div class="box"> <div class="box">
<h3 class="fw-bold">Logs</h3> <h3 class="fw-bold">Logs</h3>
<div class="w-75"> <div class="w-75">
<form th:action="|/${baseUrl}/logs|" class="mt-3" id="log-filter-form" method="GET"> <form th:action="|/${dbadmin_baseUrl}/logs|" class="mt-3" id="log-filter-form" method="GET">
<div class="input-group"> <div class="input-group">
<span class="input-group-text">Action type</span> <span class="input-group-text">Action type</span>
<select name="actionType" class="form-select"> <select name="actionType" class="form-select">
@ -111,7 +111,7 @@
</td> </td>
<td> <td>
<th:block th:if="${entry.getActionType() != 'DELETE'}"> <th:block th:if="${entry.getActionType() != 'DELETE'}">
<a th:href="|/${baseUrl}/model/${entry.getJavaClass()}/show/${entry.getPrimaryKey()}|" <a th:href="|/${dbadmin_baseUrl}/model/${entry.getJavaClass()}/show/${entry.getPrimaryKey()}|"
th:text="${entry.getPrimaryKey()}"></a> th:text="${entry.getPrimaryKey()}"></a>
</th:block> </th:block>
<th:block th:if="${entry.getActionType() == 'DELETE'}"> <th:block th:if="${entry.getActionType() == 'DELETE'}">

View File

@ -13,9 +13,9 @@
<h1 class="fw-bold mb-4"> <h1 class="fw-bold mb-4">
<i class="align-middle bi bi-database"></i> <i class="align-middle bi bi-database"></i>
<span class="align-middle"><a th:href="|/${baseUrl}|">Entities</a></span> <span class="align-middle"><a th:href="|/${dbadmin_baseUrl}|">Entities</a></span>
<i class="align-middle bi bi-chevron-double-right"></i> <i class="align-middle bi bi-chevron-double-right"></i>
<a class="align-middle" th:href="|/${baseUrl}/model/${schema.getJavaClass().getName()}|"> <a class="align-middle" th:href="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}|">
[[ ${schema.getJavaClass().getSimpleName()} ]] </a> [[ ${schema.getJavaClass().getSimpleName()} ]] </a>
<i class="align-middle bi bi-chevron-double-right"></i> <i class="align-middle bi bi-chevron-double-right"></i>
<span class="align-middle" th:text="${create ? 'Create' : 'Edit'}"></span> <span class="align-middle" th:text="${create ? 'Create' : 'Edit'}"></span>
@ -28,7 +28,7 @@
<div class="col"> <div class="col">
<div class="box"> <div class="box">
<h3 class="fw-bold mb-4" th:text="${create ? schema.getJavaClass().getSimpleName() : object.getDisplayName()}"></h3> <h3 class="fw-bold mb-4" th:text="${create ? schema.getJavaClass().getSimpleName() : object.getDisplayName()}"></h3>
<form class="form" enctype="multipart/form-data" method="post" th:action="|/${baseUrl}/model/${className}/create|"> <form class="form" enctype="multipart/form-data" method="post" th:action="|/${dbadmin_baseUrl}/model/${className}/create|">
<input type="hidden" name="__dbadmin_create" th:value="${create}"> <input type="hidden" name="__dbadmin_create" th:value="${create}">
<div th:each="field : ${schema.getSortedFields(false)}" class="mt-2"> <div th:each="field : ${schema.getSortedFields(false)}" class="mt-2">
<label th:for="|__id_${field.getName()}|" class="mb-1 fw-bold"> <label th:for="|__id_${field.getName()}|" class="mb-1 fw-bold">
@ -69,7 +69,7 @@
<div class="d-flex mt-4 justify-content-between"> <div class="d-flex mt-4 justify-content-between">
<a th:href="|/${baseUrl}/model/${schema.getClassName()}|" class="ui-btn btn btn-secondary">Cancel</a> <a th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}|" class="ui-btn btn btn-secondary">Cancel</a>
<input type="submit" class="ui-btn btn btn-primary" th:value="${object != null ? 'Save' : 'Create'}"> <input type="submit" class="ui-btn btn btn-primary" th:value="${object != null ? 'Save' : 'Create'}">
</div> </div>
</form> </form>

View File

@ -10,19 +10,19 @@
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<th:block th:replace="~{fragments/resources :: alerts}"></th:block> <th:block th:replace="~{fragments/resources :: alerts}"></th:block>
<h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i> <h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i>
<span class="align-middle"><a th:href="|/${baseUrl}|">Entities</a></span> <span class="align-middle"><a th:href="|/${dbadmin_baseUrl}|">Entities</a></span>
<i class="align-middle bi bi-chevron-double-right"></i> <i class="align-middle bi bi-chevron-double-right"></i>
<span class="align-middle"> [[ ${schema.getJavaClass().getSimpleName()} ]] </span> <span class="align-middle"> [[ ${schema.getJavaClass().getSimpleName()} ]] </span>
</h1> </h1>
<div class="row mt-4"> <div class="row mt-4">
<div th:class="${schema.getFilterableFields().isEmpty() ? 'col' : 'col-9'}"> <div th:class="${schema.getFilterableFields().isEmpty() ? 'col' : 'col-9'}">
<div class="w-100 d-flex inner-navigation"> <div class="w-100 d-flex inner-navigation">
<a th:href="|/${baseUrl}/model/${className}|" class="active"> <a th:href="|/${dbadmin_baseUrl}/model/${className}|" class="active">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-database pe-2"></i> DATA <i class="bi bi-database pe-2"></i> DATA
</div> </div>
</a> </a>
<a th:href="|/${baseUrl}/model/${className}/schema|"> <a th:href="|/${dbadmin_baseUrl}/model/${className}/schema|">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-table pe-2"></i> SCHEMA <i class="bi bi-table pe-2"></i> SCHEMA
</div> </div>
@ -31,7 +31,7 @@
</div> </div>
</div> </div>
<div class="box with-navigation"> <div class="box with-navigation">
<form th:action="|/${baseUrl}/model/${className}|" method="GET" class="mb-3"> <form th:action="|/${dbadmin_baseUrl}/model/${className}|" method="GET" class="mb-3">
<div class="input-group"> <div class="input-group">
<span class="input-group-text"><i class="bi bi-search"></i></span> <span class="input-group-text"><i class="bi bi-search"></i></span>
<input type="text" th:value="${query}" <input type="text" th:value="${query}"
@ -39,8 +39,8 @@
class="ui-text-input form-control" name="query" autofocus> class="ui-text-input form-control" name="query" autofocus>
<button class="ui-btn btn btn-primary">Search</button> <button class="ui-btn btn btn-primary">Search</button>
</div> </div>
<th:block th:each="queryParam : ${queryParams.keySet()}"> <th:block th:each="queryParam : ${dbadmin_queryParams.keySet()}">
<input th:each="paramValue : ${queryParams.get(queryParam)}" <input th:each="paramValue : ${dbadmin_queryParams.get(queryParam)}"
th:if="${queryParam.startsWith('filter_')}" th:if="${queryParam.startsWith('filter_')}"
th:name="${queryParam}" th:value="${paramValue}" type="hidden"> th:name="${queryParam}" th:value="${paramValue}" type="hidden">
</th:block> </th:block>
@ -64,7 +64,7 @@
<h3 class="create-button"> <h3 class="create-button">
<a th:title="|${!schema.isCreateEnabled() ? 'CREATE disabled for this type' : 'Create new item'}|" <a th:title="|${!schema.isCreateEnabled() ? 'CREATE disabled for this type' : 'Create new item'}|"
th:class="|${!schema.isCreateEnabled() ? 'disable' : ''}|" th:class="|${!schema.isCreateEnabled() ? 'disable' : ''}|"
th:href="|/${baseUrl}/model/${schema.getClassName()}/create|"><i class="bi bi-plus-square"></i></a> th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/create|"><i class="bi bi-plus-square"></i></a>
</h3> </h3>
</div> </div>
@ -88,8 +88,8 @@
[[ ${filter}]] <i class="bi bi-x-circle"></i> [[ ${filter}]] <i class="bi bi-x-circle"></i>
</span> </span>
<form action="" th:id="${filter.toString()}" method="GET"> <form action="" th:id="${filter.toString()}" method="GET">
<th:block th:each="p : ${queryParams.keySet()}"> <th:block th:each="p : ${dbadmin_queryParams.keySet()}">
<input th:each="v : ${queryParams.get(p)}" th:name="${p}" th:value="${v}" type="hidden"> <input th:each="v : ${dbadmin_queryParams.get(p)}" th:name="${p}" th:value="${v}" type="hidden">
</th:block> </th:block>
<input type="hidden" name="remove_field" th:value="${filter.getField().getJavaName()}"> <input type="hidden" name="remove_field" th:value="${filter.getField().getJavaName()}">
<input type="hidden" name="remove_op" th:value="${filter.getOp()}"> <input type="hidden" name="remove_op" th:value="${filter.getOp()}">

View File

@ -10,20 +10,20 @@
<div th:replace="~{fragments/resources :: sidebar('entities')}"></div> <div th:replace="~{fragments/resources :: sidebar('entities')}"></div>
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<h1 class="fw-bold mb-4"><i class="bi bi-database"></i> <h1 class="fw-bold mb-4"><i class="bi bi-database"></i>
<a class="align-middle" th:href="|/${baseUrl}|">Entities</a> <a class="align-middle" th:href="|/${dbadmin_baseUrl}|">Entities</a>
<i class="align-middle bi bi-chevron-double-right"></i> <i class="align-middle bi bi-chevron-double-right"></i>
<a class="align-middle" th:href="|/${baseUrl}/model/${schema.getJavaClass().getName()}|"> [[ ${schema.getJavaClass().getSimpleName()} ]]</a> <a class="align-middle" th:href="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}|"> [[ ${schema.getJavaClass().getSimpleName()} ]]</a>
<i class="align-middle bi bi-chevron-double-right"></i><span class="align-middle"> Schema</span> <i class="align-middle bi bi-chevron-double-right"></i><span class="align-middle"> Schema</span>
</h1> </h1>
<div class="row mt-4"> <div class="row mt-4">
<div class="col"> <div class="col">
<div class="w-100 d-flex inner-navigation"> <div class="w-100 d-flex inner-navigation">
<a th:href="|/${baseUrl}/model/${schema.getJavaClass().getName()}|"> <a th:href="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}|">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-database pe-2"></i> DATA <i class="bi bi-database pe-2"></i> DATA
</div> </div>
</a> </a>
<a th:href="|/${baseUrl}/model/${schema.getJavaClass().getName()}/schema|" class="active"> <a th:href="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}/schema|" class="active">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-table pe-2"></i> SCHEMA <i class="bi bi-table pe-2"></i> SCHEMA
</div> </div>
@ -40,7 +40,7 @@
</span> </span>
</h3> </h3>
<h3 class="create-button"><a th:title="|${!schema.isCreateEnabled() ? 'CREATE disabled for this type' : 'Create new item'}|" <h3 class="create-button"><a th:title="|${!schema.isCreateEnabled() ? 'CREATE disabled for this type' : 'Create new item'}|"
th:href="|/${baseUrl}/model/${schema.getClassName()}/create|" th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/create|"
th:class="|${!schema.isCreateEnabled() ? 'disable' : ''}|"><i class="bi bi-plus-square"></i></a></h3> th:class="|${!schema.isCreateEnabled() ? 'disable' : ''}|"><i class="bi bi-plus-square"></i></a></h3>
</div> </div>
<div class="mb-4 operations-badges"> <div class="mb-4 operations-badges">

View File

@ -10,9 +10,9 @@
<div th:replace="~{fragments/resources :: sidebar('entities')}"></div> <div th:replace="~{fragments/resources :: sidebar('entities')}"></div>
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i> <h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i>
<a class="align-middle" th:href="|/${baseUrl}|">Entities</a> <a class="align-middle" th:href="|/${dbadmin_baseUrl}|">Entities</a>
<i class="align-middle bi bi-chevron-double-right"></i> <i class="align-middle bi bi-chevron-double-right"></i>
<a class="align-middle" th:href="|/${baseUrl}/model/${schema.getJavaClass().getName()}|"> <a class="align-middle" th:href="|/${dbadmin_baseUrl}/model/${schema.getJavaClass().getName()}|">
[[ ${schema.getJavaClass().getSimpleName()} ]]</a> [[ ${schema.getJavaClass().getSimpleName()} ]]</a>
<i class="align-middle bi bi-chevron-double-right"></i> <i class="align-middle bi bi-chevron-double-right"></i>
<span class="align-middle"> [[ ${object.getDisplayName()} ]]</span> <span class="align-middle"> [[ ${object.getDisplayName()} ]]</span>
@ -24,7 +24,7 @@
<h3 class="mb-3 fw-bold" th:text="${object.getDisplayName()}"></h3> <h3 class="mb-3 fw-bold" th:text="${object.getDisplayName()}"></h3>
<h3><a <h3><a
th:class="|${!schema.isEditEnabled() ? 'disable' : ''}|" th:class="|${!schema.isEditEnabled() ? 'disable' : ''}|"
th:href="|/${baseUrl}/model/${schema.getClassName()}/edit/${object.getPrimaryKeyValue()}|"> th:href="|/${dbadmin_baseUrl}/model/${schema.getClassName()}/edit/${object.getPrimaryKeyValue()}|">
<i class="bi bi-pencil"></i></a> <i class="bi bi-pencil"></i></a>
</h3> </h3>
</div> </div>

View File

@ -10,17 +10,17 @@
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<th:block th:replace="~{fragments/resources :: alerts}"></th:block> <th:block th:replace="~{fragments/resources :: alerts}"></th:block>
<h1 class="fw-bold mb-4"><i class="align-middle bi bi-gear"></i> <h1 class="fw-bold mb-4"><i class="align-middle bi bi-gear"></i>
<span class="align-middle"><a th:href="|/${baseUrl}|">Settings</a></span> <span class="align-middle"><a th:href="|/${dbadmin_baseUrl}|">Settings</a></span>
</h1> </h1>
<div class="row mt-4"> <div class="row mt-4">
<div class="col"> <div class="col">
<div class="w-100 d-flex inner-navigation"> <div class="w-100 d-flex inner-navigation">
<a th:href="|/${baseUrl}/settings|"> <a th:href="|/${dbadmin_baseUrl}/settings|">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-database pe-2"></i> GENERAL <i class="bi bi-database pe-2"></i> GENERAL
</div> </div>
</a> </a>
<a th:href="|/${baseUrl}/settings/appearance|" class="active"> <a th:href="|/${dbadmin_baseUrl}/settings/appearance|" class="active">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-table pe-2"></i> APPEARANCE <i class="bi bi-table pe-2"></i> APPEARANCE
</div> </div>
@ -30,13 +30,13 @@
</div> </div>
<div class="box with-navigation"> <div class="box with-navigation">
<h3 class="fw-bold">Appearance</h3> <h3 class="fw-bold">Appearance</h3>
<form th:action="|/${baseUrl}/settings|" method="POST"> <form th:action="|/${dbadmin_baseUrl}/settings|" method="POST">
<input type="hidden" name="next" value="settings/appearance"> <input type="hidden" name="next" value="settings/appearance">
<label for="additionalCss">Additional CSS</label> <label for="additionalCss">Additional CSS</label>
<span class="m-0 p-0 text-muted">Additional CSS code that is added automatically to all pages</span> <span class="m-0 p-0 text-muted">Additional CSS code that is added automatically to all pages</span>
<textarea class="form-control mt-2" <textarea class="form-control mt-2"
id="additionalCss" name="additionalCss" rows="8" id="additionalCss" name="additionalCss" rows="8"
th:text="${userConf.get('additionalCss')}"></textarea> th:text="${dbadmin_userConf.get('additionalCss')}"></textarea>
<button class="ui-btn btn btn-primary mt-3">Save</button> <button class="ui-btn btn btn-primary mt-3">Save</button>
</form> </form>
</div> </div>

View File

@ -10,17 +10,17 @@
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<th:block th:replace="~{fragments/resources :: alerts}"></th:block> <th:block th:replace="~{fragments/resources :: alerts}"></th:block>
<h1 class="fw-bold mb-4"><i class="align-middle bi bi-gear"></i> <h1 class="fw-bold mb-4"><i class="align-middle bi bi-gear"></i>
<span class="align-middle"><a th:href="|/${baseUrl}|">Settings</a></span> <span class="align-middle"><a th:href="|/${dbadmin_baseUrl}|">Settings</a></span>
</h1> </h1>
<div class="row mt-4"> <div class="row mt-4">
<div class="col"> <div class="col">
<div class="w-100 d-flex inner-navigation"> <div class="w-100 d-flex inner-navigation">
<a th:href="|/${baseUrl}/settings|" class="active"> <a th:href="|/${dbadmin_baseUrl}/settings|" class="active">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-database pe-2"></i> GENERAL <i class="bi bi-database pe-2"></i> GENERAL
</div> </div>
</a> </a>
<a th:href="|/${baseUrl}/settings/appearance|"> <a th:href="|/${dbadmin_baseUrl}/settings/appearance|">
<div class="ui-tab ps-5 pe-5 p-3"> <div class="ui-tab ps-5 pe-5 p-3">
<i class="bi bi-table pe-2"></i> APPEARANCE <i class="bi bi-table pe-2"></i> APPEARANCE
</div> </div>
@ -30,12 +30,12 @@
</div> </div>
<div class="box with-navigation"> <div class="box with-navigation">
<h3 class="fw-bold">General</h3> <h3 class="fw-bold">General</h3>
<form th:action="|/${baseUrl}/settings|" method="POST"> <form th:action="|/${dbadmin_baseUrl}/settings|" method="POST">
<label for="brandName">Brand name</label> <label for="brandName">Brand name</label>
<span class="m-0 p-0 text-muted">What appears in the top bar</span> <span class="m-0 p-0 text-muted">What appears in the top bar</span>
<input class="form-control mt-2" type="text" <input class="form-control mt-2" type="text"
id="brandName" name="brandName" id="brandName" name="brandName"
th:value="${userConf.get('brandName')}"> th:value="${dbadmin_userConf.get('brandName')}">
<button class="ui-btn btn btn-primary mt-3">Save</button> <button class="ui-btn btn btn-primary mt-3">Save</button>
</form> </form>
</div> </div>