How do I embed Twitter links brehs?

Sad Bunny

they/them
Supporter
Joined
May 2, 2012
Messages
72,128
Reputation
2,007
Daps
161,170
with the userscript I have installed, I genuinely don't know whether or not someone has posted an x.com url unless people comment about them doing to and not seeing the post.

this is what i see, even tho the OP posted a x.com link.

NLvZgwx.png
OK thanks this is helpful
Beautiful picture by the way
 

Sad Bunny

they/them
Supporter
Joined
May 2, 2012
Messages
72,128
Reputation
2,007
Daps
161,170
Can we please sticky this thread?

I’m seeing so many twitter links that aren’t being embedded correctly :damn:
 

bnew

Veteran
Joined
Nov 1, 2015
Messages
52,307
Reputation
7,979
Daps
150,042
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 a https://x.com or https://www.x.com url it'll automatically replace the domain with https://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://x.com" or "https://www.x.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]
 

bnew

Veteran
Joined
Nov 1, 2015
Messages
52,307
Reputation
7,979
Daps
150,042
if you're using ios maybe its possible to set up a shortcut to automatically replace x.com links with twitter.com links when it's copied to clipboard.

seems like the latest android made it difficult to edit your clipboard that way automatically.:francis:
 
Top