Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

User:SunKeeper/common.js: Difference between revisions

From Sun Keeperverse Wiki
Creating single-user-only NavButton keyboard input test
 
removing user JS to test global JS for NavButton keyboard input system
Tag: Blanking
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* SK navigation – keyboard controls (WASD + arrows + Q/E for Up/Down) */


mw.loader.using('mediawiki.util', function () {
  'use strict';
  function isTypingTarget(el) {
    if (!el) return false;
    var tag = (el.tagName || '').toLowerCase();
    if (tag === 'input' || tag === 'textarea' || tag === 'select') return true;
    if (el.isContentEditable) return true;
    return false;
  }
  function getNavLink(selector) {
    var btn = document.querySelector(selector);
    if (!btn) return null;
    var a = btn.querySelector('a');
    return a || null;
  }
  function navigate(selector) {
    var link = getNavLink(selector);
    if (link && link.href) {
      window.location.href = link.href;
      return true;
    }
    return false;
  }
  document.addEventListener('keydown', function (e) {
    if (isTypingTarget(e.target)) return;
    var key = e.key;
    if (!key) return;
    if (key.length === 1) {
      key = key.toLowerCase();
    }
    var handled = false;
    switch (key) {
      case 'w':
      case 'ArrowUp':
        handled = navigate('.nav-link-north');
        break;
      case 's':
      case 'ArrowDown':
        handled = navigate('.nav-link-south');
        break;
      case 'a':
      case 'ArrowLeft':
        handled = navigate('.nav-link-west');
        break;
      case 'd':
      case 'ArrowRight':
        handled = navigate('.nav-link-east');
        break;
      case 'q':
      case 'PageUp':
        handled = navigate('.nav-link-up');
        break;
      case 'e':
      case 'PageDown':
        handled = navigate('.nav-link-down');
        break;
    }
    if (handled) {
      e.preventDefault();
    }
  });
});

Latest revision as of 23:04, 3 December 2025