MediaWiki:Common.js
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: </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 addExpansionSidebarLinks() {
if (!document.querySelector('#expansionSidebarLinks')) {
var mwPanel = document.querySelector('#mw-panel');
var mwDiv = document.createElement('div');
mwDiv.className = 'portal';
mwDiv.id = 'expansionSidebarLinks';
var urlBase = '/index.php/';
mwDiv.innerHTML = '<h5><a href="'+urlBase+'Expansions">Expansions</a></h5><div class="body"><ul><li><a href="'+urlBase+'Dominion">Dominion</a></li><li><a href="'+urlBase+'Intrigue">Intrigue</a></li><li><a href="'+urlBase+'Seaside">Seaside</a></li><li><a href="'+urlBase+'Alchemy">Alchemy</a></li><li><a href="'+urlBase+'Prosperity">Prosperity</a></li><li><a href="'+urlBase+'Cornucopia & Guilds">Cornucopia & Guilds</a></li><li><a href="'+urlBase+'Hinterlands">Hinterlands</a></li><li><a href="'+urlBase+'Dark Ages">Dark Ages</a></li><li><a href="'+urlBase+'Adventures">Adventures</a></li><li><a href="'+urlBase+'Empires">Empires</a></li><li><a href="'+urlBase+'Nocturne">Nocturne</a></li><li><a href="'+urlBase+'Renaissance">Renaissance</a></li><li><a href="'+urlBase+'Menagerie (expansion)">Menagerie</a></li><li><a href="'+urlBase+'Allies">Allies</a></li><li><a href="'+urlBase+'Plunder (expansion)">Plunder</a></li><li><a href="'+urlBase+'Rising Sun">Rising Sun</a></li><li><a href="'+urlBase+'Promo">Promos</a></li></ul></div>';
mwPanel.insertBefore(mwDiv, null);
}
}
function initCommon() {
addSiteOption('cardbordersize', 'cardBorderChanger', changeBorder);
fixCardPopups();
addExpansionSidebarLinks();
}
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§ion=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);
})();