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

De Runarcana Wiki
Revisão de 21h07min de 18 de janeiro de 2023 por Bernola (discussão | contribs)

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)
  • Internet Explorer/Edge: PressioneCtrl enquanto clica Recarregar, ou Pressione Ctrl-F5
  • Opera: Pressione Ctrl-F5.
/* 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].getElementsByTagName("TD")[0];
                y = rows[i + 1].getElementsByTagName("TD")[0];
                // check if the two rows should switch place:
                if (x.innerHTML.toLowerCase() > y.innerHTML.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 = $('a[href$="' + rowIdA + '"]').parent();
                var $floatTOCLinkB = $('a[href$="' + rowIdB + '"]').parent();

                console.log($floatTOCLinkA.html());

                $floatTOCLinkB.before($floatTOCLinkA);
                
                $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")
      .css({ visibility: "hidden", opacity: 0 });

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

    /*
    $floatTOC.find("#toctogglecheckbox")
      .removeAttr("id")
      .attr("id", "floattoctogglecheckbox");

    $floatTOC.find(".toctogglelabel")
      .removeAttr("for")
      .attr("for", "floattoctogglecheckbox");
    */

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

    $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) {
        $floatTOC.css({ visibility: "visible", opacity: 1 });

        $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 {
        $floatTOC.css({ visibility: "hidden", opacity: 0 });

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