// ==UserScript== // @name GameFAQs Colored Text Renderer // @description This script translates , , , , , , and tags into GameFAQs friendly HTML tags, and accordingly renders messages into the aforementioned colors. // @namespace http://thelolilulelo.wordpress.com/ // @grant none // @include http://www.gamefaqs.com/boards/* // @exclude http://www.gamefaqs.com/boards/user.php* // @version 0.95 // @downloadURL none // ==/UserScript== var CONST = {NEW:'Post Message', PREV:'Preview Message', PREVS:'Preview and Spellcheck Message', EDIT:'Save Changes'}; var BTN_ID = {RED:'btnRed', BLUE:'btnBlue', GOLD:'btnGold', GREEN:'btnGreen', MAUVE:'btnMauve', PINK:'btnPink', ORANGE:'btnOrange'}; if (document.getElementsByTagName('textarea').length != 0) { document.addEventListener('click', eventListener, true); btnRed = document.createElement("input"); btnRed.setAttribute("tabindex", "-1") btnRed.setAttribute("id", BTN_ID.RED); btnRed.setAttribute("value", "Red"); btnRed.setAttribute("type", "button"); btnBlue = document.createElement("input"); btnBlue.setAttribute("tabindex", "-1") btnBlue.setAttribute("id", BTN_ID.BLUE); btnBlue.setAttribute("value", "Blue"); btnBlue.setAttribute("type", "button"); btnGreen = document.createElement("input"); btnGreen.setAttribute("tabindex", "-1") btnGreen.setAttribute("id", BTN_ID.GREEN); btnGreen.setAttribute("value", "Green"); btnGreen.setAttribute("type", "button"); btnGold = document.createElement("input"); btnGold.setAttribute("tabindex", "-1") btnGold.setAttribute("id", BTN_ID.GOLD); btnGold.setAttribute("value", "Gold"); btnGold.setAttribute("type", "button"); btnMauve = document.createElement("input"); btnMauve.setAttribute("tabindex", "-1") btnMauve.setAttribute("id", BTN_ID.MAUVE); btnMauve.setAttribute("value", "Mauve"); btnMauve.setAttribute("type", "button"); btnPink = document.createElement("input"); btnPink.setAttribute("tabindex", "-1") btnPink.setAttribute("id", BTN_ID.PINK); btnPink.setAttribute("value", "Pink"); btnPink.setAttribute("type", "button"); btnOrange = document.createElement("input"); btnOrange.setAttribute("tabindex", "-1") btnOrange.setAttribute("id", BTN_ID.ORANGE); btnOrange.setAttribute("value", "Orange"); btnOrange.setAttribute("type", "button"); if (document.getElementsByName('gamefox-quickpost-normal').length != 0) { var elemParent = document.getElementsByName('gamefox-quickpost-normal')[0]; elemParent.insertBefore(btnRed, elemParent.childNodes[0]); //elemParent.childNodes[0].appendChild(btnRed); } else { var elemParent = document.getElementsByTagName('textarea')[0]; elemParent.parentNode.parentNode.insertBefore(btnRed, elemParent.parentNode); } btnRed.parentNode.insertBefore(btnBlue, btnRed.nextSibling); btnBlue.parentNode.insertBefore(btnGreen, btnBlue.nextSibling); btnGreen.parentNode.insertBefore(btnMauve, btnGreen.nextSibling); btnMauve.parentNode.insertBefore(btnPink, btnMauve.nextSibling); btnPink.parentNode.insertBefore(btnGold, btnPink.nextSibling); btnGold.parentNode.insertBefore(btnOrange, btnGold.nextSibling); btnOrange.appendChild(document.createElement("br")); } renderColors(); function eventListener(event) { var elemVal = event.target.value; if (elemVal == CONST.NEW || elemVal == CONST.PREV || elemVal == CONST.PREVS || elemVal == CONST.EDIT) { var text = document.getElementsByTagName('textarea')[0].value; //red text = text.replace(//gi, '').replace(/<\/red>/gi, ''); //blue text = text.replace(//gi, '').replace(/<\/blue>/gi, ''); //gold text = text.replace(//gi, '').replace(/<\/gold>/gi, ''); //green text = text.replace(//gi, '').replace(/<\/green>/gi, ''); //mauve text = text.replace(//gi, '').replace(/<\/mauve>/gi, ''); //salmonpink text = text.replace(//gi, '').replace(/<\/salmonpink>/gi, ''); //orange text = text.replace(//gi, '').replace(/<\/orange>/gi, ''); //EDIT Red text = text.replace(/<\/b><\/b><\/i>/gi, '').replace(/<\/i><\/code><\/i><\/i><\/i>/gi, ''); //EDIT Blue text = text.replace(/<\/b><\/b><\/b>/gi, '').replace(/<\/i><\/code><\/i><\/i><\/b>/gi, ''); //EDIT Gold text = text.replace(/<\/i><\/b><\/b>/gi, '').replace(/<\/i><\/code><\/i><\/b><\/b>/gi, ''); //EDIT Green text = text.replace(/<\/i><\/i><\/b>/gi, '').replace(/<\/i><\/code><\/b><\/b><\/b>/gi, ''); //EDIT Mauve text = text.replace(/<\/b><\/i><\/i>/gi, '').replace(/<\/i><\/code><\/b><\/b><\/i>/gi, ''); //EDIT Salmon Pink text = text.replace(/<\/i><\/i><\/i>/gi, '').replace(/<\/i><\/code><\/b><\/i><\/i>/gi, ''); //EDIT Orange text = text.replace(/<\/i><\/i><\/code><\/b>/gi, '').replace(/<\/b><\/code><\/b><\/b><\/b>/gi, ''); document.getElementsByTagName('textarea')[0].value = text; } else { var elemId = event.target.id; var obj = document.getElementsByTagName('textarea')[0]; if (elemId == BTN_ID.RED) { insertAtCaret(obj, '', ''); } else if (elemId == BTN_ID.BLUE) { insertAtCaret(obj, '', ''); } else if (elemId == BTN_ID.GOLD) { insertAtCaret(obj, '', ''); } else if (elemId == BTN_ID.MAUVE) { insertAtCaret(obj, '', ''); } else if (elemId == BTN_ID.PINK) { insertAtCaret(obj, '', ''); } else if (elemId == BTN_ID.ORANGE) { insertAtCaret(obj, '', ''); } else if (elemId == BTN_ID.GREEN) { insertAtCaret(obj, '', ''); } } } function insertAtCaret(obj, tagOpen, tagClose) { if (obj.selectionStart) { obj.focus(); var start = obj.selectionStart; var end = obj.selectionEnd; obj.value = obj.value.substr(0, start).concat(tagOpen).concat(obj.value.substr(start, end - start)).concat(tagClose).concat(obj.value.substr(end)); } if (start != null) { setCaretTo(obj, start + tagOpen.length); } else { //obj.value += text; } } function setCaretTo(obj, pos) { if(obj.createTextRange) { var range = obj.createTextRange(); range.move('character', pos); range.select(); } else if(obj.selectionStart) { obj.focus(); obj.setSelectionRange(pos, pos); } } function renderColors() { var msg = document.getElementsByClassName('body'); if (msg.length != 0) { var i = 0; for (i = 0; i < msg.length; i++) { //INVISIBLE Orange msg[i].innerHTML = msg[i].innerHTML.replace(/<\/i><\/i><\/code><\/b>/gi, "").replace(/<\/b><\/code><\/b><\/b><\/b>/gi, ''); //INVISIBLE Salmon Pink msg[i].innerHTML = msg[i].innerHTML.replace(/<\/i><\/i><\/i>/gi, "").replace(/<\/i><\/code><\/b><\/i><\/i>/gi, ''); //INVISIBLE Mauve msg[i].innerHTML = msg[i].innerHTML.replace(/<\/b><\/i><\/i>/gi, "").replace(/<\/i><\/code><\/b><\/b><\/i>/gi, ''); //INVISIBLE Red msg[i].innerHTML = msg[i].innerHTML.replace(/<\/b><\/b><\/i>/gi, "").replace(/<\/i><\/code><\/i><\/i><\/i>/gi, ''); //INVISIBLE Blue msg[i].innerHTML = msg[i].innerHTML.replace(/<\/b><\/b><\/b>/gi, "").replace(/<\/i><\/code><\/i><\/i><\/b>/gi, ''); //INVISIBLE Gold msg[i].innerHTML = msg[i].innerHTML.replace(/<\/i><\/b><\/b>/gi, "").replace(/<\/i><\/code><\/i><\/b><\/b>/gi, ''); //INVISIBLE Green msg[i].innerHTML = msg[i].innerHTML.replace(/<\/i><\/i><\/b>/gi, "").replace(/<\/i><\/code><\/b><\/b><\/b>/gi, ''); //MAUVE msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/i><\/i><\/i><\/i><\/i><\/i>/gi, ''); //NEW red msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/i><\/i><\/i><\/i><\/i>/gi, ''); //NEW blue msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/i><\/i><\/i><\/i>/gi, ''); //NEW gold msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/i><\/i><\/i>/gi, ''); //NEW green msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/i><\/i>/gi, ''); //OLD red msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/i><\/b><\/em>/gi, ''); //OLD blue msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/b><\/b><\/em>/gi, ''); //OLD gold msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/b><\/i><\/em>/gi, ''); //OLD green msg[i].innerHTML = msg[i].innerHTML.replace(//gi, "").replace(/<\/em><\/i><\/b>/gi, ''); } } }