MediaWiki:Common.js: Difference between revisions

From Hidden Mickey Wiki

No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 91: Line 91:
});
});


$(document).ready(function() {
document.addEventListener("DOMContentLoaded", () => {
   $('.clickable-checkbox').each(function() {
   const checkboxes = document.querySelectorAll('input[type="checkbox"][id]');
    var $cb = $(this);
    var id = $cb.attr('id');
    if (!id) return;


    // Find timestamp span by id
  checkboxes.forEach((checkbox) => {
    var safeId = id.replace(/(:|\.|\[|\]|,|=|@)/g, "\\$1"); // escape for jQuery
     const tsBox = document.getElementById(checkbox.id + "-ts");
     var $ts = $('#' + safeId + '-ts');
    if (!$ts.length) return;


     // Restore saved state
     // Restore previous state from Local Storage
     try {
     const savedState = localStorage.getItem(checkbox.id);
      var saved = localStorage.getItem('checkbox-' + id);
    const savedTime = localStorage.getItem(checkbox.id + "-ts");
      if (saved) {
 
        var data = JSON.parse(saved);
    if (savedState === "true") {
        $cb.prop('checked', data.checked);
      checkbox.checked = true;
        if (data.timestamp) $ts.text(data.timestamp);
      tsBox.textContent = savedTime || getCurrentTime();
      }
     }
     } catch(e){}


     // Update timestamp & localStorage on change
     // Listen for checkbox changes
     $cb.on('change', function() {
     checkbox.addEventListener("change", () => {
       if ($cb.prop('checked')) {
       if (checkbox.checked) {
         var ts = new Date().toLocaleTimeString('en-US');
         const now = getCurrentTime();
         $ts.text(ts);
         tsBox.textContent = now;
         try {
         localStorage.setItem(checkbox.id, "true");
          localStorage.setItem('checkbox-' + id, JSON.stringify({
         localStorage.setItem(checkbox.id + "-ts", now);
            checked: true,
            timestamp: ts
          }));
         } catch(e){}
       } else {
       } else {
         $ts.text('');
         tsBox.textContent = "";
         try { localStorage.removeItem('checkbox-' + id); } catch(e){}
        localStorage.setItem(checkbox.id, "false");
         localStorage.removeItem(checkbox.id + "-ts");
       }
       }
     });
     });
   });
   });
  function getCurrentTime() {
    const now = new Date();
    const hh = String(now.getHours()).padStart(2, "0");
    const mm = String(now.getMinutes()).padStart(2, "0");
    const ss = String(now.getSeconds()).padStart(2, "0");
    return `${hh}:${mm}:${ss}`;
  }
});
});

Revision as of 07:55, 30 September 2025

/* Any JavaScript here will be loaded for all users on every page load. */
// JavaScript code to save checkbox state and restore it when the page loads
$(document).ready(function() {
    // Function to save the state of checkboxes to localStorage
    function saveCheckboxState() {
        $('input[type="checkbox"]').each(function() {
            localStorage.setItem($(this).attr('id'), $(this).prop('checked'));
        });
    }

    // Function to load the state of checkboxes from localStorage
    function loadCheckboxState() {
        $('input[type="checkbox"]').each(function() {
            const savedState = localStorage.getItem($(this).attr('id'));
            if (savedState !== null) {
                $(this).prop('checked', savedState === 'true');
            }
        });
    }

    // Load the saved checkbox state when the page is loaded
    loadCheckboxState();

    // Save the checkbox state whenever a checkbox is changed
    $('input[type="checkbox"]').change(function() {
        saveCheckboxState();
    });
});

// Adjust the search box width
$(document).ready(function () {
    $('#searchInput').css('width', '600px'); // Adjust width as needed
});

// Add Edit Source to user dropdown
mw.loader.using('mediawiki.util', function () {
    mw.util.addPortletLink( 'p-personal', mw.util.getUrl( mw.config.get('wgPageName'), { action: 'edit' } ), 'Edit Source', 'pt-editsource' );
    mw.util.addPortletLink( 'p-personal', mw.util.getUrl( mw.config.get('wgPageName'), { action: 'history' } ), 'View History', 'pt-history' );
    mw.util.addPortletLink( 'p-personal', mw.util.getUrl( mw.config.get('wgPageName'), { action: 'delete' } ), 'Delete', 'pt-delete' );
    var moveLink = document.getElementById('ca-move');
    if (moveLink) {
        var a = moveLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-move', a.title || 'Move this page' );
        moveLink.remove();
    }
    mw.util.addPortletLink( 'p-personal', mw.util.getUrl( mw.config.get('wgPageName'), { action: 'protect' } ), 'Protect', 'pt-protect' );
    mw.util.addPortletLink( 'p-personal', mw.util.getUrl( mw.config.get('wgPageName'), { action: 'unwatch' } ), 'Unwatch', 'pt-unwatch' );
    var talkLink = document.getElementById('pt-mytalk');
    talkLink.remove();
    var whatLinksHereLink = document.getElementById('t-whatlinkshere');
    if (whatLinksHereLink) {
        var a = whatLinksHereLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-whatlinkshere', a.title || 'What Links Here' );
        whatLinksHereLink.remove();
    }
    var relatedChangesLink = document.getElementById('t-recentchangeslinked');
    if (relatedChangesLink) {
        var a = relatedChangesLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-recentchanges', a.title || 'Recent Changes' );
        relatedChangesLink.remove();
    }
    var uploadLink = document.getElementById('t-upload');
    if (uploadLink) {
        var a = uploadLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-upload', a.title || 'Upload File' );
        uploadLink.remove();
    }
    var specialPagesLink = document.getElementById('t-specialpages');
    if (specialPagesLink) {
        var a = specialPagesLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-specialpages', a.title || 'Special Pages' );
        specialPagesLink.remove();
    }
    var permanentLink = document.getElementById('t-permalink');
    if (permanentLink) {
        var a = permanentLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-permalink', a.title || 'Permanent Link' );
        permanentLink.remove();
    }
    var pageInfoLink = document.getElementById('t-info');
    if (pageInfoLink) {
        var a = pageInfoLink.querySelector('a');
        mw.util.addPortletLink( 'p-personal', a.href, a.textContent.trim(), 'pt-info', a.title || 'Page Info' );
        pageInfoLink.remove();
    }
    var printLink = document.getElementById('t-print');
    if (printLink) {
        var a = printLink.querySelector('a');
        printLink.remove();
    }
});

document.addEventListener("DOMContentLoaded", () => {
  const checkboxes = document.querySelectorAll('input[type="checkbox"][id]');

  checkboxes.forEach((checkbox) => {
    const tsBox = document.getElementById(checkbox.id + "-ts");

    // Restore previous state from Local Storage
    const savedState = localStorage.getItem(checkbox.id);
    const savedTime = localStorage.getItem(checkbox.id + "-ts");

    if (savedState === "true") {
      checkbox.checked = true;
      tsBox.textContent = savedTime || getCurrentTime();
    }

    // Listen for checkbox changes
    checkbox.addEventListener("change", () => {
      if (checkbox.checked) {
        const now = getCurrentTime();
        tsBox.textContent = now;
        localStorage.setItem(checkbox.id, "true");
        localStorage.setItem(checkbox.id + "-ts", now);
      } else {
        tsBox.textContent = "";
        localStorage.setItem(checkbox.id, "false");
        localStorage.removeItem(checkbox.id + "-ts");
      }
    });
  });

  function getCurrentTime() {
    const now = new Date();
    const hh = String(now.getHours()).padStart(2, "0");
    const mm = String(now.getMinutes()).padStart(2, "0");
    const ss = String(now.getSeconds()).padStart(2, "0");
    return `${hh}:${mm}:${ss}`;
  }
});