I’m just back from a wonderful and productive weekend at the Emerald Sprint, full of sitting in the hot tub overlooking Puget Sound, eating delicious meals, and making some great progress on improving the Dexterity content type system.
Our mission was to tackle a variety of tasks, encompassing both improvements to the through-the-web content type editor and to the capabilities of the tool for developers. On the first morning of the sprint, we spent some time brainstorming possible tasks and voting on them with sticky dots. We then picked tasks that had either lots of green dots (considered important) or a red dot (considered low-hanging fruit, i.e. relatively easy to implement). The full list of tasks was captured on our Trello board which we used to track status as the sprint progressed.
I spent a lot of time helping other participants with their projects, but also tried to get in some time working on improving Dexterity’s overall user experience. It was a real privilege to work with Alice Tseng, who previously helped Martin Aspeli improve the UX for the Diazo theme editor. Alice helped facilitate a user testing session with Wayne Glover and Sally Kleinfeldt, two participants with no previous experience with the Dexterity type editor. It was very enlightening to see people encounter the UI for the first time and try to figure it out while explaining their thoughts. Alice took copious notes which she’s in the process of posting to the sprint wiki. One of the biggest take-aways for me is that while the concept of “behaviors” may make sense to developers, it’s quite difficult for users to understand, and we need to do more to present them in ways that make it clear what functionality they enable.
We also did an exercise where we got about six of us to each sketch multiple ideas of what the UI of the type editor should look like. We then gathered and explained the ideas to each other, again with Alice taking notes. This turned out to be a great way to get lots of ideas out for discussion quickly without the risk of group-think limiting the space of designs that we considered. We ended up deciding to pick two possible directions to use for further user testing work.
Alongside this UX work, we got a lot done:
- I made some easy adjustments to the type editor based on things that were rough edges in our user testing. For example I added a bit of help text, removed the option to create non-container content types, and made sure that after the user adds a new type they are redirected to the Fields tab for that type. I also made the setting for a field’s default value appear in the field’s edit form, rather than allowing setting defaults from the overview of all fields in the type, which was confusing to everyone. These changes are all on plone.app.dexterity master.
- I also made progress on some work I started earlier to make it easier to customize attributes of widgets for fields in a Dexterity schema. For example, specifying the number of rows for a text area. This work is in the davisagli-widget-parameters branches of plone.autoform and plone.schemaeditor, and is almost ready to merge.
- Franco Pellegrini and Fulvio Casali started adding a new page for exporting content types, including a preview of the XML definition of the type’s schema. They are also working toward exporting a full installable Python egg rather than just a GenericSetup profile. This work is currently in the full-egg-export branch of buildout.coredev.
- Franco also made it so that a new Dexterity item gets a value for its language field assigned based on the language of its container.
- Franco also worked on adding URL and Email field types with built-in validation and display widgets that render a link. This is currently in a new package, plone.schema, which needs to be integrated.
- Luke Brannon and Jesse Snyder worked on migrating code from collective.dexteritytextindexer into Dexterity core. This will add a ’searchable’ toggle for each field to include it in the full text index.
- Liz Leddy implemented a view that can be used to export a Dexterity item represented as JSON. This is in https://github.com/eleddy/puget.batshitcrazy and depends on some changes in eleddy’s fork of plone.dexterity that I still need to review.
- Sally Kleinfeldt reviewed the current state of Dexterity documentation and sent me a bunch of notes on how to improve its organization, which I still need to digest.
- Steve McMahon worked on implementing a widget for choice fields that can switch between radio buttons or a drop down depending on how many items are in the vocabulary (similar to Archetypes).
- Ross Patterson added a setting to the Overview tab for a type to configure the allowed types that may be contained within the type. And he completed some work that was done earlier by Patrick Gerken to support changing the type restrictions for particular containers (as was already supported for Archetypes).
- Ross also merged code from collective.dexteritydiff into Products.CMFDiffTool and code from collective.cmfeditionsdexteritycompat into plone.app.versioningbehavior. This makes it easier to enable versioning for Dexterity content.
- Matthew Wilkes started working on some architectural changes needed to support repositioning fields that came from a behavior and moving fields to different fieldsets.
- Bill Deegan moved all the Dexterity issues from the old Google Code tracker to issue trackers on github. The Google Code tracker has now been turned off and new Dexterity issues should be submitted on github.
Many thanks to our sponsors for contributing to the above work: Plone Foundation, AndersonLeeb, Cris Ewing, Glick Software, Soliton Consulting, Blåstolen, the Seattle Plone Gathering, Chris Calloway, Ryan Foster, Silvio Tomatis, Dan Jacka, Philip Bauer, Roel Bruggink, Asko Soukka, Ian Hood, Ulrich Stockschlaeder, and Jesse Snyder. Also big thanks to Sally Kleinfeldt and Alice Tseng who spent a lot of time in the kitchen preparing some delicious Italian meals.