您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fügt einen Knopf im Archforum hinzu, um in MD geschribenen Text in Beiträgen in die dort notwendiege Syntax zu formatieren.
// ==UserScript== // @name ArchForum Markdownunterstützung // @name:en ArchForum Markdown-support // @version 0.1 // @description Fügt einen Knopf im Archforum hinzu, um in MD geschribenen Text in Beiträgen in die dort notwendiege Syntax zu formatieren. // @description:en Add a button that converts Markdown copies to the syntax needed in the Archforum // @author Kilian // @match https://bbs.archlinux.org/* // @license GPLv3 // @namespace greasyfork.org/users/1489391 // ==/UserScript== (function() { 'use strict'; // Function to convert Markdown to BBCode function convertMarkdownToBBCode(markdown) { // Save original code blocks const codeBlocks = []; const codeBlockPattern = /```([\s\S]*?)```/g; let codeBlockMatch; let markdownWithoutCodeBlocks = markdown; while ((codeBlockMatch = codeBlockPattern.exec(markdown)) !== null) { codeBlocks.push(codeBlockMatch[0]); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(codeBlockMatch[0], `{{{CODE_BLOCK_${codeBlocks.length - 1}}}}`); } // Convert headers markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/^#\s(.*)$/gm, '[size=200]$1[/size]'); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/^##\s(.*)$/gm, '[size=150]$1[/size]'); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/^###\s(.*)$/gm, '[size=120]$1[/size]'); // Convert bold markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\*\*(.*?)\*\*/g, '[b]$1[/b]'); // Convert italic markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\*(.*?)\*/g, '[i]$1[/i]'); // Convert underline markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\_\_([^_]+)\_\_/g, '[u]$1[/u]'); // Convert strikethrough markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\~\~([^~]+)\~\~/g, '[s]$1[/s]'); // Convert links markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '[url=$2]$1[/url]'); // Convert images markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/!\[([^\]]+)\]\(([^)]+)\)/g, '[img]$2[/img]'); // Convert inline code markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/`([^`]+)`/g, '[code]$1[/code]'); // Convert lists markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/^\*\s(.*)$/gm, '[*] $1'); // Convert quotes markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/^\>\s(.*)$/gm, '[quote]$1[/quote]'); // Convert color markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[color=([^\]]+)\](.*?)\[\/color\]/g, '[color=$1]$2[/color]'); // Convert center markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[center\](.*?)\[\/center\]/g, '[center]$1[/center]'); // Convert horizontal rule markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[hr\]/g, '[hr]'); // Convert subscript and superscript markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[sub\](.*?)\[\/sub\]/g, '[sub]$1[/sub]'); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[sup\](.*?)\[\/sup\]/g, '[sup]$1[/sup]'); // Convert spoiler markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[spoiler\](.*?)\[\/spoiler\]/g, '[spoiler]$1[/spoiler]'); // Convert table markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[table\](.*?)\[\/table\]/gs, '[table]$1[/table]'); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[tr\](.*?)\[\/tr\]/g, '[tr]$1[/tr]'); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[th\](.*?)\[\/th\]/g, '[th]$1[/th]'); markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(/\[td\](.*?)\[\/td\]/g, '[td]$1[/td]'); // Restore original code blocks for (let i = 0; i < codeBlocks.length; i++) { markdownWithoutCodeBlocks = markdownWithoutCodeBlocks.replace(`{{{CODE_BLOCK_${i}}}}`, `[code]${codeBlocks[i].replace(/```/g, '')}[/code]`); } return markdownWithoutCodeBlocks; } // Function to add the convert button function addConvertButton() { const textarea = document.querySelector('textarea[name="req_message"]'); if (!textarea) return; const button = document.createElement('button'); button.textContent = 'Convert Markdown to BBCode'; button.style.position = 'fixed'; button.style.bottom = '20px'; button.style.right = '20px'; button.style.zIndex = '1000'; button.style.opacity = '0.7'; button.style.backgroundColor = '#f0f0f0'; button.style.color = '#000'; button.style.border = '1px solid #ccc'; button.style.borderRadius = '5px'; button.style.padding = '5px 10px'; button.style.cursor = 'pointer'; button.addEventListener('mouseover', () => { button.style.opacity = '1'; }); button.addEventListener('mouseout', () => { button.style.opacity = '0.7'; }); button.addEventListener('click', () => { textarea.value = convertMarkdownToBBCode(textarea.value); }); document.body.appendChild(button); } // Run the function to add the button addConvertButton(); })();