// ==UserScript==
// @name GameFAQs Sig Box
// @author Metallia
// @namespace Cats
// @description Appearifies the sig box while avoiding a reset on your custom sig with edits.
// @include http://www.gamefaqs.com/*
// @version 2.0
// @grant none
// @downloadURL https://update.greasyfork.cloud/scripts/20040/GameFAQs%20Sig%20Box.user.js
// @updateURL https://update.greasyfork.cloud/scripts/20040/GameFAQs%20Sig%20Box.meta.js
// ==/UserScript==
// Feel free to edit, redistribute, all that good stuff.
function decodeHtml(html) { // http://stackoverflow.com/a/7394787
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
var hiddenSigField = document.querySelector("input[name='custom_sig']");
if (hiddenSigField) {
var newP = document.createElement("p");
var newTextArea = document.createElement("textarea");
hiddenSigField.parentNode.insertBefore(newP,hiddenSigField);
hiddenSigField.parentNode.removeChild(hiddenSigField);
newP.appendChild(newTextArea);
newTextArea.setAttribute("name","custom_sig");
newTextArea.setAttribute("maxlength","165");
newTextArea.setAttribute("style","width: 100% !important; height: 46px !important;");
var postPreview = document.evaluate('//table[@class="board message"]//td[@class="msg"]//div[@class="msg_body"]//div[@class="signature"]//div[@class="sig_text"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (postPreview) {
var sig = postPreview.innerHTML;
sig = sig.replace("
","\n");
newTextArea.textContent = decodeHtml(sig);
}
}
function myFightMoney(item,id,sig) { // Yes, this is stupid, but I couldn't find any better way to handle this without the loop overwriting information or the event listener throwing a fit.
item.addEventListener("mouseleave", function () {profoundSadness(item,id,sig)}, false);
}
function profoundSadness(item,id,sig) {
if ((item.getAttribute("onmousedown") === null) && (document.getElementById("sig_box_"+id) === null)) {
var newSigBox = document.createElement('textarea');
newSigBox.value = sig;
newSigBox.id= "sig_box_"+id;
newSigBox.style = "width: 100% !important; height: 46px !important;"; // May need to adjust the css depending on your own settings.
newSigBox.maxlength = "165";
item.parentNode.parentNode.parentNode.parentNode.childNodes[0].insertBefore(newSigBox,item.parentNode.parentNode.parentNode.parentNode.childNodes[0].childNodes[2]);
// There might be more than one input[name=custom_sig] on the page if you open multiple edit fields, so I just set its value to the 'current' sig box repeatedly.
document.querySelector("input[name='custom_sig']").value = sig;
newSigBox.addEventListener("change", function () {document.querySelector("input[name='custom_sig']").value = this.value}, false);
var saveButton = document.querySelector("input[name='"+id+"']");
saveButton.addEventListener("focus", function () {document.querySelector("input[name='custom_sig']").value = newSigBox.value}, false);
saveButton.addEventListener("mouseover", function () {document.querySelector("input[name='custom_sig']").value = newSigBox.value}, false);
} else {
return;
}
}
var editButtons = document.evaluate('//span[@class="postaction"]//a[text()="edit"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if (editButtons.snapshotItem(0)) {
var currentPostSig = new Array();
var currentPostID = new Array();
for (var i = 0; i < editButtons.snapshotLength; i++) {
currentPostSig[i] = editButtons.snapshotItem(i).parentNode.parentNode.parentNode.parentNode.childNodes[0].getElementsByClassName("sig_text")[0].innerHTML.replace("
","\n");
currentPostID[i] = editButtons.snapshotItem(i).getAttribute('onclick').split(',')[2].split(')')[0];
editButtons.snapshotItem(i).setAttribute("onmousedown",editButtons.snapshotItem(i).getAttribute("onclick").substring(7)+"this.removeAttribute('onmousedown');");
editButtons.snapshotItem(i).removeAttribute("onclick");
myFightMoney(editButtons.snapshotItem(i),currentPostID[i],currentPostSig[i]);
}
}