MediaWiki:Common.js
From Descendants of Darkness Wiki
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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
(function () {
var sidebarId = 'mw-navigation';
// Save the sidebar scroll position to URL parameter
function saveSidebarScrollPosition() {
var scrollPosition = document.getElementById(sidebarId).scrollTop;
var newUrl = updateUrlParameter(window.location.href, 'sidebarScroll', scrollPosition);
window.history.replaceState(null, '', newUrl);
}
// Restore the sidebar scroll position from URL parameter
function restoreSidebarScrollPosition() {
var scrollPosition = getUrlParameter('sidebarScroll');
if (scrollPosition !== null) {
document.getElementById(sidebarId).scrollTop = parseInt(scrollPosition);
}
}
// Update URL parameter
function updateUrlParameter(uri, key, value) {
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
} else {
return uri + separator + key + "=" + value;
}
}
// Get URL parameter
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? null : decodeURIComponent(results[1].replace(/\+/g, ' '));
}
// Save the sidebar scroll position before navigating away
window.addEventListener('beforeunload', saveSidebarScrollPosition);
// Restore the sidebar scroll position on page load
window.addEventListener('DOMContentLoaded', restoreSidebarScrollPosition);
// Save the sidebar scroll position when clicking on sidebar links
document.querySelectorAll('#' + sidebarId + ' a').forEach(function (link) {
link.addEventListener('click', function (event) {
saveSidebarScrollPosition();
});
});
})();