diff --git a/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java b/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java index 89cf5f1f5..ddc6dde84 100644 --- a/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java +++ b/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java @@ -50,6 +50,9 @@ public class FreeMarkerAutoConfiguration { @Autowired private TagTagDirective tagTagDirective; + @Autowired + private GalleryTagDirective galleryTagDirective; + @Autowired private RandomMethod randomMethod; @@ -71,6 +74,7 @@ public class FreeMarkerAutoConfiguration { configuration.setSharedVariable("menuTag", menuTagDirective); configuration.setSharedVariable("tagTag", tagTagDirective); configuration.setSharedVariable("postTag", postTagDirective); + configuration.setSharedVariable("galleryTag",galleryTagDirective); configuration.setSharedVariable("randomMethod", randomMethod); configuration.setSharedVariable("recentPostsMethod", recentPostsMethod); configuration.setSharedVariable("recentCommentsMethod", recentCommentsMethod); diff --git a/src/main/java/run/halo/app/model/freemarker/tag/CategoryTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/CategoryTagDirective.java index 4c963b320..6f0130b71 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/CategoryTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/CategoryTagDirective.java @@ -1,9 +1,9 @@ package run.halo.app.model.freemarker.tag; -import run.halo.app.service.CategoryService; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.stereotype.Component; +import run.halo.app.model.support.HaloConst; import run.halo.app.service.CategoryService; import java.io.IOException; @@ -18,8 +18,6 @@ import java.util.Map; @Component public class CategoryTagDirective implements TemplateDirectiveModel { - private static final String METHOD_KEY = "method"; - private final CategoryService categoryService; public CategoryTagDirective(CategoryService categoryService) { @@ -30,8 +28,8 @@ public class CategoryTagDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); - if (params.containsKey(METHOD_KEY)) { - String method = params.get(METHOD_KEY).toString(); + if (params.containsKey(HaloConst.METHOD_KEY)) { + String method = params.get(HaloConst.METHOD_KEY).toString(); switch (method) { case "list": env.setVariable("categories", builder.build().wrap(categoryService.listAll())); diff --git a/src/main/java/run/halo/app/model/freemarker/tag/CommentTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/CommentTagDirective.java index 55b094481..3b6ab3423 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/CommentTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/CommentTagDirective.java @@ -1,9 +1,9 @@ package run.halo.app.model.freemarker.tag; -import run.halo.app.service.CommentService; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.stereotype.Component; +import run.halo.app.model.support.HaloConst; import run.halo.app.service.CommentService; import java.io.IOException; @@ -18,8 +18,6 @@ import java.util.Map; @Component public class CommentTagDirective implements TemplateDirectiveModel { - private static final String METHOD_KEY = "method"; - private final CommentService commentService; public CommentTagDirective(CommentService commentService) { @@ -30,8 +28,8 @@ public class CommentTagDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); - if (params.containsKey(METHOD_KEY)) { - String method = params.get(METHOD_KEY).toString(); + if (params.containsKey(HaloConst.METHOD_KEY)) { + String method = params.get(HaloConst.METHOD_KEY).toString(); int top = Integer.parseInt(params.get("top").toString()); switch (method) { case "latest": diff --git a/src/main/java/run/halo/app/model/freemarker/tag/GalleryTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/GalleryTagDirective.java new file mode 100644 index 000000000..4a5544b47 --- /dev/null +++ b/src/main/java/run/halo/app/model/freemarker/tag/GalleryTagDirective.java @@ -0,0 +1,49 @@ +package run.halo.app.model.freemarker.tag; + +import freemarker.core.Environment; +import freemarker.template.*; +import org.springframework.stereotype.Component; +import run.halo.app.model.support.HaloConst; +import run.halo.app.service.GalleryService; + +import java.io.IOException; +import java.util.Map; + +/** + * Freemarker custom tag of gallery. + * + * @author : RYAN0UP + * @date : 2019/4/21 + */ +@Component +public class GalleryTagDirective implements TemplateDirectiveModel { + + private final GalleryService galleryService; + + public GalleryTagDirective(GalleryService galleryService) { + this.galleryService = galleryService; + } + + @Override + public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { + final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); + + if (params.containsKey(HaloConst.METHOD_KEY)) { + String method = params.get(HaloConst.METHOD_KEY).toString(); + switch (method) { + case "list": + env.setVariable("galleries", builder.build().wrap(galleryService.listAll())); + break; + case "listTeamVos": + env.setVariable("galleries", builder.build().wrap(null)); + break; + case "count": + env.setVariable("count", builder.build().wrap(galleryService.count())); + break; + default: + break; + } + } + body.render(env.getOut()); + } +} diff --git a/src/main/java/run/halo/app/model/freemarker/tag/LinkTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/LinkTagDirective.java index 24b6e5d29..186c991a0 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/LinkTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/LinkTagDirective.java @@ -1,9 +1,10 @@ package run.halo.app.model.freemarker.tag; -import run.halo.app.service.LinkService; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.stereotype.Component; +import run.halo.app.model.support.HaloConst; +import run.halo.app.service.LinkService; import java.io.IOException; import java.util.Map; @@ -17,8 +18,6 @@ import java.util.Map; @Component public class LinkTagDirective implements TemplateDirectiveModel { - private static final String METHOD_KEY = "method"; - private final LinkService linkService; public LinkTagDirective(LinkService linkService) { @@ -29,8 +28,8 @@ public class LinkTagDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); - if (params.containsKey(METHOD_KEY)) { - String method = params.get(METHOD_KEY).toString(); + if (params.containsKey(HaloConst.METHOD_KEY)) { + String method = params.get(HaloConst.METHOD_KEY).toString(); switch (method) { case "list": env.setVariable("links", builder.build().wrap(linkService.listAll())); diff --git a/src/main/java/run/halo/app/model/freemarker/tag/MenuTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/MenuTagDirective.java index 323bec611..417e10750 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/MenuTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/MenuTagDirective.java @@ -1,9 +1,9 @@ package run.halo.app.model.freemarker.tag; -import run.halo.app.service.MenuService; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.stereotype.Component; +import run.halo.app.model.support.HaloConst; import run.halo.app.service.MenuService; import java.io.IOException; @@ -30,8 +30,8 @@ public class MenuTagDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); - if (params.containsKey(METHOD_KEY)) { - String method = params.get(METHOD_KEY).toString(); + if (params.containsKey(HaloConst.METHOD_KEY)) { + String method = params.get(HaloConst.METHOD_KEY).toString(); switch (method) { case "list": env.setVariable("menus", builder.build().wrap(menuService.listAll())); diff --git a/src/main/java/run/halo/app/model/freemarker/tag/PostTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/PostTagDirective.java index 7a333a3c7..c3db55117 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/PostTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/PostTagDirective.java @@ -19,8 +19,6 @@ import java.util.Map; @Component public class PostTagDirective implements TemplateDirectiveModel { - private static final String METHOD_KEY = "method"; - @Override public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { // TODO Complete article tag directive. diff --git a/src/main/java/run/halo/app/model/freemarker/tag/TagTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/TagTagDirective.java index 240dc4c16..e4d9a6499 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/TagTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/TagTagDirective.java @@ -1,5 +1,6 @@ package run.halo.app.model.freemarker.tag; +import run.halo.app.model.support.HaloConst; import run.halo.app.service.TagService; import freemarker.core.Environment; import freemarker.template.*; @@ -17,8 +18,6 @@ import java.util.Map; @Component public class TagTagDirective implements TemplateDirectiveModel { - private static final String METHOD_KEY = "method"; - private final TagService tagService; public TagTagDirective(TagService tagService) { @@ -29,8 +28,8 @@ public class TagTagDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { final DefaultObjectWrapperBuilder builder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); - if (params.containsKey(METHOD_KEY)) { - String method = params.get(METHOD_KEY).toString(); + if (params.containsKey(HaloConst.METHOD_KEY)) { + String method = params.get(HaloConst.METHOD_KEY).toString(); switch (method) { case "list": env.setVariable("tags", builder.build().wrap(tagService.listAll())); diff --git a/src/main/java/run/halo/app/model/support/HaloConst.java b/src/main/java/run/halo/app/model/support/HaloConst.java index 5271d0eea..2a67ed880 100644 --- a/src/main/java/run/halo/app/model/support/HaloConst.java +++ b/src/main/java/run/halo/app/model/support/HaloConst.java @@ -38,6 +38,11 @@ public class HaloConst { */ public static final String SUFFIX_FTL = ".ftl"; + /** + * Custom freemarker tag method key. + */ + public static final String METHOD_KEY = "method"; + /** * Owo map. (Unmodified map) */ diff --git a/src/main/java/run/halo/app/web/controller/content/ContentPageController.java b/src/main/java/run/halo/app/web/controller/content/ContentPageController.java index c115bf3b9..3794755fe 100644 --- a/src/main/java/run/halo/app/web/controller/content/ContentPageController.java +++ b/src/main/java/run/halo/app/web/controller/content/ContentPageController.java @@ -7,7 +7,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import run.halo.app.exception.NotFoundException; import run.halo.app.model.entity.Comment; -import run.halo.app.model.entity.Gallery; import run.halo.app.model.entity.Post; import run.halo.app.model.enums.PostStatus; import run.halo.app.service.CommentService; @@ -48,9 +47,7 @@ public class ContentPageController { * @return template path: themes/{theme}/gallery */ @GetMapping(value = "/gallery") - public String gallery(Model model) { - final List galleries = galleryService.listAll(); - model.addAttribute("galleries", galleries); + public String gallery() { return themeService.render("gallery"); } diff --git a/src/main/resources/templates/themes/anatole/gallery.ftl b/src/main/resources/templates/themes/anatole/gallery.ftl index 218a3e687..dc7314262 100644 --- a/src/main/resources/templates/themes/anatole/gallery.ftl +++ b/src/main/resources/templates/themes/anatole/gallery.ftl @@ -23,15 +23,17 @@
- <#if galleries?size gt 0> - <#list galleries as gallery> -
- ${gallery.description} -

${gallery.name}

-

${gallery.takeTime!}

-
- - + <@galleryTag method="list"> + <#if galleries?size gt 0> + <#list galleries as gallery> +
+ ${gallery.description} +

${gallery.name}

+

${gallery.takeTime!}

+
+ + +