mirror of https://github.com/halo-dev/halo
Return post summary for listing
parent
1e15f21e88
commit
30f21c50ab
|
@ -7,6 +7,7 @@ import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import run.halo.app.exception.AlreadyExistsException;
|
import run.halo.app.exception.AlreadyExistsException;
|
||||||
|
@ -17,7 +18,9 @@ import run.halo.app.model.dto.post.BasePostMinimalDTO;
|
||||||
import run.halo.app.model.dto.post.BasePostSimpleDTO;
|
import run.halo.app.model.dto.post.BasePostSimpleDTO;
|
||||||
import run.halo.app.model.entity.BasePost;
|
import run.halo.app.model.entity.BasePost;
|
||||||
import run.halo.app.model.enums.PostStatus;
|
import run.halo.app.model.enums.PostStatus;
|
||||||
|
import run.halo.app.model.properties.PostProperties;
|
||||||
import run.halo.app.repository.base.BasePostRepository;
|
import run.halo.app.repository.base.BasePostRepository;
|
||||||
|
import run.halo.app.service.OptionService;
|
||||||
import run.halo.app.service.base.AbstractCrudService;
|
import run.halo.app.service.base.AbstractCrudService;
|
||||||
import run.halo.app.service.base.BasePostService;
|
import run.halo.app.service.base.BasePostService;
|
||||||
import run.halo.app.utils.DateUtils;
|
import run.halo.app.utils.DateUtils;
|
||||||
|
@ -44,9 +47,13 @@ public abstract class BasePostServiceImpl<POST extends BasePost> extends Abstrac
|
||||||
|
|
||||||
private final BasePostRepository<POST> basePostRepository;
|
private final BasePostRepository<POST> basePostRepository;
|
||||||
|
|
||||||
public BasePostServiceImpl(BasePostRepository<POST> basePostRepository) {
|
private final OptionService optionService;
|
||||||
|
|
||||||
|
public BasePostServiceImpl(BasePostRepository<POST> basePostRepository,
|
||||||
|
OptionService optionService) {
|
||||||
super(basePostRepository);
|
super(basePostRepository);
|
||||||
this.basePostRepository = basePostRepository;
|
this.basePostRepository = basePostRepository;
|
||||||
|
this.optionService = optionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -264,7 +271,14 @@ public abstract class BasePostServiceImpl<POST extends BasePost> extends Abstrac
|
||||||
public BasePostSimpleDTO convertToSimple(POST post) {
|
public BasePostSimpleDTO convertToSimple(POST post) {
|
||||||
Assert.notNull(post, "Post must not be null");
|
Assert.notNull(post, "Post must not be null");
|
||||||
|
|
||||||
return new BasePostSimpleDTO().convertFrom(post);
|
BasePostSimpleDTO basePostSimpleDTO = new BasePostSimpleDTO().convertFrom(post);
|
||||||
|
|
||||||
|
// Set summary
|
||||||
|
if (StringUtils.isBlank(basePostSimpleDTO.getSummary())) {
|
||||||
|
basePostSimpleDTO.setSummary(convertToSummary(post.getOriginalContent()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return basePostSimpleDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -331,4 +345,17 @@ public abstract class BasePostServiceImpl<POST extends BasePost> extends Abstrac
|
||||||
throw new AlreadyExistsException("The post url " + post.getUrl() + " has been exist");
|
throw new AlreadyExistsException("The post url " + post.getUrl() + " has been exist");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
protected String convertToSummary(@Nullable String markdownContent) {
|
||||||
|
// Render text content
|
||||||
|
String textContent = MarkdownUtils.renderText(markdownContent);
|
||||||
|
|
||||||
|
// Get summary length
|
||||||
|
Integer summaryLength = optionService.getByPropertyOrDefault(PostProperties.SUMMARY_LENGTH, Integer.class, 150);
|
||||||
|
|
||||||
|
// Set summary
|
||||||
|
return StringUtils.substring(textContent, 0, summaryLength);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,8 +67,9 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
||||||
PostTagService postTagService,
|
PostTagService postTagService,
|
||||||
PostCategoryService postCategoryService,
|
PostCategoryService postCategoryService,
|
||||||
PostCommentService postCommentService,
|
PostCommentService postCommentService,
|
||||||
ApplicationEventPublisher eventPublisher) {
|
ApplicationEventPublisher eventPublisher,
|
||||||
super(postRepository);
|
OptionService optionService) {
|
||||||
|
super(postRepository, optionService);
|
||||||
this.postRepository = postRepository;
|
this.postRepository = postRepository;
|
||||||
this.tagService = tagService;
|
this.tagService = tagService;
|
||||||
this.categoryService = categoryService;
|
this.categoryService = categoryService;
|
||||||
|
@ -333,6 +334,11 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
||||||
return postPage.map(post -> {
|
return postPage.map(post -> {
|
||||||
PostListVO postListVO = new PostListVO().convertFrom(post);
|
PostListVO postListVO = new PostListVO().convertFrom(post);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(postListVO.getSummary())) {
|
||||||
|
// Set summary
|
||||||
|
postListVO.setSummary(convertToSummary(post.getOriginalContent()));
|
||||||
|
}
|
||||||
|
|
||||||
Optional.ofNullable(tagListMap.get(post.getId())).orElseGet(LinkedList::new);
|
Optional.ofNullable(tagListMap.get(post.getId())).orElseGet(LinkedList::new);
|
||||||
|
|
||||||
// Set tags
|
// Set tags
|
||||||
|
|
|
@ -10,6 +10,7 @@ import run.halo.app.model.entity.Sheet;
|
||||||
import run.halo.app.model.enums.PostStatus;
|
import run.halo.app.model.enums.PostStatus;
|
||||||
import run.halo.app.model.vo.SheetListVO;
|
import run.halo.app.model.vo.SheetListVO;
|
||||||
import run.halo.app.repository.SheetRepository;
|
import run.halo.app.repository.SheetRepository;
|
||||||
|
import run.halo.app.service.OptionService;
|
||||||
import run.halo.app.service.SheetCommentService;
|
import run.halo.app.service.SheetCommentService;
|
||||||
import run.halo.app.service.SheetService;
|
import run.halo.app.service.SheetService;
|
||||||
import run.halo.app.utils.ServiceUtils;
|
import run.halo.app.utils.ServiceUtils;
|
||||||
|
@ -35,8 +36,9 @@ public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements Shee
|
||||||
|
|
||||||
public SheetServiceImpl(SheetRepository sheetRepository,
|
public SheetServiceImpl(SheetRepository sheetRepository,
|
||||||
ApplicationEventPublisher eventPublisher,
|
ApplicationEventPublisher eventPublisher,
|
||||||
SheetCommentService sheetCommentService) {
|
SheetCommentService sheetCommentService,
|
||||||
super(sheetRepository);
|
OptionService optionService) {
|
||||||
|
super(sheetRepository, optionService);
|
||||||
this.sheetRepository = sheetRepository;
|
this.sheetRepository = sheetRepository;
|
||||||
this.eventPublisher = eventPublisher;
|
this.eventPublisher = eventPublisher;
|
||||||
this.sheetCommentService = sheetCommentService;
|
this.sheetCommentService = sheetCommentService;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package run.halo.app.utils;
|
package run.halo.app.utils;
|
||||||
|
|
||||||
import run.halo.app.model.support.HaloConst;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.commonmark.Extension;
|
import org.commonmark.Extension;
|
||||||
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
|
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
|
||||||
import org.commonmark.ext.front.matter.YamlFrontMatterVisitor;
|
import org.commonmark.ext.front.matter.YamlFrontMatterVisitor;
|
||||||
|
@ -8,6 +8,10 @@ import org.commonmark.ext.gfm.tables.TablesExtension;
|
||||||
import org.commonmark.node.Node;
|
import org.commonmark.node.Node;
|
||||||
import org.commonmark.parser.Parser;
|
import org.commonmark.parser.Parser;
|
||||||
import org.commonmark.renderer.html.HtmlRenderer;
|
import org.commonmark.renderer.html.HtmlRenderer;
|
||||||
|
import org.commonmark.renderer.text.TextContentRenderer;
|
||||||
|
import org.springframework.lang.NonNull;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
import run.halo.app.model.support.HaloConst;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -42,6 +46,11 @@ public class MarkdownUtils {
|
||||||
*/
|
*/
|
||||||
private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build();
|
private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render text content
|
||||||
|
*/
|
||||||
|
private static final TextContentRenderer TEXT_CONTENT_RENDERER = TextContentRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render Markdown content
|
* Render Markdown content
|
||||||
*
|
*
|
||||||
|
@ -67,6 +76,21 @@ public class MarkdownUtils {
|
||||||
return renderContent;
|
return renderContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render text content.
|
||||||
|
*
|
||||||
|
* @param markdownContent markdown content
|
||||||
|
* @return text content or empty string if markdown content is blank
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static String renderText(@Nullable String markdownContent) {
|
||||||
|
if (StringUtils.isBlank(markdownContent)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return TEXT_CONTENT_RENDERER.render(PARSER.parse(markdownContent));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get front-matter
|
* Get front-matter
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue