BBCodes for MAL

Add BBCode to MAL Forum posts

От 27.02.2015. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==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.9
// ==/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 = document.getElementById("Size");
            
            if (txtSize == "Size") {
                break;
            }

            if (txtSize.value == "enter") {
                txtSizeName = prompt("Enter the size (from 0 to 999, 100 is default)", "");
            } else {
                txtSizeName = txtSize.value;
            }

            tagOpen = "[size=" + String(txtSizeName) + "]";
            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;
            }
 
            yt0 = yt.replace("https://","http://");
            yt1 = yt0.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 = document.getElementById("Colour");

            if (colour == "Select") {
                break;
            }

            if (colour.value == "enter") {
                colourName = prompt("Enter the colour name or hex value (e.g. #abc123)", "");
            } else {
                colourName = colour.value;
            }

            tagOpen = "[color=" + String(colourName) + "]";
            tagClose = "[/color]";

            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);
        var opt = document.createElement("option");
        opt.value = "enter";
        opt.appendChild(document.createTextNode('Enter size'));
        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 = "grey";
        opt.appendChild(document.createTextNode('Grey'));
        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);
        var opt = document.createElement("option");
        opt.value = "enter";
        opt.appendChild(document.createTextNode('Enter colour'));
        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);
}