Stefan Antonelli and Peter Holzer: Modernize Plone’s Classic UI
Talk at Plone Conference 2020
What was new in Plone 5? We had beautiful new theme: Barceloneta. Diazo theming by default. We switched to CSS compilation with less.
During the Tokyo conference Stefan thought up Tokyo Theme. Clean responsive theme for Plone 5. Tons of overrides to tackle problems in Plone 5. Issue with navigation and editing on mobile we solved with collective.sidebar.
We had community discussions, especially during several Plone events. Everyone tried to use Bootstrap (components). First idea: map variables from Barceloneta to Bootstrap, because they have similar ideas using different terms.
We have PLIP to modernize markup in templates, and another PLIP to modernize the default theme: Barceloneta LTS. Forms using z3c.form are already using the new classes.
Make things easier: UI, development. Creating a modern UI for the web is complex. You need to support different devices, responsiveness. In Bootstrap there are patterns for most useful things.
Developer perspective: expect one way to do things. Developers should not have to worry about design. When busy in the backend, you should focus on Python, not on it looking nice and shiny. Don't think about markup, just use components. The good news: there is documentation. The Bootstrap documentation is our documentation.
What is new in Plone 6?
- Volto is the default UI.
- There still is the Classic UI with Barceloneta look and feel, but updated.
- No TTW (through the web) theming.
- But there is a textarea to add some simple CSS (already in 5.2.3).
- Some CSS variables may be changeable TTW.
- Finally jQuery 3
Bootstrap is still the most popular front-end framework. Well documented, tested and maintained. It is so easy to create stuff, I enjoy it a lot.
What is new in Bootstrap 5?
- Improved overall look and feel.
- Updated and extended the color system
- Custom properties: css variables
- SVG Icon library
- Dropped IE10 and IE11 support
- Bootstrap 5 is currently alpha 3.
- See https://v5.getbootstrap.com
Features: what do we get from these changes?
- Core templates use Bootstrap 5 markup. Instead of overrides in plonetheme.tokyo, we have lots of branches for the actual packages.
- All major templates have been touched already.
- For the current state, see the unofficial demo at https://classic.plone.de
- The Bootstrap documentation has lots of snippets than you can copy.
- You don't need much more CSS on top of it if you paste most examples. We added a little for own components, like navigation.
Barceloneta appearance is fully customizable. It is basically on opinionated set of bootstrap variables. Every aspect can be changed with variables: colors, fonts, sizes, spacings, grid gutters, etc. There are overall properties, like shadowed, rounded, gradients. Just turn on or off.
Theming workflow. plonetheme.barceloneta will also be published as npm package. bobtemplates.plone will have a template for the new theming workflow. You can do quick and dirty customizations through the CSS overrides field in the theme controlpanel.
Diazo will still be there, will work as before. Some optimizations in the rules.xml to make content are customizations easier.
How to deal with icons? What if you want to change the content type icons? Used to be hard. Now we come up with the idea of an icon resolver. We decided to use the bootstrap icons. Icons are registered via GenericSetup, for example with a record name plone.icon.alarm pointing to an SVG. You can then override this in your own GS profile.
Example icon use:
<tal:icon replace="structure python:icons.tag('love', tag_class='custom-class', tag_alt='foobar')" />
You get get back an inline SVG or an image tag.
Note: all z3c form widgets in Plone are now in plone.app.z3cform, and not scattered over lots of packages.
We will restart our weekly Plone 6 Classic UI sprints, starting Januari 13 2021, 10:00 (UTC+1).