MediaWiki:Common.js

De Ravenquest Wiki
Ir para navegação Ir para pesquisar

Nota: Após publicar, você pode ter que limpar o "cache" do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5.
  • Opera: Pressione Ctrl-F5.
/* Abrir Spoilers */
$(document).ready(function(){
    $('.showspoiler').click(function(){
         var a = $('.spoiler').css('display');
        if (a == "none"){
            $('.showspoiler').text("Clique para fechar todos os spoilers");
            $('div.spoiler').css({'display': 'block'});
        } else {
            $('.showspoiler').text("Clique para abrir todos os spoilers");
            $('div.spoiler').css({'display': 'none'});
        }
    });
});

/* Sempre mostra Spoilers */
$(document).ready(function(){
    $('[data-sempre-mostrar]').click(function(){
       if($.cookie('sempre-mostrar-spoilers') === "true") {
          $.cookie('sempre-mostrar-spoilers', "false", { expires: 360, path: '/' });
       } else {
          $.cookie('sempre-mostrar-spoilers', "true", { expires: 360, path: '/' });
       }
       $('#spoil').toggle();
       $('.showhide').toggle();
    });
});


/* Quest Spoils */
$(document).ready(function(){
    var url = location.hash;
    if (url.length > 0 || $.cookie('sempre-mostrar-spoilers') === "true"){
        $('.showhide').click(function(){
            $('#spoil').toggle();
            $('.showhide').toggle();
        });
    } else {
        $('#spoil').toggle();
        $('.showhide').toggle();
        $('.showhide').click(function(){
            $('#spoil').toggle();
            $('.showhide').toggle();
        });    
    }
});

/* Tirar ícone de links externos */
$('.mapa > a').removeClass('external text');
$('#siteNotice a').removeClass('external text');

/* Tirar atributo title de links */
$('.tooltip > a').removeAttr('title');

/* Transcrições NPCs */
$(document).ready(function() {
    $('#show2, #show3').click(function() {
        $('.hide').toggle();
    });
});

/* Criaturas */
$(document).ready(function () {
    var height = $('#hab').height();
    if (height >= 50) {
        $('#hab').addClass('hide');
        $('#show').removeClass('hide');
    }
    $('#show').click(function () {
        $('.hide').toggle();
        $('.showhab').toggle();
        $('#NPC').addClass('hide');
    });
});

/** Cria component DIV. */
function createComponent(id, css, doc, target, callback) {
    var params = {
        "name": "div",
        "id": id,
        "css": css
    };
    iframeInsertComponents(params, doc, target, callback);
}

/** Cria component LINK que carrega CSS. */
function createCss(doc, target, href, callback) {
    var params = {
        "name": "link",
        "rel": "stylesheet",
        "href": href
    };
    iframeInsertComponents(params, doc, target, callback);
}

/** Cria component Script que carrega JavaScript. */
function createScript(doc, target, code, callback) {
    var params = {
        "name": "script",
        "type": "text/javascript",
        "code": code
    };
    iframeInsertComponents(params, doc, target, callback);
}

/** Cria component STYLE que carrega CSS na HEAD. */
function createStyle(doc, target, css, callback) {
    var params = {
        "name": "style",
        "css": css
    };
    iframeInsertComponents(params, doc, target, callback);
}


/** Checa se a Variavel existe */
function isDefined(variable) {
    return typeof variable !== 'undefined';
}


/** Algumas telas utiliza iFrames e precisa injetar JavaScripts para funcionar corretamente */
function iframeInsertComponents(params, doc, target, callback) {
    //doc, target, src, callback
    var s = doc.createElement(params.name);
    if (params.name ==  "script") {
        s.type = params.type;
    }
    if (params.name ==  "link") {
        s.rel = params.rel;
    }
    if (params.name ==  "div") {
        s.id = params.id;
        if (params.css != null) {
            Object.entries(params.css).forEach(function(arr, i) {
                $(s).css(arr[0], arr[1]);
            });
        }
    }
    if(callback) {
        if (s.readyState){  //IE
            s.onreadystatechange = function(){
                if (s.readyState == "loaded" ||
                    s.readyState == "complete"){
                    s.onreadystatechange = null;
                    callback();
                }
            };
        } else {  //Others
            s.onload = function(){
                callback();
            };
        }
    }
    if (params.name ==  "style") {
        Object.entries(params.css).forEach(function(arr, i) {
            var attrs = "";
            Object.entries(arr[1]).forEach(function(attr, i) {
                attrs += '\n' + attr[0] + ': ' + attr[1];
            });
            if (i === 0) {
                s.innerText = arr[0] + ' {' + attrs + '\n}';
            }
        });
    }
    if (params.name ==  "script") {
        if (params.code.src != null && params.code.src != "") {
            s.src = params.src;
        }
        if (params.code.code != null) {
            console.log(params.code.code);
            var re = new RegExp('\n', 'g');
            s.innerText = params.code.code.replace(re, '');//.split('<br>').join('\n');
        }
    }
    if (params.name ==  "link") {
        s.href = params.href;
    }
    target.appendChild(s);        
}

/* Abas */
$(document).ready(function(){
  $('.showDiv').on('click', function () {
    $(this).siblings();
    $('.targetDiv').hide();
    $('.targetDiv2').hide();
    $('#div' + $(this).data('target')).show();
  });    
});

/* Abas Menu*/
$(document).ready(function () {
    $('.mostrar-aba').click(function () {
        var aba_id = $(this).attr('data-aba');
        var check = $("#aba-" + aba_id).css('display');
        if (check == "block") {
            $("#aba-" + aba_id).removeClass('atual');
        } else {
            $('.aba').removeClass('atual');
            $("#aba-" + aba_id).addClass('atual');
        }
    });
    $('.mostrar-todas-abas').click(function () {
        var check = $('.aba').css('display');
        if (check == "block") {
            $('.aba').removeClass('atual');
        } else {
            $('div.aba').toggleClass('atual');
        }
    });
    var url = location.href;
    hash = url.split('#')[1];
    if ((hash != null || hash != undefined) && hash.length > 0){
        $("#aba-" + hash).addClass('atual');
    }
});

/* Toggle Diálogos */
$(document).ready(function(){
  $('[data-dialog-text]').hide();
  $('[data-dialog-show]').on('click', function() {
    $element = $(this).parents('[data-dialog]').children('[data-dialog-text]')

    if($element.is(":hidden")) {
      $element.show();
    } else { 
      $element.hide();
    }
  });
});


/* Mapa */
if (mw.config.values.wgPageName === 'Mapa') {
    $(document).ready(function(){
        var url = location.hash;
        $(".map_wiki").append('<div id="map" style="width: 100%; height: 100%;"></div>');
        loadMapScripts();
    });
}

/* Mapa Popup */
/** Abre o popup de mapa de Monstros e NPCs */ 
$('.map_show').click(function() {
    var display = $('.map_frame',this).css('display');
    
    if (display == 'none') { showMap(this); }

    return false;
});

/** Fecha o mapa ao clicar na parte Preta (Overlay) */
$('.map_overlay').click(function() {
    $('.map_show').each(function( index ) {
        hideMap($('.map_show')[index]);
    });

    return false;
});

$('.map_logobox').click(function(event){
    event.stopPropagation();
});


/** Configura o Popup (LightBox) de Mapa */
function configPopupMap(container) {
    $('.map_box').each(function(index) {
        $(this).html("");
    });

    var coord = $('.map_frame_coord', container).text();
    window.history.replaceState("map", null, "#" + coord + ":1");

    $(".map_box", container).css("width", "100%").css("height", "100%");
    $(".map_box", container).append('<div id="map" style="width: 100%; height: 100%;"></div>');

    // Transforma a logo do Ravendawn Wiki em um link para a página do Mapa com as coordenadas da localização
    $(".map_logobox", container).append('<a href="https://ravenquest.wiki.br/wiki/mapa#' + coord + ':1" class="map_logo" target="_blank" title="Ver no mapa do Ravendawn Wiki"></a>');

    loadMapScripts();  // Carrega os scripts do mapa
}

/** Função que faz o popup em lightbox do Mapa apareça. */
function showMap(container) {
    $('.map_frame',container).css('display', 'inline');
    $('.map_overlay',container).css('display', 'inline');

    configPopupMap(container);
}

/** Função que faz o popup em lightbox do Mapa desaparecer. */
function hideMap(container) {
    $('.map_frame',container).css('display', 'none');
    $('.map_overlay',container).css('display', 'none');
}

/* Mapa Infobox Hunt */
$('.map_hunt').ready(function(){
    var coord = $('.map_hunt_coord',this).text();

    /** Transforma a logo do Ravenquest Wiki em um link para a página do Mapa com as coordenadas da localiação */
    $(".map_logobox",this).append('<a href="https://www.ravenquest.wiki.br/wiki/mapa#'+coord+':1" class="map_logo" target="_blank" title="Ver no mapa do Ravenquest Wiki"></a>');
    
    /** Box do Map */
    var mapBox = $(".map_hunt_box",this);
    mapBox.html("");
    
    /** Cria o iFrame que conterá o Mapa */
    mapBox.append('<iframe id="mapa_frame" scrolling="no" frameborder="0" width="100%" height="310" style="border-radius:8px"></iframe>');
   
    /** Pega o Map iFrame */
    var mapFrame = $("#mapa_frame",mapBox);
    /** Seta as Coordenadas do Mapa */
    loadMapOnIFrame(coord, mapFrame[0]);  // Chama a função para carregar o mapa

});

/* Função para carregar o mapa no iframe */
function loadMapOnIFrame(coord, iframe) {
    var mapSrc = iframe.src;
    if (mapSrc.indexOf("#") !== -1) {
        var hash = mapSrc.split("#")[1];  // Extrair o hash da URL
        console.log("Hash do iframe:", hash);

        if (hash) {
            const params = hash.split(',');
            let coordX = 0, coordY = 0, zoomLevel = 2, level = 0;

            // Extrair X, Y, Z e zoom
            if (params.length > 1) {
                coordX = parseInt(params[0]);
                coordY = parseInt(params[1]);

                const zoomParams = params[2].split(':');
                if (zoomParams.length === 2) {
                    level = parseInt(zoomParams[0]); 
                    zoomLevel = parseInt(zoomParams[1]);  
                }
            }

            console.log("Coordenadas lidas do hash:", coordX, coordY, "Nível:", level, "Zoom:", zoomLevel);

            // Carregar o mapa com as coordenadas no iframe
            const iframeDocument = iframe.contentWindow.document;
            iframeDocument.location.href = iframeDocument.location.href.split("#")[0] + "#" + coordX + "," + coordY + "," + level + ":" + zoomLevel;
        }
    }
}

/* Mapa Infobox Geo */
$('.map_hunt_geo').ready(function(){
    var coord = $('.map_hunt_coord_geo',this).text();

    /** Transforma a logo do Ravenquest Wiki em um link para a página do Mapa com as coordenadas da localiação */
    $(".map_logobox",this).append('<a href="https://www.ravenquest.wiki.br/wiki/mapa#'+coord+':1" class="map_logo" target="_blank" title="Ver no mapa do Ravenquest Wiki"></a>');
    
    /** Box do Map */
    var mapBox = $(".map_hunt_box_geo",this);
    mapBox.html("");
    
    /** Cria o iFrame que conterá o Mapa */
    mapBox.append('<iframe id="mapa_frame" scrolling="no" frameborder="0" width="100%" height="310" style="border-radius:8px"></iframe>');

// Pega o Map iFrame
var mapFrame = $("#mapa_frame", mapBox);

// Atribui o hash diretamente ao src do iframe
mapFrame.attr("src", "https://ravenquest.wiki.br/mapa.html#" + coord + ":1");

mapFrame.ready(function() {
    loadMapOnIFrame(coord, mapFrame[0]);  // Carrega o mapa no iframe
});
});



    /** Testes mapa */
function loadMapScripts() {
    if (typeof L === 'undefined') {
        var leafletCss = document.createElement('link');
        leafletCss.rel = 'stylesheet';
        leafletCss.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';
        document.head.appendChild(leafletCss);

        var leafletScript = document.createElement('script');
        leafletScript.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';
        leafletScript.onload = function() {
            renderPopupMap();
        };
        document.head.appendChild(leafletScript);
    } else {
        renderPopupMap();
    }
}


function renderPopupMap() {
    $('.map_frame').each(function() {
        var coord = $(this).closest('.map_show').find('.map_frame_coord').text();
        
        if (coord) {
            var parts = coord.split(':'); 
            var coords = parts[0].split(','); // Separar as coordenadas pela vírgula
            
            var x = parseFloat(coords[0]); // Coordenada X
            var y = parseFloat(coords[1]); // Coordenada Y
            var z = coords[2] ? parseInt(coords[2], 10) : 0; // Altura (Z), se existir
            var zoom = parts[1] ? parseInt(parts[1], 10) : 5; // Zoom (padrão 5)

            // Criar o mapa com as coordenadas corrigidas
            var mapBox = $(this).find('.map_box');
            mapBox.html('<iframe id="map-popup" src="https://ravenquest.wiki.br/mapa.html#' + x + ',' + y + ',' + z + ':' + zoom + '" style="width: 100%; height: 400px; border:none;"></iframe>');
        }
    });
}




function showMap(container) {
    $('.map_frame', container).css('display', 'block');  // Exibe o pop-up
    $('.map_overlay', container).css('display', 'inline'); // Exibe a sobreposição preta
    configPopupMap(container); // Configura o mapa dentro do pop-up
}


$('.map_show').click(function() {
    var display = $('.map_frame', this).css('display');
    
    if (display == 'none') {
        showMap(this);  // Chama a função para exibir o mapa
    }

    return false;
});