:date: 2018-07-07 ====================== Saturday, July 7, 2018 ====================== I poked around in Jane, trying to organize our sites and meditating about :ticket:`2430`. I was unable to delete an unused site because it had summary records. New :ticket:`2433` : the :class:`lino.modlib.summaries.Summary` mixin now also sets :attr:`allow_cascaded_delete ` to ``'master'``. *En passant* I converted more docstrings to prosa in :ref:`noi.specs.tickets`. I fixed a problem which caused the lightbox to not work on my `German blog `__. The actual problem was in the :xfile:`layout.html` template, but *en passant* I updated the docstring of :mod:`rstgen.sphinxconf.sigal_image`. Responsive layouts for Lino =========================== Hamza and I had a look at the `Responsive Table `__ example. In the `Table.view.xml` source code we see:: Looking at the `sap.m.Column `__ API reference I note: - The *minScreenWidth* of a *Column* causes OpenUI5 to hide this column when the screen width is below the specified minimum width. You can specify that width either using CSS sizes (e.g: "480px" or "40em"), or using one of the names of the `sap.m.ScreenSize `__ enumeration (e.g: "Phone", "Tablet", "Desktop", "Small", "Medium", "Large", ...). - When a column becomes hidden because there is not enough space, OpenUI5 looks at `demandPopin` : if this is *true*, the column is shown as *pop-in* instead of hiding it. This is an API feature of OpenUI5 which did not exist in ExtJS. The important question for us us now: what information should an application developer provide so that Lino can use these features in a meaningful way? Our first spontaneous suggestion was to introduce three new class attributes: :attr:`tablet_columns `, :attr:`mobile_columns ` and :attr:`popin_columns `. IOW we made the intuitive design choice that Lino provides three possible screen sizes: "desktop", "tablet" and "phone". The default size is *desktop*. As the first example we made the :class:`lino_noi.lib.tickets.Tickets` table responsive:: class Tickets(dd.Table): column_names = 'id summary:50 priority workflow_buttons:30 site:10' tablet_columns = "id summary workflow_buttons" mobile_columns = "summary workflow_buttons" popin_columns = "id priority site" That means: the basic layout is *column_names*. These columns are visible when there is enough space. On a tablet (medium screen size) we want only the *tablet_columns* to be visible. These new attributes are *sets of field names* that can be specified as a single string with a space-separated list of field names, and we extended the :func:`expand_field_names ` function for handling them. Test: >>> import lino >>> lino.startup('lino_book.projects.team.settings.demo') >>> from lino.api.doctest import * >>> pprint(rt.models.tickets.AllTickets.mobile_columns) set([, lino.core.model.Model.workflow_buttons])