MyAnimeList(MAL) - Preview BBCODE

This script will add the MAL BBCODE Editor where it is currently not enabled.

目前为 2025-02-16 提交的版本。查看 最新版本

// ==UserScript==
// @name         MyAnimeList(MAL) - Preview BBCODE
// @version      1.0.2
// @description  This script will add the MAL BBCODE Editor where it is currently not enabled.
// @author       Cpt_mathix
// @match        https://myanimelist.net/*
// @grant        none
// @run-at document-body
// @namespace    https://greasyfork.org/users/16080
// ==/UserScript==

init();

function init() {
    var fancyboxInitObserver = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            var fancybox = document.getElementById("fancybox-wrap");
            var fancyboxInner = document.getElementById("fancybox-inner");
            if (fancybox) {
                fancyboxInitObserver.disconnect();

                var fancyboxObserver = new MutationObserver(function(mutations) {
                    mutations.forEach(function(mutation) {
                        if (fancybox.style.width !== "1000px") {
                            fancybox.style.width = "1000px";
                            fancyboxInner.style.width = "980px";
                        }
                        window.dispatchEvent(new Event('resize'));
                    });
                });

                fancyboxObserver.observe(fancybox, { attributes: true });
            }
        });
    });

    fancyboxInitObserver.observe(document.body, { childList: true });

    if (document.location.href.includes("myanimelist.net/clubs")) {
        initClubCommentsPreview();
        return;
    }

    if (document.location.href.includes("myanimelist.net/blog.php")) {
        initBlogCommentsPreview();
        return;
    }

    if (document.location.href.includes("myanimelist.net/myblog.php")) {
        initBlogEntryPreview();
        return;
    }

    if (document.location.href.includes("myanimelist.net/editprofile.php")) {
        initProfileAboutMePreview();
        return;
    }

    if (document.location.href.includes("myanimelist.net/ownlist/manga")) {
        initEditMangaPreview();
        return;
    }

    if (document.location.href.includes("myanimelist.net/ownlist/anime")) {
        initEditAnimePreview();
        return;
    }
}

function initClubCommentsPreview() {
    var textarea = document.querySelector("form.form-club-user-comment textarea");
    if (textarea) {
        textarea.classList.add("bbcode-message-editor");
        textarea.rows = 15;
    }
}

function initBlogCommentsPreview() {
    var textarea = document.querySelector(".blog_detail_comment_wrapper form textarea");
    if (textarea) {
        textarea.classList.add("bbcode-message-editor");
        textarea.rows = 15;
    }
}

function initEditMangaPreview() {
    resizeDialog();

    var textarea = document.getElementById("add_manga_comments");
    if (textarea) {
        textarea.classList.add("bbcode-message-editor");
        textarea.rows = 15;
    }
}

function initEditAnimePreview() {
    resizeDialog();

    var textarea = document.getElementById("add_anime_comments");
    if (textarea) {
        textarea.classList.add("bbcode-message-editor");
        textarea.rows = 15;
    }
}

function initBlogEntryPreview() {
    resizeDialog();

    var textarea = document.querySelector("#blogForm textarea[name=\"entry_text\"");
    if (textarea) {
        textarea.classList.add("bbcode-message-editor");
    }
}

function initProfileAboutMePreview() {
    var textarea = document.querySelector("#content form textarea[name=\"profile_aboutme\"");
    if (textarea) {
        textarea.classList.add("bbcode-message-editor");
        textarea.insertAdjacentHTML("afterend", "<small><b>You can also preview bbcode with: <a href='https://cptmathix.github.io/MyAnimeList-BBCODE2HTML/'>https://cptmathix.github.io/MyAnimeList-BBCODE2HTML/</a><b></small>");
    }
}

function resizeDialog() {
    var dialog = document.getElementById("dialog");
    if (dialog) {
        if (document.location.href.includes("hideLayout=1")){
            var clientWidth = document.body.clientWidth;
            dialog.style.width = clientWidth + "px";
        } else {
            dialog.style.width = "804px";
        }
    }
}