MediaWiki:Common.js: Difference between revisions

From Official Gamemode 4 Wiki
Jump to navigation Jump to search
m (or not, maybe this will?)
(WHY IS THE JAVASCRIPT PARSER 6 YEARS OLD - in other news, I fixed it)
Line 2: Line 2:


// Even More fancy hovers for recipes
// Even More fancy hovers for recipes
$(function() {
$(function () {
   // Tooltip only Text
   // Tooltip only Text
   $('.masterTooltip').hover(function() {
   $('.masterTooltip').hover(
    function () {
       // Hide non-JS
       // Hide non-JS
       $(this).data('tipText', $(this).attr('title')).removeAttr('title');
       $(this).data('tipText', $(this).attr('title')).removeAttr('title');
Line 11: Line 12:
       var title = $(this).attr('data-title');
       var title = $(this).attr('data-title');
       var lore = $(this).attr('data-lore');
       var lore = $(this).attr('data-lore');
       var tooltip = '<p class="tooltip">' + parseFormatCodes(title)
       var tooltip = '<p class="tooltip">' + parseFormatCodes(title);
       if (lore) tooltip += '<br><span class="lore format-5">' + parseFormatCodes(lore) + '</span>'
       if (lore) tooltip += '<br><span class="lore format-5">' + parseFormatCodes(lore) + '</span>';
       tooltip += '</p>'
       tooltip += '</p>';
       $(tooltip).appendTo('body');
       $(tooltip).appendTo('body');
     },
     },
     function() {
     function () {
       // Hover out
       // Hover out
       $('.tooltip').remove();
       $('.tooltip').remove();
     }).mousemove(function(e) {
     }).mousemove(
    var mousex = e.pageX + 20; //Get X coordinates
      function (e) {
    var mousey = e.pageY - 40; //Get Y coordinates
        var mousex = e.pageX + 20; //Get X coordinates
    $('.tooltip').css({
        var mousey = e.pageY - 40; //Get Y coordinates
      top: mousey,
        $('.tooltip').css({
      left: mousex
          top: mousey,
    });
          left: mousex,
  });
        });
      });
   // Hide the stupid empty newlines after crafting grids
   // Hide the stupid empty newlines after crafting grids
   $('.crafting + p br:only-child').parent().hide();
   $('.crafting + p br:only-child').parent().hide();
Line 32: Line 34:


   //Code For books
   //Code For books
   $('.pageactive').each((_, page) => {
   $('.pageactive').each(function (_, page) {
     setupPage($(page));
     setupPage($(page));
   });
   });
   $('.book_leftarrow').click(function() {
   $('.book_leftarrow').click(function () {
     let active = $(this).siblings('.pageactive');
     setupPage($(this).siblings('.pageactive').removeClass('pageactive').prev());
    active.removeClass('pageactive');
    active = active.prev();
    setupPage(active);
   });
   });
   $('.book_rightarrow').click(function() {
   $('.book_rightarrow').click(function () {
     let active = $(this).siblings('.pageactive');
     setupPage($(this).siblings('.pageactive').removeClass('pageactive').next());
    active.removeClass('pageactive');
    active = active.next();
    setupPage(active);
   });
   });


});
});


function parseFormatCodes(text) {
function parseFormatCodes (text) {
   var spans = 0;
   var spans = 0;
   var res = ''
   var res = '';
   for (var i = 0; i < text.length; i++) {
   for (var i = 0; i < text.length; i++) {
     if ((text[i] == '&') && /[0-9a-fl-or]/.test(text[i + 1])) continue;
     if ((text[i] == '&') && /[0-9a-fl-or]/.test(text[i + 1])) continue;
Line 64: Line 57:
     else if ((text[i - 1] == '&') && /[0-9a-fl-or]/.test(text[i])) {
     else if ((text[i - 1] == '&') && /[0-9a-fl-or]/.test(text[i])) {
       if (text[i] == 'r') {
       if (text[i] == 'r') {
         res += "</span>".repeat(spans);
         res += '</span>'.repeat(spans);
         spans = 0;
         spans = 0;
       } else {
       } else {
Line 72: Line 65:
     } else res += text[i];
     } else res += text[i];
   }
   }
   return res + "</span>".repeat(spans);
   return res + '</span>'.repeat(spans);
}
}


function setupPage(active) {
function setupPage (active) {
   active.addClass('pageactive');
   active.addClass('pageactive');
   let index = active.index();
   var index = active.index();
   let length = (active.siblings().length - 2);
   var length = active.siblings().length - 2;
   active.siblings('.book_pagenum').text('Page ' + index + ' of ' + length);
   active.siblings('.book_pagenum').text('Page ' + index + ' of ' + length);
   active.siblings('.book_leftarrow, .book_rightarrow').show();
   active.siblings('.book_leftarrow, .book_rightarrow').show();

Revision as of 18:13, 15 February 2021

/* Any JavaScript here will be loaded for all users on every page load. */

// Even More fancy hovers for recipes
$(function () {
  // Tooltip only Text
  $('.masterTooltip').hover(
    function () {
      // Hide non-JS
      $(this).data('tipText', $(this).attr('title')).removeAttr('title');

      //Custom Tooltip
      var title = $(this).attr('data-title');
      var lore = $(this).attr('data-lore');
      var tooltip = '<p class="tooltip">' + parseFormatCodes(title);
      if (lore) tooltip += '<br><span class="lore format-5">' + parseFormatCodes(lore) + '</span>';
      tooltip += '</p>';
      $(tooltip).appendTo('body');
    },
    function () {
      // Hover out
      $('.tooltip').remove();
    }).mousemove(
      function (e) {
        var mousex = e.pageX + 20; //Get X coordinates
        var mousey = e.pageY - 40; //Get Y coordinates
        $('.tooltip').css({
          top: mousey,
          left: mousex,
        });
      });
  // Hide the stupid empty newlines after crafting grids
  $('.crafting + p br:only-child').parent().hide();


  //Code For books
  $('.pageactive').each(function (_, page) {
    setupPage($(page));
  });
  $('.book_leftarrow').click(function () {
    setupPage($(this).siblings('.pageactive').removeClass('pageactive').prev());
  });
  $('.book_rightarrow').click(function () {
    setupPage($(this).siblings('.pageactive').removeClass('pageactive').next());
  });

});

function parseFormatCodes (text) {
  var spans = 0;
  var res = '';
  for (var i = 0; i < text.length; i++) {
    if ((text[i] == '&') && /[0-9a-fl-or]/.test(text[i + 1])) continue;
    else if (text[i] == '/') {
      res += '<br>';
      continue;
    }
    else if ((text[i - 1] == '&') && /[0-9a-fl-or]/.test(text[i])) {
      if (text[i] == 'r') {
        res += '</span>'.repeat(spans);
        spans = 0;
      } else {
        res += '<span class="format-' + text[i] + '">';
        spans++;
      }
    } else res += text[i];
  }
  return res + '</span>'.repeat(spans);
}

function setupPage (active) {
  active.addClass('pageactive');
  var index = active.index();
  var length = active.siblings().length - 2;
  active.siblings('.book_pagenum').text('Page ' + index + ' of ' + length);
  active.siblings('.book_leftarrow, .book_rightarrow').show();
  if (index == 1) {
    active.siblings('.book_leftarrow').hide();
  }
  if (index == length) {
    active.siblings('.book_rightarrow').hide();
  }
}