Diferenças entre edições de "MediaWiki:Common.js"

(DSVGO)
 
(Há 17 revisões intermédias de 3 utilizadores que não estão a ser apresentadas)
Linha 1: Linha 1:
 
/* Código Javascript colocado aqui será carregado para todos os utilizadores em cada carregamento de página */
 
/* Código Javascript colocado aqui será carregado para todos os utilizadores em cada carregamento de página */
  
$('div#content').append( "<div class='content-footer'></div>" );
+
/* =====================================
 +
  FUNÇÕES AUXILIARES
 +
  ===================================== */
  
 +
/* Tabber helpers */
 +
function showElement(element) {
 +
  element.classList.remove("tabber-noactive");
 +
}
  
$('#p-navigation h5').removeClass("active");
+
function hideElement(element) {
$('#p-navigation').removeClass("activate");
+
  element.classList.add("tabber-noactive");
 +
}
  
$('#p-Comunidade h5').removeClass("active");
+
function toggleElement(element) {
$('#p-Comunidade').removeClass("activate");
+
  element.classList.toggle("tabber-noactive");
 +
}
  
$('#p-tb h5').removeClass("active");
+
/* Favicon */
$('#p-tb').removeClass("activate");
+
function fixInsecureFavicon() {
 +
  var favicon = document.querySelector('link[rel="shortcut icon"]');
 +
  if (favicon) {
 +
    favicon.href = "https://gf1.geo.gfsrv.net/cdn98/191b803adbf82f4b8febe3a2c38c2c.ico";
 +
  }
 +
}
  
$('#p-lang h5').removeClass("active");
+
/* Liste des équipements / Lista de equipamentos */
$('#p-lang').removeClass("activate");
+
function changeEquipementDisplay(container) {
$('#p-navigation').click(function() {
+
  var switchButton = container.querySelector(".button");
    $('#p-navigation .portletNavMiddle').slideToggle();
+
  var content = container.nextElementSibling;
    $('#p-navigation h5').toggleClass("active");
+
 
    $('#p-navigation').toggleClass("activate");
+
  if (!switchButton || !content) return;
    $('#p-Comunidade .portletNavMiddle').slideUp(500);
+
 
    $('#p-tb .portletNavMiddle').slideUp(500);
+
  switchButton.addEventListener("click", function () {
    $('#p-lang .portletNavMiddle').slideUp(500);
+
    switchButton.classList.toggle("tabber-active");
});
+
    toggleElement(content);
 +
  });
 +
}
 +
 
 +
/* Remove animação de loading e mostra conteúdo assim que estiver pronto */
 +
function removeLoadingAnimation() {
 +
  var loadingAnimation = document.getElementById("loading-animation");
 +
  var showAfterLoading = document.getElementById("show-after-loading");
  
 +
  if (loadingAnimation) {
 +
    hideElement(loadingAnimation);
 +
  }
  
$('#p-Comunidade').click(function() {
+
  if (showAfterLoading) {
  $('#p-Comunidade .portletNavMiddle').slideToggle();
+
    showElement(showAfterLoading);
$('#p-Comunidade h5').removeClass("active");
+
   }
$('#p-Comunidade').removeClass("activate");
+
}
   $('#p-navigation .portletNavMiddle').slideUp(500);
 
  $('#p-tb .portletNavMiddle').slideUp(500);
 
  $('#p-lang .portletNavMiddle').slideUp(500);
 
});
 
  
$('#p-tb').click(function() {
+
/* BOTÃO VOLTAR AO TOPO */
   $('#p-tb .portletNavMiddle').slideToggle();
+
function addButtonTop() {
  $('#p-tb h5').removeClass("active");
+
   var contentText = document.querySelector("div#mw-content-text");
  $('#p-tb').removeClass("activate");
 
  $('#p-navigation .portletNavMiddle').slideUp(500);
 
  $('#p-lang .portletNavMiddle').slideUp(500);
 
  $('#p-Comunidade .portletNavMiddle').slideUp(500);
 
});
 
  
$('#p-lang').click(function() {
+
  if (contentText !== null) {
  $('#p-lang .portletNavMiddle').slideToggle();
+
    var divButtonTop = document.createElement("div");
  $('#p-lang h5').removeClass("active");
+
    divButtonTop.classList.add("top-button");
  $('#p-lang').removeClass("activate");
+
    contentText.appendChild(divButtonTop);
  $('#p-tb .portletNavMiddle').slideUp(500);
+
   }
   $('#p-Comunidade .portletNavMiddle').slideUp(500);
+
}
  $('#p-navigation .portletNavMiddle').slideUp(500);
 
});
 
  
 +
function buttonTop() {
 +
  var balise = document.querySelector("div#mw-page-header-links");
 +
  var topButton = document.querySelector(".top-button");
  
(function () {
+
  if (balise !== null && topButton !== null) {
 +
    var options = {
 +
      root: null,
 +
      rootMargin: "0px",
 +
      threshold: 0
 +
    };
  
     var rem;
+
     var observer = new IntersectionObserver(callback, options);
 +
    observer.observe(balise);
  
function setPixel(meta, container_id) {
+
    function callback(entries) {
try {
+
      entries.forEach(function (entry) {
+
        if (entry.isIntersecting) {
    injectEvaluationId(meta);
+
          topButton.classList.remove("show-button");
+
         } else {
rem = (container_id && document.getElementById(container_id))
+
          topButton.classList.add("show-button");
? document.getElementById(container_id)
 
: document.createElement("div");
 
document.body.appendChild(rem);
 
 
var iframe = document.createElement("iframe");
 
 
iframe.style.width = '0';
 
iframe.style.height = '0';
 
iframe.style.display = 'block';
 
iframe.style.border = 'none';
 
iframe.setAttribute("frameborder", "0");
 
rem.appendChild(iframe);
 
 
var firstFormContent = "<head></head><body>" + buildForm(meta) + "</body>";
 
 
iframe.contentWindow.document.open();
 
iframe.contentWindow.document.write(firstFormContent);
 
iframe.contentWindow.document.close();
 
 
} catch (e) { }
 
}
 
 
function setSecondPixel(meta, baseFingerprint) {
 
  // inject baseFP into meta
 
  meta.fingerprint = baseFingerprint;
 
 
 
  // overwrite original location
 
  meta.location = "fp_eval";
 
 
 
  // store config id
 
  meta.fp2_config_id = 1;
 
 
  var secondFrame = document.createElement("iframe");
 
           
 
      secondFrame.style.width = '0';
 
      secondFrame.style.height = '0';
 
      secondFrame.style.display = 'block';
 
      secondFrame.style.border = 'none';
 
      secondFrame.setAttribute("frameborder", "0");
 
      rem.appendChild(secondFrame);
 
     
 
      var secondFormContent = "<head></head><body>" + buildSecondForm(meta) + "</body>";
 
     
 
      secondFrame.contentWindow.document.open();
 
      secondFrame.contentWindow.document.write(secondFormContent);
 
      secondFrame.contentWindow.document.close();
 
}
 
 
function injectEvaluationId(meta) {
 
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
 
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
 
    return v.toString(16);
 
});
 
meta.fp_eval_id = uuid;
 
}
 
 
function buildForm(meta) {
 
var url = (meta.pz_debug_url !== undefined)
 
? meta.pz_debug_url
 
: 'https://pixelzirkus.gameforge.com';
 
 
var form = '';
 
form += '<script>inDapIF = true;</script>';
 
form += '<script src="' + url + '/static/js/E6gg7P33.js"></script>';
 
 
var meta_json = ''; try { meta_json = JSON.stringify(meta); } catch (e) {}
 
form += '<script>var meta_json = \'' + meta_json + '\';</script>';
 
form += '<script>var meta = {}; try { meta = JSON.parse(meta_json); } catch (e) {}</script>';
 
 
form += '<form id="gf_pz_form" action="' + url + '/do/simple" method="POST" accept-charset="UTF-8">';
 
 
var key, value;
 
for (key in meta) {
 
if (key.indexOf('pz_debug') !== -1) {
 
continue;
 
}
 
 
value = meta[key];
 
value = value + "";
 
value = value.replace(/"/g, "");
 
form += '<input type="hidden" name="' + key + '" value="' + value + '" />';
 
}
 
 
if (!meta.page) {
 
form += '<input type="hidden" name="page" value="' + window.location + '" />';
 
}
 
if (!meta.referrer) {
 
form += '<input type="hidden" name="referrer" value="' + document.referrer + '" />';
 
}
 
 
form += '</form>';
 
form += '<script>';
 
form += 'var input_fp = document.createElement("input"); input_fp.type = "hidden"; input_fp.name = "fingerprint"; input_fp.value = "unknown"; document.getElementById("gf_pz_form").appendChild(input_fp);';
 
form += 'var input_fp_exec = document.createElement("input"); input_fp_exec.type = "hidden"; input_fp_exec.name = "fp_exec_time"; input_fp_exec.value = -1; document.getElementById("gf_pz_form").appendChild(input_fp_exec);';
 
form += 'try {';
 
form += '    var startTime = window.performance.now();';
 
form += '    var fp = new Fingerprint().get();';
 
form += '    var exec_time = window.performance.now() - startTime;';
 
form += '    input_fp.value = fp;';
 
        form += '    input_fp_exec.value = exec_time.toFixed(2);';
 
         form += '    parent.window.setSecondPixel(meta, fp);';
 
form += '} catch (e) {}';
 
form += 'document.getElementById("gf_pz_form").submit();';
 
form += '</script>';
 
 
return form;
 
}
 
 
    function buildSecondForm(meta) {
 
        var url = (meta.pz_debug_url !== undefined)
 
            ? meta.pz_debug_url
 
            : 'https://pixelzirkus.gameforge.com';
 
       
 
        var form = '';
 
        form += '<script>inDapIF = true;</script>';
 
        form += '<script src="' + url + '/static/js/GT7h68ox.js"></script>';
 
        form += '<form id="gf_pz_form" action="' + url + '/do/simple" method="POST" accept-charset="UTF-8">';
 
   
 
        var key, value;
 
        for (key in meta) {
 
            if (key.indexOf('pz_debug') !== -1) {
 
                continue;
 
            }
 
           
 
            value = meta[key];
 
            value = value + "";
 
            value = value.replace(/"/g, "");
 
            form += '<input type="hidden" name="' + key + '" value="' + value + '" />';
 
 
         }
 
         }
      
+
      });
         if (!meta.page) {
+
     }
            form += '<input type="hidden" name="page" value="' + window.location + '" />';
+
 
 +
    topButton.addEventListener("click", function () {
 +
      document.documentElement.scrollTo({
 +
         top: 0
 +
      });
 +
    });
 +
  }
 +
}
 +
 
 +
/* Cookies GF */
 +
function cookies() {
 +
  var req = new XMLHttpRequest();
 +
  req.addEventListener("load", function () {
 +
    if (this.status >= 200 && this.status < 300) {
 +
      try {
 +
        var data = JSON.parse(this.responseText);
 +
        if (data && Object.prototype.hasOwnProperty.call(data, "version")) {
 +
          var gdpr = document.createElement("script");
 +
          gdpr.src =
 +
            "https://s3-static.geo.gfsrv.net/cookiebanner/" +
 +
            data.version +
 +
            "/cookie.min.js";
 +
          document.head.appendChild(gdpr);
 
         }
 
         }
        if (!meta.referrer) {
+
      } catch (e) {
            form += '<input type="hidden" name="referrer" value="' + document.referrer + '" />';
+
         // falha a ler JSON, ignora
        }
+
      }
       
 
        form += '</form>';
 
        form += '<script>';
 
        form += 'var input_fp = document.createElement("input"); input_fp.type = "hidden"; input_fp.name = "fp2_value"; document.getElementById("gf_pz_form").appendChild(input_fp);';
 
        form += 'var input_fp_exec = document.createElement("input"); input_fp_exec.type = "hidden"; input_fp_exec.name = "fp2_exec_time"; document.getElementById("gf_pz_form").appendChild(input_fp_exec);';
 
        form += 'try {';
 
        form += '    var startTime = window.performance.now();';
 
        form += '    new Fingerprint2().get(function(fingerprint) {';
 
        form += '        input_fp.value = fingerprint;';
 
        form += '        var exec_time = window.performance.now() - startTime;';
 
        form += '        input_fp_exec.value = exec_time.toFixed(2);';
 
        form += '        document.getElementById("gf_pz_form").submit();';
 
        form += '    })';
 
        form += '} catch (e) {}';
 
         form += '</script>';
 
   
 
        return form;
 
 
     }
 
     }
      
+
  });
     function capturePixel(meta) {
+
  req.open("GET", "https://s3-static.geo.gfsrv.net/cookiebanner/version.json");
        if (!meta.page) {
+
  req.send();
            meta.page = window.location.href;
+
}
 +
 
 +
/* =====================================
 +
  SLIDESHOW
 +
  ===================================== */
 +
 
 +
/* Slideshow con pulsanti avanti e indietro in javascript */
 +
(function () {
 +
  function Slideshow(element) {
 +
    this.el = document.querySelector(element);
 +
     if (!this.el) return;
 +
     this.init();
 +
  }
 +
 
 +
  Slideshow.prototype = {
 +
    init: function () {
 +
      this.wrapper = this.el.querySelector(".slider-wrapper_wiki");
 +
      this.slides = this.el.querySelectorAll(".slide_wiki");
 +
      this.previous = this.el.querySelector(".slider-previous");
 +
      this.next = this.el.querySelector(".slider-next");
 +
      this.index = 0;
 +
      this.total = this.slides.length;
 +
 
 +
      if (!this.slides.length || !this.next || !this.previous) return;
 +
 
 +
      this.actions();
 +
      this._slideTo(this.index);
 +
    },
 +
    _slideTo: function (slide) {
 +
      var currentSlide = this.slides[slide];
 +
      if (!currentSlide) return;
 +
 
 +
      currentSlide.style.display = "block";
 +
 
 +
      for (var i = 0; i < this.slides.length; i++) {
 +
        var s = this.slides[i];
 +
        if (s !== currentSlide) {
 +
          s.style.display = "none";
 
         }
 
         }
          
+
      }
         if (!meta.referrer) {
+
    },
             meta.referrer = document.referrer;
+
    actions: function () {
         }
+
      var self = this;
     
+
 
         return meta;
+
      this.next.addEventListener(
 +
         "click",
 +
         function () {
 +
          self.index++;
 +
          self.previous.style.display = "block";
 +
 
 +
          if (self.index >= self.total - 1) {
 +
             self.index = self.total - 1;
 +
            self.next.style.display = "none";
 +
          }
 +
          if (self.index < 0) self.index = 0;
 +
 
 +
          self._slideTo(self.index);
 +
         },
 +
        false
 +
      );
 +
 
 +
      this.previous.addEventListener(
 +
         "click",
 +
        function () {
 +
          self.index--;
 +
          self.next.style.display = "block";
 +
 
 +
          if (self.index <= 0) {
 +
            self.index = 0;
 +
            self.previous.style.display = "none";
 +
          }
 +
 
 +
          self._slideTo(self.index);
 +
        },
 +
        false
 +
      );
 
     }
 
     }
   
+
  };
    function firePixels(meta, container_id) {
+
 
        try {
+
  document.addEventListener("DOMContentLoaded", function () {
            var container = (container_id !== undefined && document.getElementById(container_id))
+
    new Slideshow("#main-slider");
                ? document.getElementById(container_id)
+
  });
                : document.createElement("div");
+
})();
   
+
 
            var iframe = document.createElement("iframe");
+
/* =====================================
           
+
  MODAIS (JQUERY)
            iframe.style.width = '0';
+
  ===================================== */
            iframe.style.height = '0';
+
 
            iframe.style.display = 'block';
+
$(".trigger").on("click", function () {
            iframe.style.border = 'none';
+
  var modal = $(this).data("modal");
            iframe.setAttribute("frameborder", "0");
+
  $(modal).toggle();
            document.body.appendChild(container);
+
});
            container.appendChild(iframe);
+
 
     
+
$(".modal").on("click", function (e) {
            iframe.contentWindow.document.open();
+
  var className = e.target.className;
            iframe.contentWindow.document.write("<head></head><body>" + buildMultiForm(meta) + "</body>");
+
  if (className === "modal" || className === "close-button") {
            iframe.contentWindow.document.close();
+
    $(this).closest(".modal").toggle();
     
+
  }
            if (window.location.search.indexOf("pz_debug") !== -1) {
+
});
                window.pz_debug = meta;
+
 
            }
+
/* =======================================
         } catch (e) {}
+
  FUNÇÃO GLOBAL – corre ao carregar a página
 +
  ======================================= */
 +
 
 +
(function () {
 +
  fixInsecureFavicon();
 +
 
 +
  var urlStart = "/index.php?title=MediaWiki:Script/";
 +
  var urlEnd = ".js&action=raw&ctype=text/javascript";
 +
  var loadScripts = document.querySelectorAll("div[data-load-javascript]");
 +
  var equipmentContainer = document.querySelectorAll(
 +
    "div#mw-content-text .list-equip"
 +
  );
 +
 
 +
  /* Lista de equipamentos */
 +
  equipmentContainer.forEach(function (container) {
 +
    changeEquipementDisplay(container);
 +
  });
 +
 
 +
  /* Carrega scripts específicos dependendo da página */
 +
  if (loadScripts.length) {
 +
    var allowedScripts = {
 +
      Tabber: true,
 +
      Skills: true,
 +
      Modal: true,
 +
      Switch: true,
 +
      Loot: true,
 +
      Map: true,
 +
      Filter: true,
 +
      Calculator: true,
 +
      Element: true,
 +
      Pets: true,
 +
      Colorblind: true
 +
    };
 +
 
 +
    var scriptsToLoad = [];
 +
 
 +
    loadScripts.forEach(function (scriptElement) {
 +
      var scriptName = scriptElement.dataset.loadJavascript;
 +
 
 +
      if (allowedScripts[scriptName]) {
 +
        allowedScripts[scriptName] = false;
 +
        scriptsToLoad.push(scriptName);
 +
      }
 +
    });
 +
 
 +
    if (scriptsToLoad.length) {
 +
      var firstScriptName = scriptsToLoad[0];
 +
 
 +
      if (firstScriptName === "Element") {
 +
        scriptsToLoad.shift();
 +
        $.getScript(urlStart + firstScriptName + urlEnd, function () {
 +
          if (typeof injectCustomElements === "function") {
 +
            injectCustomElements();
 +
          }
 +
          loadNextScripts();
 +
         });
 +
      } else {
 +
        loadNextScripts();
 +
      }
 
     }
 
     }
   
+
 
     function buildMultiForm(meta) {
+
     function loadNextScripts() {
        var url = 'https://pixelzirkus.gameforge.com';
+
      scriptsToLoad.forEach(function (scriptName) {
       
+
         mw.loader.load(urlStart + scriptName + urlEnd);
        var form;
+
      });
        form  = '<script src="' + url + '/static/js/E6gg7P33.js"></script>';
+
 
        form += '<form id="gf_pz_form" action="' + url + '/do/multi" method="POST" accept-charset="UTF-8">';
+
      removeLoadingAnimation();
   
 
        form += '<input type="hidden" name="pixels" value="' + escapeHtml(JSON.stringify(meta)) + '" />';
 
       
 
         form += '</form>';
 
        form += '<script>';
 
        form += 'var input_fp = document.createElement("input"); input_fp.type = "hidden"; input_fp.name = "fingerprint"; input_fp.value = "unknown"; document.getElementById("gf_pz_form").appendChild(input_fp); ';
 
        form += 'try {';
 
        form += '    input_fp.value = new Fingerprint().get();';
 
        form += '} catch (e) {} ';
 
        form += 'document.getElementById("gf_pz_form").submit();';
 
        form += '</script>';
 
   
 
        return form;
 
 
     }
 
     }
+
  }
    function escapeHtml(unsafe) {
+
 
        return unsafe
+
  /* Editor avançado para utilizadores autenticados */
            .replace(/&/g, "&amp;")
+
  if (mw.config.get("wgUserName")) {
            .replace(/</g, "&lt;")
+
    mw.loader.load(urlStart + "Redactor" + urlEnd);
            .replace(/>/g, "&gt;")
+
  }
            .replace(/"/g, "&quot;")
+
 
            .replace(/'/g, "&#039;");
+
  /* Botão topo & cookies */
    }
+
  addButtonTop();
+
  buttonTop();
window.setPixel = setPixel;
+
  cookies();
window.setSecondPixel = setSecondPixel;
 
 
window.capturePixel = capturePixel;
 
    window.firePixels = firePixels;
 
 
})();
 
})();
 
var script = document.createElement("script"); // Make a script DOM node
 
script.src = 'https://gf1.geo.gfsrv.net/static/cookie-banner/2018052311/cookiebanner.js'; // must be the url where the cookiebanner.js is located
 
document.head.appendChild(script); // Add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead
 

Edição atual desde as 11h16min de 17 de novembro de 2025

/* Código Javascript colocado aqui será carregado para todos os utilizadores em cada carregamento de página */

/* =====================================
   FUNÇÕES AUXILIARES
   ===================================== */

/* Tabber helpers */
function showElement(element) {
  element.classList.remove("tabber-noactive");
}

function hideElement(element) {
  element.classList.add("tabber-noactive");
}

function toggleElement(element) {
  element.classList.toggle("tabber-noactive");
}

/* Favicon */
function fixInsecureFavicon() {
  var favicon = document.querySelector('link[rel="shortcut icon"]');
  if (favicon) {
    favicon.href = "https://gf1.geo.gfsrv.net/cdn98/191b803adbf82f4b8febe3a2c38c2c.ico";
  }
}

/* Liste des équipements / Lista de equipamentos */
function changeEquipementDisplay(container) {
  var switchButton = container.querySelector(".button");
  var content = container.nextElementSibling;

  if (!switchButton || !content) return;

  switchButton.addEventListener("click", function () {
    switchButton.classList.toggle("tabber-active");
    toggleElement(content);
  });
}

/* Remove animação de loading e mostra conteúdo assim que estiver pronto */
function removeLoadingAnimation() {
  var loadingAnimation = document.getElementById("loading-animation");
  var showAfterLoading = document.getElementById("show-after-loading");

  if (loadingAnimation) {
    hideElement(loadingAnimation);
  }

  if (showAfterLoading) {
    showElement(showAfterLoading);
  }
}

/* BOTÃO VOLTAR AO TOPO */
function addButtonTop() {
  var contentText = document.querySelector("div#mw-content-text");

  if (contentText !== null) {
    var divButtonTop = document.createElement("div");
    divButtonTop.classList.add("top-button");
    contentText.appendChild(divButtonTop);
  }
}

function buttonTop() {
  var balise = document.querySelector("div#mw-page-header-links");
  var topButton = document.querySelector(".top-button");

  if (balise !== null && topButton !== null) {
    var options = {
      root: null,
      rootMargin: "0px",
      threshold: 0
    };

    var observer = new IntersectionObserver(callback, options);
    observer.observe(balise);

    function callback(entries) {
      entries.forEach(function (entry) {
        if (entry.isIntersecting) {
          topButton.classList.remove("show-button");
        } else {
          topButton.classList.add("show-button");
        }
      });
    }

    topButton.addEventListener("click", function () {
      document.documentElement.scrollTo({
        top: 0
      });
    });
  }
}

/* Cookies GF */
function cookies() {
  var req = new XMLHttpRequest();
  req.addEventListener("load", function () {
    if (this.status >= 200 && this.status < 300) {
      try {
        var data = JSON.parse(this.responseText);
        if (data && Object.prototype.hasOwnProperty.call(data, "version")) {
          var gdpr = document.createElement("script");
          gdpr.src =
            "https://s3-static.geo.gfsrv.net/cookiebanner/" +
            data.version +
            "/cookie.min.js";
          document.head.appendChild(gdpr);
        }
      } catch (e) {
        // falha a ler JSON, ignora
      }
    }
  });
  req.open("GET", "https://s3-static.geo.gfsrv.net/cookiebanner/version.json");
  req.send();
}

/* =====================================
   SLIDESHOW
   ===================================== */

/* Slideshow con pulsanti avanti e indietro in javascript */
(function () {
  function Slideshow(element) {
    this.el = document.querySelector(element);
    if (!this.el) return;
    this.init();
  }

  Slideshow.prototype = {
    init: function () {
      this.wrapper = this.el.querySelector(".slider-wrapper_wiki");
      this.slides = this.el.querySelectorAll(".slide_wiki");
      this.previous = this.el.querySelector(".slider-previous");
      this.next = this.el.querySelector(".slider-next");
      this.index = 0;
      this.total = this.slides.length;

      if (!this.slides.length || !this.next || !this.previous) return;

      this.actions();
      this._slideTo(this.index);
    },
    _slideTo: function (slide) {
      var currentSlide = this.slides[slide];
      if (!currentSlide) return;

      currentSlide.style.display = "block";

      for (var i = 0; i < this.slides.length; i++) {
        var s = this.slides[i];
        if (s !== currentSlide) {
          s.style.display = "none";
        }
      }
    },
    actions: function () {
      var self = this;

      this.next.addEventListener(
        "click",
        function () {
          self.index++;
          self.previous.style.display = "block";

          if (self.index >= self.total - 1) {
            self.index = self.total - 1;
            self.next.style.display = "none";
          }
          if (self.index < 0) self.index = 0;

          self._slideTo(self.index);
        },
        false
      );

      this.previous.addEventListener(
        "click",
        function () {
          self.index--;
          self.next.style.display = "block";

          if (self.index <= 0) {
            self.index = 0;
            self.previous.style.display = "none";
          }

          self._slideTo(self.index);
        },
        false
      );
    }
  };

  document.addEventListener("DOMContentLoaded", function () {
    new Slideshow("#main-slider");
  });
})();

/* =====================================
   MODAIS (JQUERY)
   ===================================== */

$(".trigger").on("click", function () {
  var modal = $(this).data("modal");
  $(modal).toggle();
});

$(".modal").on("click", function (e) {
  var className = e.target.className;
  if (className === "modal" || className === "close-button") {
    $(this).closest(".modal").toggle();
  }
});

/* =======================================
   FUNÇÃO GLOBAL – corre ao carregar a página
   ======================================= */

(function () {
  fixInsecureFavicon();

  var urlStart = "/index.php?title=MediaWiki:Script/";
  var urlEnd = ".js&action=raw&ctype=text/javascript";
  var loadScripts = document.querySelectorAll("div[data-load-javascript]");
  var equipmentContainer = document.querySelectorAll(
    "div#mw-content-text .list-equip"
  );

  /* Lista de equipamentos */
  equipmentContainer.forEach(function (container) {
    changeEquipementDisplay(container);
  });

  /* Carrega scripts específicos dependendo da página */
  if (loadScripts.length) {
    var allowedScripts = {
      Tabber: true,
      Skills: true,
      Modal: true,
      Switch: true,
      Loot: true,
      Map: true,
      Filter: true,
      Calculator: true,
      Element: true,
      Pets: true,
      Colorblind: true
    };

    var scriptsToLoad = [];

    loadScripts.forEach(function (scriptElement) {
      var scriptName = scriptElement.dataset.loadJavascript;

      if (allowedScripts[scriptName]) {
        allowedScripts[scriptName] = false;
        scriptsToLoad.push(scriptName);
      }
    });

    if (scriptsToLoad.length) {
      var firstScriptName = scriptsToLoad[0];

      if (firstScriptName === "Element") {
        scriptsToLoad.shift();
        $.getScript(urlStart + firstScriptName + urlEnd, function () {
          if (typeof injectCustomElements === "function") {
            injectCustomElements();
          }
          loadNextScripts();
        });
      } else {
        loadNextScripts();
      }
    }

    function loadNextScripts() {
      scriptsToLoad.forEach(function (scriptName) {
        mw.loader.load(urlStart + scriptName + urlEnd);
      });

      removeLoadingAnimation();
    }
  }

  /* Editor avançado para utilizadores autenticados */
  if (mw.config.get("wgUserName")) {
    mw.loader.load(urlStart + "Redactor" + urlEnd);
  }

  /* Botão topo & cookies */
  addButtonTop();
  buttonTop();
  cookies();
})();