MediaWiki:Common.js: Difference between revisions
MediaWiki interface page
More actions
Jonatanktk (talk | contribs) No edit summary |
Jonatanktk (talk | contribs) No edit summary |
||
| Line 8: | Line 8: | ||
// Tooltip erstellen | // Tooltip erstellen | ||
const tooltip = document.createElement('div'); | const tooltip = document.createElement('div'); | ||
tooltip.id = 'mw- | tooltip.id = 'mw-global-tooltip'; | ||
Object.assign(tooltip.style, { | Object.assign(tooltip.style, { | ||
position: 'fixed', | position: 'fixed', | ||
zIndex: | zIndex: 999999, | ||
background: 'rgba( | background: 'rgba(0,0,0,0.85)', | ||
color: '#fff', | color: '#fff', | ||
padding: ' | padding: '5px 10px', | ||
borderRadius: ' | borderRadius: '5px', | ||
fontSize: ' | fontSize: '12px', | ||
pointerEvents: 'none', // Wichtig: blockiert keine Klicks | |||
pointerEvents: 'none', | |||
opacity: '0', | opacity: '0', | ||
transition: 'opacity 0.15s | transition: 'opacity 0.15s, transform 0.1s', | ||
transform: 'translateY(4px)', | transform: 'translateY(4px)', | ||
whiteSpace: 'nowrap' | |||
}); | }); | ||
document.body.appendChild(tooltip); | document.body.appendChild(tooltip); | ||
let activeEl = null; | let activeEl = null; | ||
let storedTitle = null; | |||
// Tooltip anzeigen | |||
const | function showTooltip(e) { | ||
if (! | const el = e.target.closest('[title]'); | ||
if (!el) return; | |||
activeEl = | activeEl = el; | ||
storedTitle = el.getAttribute('title'); | |||
if (!storedTitle) return; | |||
el.removeAttribute('title'); // Native verhindern | |||
tooltip.textContent = storedTitle; | |||
tooltip.style.opacity = '1'; | tooltip.style.opacity = '1'; | ||
tooltip.style.transform = 'translateY(0)'; | tooltip.style.transform = 'translateY(0)'; | ||
// Tooltip | moveTooltip(e); | ||
el.addEventListener('mousemove', moveTooltip); | |||
el.addEventListener('mouseleave', hideTooltip, { once: true }); | |||
} | |||
// Tooltip bewegen | |||
function moveTooltip(e) { | |||
if (!activeEl) return; | |||
const offset = 12; | |||
const rect = tooltip.getBoundingClientRect(); | |||
let x = e.clientX + offset; | |||
let y = e.clientY + offset; | |||
const maxX = window.innerWidth - rect.width - 10; | |||
const maxY = window.innerHeight - rect.height - 10; | |||
tooltip.style.left = Math.min(x, maxX) + 'px'; | |||
tooltip.style.top = Math.min(y, maxY) + 'px'; | |||
} | |||
// Tooltip ausblenden | |||
function hideTooltip() { | |||
if (!activeEl) return; | |||
tooltip.style.opacity = '0'; | |||
tooltip.style.transform = 'translateY(4px)'; | |||
activeEl.setAttribute('title', storedTitle); // original wiederherstellen | |||
activeEl.removeEventListener('mousemove', moveTooltip); | |||
activeEl = null; | |||
storedTitle = null; | |||
} | |||
// Globales Event | |||
document.addEventListener('mouseover', showTooltip); | |||
})(); | })(); | ||
Revision as of 23:46, 1 November 2025
/* Any JavaScript here will be loaded for all users on every page load. */
/* Schönes Tooltip-System auf Basis von alt-Attributen
Funktioniert sicher mit Citizen & MediaWiki UI */
(function() {
'use strict';
// Tooltip erstellen
const tooltip = document.createElement('div');
tooltip.id = 'mw-global-tooltip';
Object.assign(tooltip.style, {
position: 'fixed',
zIndex: 999999,
background: 'rgba(0,0,0,0.85)',
color: '#fff',
padding: '5px 10px',
borderRadius: '5px',
fontSize: '12px',
pointerEvents: 'none', // Wichtig: blockiert keine Klicks
opacity: '0',
transition: 'opacity 0.15s, transform 0.1s',
transform: 'translateY(4px)',
whiteSpace: 'nowrap'
});
document.body.appendChild(tooltip);
let activeEl = null;
let storedTitle = null;
// Tooltip anzeigen
function showTooltip(e) {
const el = e.target.closest('[title]');
if (!el) return;
activeEl = el;
storedTitle = el.getAttribute('title');
if (!storedTitle) return;
el.removeAttribute('title'); // Native verhindern
tooltip.textContent = storedTitle;
tooltip.style.opacity = '1';
tooltip.style.transform = 'translateY(0)';
moveTooltip(e);
el.addEventListener('mousemove', moveTooltip);
el.addEventListener('mouseleave', hideTooltip, { once: true });
}
// Tooltip bewegen
function moveTooltip(e) {
if (!activeEl) return;
const offset = 12;
const rect = tooltip.getBoundingClientRect();
let x = e.clientX + offset;
let y = e.clientY + offset;
const maxX = window.innerWidth - rect.width - 10;
const maxY = window.innerHeight - rect.height - 10;
tooltip.style.left = Math.min(x, maxX) + 'px';
tooltip.style.top = Math.min(y, maxY) + 'px';
}
// Tooltip ausblenden
function hideTooltip() {
if (!activeEl) return;
tooltip.style.opacity = '0';
tooltip.style.transform = 'translateY(4px)';
activeEl.setAttribute('title', storedTitle); // original wiederherstellen
activeEl.removeEventListener('mousemove', moveTooltip);
activeEl = null;
storedTitle = null;
}
// Globales Event
document.addEventListener('mouseover', showTooltip);
})();