Integration of lazysizes, a lightweight lazy loader, into Plone.
Table of Contents
- Life, the Universe, and Everything
- Mostly Harmless
- Don’t Panic
- Share and Enjoy
This package integrates lazysizes, a lightweight lazy loader, into Plone.
lazysizes is 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.
These are some sites using collective.lazysizes:
Got an idea? Found a bug? Let us know by opening a support ticket.
To enable this package in a buildout-based installation:
Edit your buildout.cfg and add add the following to it:
[buildout] ... eggs = collective.lazysizes
After 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 to collective.lazysizes and click the ‘Activate’ button.
This package adds a transformer to the transform chain to integrate lazysizes into Plone.
The transformer looks for all the <img>, <iframe> and <blockquote> tags inside the content and does the following:
- appends a lazyload class
- if the tag is an <img>, transforms the src attribute into a data-src and 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 the src attribute into a data-src
- if the tag is a <blockquote> containing a tweet, it adds a data-twitter attribute and removes the <script> tag associated with the Twitter widget to avoid a useless request
These transforms are applied to anonymous users only.
This 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 in plone.htmlhead. This simplifies maintainance among multiple Plone versions and avoids bundling of unrelated resources.
We use webpack to process static resources on this package. Webpack processes SCSS and JS files, minifies the resulting CSS and JS, and optimizes all images. The final JS file is also a UMD package, which provides compatibility with most popular script loaders.
To contribute, you should start the instance in one shell and start webpack watcher on another with the following command:
Then go to webpack/app folder and edit SCSS and JS files; Webpack watcher 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 use webpack as described on its documentation.
The 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).
The following command rebuilds static files and exit (insted of keep watching the changes):
- Upgrade lazysizes to v4.1.4. [hvelarde]
- Set webpack output.libraryTarget to var and do not import the UMD version of lazysizes to avoid Mismatched anonymous define() module error in Plone 5 (refs. #67). [thet, rodfersou]
- Update Brazilian Portuguese and Spanish translations. [hvelarde]
- Set webpack output.libraryExport to default to avoid Mismatched anonymous define() module error (fixes #67). [rodfersou, hvelarde]
- Upgrade lazysizes to v4.1.2. [thet]
- Add browser layer to collective.lazysizes.resources viewlet registration; this avoids showing the viewlet when the package is not yet installed (fixes #69). [erral]
- 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 unused collective.lazysizes.ImageScales vocabulary. [hvelarde]
- Process static resources using webpack. [rodfersou]
- Avoid ValueError when upgrading from profile version 3 (fixes #46). [hvelarde]
- Upgrade lazysizes to v4.0.1. Twitter plugin is now CommonJS compatible. [hvelarde]
- Require plone.app.registry >=1.5. Refs #42 [erral]
- Add German translations. [thet]
- Add explicit i18n message ids instead of implicit based on the translation string. [thet]
- Fix Plone 5 compatibility. [thet]
- Extend the uninstall profile 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 of css_class_blacklist while upgrading. [hvelarde]
- Avoid possible ConfigurationConflictError on upgrade step registration. [hvelarde]
- Update lazySizes to v3.0.0. [hvelarde]
- Remove respimg polyfill plugin. [hvelarde]
- Fix UnicodeEncodeError on logger. [hvelarde]
- Clean up configlet; the image_candidates field was removed as the intended functionality will be included in Plone’s core in the near future (see PLIP 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]
- 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]
- 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 no src attribute; 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]
- 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 uses debug level instead of info. [hvelarde]
- Initial release.
Release history Release notifications
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size & hash SHA256 hash help||File type||Python version||Upload date|
|collective.lazysizes-4.1.4-py2-none-any.whl (90.2 kB) Copy SHA256 hash SHA256||Wheel||py2|
|collective.lazysizes-4.1.4.tar.gz (52.9 kB) Copy SHA256 hash SHA256||Source||None|