Check out Sunborn's two newly announced games (official English titles pending): Girls' Frontline: Blue Butterfly Contract and Reverse Collapse: F !
You don't need an account to join in. Learn how to contribute, browse Bounties and join our Discord server.

MediaWiki:Gadget-Common.js

Welcome to IOP Wiki. This website is maintained by the Girls' Frontline community and is free to edit by anyone.
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)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/** Common JavaScript functions used over all skins and platforms. */

RLQ.push(['jquery', function () {
	$(document).ready(function() {
	  var lazyImages = [].slice.call(document.querySelectorAll(".lazy-img"));
	  console.log("Images to lazy load:", lazyImages.length);
	  var lazyBackgrounds = [].slice.call(document.querySelectorAll("[data-bg-lazy]"));
	  console.log("Backgrounds to lazy load:", lazyBackgrounds.length);
	  
	  if ("IntersectionObserver" in window) {
	  	var imageIntersectionHandler = function(entries, observer) {
	      entries.forEach(function(entry) {
	        if (entry.isIntersecting) {
	          var lazyImage = entry.target;
	          if (lazyImage.dataset.src) { lazyImage.src = lazyImage.dataset.src; }
	          if (lazyImage.dataset.srcset) { lazyImage.srcset = lazyImage.dataset.srcset; }
	          lazyImage.classList.remove("lazy-img");
	          lazyImageObserver.unobserve(lazyImage);
	        }
	      });
	    };
	    
	    var bgIntersectionHandler = function(entries, observer) {
	      entries.forEach(function(entry) {
	        if (entry.isIntersecting) {
	          var lazyBg = entry.target;
	          lazyBg.style.backgroundImage = "url('" + lazyBg.dataset.bgLazy + "')";
	          lazyBg.removeAttribute("data-bg-lazy");
	          lazyBgObserver.unobserve(lazyBg);
	        }
	      });
	    };
	    
	    var lazyImageObserver = new IntersectionObserver(imageIntersectionHandler, { rootMargin: "100px" });
	    lazyImages.forEach(function(lazyImage) {
	      lazyImageObserver.observe(lazyImage);
	    });
	    
	    var lazyBgObserver = new IntersectionObserver(bgIntersectionHandler, { rootMargin: "100px" });
	    lazyBackgrounds.forEach(function(lazyBg) {
	      lazyBgObserver.observe(lazyBg);
	    });
	  } else {
	    // Possibly fall back to event handlers here
	    console.log("Lazy Loading seems to have failed.");
	  }
	});
}]);