// ==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 = ` ${smiley.shortname} `; 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(); })();