Several small things for the default and item lists.

pull/20/head
Jens Pelzetter 2022-02-16 20:20:05 +01:00
parent fb285f7a29
commit 47e26b5878
8 changed files with 115 additions and 32 deletions

View File

@ -65,7 +65,16 @@
<div class="col">
<h2>News</h2>
<ul class="list-group">
<li class="list-group-item">
<#list CmsPagesItemListModel.getItems("newslist") as news>
<li class="list-group-item">
<h3 class="d-flex w-100 justify-content-between">
<div>${news.title}</div>
<div>${news.releaseDateAsString}</div>
</h3>
<p class="item-description">${news.description}</p>
</li>
</#list>
<#-- <li class="list-group-item">
<h3 class="d-flex w-100 justify-content-between">
<div>News 1</div>
<div>2022-02-12</div>
@ -82,7 +91,7 @@
<p>
Quis officia cillum commodo velit. Ut cupidatat officia tempor veniam minim excepteur occaecat eu cillum labore. Incididunt exercitation officia enim minim et. Laborum culpa et velit consectetur sint labore proident quis reprehenderit occaecat mollit eu laboris labore. Dolor sit enim nostrud adipisicing esse culpa deserunt ipsum incididunt Lorem ipsum ipsum anim.
</p>
</li>
</li> -->
</ul>
</div>
<div class="col">
@ -110,8 +119,18 @@
</div>
<#-- <h2>Item List</h2>
<h2>Item List</h2>
<p>Item List size: ${CmsPagesItemListModel.listSize}</p>
<dl>
<dt>Item List size:</dt>
<dd>${CmsPagesItemListModel.listSize}</dd>
<dt>Page size</dt>
<dd>${CmsPagesItemListModel.pageSize}</dd>
<dt>Page</dt>
<dd>${CmsPagesItemListModel.page}</dd>
<dt>Offset</dt>
<dd>${CmsPagesItemListModel.offset}</dd>
</dl>
<ul>
<#list CmsPagesItemListModel.items as item>
<li>
@ -131,7 +150,41 @@
</dl>
</li>
</#list>
</ul> -->
</ul>
</div>
<h2>News List</h2>
<p>News List size: ${CmsPagesItemListModel.getListSize("newslist")}</p>
<dl>
<dt>Item List size:</dt>
<dd>${CmsPagesItemListModel.getListSize("newslist")}</dd>
<dt>Page size</dt>
<dd>${CmsPagesItemListModel.getPageSize("newslist")}</dd>
<dt>Page</dt>
<dd>${CmsPagesItemListModel.getPage("newslist")}</dd>
<dt>Offset</dt>
<dd>${CmsPagesItemListModel.getOffset("newslist")}</dd>
</dl>
<ul>
<#list CmsPagesItemListModel.getItems("newslist") as item>
<li>
<dl>
<dt>UUID</dt>
<dd>${item.uuid}</dd>
<dt>displayName</dt>
<dd>${item.displayName}</dd>
<dt>Name</dt>
<dd>${item.name}</dd>
<dt>Title</dt>
<dd>${item.title}</dd>
<dt>description</dt>
<dd>${item.description}</dd>
<dt>Type</dt>
<dd>${item.type}</dd>
</dl>
</li>
</#list>
</ul>
</div>
</@main.librecms>

View File

@ -3,3 +3,7 @@ $primary: #0A9793;
a.navbar-brand {
max-width: 15%;
}
.item-description {
white-space: pre;
}

View File

@ -131,7 +131,50 @@ public class ItemListModel {
@Transactional(Transactional.TxType.REQUIRED)
public int getListSize() {
return getItems().size();
return getListSize("");
}
@Transactional(Transactional.TxType.REQUIRED)
public int getListSize(final String listName) {
return getItems(listName).size();
}
public int getPageSize() {
return getPageSize("");
}
public int getPageSize(final String listName) {
return getPageSizeSetting(listName);
}
public int getOffset() {
return getOffset("");
}
public int getOffset(final String listName) {
return getOffset(listName, getPageSize(listName));
}
public int getPage() {
return getPage("");
}
public int getPage(final String listName) {
final String pageParamName = Stream
.of(listName, PAGE_PARAM_NAME)
.filter(token -> token != null && !token.isBlank())
.collect(
Collectors.joining(".")
);
if (pageUrlModel.getQueryParameters().containsKey(pageParamName)) {
return parsePageParam(pageParamName);
} else if (pageUrlModel.getQueryParameters()
.containsKey(PAGE_PARAM_NAME)) {
return parsePageParam(pageParamName);
} else {
return 0;
}
}
@Transactional(Transactional.TxType.REQUIRED)
@ -368,27 +411,7 @@ public class ItemListModel {
}
private int getOffset(final String listName, final int pageSize) {
final String pageParamName = Stream
.of(listName, PAGE_PARAM_NAME)
.filter(token -> token != null && !token.isBlank())
.collect(
Collectors.joining(".")
);
if (pageUrlModel.getQueryParameters().containsKey(pageParamName)) {
return calculateOffset(pageParamName, pageSize);
} else if (pageUrlModel.getQueryParameters().containsKey(PAGE_PARAM_NAME)) {
return calculateOffset(PAGE_PARAM_NAME, pageSize);
} else {
return 0;
}
}
private int calculateOffset(
final String pageParamName,
final int pageSize
) {
return parsePageParam(pageParamName) * pageSize;
return getPage(listName) * pageSize;
}
private int parsePageParam(final String pageParamName) {

View File

@ -21,6 +21,7 @@ package org.librecms.pages.models;
import org.librecms.contenttypes.News;
import java.time.LocalDateTime;
import java.time.ZoneId;
import javax.enterprise.context.RequestScoped;
@ -48,7 +49,9 @@ public class NewsListItemModelBuilder
) {
super.addProperties(news, model);
model.setReleaseDate(
LocalDateTime.from(news.getReleaseDate().toInstant())
LocalDateTime.from(
news.getReleaseDate().toInstant().atZone(ZoneId.systemDefault())
)
);
}

View File

@ -515,7 +515,7 @@ public class PagesController {
return showPageDetails(pagesInstance, categoryParam);
}
if (!propertyKey.matches("^([a-z0-9-_]*)$")) {
if (!propertyKey.matches("^([a-zA-Z0-9-_\\.]*)$")) {
models.put("propertyKeyInvalid", true);
return showPageDetails(pagesInstance, categoryParam);
}

View File

@ -155,7 +155,7 @@
class="form-control"
id="property-key"
name="propertyKey"
pattern="^([a-zA-Z0-9-_]*)$"
pattern="^([a-zA-Z0-9-_\.]*)$"
required="true"
type="text" />
<span class="form-text text-muted"

View File

@ -999,7 +999,7 @@ pages.errors.primaryurl_null_or_empty=The primary URL of a page tree can't be nu
pages.errors.pages_instance_already_existing=There is already a page tree with the primary URL {1} for site {0}.
pages.errors.primaryurl_invalid=The primary URL "{0}" contains invalid characters. The primary URL of a page tree must only contain the letters a to z and A to Z, numbers, the dash ("-") and the underscore ("_").
pages.page.details.properties.error.key_empty=The name/key of a property can't be null or blank.
pages.page.details.properties.error.key_invalid=The name of a property must only contain the letters A to Z, a to z, numbers, the dash ("-") and the underscore ("_").
pages.page.details.properties.error.key_invalid=The name of a property must only contain the letters A to Z, a to z, numbers, the dash ("-"), the underscore ("_") and the dot (".").
pages.page.details.properties.error.value_empty=The value of a property must not be empty.
pages.page.details.dialog.title=Page Details
pages.page.details.dialog.close=Close

View File

@ -1000,7 +1000,7 @@ pages.errors.primaryurl_null_or_empty=Die prim\u00e4re URL eines Seitenbaumes da
pages.errors.pages_instance_already_existing=Es gibt bereits einen Seitenbaum mit der prim\u00e4ren URL {1} f\u00fcr die Site {0}.
pages.errors.primaryurl_invalid=Die prim\u00e4re URL "{0}" enth\u00e4lt ung\u00fcltige Zeichen. Die prim\u00e4re URL eines Seitenbaumes darf nur die Buchstaben a bis z, A bis Z, Ziffern, den Bindestrich ("-") und den Unterstrich ("_") enthalten.
pages.page.details.properties.error.key_empty=Der Name eines Eigenschaft darf nicht leer sein.
pages.page.details.properties.error.key_invalid=Der Name einer Eigenschaft darf nur die Buchstaben A bis Z, a bis z, Ziffern, den Bindestrich ("-") und den Unterstrich ("_") enthalten.
pages.page.details.properties.error.key_invalid=Der Name einer Eigenschaft darf nur die Buchstaben A bis Z, a bis z, Ziffern, den Bindestrich ("-"), den Unterstrich ("_") und den Punkt (".") enthalten.
pages.page.details.properties.error.value_empty=Der Wert einer Eigenschaft darf nicht leer sein.
pages.page.details.dialog.title=Details Seite
pages.page.details.dialog.close=Schlie\u00dfen