MediaWiki:Gadget-DeferredDisplay.js
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
* @author Dschwen, 2013 / Vish, 2023
*/
$(document).ready(function() {
function applyNSFWOverlay(container) {
container.css({
backgroundImage: 'url("https://static.jojowiki.com/images/customizations/Dialog-warning-yellow.png")',
backgroundRepeat: 'no-repeat',
backgroundPosition: 'center'
}).find('img').css('visibility', 'hidden');
container.one('click', function(e) {
$(this).css('backgroundImage', '').find('img').css('visibility', '');
e.preventDefault();
});
}
function checkAndApplyNSFWOverlay() {
$('.nsfwelement').each(function() {
var nsfwElement = $(this);
var container = nsfwElement.closest('.thumbinner, .gallerybox');
if (container.length && !container.data('nsfw-applied')) {
var img = container.find('img.thumbimage');
if (img.length) {
applyNSFWOverlay(container);
container.data('nsfw-applied', true);
}
}
});
}
function setupLazyLoadObserver() {
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
var container = $(entry.target).closest('.thumbinner, .gallerybox');
if (container.find('.nsfwelement').length > 0) {
applyNSFWOverlay(container);
container.data('nsfw-applied', true);
}
}
});
});
$('img.thumbimage').each(function() {
observer.observe(this);
});
}
// Apply overlay initially
checkAndApplyNSFWOverlay();
// Setup observer for lazy-loaded images
setupLazyLoadObserver();
// Re-apply overlay on window load to handle any remaining lazy-loaded images
$(window).on('load', function() {
checkAndApplyNSFWOverlay();
});
});