diff --git a/ccm-core/src/main/java/org/libreccm/mvc/freemarker/FreemarkerViewEngine.java b/ccm-core/src/main/java/org/libreccm/mvc/freemarker/FreemarkerViewEngine.java index 910e74084..19d17d176 100644 --- a/ccm-core/src/main/java/org/libreccm/mvc/freemarker/FreemarkerViewEngine.java +++ b/ccm-core/src/main/java/org/libreccm/mvc/freemarker/FreemarkerViewEngine.java @@ -29,7 +29,6 @@ import org.eclipse.krazo.engine.ViewEngineBase; import org.eclipse.krazo.engine.ViewEngineConfig; import org.libreccm.theming.ThemeInfo; import org.libreccm.theming.ThemeProvider; -import org.libreccm.theming.freemarker.FreemarkerThemeProcessor; import org.libreccm.theming.utils.L10NUtils; import org.libreccm.theming.utils.SettingsUtils; import org.libreccm.theming.utils.TextUtils; @@ -291,7 +290,6 @@ public class FreemarkerViewEngine extends ViewEngineBase { @Override public Object exec(final List arguments) throws TemplateModelException { - if (arguments.isEmpty()) { throw new TemplateModelException("No string to localize."); } @@ -318,7 +316,6 @@ public class FreemarkerViewEngine extends ViewEngineBase { @Override public Object exec(final List arguments) throws TemplateModelException { - if (arguments.size() == 2) { final String text = ((TemplateScalarModel) arguments.get(0)) .getAsString(); diff --git a/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java b/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java index ed89e5afd..0c03cec1f 100644 --- a/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java +++ b/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java @@ -39,6 +39,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.NoSuchElementException; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -53,25 +54,31 @@ import javax.json.JsonObject; import javax.json.JsonReader; /** - * Implementation of {@link ThemeProvider} for serves themes stored in the + * Implementation of {@link ThemeProvider} for serves themes stored in the * classpath. - * + * * @author Jens Pelzetter */ @RequestScoped public class StaticThemeProvider implements ThemeProvider { private static final long serialVersionUID = 1L; + private static final Logger LOGGER = LogManager.getLogger( StaticThemeProvider.class); private static final String THEMES_DIR = "/themes"; + private static final String THEMES_PACKAGE = "themes"; + private static final String THEME_MANIFEST_JSON_PATH = THEMES_DIR + "/%s/theme.json"; + private static final String THEME_MANIFEST_XML_PATH = THEMES_DIR + "/%s/theme.xml"; + private static final String THEME_MANIFEST_JSON = "theme.json"; + private static final String THEME_MANIFEST_XML = "theme.xml"; @Inject @@ -84,7 +91,7 @@ public class StaticThemeProvider implements ThemeProvider { public String getName() { return "StaticThemeProvider"; } - + @Override public List getThemes() { @@ -472,18 +479,26 @@ public class StaticThemeProvider implements ThemeProvider { final String fileName = path.get(0); - final Optional fileData = currentDirectory + final Optional fileDataResult = currentDirectory .stream() .map(value -> (JsonObject) value) .filter(value -> filterFileData(value, fileName)) .findAny(); if (path.size() == 1) { - return fileData; + return fileDataResult; } else { - - if (fileData.get().getBoolean("isDirectory")) { - return findFile(path.subList(1, path.size()), - fileData.get().getJsonArray("files")); + final JsonObject fileData = fileDataResult + .orElseThrow( + () -> new NoSuchElementException( + String.format( + "File %s not found.", path + ) + ) + ); + if (fileData.getBoolean("isDirectory")) { + return findFile( + path.subList(1, path.size()), fileData.getJsonArray("files") + ); } else { return Optional.empty(); } diff --git a/ccm-core/src/main/resources/themes/ccm-freemarker/header.html.ftl b/ccm-core/src/main/resources/themes/ccm-freemarker/header.html.ftl new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/ccm-core/src/main/resources/themes/ccm-freemarker/header.html.ftl @@ -0,0 +1 @@ + diff --git a/ccm-core/src/main/resources/themes/ccm-freemarker/images/libreccm.png b/ccm-core/src/main/resources/themes/ccm-freemarker/images/libreccm.png new file mode 100644 index 000000000..676ec2137 Binary files /dev/null and b/ccm-core/src/main/resources/themes/ccm-freemarker/images/libreccm.png differ diff --git a/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html.ftl b/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html.ftl index d4052f387..40cc805ab 100644 --- a/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html.ftl +++ b/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html.ftl @@ -1,30 +1,28 @@ - - - - Category page - - - -
-

${LoginMessages['login.title']}

+<#import "../main.html.ftl" as main> + +<@main.ccm_main> +

${LoginMessages['login.title']}

<#if (loginFailed)>
${LoginMessages['login.errors.failed']}
-
- <#include "../footer.html.ftl"> - - + diff --git a/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html_1.ftl b/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html_1.ftl new file mode 100644 index 000000000..d4052f387 --- /dev/null +++ b/ccm-core/src/main/resources/themes/ccm-freemarker/login/login-form.html_1.ftl @@ -0,0 +1,39 @@ + + + + Category page + + + +
+

${LoginMessages['login.title']}

+ <#if (loginFailed)> +
+ ${LoginMessages['login.errors.failed']} +
+ +
+ + + + + + + + + +
+
+ <#include "../footer.html.ftl"> + + diff --git a/ccm-core/src/main/resources/themes/ccm-freemarker/main.html.ftl b/ccm-core/src/main/resources/themes/ccm-freemarker/main.html.ftl new file mode 100644 index 000000000..45e8ae70a --- /dev/null +++ b/ccm-core/src/main/resources/themes/ccm-freemarker/main.html.ftl @@ -0,0 +1,25 @@ +<#macro ccm_main scripts=[]> + + + Category page + + <#list scripts as script> +