Saysumthinfunnymike
VOTE!!!
It's been months now of posters linking shyt to "X" that don't embed. You have to replace X with the Twitter link and then it will embed on here.
since twitter officially changed it's links to x.com, I updated the userscript to work in html editor mode as well as bbcode editor mode. so anytime you paste ahttps://twitter.com
orhttps://twitter.com
url it'll automatically replace the domain withhttps://twitter.com
. making the embeds work seamlessly since the site addons haven't been updated to support x.com.
Code:// ==UserScript== // @name Replace X.com URLs with Twitter.com URLs // @namespace http://tampermonkey.net/ // @description Replaces URLs containing "https://twitter.com" or "https://twitter.com" with "https://twitter.com". // @author Author Name // @version 1.3 // @match https://www.thecoli.com/threads/* // @match https://thecoli.com/threads/* // @match https://xenforo.com/community/forums/* // @grant none // ==/UserScript== (function() { 'use strict'; // Function to get the current cursor position in a text input field function getCursorPosition(input) { let position = 0; if ('selectionStart' in input) { position = input.selectionStart; } else if (document.selection) { input.focus(); let selection = document.selection.createRange(); selection.moveStart('character', -input.value.length); position = selection.text.length; } return position; } // Function to set the cursor position in a text input field function setCursorPosition(input, position) { if (input.setSelectionRange) { input.focus(); input.setSelectionRange(position, position); } else if (input.createTextRange) { let range = input.createTextRange(); range.collapse(true); range.moveEnd('character', position); range.moveStart('character', position); range.select(); } } // Function to replace URLs in text input fields and editable areas function replaceURLs(event) { // Get all editable fields on the page let editableFields = document.querySelectorAll('[contenteditable="true"], .fr-element.fr-view.fr-element-scroll-visible, textarea.input'); editableFields.forEach(function(field) { // Save the current cursor position let cursorPosition = getCursorPosition(field); // Replace URLs in the value or innerHTML of the field let value = field.value || field.innerHTML; let newValue = value.replace(/https:\/\/(www\.)?x\.com/g, 'https://twitter.com'); if (value !== newValue) { if (field.tagName.toLowerCase() === 'textarea' || field.tagName.toLowerCase() === 'input') { field.value = newValue; } else { field.innerHTML = newValue; } // Restore the cursor position let newCursorPosition = getCursorPosition(field); if (newCursorPosition > cursorPosition) { setCursorPosition(field, newCursorPosition - (value.length - newValue.length)); } else { setCursorPosition(field, newCursorPosition); } } // Check if the user pressed Enter if (event.type === 'keydown' && event.key === 'Enter') { // Save the current cursor position cursorPosition = getCursorPosition(field); // Replace URLs in the new line let lines = (field.value || field.innerHTML).split('\n'); lines[cursorPosition.line] = lines[cursorPosition.line].replace(/https:\/\/(www\.)?x\.com/g, 'https://twitter.com'); if (field.tagName.toLowerCase() === 'textarea' || field.tagName.toLowerCase() === 'input') { field.value = lines.join('\n'); } else { field.innerHTML = lines.join('\n'); } // Restore the cursor position let newCursorPosition = getCursorPosition(field); if (newCursorPosition > cursorPosition) { setCursorPosition(field, newCursorPosition - (value.length - lines.join('\n').length)); } else { setCursorPosition(field, newCursorPosition); } } }); } // Add event listeners for input and keydown events on the document document.addEventListener('input', replaceURLs); document.addEventListener('keydown', replaceURLs); })();
Changelog:
**Version 1.0 to Version 1.3**
1. **Expanded Functionality**:
- The script now handles both text input fields and editable areas (with the `contenteditable="true"` attribute) on the web pages.
- The script now replaces URLs in the BBCode editor mode, in addition to the HTML editor mode.
2. **Improved Cursor Position Handling**:
- The script now correctly restores the cursor position after replacing URLs, even when the text length changes.
- The script now handles the case where the user presses the Enter key, replacing URLs in the new line and restoring the cursor position correctly.
3. **Expanded Matching Patterns**:
- The script now matches URLs with both the "x.com" and "www.x.com" patterns.
4. **Improved Readability and Maintainability**:
- The script has been reorganized and formatted for better readability and maintainability.
- The script now uses more descriptive variable and function names.
5. **Increased Robustness**:
- The script now handles edge cases more gracefully, ensuring a smoother user experience.
Overall, the changes from Version 1.0 to Version 1.3 have significantly improved the functionality, reliability, and user experience of the script.[/icode]