// ==UserScript==
// @name BBCodes for MAL
// @namespace No Page
// @description Add BBCode to MAL Forum posts
// @author Al_eXs
// @include *myanimelist.net/forum/?topicid=*
// @include *myanimelist.net/forum/?action=message&msgid=*
// @include *myanimelist.net/forum/?action=message&topic_id=*
// @include *myanimelist.net/mymessages.php?go=send*
// @include *myanimelist.net/editprofile.php*
// @include *myanimelist.net/myblog.php*
// @include *myanimelist.net/forum/?action=post*
// @include *myanimelist.net/forum/index.php?action=post&boardid=*
// @include *myanimelist.net/clubs.php?cid=*
// @include *myanimelist.net/profile/*
// @include *myanimelist.net/modules.php?go=report&type=forummessage&id=*
// @include *myanimelist.net/mymessages.php?toname=*
// @include *myanimelist.net/comtocom.php?id1=*
// @exclude *myanimelist.net/editprofile.php?go=stylepref&do=cssadv&id=*
// @version 1.0.8
// ==/UserScript==
function addtag(obj, tag) {
beforeText = obj.value.substring(0, obj.selectionStart);
selectedText = obj.value.substring(obj.selectionStart, obj.selectionEnd);
afterText = obj.value.substring(obj.selectionEnd, obj.value.length);
switch(tag) {
case "bold":
tagOpen = "[b]";
tagClose = "[/b]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "strike":
tagOpen = "[s]";
tagClose = "[/s]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "italic":
tagOpen = "[i]";
tagClose = "[/i]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "underline":
tagOpen = "[u]";
tagClose = "[/u]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "code":
tagOpen = "[code]";
tagClose = "[/code]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "center":
tagOpen = "[center]";
tagClose = "[/center]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "right":
tagOpen = "[right]";
tagClose = "[/right]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "spoiler":
tagOpen = "[spoiler]";
tagClose = "[/spoiler]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "url":
desc = prompt("Enter URL description", "");
if (desc == null) {
break;
}
tagOpen = "[url=";
tagClose = "]" + desc + "[/url]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "url=":
url = prompt("Enter URL", "");
if (url == null) {
break;
}
tagOpen = "[url=" + url + "]";
tagClose = "[/url]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "image":
imgURL = prompt("Enter image URL", "");
if (imgURL == null) {
break;
}
tagOpen = "[img]";
tagClose = "[/img]";
newText = beforeText + tagOpen + imgURL + tagClose + afterText;
break;
case "size":
// txtsize = prompt("Enter the size", "");
txtsize = document.getElementById("Size");
if (txtsize == "Size") {
break;
}
tagOpen = "[size=" + String(txtsize.value) + "]";
tagClose = "[/size]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "profile":
profile = prompt("Enter profile name", "");
if (profile == null) {
break;
}
tagOpen = "[profile=" + profile + "]";
tagClose = "[/profile]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "youtube":
yt = prompt("Enter complete youtube url", "");
if (yt == null) {
break;
}
yt1 = yt.replace("http://www.youtube.com/watch?v=","");
yt2 = yt1.substring(0,11);
tagOpen = "[yt]";
tagClose = "[/yt]";
newText = beforeText + tagOpen + yt2 + tagClose + afterText;
break;
case "colour":
// colour = prompt("Enter colour", "");
colour = document.getElementById("Colour");
if (colour == "Select") {
break;
}
tagOpen = "[colour=" + String(colour.value) + "]";
tagClose = "[/colour]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "quote=":
quote = prompt("Enter quoted person name", "");
if (quote == null) {
break;
}
tagOpen = "[quote=" + quote + "]";
tagClose = "[/quote]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "quote":
tagOpen = "[quote]";
tagClose = "[/quote]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "list":
tagOpen = "[list][*]";
tagClose = "[/list]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "list=1":
tagOpen = "[list=1][*]";
tagClose = "[/list]";
newText = beforeText + tagOpen + selectedText + tagClose + afterText;
break;
case "[*]":
tagOpen = "[*]";
newText = beforeText + tagOpen + selectedText + afterText;
break;
}
obj.value = newText;
}
function xpath(query, object) {
if(!object) var object = document;
return document.evaluate(query, object, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}
function getXpathRes(){
var path = xpath("//textarea[@class='textarea']");
if(path.snapshotLength == 0) path = xpath("//textarea[@class='inputtext']");
return (path.snapshotLength > 0) ? path : false;
}
var xpathRes = getXpathRes();
if(xpathRes){
var div1 = document.createElement("div");
div1.style="margin: 0px; margin-top:10px; margin-bottom:5px";
div1.align ="Left";
div1.id = "myBBcode";
div1.innerHTML = " ";
div1.style.display = "block";
xpathRes.snapshotItem(0).parentNode.insertBefore(div1, xpathRes.snapshotItem(0));
var post = document.createElement("input");
post.type = "button";
post.value = "Bold";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'bold');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Italic";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'italic');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Strike";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'strike');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Underline";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'underline');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Code";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'code');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Center";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'center');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Right";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'right');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "URL";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'url');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "URL=";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'url=');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Spoiler";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'spoiler');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "IMG";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'image');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Youtube";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'youtube');}, false);
div1.appendChild(post);
var post = document.createElement("BROKEN");
post.type = "button";
post.value = "Profile";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'profile');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Quote=";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'quote=');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "Quote";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'quote');}, false);
div1.appendChild(post);
var postSize = document.createElement("select");
postSize.id = "Size";
//postSize.value = "Size";
var opt = document.createElement("option");
opt.value = "Size";
opt.appendChild(document.createTextNode('Size'));
postSize.appendChild(opt);
var opt = document.createElement("option");
opt.value = "50";
opt.appendChild(document.createTextNode('Small'));
postSize.appendChild(opt);
var opt = document.createElement("option");
opt.value = "100";
opt.appendChild(document.createTextNode('Normal'));
postSize.appendChild(opt);
var opt = document.createElement("option");
opt.value = "300";
opt.appendChild(document.createTextNode('Medium'));
postSize.appendChild(opt);
var opt = document.createElement("option");
opt.value = "600";
opt.appendChild(document.createTextNode('Big'));
postSize.appendChild(opt);
var opt = document.createElement("option");
opt.value = "900";
opt.appendChild(document.createTextNode('Ultra Big'));
postSize.appendChild(opt);
postSize.addEventListener('change', function() {addtag(document.getElementsByTagName("textarea")[0],'size'); postSize.value = 'Size'}, false);
div1.appendChild(postSize);
var postColour = document.createElement("select");
postColour.id = "Colour";
//postColour.value = "Colour";
var opt = document.createElement("option");
opt.value = "Select";
opt.appendChild(document.createTextNode('Select Colour'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "gray";
opt.appendChild(document.createTextNode('Gray'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "blue";
opt.appendChild(document.createTextNode('Blue'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "red";
opt.appendChild(document.createTextNode('Red'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "green";
opt.appendChild(document.createTextNode('Green'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "yellow";
opt.appendChild(document.createTextNode('Yellow'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "pink";
opt.appendChild(document.createTextNode('Pink'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "navy";
opt.appendChild(document.createTextNode('Navy'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "white";
opt.appendChild(document.createTextNode('White'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "black";
opt.appendChild(document.createTextNode('Black'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "orange";
opt.appendChild(document.createTextNode('Orange'));
postColour.appendChild(opt);
var opt = document.createElement("option");
opt.value = "purple";
opt.appendChild(document.createTextNode('Purple'));
postColour.appendChild(opt);
postColour.addEventListener('change', function() {addtag(document.getElementsByTagName("textarea")[0],'colour'); postColour.value = 'Select'}, false);
div1.appendChild(postColour);
var post = document.createElement("input");
post.type = "button";
post.value = "list";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'list');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "list=1";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'list=1');}, false);
div1.appendChild(post);
var post = document.createElement("input");
post.type = "button";
post.value = "[*]";
post.addEventListener('click', function() {addtag(document.getElementsByTagName("textarea")[0],'[*]');}, false);
div1.appendChild(post);
}