Skip to content

Commit

Permalink
Enhance FullPaginationDecorator to handle custom css-tags defined thr…
Browse files Browse the repository at this point in the history
…ough tag-attributes.
  • Loading branch information
thamacher committed Dec 10, 2017
1 parent 1caf0be commit 8650223
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 21 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.jpenren</groupId>
<artifactId>thymeleaf-spring-data-dialect</artifactId>
<version>3.3.1</version>
<version>3.4.0-SNAPSHOT</version>

<name>Thymeleaf Spring Data Dialect</name>
<description>Data pagination made easy with Thymeleaf and Spring Data</description>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,32 @@
package org.thymeleaf.dialect.springdata.decorator;

import java.util.Locale;

import org.springframework.data.domain.Page;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.dialect.springdata.Keys;
import org.thymeleaf.dialect.springdata.SpringDataDialect;
import org.thymeleaf.dialect.springdata.util.Messages;
import org.thymeleaf.dialect.springdata.util.PageUtils;
import org.thymeleaf.dialect.springdata.util.Strings;
import org.thymeleaf.model.IProcessableElementTag;

import java.util.Locale;
import java.util.Map;

public final class FullPaginationDecorator implements PaginationDecorator {
private static final String DEFAULT_CLASS = "pagination";
private static final String BUNDLE_NAME = FullPaginationDecorator.class.getSimpleName();
private static final int DEFAULT_PAGE_SPLIT = 7;
private static final String CSS_ATTR_PREFIX = SpringDataDialect.PREFIX + ":" + DEFAULT_CLASS + "-";

// define custom CSS tags
private String cssLaquo = "page-item";
private String cssRaquo = "page-item";
private String cssPrevious = "page-item";
private String cssNext = "page-item";
private String cssPageItem = "page-item";
private String cssPageLink = "page-link";
private String cssDisabled = "disabled";
private String cssActive = "active";

public String getIdentifier() {
return "full";
Expand All @@ -23,6 +36,8 @@ public String decorate(final IProcessableElementTag tag, final ITemplateContext

Page<?> page = PageUtils.findPage(context);

configureCss(tag.getAttributeMap());

// laquo
String firstPage = PageUtils.createPageUrl(context, 0);
Locale locale = context.getLocale();
Expand Down Expand Up @@ -93,27 +108,27 @@ private String createPageLinks(final Page<?> page, final ITemplateContext contex
}

private String getLaquo(Locale locale) {
return Messages.getMessage(BUNDLE_NAME, "laquo", locale);
return Messages.getMessage(BUNDLE_NAME, "laquo", locale, cssLaquo, cssPageLink, cssDisabled);
}

private String getLaquo(String firstPage, Locale locale) {
return Messages.getMessage(BUNDLE_NAME, "laquo.link", locale, firstPage);
return Messages.getMessage(BUNDLE_NAME, "laquo.link", locale, firstPage, cssLaquo, cssPageLink);
}

private String getRaquo(Locale locale) {
return Messages.getMessage(BUNDLE_NAME, "raquo", locale);
return Messages.getMessage(BUNDLE_NAME, "raquo", locale, cssRaquo, cssPageLink, cssDisabled);
}

private String getRaquo(String lastPage, Locale locale) {
return Messages.getMessage(BUNDLE_NAME, "raquo.link", locale, lastPage);
return Messages.getMessage(BUNDLE_NAME, "raquo.link", locale, lastPage, cssRaquo, cssPageLink);
}

private String getLink(int pageNumber, Locale locale) {
return Messages.getMessage(BUNDLE_NAME, "link.active", locale, pageNumber);
return Messages.getMessage(BUNDLE_NAME, "link.active", locale, pageNumber, cssActive, cssPageLink);
}

private String getLink(int pageNumber, String url, Locale locale) {
return Messages.getMessage(BUNDLE_NAME, "link", locale, url, pageNumber);
return Messages.getMessage(BUNDLE_NAME, "link", locale, url, pageNumber, cssPageItem, cssPageLink);
}

private String getPreviousPageLink(Page<?> page, final ITemplateContext context) {
Expand All @@ -122,7 +137,7 @@ private String getPreviousPageLink(Page<?> page, final ITemplateContext context)
int previousPage = page.getNumber()-1;
String link = PageUtils.createPageUrl(context, previousPage);

return Messages.getMessage(BUNDLE_NAME, msgKey, locale, link);
return Messages.getMessage(BUNDLE_NAME, msgKey, locale, link, cssPrevious, cssPageLink, cssDisabled);
}

private String getNextPageLink(Page<?> page, final ITemplateContext context) {
Expand All @@ -131,7 +146,42 @@ private String getNextPageLink(Page<?> page, final ITemplateContext context) {
int nextPage = page.getNumber() + 1;
String link = PageUtils.createPageUrl(context, nextPage);

return Messages.getMessage(BUNDLE_NAME, msgKey, locale, link);
return Messages.getMessage(BUNDLE_NAME, msgKey, locale, link, cssNext, cssPageLink, cssDisabled);
}

private void configureCss(Map<String,String> attributeMap) {

if (attributeMap.get(CSS_ATTR_PREFIX + "laquo") != null) {
this.cssLaquo = attributeMap.get(CSS_ATTR_PREFIX + "laquo");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "raquo") != null) {
this.cssRaquo = attributeMap.get(CSS_ATTR_PREFIX + "raquo");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "previous") != null) {
this.cssPrevious = attributeMap.get(CSS_ATTR_PREFIX + "previous");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "next") != null) {
this.cssNext = attributeMap.get(CSS_ATTR_PREFIX + "next");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "page-item") != null) {
this.cssPageItem = attributeMap.get(CSS_ATTR_PREFIX + "page-item");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "page-link") != null) {
this.cssPageLink = attributeMap.get(CSS_ATTR_PREFIX + "page-link");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "disabled") != null) {
this.cssDisabled = attributeMap.get(CSS_ATTR_PREFIX + "disabled");
}

if (attributeMap.get(CSS_ATTR_PREFIX + "active") != null) {
this.cssActive = attributeMap.get(CSS_ATTR_PREFIX + "active");
}
}

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#pagination {0}=class, {1}=firstPage, {2}=previousPage, {3}=links, {4}=nextPage, {5}=latestPage
pagination=<ul class="{0}">{1}{2}{3}{4}{5}</ul>
laquo=<li class="disabled page-item"><span class="page-link"><span aria-hidden="true">&laquo;</span></span></li>
laquo.link=<li class="page-item"><a href="{0}"class="page-link" aria-label="Erste Seite"><span aria-hidden="true">&laquo;</span></a></li>
previous.page=<li class="disabled page-item"><span class="page-link"><span aria-hidden="true">&lsaquo;</span></span></li>
previous.page.link=<li class="page-item"><a href="{0}"class="page-link" aria-label="Vorherige Seite"><span aria-hidden="true">&lsaquo;</span></a></li>
link=<li class="page-item"><a class="page-link" href="{0}">{1}</a></li>
link.active=<li class="active"><span class="page-link">{0}<span class="sr-only">(strom)</span></span></li>
next.page=<li class="disabled page-item"><span class="page-link"><span aria-hidden="true">&rsaquo;</span></span></li>
next.page.link=<li class="page-item"><a href="{0}"class="page-link" aria-label="Nächste Seite"><span aria-hidden="true">&rsaquo;</span></a></li>
raquo=<li class="disabled page-item"><span class="page-link"><span aria-hidden="true">&raquo;</span></span></li>
raquo.link=<li class="page-item"><a href="{0}"class="page-link" aria-label="Letzte Seite"><span aria-hidden="true">&raquo;</span></a></li>
laquo=<li class="{2} {0}"><span class="{1}"><span aria-hidden="true">&laquo;</span></span></li>
laquo.link=<li class="{1}"><a href="{0}"class="{2}" aria-label="Erste Seite"><span aria-hidden="true">&laquo;</span></a></li>
previous.page=<li class="{3} {1}"><span class="{2}"><span aria-hidden="true">&lsaquo;</span></span></li>
previous.page.link=<li class="{1}"><a href="{0}"class="{2}" aria-label="Vorherige Seite"><span aria-hidden="true">&lsaquo;</span></a></li>
link=<li class="{2}"><a class="{3}" href="{0}">{1}</a></li>
link.active=<li class="{1}"><span class="{2}">{0}<span class="sr-only">(strom)</span></span></li>
next.page=<li class="{3} {1}"><span class="{2}"><span aria-hidden="true">&rsaquo;</span></span></li>
next.page.link=<li class="{1}"><a href="{0}"class="{2}" aria-label="N�chste Seite"><span aria-hidden="true">&rsaquo;</span></a></li>
raquo=<li class="{2} {0}"><span class="{1}"><span aria-hidden="true">&raquo;</span></span></li>
raquo.link=<li class="{1}"><a href="{0}"class="{2}" aria-label="Letzte Seite"><span aria-hidden="true">&raquo;</span></a></li>

0 comments on commit 8650223

Please sign in to comment.