diff --git a/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/contentitems/org.librecms.contenttypes.MultiPartArticle.html.ftl b/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/contentitems/org.librecms.contenttypes.MultiPartArticle.html.ftl
new file mode 100644
index 000000000..6ba7a2bbc
--- /dev/null
+++ b/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/contentitems/org.librecms.contenttypes.MultiPartArticle.html.ftl
@@ -0,0 +1,21 @@
+<#macro details>
+
${CmsPagesCategorizedItemModel.title}
+ ${CmsPagesCategorizedItemModel.description}
+
+ ${CmsPagesMultiPartArticleModel.currentSectionTitle}
+
+
+ ${CmsPagesMultiPartArticleModel.currentSectionText}
+
+#macro>
\ No newline at end of file
diff --git a/ccm-cms-default-theme/src/main/scss/_custom.scss b/ccm-cms-default-theme/src/main/scss/_custom.scss
index dd5d1895c..ca6725969 100644
--- a/ccm-cms-default-theme/src/main/scss/_custom.scss
+++ b/ccm-cms-default-theme/src/main/scss/_custom.scss
@@ -11,5 +11,5 @@ a.navbar-brand {
}
.item-description {
- white-space: pre;
+ white-space: pre-wrap;
}
\ No newline at end of file
diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/MultiPartArticleModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/MultiPartArticleModel.java
index 5f9972cdc..f9b224bc5 100644
--- a/ccm-cms/src/main/java/org/librecms/pages/models/MultiPartArticleModel.java
+++ b/ccm-cms/src/main/java/org/librecms/pages/models/MultiPartArticleModel.java
@@ -18,11 +18,6 @@
*/
package org.librecms.pages.models;
-import org.libreccm.l10n.GlobalizationHelper;
-import org.librecms.contentsection.ContentItem;
-import org.librecms.contenttypes.MultiPartArticle;
-import org.librecms.contenttypes.MultiPartArticleSection;
-
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -35,6 +30,13 @@ import javax.transaction.Transactional;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
+import org.libreccm.l10n.GlobalizationHelper;
+import org.librecms.contentsection.ContentItem;
+import org.librecms.contenttypes.MultiPartArticle;
+import org.librecms.contenttypes.MultiPartArticleSection;
+
+import java.util.ArrayList;
+
/**
*
* @author Jens Pelzetter
@@ -60,6 +62,8 @@ public class MultiPartArticleModel implements ProcessesContentItem {
private List sectionTitles;
+ private List sectionLinks;
+
private String currentSectionTitle;
private String currentSectionText;
@@ -91,6 +95,13 @@ public class MultiPartArticleModel implements ProcessesContentItem {
return Collections.unmodifiableList(sectionTitles);
}
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List getSectionLinks() {
+ contentItemModel.init();
+
+ return Collections.unmodifiableList(sectionLinks);
+ }
+
@Transactional(Transactional.TxType.REQUIRED)
public String getCurrentSectionTitle() {
contentItemModel.init();
@@ -142,8 +153,10 @@ public class MultiPartArticleModel implements ProcessesContentItem {
)
.orElse(Collections.emptyList());
+ sectionLinks = buildSectionLinks();
+
final int currentSection = readCurrentSection();
- if (mpa.getSections().size() > currentSection) {
+ if (mpa.getSections().size() < currentSection) {
throw new WebApplicationException(
Response
.status(Response.Status.NOT_FOUND)
@@ -212,4 +225,45 @@ public class MultiPartArticleModel implements ProcessesContentItem {
return model;
}
+ @Transactional(Transactional.TxType.REQUIRED)
+ private List buildSectionLinks() {
+ final String pathWithoutSections;
+ if (pageUrlModel.getPath().matches(".*/@sections/[0-9]*$")) {
+ final String path = pageUrlModel.getPath();
+ pathWithoutSections = path.substring(
+ 0,
+ path.lastIndexOf("/@sections") + 1
+ );
+ } else {
+ pathWithoutSections = pageUrlModel.getPath();
+ }
+
+ final List sectionLinksList = new ArrayList<>();
+ for (int i = 0; i < sectionTitles.size(); i++) {
+ sectionLinksList.add(
+ String.format(
+ "%s/@sections/%d?%s",
+ pathWithoutSections,
+ i,
+ pageUrlModel
+ .getQueryParameters()
+ .entrySet()
+ .stream()
+ .map(
+ entry -> String.format(
+ "%s=%s",
+ entry.getKey(),
+ entry.getValue()
+ )
+ )
+ .collect(
+ Collectors.joining("&")
+ )
+ )
+ );
+ }
+
+ return sectionLinksList;
+ }
+
}