Jump to content

MediaWiki:Common.js: Difference between revisions

From Continuum Universes Wiki
 
(38 intermediate revisions by the same user not shown)
Line 1: Line 1:
(function() {
mw.hook('wikipage.content').add(function () {
    function resizeAndCenterSlideshow(mwSlideshow) {
  const el = document.getElementById('article-countdown');
        const slideshow = mwSlideshow.querySelector('.slideshow');
  console.log('countdown hook fired; element is:', el);


        if (!slideshow) return;
  if (!el) return;
  el.textContent = '✅ Countdown JS is running…';


        // Reset positioning to let the parent naturally size
  const apiUrl = mw.util.wikiScript('api') +
        slideshow.style.position = 'relative';
    '?action=query&meta=siteinfo&siprop=statistics&format=json&origin=*';
        slideshow.style.left = '';
        slideshow.style.top = '';
        slideshow.style.transform = '';


        // Force `mw-jsslideshow` to wrap tightly around the slideshow
  fetch(apiUrl)
        mwSlideshow.style.width = slideshow.scrollWidth + 'px';
    .then(r => r.json())
        mwSlideshow.style.height = slideshow.scrollHeight + 'px';
    .then(d => {
        mwSlideshow.style.margin = '0 auto'; // Center mw-jsslideshow itself
      const current = d.query.statistics.articles;
      const goal = 1000;
      const left = goal - current;


        // Center each individual image within its slide div
      el.innerHTML = left > 0
        slideshow.querySelectorAll('div').forEach(slide => {
        ? `🚧 Only <strong>${left}</strong> articles to go until 1000!`
            const img = slide.querySelector('img');
        : `🎯 We've reached 1000 articles! Let's Go Boyz and Girlz!`;
            if (img) {
    })
                // Reset slide container spacing
    .catch(err => {
                slide.style.padding = '0';
      el.textContent = 'API request failed (see console).';
                slide.style.margin = '0';
      console.error(err);
                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() {
// MediaWiki:Common.js
        document.querySelectorAll('.mw-jsslideshow').forEach(mwSlideshow => {
mw.hook('rcfilters.ui.initialized').add(function () {
            resizeAndCenterSlideshow(mwSlideshow);
  document.documentElement.classList.add('rcfilters-ready');
 
});
            window.addEventListener('resize', () => {
                resizeAndCenterSlideshow(mwSlideshow);
            });
 
            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);
    }
})();

Latest revision as of 22:35, 28 December 2025

mw.hook('wikipage.content').add(function () {
  const el = document.getElementById('article-countdown');
  console.log('countdown hook fired; element is:', el);

  if (!el) return;
  el.textContent = '✅ Countdown JS is running…';

  const apiUrl = mw.util.wikiScript('api') +
    '?action=query&meta=siteinfo&siprop=statistics&format=json&origin=*';

  fetch(apiUrl)
    .then(r => r.json())
    .then(d => {
      const current = d.query.statistics.articles;
      const goal = 1000;
      const left = goal - current;

      el.innerHTML = left > 0
        ? `🚧 Only <strong>${left}</strong> articles to go until 1000!`
        : `🎯 We've reached 1000 articles! Let's Go Boyz and Girlz!`;
    })
    .catch(err => {
      el.textContent = 'API request failed (see console).';
      console.error(err);
    });
});


// MediaWiki:Common.js
mw.hook('rcfilters.ui.initialized').add(function () {
  document.documentElement.classList.add('rcfilters-ready');
});