From dbc195b9f48137a88eb70dee2334058734fa0077 Mon Sep 17 00:00:00 2001
From: Mimi <1119186082@qq.com>
Date: Thu, 4 Apr 2024 01:17:24 +0800
Subject: [PATCH 1/3] chore(deps): adapt to marked@12
---
lib/renderer.js | 81 ++++++++++++++++++++++++++++++-------------------
package.json | 2 +-
test/index.js | 5 ++-
3 files changed, 54 insertions(+), 34 deletions(-)
diff --git a/lib/renderer.js b/lib/renderer.js
index cb6a232..4bef1d9 100644
--- a/lib/renderer.js
+++ b/lib/renderer.js
@@ -6,8 +6,6 @@ let JSDOM,
createDOMPurify;
const { encodeURL, slugize, stripHTML, url_for, isExternalLink, escapeHTML: escape, unescapeHTML: unescape } = require('hexo-util');
-const MarkedRenderer = marked.Renderer;
-const MarkedTokenizer = marked.Tokenizer;
const { basename, dirname, extname, join } = require('path').posix;
const rATag = /]+\s+?)?href=["'](?:#)([^<>"']+)["'][^<>]*>/i;
const rDlSyntax = /(?:^|\s)(\S.+)
:\s+(\S.+)/;
@@ -16,17 +14,27 @@ const anchorId = (str, transformOption) => {
return slugize(stripHTML(unescape(str)).trim(), { transform: transformOption });
};
-class Renderer extends MarkedRenderer {
- constructor(hexo) {
- super();
- this._headingId = {};
- this.hexo = hexo;
+function mangleEmail(text) {
+ let out = '';
+ let i,
+ ch;
+
+ const l = text.length;
+ for (i = 0; i < l; i++) {
+ ch = text.charCodeAt(i);
+ if (Math.random() > 0.5) {
+ ch = 'x' + ch.toString(16);
+ }
+ out += '' + ch + ';';
}
+ return out;
+}
+
+const renderer = {
// Add id attribute to headings
heading(text, level) {
- const { anchorAlias, headerIds, modifyAnchors } = this.options;
- const { _headingId } = this;
+ const { anchorAlias, headerIds, modifyAnchors, _headingId } = this.options;
if (!headerIds) {
return `${text}`;
@@ -57,17 +65,25 @@ class Renderer extends MarkedRenderer {
// add headerlink
return `${text}`;
- }
+ },
link(href, title, text) {
- const { external_link, sanitizeUrl } = this.options;
- const { url: urlCfg } = this.hexo.config;
+ const { external_link, sanitizeUrl, hexo, mangle } = this.options;
+ const { url: urlCfg } = hexo.config;
if (sanitizeUrl) {
if (href.startsWith('javascript:') || href.startsWith('vbscript:') || href.startsWith('data:')) {
href = '';
}
}
+ if (mangle) {
+ if (href.startsWith('mailto:')) {
+ const email = href.substring(7);
+ const mangledEmail = mangleEmail(email);
+
+ href = `mailto:${mangledEmail}`;
+ }
+ }
let out = ' {
const hexo = new Hexo(__dirname, {silent: true});
const defaultCfg = JSON.parse(JSON.stringify(Object.assign(hexo.config, {
- marked: {}
+ marked: {
+ headerIds: true,
+ mangle: true
+ }
})));
before(async () => {
From 8d4a77ca4965d391216d63bbf2838c8d6b85e743 Mon Sep 17 00:00:00 2001
From: Mimi <1119186082@qq.com>
Date: Thu, 4 Apr 2024 01:22:43 +0800
Subject: [PATCH 2/3] fix eslint
---
lib/renderer.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/renderer.js b/lib/renderer.js
index 4bef1d9..e16894b 100644
--- a/lib/renderer.js
+++ b/lib/renderer.js
@@ -219,7 +219,7 @@ const tokenizer = {
module.exports = function(data, options) {
const { post_asset_folder, marked: markedCfg, source_dir } = this.config;
- const { prependRoot, postAsset, dompurify, mangle } = markedCfg;
+ const { prependRoot, postAsset, dompurify } = markedCfg;
const { path, text } = data;
// exec filter to extend marked
From 4d07ec6a072892a0070b27c7d8f7b594398c66fa Mon Sep 17 00:00:00 2001
From: Mimi <1119186082@qq.com>
Date: Thu, 4 Apr 2024 01:26:28 +0800
Subject: [PATCH 3/3] update default options
---
test/index.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/test/index.js b/test/index.js
index c2ca241..2d13282 100644
--- a/test/index.js
+++ b/test/index.js
@@ -10,7 +10,6 @@ describe('Marked renderer', () => {
const hexo = new Hexo(__dirname, {silent: true});
const defaultCfg = JSON.parse(JSON.stringify(Object.assign(hexo.config, {
marked: {
- headerIds: true,
mangle: true
}
})));