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);
}