LeetCode 题目描述转 Markdown¶
油猴脚本。代码改自 https://github.com/tonngw/leetcode-helper,适配了最新的 UI,并且删掉了没用的功能,主打一个能用就行。
// ==UserScript==
// @name leetcode-helper
// @namespace https://github.com/stalomeow
// @version 1.0.0
// @description 复制 LeetCode 题目描述
// @author stalomeow
// @run-at document-end
// @match https://leetcode.cn/problems/*
// @require https://unpkg.com/turndown/dist/turndown.js
// @grant GM_registerMenuCommand
// @grant GM_setClipboard
// @license MIT
// ==/UserScript==
(function () {
'use strict';
// 初始化 html to markdown 转换工具
const turndownService = new TurndownService();
addTurndownServiceRules();
// 注入菜单
GM_registerMenuCommand("复制 LeetCode 题目为 Markdown,并存入剪切板", copy);
// 添加复制按钮
const copyBtn = document.createElement("button");
copyBtn.id = "copyBtn";
copyBtn.innerHTML = '复制';
copyBtn.style.alignSelf = "center";
copyBtn.title = "复制题目为 Markdown 格式";
window.onload = setTimeout(function () {
var x = document.getElementsByClassName("text-title-large font-semibold text-text-primary dark:text-text-primary")[0];
x.parentNode.appendChild(copyBtn);
console.log("I was invoked...");
}, 1500);
// 为复制按钮绑定点击功能
copyBtn.onclick = function (e) {
e.preventDefault();
copy();
};
// 题目复制功能实现
function copy() {
var contentDom = document.querySelector('.elfjS').outerHTML;
var contentMd = handleHtml(contentDom);
GM_setClipboard(contentMd);
window.alert('复制成功');
}
function addTurndownServiceRules() {
turndownService.addRule('strikethrough', {
filter: ['pre'],
replacement: function (content, node) {
// console.log(node.innerText);
return '\n```\n' + node.innerText.trim() + '\n```\n\n';
}
});
turndownService.addRule('strikethrough', {
filter: ['strong'],
replacement: function (content) {
return '**' + content + "**"
}
});
turndownService.addRule('strikethrough', {
filter: ['code'],
replacement: function (content) {
return '<code>' + content + "</code>"
}
});
turndownService.addRule('strikethrough', {
filter: ['sup'],
replacement: function (content) {
return '<sup>' + content + "</sup>"
}
});
}
function handleHtml(html) {
var lines = turndownService.turndown(html).split('\n');
var markdown = '';
for (var i = 0; i < lines.length; i++) {
var l = lines[i];
if (i > 0) markdown += '\n';
if (l.length > 0) markdown += '> ' + l;
}
var problemTitle = document.getElementsByClassName('no-underline hover:text-blue-s dark:hover:text-dark-blue-s truncate cursor-text whitespace-normal hover:!text-[inherit]')[0].textContent;
return `> [${problemTitle}](${window.location.href})\n\n` + markdown
}
})();