From: Mathieu Baudier Date: Wed, 21 Jul 2021 08:39:01 +0000 (+0200) Subject: Introduce body html in theming. X-Git-Tag: argeo-commons-2.1.103~7 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=958c7142baa531d444d56725609c43c6a1ebd762 Introduce body html in theming. --- diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java index 66333858d..75509bd64 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java @@ -90,6 +90,7 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm if (theme != null) { properties.put(WebClient.THEME_ID, theme.getThemeId()); properties.put(WebClient.HEAD_HTML, theme.getHtmlHeaders()); + properties.put(WebClient.BODY_HTML, theme.getBodyHtml()); } else { properties.put(WebClient.THEME_ID, RWT.DEFAULT_THEME_ID); } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsTheme.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsTheme.java index e5089e35f..c93991b27 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsTheme.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsTheme.java @@ -37,6 +37,9 @@ public interface CmsTheme { /** Tags to be added to the header section of the HTML page. */ String getHtmlHeaders(); + /** The HTML body to use. */ + String getBodyHtml(); + /** The image registered at this path, or null if not found. */ Image getImage(String path); diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/BundleCmsTheme.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/BundleCmsTheme.java index 9a3cf9d47..6b997e6a3 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/BundleCmsTheme.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/BundleCmsTheme.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; @@ -15,6 +16,7 @@ import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; +import org.apache.commons.io.IOUtils; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -35,6 +37,7 @@ public class BundleCmsTheme extends AbstractCmsTheme { private final static String HEADER_CSS = "header.css"; private final static String FONTS_TXT = "fonts.txt"; + private final static String BODY_HTML = "body.html"; // private final static Log log = LogFactory.getLog(BundleCmsTheme.class); @@ -48,6 +51,8 @@ public class BundleCmsTheme extends AbstractCmsTheme { private String headerCss; private List fonts = new ArrayList<>(); + private String bodyHtml=""; + private String basePath; private String styleCssPath; // private String webCssPath; @@ -123,7 +128,13 @@ public class BundleCmsTheme extends AbstractCmsTheme { throw new IllegalArgumentException("Cannot read " + headerCssUrl, e); } } - } + + // body + URL bodyUrl = themeBundle.getEntry(basePath + BODY_HTML); + if (bodyUrl != null) { + loadBodyHtml(bodyUrl); + } +} public String getHtmlHeaders() { StringBuilder sb = new StringBuilder(); @@ -142,6 +153,13 @@ public class BundleCmsTheme extends AbstractCmsTheme { else return sb.toString(); } + + + + @Override + public String getBodyHtml() { + return bodyHtml; + } Set addCss(Bundle themeBundle, String path) { Set paths = new TreeSet<>(); @@ -188,6 +206,14 @@ public class BundleCmsTheme extends AbstractCmsTheme { } } + void loadBodyHtml(URL url) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), UTF_8))) { + bodyHtml= IOUtils.toString(url,StandardCharsets.UTF_8); + } catch (IOException e) { + throw new IllegalArgumentException("Cannot load URL " + url, e); + } + } + void addImages(String pattern) { Enumeration themeResources = themeBundle.findEntries(basePath, pattern, true); if (themeResources == null)