Special report from São Paulo, Brazil: Cafecito Sprint Day 1
Day 1 (Monday, June 18)
Work started late thanks to a broken fiber optics cable brought to us by Vivo (Telefônica Brasil).
Coffee after lunch was courtesy of Leo's Cafecito.
The team was formed by agnogueira, davi-lima, flecox and quimera.
They begun the day discussing how some grid systems (like Deco.gs) can disturb responsive design principles, with rows preventing cells from floating one below the other when screen is shrinked. So, even though inspired by Deco.gs, they decided to begin with their own set of CSS classes to indicate widths and floats, but not positions.
For tiles' drag&drop and resizing functionalities they chose to start with jQuery UI since it's being included in Plone anyway. The team decided to begin with the resizing so they wrote code implementing the "Groups and Tiles" mockup as a proof of concept. They couldn't use the native snap functionality, because of the lack of a "snap" event in the resize API, so they found some trouble calculating exactly when enough pixels were dragged to update the tile CSS class which defines its width. At first they tried binding the math into the jQuery UI resize event but it was too expensive and lagged, so they went for start and stop events.
Generally it was a nice first day ending with important discussions with the backend team on how we'll persist the layouts after the user presses the Save button on the Layout tab.
The team was formed by frapell, hvelarde and nueces.
The team decided to take on the problem using the collective.composition approach. Based on a blog post by David Glick,
they merged back the tiles implementation in collective.composition
from frapell's fork and moved the package into the Collective. The idea
was to remove some of the content types implemented and start adding
different tiles types.
They debated a bit on which would be the best implementation, first they wanted to use recursive tiles and implement a “folder” tile to hold other tiles, but plone.app.blocks doesn’t work that way. So, the main idea will be to use panels to store the tiles. Then they’ll store the panels and tiles HTML structure in a field for the "Composition” object. This way we can have versioning and working copy for free. Global layouts will be added in the Plone registry, that way, we can use Generic Setup to import and export layouts.
Take a look (and help out!) at the full development buildout running on https://github.com/collective/collective.composition.