您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
将AcWing上的内容转换为markdown
- // ==UserScript==
- // @name AcWing content to markdown
- // @namespace acwing
- // @match https://www.acwing.com/*
- // @grant GM_setClipboard
- // @version 1.4
- // @author -
- // @description 将AcWing上的内容转换为markdown
- // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
- // @require https://cdn.bootcdn.net/ajax/libs/turndown/7.1.1/turndown.min.js
- // @license MIT
- // ==/UserScript==
- let debug = false; // whether to enable on editor
- let turndownService = new TurndownService();
- turndownService.keep(['del']);
- // code block
- turndownService.addRule('pre', {
- filter: 'pre',
- replacement: function (content, node) {
- let t = $(node).attr("class").split(/\s+/).slice(-1);
- if (t == "hljs") t = "";
- return "```" + t + "\n" + content.trim() + "\n```";
- }
- });
- // remove <script> math
- turndownService.addRule('remove-script', {
- filter: function (node, options) {
- return node.tagName.toLowerCase() == "script" && node.type.startsWith("math/tex");
- },
- replacement: function (content, node) {
- return "";
- }
- });
- // inline math
- turndownService.addRule('inline-math', {
- filter: function (node, options) {
- return node.tagName.toLowerCase() == "span" && node.className == "MathJax";
- },
- replacement: function (content, node) {
- return "$ " + $(node).next().text() + " $";
- }
- });
- // block math
- turndownService.addRule('block-math', {
- filter: function (node, options) {
- return node.tagName.toLowerCase() == "div" && node.className == "MathJax_Display";
- },
- replacement: function (content, node) {
- return "\n$$\n" + $(node).next().text() + "\n$$\n";
- }
- });
- // add buttons
- $("div[data-tab='preview-tab-content']").each(function() {
- if (debug || $(this).prev().attr('data-tab') != "editor-tab-content")
- $(this).before(
- "<div> <button class='html2md-view'>显示markdown</button> <button class='html2md-cb'>复制markdown到剪贴板</button> </div>"
- );
- });
- $(".html2md-cb").click(function() {
- let target = $(this).parent().next().get(0);
- if (!target.markdown)
- target.markdown = turndownService.turndown($(target).html());
- GM_setClipboard(target.markdown);
- // console.log(markdown);
- $(this).text("已复制到剪贴板");
- });
- $(".html2md-view").click(function() {
- let target = $(this).parent().next().get(0);
- if (target.viewmd) {
- target.viewmd = false;
- $(this).text("显示markdown");
- $(target).html(target.original_html);
- } else {
- target.viewmd = true;
- if (!target.original_html)
- target.original_html = $(target).html();
- if (!target.markdown)
- target.markdown = turndownService.turndown($(target).html());
- $(this).text("显示原始内容");
- $(target).html(`<textarea oninput="$(this).parent().get(0).markdown=this.value;" style="width:100%; height:400px;"> ${target.markdown} </textarea>`);
- }
- });