Here is a tampermonkey script to make @ users easier with quote inserts, had to break it into two posts:Mentions (@username):When you type @ in a text box (with class post-box), it shows a quick list of matching usernames.Quote Insertion (\q):Whenever you type \q, the script automatically replaces it with TWW Quote Tags.Start copying into tampermokey below:// ==UserScript==// @name TWW Fuzzy Search Mention + Quote Insert// @namespace http://tampermonkey.net/// @version 1.0// @description Fuzzy search user mentions on thewolfweb.com and insert quotes// @match *://thewolfweb.com/*// @grant none// ==/UserScript==(function() { 'use strict'; // ----- Configuration: Adjust your user list here ----- const USERS = [ "joe17669", "erice85", "synapse", "El Nachó", "BubbleBobble", "BigMan157", "kiljadn", "TreeTwista10", "FroshKiller", "dropdeadkate", "EMCE", "qntmfred", "NCSUStinger", "DROD900", "Kitty B", "Sweden", "chocolatervh" ]; // ----- Minimal CSS for the suggestion box ----- const suggestionBoxStyle = ` position: absolute; background-color: #fff; border: 1px solid #ccc; font-size: 14px; z-index: 9999; width: 200px; max-height: 150px; overflow-y: auto; `; const suggestionItemStyle = ` padding: 4px 8px; cursor: pointer; `; const suggestionItemHoverStyle = ` background-color: #efefef; `; // Create a container for suggestions (hidden by default) let suggestionBox = document.createElement('div'); suggestionBox.id = 'tww-fuzzy-suggestions'; suggestionBox.setAttribute('style', suggestionBoxStyle + 'display: none;'); document.body.appendChild(suggestionBox); let highlightedIndex = -1; // which suggestion is highlighted let currentSuggestions = []; // current list of matched suggestions let mentionStartPos = -1; // position in the textarea where '@' began let activeTextArea = null; // reference to the active .post-box // Utility: Simple fuzzy/substring search function findMatches(input) { const lower = input.toLowerCase(); return USERS.filter(u => u.toLowerCase().includes(lower)); } // Utility: highlight an item in the suggestion box function highlightSuggestion(index) { // Clear existing highlight [...suggestionBox.children].forEach((child, i) => { child.style.backgroundColor = (i === index) ? '#efefef' : ''; }); } // Utility: show suggestions in the suggestionBox function showSuggestions(suggestions) { suggestionBox.innerHTML = ''; suggestions.forEach((s, index) => { let item = document.createElement('div'); item.textContent = s; item.setAttribute('style', suggestionItemStyle); item.addEventListener('mouseover', () => { highlightedIndex = index; highlightSuggestion(index); }); item.addEventListener('mousedown', (e) => { e.preventDefault(); insertMention(s); }); suggestionBox.appendChild(item); }); suggestionBox.style.display = 'block'; highlightedIndex = -1; } // Utility: hide the suggestion box function hideSuggestions() { suggestionBox.style.display = 'none'; suggestionBox.innerHTML = ''; highlightedIndex = -1; currentSuggestions = []; mentionStartPos = -1; } // Utility: Insert mention at the current cursor position function insertMention(username) { if (!activeTextArea) return; const ta = activeTextArea; // If mentionStartPos was stored, we remove everything from @ to cursor. const start = ta.selectionStart; const textBefore = ta.value.substring(0, mentionStartPos); const textAfter = ta.value.substring(start); // Insert username const mentionText = `[user]${username}[/user]`; ta.value = textBefore + mentionText + textAfter; // Move caret to just after the inserted mention const newPos = textBefore.length + mentionText.length; ta.selectionStart = newPos; ta.selectionEnd = newPos; ta.focus(); hideSuggestions(); } // Utility: Insert
1/23/2025 10:50:29 AM
// Handler for input (detecting \q, or building @ mention) function onInput(e) { const ta = e.target; activeTextArea = ta; const value = ta.value; const pos = ta.selectionStart; // 1. Check if we just typed "\q" // If the user typed \q (two chars), we see if the text before the cursor ends with '\q'. if (value.substring(pos - 2, pos) === '\\q') { // Replace it with
1/23/2025 10:51:20 AM
maybe a gist would work better[Edited on January 23, 2025 at 11:09 AM. Reason : or turn it into an extension. froshkiller did something like this back in the day]
1/23/2025 11:06:05 AM
No I don't think I will
1/23/2025 12:16:52 PM
^
1/23/2025 12:55:42 PM
^I did it for The Coz!
1/24/2025 9:28:48 AM
Where is The Porn Guy?
1/24/2025 9:36:36 AM
Don't forget to special-case spaced guy.
1/24/2025 9:49:24 AM
oh shit i made it into the script
1/24/2025 11:11:16 AM