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"> <div class="col">
<h2>News</h2> <h2>News</h2>
<ul class="list-group"> <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"> <h3 class="d-flex w-100 justify-content-between">
<div>News 1</div> <div>News 1</div>
<div>2022-02-12</div> <div>2022-02-12</div>
@ -82,7 +91,7 @@
<p> <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. 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> </p>
</li> </li> -->
</ul> </ul>
</div> </div>
<div class="col"> <div class="col">
@ -110,8 +119,18 @@
</div> </div>
<#-- <h2>Item List</h2> <h2>Item List</h2>
<p>Item List size: ${CmsPagesItemListModel.listSize}</p> <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> <ul>
<#list CmsPagesItemListModel.items as item> <#list CmsPagesItemListModel.items as item>
<li> <li>
@ -131,7 +150,41 @@
</dl> </dl>
</li> </li>
</#list> </#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> </div>
</@main.librecms> </@main.librecms>

View File

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

View File

@ -131,7 +131,50 @@ public class ItemListModel {
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public int getListSize() { 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) @Transactional(Transactional.TxType.REQUIRED)
@ -368,27 +411,7 @@ public class ItemListModel {
} }
private int getOffset(final String listName, final int pageSize) { private int getOffset(final String listName, final int pageSize) {
final String pageParamName = Stream return getPage(listName) * pageSize;
.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;
} }
private int parsePageParam(final String pageParamName) { private int parsePageParam(final String pageParamName) {

View File

@ -21,6 +21,7 @@ package org.librecms.pages.models;
import org.librecms.contenttypes.News; import org.librecms.contenttypes.News;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
@ -48,7 +49,9 @@ public class NewsListItemModelBuilder
) { ) {
super.addProperties(news, model); super.addProperties(news, model);
model.setReleaseDate( 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); return showPageDetails(pagesInstance, categoryParam);
} }
if (!propertyKey.matches("^([a-z0-9-_]*)$")) { if (!propertyKey.matches("^([a-zA-Z0-9-_\\.]*)$")) {
models.put("propertyKeyInvalid", true); models.put("propertyKeyInvalid", true);
return showPageDetails(pagesInstance, categoryParam); return showPageDetails(pagesInstance, categoryParam);
} }

View File

@ -155,7 +155,7 @@
class="form-control" class="form-control"
id="property-key" id="property-key"
name="propertyKey" name="propertyKey"
pattern="^([a-zA-Z0-9-_]*)$" pattern="^([a-zA-Z0-9-_\.]*)$"
required="true" required="true"
type="text" /> type="text" />
<span class="form-text text-muted" <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.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.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_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.properties.error.value_empty=The value of a property must not be empty.
pages.page.details.dialog.title=Page Details pages.page.details.dialog.title=Page Details
pages.page.details.dialog.close=Close 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.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.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_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.properties.error.value_empty=Der Wert einer Eigenschaft darf nicht leer sein.
pages.page.details.dialog.title=Details Seite pages.page.details.dialog.title=Details Seite
pages.page.details.dialog.close=Schlie\u00dfen pages.page.details.dialog.close=Schlie\u00dfen