MediaWiki:Gadget-DeferredDisplay.js

From JoJo's Bizarre Encyclopedia - JoJo Wiki
Revision as of 10:53, 7 August 2024 by Vish (talk | contribs)
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/**
 * Deferred display of {{tl|nsfw}}-tagged images.
 * jshint validation
 * @autho  Dschwen, 2013 / Vish, 2023
 */

$(document).ready(function() {
    function initializeObserver() {
        const observer = new IntersectionObserver((entries, observer) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    const lazyImage = entry.target;
                    if (lazyImage.classList.contains('lazy-image-placeholder')) {
                        lazyImage.addEventListener('click', function(e) {
                            e.preventDefault();
                            $(this).parent().parent().css({
                                backgroundImage: '',
                                backgroundRepeat: '',
                                backgroundPosition: '',
                                backgroundSize: '',
                                display: ''
                            }).find('img').css({
                                visibility: ''
                            });
                        });
                        lazyImage.classList.add('image-lazy-loaded');
                        observer.unobserve(lazyImage);
                    }
                }
            });
        }, {
            rootMargin: '0px 0px 200px 0px'
        });

        // Observe all lazy images
        document.querySelectorAll('.lazy-image-placeholder').forEach(image => {
            observer.observe(image);
        });
    }

    function applyStyles() {
        $('img[alt*=NSFWTAG]').parent().add($('.thumbinner,.gallerybox')
            .has('.nsfwelement').find('.image').parent())
            .one('click', function(e) {
                e.preventDefault();
                $(this).css({
                    backgroundImage: '',
                    backgroundRepeat: '',
                    backgroundPosition: '',
                    backgroundSize: '',
                    display: ''
                }).find('img').css({
                    visibility: ''
                });
            })
            .css({
                backgroundImage: 'url("https://static.jojowiki.com/images/customizations/Dialog-warning-yellow.png")',
                backgroundRepeat: 'no-repeat',
                backgroundPosition: 'center',
                backgroundSize: 'contain',
                display: 'block'
            })
            .find('img').css({
                visibility: 'hidden'
            });
    }

    initializeObserver();
    applyStyles();
}(jQuery, mediaWiki));