123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
// ==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();
})();