// ==UserScript==
// @name GameFAQs Colored Text Renderer
// @description This script translates <red>, <blue>, <gold>, <green>, <mauve>, <salmonpink>, and <orange> 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/*
// @version 0.81
// ==/UserScript==
var CONST = {NEW:'Post Message', PREV:'Preview Message', PREVS:'Preview and Spellcheck Message'};
var BTN_ID = {RED:'btnRed', BLUE:'btnBlue', GOLD:'btnGold', GREEN:'btnGreen', MAUVE:'btnMauve', PINK:'btnPink', ORANGE:'btnOrange'};
if (document.getElementsByName('messagetext').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");
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");
btnGold = document.createElement("input");
btnGold.setAttribute("tabindex", "-1")
btnGold.setAttribute("id", BTN_ID.GOLD);
btnGold.setAttribute("value", "Gold");
btnGold.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.getElementsByName('messagetext')[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(btnOrange, btnPink.nextSibling);
btnOrange.parentNode.insertBefore(btnGold, btnOrange.nextSibling);
btnGold.appendChild(document.createElement("br"));
}
renderColors();
function eventListener(event) {
var elemVal = event.target.value;
if (elemVal == CONST.NEW || elemVal == CONST.PREV || elemVal == CONST.PREVS) {
var text = document.getElementsByName('messagetext')[0].value;
//red
text = text.replace(/<red>/gi, '<i><b><b><code></code></b></b></i>').replace(/<\/red>/gi, '<i><i><i><code><i><code></code></i></code></i></i></i>');
//blue
text = text.replace(/<blue>/gi, '<b><b><b><code></code></b></b></b>').replace(/<\/blue>/gi, '<b><i><i><code><i><code></code></i></code></i></i></b>');
//gold
text = text.replace(/<gold>/gi, '<b><b><i><code></code></i></b></b>').replace(/<\/gold>/gi, '<b><b><i><code><i><code></code></i></code></i></b></b>');
//green
text = text.replace(/<green>/gi, '<b><i><i><code></code></i></i></b>').replace(/<\/green>/gi, '<b><b><b><code><i><code></code></i></code></b></b></b>');
//mauve
text = text.replace(/<mauve>/gi, '<i><i><b><code></code></b></i></i>').replace(/<\/mauve>/gi, '<i><b><b><code><i><code></code></i></code></b></b></i>');
//salmonpink
text = text.replace(/<salmonpink>/gi, '<i><i><i><code></code></i></i></i>').replace(/<\/salmonpink>/gi, '<i><i><b><code><i><code></code></i></code></b></i></i>');
//orange
text = text.replace(/<orange>/gi, '<b><code><i><i><code></code></i></i></code></b>').replace(/<\/orange>/gi, '<b><b><b><code><b><code></code></b></code></b></b></b>');
document.getElementsByName('messagetext')[0].value = text;
} else {
var elemId = event.target.id;
var obj = document.getElementsByName('messagetext')[0];
if (elemId == BTN_ID.RED) {
insertAtCaret(obj, '<red>', '</red>');
} else if (elemId == BTN_ID.BLUE) {
insertAtCaret(obj, '<blue>', '</blue>');
} else if (elemId == BTN_ID.GOLD) {
insertAtCaret(obj, '<gold>', '</gold>');
} else if (elemId == BTN_ID.MAUVE) {
insertAtCaret(obj, '<mauve>', '</mauve>');
} else if (elemId == BTN_ID.PINK) {
insertAtCaret(obj, '<salmonpink>', '</salmonpink>');
} else if (elemId == BTN_ID.ORANGE) {
insertAtCaret(obj, '<orange>', '</orange>');
} else if (elemId == BTN_ID.GREEN) {
insertAtCaret(obj, '<green>', '</green>');
}
}
}
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.lenght != 0) {
var i = 0;
for (i = 0; i < msg.length; i++) {
//INVISIBLE Orange
msg[i].innerHTML = msg[i].innerHTML.replace(/<b><code><i><i><\/i><\/i><\/code><\/b>/gi, "<font color=#FFA500><b>").replace(/<b><b><b><code><b><\/b><\/code><\/b><\/b><\/b>/gi, '</b></font>');
//INVISIBLE Salmon Pink
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><\/i><\/i><\/i>/gi, "<font color=#FF9999><b>").replace(/<i><i><b><code><i><\/i><\/code><\/b><\/i><\/i>/gi, '</b></font>');
//INVISIBLE Mauve
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><b><\/b><\/i><\/i>/gi, "<font color=#925f6e><b>").replace(/<i><b><b><code><i><\/i><\/code><\/b><\/b><\/i>/gi, '</b></font>');
//INVISIBLE Red
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><b><b><\/b><\/b><\/i>/gi, "<font color=#F00><b>").replace(/<i><i><i><code><i><\/i><\/code><\/i><\/i><\/i>/gi, '</b></font>');
//INVISIBLE Blue
msg[i].innerHTML = msg[i].innerHTML.replace(/<b><b><b><\/b><\/b><\/b>/gi, "<font color=#00F><b>").replace(/<b><i><i><code><i><\/i><\/code><\/i><\/i><\/b>/gi, '</b></font>');
//INVISIBLE Gold
msg[i].innerHTML = msg[i].innerHTML.replace(/<b><b><i><\/i><\/b><\/b>/gi, "<font color=#FC0><b>").replace(/<b><b><i><code><i><\/i><\/code><\/i><\/b><\/b>/gi, '</b></font>');
//INVISIBLE Green
msg[i].innerHTML = msg[i].innerHTML.replace(/<b><i><i><\/i><\/i><\/b>/gi, "<font color=#6C0><b>").replace(/<b><b><b><code><i><\/i><\/code><\/b><\/b><\/b>/gi, '</b></font>');
//MAUVE
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i><i><i>/gi, "<font color=#925f6e><b>").replace(/<\/i><\/i><\/i><\/i><\/i><\/i>/gi, '</b></font>');
//NEW red
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i><i>/gi, "<font color=#F00><b>").replace(/<\/i><\/i><\/i><\/i><\/i>/gi, '</b></font>');
//NEW blue
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i>/gi, "<font color=#00F><b>").replace(/<\/i><\/i><\/i><\/i>/gi, '</b></font>');
//NEW gold
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i>/gi, "<font color=#FC0><b>").replace(/<\/i><\/i><\/i>/gi, '</b></font>');
//NEW green
msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i>/gi, "<font color=#6C0><b>").replace(/<\/i><\/i>/gi, '</b></font>');
//OLD red
msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><i>/gi, "<font color=#F00><b>").replace(/<\/i><\/b><\/em>/gi, '</b></font>');
//OLD blue
msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><b>/gi, "<font color=#00F><b>").replace(/<\/b><\/b><\/em>/gi, '</b></font>');
//OLD gold
msg[i].innerHTML = msg[i].innerHTML.replace(/<em><i><b>/gi, "<font color=#FC0><b>").replace(/<\/b><\/i><\/em>/gi, '</b></font>');
//OLD green
msg[i].innerHTML = msg[i].innerHTML.replace(/<b><i><em>/gi, "<font color=#6C0><b>").replace(/<\/em><\/i><\/b>/gi, '</b></font>');
}
}
}