Package: collective.lazysizes
Table of ContentsLife, the Universe, and EverythingMostly HarmlessDon’t PanicInstallationHow does it workLook Ma! No Resource RegistriesDevelopmentShare and EnjoyChangelog4.1.6 (2019-03-12)4.1.4 (2018-10-11)4.1.2 (2018-10-01)4.1.1.1 (2018-09-10)4.1.1 (2018-09-06)4.0.1 (2017-11-20)3.1 (2017-10-02)3.0.0 (2017-03-09)2.0.5rc1 (2016-10-28)2.0.0b1 (2016-08-11)1.5.0b1 (2016-05-25)1.5.0a1 (2016-04-07)1.4.0a1 (2016-02-23)1.0a1 (2016-01-05)Life, the Universe, and EverythingThis package integrateslazysizes, a lightweight lazy loader, into Plone.lazysizesis a fast, SEO-friendly and self-initializing lazyloader for images (including responsive images picture/srcset), iframes, scripts/widgets and much more.
It also prioritizes resources by differentiating between crucial in view and near view elements to make perceived performance even faster.By using this package you can expect reductions of up to 80% in load time, 75% in page size and 50% in number of requests.Mostly HarmlessThese are some sites usingcollective.lazysizes:Brazilian Government(BR)Brazilian Presidency(BR)CartaCapital(BR)Conversa Afiada(BR)Portal Brasil 2016(BR)As long aswe have tested,lazysizesseems not to interfere with image indexing made by crawlers like Googlebot.Got an idea? Found a bug? Let us know byopening a support ticket.Don’t PanicInstallationTo enable this package in a buildout-based installation:Edit your buildout.cfg and addcollective.lazysizesto the list of eggs to install:[buildout]...eggs=collective.lazysizesAfter updating the configuration you need to run ‘’bin/buildout’’, which will take care of updating your system.Go to the ‘Site Setup’ page in a Plone site and click on the ‘Add-ons’ link.Check the box next tocollective.lazysizesand click the ‘Activate’ button.How does it workThis package adds a transformer to the transform chain to integratelazysizesinto Plone.The transformer looks for all the<img>,<iframe>and<blockquote>tags inside the content and does the following:appends alazyloadclassif the tag is an<img>, transforms thesrcattribute into adata-srcand uses a gray square in its place to maintain valid HTML code (this placeholder is loaded using the data URI scheme to avoid a new request to the server)if the tag is an<iframe>, transforms thesrcattribute into adata-srcif the tag is a<blockquote>containing a tweet, it adds adata-twitterattribute and removes the<script>tag associated with the Twitter widget to avoid a useless requestThese transforms can be applied to all users or only to anonymous.Look Ma! No Resource RegistriesThis add-on uses a very opinionated approach on how to handle static resources in Plone.
We just deprecated resource registries in favor of a simpler approach: a viewlet inplone.htmlhead.
This simplifies maintainance among multiple Plone versions and avoids bundling of unrelated resources.DevelopmentWe usewebpackto process static resources on this package.webpackprocesses SCSS and JS files, minifies the resulting CSS and JS, and optimizes all images.To contribute, you should start the instance in one shell and start webpack watcher on another with the following command:$bin/watch-lazysizesThen go towebpack/appfolder and edit SCSS and JS files;webpackwatcher will automatically create the final resources in the right place.There are also other commands added to handle more complex scenarios.The following command will set the buildout node installation in the system PATH,
this way you can usewebpackas described on their documentation.$bin/env-lazysizesThe following command generates JS and CSS without the minify step (it can be used to check the code being generated in a human readable way).$bin/debug-lazysizesThe following command rebuilds static files and exit (insted of keep watching the changes):$bin/build-lazysizesShare and Enjoycollective.lazysizeswould not have been possible without the contribution of the following people:Héctor VelardeAlexander Farkas(lazysizes)You can find an updated list of package contributors onGitHub.Development sponsored bySimples Consultoria.Changelog4.1.6 (2019-03-12)Update lazysizes to v4.1.6.
[hvelarde]Add support for Plone 5.2 and Python 3.
[hvelarde]Drop explicit support for Plone 5.0.
[hvelarde]Code clean up.
[hvelarde]4.1.4 (2018-10-11)Upgrade lazysizes to v4.1.4.
[hvelarde]Set webpackoutput.libraryTargettovarand do not import the UMD version of lazysizes to avoidMismatched anonymous define() moduleerror in Plone 5 (refs.#67).
[thet, rodfersou]Update Brazilian Portuguese and Spanish translations.
[hvelarde]4.1.2 (2018-10-01)Set webpackoutput.libraryExporttodefaultto avoidMismatched anonymous define() moduleerror (fixes#67).
[rodfersou, hvelarde]Upgrade lazysizes to v4.1.2.
[thet]Add browser layer tocollective.lazysizes.resourcesviewlet registration;
this avoids showing the viewlet when the package is not yet installed (fixes#69).
[erral]4.1.1.1 (2018-09-10)AvoidImportErrorwhile running upgrade step v10 (fixes#63).
[hvelarde]4.1.1 (2018-09-06)Deprecate resource registries;
instead, we now use a viewlet inplone.htmlheadto load JavaScript code.
This simplifies maintainance of the add-on among multiple Plone versions.
[hvelarde]Upgrade lazysizes to v4.1.1.
[hvelarde]Add lazysizes print plugin;
this plugin will automatically unveil all elements as soon as a print is detected even if the given lazyload image isn’t in the viewport (fixes#50).
[thet, hvelarde]Remove unusedcollective.lazysizes.ImageScalesvocabulary.
[hvelarde]Process static resources using webpack.
[rodfersou]AvoidValueErrorwhen upgrading from profile version 3 (fixes#46).
[hvelarde]4.0.1 (2017-11-20)Upgrade lazysizes to v4.0.1. Twitter plugin is now CommonJS compatible.
[hvelarde]Require plone.app.registry >=1.5. Refs #42
[erral]3.1 (2017-10-02)Add German translations.
[thet]Add explicit i18n message ids instead of implicit based on the translation string.
[thet]Fix Plone 5 compatibility.
[thet]Extend theuninstallprofile with more de-registrations.
[thet]Fix the blacklist XPath selector to also match elements with the class directly set on it.
[thet]Add configlet option to enable lazy loading for authenticated users.
[hvelarde]Avoid possible overriding ofcss_class_blacklistwhile upgrading.
[hvelarde]Avoid possibleConfigurationConflictErroron upgrade step registration.
[hvelarde]3.0.0 (2017-03-09)Update lazySizes to v3.0.0.
[hvelarde]Remove respimg polyfill plugin.
[hvelarde]FixUnicodeEncodeErroron logger.
[hvelarde]2.0.5rc1 (2016-10-28)Clean up configlet;
theimage_candidatesfield was removed as the intended functionality will be included in Plone’s core in the near future (seePLIP 1483).
[hvelarde]Remove dependency on five.grok.
[hvelarde]Update lazysizes to v2.0.5.
[hvelarde]Pin version of Products.ResourceRegistries >=2.2.12 to fix upgrade step.
[rodfersou, hvelarde]2.0.0b1 (2016-08-11)lazysizes was upgraded to version 2.0.0 and we are using now the AMD module (closes#20).
[rodfersou]Do not raise an exception in case Twitter’s embed code was somehow modified (closes#17).
[hvelarde]1.5.0b1 (2016-05-25)Embedded tweets are now also lazy loaded (closes#15).
[aFarkas, rodfersou, hvelarde]Package is now compatible with Plone 5.0 and Plone 5.1.
[hvelarde]1.5.0a1 (2016-04-07)Use data URI scheme for image placeholder to save one additional request (closes#8).
[hvelarde]Brazilian Portuguese and Spanish translations were added.
[hvelarde]Deal better with <img> tags with nosrcattribute;
log an error message with the request URL (closes#11).
[hvelarde]Package is now compatible with Plone 5.
[hvelarde]Remove dependency on Products.CMFQuickInstallerTool.
[hvelarde]Update lazysizes and respimg polyfill extension to v1.5.0.
[hvelarde]1.4.0a1 (2016-02-23)Add option to list class identifiers that will not be processed for lazy loading.<img>and<iframe>elements with that class directly applied to them, or to a parent element, will be skiped (closes#5).
[rodfersou, hvelarde]Update lazysizes and respimg polyfill extension to v1.4.0.
[hvelarde]Use a blank image instead of a spinner as placeholder.
[hvelarde]Logging now usesdebuglevel instead ofinfo.
[hvelarde]1.0a1 (2016-01-05)Initial release.