MediaWiki:Gadget-Tooltip.js: Difference between revisions

From Honkai: Nexus Anima Wiki
Jump to navigation Jump to search
Kuhlau (talk | contribs)
No edit summary
Kuhlau (talk | contribs)
No edit summary
Line 4: Line 4:
});
});


// Auto-positioning of floating tooltips, mainly for [[T:tt]]
// Auto-positioning of floating tooltips, on desktop/hoverable only (maybe need to refine by skin so that it matches the css?)
mw.loader.using('oojs-ui-widgets').then(() => { // make sure the PopupWidget library is loaded
if (window.matchMedia('(hover: hover)').matches) {
mw.hook('wikipage.content').add((contents)=>{ // hydrate any content inserted
mw.loader.using('oojs-ui-widgets').then(() => { // make sure the PopupWidget library is loaded
if (contents instanceof Element || contents instanceof NodeList) {contents = $(contents);}
const supportsHover = window.matchMedia('(hover: hover)').matches;
if (!contents || !(contents instanceof jQuery) || contents.length===0) {return;}
contents
mw.hook('wikipage.content').add((contents)=>{ // hydrate any content inserted
.find('.custom-tt-wrapper.mw-collapsible')
if (contents instanceof Element || contents instanceof NodeList) {contents = $(contents);}
.each((_, wrapper) => {
if (!contents || !(contents instanceof jQuery) || contents.length===0) {return;}
const
contents
$wrapper = $(wrapper),
.find('.custom-tt-wrapper.mw-collapsible')
// isEE = $wrapper.hasClass('hnaw-extra-effect-wrapper'), // If we ever need something similar to GIW's Extra Effect template
.each((_, wrapper) => {
$toggle = $('<span>', {
const
'class': 'custom-tt toggle-tooltip',//+(isEE ? ' hnaw-extra-effect' : ''),
$wrapper = $(wrapper),
html: $wrapper.find('.mw-collapsible-toggle').html()
// isEE = $wrapper.hasClass('hnaw-extra-effect-wrapper'), // If we ever need something similar to GIW's Extra Effect template
}),
$toggle = $('<span>', {
$content = $wrapper.find('.mw-collapsible-content'),
'class': 'custom-tt toggle-tooltip',//+(isEE ? ' hnaw-extra-effect' : ''),
popup = new OO.ui.PopupWidget({
html: $wrapper.find('.mw-collapsible-toggle').html()
$content: $('<div>', { html: $content.html() }),
}),
$container: $('.mw-parser-output'),
$content = $wrapper.find('.mw-collapsible-content'),
anchor: true, // !isEE
popup = new OO.ui.PopupWidget({
});
$content: $('<div>', { html: $content.html() }),
$container: $('.mw-parser-output'),
// Remove default collapsible
anchor: true, // !isEE
$wrapper.toggleClass(['mw-collapsible', 'mw-made-collapsible', 'mw-collapsed'], false);
});
$wrapper.find('.mw-collapsible-toggle').replaceWith($toggle);
$content.remove();
// Remove default collapsible
$wrapper.toggleClass(['mw-collapsible', 'mw-made-collapsible', 'mw-collapsed'], false);
// [[T:Tt]]'s toggle effect
$wrapper.find('.mw-collapsible-toggle').replaceWith($toggle);
$wrapper.append(popup.$element);
$content.remove();
$toggle.on('click', ()=> { popup.toggle() });
// [[T:Tt]]'s toggle effect
// T:Extra Effect's hover effect
$wrapper.append(popup.$element);
/* if (isEE) {
popup.$element.find('.oo-ui-popupWidget-popup').toggleClass('hnaw-extra-effect', true);
// T:Extra Effect's hover effect
let time;
let time;
$toggle.add(popup.$element).on('mouseover mouseout', (e) => {
$toggle.add(popup.$element).on('mouseover mouseout', (e) => {
Line 45: Line 45:
}, e.type==='mouseout' ? 250 : 0);
}, e.type==='mouseout' ? 250 : 0);
});
});
}*/
});
});
});
});
});
});
}

Revision as of 18:46, 15 July 2026

mw.hook('wikipage.content').add(() => {
	// add class to body as hook for any further styling or detection
	document.body.classList.add('gadget-toggle-tooltip');
});

// Auto-positioning of floating tooltips, on desktop/hoverable only (maybe need to refine by skin so that it matches the css?)
if (window.matchMedia('(hover: hover)').matches) {
	mw.loader.using('oojs-ui-widgets').then(() => { // make sure the PopupWidget library is loaded
		const supportsHover = window.matchMedia('(hover: hover)').matches;
		
		mw.hook('wikipage.content').add((contents)=>{ // hydrate any content inserted
			if (contents instanceof Element || contents instanceof NodeList) {contents = $(contents);}
			if (!contents || !(contents instanceof jQuery) || contents.length===0) {return;}
			contents
			.find('.custom-tt-wrapper.mw-collapsible')
			.each((_, wrapper) => {
				const
				$wrapper = $(wrapper),
				// isEE = $wrapper.hasClass('hnaw-extra-effect-wrapper'), // If we ever need something similar to GIW's Extra Effect template
				$toggle = $('<span>', {
					'class': 'custom-tt toggle-tooltip',//+(isEE ? ' hnaw-extra-effect' : ''),
					html: $wrapper.find('.mw-collapsible-toggle').html()
				}),
				$content = $wrapper.find('.mw-collapsible-content'),
				popup = new OO.ui.PopupWidget({
					$content: $('<div>', { html: $content.html() }),
					$container: $('.mw-parser-output'),
					anchor: true, // !isEE
				});
				
				// Remove default collapsible
				$wrapper.toggleClass(['mw-collapsible', 'mw-made-collapsible', 'mw-collapsed'], false);
				$wrapper.find('.mw-collapsible-toggle').replaceWith($toggle);
				$content.remove();
				
				// [[T:Tt]]'s toggle effect
				$wrapper.append(popup.$element);
				
				// T:Extra Effect's hover effect
				let time;
				$toggle.add(popup.$element).on('mouseover mouseout', (e) => {
					if (time) { clearTimeout(time); }
					time = setTimeout(()=>{
						popup.toggle(e.type==='mouseout' ? false : true);
					}, e.type==='mouseout' ? 250 : 0);
				});
			});
		});
	});
}