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

De TibiaRPGBrasil Wiki
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(7 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 150: Linha 150:
     var position = parts[0].split(',');
     var position = parts[0].split(',');


    var mapUrl =
    var zoom = parts[1] ? parseInt(parts[1], 10) : 10;
    var mapUrl =
     'https://minimap.tibiarpgbrasil.com/' +
     'https://minimap.tibiarpgbrasil.com/' +
    '?embed=1&crosshair=1' +
     '#x=' + parseInt(position[0], 10) +
     '#x=' + parseInt(position[0], 10) +
     '&y=' + parseInt(position[1], 10) +
     '&y=' + parseInt(position[1], 10) +
     '&z=' + parseInt(position[2], 10) +
     '&z=' + parseInt(position[2], 10) +
     '&zoom=' + parseInt(parts[1], 10);
     '&zoom=' + zoom;
   
    /** Box do Map */
    var mapBox = $(".map_hunt_box",this);
    mapBox.html('<span class="map_logobox" style="border-radius:12px;top:70px;left:60px;bottom:auto;right:auto"></span>');


     /** Transforma a logo do TibiaWiki em um link para a página do Mapa com as coordenadas da localiação */
     /** Transforma a logo do TibiaWiki em um link para a página do Mapa com as coordenadas da localiação */
     $(".map_logobox",this).append('<a href="' + mapUrl + '" class="map_logo" target="_blank" title="Ver no minimap TibiaRPGBrasil"></a>');
     $(".map_logobox",this).append('<a href="' + mapUrl + '" class="map_logo" target="_blank" title="Ver no minimap TibiaRPGBrasil"></a>');
   
    /** Box do Map */
    var mapBox = $(".map_hunt_box",this);
    mapBox.html("");
      
      
     /** Cria o iFrame que conterá o Mapa */
     /** Cria o iFrame que conterá o Mapa */
Linha 193: Linha 193:
     $('.map_show_popup').remove();
     $('.map_show_popup').remove();
     var popup = container.clone(false, false);
     var popup = container.clone(false, false);
    popup.contents().filter(function () {
        return this.nodeType === Node.TEXT_NODE;
    }).remove();
    popup.find('img').remove();
     popup.addClass('map_show_popup');
     popup.addClass('map_show_popup');
     popup.appendTo(document.body);
     popup.appendTo(document.body);
Linha 252: Linha 256:


     // URL do seu minimap
     // URL do seu minimap
     var mapUrl =
     var anchor = '#x=' + x + '&y=' + y + '&z=' + z + '&zoom=' + zoom;
        'https://minimap.tibiarpgbrasil.com/' +
    var mapUrl = 'https://minimap.tibiarpgbrasil.com/' + anchor;
        '?embed=1&crosshair=1' +
    var embedMapUrl = 'https://minimap.tibiarpgbrasil.com/?embed=1&crosshair=1' + anchor;
        '#x=' + x +
        '&y=' + y +
        '&z=' + z +
        '&zoom=' + zoom;


     iframe.attr('src', mapUrl);
     iframe.attr('src', embedMapUrl);


     // Coloca o iframe no popup
     // Coloca o iframe no popup
Linha 267: Linha 267:
     // Logo/link
     // Logo/link
     $(".map_logobox", container).html(
     $(".map_logobox", container).html(
         '<a href="https://wiki.tibiarpgbrasil.com/wiki/mapa#' +
         '<a href="' + mapUrl + '"' +
        coord +
        ':1" ' +
         'class="map_logo" ' +
         'class="map_logo" ' +
         'target="_blank" ' +
         'target="_blank" ' +
         'title="Ver no mapa do Tibia Wiki"></a>'
         'title="Ver no minimap TibiaRPGBrasil"></a>'
     );
     );
}
}

Edição atual tal como às 18h53min de 21 de agosto de 2026

/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */
/* 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();
    });
});

/* anuncio */
$(document).ready(function() {
googletag.cmd.push(function() { googletag.display('div-gpt-ad-1540046116529-0'); });
});

/* 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');
    });
});

/* Hot Cuisine Calculator System */
if (mw.config.values.wgPageName === 'Hot_Cuisine_Calculator_System' || mw.config.values.wgPageName === 'Hot_Cuisine_Quest') {
    $(document).ready(function(){
        $.ajax({ url: '/index.php?title=Tibia_Wiki:Hot_Cuisine_Calculator_System/Codigo&action=raw',success: function(codigo) {
          var codigo_html = codigo.slice(codigo.search('<pre id="hot_cuisine_system_html">') + 34, codigo.search('</pre>'));
          $('.hot_cuisine_calc_system').html(codigo_html);
          codigo = codigo.slice(codigo.search('</pre>') + 6, codigo.length);
          var codigo_css = codigo.slice(codigo.search('<pre id="hot_cuisine_system_css">') + 33, codigo.search('</pre>'));
          $('head').append('<style type="text/css">'+codigo_css+'</style>');
          codigo = codigo.slice(codigo.search('</pre>') + 6, codigo.length);
          var codigo_js = codigo.slice(codigo.search('<pre id="hot_cuisine_system_js">') + 32, codigo.search('</pre>'));
          $('.hot_cuisine_calc_system_js').html('<script type="text/javascript">'+codigo_js+'</script>');
        }});
     });
}

/* Exercise Weapons Calculator */
if (mw.config.values.wgPageName === 'Exercise_Weapons_Calculator') {
    $(document).ready(function(){
        $.ajax({ url: '/index.php?title=Tibia_Wiki:Exercise_Weapons_Calculator/Codigo&action=raw',success: function(codigo) {
          var codigo_html = codigo.slice(codigo.search('<pre id="exercise_weapons_html">') + 32, codigo.search('</pre>'));
          $('.hot_cuisine_calc').html(codigo_html);
          codigo = codigo.slice(codigo.search('</pre>') + 6, codigo.length);
          var codigo_css = codigo.slice(codigo.search('<pre id="exercise_weapons_css">') + 31, codigo.search('</pre>'));
          $('head').append('<style type="text/css">'+codigo_css+'</style>');
          codigo = codigo.slice(codigo.search('</pre>') + 6, codigo.length);
          var codigo_js = codigo.slice(codigo.search('<pre id="exercise_weapons_js">') + 30, codigo.search('</pre>'));
          $('.hot_cuisine_calc_js').html('<script type="text/javascript">'+codigo_js+'</script>');
        }});
     });
}

/* 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) */
$(document).on('click', '.map_show_popup .map_overlay', function(e) {
    e.preventDefault();
    e.stopPropagation();

    $('.map_show_popup').remove();

    return false;
});

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

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

    var parts = coord.split(':');
    var position = parts[0].split(',');

    var zoom = parts[1] ? parseInt(parts[1], 10) : 10;
    var mapUrl =
    'https://minimap.tibiarpgbrasil.com/' +
    '#x=' + parseInt(position[0], 10) +
    '&y=' + parseInt(position[1], 10) +
    '&z=' + parseInt(position[2], 10) +
    '&zoom=' + zoom;
    
    /** Box do Map */
    var mapBox = $(".map_hunt_box",this);
    mapBox.html('<span class="map_logobox" style="border-radius:12px;top:70px;left:60px;bottom:auto;right:auto"></span>');

    /** Transforma a logo do TibiaWiki em um link para a página do Mapa com as coordenadas da localiação */
    $(".map_logobox",this).append('<a href="' + mapUrl + '" class="map_logo" target="_blank" title="Ver no minimap TibiaRPGBrasil"></a>');
    
    /** Cria o iFrame que conterá o Mapa */
    mapBox.append('<iframe id="mapa_frame" scrolling="no" frameborder="0" width="100%" height="310" style="border-radius:12px"></iframe>');
   
    /** Pega o Map iFrame */
    var mapFrame = $("#mapa_frame",mapBox);
    /** Seta as Coordenadas do Mapa */
    // mapFrame.attr("src", mapFrame.contents().get(0).URL + "#" + coord + ":1");

    mapFrame.ready(function() {
        loadMapOnIFrame(coord, mapFrame[0]);
    });
});

/** Mapa internalizado ao Wiki - Teste */
if (mw.config.values.wgPageName === 'Mapa/Teste') {
    $(document).ready( function () {
        $(".map_wiki").append('<div id="map" style="width: 100%; height: 100%;"></div>');
        loadMapScripts();
    });
}

/** Função que faz o popup em lightbox do Mapa apareça. */
function showMap(container) {
    container = $(container);

    // Remove popup anterior
    $('.map_show_popup').remove();
    var popup = container.clone(false, false);
    popup.contents().filter(function () {
        return this.nodeType === Node.TEXT_NODE;
    }).remove();
    popup.find('img').remove();
    popup.addClass('map_show_popup');
    popup.appendTo(document.body);
    $('.map_frame', popup).css('display', 'inline');
    $('.map_overlay', popup).css('display', 'block');

    configPopupMap(popup);
}

/** Função que faz o popup em lightbox do Mapa desaparecer. */
function hideMap(container) {
    $('.map_show_popup').remove();
}

/** Configura o Popup (LightBox) de Mapa */
function configPopupMap(container) {
    var coord = $('.map_frame_coord', container).text().trim();

    // Esperado:
    // 1100,1000,7:11

    var parts = coord.split(':');
    var position = parts[0].split(',');

    var x = parseInt(position[0], 10);
    var y = parseInt(position[1], 10);
    var z = parseInt(position[2], 10);
    var zoom = parts[1] ? parseInt(parts[1], 10) : 10;

    if (
        isNaN(x) ||
        isNaN(y) ||
        isNaN(z) ||
        isNaN(zoom)
    ) {
        console.error('Coordenada inválida:', coord);
        return;
    }

    // Limpa mapas anteriores
    $('.map_box').each(function () {
        $(this).empty();
    });

    // Tamanho do container
    $('.map_box', container)
        .css('width', '100%')
        .css('height', '100%');

    // Cria o iframe
    var iframe = $('<iframe>', {
        scrolling: 'no',
        frameborder: '0',
        width: '100%',
        height: '100%',
        loading: 'lazy',
        title: 'Mapa'
    });

    // URL do seu minimap
    var anchor = '#x=' + x + '&y=' + y + '&z=' + z + '&zoom=' + zoom;
    var mapUrl = 'https://minimap.tibiarpgbrasil.com/' + anchor;
    var embedMapUrl = 'https://minimap.tibiarpgbrasil.com/?embed=1&crosshair=1' + anchor;

    iframe.attr('src', embedMapUrl);

    // Coloca o iframe no popup
    $('.map_box', container).append(iframe);

    // Logo/link
    $(".map_logobox", container).html(
        '<a href="' + mapUrl + '"' +
        'class="map_logo" ' +
        'target="_blank" ' +
        'title="Ver no minimap TibiaRPGBrasil"></a>'
    );
}

/** Função que realiza o load dos scripts de Map. */
function loadMapScripts() {
    $('link[href="https://tibiamaps.io/_css/map.css"]').remove();
    $('head').append('<link rel="stylesheet" href="https://tibiamaps.io/_css/map.css">');
    $('script[src="https://tibiamaps.io/_js/map.js"]').remove();
    $('<script>').attr('src', "https://tibiamaps.io/_js/map.js").appendTo('head');
}

/** Carrega o Mapa no iframe. */
function loadMapOnIFrame(coord, iframe) {

    // coord esperado:
    // 1100,1000,7:11

    var parts = coord.split(':');

    var position = parts[0].split(',');

    var x = parseInt(position[0], 10);
    var y = parseInt(position[1], 10);
    var z = parseInt(position[2], 10);
    var zoom = parts[1] ? parseInt(parts[1], 10) : 10;

    if (
        isNaN(x) ||
        isNaN(y) ||
        isNaN(z) ||
        isNaN(zoom)
    ) {
        console.error('Coordenada inválida:', coord);
        return;
    }

    var mapUrl =
        'https://minimap.tibiarpgbrasil.com/' +
        '?embed=1&crosshair=1' +
        '#x=' + x +
        '&y=' + y +
        '&z=' + z +
        '&zoom=' + zoom;

    iframe.src = mapUrl;
}

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

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

/* Calculadoras - Shards */
$(document).ready(function () {
    $('#calc_shard').bind("keyup change", function () {
        var level = $('#level').val();
        var quantidade = $('#quantidade').val();
        var item = $("select#item").val();
        if (item == 2) {
            if (quantidade <= 0) {
                $('#shard-result').addClass("hide");
                $('#shard-result3').addClass("hide");
            } else if (quantidade >= 2) {
                $('#shard-result').text('Você receberá ' + $('#level').val() * $('#level').val() * 100 * $('#quantidade').val() + ' de experiência.');
                $('#shard-result').removeClass("hide");
                $('#shard-result3').removeClass("hide");
            } else {
                $('#shard-result').text('Você receberá ' + $('#level').val() * $('#level').val() * 100 + ' de experiência.');
                $('#shard-result').removeClass("hide");
                $('#shard-result3').addClass("hide");
            }
        } else {
            $('#shard-result3').addClass("hide");
            if (quantidade >= 41) {
            $('#shard-result2').removeClass("hide");
        } else {
            $('#shard-result2').addClass("hide");
        }
            if (quantidade <= 0) {
                $('#shard-result').addClass("hide");
                $('#shard-result2').addClass("hide");
            } else if (quantidade >= 1) {
                if (level >= 200) {
                    $('#shard-result').removeClass("hide");
                    $('#shard-result').text('Você receberá ' + (300 * 200) * $('#quantidade').val() + ' de experiência.');
                } else {
                    $('#shard-result').removeClass("hide");
                    $('#shard-result').text('Você receberá ' + (300 * $('#level').val()) * $('#quantidade').val() + ' de experiência.');
                }
            }
        }
        if (level >= 1 && quantidade <= 0) {
            $('#shard-result').addClass("hide");
            $('#shard-result2').addClass("hide");
            $('#shard-result3').addClass("hide");
        } else if (level <= 0 && quantidade <= 0) {
            $('#shard-result').addClass("hide");
            $('#shard-result2').addClass("hide");
            $('#shard-result3').addClass("hide");
        } else if (level <= 0 && quantidade >= 1) {
            $('#shard-result').addClass("hide");
            $('#shard-result2').addClass("hide");
            $('#shard-result3').addClass("hide");
        }
    });
});

$(document).ready(function () {
    $("#calc_shard").keydown(function (event) {
        if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || (event.keyCode == 65 && event.ctrlKey === true) || (event.keyCode >= 35 && event.keyCode <= 39)) {
            return;
        } else {
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                event.preventDefault();
            }
        }
    });
});

$("#botao_shard").append('<input name="quantidade" maxlength="3" id="quantidade" type="text" size="10" align="center" value="1" onclick="this.value=&#39;&#39;;" onblur="this.value=!this.value?&#39;1&#39;:this.value;" />');
$("#botao_level").append('<input name="level" maxlength="3" id="level" type="text" size="10" align="center" value="0" onclick="this.value=&#39;&#39;;" onblur="this.value=!this.value?&#39;0&#39;:this.value;" />');
$("#botao_item").append('<select id="item"><option value="1">Midnight Shard</option><option value="2">Stone of Insight</option></select>');

/* Calculadoras - Party */
$(document).ready(function () {
mw.loader.load( '/index.php?title=MediaWiki:Common.js/calc_party.js&action=raw&ctype=text/javascript' );
});  


/* Calculadoras - Blessings */
$(document).ready(function () {
mw.loader.load( '/index.php?title=MediaWiki:Common.js/blessing.js&action=raw&ctype=text/javascript' );
});  

/* Calculadoras - Skill */
$(document).ready(function () {
mw.loader.load( '/index.php?title=MediaWiki:Common.js/calc_skill.js&action=raw&ctype=text/javascript' );
});  

/* Calculadoras - Profile */
$("#input_nome").append('<form action="/Sano/char.php" type="post" id="searchForm"><input name="character" id="nome" type="text" size="25" align="center" value="Nome do Personagem" onclick="this.value=&#39;&#39;;" onblur="this.value=!this.value?&#39;Nome do Personagem&#39;:this.value;"/> <input type="submit" value="Ir" /></form>');

$("#searchForm").submit(function(event) {
  
    event.preventDefault(); 

    var $form = $( this ),
        term = $form.find('input[name="character"]').val(),
        url = $form.attr( 'action' );
    
    $.post( '/Sano/char.php', $("#searchForm").serialize(),
      function( data ) {

          $( "#result_personagem" ).empty().append('<center><table id="alter" style="text-align:left;border:none;margin-top:5px;"><tr><td colspan="4" style="text-align:center;"><b>Informações do Personagem</b></td></tr><tr><td style="width:5%"><b>Nome:</b></td><td style="width:45%">' + data.Nome + '</td><td style="width:5%"><b>Level:</b></td><td style="width:45%">' + data.Level + '</td></tr><tr class="dif"><td><b>Vocação:</b></td><td>' + data.Vocacao + '</td><td><b>Mundo:</b></td><td>' + data.Mundo + '</td></tr><tr><td><b>Guild:</b></td><td>' + data.Guild + '</td><td><b>Tutor:</b></td><td>' + data.Tutor + '</td></tr><tr class="dif"><td><b>Residencia:</b></td><td>' + data.Residencia + '</td><td><b>Casa:</b></td><td>' + data.Casa + '</td></tr><tr><td><b>Casado com:</b></td><td>' + data.Casado + '</td><td><b>Sexo:</b></td><td>' + data.Sexo + '</td></tr><tr class="dif"><td><b>Achievements:</b></td><td>' + data.Achievements + '</td><td><b>Capacidade:</b></td><td>' + data.Capacidade + '</td></tr><tr><td><b>Vida:</b></td><td>' + data.Life + '</td><td><b>Mana:</b></td><td>' + data.Mana + '</td></tr><tr class="dif"><td><b>Status:</b></td><td>' + data.Status + '</td><td><b>Velocidade:</b></td><td>' + data.Velocidade + '</td></tr><tr><td colspan="4">Você pagará ' + data.Bless + ' gps por cada benção comum e pagará ' + data.Bless3 + ' gps por cada bênção melhorada.Tendo assim o valor total de ' + data.Bless2 + ' gps por todas elas.<br/>Em uma party, você poderá compartilhar experiência com leveis: ' + data.Party + '</td></tr></table></center>');
      }, "json");
  });

/* 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.length > 0){
        $("#aba-" + hash).addClass('atual');
    }
});

/** Cidade Rashid
 * Esse código converte o horário local para o horário de Berlin, pegando o dia da semana corretamente, independente do Horário de Verão.
 */
 $(document).ready(function () {
    /** Objeto que contém os dados do Rashid
     * Dia da Semana
     * 0: Domingo.
     * 1: Segunda-Feira.
     * 2: Terça-Feira.
     * 3: Quarta-Feira.
     * 4: Quinta-Feira.
     * 5: Sexta-Feira.
     * 6: Sábado.
     * 
     * @param day Variavel que recebe o dia da semana.
     * @param city Variavel que recebe a Cidade em que o Rashid está.
     * @param image Variavel que recebe o link da Imagem de Background com o mapa de onde o Rashid está.
     */
    var rashidCities = {
        0: {
            "day": "domingo",
            "city": "Carlin",
            "image": "/images/5/5f/Rashid_Carlin.png"
        },
        1: {
            "day": "segunda-feira",
            "city": "Svargrond",
            "image": "/images/3/34/Rashid_Svargrond.png"
        },
        2: {
            "day": "terça-feira",
            "city": "Liberty Bay",
            "image": "/images/3/33/Rashid_Liberty_Bay.png"
        },
        3: {
            "day": "quarta-feira",
            "city": "Port Hope",
            "image": "/images/c/cf/Rashid_Port_Hope.png"
        },
        4: {
            "day": "quinta-feira",
            "city": "Ankrahmun",
            "image": "/images/2/2a/Rashid_Ankrahmun.png"
        },
        5: {
            "day": "sexta-feira",
            "city": "Darashia",
            "image": "/images/c/cb/Rashid_Darashia.png"
        },
        6: {
            "day": "sábado",
            "city": "Edron",
            "image": "/images/6/6f/Rashid_Edron.png"
        }
    }
    /** 
     * @param data Variavel que recebe a data e hora atual de qualquer país e converte para a data e hora de Berlin.
     * @param hora Variavel que recebe a Hora atual de Berlin.
     * @param dia Variavel que recebe o dia da semana, e assim ele calcula se já ocorreu o SS ou não.
     */
    var data = new Date(new Date().toLocaleString('en-US', { timeZone: 'Europe/Berlin' }));
    var hora = data.getHours();
    var sDay = data.getDay();
    var dia = (hora >= 10) ? sDay : ((sDay == 0) ? 6 : sDay - 1) ;

    /** Popula o HTML do box do Rashid na página do TibiaWiki */
    $('#rashid_city_white').html('<a style="color:#FFFFFF; text-decoration:none;" href="'+rashidCities[dia].city+'">'+rashidCities[dia].city+'</a>');
    $('#rashid_city_link').html('<a style="color:#0645ad;" href="'+rashidCities[dia].city+'">'+rashidCities[dia].city+'</a>');
    $('#tibiaday').html(''+rashidCities[dia].day+'');
    $('#rashid_home').css('background','url("'+rashidCities[dia].image+'")');
    $('#rashid_home').css('background-repeat','no-repeat');
    $('#rashid_home').css('background-size','cover');
    $('#rashid_home').css('background-position','35% 0%');
    $('#rashid_home').css('height','120px');
});

/* Semana Atual */
$(document).ready(function () {
    Date.prototype.getWeek = function () {
        var onejan = new Date(this.getFullYear(), 0, 1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay() + 1) / 7);
    }


    var today = new Date();
    var currentWeekNumber = today.getWeek();
    $('#semanaatual').html(currentWeekNumber);
    var currentDay = today.getDate();
    $('#diaatual').html(currentDay);
});

/* Imbuing */
if (mw.config.values.wgPageName === 'Imbuement_Tool') {
$(document).ready(function(){
$.ajax({ url: '/index.php?title=Tibia_Wiki:Imbuing/Codigo&action=raw',success: function(codigo) {
  var codigo_html = codigo.slice(codigo.search('<pre id="imbuing_html">') + 24, codigo.search('</pre>'));
  $('.imbuing').html(codigo_html);
  codigo = codigo.slice(codigo.search('</pre>') + 6, codigo.length);
  var codigo_css = codigo.slice(codigo.search('<pre id="imbuing_css">') + 23, codigo.search('</pre>'));
  $('head').append('<style type="text/css">'+codigo_css+'</style>');
  codigo = codigo.slice(codigo.search('</pre>') + 6, codigo.length);
  var codigo_js = codigo.slice(codigo.search('<pre id="imbuing_js">') + 22, codigo.search('</pre>'));
  $('.imbuing_js').html('<script type="text/javascript">'+codigo_js+'</script>');
}});
});
}

/* Geografia */
$(document).ready(function() {  $('#casa').hover(function() {      $("#house").removeClass('no');    },    function() {      $("#house").addClass("no");    });  $('#guild').hover(function() {      $("#guildh").removeClass('no');    },    function() {      $("#guildh").addClass("no");    });  $('#biblioteca').hover(function() {      $("#library").removeClass('no');    },    function() {      $("#library").addClass("no");    });  $('#ruas').hover(function() {      $("#street").removeClass('no');    },    function() {      $("#street").addClass("no");    });  $('#invasao').hover(function() {      $("#raid").removeClass('no');    },    function() {      $("#raid").addClass("no");    });   $('.huntopc a').removeAttr('href');});


/* 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();
    }
  });
});

/* Server Save */
if (mw.config.values.wgPageName === 'Home') {
$(document).ready(function () {
const threadTime = 1000; // Tempo que atualiza o Tempo para o SS. 1000 = 1 segundo.

var ssHour = 10; // Hora do SS. 10:00:00h AM de Berlin.
var ssMinute = 0; // Minuto do SS.
var ssSecond = 0; // Segundo do SS.

var ss = new Date(); // Variavel de SS.
var countDownDate = ss.getTime(); // Variavel de Time do SS.
var x = setInterval(function() {

    /* Pega Hora do SS em Berlin 
     * - Pega o horário de Berlin, e seta para o horário do SS, 10:00:00 AM sempre do dia atual ou dia seguinte, caso necessário. 
     */
    ss = new Date(new Date().toLocaleString('en-US', { timeZone: 'Europe/Berlin' }));
    if (ss.getHours() >= ssHour) {
        ss.setDate(ss.getDate() + 1);
    }
    ss.setHours(ssHour, ssMinute, ssSecond);
    countDownDate = ss.getTime();
    /* Fim - Pega Hora do SS em Berlin */

    /* Pega Hora atual em Berlin
     * - Essa forma, não importa o país, ele converte para o horário atual de Berlin.
     */
    var now = new Date(new Date().toLocaleString('en-US', { timeZone: 'Europe/Berlin' })).getTime();
    var distance = countDownDate - now; // Realiza o Calculo para saber a "Distancia" entre a hora atual até o horáio do SS.
    /* Fim - Pega Hora atual em Berlin*/
    
    /* Calculo de Horas para o SS. 
     * Transforma a distancia de horários entre o SS e a hora atual, em formato de Horas.
     */
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    var pluralH = hours === 1 ? "" : "s"; // Verifica se é mais de uma Hora, se for, acrescenta o 'S' para poder deixar a descrição em plural.

    /* Calculo de  Minutos para o SS.
     * Transforma a distancia de horários entre o SS e a hora atual, em formato de Minutos.
     */
    var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    var pluralM = minutes === 1 ? "" : "s"; // Verifica se é mais de um Minuto, se for, acrescenta o 'S' para poder deixar a descrição em plural.

    if (hours >= 1) {
        $('#serversave').text('Faltam ' + hours + 'h ' + minutes + 'min'+ ' para o Server Save.');
    } else {
        if (minutes >= 1) {
            $('#serversave').text('Faltam ' + minutes + ' min'+pluralM+ ' para o Server Save.');
        } else {
            /* Calculo de Segundos para o SS.
             * Transforma a distancia de horários entre o SS e a hora atual, em formato de Segundos.
             */
            var seconds = Math.floor((distance % (1000 * 60 * 60)) / 1000);
            var pluralS = seconds === 1 ? "" : "s"; // Verifica se é mais de um Segundo, se for, acrescenta o 'S' para poder deixar a descrição em plural.
            $('#serversave').text('Faltam ' + seconds + ' segundo' + pluralS + ' para o Server Save.');
        }
    }
}, threadTime);
});
}

const loaded_scripts = []
$(document).ready(function () {
  $('.load_js').each(function () {
    const script = $(this).attr('data-script')
    if (!loaded_scripts.includes(script)) {
      mw.loader.load('/index.php?title=MediaWiki:' + script + '&action=raw&ctype=text/javascript')
      loaded_scripts.push(script)
    }
  })
})