REMOVA OS ANÚNCIOS!

Apoiando através de https://apoia.se/arddhu a partir do tier de Apoiador, você pode navegar na wiki sem anúncios e ainda colabora com o projeto!

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

De Runarcana Wiki
Sem resumo de edição
Etiqueta: Reversão manual
Sem resumo de edição
Etiqueta: Revertido
Linha 64: Linha 64:
/* TOC */
/* TOC */
$(document).ready(function () {
$(document).ready(function () {
   $(function () {
   var $window,
    var $window,
       $mwPanel,
       $mwPanel,
       $floatTOC,
       $floatTOC,
Linha 74: Linha 73:
       $toc = $("#toc");
       $toc = $("#toc");


    if (!$toc.length) {
  if (!$toc.length) {
      return;
    return;
    }
  }


    $window = $(window);
  $window = $(window);
    $mwPanel = $("#mw-panel");
  $mwPanel = $("#mw-panel");
  headingThreshold = $window.height() / 5.0;


    headingThreshold = $window.height() / 5.0;
  // Clonando o TOC original
  $floatTOC = $toc
    .clone()
    .removeAttr("id")
    .attr("id", "floatTOC")
    .addClass("floatTOC")
    .appendTo("body");


    $floatTOC = $toc
  $floatTOC.find("ul").show();
      .clone()
      .removeAttr("id")
      .attr("id", "floatTOC")
      .addClass("floatTOC")
      .appendTo("body");


    $floatTOC.find("ul").show();
  // Criando o botão de alternância
  const tocToggleButton = document.createElement("button");
  tocToggleButton.setAttribute("id", "toctogglebutton");
  tocToggleButton.setAttribute("onclick", "toggleTOCVisibility()");


    const tocToggleButton = document.createElement("button");
  const tocToggleButtonIconNode = document.createElement("i");
    tocToggleButton.setAttribute("id", "toctogglebutton");
  tocToggleButtonIconNode.setAttribute("class", "material-icons");
    tocToggleButton.setAttribute("onclick", "toggleTOCVisibility()");


    const tocToggleButtonIconNode = document.createElement("i");
  var tocToggleButtonIconNodeContent;
    tocToggleButtonIconNode.setAttribute("class", "material-icons");


     var tocToggleButtonIconNodeContent;
  if (getCookie("showTOC") == "false") {
     tocToggleButtonIconNodeContent = document.createTextNode("chevron_left");
    $floatTOC.addClass("hiddenFloatTOC");
  } else {
    tocToggleButtonIconNodeContent = document.createTextNode("chevron_right");
  }


    if (getCookie("showTOC") == "false") {
  tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
      tocToggleButtonIconNodeContent = document.createTextNode("chevron_left");
  tocToggleButton.appendChild(tocToggleButtonIconNode);
      $floatTOC.addClass("hiddenFloatTOC");
  $floatTOC.prepend(tocToggleButton);
    } else {
      tocToggleButtonIconNodeContent = document.createTextNode("chevron_right");
    }


     tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
  // Rolagem suave ao clicar nos itens da TOC
     tocToggleButton.appendChild(tocToggleButtonIconNode);
  $floatTOC.find("a").click(function (e) {
     $("html, body").animate({
      scrollTop: $(this.hash.replace(/\./g, "\\.")).offset().top - headingThreshold,
    }, 500); // Adiciona animação suave
     return false;
  });


    $floatTOC.prepend(tocToggleButton);
  tocLimit = $toc.offset().top + $toc.height();
  headingOffsets = [];


    $floatTOC.find("a").click(function (e) {
  $(".mw-headline").each(function () {
      $("html, body").animate({
    headingOffsets.push([$(this).attr("id"), $(this).offset().top]);
        scrollTop: $(this.hash.replace(/\./g, "\\.")).offset().top - headingThreshold,
  });
      });


      return false;
  scrollHandler = function () {
     });
     var $current,
        scrollTop = $window.scrollTop();


     tocLimit = $toc.offset().top + $toc.height();
     if (scrollTop > tocLimit) {
    headingOffsets = [];
      $mwPanel.hide(); // Esconde o painel lateral


    $(".mw-headline").each(function () {
       var highlight = false;
       headingOffsets.push([$(this).attr("id"), $(this).offset().top]);
    });


    scrollHandler = function () {
      $.each(headingOffsets, function (i, v) {
      var $current,
         if (i !== 0 && scrollTop + headingThreshold < v[1]) {
         scrollTop = $window.scrollTop();
          highlight = headingOffsets[i - 1][0];
          return false; // Sai do loop
        }
      });


       if (scrollTop > tocLimit) {
       if (highlight) {
         $mwPanel.hide();
        // Limpar estilos anteriores
         $floatTOC.find("a").css({
          "font-weight": "",
          "text-decoration": "",
        }).find('.toc-arrow').remove(); // Remove setas anteriores


         var highlight = false;
         // Destacar o item atual
 
         $current = $floatTOC.find('a[href="#' + $.escapeSelector(highlight) + '"]');
         $.each(headingOffsets, function (i, v) {
        $current.css({
          if (i !== 0 && scrollTop + headingThreshold < v[1]) {
          "font-weight": "bold",
            highlight = headingOffsets[i - 1][0];
          "text-decoration": "underline",
            return false;
           "color": "#D9D2E9" // Cor do item em destaque
           }
         });
         });
 
         $current.prepend('<span class="toc-arrow" style="margin-right: 5px; color: #D9D2E9;">→</span>'); // Adiciona a seta à esquerda
         if (highlight) {
          // Limpar estilos anteriores
          $floatTOC.find("a").css({
            "font-weight": "",
            "text-decoration": "",
          }).find('.toc-arrow').remove(); // Remove setas anteriores
 
          // Destacar o item atual
          $current = $floatTOC.find('a[href="#' + $.escapeSelector(highlight) + '"]');
          $current.css({
            "font-weight": "bold",
            "text-decoration": "underline",
          });
          $current.append('<span class="toc-arrow" style="margin-left: 5px;">→</span>'); // Adiciona a seta
        }
      } else {
        $mwPanel.show();
       }
       }
     };
     } else {
      $mwPanel.show(); // Mostra o painel lateral novamente
    }
  };


    $window.on("scroll", scrollHandler); // Removido OO.ui.throttle
  $window.on("scroll", scrollHandler);
  });
});
});


// Função para alternar a visibilidade da TOC
function toggleTOCVisibility() {
function toggleTOCVisibility() {
   var $floatTOC = $("#floatTOC");
   var $floatTOC = $("#floatTOC");
Linha 174: Linha 174:
   if ($floatTOC.hasClass("hiddenFloatTOC")) {
   if ($floatTOC.hasClass("hiddenFloatTOC")) {
     $floatTOC.removeClass("hiddenFloatTOC");
     $floatTOC.removeClass("hiddenFloatTOC");
 
     $tocToggleButton.html('<i class="material-icons">chevron_right</i>'); // Atualiza o ícone
     const tocToggleButtonIconNode = document.createElement("i");
    tocToggleButtonIconNode.setAttribute("class", "material-icons");
 
    const tocToggleButtonIconNodeContent =
      document.createTextNode("chevron_right");
    tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
 
    $tocToggleButton.html("");
    $tocToggleButton.append(tocToggleButtonIconNode);
 
     setCookie("showTOC", "true");
     setCookie("showTOC", "true");
   } else {
   } else {
     $floatTOC.addClass("hiddenFloatTOC");
     $floatTOC.addClass("hiddenFloatTOC");
 
     $tocToggleButton.html('<i class="material-icons">chevron_left</i>'); // Atualiza o ícone
     const tocToggleButtonIconNode = document.createElement("i");
    tocToggleButtonIconNode.setAttribute("class", "material-icons");
 
    const tocToggleButtonIconNodeContent =
      document.createTextNode("chevron_left");
    tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
 
    $tocToggleButton.html("");
    $tocToggleButton.append(tocToggleButtonIconNode);
 
     setCookie("showTOC", "false");
     setCookie("showTOC", "false");
   }
   }
}
}


// Funções para gerenciamento de cookies
function setCookie(cname, cvalue, exdays) {
function setCookie(cname, cvalue, exdays) {
   const d = new Date();
   const d = new Date();

Edição das 13h35min de 4 de novembro de 2024

/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */

/* Organize */
$(document).ready(function () {
  var tables = document.getElementsByClassName("organize");
  Array.prototype.forEach.call(tables, function (table) {
    var rows, switching, i, x, y, shouldSwitch;
    switching = true;
    /* Make a loop that will continue until
        no switching has been done: */
    while (switching) {
      // start by saying: no switching is done:
      switching = false;
      rows = table.rows;
      /* Loop through all table rows (except the
            first, which contains table headers): */
      for (i = 1; i < rows.length - 1; i++) {
        // start by saying there should be no switching:
        shouldSwitch = false;
        /* Get the two elements you want to compare,
                one from current row and one from the next: */
        x = rows[i].querySelector("h3>span.mw-headline");
        y = rows[i + 1].querySelector("h3>span.mw-headline");
        // check if the two rows should switch place:
        if (
          x.getAttribute("id").toLowerCase() >
          y.getAttribute("id").toLowerCase()
        ) {
          // if so, mark as a switch and break the loop:
          shouldSwitch = true;
          break;
        }
      }
      if (shouldSwitch) {
        /* If a switch has been marked, make the switch
                and mark that a switch has been done: */
        rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);

        var rowIdA = rows[i].querySelector(".mw-headline").getAttribute("id");
        var rowIdB = rows[i + 1]
          .querySelector(".mw-headline")
          .getAttribute("id");
        var floatTOCLinkA = document.querySelector(
          'a[href$="' + rowIdA + '"]'
        ).parentNode;
        var floatTOCLinkB = document.querySelector(
          'a[href$="' + rowIdB + '"]'
        ).parentNode;

        floatTOCLinkB.parentNode.insertBefore(floatTOCLinkA, floatTOCLinkB);

        rowIdA = null;
        rowIdB = null;
        floatTOCLinkA = null;
        floatTOCLinkB = null;

        switching = true;
      }
    }
  });
});

/* Runa TOC */
/* TOC */
$(document).ready(function () {
  var $window,
      $mwPanel,
      $floatTOC,
      scrollHandler,
      tocLimit,
      headingOffsets,
      headingThreshold,
      $toc = $("#toc");

  if (!$toc.length) {
    return;
  }

  $window = $(window);
  $mwPanel = $("#mw-panel");
  headingThreshold = $window.height() / 5.0;

  // Clonando o TOC original
  $floatTOC = $toc
    .clone()
    .removeAttr("id")
    .attr("id", "floatTOC")
    .addClass("floatTOC")
    .appendTo("body");

  $floatTOC.find("ul").show();

  // Criando o botão de alternância
  const tocToggleButton = document.createElement("button");
  tocToggleButton.setAttribute("id", "toctogglebutton");
  tocToggleButton.setAttribute("onclick", "toggleTOCVisibility()");

  const tocToggleButtonIconNode = document.createElement("i");
  tocToggleButtonIconNode.setAttribute("class", "material-icons");

  var tocToggleButtonIconNodeContent;

  if (getCookie("showTOC") == "false") {
    tocToggleButtonIconNodeContent = document.createTextNode("chevron_left");
    $floatTOC.addClass("hiddenFloatTOC");
  } else {
    tocToggleButtonIconNodeContent = document.createTextNode("chevron_right");
  }

  tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
  tocToggleButton.appendChild(tocToggleButtonIconNode);
  $floatTOC.prepend(tocToggleButton);

  // Rolagem suave ao clicar nos itens da TOC
  $floatTOC.find("a").click(function (e) {
    $("html, body").animate({
      scrollTop: $(this.hash.replace(/\./g, "\\.")).offset().top - headingThreshold,
    }, 500); // Adiciona animação suave
    return false;
  });

  tocLimit = $toc.offset().top + $toc.height();
  headingOffsets = [];

  $(".mw-headline").each(function () {
    headingOffsets.push([$(this).attr("id"), $(this).offset().top]);
  });

  scrollHandler = function () {
    var $current,
        scrollTop = $window.scrollTop();

    if (scrollTop > tocLimit) {
      $mwPanel.hide(); // Esconde o painel lateral

      var highlight = false;

      $.each(headingOffsets, function (i, v) {
        if (i !== 0 && scrollTop + headingThreshold < v[1]) {
          highlight = headingOffsets[i - 1][0];
          return false; // Sai do loop
        }
      });

      if (highlight) {
        // Limpar estilos anteriores
        $floatTOC.find("a").css({
          "font-weight": "",
          "text-decoration": "",
        }).find('.toc-arrow').remove(); // Remove setas anteriores

        // Destacar o item atual
        $current = $floatTOC.find('a[href="#' + $.escapeSelector(highlight) + '"]');
        $current.css({
          "font-weight": "bold",
          "text-decoration": "underline",
          "color": "#D9D2E9" // Cor do item em destaque
        });
        $current.prepend('<span class="toc-arrow" style="margin-right: 5px; color: #D9D2E9;">→</span>'); // Adiciona a seta à esquerda
      }
    } else {
      $mwPanel.show(); // Mostra o painel lateral novamente
    }
  };

  $window.on("scroll", scrollHandler);
});

// Função para alternar a visibilidade da TOC
function toggleTOCVisibility() {
  var $floatTOC = $("#floatTOC");
  var $tocToggleButton = $("#toctogglebutton");

  if ($floatTOC.hasClass("hiddenFloatTOC")) {
    $floatTOC.removeClass("hiddenFloatTOC");
    $tocToggleButton.html('<i class="material-icons">chevron_right</i>'); // Atualiza o ícone
    setCookie("showTOC", "true");
  } else {
    $floatTOC.addClass("hiddenFloatTOC");
    $tocToggleButton.html('<i class="material-icons">chevron_left</i>'); // Atualiza o ícone
    setCookie("showTOC", "false");
  }
}

// Funções para gerenciamento de cookies
function setCookie(cname, cvalue, exdays) {
  const d = new Date();
  d.setTime(d.getTime() + (exdays || 365) * 24 * 60 * 60 * 1000);
  const expires = "expires=" + d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(";");
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == " ") {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}