diff --git a/src/main/java/run/halo/app/controller/admin/api/SheetController.java b/src/main/java/run/halo/app/controller/admin/api/SheetController.java index 61a2981c7..2a41b7b5b 100644 --- a/src/main/java/run/halo/app/controller/admin/api/SheetController.java +++ b/src/main/java/run/halo/app/controller/admin/api/SheetController.java @@ -8,9 +8,11 @@ import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.*; import run.halo.app.cache.StringCacheStore; import run.halo.app.model.dto.InternalSheetDTO; +import run.halo.app.model.dto.post.BasePostDetailDTO; import run.halo.app.model.dto.post.BasePostMinimalDTO; import run.halo.app.model.entity.Sheet; import run.halo.app.model.enums.PostStatus; +import run.halo.app.model.params.PostContentParam; import run.halo.app.model.params.SheetParam; import run.halo.app.model.vo.SheetDetailVO; import run.halo.app.model.vo.SheetListVO; @@ -108,6 +110,17 @@ public class SheetController { sheetService.update(sheet); } + @PutMapping("{sheetId:\\d+}/status/draft/content") + @ApiOperation("Updates draft") + public BasePostDetailDTO updateDraftBy( + @PathVariable("sheetId") Integer sheetId, + @RequestBody PostContentParam contentParam) { + // Update draft content + Sheet sheet = sheetService.updateDraftContent(contentParam.getContent(), sheetId); + + return new BasePostDetailDTO().convertFrom(sheet); + } + @DeleteMapping("{sheetId:\\d+}") @ApiOperation("Deletes a sheet") public SheetDetailVO deleteBy(@PathVariable("sheetId") Integer sheetId) { 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 a54e38589..197e13d2d 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 @@ -13,6 +13,7 @@ import run.halo.app.model.entity.Category; import run.halo.app.model.entity.Post; import run.halo.app.model.entity.PostMeta; import run.halo.app.model.entity.Tag; +import run.halo.app.model.enums.PostEditorType; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.support.HaloConst; import run.halo.app.model.vo.AdjacentPostVO; @@ -84,7 +85,11 @@ public class PostModel { if (!cachedToken.equals(token)) { throw new ForbiddenException("您没有该文章的访问权限"); } - post.setFormatContent(MarkdownUtils.renderHtml(post.getOriginalContent())); + if (post.getEditorType().equals(PostEditorType.MARKDOWN)) { + post.setFormatContent(MarkdownUtils.renderHtml(post.getOriginalContent())); + } else { + post.setFormatContent(post.getOriginalContent()); + } } postService.publishVisitEvent(post.getId()); diff --git a/src/main/java/run/halo/app/controller/content/model/SheetModel.java b/src/main/java/run/halo/app/controller/content/model/SheetModel.java index faafba7f8..f6c83f1e3 100644 --- a/src/main/java/run/halo/app/controller/content/model/SheetModel.java +++ b/src/main/java/run/halo/app/controller/content/model/SheetModel.java @@ -7,6 +7,7 @@ import org.springframework.ui.Model; import run.halo.app.cache.StringCacheStore; import run.halo.app.exception.ForbiddenException; import run.halo.app.model.entity.Sheet; +import run.halo.app.model.enums.PostEditorType; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.support.HaloConst; import run.halo.app.model.vo.SheetDetailVO; @@ -46,7 +47,11 @@ public class SheetModel { throw new ForbiddenException("您没有该页面的访问权限"); } // render markdown to html when preview sheet - sheet.setFormatContent(MarkdownUtils.renderHtml(sheet.getOriginalContent())); + if (sheet.getEditorType().equals(PostEditorType.MARKDOWN)) { + sheet.setFormatContent(MarkdownUtils.renderHtml(sheet.getOriginalContent())); + } else { + sheet.setFormatContent(sheet.getOriginalContent()); + } } sheetService.publishVisitEvent(sheet.getId()); diff --git a/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java b/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java index 63948738a..d561b35ae 100644 --- a/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java +++ b/src/main/java/run/halo/app/model/dto/post/BasePostMinimalDTO.java @@ -5,6 +5,7 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import run.halo.app.model.dto.base.OutputConverter; import run.halo.app.model.entity.BasePost; +import run.halo.app.model.enums.PostEditorType; import run.halo.app.model.enums.PostStatus; import java.util.Date; @@ -32,6 +33,8 @@ public class BasePostMinimalDTO implements OutputConverter { + + /** + * Markdown editor. + */ + MARKDOWN(0), + + /** + * Rich text editor. + */ + RICHTEXT(1); + + private Integer value; + + PostEditorType(Integer value) { + this.value = value; + } + + /** + * Get enum value. + * + * @return enum value + */ + @Override + public Integer getValue() { + return value; + } +} diff --git a/src/main/java/run/halo/app/model/params/PostParam.java b/src/main/java/run/halo/app/model/params/PostParam.java index 686ed79be..09befd8d3 100644 --- a/src/main/java/run/halo/app/model/params/PostParam.java +++ b/src/main/java/run/halo/app/model/params/PostParam.java @@ -7,6 +7,7 @@ import run.halo.app.model.dto.base.InputConverter; import run.halo.app.model.entity.Post; import run.halo.app.model.entity.PostMeta; import run.halo.app.model.enums.PostCreateFrom; +import run.halo.app.model.enums.PostEditorType; import run.halo.app.model.enums.PostStatus; import run.halo.app.utils.SlugUtils; @@ -40,6 +41,8 @@ public class PostParam implements InputConverter { @Size(max = 255, message = "文章别名的字符长度不能超过 {max}") private String slug; + private PostEditorType editorType; + private String originalContent; private String summary; @@ -76,6 +79,10 @@ public class PostParam implements InputConverter { thumbnail = ""; } + if (null == editorType) { + editorType = PostEditorType.MARKDOWN; + } + return InputConverter.super.convertTo(); } @@ -87,6 +94,10 @@ public class PostParam implements InputConverter { thumbnail = ""; } + if (null == editorType) { + editorType = PostEditorType.MARKDOWN; + } + InputConverter.super.update(post); } diff --git a/src/main/java/run/halo/app/model/params/SheetParam.java b/src/main/java/run/halo/app/model/params/SheetParam.java index 0a751a4f4..bc67f4027 100644 --- a/src/main/java/run/halo/app/model/params/SheetParam.java +++ b/src/main/java/run/halo/app/model/params/SheetParam.java @@ -6,6 +6,7 @@ import org.springframework.util.CollectionUtils; import run.halo.app.model.dto.base.InputConverter; import run.halo.app.model.entity.Sheet; import run.halo.app.model.entity.SheetMeta; +import run.halo.app.model.enums.PostEditorType; import run.halo.app.model.enums.PostStatus; import run.halo.app.utils.SlugUtils; @@ -38,6 +39,8 @@ public class SheetParam implements InputConverter { @Size(max = 255, message = "页面别名的字符长度不能超过 {max}") private String slug; + private PostEditorType editorType; + private String originalContent; private String summary; @@ -68,6 +71,10 @@ public class SheetParam implements InputConverter { thumbnail = ""; } + if (null == editorType) { + editorType = PostEditorType.MARKDOWN; + } + return InputConverter.super.convertTo(); } @@ -79,6 +86,10 @@ public class SheetParam implements InputConverter { thumbnail = ""; } + if (null == editorType) { + editorType = PostEditorType.MARKDOWN; + } + InputConverter.super.update(sheet); } diff --git a/src/main/java/run/halo/app/model/properties/OtherProperties.java b/src/main/java/run/halo/app/model/properties/OtherProperties.java index 6c57a7eeb..8d19597e6 100644 --- a/src/main/java/run/halo/app/model/properties/OtherProperties.java +++ b/src/main/java/run/halo/app/model/properties/OtherProperties.java @@ -1,5 +1,7 @@ package run.halo.app.model.properties; +import run.halo.app.model.enums.PostEditorType; + /** * Other properties. * @@ -27,7 +29,12 @@ public enum OtherProperties implements PropertyEnum { /** * Global absolute path enabled. */ - GLOBAL_ABSOLUTE_PATH_ENABLED("global_absolute_path_enabled", Boolean.class, "true"); + GLOBAL_ABSOLUTE_PATH_ENABLED("global_absolute_path_enabled", Boolean.class, "true"), + + /** + * Default post editor. + */ + DEFAULT_EDITOR("default_editor", PostEditorType.class, PostEditorType.MARKDOWN.name()); private final String value; 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 4ff3538ee..d6c3ce1b1 100644 --- a/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/BasePostServiceImpl.java @@ -18,6 +18,7 @@ import run.halo.app.model.dto.post.BasePostDetailDTO; import run.halo.app.model.dto.post.BasePostMinimalDTO; import run.halo.app.model.dto.post.BasePostSimpleDTO; import run.halo.app.model.entity.BasePost; +import run.halo.app.model.enums.PostEditorType; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.properties.PostProperties; import run.halo.app.repository.base.BasePostRepository; @@ -231,8 +232,10 @@ public abstract class BasePostServiceImpl extends Abstrac Assert.notNull(post, "Post must not be null"); // Render content - if (post.getStatus() == PostStatus.PUBLISHED) { + if (post.getEditorType().equals(PostEditorType.MARKDOWN)) { post.setFormatContent(MarkdownUtils.renderHtml(post.getOriginalContent())); + } else { + post.setFormatContent(post.getOriginalContent()); } // if password is not empty,change status to intimate 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 fa92e5cd3..bb4bfe597 100644 --- a/src/main/java/run/halo/app/service/impl/PostServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/PostServiceImpl.java @@ -27,6 +27,7 @@ import run.halo.app.model.entity.*; import run.halo.app.model.enums.LogType; import run.halo.app.model.enums.PostPermalinkType; import run.halo.app.model.enums.PostStatus; +import run.halo.app.model.params.PostParam; import run.halo.app.model.params.PostQuery; import run.halo.app.model.properties.PostProperties; import run.halo.app.model.vo.*; @@ -309,7 +310,7 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe // Gets frontMatter Map> frontMatter = MarkdownUtils.getFrontMatter(markdown); - Post post = new Post(); + PostParam post = new PostParam(); List elementValue; @@ -328,9 +329,6 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe case "date": post.setCreateTime(DateUtil.parse(ele)); break; - case "updated": - post.setUpdateTime(DateUtil.parse(ele)); - break; case "permalink": post.setSlug(ele); break; @@ -385,7 +383,7 @@ public class PostServiceImpl extends BasePostServiceImpl implements PostSe post.setOriginalContent(markdown); - return createBy(post, tagIds, categoryIds, false); + return createBy(post.convertTo(), tagIds, categoryIds, false); } @Override