MediaWiki:Common.js

From DominionStrategy Wiki
Revision as of 20:06, 8 September 2024 by Wikiwikiwiki (talk | contribs)
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */

(function() {

function getCookie(cname) {
  var name = cname + '=';
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.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 '';
}

function changeBorder() {
  var optionInput = document.querySelector('#cardBorderChanger');
  var curVal = 0;
  if (optionInput.checked) {
    curVal = 11;
  }
  var CookieDate = new Date();
  CookieDate.setFullYear(CookieDate.getFullYear() + 1);
  document.cookie = 'cardbordersize=' + curVal + '; expires=' + CookieDate.toUTCString() + ';';
  setBlackBorder(curVal);
}

function setBlackBorder(bSize) {
  var elems = document.querySelectorAll('img');
  for (var i = 0; i < elems.length; i++) {
    var elem = elems[i];
    var newSize = 0;
    switch (elem.offsetWidth) {
      case 75:
        newSize = 4;
        break;
      case 100:
        newSize = 5;
        break;
      case 120:
        newSize = 6;
        break;
      case 150:
        newSize = 8;
        break;
      case 160:
        newSize = 9;
        break;
      case 200:
        newSize = 11;
        break;
      case 320:
        newSize = 11;
        break;
      case 375:
        newSize = 21;
        break;
      case 800:
        newSize = 21;
        break;
    }
    if (newSize > 0) {
      if (bSize == 0) {
        newSize = 0;
      }
      if (elem.parentElement.className != 'cardborderchanger') {
        elem.outerHTML = '<span class="cardborderchanger" style="display:inline-block; padding:' + newSize + 'px; border-radius:' + (newSize - 1) + 'px; background:black;">' + elem.outerHTML + '</span>';
      } else if (elem.parentElement.className == 'cardborderchanger') {
        elem.parentElement.style.padding = newSize + 'px';
        elem.parentElement.style.borderRadius = (newSize - 1) + 'px';
      }
    }
  }
}

function initBlackBorder(e) {
  var elem = e.target.parentElement.parentElement.querySelector('img');
  var curVal = getCookie('cardbordersize');
  if (curVal > 0) {
    var newSize = 0;
    switch (elem.offsetWidth) {
      case 75:
        newSize = 4;
        break;
      case 100:
        newSize = 5;
        break;
      case 120:
        newSize = 6;
        break;
      case 150:
        newSize = 8;
        break;
      case 160:
        newSize = 9;
        break;
      case 200:
        newSize = 11;
        break;
      case 320:
        newSize = 11;
        break;
      case 375:
        newSize = 21;
        break;
      case 800:
        newSize = 21;
        break;
    }
    if (newSize > 0) {
      if (elem.parentElement.className != 'cardborderchanger') {
        elem.outerHTML = '<span class="cardborderchanger" style="display:inline-block; padding:' + newSize + 'px; border-radius:' + (newSize - 1) + 'px; background:black;">' + elem.outerHTML + '</span>';
      } else if (elem.parentElement.className == 'cardborderchanger') {
        elem.parentElement.style.padding = newSize + 'px';
        elem.parentElement.style.borderRadius = (newSize - 1) + 'px';
      }
    }
  }
}

function addSiteOption(optionCookie, optionId, optionFunc) {
  if (!document.querySelector('#' + optionId)) {
    var curVal = getCookie(optionCookie);
    var checked = '';
    if (curVal == '') {
      curVal = 0;
    } else if (curVal > 0) {
      checked = 'checked';
      setBlackBorder(curVal);
    }
    var pNavigationUl = document.querySelector('#p-navigation ul');
    var optionLi = document.createElement('li');
    optionLi.innerHTML = '<label for="'+ optionId +'" style="cursor:pointer; user-select:none">Card Border:&nbsp;</label><input style="height:8px" type="checkbox" id="'+ optionId +'" '+ checked +'>';
    pNavigationUl.insertBefore(optionLi, null);
    var optionInput = document.querySelector('#' + optionId);
    optionInput.addEventListener('change', optionFunc);
  }
}

function fixCardPopup(e) {
  var elem;
  if (e.target) {
    elem = e.target.parentElement.nextElementSibling;
  } else {
    elem = e;
  }
  if (elem.getBoundingClientRect().x > window.innerWidth / 2) {
    elem.style.left = '-' + (elem.offsetWidth - elem.previousElementSibling.offsetWidth + 20) + 'px';
  }
}

function fixCardPopups() {
  var elems = document.querySelectorAll('.card-popup > a');
  for (var i = 0; i < elems.length; i++) {
    elems[i].title = '';
    elems[i].addEventListener('mouseover', fixCardPopup);
    elems[i].addEventListener('mouseover', initBlackBorder);
  }
  var elems = document.querySelectorAll('.card-popup > span > img');
  for (var i = 0; i < elems.length; i++) {
    fixCardPopup(elems[i].parentElement);
  }
}

function initCommon() {
  addSiteOption('cardbordersize', 'cardBorderChanger', changeBorder);
  fixCardPopups();
}

window.addEventListener('readystatechange', function() {
  initCommon();
});

window.addEventListener('DOMContentLoaded', function() {
  initCommon();
});

window.addEventListener('load', function() {
  initCommon();
});

//initCommon();

function add_portlet_links() {
  var PortletLinks = {
    /*
        PortletLinks[ string linkID ] = Array(
            boolean left,     // true if added on the left-side, false if right
            string label,
            string tooltip,
            string href,
            string accesskey,
            integer position  // insert position, counting from left
        )
    */
    "ca-new-section": [false, "New Section", "Add a new section", "?action=edit&section=new", "+", 3]
  }
  /*
      Add a portlet link to page
      PARAMS
          regexp/string page: RegExp or exact match string of page titles to add portlet link
          string id         : linkID of the added portlet link
  */
  function add(page, id) {
    if (typeof page == "string") {
      if (wgPageName != page) {
        return false;
      }
    } else if (!page.test(wgPageName)) {
      return false;
    }
    var link = PortletLinks[id];
    if (!link) {
      return false;
    }
    var vector = link[0] ? 'p-namespaces' : 'p-views';
    return mw.util.addPortletLink(vector, link[3], link[1], id, link[2], link[4], $('#' + vector + ' li')[link[5] - 1]);
  }
  add('DominionStrategy_Wiki:Council_Room', 'ca-new-section');
}

$(document).ready(add_portlet_links);

})();