/**
|
* hexo-tag-details
|
* https://github.com/hinastory/hexo-tag-details.git
|
* Copyright (c) 2019, hinastory
|
* Licensed under the MIT license.
|
* Syntax:
|
* {% details [mode:open/close] summary text %}
|
* detail text
|
* {% enddetails %}
|
**/
|
|
"use strict";
|
const util = require("hexo-util");
|
const config = hexo.config.tag_details;
|
const className = config && config.className ? config.className : false;
|
const openSetting = config && config.open ? config.open : false;
|
|
hexo.extend.tag.register("details", tagDetails, { ends: true });
|
|
function tagDetails(args, content) {
|
let isOpen = (e) => e === "mode:open";
|
let isClose = (e) => e === "mode:close";
|
let isMode = (e) => isOpen(e) || isClose(e);
|
|
let filtered = args.filter((e) => !isMode(e));
|
let modeFlag = isOpen(args.find((e) => isMode(e)));
|
|
let openMode = filtered.length < args.length ? modeFlag : openSetting;
|
let summary = util.htmlTag("summary", {}, filtered.join(" "), false);
|
let rendered = hexo.render.renderSync({ text: content, engine: "markdown" });
|
let attrs = {};
|
|
if (openMode) attrs.open = "open";
|
if (className) attrs.class = className;
|
|
return util.htmlTag("details", attrs, summary + rendered, false);
|
}
|