|
|
| (22 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| (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();
| |
| });
| |
| });
| |
| })();
| |