您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Mods.de - prettify new post button
// ==UserScript== // @name Mods.de Button Overhaul // @namespace phil.red // @description Mods.de - prettify new post button // @description:de Mods.de - New-Post-Buttons verschönern // @version 1.3.2 // @include https://forum.mods.de/bb/newreply.php* // @include https://forum.mods.de/bb/editreply.php* // @include https://forum.mods.de/bb/newthread.php* // @include https://forum.mods.de/bb/thread.php?* // ==/UserScript== function addStyle(css) { const head = document.getElementsByTagName('head')[0] if (!head) return const style = document.createElement('style') style.setAttribute('type', 'text/css') style.textContent = css head.appendChild(style) } //when used on a text input widget, this inserts bb tags around the selection //use what you would use in the start tag. //example: //given a textarea with the id 'ta' and the selected content <selection>, //insertRoundCaret(elem, 'url=http://goo.gl') yields [url="http://goo.gl"]<selection>[/url] and //insertRoundCaret(elem, 'url=http://','Insert URL:') yields [url=<url>]<selection>[/url], //where <url> is fetched via a popup which is prefilled with 'http://' function insertRoundCaret(elem, tag, question) { const i = tag.indexOf('=') const tagName = (i === -1) ? tag : tag.substring(0, i) let tagValue = (i === -1) ? '' : tag.substring(i + 1) //if there is a question, prompt it, using the value as preset, else use the value if present let strStart = `[${tagName}` const strEnd = `[/${tagName}]` if (tagValue.length > 0 || question) { if (question) { tagValue = window.prompt(`Bitte ${question}`, tagValue) //Autopoliteness (TM) } if (tagValue.length > 0) { strStart += '="' + tagValue + '"' } } strStart += ']' insertCustomCaret(elem, strStart, strEnd) } function insertCustomCaret(elem, strStart, strEnd) { //if there is a selection, wrap tags around it if (elem.selectionStart || elem.selectionStart === 0) { const startPos = elem.selectionStart const endPos = elem.selectionEnd const scrollTop = elem.scrollTop elem.value = elem.value.substring(0, startPos) + strStart + elem.value.substring(startPos, endPos) + strEnd + elem.value.substring(endPos) elem.focus() elem.selectionStart = startPos + strStart.length elem.selectionEnd = endPos + strStart.length elem.scrollTop = scrollTop } else { // if no selection is present, just append tags to the end elem.value += strStart + strEnd elem.focus() elem.selectionStart = elem.selectionEnd = elem.value.length - strEnd.length } } function insertPerLine(elem, str) { if (elem.selectionStart || elem.selectionStart === 0) { const startPos = elem.selectionStart const endPos = elem.selectionEnd const scrollTop = elem.scrollTop const lines = elem.value.substring(startPos, endPos).split('\n').map(l => str + l) elem.value = elem.value.substring(0, startPos) + lines.join('\n') + elem.value.substring(endPos) elem.focus() elem.selectionStart = startPos + str.length elem.selectionEnd = endPos + (str.length * lines.length) elem.scrollTop = scrollTop } else { elem.value += str elem.focus() elem.selectionStart = elem.selectionEnd = elem.value.length } } function smileyWindow() { window.open( 'misc.php?view=smilies&window=1', 'smilieWindow', 'width=300, height=400, status=no, toolbar=no, menubar=no, location=no, directories=no, resizeable=no, scrollbars=yes') } addStyle(` #qr_insertcustombuttonshere > img, .newInsertButton { float: left; max-width: 28px; } #qr_insertcustombuttonshere > img, .newInsertButton, input[type="submit"] { border: 1px solid #224; background-color: #394e63; box-shadow: 0px 1px 3px rgba(255,255,255,.3) inset; height: 24px; overflow: show; text-align: center; color: white; margin-right: 3px; } #qr_insertcustombuttonshere > img:hover:not(:active), .newInsertButton:hover:not(:active), input[type="submit"]:hover:not(:active) { border-color: #008fe1; box-shadow: 0px 1px 3px rgba(255,255,255,.3) inset, 0px 0px 2px #008fe1; } #qr_insertcustombuttonshere > img:hover:active, .newInsertButton:hover:active, input[type="submit"]:hover:active { box-shadow: 0px 1px 3px rgba(0,0,0,.3) inset; } .newInsertButton .border {border:1px solid silver; display:inline-block; width:1.2em} .newInsertButton .spoiler {text-shadow:0px 0px 2px rgba(255,255,255,.5)} .newInsertButton .brdr, .newInsertButton .spoiler {min-width:16px; display:inline-block} .newInsertButton .tex {font-family:serif} `) //shamelessly stolen from kambfhase if (!document.evaluate('//a[contains(@href, "./quickmod")]', document, null, 8, null).singleNodeValue) { addStyle('.iAmMod { display:none }') } const toolbar = document.querySelector('img[title="Fett"]').parentNode const ta = document.querySelector('#pstmsg, textarea[name="message"], #thrmsg') const buttons = [ ['Fett', '<b>F</b>', () => insertRoundCaret(ta, 'b')], ['Unterstreichen', '<u>U</u>', () => insertRoundCaret(ta, 'u')], ['Code', '<code class="border">C</code>', () => insertRoundCaret(ta, 'code')], ['Kursiv', '<i>K</i>', () => insertRoundCaret(ta, 'i')], ['Durchstreichen', '<s>S</s>', () => insertRoundCaret(ta, 's')], ['Trigger', '<span class="trigger">T</span>', () => insertRoundCaret(ta, 'trigger')], ['Monospace', '<code>M</code>', () => insertRoundCaret(ta, 'm')], ['TeX', '<span class="tex">T</span>', () => insertRoundCaret(ta, 'tex')], ['Audio', '♫', () => insertRoundCaret(ta, 'audio')], ['Video', '▶', () => insertRoundCaret(ta, 'video')], ['PHP', '<code class="border">P</code>', () => insertRoundCaret(ta, 'php')], ['Bild einfügen', '⌧', () => insertRoundCaret(ta, 'img')], ['Link', '<u>url</u>', () => insertRoundCaret(ta, 'url=http://', 'URL angeben')], ['Liste', '☰', () => { insertRoundCaret(ta, 'list=1', 'Listentyp angeben: 1, a oder leer') insertCustomCaret(ta, '\n', '\n') insertPerLine(ta, '[*] ') }], ['Listenelement', '•', () => insertCustomCaret(ta, '[*] ','')], ['Smiley einfügen', '☺', smileyWindow], ['Quote', '<span class="border">Q</i>', () => insertRoundCaret(ta, 'quote')], ['Spoiler', '<span class="spoiler">S</i>', () => insertRoundCaret(ta, 'spoiler')], ['Mod', 'Mod', () => insertRoundCaret(ta, 'mod')], ] toolbar.innerHTML = '' for (const [alt, code, cb] of buttons) { const button = document.createElement('button') button.classList.add('newInsertButton') button.setAttribute('type', 'button') button.setAttribute('alt', alt) button.innerHTML = code button.addEventListener('click', cb) toolbar.appendChild(button) } const modBtn = document.querySelector('button[alt="Mod"]') if (modBtn) modBtn.classList.add('iAmMod')