diff --git a/package-lock.json b/package-lock.json index 08714a9a2..083c799cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^15.2.2", - "marked": "^12.0.2", + "marked": "^13.0.2", "npm-run-all": "^4.1.5", "postcss-cli": "^11.0.0", "prettier": "^3.2.5", @@ -10993,9 +10993,9 @@ } }, "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.2.tgz", + "integrity": "sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==", "dev": true, "bin": { "marked": "bin/marked.js" diff --git a/package.json b/package.json index cc0bd26da..24bf3d803 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^15.2.2", - "marked": "^12.0.2", + "marked": "^13.0.2", "npm-run-all": "^4.1.5", "postcss-cli": "^11.0.0", "prettier": "^3.2.5", diff --git a/src/core/render/compiler.js b/src/core/render/compiler.js index 99c639e11..4ecacec43 100644 --- a/src/core/render/compiler.js +++ b/src/core/render/compiler.js @@ -209,7 +209,8 @@ export class Compiler { * @param {Number} level Type of heading (h tag) * @returns {String} Heading element */ - origin.heading = renderer.heading = function (text, level) { + origin.heading = renderer.heading = function ({ tokens, depth: level }) { + const text = this.parser.parseInline(tokens); let { str, config } = getAndRemoveConfig(text); const nextToc = { level, title: str }; diff --git a/src/core/render/compiler/code.js b/src/core/render/compiler/code.js index d570f62e0..041ec82e7 100644 --- a/src/core/render/compiler/code.js +++ b/src/core/render/compiler/code.js @@ -3,7 +3,7 @@ import Prism from 'prismjs'; import 'prismjs/components/prism-markup-templating.js'; export const highlightCodeCompiler = ({ renderer }) => - (renderer.code = function (code, lang = 'markup') { + (renderer.code = function ({ text: code, lang = 'markup' }) { const langOrMarkup = Prism.languages[lang] || Prism.languages.markup; const text = Prism.highlight( code.replace(/@DOCSIFY_QM@/g, '`'), diff --git a/src/core/render/compiler/image.js b/src/core/render/compiler/image.js index 89003537f..4c8ea9089 100644 --- a/src/core/render/compiler/image.js +++ b/src/core/render/compiler/image.js @@ -2,7 +2,7 @@ import { getAndRemoveConfig } from '../utils.js'; import { isAbsolutePath, getPath, getParentPath } from '../../router/util.js'; export const imageCompiler = ({ renderer, contentBase, router }) => - (renderer.image = (href, title, text) => { + (renderer.image = ({ href, title, text }) => { let url = href; const attrs = []; diff --git a/src/core/render/compiler/link.js b/src/core/render/compiler/link.js index 4c1c26e20..c7a3559eb 100644 --- a/src/core/render/compiler/link.js +++ b/src/core/render/compiler/link.js @@ -8,8 +8,9 @@ export const linkCompiler = ({ linkRel, compilerClass, }) => - (renderer.link = (href, title = '', text) => { + (renderer.link = function ({ href, title = '', tokens }) { const attrs = []; + const text = this.parser.parseInline(tokens) || ''; const { str, config } = getAndRemoveConfig(title); linkTarget = config.target || linkTarget; linkRel = diff --git a/src/core/render/compiler/paragraph.js b/src/core/render/compiler/paragraph.js index 44706e16d..5033603df 100644 --- a/src/core/render/compiler/paragraph.js +++ b/src/core/render/compiler/paragraph.js @@ -1,7 +1,8 @@ import { helper as helperTpl } from '../tpl.js'; export const paragraphCompiler = ({ renderer }) => - (renderer.paragraph = text => { + (renderer.paragraph = function ({ tokens }) { + const text = this.parser.parseInline(tokens); let result; if (/^!>/.test(text)) { result = helperTpl('tip', text); diff --git a/src/core/render/compiler/taskList.js b/src/core/render/compiler/taskList.js index acb7a5372..f4bcdaf8d 100644 --- a/src/core/render/compiler/taskList.js +++ b/src/core/render/compiler/taskList.js @@ -1,5 +1,14 @@ export const taskListCompiler = ({ renderer }) => - (renderer.list = (body, ordered, start) => { + (renderer.list = function (token) { + const ordered = token.ordered; + const start = token.start; + + let body = ''; + for (let j = 0; j < token.items.length; j++) { + const item = token.items[j]; + body += this.listitem?.(item); + } + const isTaskList = /
  • /.test( body.split('class="task-list"')[0], ); diff --git a/src/core/render/compiler/taskListItem.js b/src/core/render/compiler/taskListItem.js index e4b2512ff..5978db764 100644 --- a/src/core/render/compiler/taskListItem.js +++ b/src/core/render/compiler/taskListItem.js @@ -1,5 +1,33 @@ export const taskListItemCompiler = ({ renderer }) => - (renderer.listitem = text => { + (renderer.listitem = function (item) { + let text = ''; + if (item.task) { + const checkbox = this.checkbox?.({ checked: !!item.checked }); + if (item.loose) { + if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') { + item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; + if ( + item.tokens[0].tokens && + item.tokens[0].tokens.length > 0 && + item.tokens[0].tokens[0].type === 'text' + ) { + item.tokens[0].tokens[0].text = + checkbox + ' ' + item.tokens[0].tokens[0].text; + } + } else { + item.tokens.unshift({ + type: 'text', + raw: checkbox + ' ', + text: checkbox + ' ', + }); + } + } else { + text += checkbox + ' '; + } + } + + text += this.parser?.parse(item.tokens, !!item.loose); + const isTaskItem = /^(]*>)/.test(text); const html = isTaskItem ? /* html */ `
  • `