Commit 50259504 authored by Osman Gormus's avatar Osman Gormus
Browse files

Prioritize native lazy-loading, load lazysizes like polyfill

parent 01788e16
Loading
Loading
Loading
Loading
+38 −9
Original line number Diff line number Diff line
(function () {
(function (Drupal, drupalSettings) {

  'use strict';

  function extend(obj, src) {
  Drupal.behaviors.lazy = {
    attach: function attach(context, settings) {
      var lazysizes = settings.lazy.lazysizes || {};

      if ('loading' in HTMLImageElement.prototype) {
        var images = document.querySelectorAll('img[loading="lazy"]');
        images.forEach(img => {
          img.src = img.getAttribute(lazysizes.srcAttr);
          this.removeClass(img, lazysizes.lazyClass);
          this.addClass(img, lazysizes.loadedClass);
        });
      }
      else {
        window.lazySizesConfig = window.lazySizesConfig || {};
        window.lazySizesConfig = this.extend(window.lazySizesConfig, lazysizes);

        var script = document.createElement('script'),
          scripts = document.getElementsByTagName('script')[0];
        script.src = Drupal.url('libraries/lazysizes/lazysizes.min.js');
        scripts.parentNode.insertBefore(script, scripts);
      }
    },
    extend: function extend(obj, src) {
      Object.keys(src).forEach(function (key) { obj[key] = src[key]; });
      return obj;
    },
    hasClass: function hasClass(el, className) {
      return el.classList ? el.classList.contains(className) : new RegExp('\\b'+ className+'\\b').test(el.className);
    },
    addClass: function addClass(el, className) {
      if (el.classList) el.classList.add(className);
      else if (!hasClass(el, className)) el.className += ' ' + className;
    },
    removeClass: function removeClass(el, className) {
      if (el.classList) el.classList.remove(className);
      else el.className = el.className.replace(new RegExp('\\b'+ className+'\\b', 'g'), '');
    }
  }

  var lazysizes = drupalSettings.lazy.lazysizes || {};

  window.lazySizesConfig = window.lazySizesConfig || {};
  window.lazySizesConfig = extend(window.lazySizesConfig, lazysizes);

})();
})(Drupal, drupalSettings);
+1 −17
Original line number Diff line number Diff line
@@ -3,24 +3,8 @@ lazy:
  version: VERSION
  js:
    js/lazy.js: { }
  dependencies:
    - core/drupalSettings

lazysizes:
  header: true
  remote: https://github.com/aFarkas/lazysizes
  version: 5.1.1
  license:
    name: MIT
    url: https://github.com/aFarkas/lazysizes/blob/master/LICENSE
  js:
    /libraries/lazysizes/plugins/respimg/ls.respimg.min.js: { minified: true }
    /libraries/lazysizes/plugins/parent-fit/ls.parent-fit.min.js: { minified: true }
    /libraries/lazysizes/plugins/object-fit/ls.object-fit.min.js: { minified: true }
    /libraries/lazysizes/plugins/blur-up/ls.blur-up.min.js: { minified: true }
    /libraries/lazysizes/lazysizes.min.js: { minified: true }
  css:
    theme:
      css/lazysizes.css: { }
  dependencies:
    - lazy/lazy
    - core/drupal