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
Sem resumo de edição
Linha 1: Linha 1:
/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */
/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */


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


                var rowIdA = rows[i].querySelector(".mw-headline").getAttribute("id");
        var rowIdA = rows[i].querySelector(".mw-headline").getAttribute("id");
                var rowIdB = rows[i + 1].querySelector(".mw-headline").getAttribute("id");
        var rowIdB = rows[i + 1]
          .querySelector(".mw-headline")
          .getAttribute("id");


                var floatTOCLinkA = document.querySelector('a[href$="' + rowIdA + '"]').parentNode;
        var floatTOCLinkA = document.querySelector(
                var floatTOCLinkB = document.querySelector('a[href$="' + rowIdB + '"]').parentNode;
          'a[href$="' + rowIdA + '"]'
        ).parentNode;
        var floatTOCLinkB = document.querySelector(
          'a[href$="' + rowIdB + '"]'
        ).parentNode;


                floatTOCLinkB.parentNode.insertBefore(floatTOCLinkA, floatTOCLinkB);
        floatTOCLinkB.parentNode.insertBefore(floatTOCLinkA, floatTOCLinkB);
               
                rowIdA = null;
                rowIdB = null;
                floatTOCLinkA = null;
                floatTOCLinkB = null;


                switching = true;
        rowIdA = null;
            }
        rowIdB = null;
        }
        floatTOCLinkA = null;
    });
        floatTOCLinkB = null;
 
        switching = true;
      }
    }
  });
});
});


Linha 88: Linha 97:
     tocToggleButtonIconNode.setAttribute("class", "material-icons");
     tocToggleButtonIconNode.setAttribute("class", "material-icons");


     const tocToggleButtonIconNodeContent = document.createTextNode("chevron_left");
     const tocToggleButtonIconNodeContent =
      document.createTextNode("chevron_left");


     tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
     tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
Linha 95: Linha 105:
     $floatTOC.prepend(tocToggleButton);
     $floatTOC.prepend(tocToggleButton);


     if(getCookie("showTOC") === false) {
     if (getCookie("showTOC") === false) {
        toggleTOCVisibility();
      toggleTOCVisibility();
     }
     }


Linha 145: Linha 155:
});
});


function toggleTOCVisibility(){
function toggleTOCVisibility() {
    var $floatTOC = $("#floatTOC");
  var $floatTOC = $("#floatTOC");
    var $tocToggleButton = $("#toctogglebutton");
  var $tocToggleButton = $("#toctogglebutton");


    if($floatTOC.hasClass("hiddenFloatTOC")) {
  if ($floatTOC.hasClass("hiddenFloatTOC")) {
        $floatTOC.removeClass("hiddenFloatTOC");
    $floatTOC.removeClass("hiddenFloatTOC");


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


        const tocToggleButtonIconNodeContent = document.createTextNode("chevron_left");
    const tocToggleButtonIconNodeContent =
        tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
      document.createTextNode("chevron_left");
    tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);


        $tocToggleButton.html("");
    $tocToggleButton.html("");
        $tocToggleButton.append(tocToggleButtonIconNode);
    $tocToggleButton.append(tocToggleButtonIconNode);


        setCookie("showTOC", true, 365);
    setCookie("showTOC", true);
    } else {
  } else {
        $floatTOC.addClass("hiddenFloatTOC");
    $floatTOC.addClass("hiddenFloatTOC");


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


        const tocToggleButtonIconNodeContent = document.createTextNode("chevron_right");
    const tocToggleButtonIconNodeContent =
        tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
      document.createTextNode("chevron_right");
    tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);


        $tocToggleButton.html("");
    $tocToggleButton.html("");
        $tocToggleButton.append(tocToggleButtonIconNode);
    $tocToggleButton.append(tocToggleButtonIconNode);


        setCookie("showTOC", false, 365);
    setCookie("showTOC", false);
    }
  }
}
}


function setCookie(cname, cvalue, exdays){
function setCookie(cname, cvalue, exdays) {
   const d = new Date();
   const d = new Date();
   d.setTime(d.getTime() + ((exdays || 365) * 24 * 60 * 60 * 1000));
   d.setTime(d.getTime() + (exdays || 365) * 24 * 60 * 60 * 1000);
   let expires = "expires="+d.toUTCString();
   let expires = "expires=" + d.toUTCString();
   document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
   document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
}


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

Edição das 13h08min de 22 de janeiro de 2023

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

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

mw.loader.using("jquery.throttle-debounce", function () {
  $(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;

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

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

    const tocToggleButton = document.createElement("button");
    tocToggleButton.setAttribute("id", "toctogglebutton");
    tocToggleButton.setAttribute("onclick", "toggleTOCVisibility()");

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

    const tocToggleButtonIconNodeContent =
      document.createTextNode("chevron_left");

    tocToggleButtonIconNode.appendChild(tocToggleButtonIconNodeContent);
    tocToggleButton.appendChild(tocToggleButtonIconNode);

    $floatTOC.prepend(tocToggleButton);

    if (getCookie("showTOC") === false) {
      toggleTOCVisibility();
    }

    $floatTOC.find("a").click(function (e) {
      $("html, body").animate({
        scrollTop:
          $(this.hash.replace(/\./g, "\\.")).offset().top - headingThreshold,
      });

      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();

        var highlight = false;

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

        if (highlight) {
          $current = $floatTOC.find('a[href="#' + highlight + '"]');
          $floatTOC.find("a").not($current).css("font-weight", "");
          $current.css("font-weight", "bold");
        }
      } else {
        $mwPanel.show();
      }
    };

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

function toggleTOCVisibility() {
  var $floatTOC = $("#floatTOC");
  var $tocToggleButton = $("#toctogglebutton");

  if ($floatTOC.hasClass("hiddenFloatTOC")) {
    $floatTOC.removeClass("hiddenFloatTOC");

    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", true);
  } else {
    $floatTOC.addClass("hiddenFloatTOC");

    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", false);
  }
}

function setCookie(cname, cvalue, exdays) {
  const d = new Date();
  d.setTime(d.getTime() + (exdays || 365) * 24 * 60 * 60 * 1000);
  let expires = "expires=" + d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

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