MediaWiki:Common.js: Difference between revisions
MediaWiki interface page
More actions
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 = | var LEVELS_VERSION = 6; // neutral hooks + bubble styling owned by CSS + no tick/check row | ||
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; | ||
var CARD_SEL = ".sv-gi-card, .sv-skill-card, .sv-passive-card"; | // Prefer neutral shared hooks; keep legacy class fallbacks for compatibility. | ||
var CARD_SEL = | |||
"[data-sv-card='1'], .sv-gi-card, .sv-skill-card, .sv-passive-card"; | |||
// Accept the native range input and the custom slider variants. | // Accept the native range input and the custom slider variants. | ||
| Line 28: | Line 30: | ||
"input.sv-level-range[type='range'], .sv-level-range--custom, .sv-level-range[data-sv-slider='1']"; | "input.sv-level-range[type='range'], .sv-level-range--custom, .sv-level-range[data-sv-slider='1']"; | ||
var LEVEL_BOUNDARY_SEL = ".sv-skill-level, .sv-gi-level"; | var LEVEL_BOUNDARY_SEL = | ||
var LEVEL_SCOPE_SEL = ".sv-gi-bottom, .sv-skill-bottom"; | "[data-sv-level-boundary='1'], .sv-skill-level, .sv-gi-level"; | ||
var LEVEL_SCOPE_SEL = | |||
"[data-sv-level-scope='1'], .sv-gi-bottom, .sv-skill-bottom"; | |||
var SERIES_SEL = "[data-series]"; | var SERIES_SEL = "[data-series]"; | ||
var LEVEL_INIT_ATTR = "data- | var LEVEL_INIT_ATTR = "data-sv-level-init"; | ||
var _seriesCache = typeof WeakMap !== "undefined" ? new WeakMap() : null; | var _seriesCache = typeof WeakMap !== "undefined" ? new WeakMap() : null; | ||
| Line 117: | Line 123: | ||
function getCardMinLevel(card, slider, maxLevel) { | function getCardMinLevel(card, slider, maxLevel) { | ||
// Prefer explicit | // Prefer explicit neutral hooks, then legacy attrs, then slider attrs. | ||
var raw = | var raw = | ||
card.getAttribute("data-min-level") || | card.getAttribute("data-min-level") || | ||
| Line 126: | Line 132: | ||
if (slider) { | if (slider) { | ||
if (isRangeInput(slider)) raw = slider.getAttribute("min"); | if (isRangeInput(slider)) raw = slider.getAttribute("min"); | ||
else if (isCustomSlider(slider)) raw = slider.getAttribute("aria-valuemin") || slider.getAttribute("data-min"); | else if (isCustomSlider(slider)) | ||
raw = slider.getAttribute("aria-valuemin") || slider.getAttribute("data-min"); | |||
} | } | ||
} | } | ||
| Line 272: | Line 279: | ||
/* ================================================================== */ | /* ================================================================== */ | ||
/* Custom slider value bubble | /* Custom slider value bubble */ | ||
/* - JS owns structure + text/position only */ | |||
/* - CSS owns visuals */ | |||
/* ================================================================== */ | /* ================================================================== */ | ||
| Line 285: | Line 294: | ||
bubble.setAttribute("hidden", "hidden"); | bubble.setAttribute("hidden", "hidden"); | ||
bubble.setAttribute("aria-hidden", "true"); | bubble.setAttribute("aria-hidden", "true"); | ||
slider.appendChild(bubble); | slider.appendChild(bubble); | ||
| Line 384: | Line 382: | ||
/* ================================================================== */ | /* ================================================================== */ | ||
/* | /* End-of-bar value label (right-side value) */ | ||
/* ================================================================== */ | /* ================================================================== */ | ||
| Line 406: | Line 404: | ||
var out = ensureEndValueLabel(card, slider); | var out = ensureEndValueLabel(card, slider); | ||
if (out) out.textContent = String(value); | if (out) out.textContent = String(value); | ||
} | } | ||
| Line 494: | Line 416: | ||
if (card._svLevelRaf) return; | if (card._svLevelRaf) return; | ||
if (window.requestAnimationFrame) { | |||
card._svLevelRaf = requestAnimationFrame(function () { | |||
card._svLevelRaf = null; | |||
var v = card._svLevelNext; | |||
card._svLevelNext = null; | |||
applyLevelToCard(card, v); | |||
}); | |||
return; | |||
} | |||
card._svLevelRaf = setTimeout(function () { | |||
card._svLevelRaf = null; | |||
var v = card._svLevelNext; | |||
card._svLevelNext = null; | |||
applyLevelToCard(card, v); | |||
}, 0); | |||
} | } | ||
| Line 541: | Line 466: | ||
} | } | ||
setEndValueLabel(card, slider, level); | setEndValueLabel(card, slider, level); | ||
var boundary = getLevelBoundary(slider); | var boundary = getLevelBoundary(slider); | ||
var scope = getLevelScopeContainer(card, boundary); | var scope = getLevelScopeContainer(card, boundary); | ||
applySeriesToScope(scope, boundary, level); | applySeriesToScope(scope, boundary, level); | ||
| Line 623: | Line 545: | ||
} | } | ||
showValueLabel(slider); | showValueLabel(slider); | ||
scheduleApply(card, valueFromClientX(slider, e.clientX)); | scheduleApply(card, valueFromClientX(slider, e.clientX)); | ||
}, | }, | ||
| Line 654: | Line 574: | ||
} | } | ||
hideValueLabelSoon(_drag.slider, 650); | hideValueLabelSoon(_drag.slider, 650); | ||
_drag = null; | _drag = null; | ||
} | } | ||
| Line 678: | Line 596: | ||
End: 1, | End: 1, | ||
PageUp: 1, | PageUp: 1, | ||
PageDown: 1 | PageDown: 1 | ||
}; | }; | ||
| Line 1,067: | Line 985: | ||
var vh = window.innerHeight || document.documentElement.clientHeight || 0; | var vh = window.innerHeight || document.documentElement.clientHeight || 0; | ||
var tight = vw <= 520; | var tight = vw <= 520; | ||
var margin = tight ? 18 : 10; | var margin = tight ? 18 : 10; | ||