Surprise! We've been running on hardware provided by BuyVM for a few months and wanted to show them a little appreciation.
Running a paste site comes with unique challenges, ones that aren't always obvious and hard to control. As such, BuyVM offered us a home where we could worry less about the hosting side of things and focus on maintaining a clean and useful service! Go check them out and show them some love!
Submitted on September 3, 2024 at 08:24 AM

New Paste 1 (Text)

// ==UserScript==
// @name         OG Coli Smilies
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Restores old smilies functionality by adding multiple images to the Smilies section and allows insertion at the current cursor position in editable fields.
// @author       You
// @match        https://www.thecoli.com/threads/*
// @match        https://thecoli.com/threads/*
// @match        https://www.thecoli.com/forums/*/post-thread
// @match        https://thecoli.com/forums/*/post-thread
// @match        https://www.thecoli.com/conversations/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var smilies = [
        {shortname: ":deadmanny2:", url: "https://i.imgur.com/dX5Epp2.png"},
        {shortname: ":hamster:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/hamster.png"},
        {shortname: ":usure:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/usure.png"},
        {shortname: ":rejoice:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/rejoice.png"},
        {shortname: ":dwillhuh:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/dwill.png"},
        {shortname: ":smugfavre:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smugfavre.png"},
        {shortname: ":jawalrus:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/jawalrus.png"},
        {shortname: ":leostare:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/leo.png"},
        {shortname: ":pachah:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/pachah1.png"},
        {shortname: ":wtb:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/wtb3.png"},
        {shortname: ":merchant:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/merchant.png"},
        {shortname: ":upsetfavre:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/llLG0.png"},
        {shortname: ":trash:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/trash.png"},
        {shortname: ":deadmanny:", url: "https://i.imgur.com/dX5Epp2.png"},
        {shortname: ":ld:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/ld.png"},
        {shortname: ":ooh:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/ooh.png"},
        {shortname: ":krs:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/krs.png"},
        {shortname: ":smugdraper:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smugdon.png"},
        {shortname: ":shaq2:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/shaq2.png"},
        {shortname: ":lawd:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/babylawd.png"},
        {shortname: ":win:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/win.png"},
        {shortname: ":cape:", url: "https://www.thecoli.com/media/superman-cape.22015/full"},
        {shortname: ":mindblown:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/mindblown.png"},
        {shortname: ":rudy:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/rudy2.png"},
        {shortname: ":smugbiden:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smugbiden.png"},
        {shortname: ":drool:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/drool.gif"},
        {shortname: ":biggrin:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/biggrin.gif"},
        {shortname: ":evil:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/evil.gif"},
        {shortname: ":ninja1:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/ninja_1.gif"},
        {shortname: ":king:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/king.gif"},
        {shortname: ":no:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/no.gif"},
        {shortname: ":drunk:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/drunk.gif"},
        {shortname: ":facepalm:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/facepalm.gif"},
        {shortname: ":rambo:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/rambo.gif"},
        {shortname: ":hug:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/hug.gif"},
        {shortname: ":lift:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smiley-vault-character-028.gif"},
        {shortname: ":gag:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/gag.gif"},
        {shortname: ":mj:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/mj.gif"},
        {shortname: ":boss:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/boss.gif"},
        {shortname: ":zzz:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/zzz.gif"},
        {shortname: ":deadhorse:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/beatdeadhorse.gif"},
        {shortname: ":stylin:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/stylin.gif"},
        {shortname: ":snooze:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/sleepsmilie.gif"},
        {shortname: ":dj2:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/dj2.gif"},
        {shortname: ":camby:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/camby.png"},
        {shortname: ":coffee:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/coffee.gif"},
        {shortname: ":sad:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/sad.gif"},
        {shortname: ":smile:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smile.gif"},
        {shortname: ":dry:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/dry.gif"},
        {shortname: ":tongue:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/tongue.gif"},
        {shortname: ":bustback:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/bustback.gif"},
        {shortname: ":weirdo:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/weirdo.gif"},
        {shortname: ":ban:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/ban.gif"},
        {shortname: ":stop:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/stop.gif"},
        {shortname: ":piss:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/piss.gif"},
        {shortname: ":popcorn:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/popcorn.gif"},
        {shortname: ":clap:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/clap.gif"},
        {shortname: ":smh:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smh.gif"},
        {shortname: ":smoker:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/smoker.gif"},
        {shortname: ":blink:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/blink.gif"},
        {shortname: ":rolleyes:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/rolleyes.gif"},
        {shortname: ":rip:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/rip.gif"},
        {shortname: ":tu:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/tu.gif"},
        {shortname: ":eek:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/eek.gif"},
        {shortname: ":scheme:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/scheme.gif"},
        {shortname: ":hula:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/hula.gif"},
        {shortname: ":devil:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/devil.gif"},
        {shortname: ":yawn:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/yawn.gif"},
        {shortname: ":wub:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/wub.gif"},
        {shortname: ":slapfight:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/slapfight.gif"},
        {shortname: ":cook:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/cook.gif"},
        {shortname: ":handshake:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/handshake.gif"},
        {shortname: ":yayo:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/yayo.gif"},
        {shortname: ":yes:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/yes.gif"},
        {shortname: ":huh:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/huh.gif"},
        {shortname: ":old:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/old.gif"},
        {shortname: ":hmm:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/hmm.gif"},
        {shortname: ":mad:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/mad.gif"},
        {shortname: ":bow:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/bow.gif"},
        {shortname: ":guilty:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/guilty.gif"},
        {shortname: ":queen:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/queen.gif"},
        {shortname: ":cool:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/cool.gif"},
        {shortname: ":cheers:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/cheers.gif"},
        {shortname: ":fire:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/fire.gif"},
        {shortname: ":whistle:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/whistle.gif"},
        {shortname: ":violent:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/violent.gif"},
        {shortname: ":thumbsdown:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/thumbsdown.gif"},
        {shortname: ":confused:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/confused.gif"},
        {shortname: ":angry:", url: "https://www.thecoli.com/styles/default/xenforo/smilies/angry.gif"}
    ];

    var lastCursorPosition = null;

    function addToSmilies() {
        var smiliesList = document.querySelector(".js-emojiList");
        if (smiliesList) {
            smilies.forEach(function(smiley) {
                var existingEmoji = smiliesList.querySelector(`[data-shortname="${smiley.shortname}"]`);
                if (!existingEmoji) {
                    console.log("Adding " + smiley.shortname + " to the Smilies section.");
                    var newEmoji = document.createElement("li");
                    newEmoji.innerHTML = `<a class="js-emoji" data-shortname="${smiley.shortname}">
                        <img src="${smiley.url}" class="smilie" loading="lazy" alt="${smiley.shortname}" title="${smiley.shortname}" data-shortname="${smiley.shortname}">
                    </a>`;
                    smiliesList.appendChild(newEmoji);

                    var newEmojiLink = newEmoji.querySelector(`[data-shortname="${smiley.shortname}"]`);
                    if (newEmojiLink) {
                        newEmojiLink.addEventListener("click", handleEmojiClick);
                    }
                } else {
                    existingEmoji.removeEventListener("click", handleEmojiClick); // Remove any existing event listener
                    existingEmoji.addEventListener("click", handleEmojiClick); // Add the event listener
                }
            });
        } else {
            console.log("Could not find the Smilies section.");
        }
    }

    function handleEmojiClick(event) {
        event.preventDefault();
        var shortname = event.currentTarget.dataset.shortname;
        insertIntoEditable(shortname);
    }

    function insertIntoEditable(shortname) {
        var smiley = smilies.find(smiley => smiley.shortname === shortname);
        if (!smiley) return;

        var editableElement = document.querySelector(".fr-element.fr-view[contenteditable='true']");
        if (editableElement) {
            editableElement.focus(); // Ensure the editable element is focused
            var selection = window.getSelection();
            if (lastCursorPosition) {
                selection.removeAllRanges();
                selection.addRange(lastCursorPosition);
            }
            if (selection.rangeCount > 0) {
                var range = selection.getRangeAt(0);
                var img = document.createElement("img");
                img.src = smiley.url;
                img.alt = shortname;
                img.title = shortname;
                img.classList.add("smilie", "fr-fic", "fr-dii", "fr-draggable");
                img.setAttribute("data-shortname", shortname);

                range.insertNode(img);

                // Move the cursor position to immediately after the inserted image
                range.setStartAfter(img);
                range.setEndAfter(img);
                selection.removeAllRanges();
                selection.addRange(range);

                // Update the last cursor position
                lastCursorPosition = range.cloneRange();
            } else {
                console.log("No selection range available.");
            }
        } else {
            console.log("Could not find the editable element.");
        }
    }

    function observeEditableField() {
        var editableElement = document.querySelector(".fr-element.fr-view[contenteditable='true']");
        if (editableElement) {
            editableElement.addEventListener('mouseup', saveCursorPosition);
            editableElement.addEventListener('keyup', saveCursorPosition);
        }
    }

    function saveCursorPosition() {
        var selection = window.getSelection();
        if (selection.rangeCount > 0) {
            lastCursorPosition = selection.getRangeAt(0).cloneRange();
        }
    }

    function observeSmiliesSection() {
        var targetNode = document.body;
        var config = { childList: true, subtree: true };

        var observer = new MutationObserver(function(mutationsList, observer) {
            for (var mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    addToSmilies();
                    observeEditableField();
                }
            }
        });

        observer.observe(targetNode, config);
    }

    observeSmiliesSection();
})();