Greasy Fork is available in English.
在编程猫社区使用Markdown/LaTeX语法发布帖子
当前为
// ==UserScript==
// @name 【编程猫社区】多语法支持
// @namespace codemao
// @version 1.1.0
// @description 在编程猫社区使用Markdown/LaTeX语法发布帖子
// @author 简单得不简单
// @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js
// @require http://greasyfork.icu/scripts/425827-editormd-js/code/editormdjs.js
// @require http://greasyfork.icu/scripts/34138-marked-js/code/markedjs.js
// @require http://greasyfork.icu/scripts/425847-prettify-js/code/prettifyjs.js
// @resource editormd https://jddbjd.gitee.io/editor.md/css/editormd.preview.css
// @grant GM_getResourceText
// @grant GM_addStyle
// @include *://shequ.codemao.cn/community
// @include *://shequ.codemao.cn/community/*
// @include *://shequ.codemao.cn/work_shop/*
// ==/UserScript==
(function () {
// 粘贴文本
function pasteText(type) {
// 贴子发布表单
var forumContainer = document.getElementsByClassName(type + '-forum_sender--container')[0];
// 帖子编辑 iframe
var iframeDoc = document.getElementById('react-tinymce-0_ifr').contentDocument;
iframeDoc.body.innerHTML = '';
// 选择语法
var select = document.createElement('select');
var values = new Array('Markdown', 'LaTeX');
for (var i = 0; i < values.length; i++) {
var option = document.createElement("option");
option.value = values[i];
option.appendChild(document.createTextNode(values[i]));
select.appendChild(option);
}
select.options[0].selected = true;
forumContainer.insertBefore(select, document.getElementsByClassName('r-community-c-forum_sender--form_item')[1]);
// 粘贴文本 按钮
var btnPasteText = document.createElement('button');
btnPasteText.innerText = '粘贴相应语法文本';
btnPasteText.style = 'display: block; text-align: center; width: 100%; padding: 5px 0; margin: 5px 0; background: #fec433; border-radius: 4px; color: #fff;';
btnPasteText.onclick = function () {
navigator.clipboard.readText().then(function (clipText) {
// 标识帖子属于 Markdown 语法
var sign = document.createElement('pre');
sign.style = 'display: none;';
sign.innerText = select.value;
// 对没安装脚本的友好提示
var explain = document.createElement('p');
explain.innerText = '本文使用了由社区用户简单得不简单(https://shequ.codemao.cn/user/2776410)提供的油猴脚本:多语法支持,请先安装此脚本';
var code = document.createElement('pre');
// 存放 Markdown 代码
code.style = 'display: none;';
code.appendChild(document.createTextNode(clipText));
iframeDoc.body.innerHTML = '';
iframeDoc.body.appendChild(sign);
iframeDoc.body.appendChild(explain);
iframeDoc.body.appendChild(code);
});
}
// 将按钮添加到表单底部
forumContainer.appendChild(btnPasteText);
// 提示文本
var textExplain = document.createElement('a');
textExplain.style = 'display: block; text-align: center; width: 100%; padding: 5px 0; margin: 5px 0; background: #fec433; border-radius: 4px; color: #fff;';
textExplain.innerText = '点击进入编辑器';
textExplain.href = 'https://jddbjd.gitee.io/editor.md/';
textExplain.target = '__blank';
textExplain.title = '点击进入编辑器';
// 将文本添加到表单底部
forumContainer.appendChild(textExplain);
}
// 修改帖子页面的 HTML 为 Markdown 渲染后的 HTML
function modify() {
// 获取帖子内容
var forumContent = document.getElementsByClassName('r-community-r-detail--forum_content')[0];
var sign = forumContent.getElementsByTagName('pre')[0].innerText;
if (sign == 'Markdown') {
// 注入 CSS
var editormdcss = GM_getResourceText('editormd');
GM_addStyle(editormdcss);
// 提取 <pre> 中的文本
var forumText = forumContent.getElementsByTagName('pre')[1].innerText;
// 修改其 HTML 为 Markdown
textarea = document.createElement('textarea');
textarea.style = 'display: none;';
textarea.appendChild(document.createTextNode(forumText));
forumContent.innerHTML = '';
forumContent.appendChild(textarea);
forumContent.className = 'markdown-body editormd-html-preview';
forumContent.id = 'markdown';
$(function () {
// 渲染 Markdown
var editor = editormd.markdownToHTML("markdown", {
htmlDecode: true,
});
});
} else if (sign == 'LaTeX') {
var script = document.createElement('script');
script.type = 'module';
script.innerText = `import { LaTeXJSComponent } from "https://cdn.jsdelivr.net/npm/latex.js/dist/latex.mjs";customElements.define("latex-js", LaTeXJSComponent);`
document.head.appendChild(script);
// 提取 <pre> 中的文本
var forumText = forumContent.getElementsByTagName('pre')[1].innerText;
// 修改内容
var latex = document.createElement('latex-js');
latex.setAttribute('baseURL', 'https://cdn.jsdelivr.net/npm/latex.js/dist/');
latex.appendChild(document.createTextNode(forumText));
forumContent.innerHTML = '';
forumContent.appendChild(latex);
}
}
// 程序入口
function main() {
var path = location.pathname;
// 判断当前页是论坛首页还是帖子页s
if (/^\/community\/\d+\/?$/.test(path)) {
// 帖子页
modify();
} else if (/^\/community\/?$/.test(path)) {
// 论坛首页
pasteText('r-community-c');
} else if (/^\/work_shop\/\d+\/?$/.test(path)) {
// 工作室
pasteText('c-post_box');
}
}
// 设置延时,在文档加载完后渲染,否则不会渲染成功
setTimeout(main, 1000);
})();