MediaWiki:Common.js: Difference between revisions
Appearance
Cdjensen94 (talk | contribs) No edit summary |
Cdjensen94 (talk | contribs) No edit summary |
||
Line 40: | Line 40: | ||
} | } | ||
function initSlideshowResizer() { | |||
document.querySelectorAll('.mw-jsslideshow').forEach(mwSlideshow => { | document.querySelectorAll('.mw-jsslideshow').forEach(mwSlideshow => { | ||
resizeAndCenterSlideshow(mwSlideshow); | resizeAndCenterSlideshow(mwSlideshow); | ||
// Optional: Resize on window resize | |||
window.addEventListener('resize', () => { | window.addEventListener('resize', () => { | ||
resizeAndCenterSlideshow(mwSlideshow); | resizeAndCenterSlideshow(mwSlideshow); | ||
}); | }); | ||
// Observe for changes (like slide swaps) | |||
const slideshow = mwSlideshow.querySelector('.slideshow'); | const slideshow = mwSlideshow.querySelector('.slideshow'); | ||
if (slideshow) { | if (slideshow) { |
Revision as of 13:42, 3 March 2025
(function() {
function resizeAndCenterSlideshow(mwSlideshow) {
const slideshow = mwSlideshow.querySelector('.slideshow');
if (!slideshow) return;
// Reset positioning to let the parent naturally size
slideshow.style.position = 'relative';
slideshow.style.left = '';
slideshow.style.top = '';
slideshow.style.transform = '';
// Force `mw-jsslideshow` to wrap tightly around the slideshow
mwSlideshow.style.width = slideshow.scrollWidth + 'px';
mwSlideshow.style.height = slideshow.scrollHeight + 'px';
mwSlideshow.style.margin = '0 auto'; // Center mw-jsslideshow itself
// Center each individual image within its slide div
slideshow.querySelectorAll('div').forEach(slide => {
const img = slide.querySelector('img');
if (img) {
// Reset slide container spacing
slide.style.padding = '0';
slide.style.margin = '0';
slide.style.border = 'none';
slide.style.width = slideshow.scrollWidth + 'px';
slide.style.display = 'flex';
slide.style.justifyContent = 'center';
slide.style.alignItems = 'center';
slide.style.boxSizing = 'border-box';
// Image centering & sizing
img.style.display = 'block';
img.style.maxWidth = '100%';
img.style.height = 'auto';
img.style.objectFit = 'contain';
img.style.margin = '0'; // Kill any ghost margin
}
});
}
function initSlideshowResizer() {
document.querySelectorAll('.mw-jsslideshow').forEach(mwSlideshow => {
resizeAndCenterSlideshow(mwSlideshow);
// Optional: Resize on window resize
window.addEventListener('resize', () => {
resizeAndCenterSlideshow(mwSlideshow);
});
// Observe for changes (like slide swaps)
const slideshow = mwSlideshow.querySelector('.slideshow');
if (slideshow) {
const observer = new MutationObserver(() => {
resizeAndCenterSlideshow(mwSlideshow);
});
observer.observe(slideshow, {
attributes: true,
attributeFilter: ['style'],
childList: true,
subtree: true
});
}
});
}
if (document.readyState === 'complete' || document.readyState === 'interactive') {
initSlideshowResizer();
} else {
document.addEventListener('DOMContentLoaded', initSlideshowResizer);
}
function cleanSlideshowStyles(slideshowContainer) {
const slideshow = slideshowContainer.querySelector('.slideshow');
if (slideshow) {
// Remove inline styles on the main slideshow container
slideshow.style.width = '';
slideshow.style.height = '';
// Remove inline styles on each slide div
slideshow.querySelectorAll('div').forEach(slide => {
slide.style.width = '';
slide.style.height = '';
});
}
}
function initSlideshowFix() {
// Locate all mw-jsslideshow instances
document.querySelectorAll('.mw-jsslideshow').forEach(mwSlideshow => {
// Clean styles on page load
cleanSlideshowStyles(mwSlideshow);
// Optional: Re-clean styles on window resize
window.addEventListener('resize', () => {
cleanSlideshowStyles(mwSlideshow);
});
// Hook into slide transitions if needed (depends on the specific JS driving the slideshow)
const slideshow = mwSlideshow.querySelector('.slideshow');
if (slideshow) {
const observer = new MutationObserver(() => {
cleanSlideshowStyles(mwSlideshow);
});
observer.observe(slideshow, {
attributes: true,
attributeFilter: ['style'],
childList: false,
subtree: false
});
}
});
}
// Run once DOM is ready (in case the slideshows are injected late)
if (document.readyState === 'complete' || document.readyState === 'interactive') {
initSlideshowFix();
} else {
document.addEventListener('DOMContentLoaded', initSlideshowFix);
}
})();
/* Any JavaScript here will be loaded for all users on every page load. */
(function() {
function cleanSlideshowStyles(slideshowContainer) {
const slideshow = slideshowContainer.querySelector('.slideshow');
if (slideshow) {
// Remove inline styles on the main slideshow container
slideshow.style.width = '';
slideshow.style.height = '';
// Remove inline styles on each slide div
slideshow.querySelectorAll('div').forEach(slide => {
slide.style.width = '';
slide.style.height = '';
});
}
}
function initSlideshowFix() {
// Locate all mw-jsslideshow instances
document.querySelectorAll('.mw-jsslideshow').forEach(mwSlideshow => {
// Clean styles on page load
cleanSlideshowStyles(mwSlideshow);
// Optional: Re-clean styles on window resize
window.addEventListener('resize', () => {
cleanSlideshowStyles(mwSlideshow);
});
// Hook into slide transitions if needed (depends on the specific JS driving the slideshow)
const slideshow = mwSlideshow.querySelector('.slideshow');
if (slideshow) {
const observer = new MutationObserver(() => {
cleanSlideshowStyles(mwSlideshow);
});
observer.observe(slideshow, {
attributes: true,
attributeFilter: ['style'],
childList: false,
subtree: false
});
}
});
}
// Run once DOM is ready (in case the slideshows are injected late)
if (document.readyState === 'complete' || document.readyState === 'interactive') {
initSlideshowFix();
} else {
document.addEventListener('DOMContentLoaded', initSlideshowFix);
}
})();