diff --git a/src/main/java/run/halo/app/controller/content/ContentSearchController.java b/src/main/java/run/halo/app/controller/content/ContentSearchController.java index 0e6fc7565..cd25d5ca0 100644 --- a/src/main/java/run/halo/app/controller/content/ContentSearchController.java +++ b/src/main/java/run/halo/app/controller/content/ContentSearchController.java @@ -1,6 +1,5 @@ package run.halo.app.controller.content; -import cn.hutool.core.util.PageUtil; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -73,49 +72,9 @@ public class ContentSearchController { final Page posts = postService.convertToListVo(postPage); - // TODO remove this variable - final int[] rainbow = PageUtil.rainbow(page, posts.getTotalPages(), 3); - - // Next page and previous page url. - StringBuilder nextPageFullPath = new StringBuilder(); - StringBuilder prePageFullPath = new StringBuilder(); - - if (optionService.isEnabledAbsolutePath()) { - nextPageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - prePageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - } else { - nextPageFullPath.append("/"); - prePageFullPath.append("/"); - } - - nextPageFullPath.append("search"); - prePageFullPath.append("search"); - - nextPageFullPath.append("/page/") - .append(posts.getNumber() + 2) - .append(optionService.getPathSuffix()) - .append("?keyword=") - .append(keyword); - - if (posts.getNumber() == 1) { - prePageFullPath.append("?keyword=") - .append(keyword); - } else { - prePageFullPath.append("/page/") - .append(posts.getNumber()) - .append(optionService.getPathSuffix()) - .append("?keyword=") - .append(keyword); - } - model.addAttribute("is_search", true); model.addAttribute("keyword", keyword); model.addAttribute("posts", posts); - model.addAttribute("rainbow", rainbow); - model.addAttribute("nextPageFullPath", nextPageFullPath.toString()); - model.addAttribute("prePageFullPath", prePageFullPath.toString()); model.addAttribute("meta_keywords", optionService.getSeoKeywords()); model.addAttribute("meta_description", optionService.getSeoDescription()); return themeService.render("search"); diff --git a/src/main/java/run/halo/app/controller/content/model/PostModel.java b/src/main/java/run/halo/app/controller/content/model/PostModel.java index 5660b41ab..1f5201b6a 100644 --- a/src/main/java/run/halo/app/controller/content/model/PostModel.java +++ b/src/main/java/run/halo/app/controller/content/model/PostModel.java @@ -97,7 +97,7 @@ public class PostModel { postService.publishVisitEvent(post.getId()); AdjacentPostVO adjacentPostVO = postService.getAdjacentPosts(post); - adjacentPostVO.getOptionalPrePost().ifPresent(prePost -> model.addAttribute("prePost", postService.convertToDetailVo(prePost))); + adjacentPostVO.getOptionalPrevPost().ifPresent(prevPost -> model.addAttribute("prevPost", postService.convertToDetailVo(prevPost))); adjacentPostVO.getOptionalNextPost().ifPresent(nextPost -> model.addAttribute("nextPost", postService.convertToDetailVo(nextPost))); List categories = postCategoryService.listCategoriesBy(post.getId()); diff --git a/src/main/java/run/halo/app/core/freemarker/tag/CategoryTagDirective.java b/src/main/java/run/halo/app/core/freemarker/tag/CategoryTagDirective.java index b07d0d150..21d924e6b 100644 --- a/src/main/java/run/halo/app/core/freemarker/tag/CategoryTagDirective.java +++ b/src/main/java/run/halo/app/core/freemarker/tag/CategoryTagDirective.java @@ -1,20 +1,15 @@ package run.halo.app.core.freemarker.tag; -import cn.hutool.core.util.PageUtil; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import run.halo.app.model.entity.Category; import run.halo.app.model.support.HaloConst; -import run.halo.app.model.support.Pagination; -import run.halo.app.model.support.RainbowPage; import run.halo.app.service.CategoryService; -import run.halo.app.service.OptionService; import run.halo.app.service.PostCategoryService; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -33,15 +28,11 @@ public class CategoryTagDirective implements TemplateDirectiveModel { private final PostCategoryService postCategoryService; - private final OptionService optionService; - public CategoryTagDirective(Configuration configuration, CategoryService categoryService, - PostCategoryService postCategoryService, - OptionService optionService) { + PostCategoryService postCategoryService) { this.categoryService = categoryService; this.postCategoryService = postCategoryService; - this.optionService = optionService; configuration.setSharedVariable("categoryTag", this); } @@ -63,81 +54,6 @@ public class CategoryTagDirective implements TemplateDirectiveModel { case "count": env.setVariable("count", builder.build().wrap(categoryService.count())); break; - case "pagination": - // Get params - int page = Integer.parseInt(params.get("page").toString()); - int total = Integer.parseInt(params.get("total").toString()); - int display = Integer.parseInt(params.get("display").toString()); - String slug = params.get("slug").toString(); - - // Create pagination object. - Pagination pagination = new Pagination(); - - // Generate next page full path and pre page full path. - StringBuilder nextPageFullPath = new StringBuilder(); - StringBuilder prePageFullPath = new StringBuilder(); - - if (optionService.isEnabledAbsolutePath()) { - nextPageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - prePageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - } else { - nextPageFullPath.append("/"); - prePageFullPath.append("/"); - } - - nextPageFullPath.append(optionService.getCategoriesPrefix()) - .append("/") - .append(slug); - prePageFullPath.append(optionService.getCategoriesPrefix()) - .append("/") - .append(slug); - - nextPageFullPath.append("/page/") - .append(page + 2) - .append(optionService.getPathSuffix()); - - if (page == 1) { - prePageFullPath.append(optionService.getPathSuffix()); - } else { - prePageFullPath.append("/page/") - .append(page) - .append(optionService.getPathSuffix()); - } - - pagination.setNextPageFullPath(nextPageFullPath.toString()); - pagination.setPrePageFullPath(prePageFullPath.toString()); - - // Generate rainbow page number. - int[] rainbow = PageUtil.rainbow(page + 1, total, display); - - List rainbowPages = new ArrayList<>(); - StringBuilder fullPath = new StringBuilder(); - if (optionService.isEnabledAbsolutePath()) { - fullPath.append(optionService.getBlogBaseUrl()); - } - - nextPageFullPath.append("/") - .append(optionService.getCategoriesPrefix()) - .append("/") - .append(slug); - - fullPath.append("/page/"); - - for (int current : rainbow) { - RainbowPage rainbowPage = new RainbowPage(); - rainbowPage.setPage(current); - rainbowPage.setFullPath(fullPath.toString() + current + optionService.getPathSuffix()); - rainbowPage.setIsCurrent(page + 1 == current); - rainbowPages.add(rainbowPage); - } - - pagination.setRainbowPages(rainbowPages); - pagination.setHasNext(total != page + 1); - pagination.setHasPrev(page != 0); - env.setVariable("pagination", builder.build().wrap(pagination)); - break; default: break; } diff --git a/src/main/java/run/halo/app/core/freemarker/tag/JournalTagDirective.java b/src/main/java/run/halo/app/core/freemarker/tag/JournalTagDirective.java deleted file mode 100644 index 61a349e30..000000000 --- a/src/main/java/run/halo/app/core/freemarker/tag/JournalTagDirective.java +++ /dev/null @@ -1,113 +0,0 @@ -package run.halo.app.core.freemarker.tag; - -import cn.hutool.core.util.PageUtil; -import freemarker.core.Environment; -import freemarker.template.*; -import org.springframework.stereotype.Component; -import run.halo.app.model.support.HaloConst; -import run.halo.app.model.support.Pagination; -import run.halo.app.model.support.RainbowPage; -import run.halo.app.service.OptionService; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * @author ryanwang - * @date 2020-03-06 - */ -@Component -public class JournalTagDirective implements TemplateDirectiveModel { - - private final OptionService optionService; - - public JournalTagDirective(Configuration configuration, - OptionService optionService) { - this.optionService = optionService; - configuration.setSharedVariable("journalTag", this); - } - - @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 "pagination": - // Get params - int page = Integer.parseInt(params.get("page").toString()); - int total = Integer.parseInt(params.get("total").toString()); - int display = Integer.parseInt(params.get("display").toString()); - String slug = params.get("slug").toString(); - - // Create pagination object. - Pagination pagination = new Pagination(); - - // Generate next page full path and pre page full path. - StringBuilder nextPageFullPath = new StringBuilder(); - StringBuilder prePageFullPath = new StringBuilder(); - - if (optionService.isEnabledAbsolutePath()) { - nextPageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - prePageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - } else { - nextPageFullPath.append("/"); - prePageFullPath.append("/"); - } - - nextPageFullPath.append(optionService.getJournalsPrefix()); - prePageFullPath.append(optionService.getJournalsPrefix()); - - nextPageFullPath.append("/page/") - .append(page + 2) - .append(optionService.getPathSuffix()); - - if (page == 1) { - prePageFullPath.append(optionService.getPathSuffix()); - } else { - prePageFullPath.append("/page/") - .append(page) - .append(optionService.getPathSuffix()); - } - - pagination.setNextPageFullPath(nextPageFullPath.toString()); - pagination.setPrePageFullPath(prePageFullPath.toString()); - - // Generate rainbow page number. - int[] rainbow = PageUtil.rainbow(page + 1, total, display); - - List rainbowPages = new ArrayList<>(); - StringBuilder fullPath = new StringBuilder(); - if (optionService.isEnabledAbsolutePath()) { - fullPath.append(optionService.getBlogBaseUrl()); - } - - nextPageFullPath.append("/") - .append(optionService.getJournalsPrefix()); - - fullPath.append("/page/"); - - for (int current : rainbow) { - RainbowPage rainbowPage = new RainbowPage(); - rainbowPage.setPage(current); - rainbowPage.setFullPath(fullPath.toString() + current + optionService.getPathSuffix()); - rainbowPage.setIsCurrent(page + 1 == current); - rainbowPages.add(rainbowPage); - } - - pagination.setRainbowPages(rainbowPages); - pagination.setHasNext(total != page + 1); - pagination.setHasPrev(page != 0); - env.setVariable("pagination", builder.build().wrap(pagination)); - break; - default: - break; - } - } - } -} diff --git a/src/main/java/run/halo/app/core/freemarker/tag/PaginationTagDirective.java b/src/main/java/run/halo/app/core/freemarker/tag/PaginationTagDirective.java new file mode 100644 index 000000000..8484d45b9 --- /dev/null +++ b/src/main/java/run/halo/app/core/freemarker/tag/PaginationTagDirective.java @@ -0,0 +1,317 @@ +package run.halo.app.core.freemarker.tag; + +import cn.hutool.core.util.PageUtil; +import freemarker.core.Environment; +import freemarker.template.*; +import org.springframework.stereotype.Component; +import run.halo.app.model.support.HaloConst; +import run.halo.app.model.support.Pagination; +import run.halo.app.model.support.RainbowPage; +import run.halo.app.service.OptionService; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author ryanwang + * @date 2020-03-07 + */ +@Component +public class PaginationTagDirective implements TemplateDirectiveModel { + + private final OptionService optionService; + + public PaginationTagDirective(Configuration configuration, + OptionService optionService) { + this.optionService = optionService; + configuration.setSharedVariable("paginationTag", this); + } + + @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)) { + + // Get params + String method = params.get(HaloConst.METHOD_KEY).toString(); + int page = Integer.parseInt(params.get("page").toString()); + int total = Integer.parseInt(params.get("total").toString()); + int display = Integer.parseInt(params.get("display").toString()); + + // Create pagination object. + Pagination pagination = new Pagination(); + + // Generate next page full path and pre page full path. + StringBuilder nextPageFullPath = new StringBuilder(); + StringBuilder prevPageFullPath = new StringBuilder(); + + if (optionService.isEnabledAbsolutePath()) { + nextPageFullPath.append(optionService.getBlogBaseUrl()); + prevPageFullPath.append(optionService.getBlogBaseUrl()); + } + + int[] rainbow = PageUtil.rainbow(page + 1, total, display); + + List rainbowPages = new ArrayList<>(); + StringBuilder fullPath = new StringBuilder(); + + if (optionService.isEnabledAbsolutePath()) { + fullPath.append(optionService.getBlogBaseUrl()); + } + + String pathSuffix = optionService.getPathSuffix(); + + switch (method) { + case "index": + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix); + + if (page == 1) { + prevPageFullPath.append("/"); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix); + } + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + case "archives": + + nextPageFullPath.append("/") + .append(optionService.getArchivesPrefix()); + prevPageFullPath.append("/") + .append(optionService.getArchivesPrefix()); + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix); + + if (page == 1) { + prevPageFullPath. + append(pathSuffix); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix); + } + + fullPath.append("/") + .append(optionService.getArchivesPrefix()); + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + case "search": + String keyword = params.get("keyword").toString(); + + nextPageFullPath.append("/") + .append("search"); + prevPageFullPath.append("/") + .append("search"); + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix) + .append("?keyword=") + .append(keyword); + + if (page == 1) { + prevPageFullPath.append(pathSuffix) + .append("?keyword=") + .append(keyword); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix) + .append("?keyword=") + .append(keyword); + } + + fullPath.append("/") + .append("search"); + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix + "?keyword=" + keyword); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + case "tagPosts": + String tagSlug = params.get("slug").toString(); + + nextPageFullPath.append("/") + .append(optionService.getTagsPrefix()) + .append("/") + .append(tagSlug); + prevPageFullPath.append("/") + .append(optionService.getTagsPrefix()) + .append("/") + .append(tagSlug); + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix); + + if (page == 1) { + prevPageFullPath.append(pathSuffix); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix); + } + + fullPath.append("/") + .append(optionService.getTagsPrefix()) + .append("/") + .append(tagSlug); + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + case "categoryPosts": + String categorySlug = params.get("slug").toString(); + + nextPageFullPath.append("/") + .append(optionService.getCategoriesPrefix()) + .append("/") + .append(categorySlug); + prevPageFullPath.append("/") + .append(optionService.getCategoriesPrefix()) + .append("/") + .append(categorySlug); + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix); + + if (page == 1) { + prevPageFullPath.append(pathSuffix); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix); + } + + fullPath.append("/") + .append(optionService.getCategoriesPrefix()) + .append("/") + .append(categorySlug); + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + case "photos": + + nextPageFullPath.append("/") + .append(optionService.getPhotosPrefix()); + prevPageFullPath.append("/") + .append(optionService.getPhotosPrefix()); + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix); + + if (page == 1) { + prevPageFullPath.append(pathSuffix); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix); + } + + fullPath.append("/") + .append(optionService.getPhotosPrefix()); + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + case "journals": + + nextPageFullPath.append("/") + .append(optionService.getJournalsPrefix()); + prevPageFullPath.append("/") + .append(optionService.getJournalsPrefix()); + + nextPageFullPath.append("/page/") + .append(page + 2) + .append(pathSuffix); + + if (page == 1) { + prevPageFullPath.append(pathSuffix); + } else { + prevPageFullPath.append("/page/") + .append(page) + .append(pathSuffix); + } + + fullPath.append("/") + .append(optionService.getJournalsPrefix()); + + fullPath.append("/page/"); + + for (int current : rainbow) { + RainbowPage rainbowPage = new RainbowPage(); + rainbowPage.setPage(current); + rainbowPage.setFullPath(fullPath.toString() + current + pathSuffix); + rainbowPage.setIsCurrent(page + 1 == current); + rainbowPages.add(rainbowPage); + } + break; + default: + break; + } + pagination.setNextPageFullPath(nextPageFullPath.toString()); + pagination.setPrevPageFullPath(prevPageFullPath.toString()); + pagination.setRainbowPages(rainbowPages); + pagination.setHasNext(total != page + 1); + pagination.setHasPrev(page != 0); + env.setVariable("pagination", builder.build().wrap(pagination)); + } + body.render(env.getOut()); + } +} diff --git a/src/main/java/run/halo/app/core/freemarker/tag/PhotoTagDirective.java b/src/main/java/run/halo/app/core/freemarker/tag/PhotoTagDirective.java index eac321623..0280e90e2 100644 --- a/src/main/java/run/halo/app/core/freemarker/tag/PhotoTagDirective.java +++ b/src/main/java/run/halo/app/core/freemarker/tag/PhotoTagDirective.java @@ -1,19 +1,13 @@ package run.halo.app.core.freemarker.tag; -import cn.hutool.core.util.PageUtil; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import run.halo.app.model.support.HaloConst; -import run.halo.app.model.support.Pagination; -import run.halo.app.model.support.RainbowPage; -import run.halo.app.service.OptionService; import run.halo.app.service.PhotoService; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import static org.springframework.data.domain.Sort.Direction.DESC; @@ -29,11 +23,8 @@ public class PhotoTagDirective implements TemplateDirectiveModel { private final PhotoService photoService; - private final OptionService optionService; - - public PhotoTagDirective(Configuration configuration, PhotoService photoService, OptionService optionService) { + public PhotoTagDirective(Configuration configuration, PhotoService photoService) { this.photoService = photoService; - this.optionService = optionService; configuration.setSharedVariable("photoTag", this); } @@ -57,75 +48,6 @@ public class PhotoTagDirective implements TemplateDirectiveModel { case "count": env.setVariable("count", builder.build().wrap(photoService.count())); break; - case "pagination": - // Get params - int page = Integer.parseInt(params.get("page").toString()); - int total = Integer.parseInt(params.get("total").toString()); - int display = Integer.parseInt(params.get("display").toString()); - String slug = params.get("slug").toString(); - - // Create pagination object. - Pagination pagination = new Pagination(); - - // Generate next page full path and pre page full path. - StringBuilder nextPageFullPath = new StringBuilder(); - StringBuilder prePageFullPath = new StringBuilder(); - - if (optionService.isEnabledAbsolutePath()) { - nextPageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - prePageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - } else { - nextPageFullPath.append("/"); - prePageFullPath.append("/"); - } - - nextPageFullPath.append(optionService.getPhotosPrefix()); - prePageFullPath.append(optionService.getPhotosPrefix()); - - nextPageFullPath.append("/page/") - .append(page + 2) - .append(optionService.getPathSuffix()); - - if (page == 1) { - prePageFullPath.append(optionService.getPathSuffix()); - } else { - prePageFullPath.append("/page/") - .append(page) - .append(optionService.getPathSuffix()); - } - - pagination.setNextPageFullPath(nextPageFullPath.toString()); - pagination.setPrePageFullPath(prePageFullPath.toString()); - - // Generate rainbow page number. - int[] rainbow = PageUtil.rainbow(page + 1, total, display); - - List rainbowPages = new ArrayList<>(); - StringBuilder fullPath = new StringBuilder(); - if (optionService.isEnabledAbsolutePath()) { - fullPath.append(optionService.getBlogBaseUrl()); - } - - nextPageFullPath.append("/") - .append(optionService.getPhotosPrefix()); - - fullPath.append("/page/"); - - for (int current : rainbow) { - RainbowPage rainbowPage = new RainbowPage(); - rainbowPage.setPage(current); - rainbowPage.setFullPath(fullPath.toString() + current + optionService.getPathSuffix()); - rainbowPage.setIsCurrent(page + 1 == current); - rainbowPages.add(rainbowPage); - } - - pagination.setRainbowPages(rainbowPages); - pagination.setHasNext(total != page + 1); - pagination.setHasPrev(page != 0); - env.setVariable("pagination", builder.build().wrap(pagination)); - break; default: break; } diff --git a/src/main/java/run/halo/app/core/freemarker/tag/PostTagDirective.java b/src/main/java/run/halo/app/core/freemarker/tag/PostTagDirective.java index 32a2ae2ce..4e15f8a25 100644 --- a/src/main/java/run/halo/app/core/freemarker/tag/PostTagDirective.java +++ b/src/main/java/run/halo/app/core/freemarker/tag/PostTagDirective.java @@ -1,21 +1,16 @@ package run.halo.app.core.freemarker.tag; -import cn.hutool.core.util.PageUtil; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.stereotype.Component; import run.halo.app.model.entity.Post; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.support.HaloConst; -import run.halo.app.model.support.Pagination; -import run.halo.app.model.support.RainbowPage; -import run.halo.app.service.OptionService; import run.halo.app.service.PostCategoryService; import run.halo.app.service.PostService; import run.halo.app.service.PostTagService; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -30,19 +25,15 @@ public class PostTagDirective implements TemplateDirectiveModel { private final PostService postService; - private final OptionService optionService; - private final PostTagService postTagService; private final PostCategoryService postCategoryService; public PostTagDirective(Configuration configuration, PostService postService, - OptionService optionService, PostTagService postTagService, PostCategoryService postCategoryService) { this.postService = postService; - this.optionService = optionService; this.postTagService = postTagService; this.postCategoryService = postCategoryService; configuration.setSharedVariable("postTag", this); @@ -88,77 +79,6 @@ public class PostTagDirective implements TemplateDirectiveModel { String tagSlug = params.get("tagSlug").toString(); env.setVariable("posts", builder.build().wrap(postService.convertToListVo(postTagService.listPostsBy(tagSlug, PostStatus.PUBLISHED)))); break; - case "pagination": - - // Get params - int page = Integer.parseInt(params.get("page").toString()); - int total = Integer.parseInt(params.get("total").toString()); - int display = Integer.parseInt(params.get("display").toString()); - boolean isArchives = Boolean.parseBoolean(params.get("isArchives").toString()); - - // Create pagination object. - Pagination pagination = new Pagination(); - - // Generate next page full path and pre page full path. - StringBuilder nextPageFullPath = new StringBuilder(); - StringBuilder prePageFullPath = new StringBuilder(); - - if (optionService.isEnabledAbsolutePath()) { - nextPageFullPath.append(optionService.getBlogBaseUrl()); - prePageFullPath.append(optionService.getBlogBaseUrl()); - } - - if (isArchives) { - nextPageFullPath.append("/") - .append(optionService.getArchivesPrefix()); - prePageFullPath.append("/") - .append(optionService.getArchivesPrefix()); - } - - nextPageFullPath.append("/page/") - .append(page + 2) - .append(optionService.getPathSuffix()); - - if (page == 1) { - prePageFullPath.append("/"); - } else { - prePageFullPath.append("/page/") - .append(page) - .append(optionService.getPathSuffix()); - } - - pagination.setNextPageFullPath(nextPageFullPath.toString()); - pagination.setPrePageFullPath(prePageFullPath.toString()); - - // Generate rainbow page number. - int[] rainbow = PageUtil.rainbow(page + 1, total, display); - - List rainbowPages = new ArrayList<>(); - StringBuilder fullPath = new StringBuilder(); - if (optionService.isEnabledAbsolutePath()) { - fullPath.append(optionService.getBlogBaseUrl()); - } - - if (isArchives) { - fullPath.append("/") - .append(optionService.getArchivesPrefix()); - } - - fullPath.append("/page/"); - - for (int current : rainbow) { - RainbowPage rainbowPage = new RainbowPage(); - rainbowPage.setPage(current); - rainbowPage.setFullPath(fullPath.toString() + current + optionService.getPathSuffix()); - rainbowPage.setIsCurrent(page + 1 == current); - rainbowPages.add(rainbowPage); - } - - pagination.setRainbowPages(rainbowPages); - pagination.setHasNext(total != page + 1); - pagination.setHasPrev(page != 0); - env.setVariable("pagination", builder.build().wrap(pagination)); - break; default: break; } diff --git a/src/main/java/run/halo/app/core/freemarker/tag/TagTagDirective.java b/src/main/java/run/halo/app/core/freemarker/tag/TagTagDirective.java index d73fa8e92..e436f3a31 100644 --- a/src/main/java/run/halo/app/core/freemarker/tag/TagTagDirective.java +++ b/src/main/java/run/halo/app/core/freemarker/tag/TagTagDirective.java @@ -1,20 +1,15 @@ package run.halo.app.core.freemarker.tag; -import cn.hutool.core.util.PageUtil; import freemarker.core.Environment; import freemarker.template.*; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import run.halo.app.model.entity.Tag; import run.halo.app.model.support.HaloConst; -import run.halo.app.model.support.Pagination; -import run.halo.app.model.support.RainbowPage; -import run.halo.app.service.OptionService; import run.halo.app.service.PostTagService; import run.halo.app.service.TagService; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -33,15 +28,11 @@ public class TagTagDirective implements TemplateDirectiveModel { private final PostTagService postTagService; - private final OptionService optionService; - public TagTagDirective(Configuration configuration, TagService tagService, - PostTagService postTagService, - OptionService optionService) { + PostTagService postTagService) { this.tagService = tagService; this.postTagService = postTagService; - this.optionService = optionService; configuration.setSharedVariable("tagTag", this); } @@ -63,81 +54,6 @@ public class TagTagDirective implements TemplateDirectiveModel { case "count": env.setVariable("count", builder.build().wrap(tagService.count())); break; - case "pagination": - // Get params - int page = Integer.parseInt(params.get("page").toString()); - int total = Integer.parseInt(params.get("total").toString()); - int display = Integer.parseInt(params.get("display").toString()); - String slug = params.get("slug").toString(); - - // Create pagination object. - Pagination pagination = new Pagination(); - - // Generate next page full path and pre page full path. - StringBuilder nextPageFullPath = new StringBuilder(); - StringBuilder prePageFullPath = new StringBuilder(); - - if (optionService.isEnabledAbsolutePath()) { - nextPageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - prePageFullPath.append(optionService.getBlogBaseUrl()) - .append("/"); - } else { - nextPageFullPath.append("/"); - prePageFullPath.append("/"); - } - - nextPageFullPath.append(optionService.getTagsPrefix()) - .append("/") - .append(slug); - prePageFullPath.append(optionService.getTagsPrefix()) - .append("/") - .append(slug); - - nextPageFullPath.append("/page/") - .append(page + 2) - .append(optionService.getPathSuffix()); - - if (page == 1) { - prePageFullPath.append(optionService.getPathSuffix()); - } else { - prePageFullPath.append("/page/") - .append(page) - .append(optionService.getPathSuffix()); - } - - pagination.setNextPageFullPath(nextPageFullPath.toString()); - pagination.setPrePageFullPath(prePageFullPath.toString()); - - // Generate rainbow page number. - int[] rainbow = PageUtil.rainbow(page + 1, total, display); - - List rainbowPages = new ArrayList<>(); - StringBuilder fullPath = new StringBuilder(); - if (optionService.isEnabledAbsolutePath()) { - fullPath.append(optionService.getBlogBaseUrl()); - } - - nextPageFullPath.append("/") - .append(optionService.getTagsPrefix()) - .append("/") - .append(slug); - - fullPath.append("/page/"); - - for (int current : rainbow) { - RainbowPage rainbowPage = new RainbowPage(); - rainbowPage.setPage(current); - rainbowPage.setFullPath(fullPath.toString() + current + optionService.getPathSuffix()); - rainbowPage.setIsCurrent(page + 1 == current); - rainbowPages.add(rainbowPage); - } - - pagination.setRainbowPages(rainbowPages); - pagination.setHasNext(total != page + 1); - pagination.setHasPrev(page != 0); - env.setVariable("pagination", builder.build().wrap(pagination)); - break; default: break; } diff --git a/src/main/java/run/halo/app/model/support/Pagination.java b/src/main/java/run/halo/app/model/support/Pagination.java index 8f927a6f1..1459cd286 100644 --- a/src/main/java/run/halo/app/model/support/Pagination.java +++ b/src/main/java/run/halo/app/model/support/Pagination.java @@ -15,7 +15,7 @@ public class Pagination { private String nextPageFullPath; - private String prePageFullPath; + private String prevPageFullPath; private Boolean hasPrev; diff --git a/src/main/java/run/halo/app/model/vo/AdjacentPostVO.java b/src/main/java/run/halo/app/model/vo/AdjacentPostVO.java index 21337c068..fff329dfe 100644 --- a/src/main/java/run/halo/app/model/vo/AdjacentPostVO.java +++ b/src/main/java/run/halo/app/model/vo/AdjacentPostVO.java @@ -20,11 +20,11 @@ import java.util.Optional; @Builder public class AdjacentPostVO { - private Post prePost; + private Post prevPost; private Post nextPost; - public Optional getOptionalPrePost() { - return Optional.ofNullable(this.getPrePost()); + public Optional getOptionalPrevPost() { + return Optional.ofNullable(this.getPrevPost()); } public Optional getOptionalNextPost() { diff --git a/src/main/java/run/halo/app/service/PostService.java b/src/main/java/run/halo/app/service/PostService.java index 587ed381c..f08a9dde6 100755 --- a/src/main/java/run/halo/app/service/PostService.java +++ b/src/main/java/run/halo/app/service/PostService.java @@ -257,8 +257,8 @@ public interface PostService extends BasePostService { * Gets pre && next post. * * @param currentPost post must not be null - * @return AdjacentPostVO. it contains prePost and nextPost. - * AdjacentPostVO will not be null. But prePost and nextPost may be null. + * @return AdjacentPostVO. it contains prevPost and nextPost. + * AdjacentPostVO will not be null. But prevPost and nextPost may be null. */ @NotNull AdjacentPostVO getAdjacentPosts(Post currentPost); diff --git a/src/main/java/run/halo/app/service/base/BasePostService.java b/src/main/java/run/halo/app/service/base/BasePostService.java index 6b01128f9..6a3b4b27a 100644 --- a/src/main/java/run/halo/app/service/base/BasePostService.java +++ b/src/main/java/run/halo/app/service/base/BasePostService.java @@ -91,7 +91,7 @@ public interface BasePostService extends CrudService listPrePosts(@NonNull Date date, int size); + List listPrevPosts(@NonNull Date date, int size); /** * Lits next posts. @@ -110,7 +110,7 @@ public interface BasePostService extends CrudService getPrePost(@NonNull Date date); + Optional getPrevPost(@NonNull Date date); /** * Gets next post. diff --git a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java index ce3590281..ceb529fb1 100644 --- a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java @@ -114,7 +114,7 @@ public abstract class BasePostServiceImpl extends Abstrac @Override - public List listPrePosts(Date date, int size) { + public List listPrevPosts(Date date, int size) { Assert.notNull(date, "Date must not be null"); return basePostRepository.findAllByStatusAndCreateTimeAfter(PostStatus.PUBLISHED, @@ -134,8 +134,8 @@ public abstract class BasePostServiceImpl extends Abstrac } @Override - public Optional getPrePost(Date date) { - List posts = listPrePosts(date, 1); + public Optional getPrevPost(Date date) { + List posts = listPrevPosts(date, 1); return CollectionUtils.isEmpty(posts) ? Optional.empty() : Optional.of(posts.get(0)); } diff --git a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java index 63da40e2f..a2f3b4c43 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -853,7 +853,7 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe // setup pre if (index > 0) { - adjacentPostVO.setPrePost(postList.get(index - 1)); + adjacentPostVO.setPrevPost(postList.get(index - 1)); } // setup next if (index < postList.size() - 1) { diff --git a/src/main/java/run/halo/app/service/impl/StaticPageServiceImpl.java b/src/main/java/run/halo/app/service/impl/StaticPageServiceImpl.java index 1d044808d..6c07c848a 100644 --- a/src/main/java/run/halo/app/service/impl/StaticPageServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/StaticPageServiceImpl.java @@ -332,7 +332,7 @@ public class StaticPageServiceImpl implements StaticPageService { ModelMap model = new ModelMap(); AdjacentPostVO adjacentPostVO = postService.getAdjacentPosts(post); - adjacentPostVO.getOptionalPrePost().ifPresent(prePost -> model.addAttribute("prePost", prePost)); + adjacentPostVO.getOptionalPrevPost().ifPresent(prevPost -> model.addAttribute("prevPost", prevPost)); adjacentPostVO.getOptionalNextPost().ifPresent(nextPost -> model.addAttribute("nextPost", nextPost)); List categories = postCategoryService.listCategoriesBy(post.getId()); diff --git a/src/main/resources/templates/themes/anatole b/src/main/resources/templates/themes/anatole index b1701a856..c0309ef9c 160000 --- a/src/main/resources/templates/themes/anatole +++ b/src/main/resources/templates/themes/anatole @@ -1 +1 @@ -Subproject commit b1701a85685413c0b3ace8cab21bfe49ffb658bf +Subproject commit c0309ef9c8607cddab14ce6005168cb7b19ef066