MediaWiki:Common.js: mudanças entre as edições

De PokeRO Revive
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 4: Linha 4:


     function roColorToHtml(text) {
     function roColorToHtml(text) {
         return text
         var html = "";
            .replace(/\^([0-9A-Fa-f]{6})/g, '<span style="color:#$1">')
        var colorStack = false;
             .replace(/\n/g, "<br>") + "</span>";
 
        var parts = text.split(/\^([0-9A-Fa-f]{6})/);
 
        for (var i = 0; i < parts.length; i++) {
            if (i % 2 === 1) {
                if (colorStack) html += "</span>";
                html += '<span style="color:#' + parts[i] + '">';
                colorStack = true;
            } else {
                html += parts[i];
            }
        }
 
        if (colorStack) html += "</span>";
 
        return html
             .replace(/\\n/g, "<br>")
            .replace(/\n/g, "<br>");
     }
     }


     document.querySelectorAll(".mw-item").forEach(function (el) {
     document.querySelectorAll(".mw-item").forEach(function (el) {
Linha 28: Linha 46:


                     tip.innerHTML =
                     tip.innerHTML =
                         '<div style="display:flex; gap:10px;">' +
                         '<div class="row">' +
                         '<img src="' + API + item.icon + '" width="42">' +
                         '<img class="icon" src="' + API + item.icon + '">' +
                        '<div>' +
                        '<div class="title">' + item.name + '</div>' +
                         '<b>' + item.name + '</b><br>' +
                         '</div>' +
                        '<div class="text">' +
                         roColorToHtml(item.description) +
                         roColorToHtml(item.description) +
                        '</div>' +
                         '</div>';
                         '</div>';


                     document.body.appendChild(tip);
                     document.body.appendChild(tip);


var move = function (ev) {
                    var move = function (ev) {
    var x = ev.clientX + 18;
                        var x = ev.clientX + 20;
    var y = ev.clientY + 18;
                        var y = ev.clientY + 20;


    // evita sair da tela
                        if (x + 280 > window.innerWidth)
    if (x + 320 > window.innerWidth)
                            x = ev.clientX - 300;
        x = ev.clientX - 320;


    if (y + 180 > window.innerHeight)
                        if (y + 120 > window.innerHeight)
        y = ev.clientY - 180;
                            y = ev.clientY - 140;


    tip.style.left = x + "px";
                        tip.style.left = x + "px";
    tip.style.top = y + "px";
                        tip.style.top = y + "px";
};
                    };





Edição atual tal como às 22h44min de 2 de fevereiro de 2026

mw.hook("wikipage.content").add(function () {

    var API = "https://api.pkro.com.br";

    function roColorToHtml(text) {
        var html = "";
        var colorStack = false;

        var parts = text.split(/\^([0-9A-Fa-f]{6})/);

        for (var i = 0; i < parts.length; i++) {
            if (i % 2 === 1) {
                if (colorStack) html += "</span>";
                html += '<span style="color:#' + parts[i] + '">';
                colorStack = true;
            } else {
                html += parts[i];
            }
        }

        if (colorStack) html += "</span>";

        return html
            .replace(/\\n/g, "<br>")
            .replace(/\n/g, "<br>");
    }


    document.querySelectorAll(".mw-item").forEach(function (el) {

        if (el.dataset.loaded) return; // evita duplicar
        el.dataset.loaded = "1";

        var id = el.dataset.id;

        fetch(API + "/item/" + id)
            .then(function (r) { return r.json(); })
            .then(function (item) {

                el.innerHTML = '<img src="' + API + item.icon + '" width="32">';

                el.addEventListener("mouseenter", function () {

                    var tip = document.createElement("div");
                    tip.className = "item-tooltip";

                    tip.innerHTML =
                        '<div class="row">' +
                        '<img class="icon" src="' + API + item.icon + '">' +
                        '<div class="title">' + item.name + '</div>' +
                        '</div>' +
                        '<div class="text">' +
                        roColorToHtml(item.description) +
                        '</div>';

                    document.body.appendChild(tip);

                    var move = function (ev) {
                        var x = ev.clientX + 20;
                        var y = ev.clientY + 20;

                        if (x + 280 > window.innerWidth)
                            x = ev.clientX - 300;

                        if (y + 120 > window.innerHeight)
                            y = ev.clientY - 140;

                        tip.style.left = x + "px";
                        tip.style.top = y + "px";
                    };


                    document.addEventListener("mousemove", move);

                    el.addEventListener("mouseleave", function () {
                        tip.remove();
                        document.removeEventListener("mousemove", move);
                    }, { once: true });

                });

            })
            .catch(function (err) {
                console.error("Item API erro:", err);
                el.innerHTML = "[erro]";
            });

    });

});