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

Join the Playtest on Steam Now: SpiritVale

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
No edit summary
Tags: Mobile edit Mobile web edit
No edit summary
Tags: Mobile edit Mobile web edit
Line 17: Line 17:


   // Versioned init guard (allows safe updates without stale blocks)
   // Versioned init guard (allows safe updates without stale blocks)
   var LEVELS_VERSION = 3; // bumped: min-level correctness + value label + rAF drag
   var LEVELS_VERSION = 4; // bumped: mouse-only slider + tick/label polish
 
   if (typeof COMMON.levelsInit === "number" && COMMON.levelsInit >= LEVELS_VERSION) return;
   if (typeof COMMON.levelsInit === "number" && COMMON.levelsInit >= LEVELS_VERSION) return;
   COMMON.levelsInit = LEVELS_VERSION;
   COMMON.levelsInit = LEVELS_VERSION;
Line 575: Line 576:
   document.addEventListener("pointercancel", endDrag, true);
   document.addEventListener("pointercancel", endDrag, true);


   // Keyboard support for custom slider
   // Mouse-only slider interaction:
  // - Remove keyboard-driven adjustments on custom sliders
  // - Block native <input type="range"> from changing via keyboard (if present)
  var _SV_BLOCK_KEYS = {
    ArrowLeft: 1, ArrowRight: 1, ArrowUp: 1, ArrowDown: 1,
    Left: 1, Right: 1, Up: 1, Down: 1,
    Home: 1, End: 1, PageUp: 1, PageDown: 1
  };
 
   document.addEventListener(
   document.addEventListener(
     "keydown",
     "keydown",
     function (e) {
     function (e) {
      var key = e && e.key;
      if (!_SV_BLOCK_KEYS[key]) return;
       var el = document.activeElement;
       var el = document.activeElement;
       if (!el || !el.closest) return;
       if (!el) return;


       var slider = el.closest(".sv-level-range--custom, .sv-level-range[data-sv-slider='1']");
       // Native range inputs (keep mouse drag, disable keyboard nudges)
      if (!slider) return;
      if (isRangeInput(el) && el.classList && el.classList.contains("sv-level-range")) {
        e.preventDefault();
        return;
      }


       var card = closest(slider, CARD_SEL);
       // Custom sliders (we keep focus behaviors, but no keyboard changes)
      if (!card) return;
       var slider = closest(el, ".sv-level-range--custom, .sv-level-range[data-sv-slider='1']");
 
       if (slider) {
      var maxLevel = getCardMaxLevel(card);
         e.preventDefault();
      var minLevel = getCardMinLevel(card, slider, maxLevel);
       var step = getStep(slider);
 
      var cur = getCustomValue(slider, minLevel, maxLevel, getCardLevel(card, minLevel, maxLevel));
      var next = cur;
 
      // Shift+Arrow: faster adjustments
      var arrowStep = step;
      if (e.shiftKey) arrowStep = step * 5;
 
      if (e.key === "ArrowLeft" || e.key === "Left" || e.key === "ArrowDown") {
        next = cur - arrowStep;
      } else if (e.key === "ArrowRight" || e.key === "Right" || e.key === "ArrowUp") {
        next = cur + arrowStep;
       } else if (e.key === "Home") {
         next = minLevel;
      } else if (e.key === "End") {
        next = maxLevel;
      } else if (e.key === "PageDown") {
        next = cur - step * 5;
      } else if (e.key === "PageUp") {
        next = cur + step * 5;
      } else {
         return;
         return;
       }
       }
      e.preventDefault();
      next = clampInt(next, minLevel, maxLevel, cur);
      showValueLabel(slider);
      scheduleApply(card, next);
      hideValueLabelSoon(slider, 900);
     },
     },
     true
     true