diff --git a/src/main/java/cc/ryanc/halo/listener/StartedListener.java b/src/main/java/cc/ryanc/halo/listener/StartedListener.java index 31317e20e..d2d0afe62 100644 --- a/src/main/java/cc/ryanc/halo/listener/StartedListener.java +++ b/src/main/java/cc/ryanc/halo/listener/StartedListener.java @@ -1,14 +1,27 @@ package cc.ryanc.halo.listener; import cc.ryanc.halo.config.properties.HaloProperties; +import cc.ryanc.halo.model.support.HaloConst; +import cc.ryanc.halo.model.support.Theme; +import cc.ryanc.halo.service.OptionService; import cc.ryanc.halo.utils.HaloUtils; +import cc.ryanc.halo.utils.ThemeUtils; +import cc.ryanc.halo.web.controller.content.base.BaseContentController; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import freemarker.template.TemplateModelException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Configuration; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.FileNotFoundException; +import java.nio.charset.Charset; +import java.util.List; /** *
@@ -31,18 +44,54 @@ public class StartedListener implements ApplicationListenerthemes = ThemeUtils.getThemes(); + if (null != themes) { + HaloConst.THEMES = themes; + } + } + + /** + * Get active theme + */ + private void getActiveTheme() { + final String themeValue = optionService.getByKey("theme"); + if (StrUtil.isNotEmpty(themeValue) && !StrUtil.equals(themeValue, null)) { + BaseContentController.THEME = themeValue; + } else { + BaseContentController.THEME = "anatole"; + } + try { + configuration.setSharedVariable("themeName", BaseContentController.THEME); + } catch (TemplateModelException e) { + e.printStackTrace(); + } + } + private void printStartInfo() { // Get server port String serverPort = applicationContext.getEnvironment().getProperty("server.port"); @@ -75,4 +124,16 @@ public class StartedListener implements ApplicationListener OPTIONS = new HashMap<>(); /** - * OwO表情 + * All of the Owo */ - public static Map OWO = new HashMap<>(); + public static JSONObject OWO; /** - * 所有主题 + * All of the themes */ public static List THEMES = new ArrayList<>(); diff --git a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java index b6709a6f0..705ce8e3a 100755 --- a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java +++ b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java @@ -1,6 +1,5 @@ package cc.ryanc.halo.utils; -import cc.ryanc.halo.model.support.Theme; import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.StrUtil; import com.qiniu.common.Zone; @@ -8,7 +7,6 @@ import io.github.biezhi.ome.OhMyEmail; import lombok.extern.slf4j.Slf4j; import org.springframework.lang.NonNull; import org.springframework.util.Assert; -import org.springframework.util.ResourceUtils; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -23,7 +21,9 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.BasicFileAttributes; -import java.util.*; +import java.util.Calendar; +import java.util.Date; +import java.util.Properties; import static cc.ryanc.halo.model.support.HaloConst.OPTIONS; diff --git a/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java b/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java index ceeb434c7..fbc801462 100644 --- a/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java +++ b/src/main/java/cc/ryanc/halo/utils/MarkdownUtils.java @@ -15,33 +15,35 @@ import java.util.Map; import java.util.Set; /** + * Markdown utils + * * @author : RYAN0UP * @date : 2018/11/14 */ public class MarkdownUtils { /** - * Front-matter 插件 + * Front-matter extension */ private static final Set EXTENSIONS_YAML = Collections.singleton(YamlFrontMatterExtension.create()); /** - * Table 插件 + * Table extension */ private static final Set EXTENSIONS_TABLE = Collections.singleton(TablesExtension.create()); /** - * 解析 Markdown 文档 + * Parse Markdown content */ private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build(); /** - * 渲染 HTML 文档 + * Render HTML content */ private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE).build(); /** - * 渲染 Markdown + * Render Markdown content * * @param content content * @return String @@ -66,7 +68,7 @@ public class MarkdownUtils { } /** - * 获取元数据 + * Get front-matter * * @param content content * @return Map diff --git a/src/main/java/cc/ryanc/halo/utils/OwoUtil.java b/src/main/java/cc/ryanc/halo/utils/OwoUtil.java index d1586b0cd..d997e6c82 100644 --- a/src/main/java/cc/ryanc/halo/utils/OwoUtil.java +++ b/src/main/java/cc/ryanc/halo/utils/OwoUtil.java @@ -5,9 +5,7 @@ import lombok.extern.slf4j.Slf4j; import static cc.ryanc.halo.model.support.HaloConst.OWO; /** - * - * OwO表情工具类 - *+ * Owo util * * @author : RYAN0UP * @date : 2017/12/22 @@ -16,15 +14,15 @@ import static cc.ryanc.halo.model.support.HaloConst.OWO; public class OwoUtil { /** - * 将表情标志转化为图片地址 + * Owo mark converted into a picture address * - * @param mark 表情标志 - * @return 表情图片地址 + * @param content content + * @return picture address */ - public static String markToImg(String mark) { + public static String parseOwo(String content) { for (String key : OWO.keySet()) { - mark = mark.replace(key, OWO.get(key)); + content = content.replace(key, OWO.get(key).toString()); } - return mark; + return content; } } diff --git a/src/main/java/cc/ryanc/halo/utils/ThemeUtils.java b/src/main/java/cc/ryanc/halo/utils/ThemeUtils.java index f5021298f..f34adbc0a 100644 --- a/src/main/java/cc/ryanc/halo/utils/ThemeUtils.java +++ b/src/main/java/cc/ryanc/halo/utils/ThemeUtils.java @@ -2,7 +2,7 @@ package cc.ryanc.halo.utils; import cc.ryanc.halo.model.support.HaloConst; import cc.ryanc.halo.model.support.Theme; -import cc.ryanc.halo.web.controller.core.BaseContentController; +import cc.ryanc.halo.web.controller.content.base.BaseContentController; import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java index 2e5500633..c38eff80b 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java @@ -7,7 +7,7 @@ import cc.ryanc.halo.service.OptionService; import cc.ryanc.halo.utils.LocaleMessageUtil; import cc.ryanc.halo.utils.ThemeUtils; import cc.ryanc.halo.web.controller.admin.base.BaseController; -import cc.ryanc.halo.web.controller.core.BaseContentController; +import cc.ryanc.halo.web.controller.content.base.BaseContentController; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileReader; import cn.hutool.core.io.file.FileWriter; diff --git a/src/main/java/cc/ryanc/halo/web/controller/content/IndexController.java b/src/main/java/cc/ryanc/halo/web/controller/content/IndexController.java new file mode 100644 index 000000000..3b1450f61 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/web/controller/content/IndexController.java @@ -0,0 +1,15 @@ +package cc.ryanc.halo.web.controller.content; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * Blog index page controller + * + * @author : RYAN0UP + * @date : 2019-03-17 + */ +@Controller +@RequestMapping +public class IndexController { +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/BaseContentController.java b/src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java similarity index 76% rename from src/main/java/cc/ryanc/halo/web/controller/core/BaseContentController.java rename to src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java index 665b8e4f5..b1b7ff8fe 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/core/BaseContentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/content/base/BaseContentController.java @@ -1,12 +1,10 @@ -package cc.ryanc.halo.web.controller.core; +package cc.ryanc.halo.web.controller.content.base; import cc.ryanc.halo.logging.Logger; import cn.hutool.core.text.StrBuilder; /** - *- * Controller抽象类 - *+ * Content base Controller * * @author : RYAN0UP * @date : 2017/12/15 @@ -14,16 +12,17 @@ import cn.hutool.core.text.StrBuilder; public abstract class BaseContentController { /** - * 定义默认主题 + * Default theme */ public static String THEME = "anatole"; + protected Logger log = Logger.getLogger(getClass()); /** - * 根据模板名称渲染页面 + * Render page by template name * * @param pageName pageName - * @return 返回拼接好的模板路径 + * @return template path */ public String render(String pageName) { final StrBuilder themeStr = new StrBuilder("themes/"); @@ -34,7 +33,7 @@ public abstract class BaseContentController { } /** - * 渲染404页面 + * Redirect to 404 * * @return redirect:/404 */ diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java b/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java index 55d415871..f5966e041 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/core/CommonController.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.logging.Logger; import cc.ryanc.halo.model.entity.User; import cc.ryanc.halo.model.support.HaloConst; import cc.ryanc.halo.utils.ThemeUtils; +import cc.ryanc.halo.web.controller.content.base.BaseContentController; import cn.hutool.core.text.StrBuilder; import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.stereotype.Controller; @@ -15,9 +16,7 @@ import javax.servlet.http.HttpSession; import java.io.FileNotFoundException; /** - *- * 错误页面控制器 - *+ * Error page Controller * * @author : RYAN0UP * @date : 2017/12/26 @@ -27,10 +26,16 @@ public class CommonController implements ErrorController { private static final String ERROR_PATH = "/error"; + private static final String NOT_FROUND_TEMPLATE = "404.ftl"; + + private static final String INTERNAL_ERROR_TEMPLATE = "500.ftl"; + + private static final String ADMIN_URL = "/admin"; + private final Logger log = Logger.getLogger(getClass()); /** - * 渲染404,500 + * Handle error * * @param request request * @return String @@ -54,14 +59,14 @@ public class CommonController implements ErrorController { if (StringUtils.startsWithIgnoreCase(throwable.getMessage(), "Could not resolve view with name '")) { // TODO May cause unreasoned problem // if Ftl was not found then redirect to /404 - if (requestURI.contains("/admin") && null != user) { + if (requestURI.contains(ADMIN_URL) && null != user) { return "redirect:/admin/404"; } else { return "redirect:/404"; } } } - if (requestURI.contains("/admin") && null != user) { + if (requestURI.contains(ADMIN_URL) && null != user) { return "redirect:/admin/500"; } else { return "redirect:/500"; @@ -95,7 +100,7 @@ public class CommonController implements ErrorController { */ @GetMapping(value = "/404") public String contentNotFround() throws FileNotFoundException { - if(ThemeUtils.isTemplateExist("404.ftl")){ + if (ThemeUtils.isTemplateExist(NOT_FROUND_TEMPLATE)) { return "common/error/404"; } StrBuilder path = new StrBuilder("themes/"); @@ -111,7 +116,7 @@ public class CommonController implements ErrorController { */ @GetMapping(value = "/500") public String contentInternalError() throws FileNotFoundException { - if(ThemeUtils.isTemplateExist("500.ftl")){ + if (ThemeUtils.isTemplateExist(INTERNAL_ERROR_TEMPLATE)) { return "common/error/404"; } StrBuilder path = new StrBuilder("themes/"); diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java index b0acb866e..034328c95 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java @@ -85,12 +85,14 @@ public class InstallController { /** * Do install * - * @param blogLocale language - * @param userName username - * @param userDisplayName nickname - * @param userEmail user email - * @param userPwd user password - * @param request request + * @param blogLocale language + * @param blogTitle blog title + * @param blogUrl blog url + * @param userName user name + * @param nickName nick name + * @param userEmail user email + * @param userPwd user password + * @param request request * @return JsonResult */ @PostMapping(value = "/do") @@ -99,7 +101,7 @@ public class InstallController { @RequestParam("blogTitle") String blogTitle, @RequestParam("blogUrl") String blogUrl, @RequestParam("userName") String userName, - @RequestParam("userDisplayName") String userDisplayName, + @RequestParam("userDisplayName") String nickName, @RequestParam("userEmail") String userEmail, @RequestParam("userPwd") String userPwd, HttpServletRequest request) { @@ -107,23 +109,20 @@ public class InstallController { if (StrUtil.equals("true", OPTIONS.get("is_install"))) { return new JsonResult(0, "该博客已初始化,不能再次安装!"); } - //创建新的用户 + // Create new user final User user = new User(); user.setUsername(userName); - if (StrUtil.isBlank(userDisplayName)) { - userDisplayName = userName; - } - user.setNickname(userDisplayName); + user.setNickname(StrUtil.isBlank(nickName) ? userName : nickName); user.setEmail(userEmail); user.setPassword(SecureUtil.md5(userPwd)); userService.create(user); //默认分类 - final Category category = new Category(); + Category category = new Category(); category.setName("未分类"); category.setSnakeName("default"); category.setDescription("未分类"); - categoryService.create(category); + category = categoryService.create(category); //第一篇文章 final Post post = new Post(); diff --git a/src/main/resources/static/halo-common/OwO/OwO.path.json b/src/main/resources/static/halo-common/OwO/OwO.path.json new file mode 100644 index 000000000..38422a3d5 --- /dev/null +++ b/src/main/resources/static/halo-common/OwO/OwO.path.json @@ -0,0 +1,137 @@ +{ + "@[勉强]": "", + "@[乖]": "
", + "@[黑线]": "
", + "@(献花)": "
", + "@(想一想)": "
", + "@(蜡烛)": "
", + "@[滑稽]": "
", + "@(黑线)": "
", + "@[小乖]": "
", + "@(中枪)": "
", + "@(长草)": "
", + "@[捂嘴笑]": "
", + "@[酷]": "
", + "@(喷血)": "
", + "@[彩虹]": "
", + "@[钱]": "
", + "@(呲牙)": "
", + "@[手纸]": "
", + "@[钱币]": "
", + "@[太开心]": "
", + "@(抠鼻)": "
", + "@[你懂的]": "
", + "@[吐舌]": "
", + "@[茶杯]": "
", + "@[泪]": "
", + "@(吐)": "
", + "@(吐舌)": "
", + "@[太阳]": "
", + "@(不出所料)": "
", + "@[挖鼻]": "
", + "@(观察)": "
", + "@(内伤)": "
", + "@[灯泡]": "
", + "@[呵呵]": "
", + "@(尴尬)": "
", + "@(深思)": "
", + "@(小怒)": "
", + "@[狂汗]": "
", + "@[what]": "
", + "@(口水)": "
", + "@(大囧)": "
", + "@[懒得理]": "
", + "@[真棒]": "
", + "@[三道杠]": "
", + "@[睡觉]": "
", + "@[沙发]": "
", + "@(暗地观察)": "
", + "@[笑尿]": "
", + "@[生气]": "
", + "@(肿包)": "
", + "@(狂汗)": "
", + "@(喷水)": "
", + "@(惊喜)": "
", + "@[便便]": "
", + "@(阴暗)": "
", + "@[汗]": "
", + "@(喜极而泣)": "
", + "@[香蕉]": "
", + "@[大拇指]": "
", + "@[蜡烛]": "
", + "@(鼓掌)": "
", + "@(邪恶)": "
", + "@[惊恐]": "
", + "@[惊哭]": "
", + "@[嘚瑟]": "
", + "@[药丸]": "
", + "@[吐]": "
", + "@[蛋糕]": "
", + "@(愤怒)": "
", + "@(无所谓)": "
", + "@[啊]": "
", + "@(坐等)": "
", + "@[nico]": "
", + "@[弱]": "
", + "@[小红脸]": "
", + "@(哭泣)": "
", + "@[呼]": "
", + "@[哈哈]": "
", + "@[爱心]": "
", + "@(不说话)": "
", + "@(脸红)": "
", + "@[惊讶]": "
", + "@(傻笑)": "
", + "@(期待)": "
", + "@(击掌)": "
", + "@(抽烟)": "
", + "@[胜利]": "
", + "@(害羞)": "
", + "@[吃翔]": "
", + "@(便便)": "
", + "@(献黄瓜)": "
", + "@[不高兴]": "
", + "@(皱眉)": "
", + "@(汗)": "
", + "@[吃瓜]": "
", + "@[心碎]": "
", + "@[玫瑰]": "
", + "@(扇耳光)": "
", + "@[OK]": "
", + "@[音乐]": "
", + "@[阴险]": "
", + "@(看热闹)": "
", + "@[星星月亮]": "
", + "@[犀利]": "
", + "@(高兴)": "
", + "@(亲亲)": "
", + "@[冷]": "
", + "@[喷]": "
", + "@(咽气)": "
", + "@[怒]": "
", + "@(锁眉)": "
", + "@[红领巾]": "
", + "@(中指)": "
", + "@[礼物]": "
", + "@(赞一个)": "
", + "@(欢呼)": "
", + "@[花心]": "
", + "@[鄙视]": "
", + "@[呀咩爹]": "
", + "@[开心]": "
", + "@[酸爽]": "
", + "@(得意)": "
", + "@(装大款)": "
", + "@[委屈]": "
", + "@(中刀)": "
", + "@(看不见)": "
", + "@(小眼睛)": "
", + "@(无语)": "
", + "@(投降)": "
", + "@(无奈)": "
", + "@[咦]": "
", + "@(不高兴)": "
", + "@[笑眼]": "
", + "@(吐血倒地)": "
", + "@[疑问]": "
" +}