Make text into rainbow
// ==UserScript==
// @name Rainbow Text
// @version 1.1
// @description Make text into rainbow
// @namespace awkward_potato:3
// @include https://forums.oneplus.net/threads/*
// @include https://forums.oneplus.net/conversations/*
// @grant none
// ==/UserScript==
function tohex(decval) {
var l, h;
var str = "";
l = Math.floor(decval % 16);
h = Math.floor(decval / 16);
if (h < 10) {
str = "" + h;
}
if (h > 9) {
switch (h) {
case 10:
str = "A";
break;
case 11:
str = "B";
break;
case 12:
str = "C";
break;
case 13:
str = "D";
break;
case 14:
str = "E";
break;
case 15:
str = "F";
break;
default:
str = "X";
break;
}
}
if (l < 10) {
str = str + "" + l;
}
if (l > 9) {
switch (l) {
case 10:
str += "A";
break;
case 11:
str += "B";
break;
case 12:
str += "C";
break;
case 13:
str += "D";
break;
case 14:
str += "E";
break;
case 15:
str += "F";
break;
default:
str += "X";
break;
}
}
return str;
}
function todec(hexval) {
var l, h;
hexstr = new String(hexval).toUpperCase();
switch (hexstr.charAt(0)) {
case "A":
h = 10;
break;
case "B":
h = 11;
break;
case "C":
h = 12;
break;
case "D":
h = 13;
break;
case "E":
h = 14;
break;
case "F":
h = 15;
break;
default:
h = eval(hexstr.charAt(0));
}
switch (hexstr.charAt(1)) {
case "A":
l = 10;
break;
case "B":
l = 11;
break;
case "C":
l = 12;
break;
case "D":
l = 13;
break;
case "E":
l = 14;
break;
case "F":
l = 15;
break;
default:
l = eval(hexstr.charAt(1));
}
return l + 16 * h;
}
function hexToRGB(hexval) {
str = new String(hexval).toUpperCase();
if (str.charAt(0) == "#") str = str.substr(1);
g_r = todec(str.substr(0, 2));
g_g = todec(str.substr(2, 2));
g_b = todec(str.substr(4, 2));
}
function getSFXColor(k) {
var r, g, b, k1, min, max;
//if (g_cstyle == 0) {
k1 = k;
r = 127 + 127 * Math.cos(k1 - .5);
g = 127 + 127 * Math.cos(k1 - 2.5);
b = 127 + 127 * Math.cos(k1 - 4.5);
min = r;
if (g < min) min = g;
if (b < min) min = b;
r -= min;
g -= min;
b -= min;
max = r;
if (g > max) max = g;
if (b > max) max = b;
max = 255.0 / max;
r *= max;
g *= max;
b *= max;
var tekBright = 200;
var tekContrast = 255;
max = (tekBright / 255) * (tekContrast / 255);
min = (255 - tekContrast) * (tekBright / 255);
r = r * max + min;
g = g * max + min;
b = b * max + min;
if (r < 0) r = 0;
if (g < 0) g = 0;
if (b < 0) b = 0;
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
/*}
if (g_cstyle == 1) {
k -= Math.floor(k);
r = r1 + k * dr;
g = g1 + k * dg;
b = b1 + k * db;
}
if (g_cstyle == 2) {
k -= 2 * Math.floor(k / 2);
if (k < 1) {
r = r1 + k * dr;
g = g1 + k * dg;
b = b1 + k * db;
}
if (k >= 1) {
k -= 2;
r = r1 - k * dr;
g = g1 - k * dg;
b = b1 - k * db;
}
}
if (g_cstyle == 3) {
k -= 3 * Math.floor(k / 3);
if (k < 1) {
r = r1 + k * dr;
g = g1 + k * dg;
b = b1 + k * db;
}
if (k >= 1 && k < 2) {
k -= 1;
r = r2 + k * dr1;
g = g2 + k * dg1;
b = b2 + k * db1;
}
if (k >= 2) {
k -= 2;
r = r3 + k * dr2;
g = g3 + k * dg2;
b = b3 + k * db2;
}
}*/
g_r = r;
g_g = g;
g_b = b;
}
function setOutSizeIndicator(divtext) {
document.getElementById("charssub").setAttribute("id", "oldsub");
var newdiv = document.createElement("div");
newdiv.setAttribute("id", "charssub");
var newtext = document.createTextNode(divtext);
newdiv.appendChild(newtext);
document.getElementById("chars").appendChild(newdiv);
document.getElementById("chars").removeChild(document.getElementById("oldsub"));
}
function preview() {}
function MakeSFX(inputString, outputHTML) {
var r, g, b;
var i, j, k, l;
var x, scale, res;
var min, max;
var in_tag = 0;
var oignumi = 0;
temp = new String("");
var numreps = 1;//parseInt($("#gradient_repeat").val());
if (numreps < 1) numreps = 1;
if (numreps > 10) numreps = 10;
instr = inputString;
outstr = new String("");
tempstr = new String("");
res = 1;
j = instr.length;
//if (gradientType == "rainbow") {
scale = Math.PI * (2 * eval(numreps) - .21) / j;
g_cstyle = 0;
/*}
if (gradientType == "oneway") {
scale = numreps / j;
g_cstyle = 1;
}
if (gradientType == "backandforth") {
scale = 2.0 * numreps / j;
g_cstyle = 2;
}
if (gradientType == "tricolor") {
scale = 3.0 * numreps / j;
g_cstyle = 3;
}
if (gradientType == 'oneway' || gradientType == 'backandforth') {
hexToRGB($("#gradient_1").val());
r1 = g_r;
g1 = g_g;
b1 = g_b;
hexToRGB($("#gradient_2").val());
r2 = g_r;
g2 = g_g;
b2 = g_b;
dr = 0.0 + r2 - r1;
dg = 0.0 + g2 - g1;
db = 0.0 + b2 - b1;
}*/
for (i = 0; i < j; i++) {
if (instr.charAt(i) == "<") in_tag = 1;
if (in_tag == 0) {
k = scale * i;
getSFXColor(k);
r = g_r;
g = g_g;
b = g_b;
tempstr = tohex(r) + tohex(g) + tohex(b);
temp = instr.charAt(i);
if (instr.charAt(i) == "&") {
for (l = i + 1; l < j; l++) {
if (instr.charAt(l) == " ") break;
if (instr.charAt(l) == "<") break;
if (instr.charAt(l) == ">") break;
if (instr.charAt(l) == ";") break;
}
if (instr.charAt(l) == ";") {
temp = instr.substr(i, l - i + 1);
}
}
if (outputHTML) {
if (i % res == 0) {
outstr = outstr + "<font color='#" + tempstr + "'>";
oignumi = 1;
}
outstr = outstr + temp;
if ((i + 1) % res == 0) {
outstr = outstr + "</font>";
oignumi = 0;
}
} else {
if (i % res == 0) {
outstr = outstr + "[color=#" + tempstr + "]";
oignumi = 1;
}
outstr = outstr + temp;
if ((i + 1) % res == 0) {
outstr = outstr + "[/color]";
oignumi = 0;
}
}
if (temp.length > 1) i += (temp.length - 1);
}
if (in_tag == 1) outstr = outstr + instr.charAt(i);
if (instr.charAt(i) == ">") in_tag = 0;
}
if (oignumi > 0) {
if (document.colorform.out_format.value == "html") outstr = outstr + "</font>";
if (document.colorform.out_format.value == "bbc") outstr = outstr + "[/color]";
}
return outstr;
}
function UpdateRGB(ctl) {
var lum;
ctl.style.backgroundColor = ctl.value;
hexToRGB(ctl.value);
lum = .29 * g_r + .57 * g_g + .14 * g_b;
if (lum < 96) {
ctl.style.color = "#FFFFFF";
} else {
ctl.style.color = "#000000";
}
preview();
}
function flipbkg(ctl) {
if (prevbkc == "#FFFFFF") prevbkc = "#000000";
else prevbkc = "#FFFFFF";
ctl.style.backgroundColor = prevbkc;
}
function rainbow() {
var iframe;
if (document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_NoAutoComplete')[0]) {
iframe = document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_NoAutoComplete')[0];
} else if (document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_')[0]) {
iframe = document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_')[0];
}
var message = iframe.contentWindow.document.getElementsByTagName('body')[0].innerHTML;
if (message.indexOf("http") == -1 && message.indexOf("www") == -1 && message.indexOf("@") == -1 && message.indexOf("QUOTE") == -1 && message.indexOf("[/color]") == -1 && message.indexOf("<font color") == -1&& message.indexOf(":") == -1 && message.indexOf("[COLOR") == -1) {
iframe.contentWindow.document.getElementsByTagName('body')[0].innerHTML = MakeSFX(message, false);
} else {
var imgregex = /(\<img([\s\S]*?)\>)/igm;
var linkregex= /(\<a([\s\S]*?)<\/a\>)/igm;
var urlregex = /(((f|ht)tps?:\/\/)(.*?)[\S][^<>]+)/igm;
var regex =/(\@(\badam kristo\b|\bHanson Lee\b|[\S]+))|(\[QUOTE\]?[\s\S]*?\[\/QUOTE\])|(\[SPOILER\]?[\s\S]*?\[\/SPOILER\])|(\[IMG\]?[\s\S]*?\[\/IMG\])|(\[MEDIA\]?[\s\S]*?\[\/MEDIA\])|(\[PHP\]?[\s\S]*?\[\/PHP\])|(\[CODE\]?[\s\S]*?\[\/CODE\])|(\[HTML\]?[\s\S]*?\[\/HTML\])|(\[COLOR\]?[\s\S]*?\[\/COLOR\])|\;\)|\:D|\:\(|8\-\)|\:\)|(\:\/)(?![\/])|\:P/igm
var imgrest = /(\[color=#[\w\d]+\]§\[\/color\])/im;
var linkrest = /(\[color=#[\w\d]+\]╗\[\/color\])/im;
var urlrest = /(\[color=#[\w\d]+\]▒\[\/color\])/im;
var tagrest = /(\[color=#[\w\d]+\]▓\[\/color\])/im;
var imgs = message.match(imgregex);
var links = message.match(linkregex);
var urls = message.match(urlregex);
var misc = message.match(regex);
message = message.replace(imgregex, "§");
message = message.replace(linkregex, "╗");
message = message.replace(urlregex, "▒");
message = message.replace(regex, "▓");
message = MakeSFX(message, false);
var numImgs = (imgs === null) ? 0 : imgs.length;
var numLink = (links === null) ? 0 : links.length;
var numUrls = (urls === null) ? 0 : urls.length;
var numMisc = (misc === null) ? 0 : misc.length;
for (var u = 0; u < numImgs; u++) {
message = message.replace(imgrest, imgs[u]);
}
for (var u = 0; u < numLink; u++) {
message = message.replace(linkrest, links[u]);
}
for (var u = 0; u < numUrls; u++) {
message = message.replace(urlrest, " <a href=\"" +urls[u]+ "\">" +urls[u]+ "</a> ");
}
for (var i = 0; i < numMisc; i++) {
message = message.replace(tagrest, misc[i]);
}
iframe.contentWindow.document.getElementsByTagName('body')[0].innerHTML = message;
}
}
var iframe2;
if (document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_NoAutoComplete')[0]) {
iframe2 = document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_NoAutoComplete')[0];
} else if (document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_')[0]) {
iframe2 = document.getElementsByClassName('redactor_textCtrl redactor_MessageEditor redactor_BbCodeWysiwygEditor redactor_')[0];
}
iframe2=iframe2.contentWindow.document.getElementsByTagName('body')[0];
//Rainbowfy Text
if ($('input[value="Post Reply"]').length > 0) {
var rainbowfyBtn = $(' <button class="button">Rainbowfy</button>');
$('input[value="Post Reply"]').after(rainbowfyBtn);
rainbowfyBtn.click(function(e) {
e.preventDefault();
rainbow();
});
}