Merge obj2href() and as_summary_row() to as_summary_item()¶
Written between 2024-06-12 and 2024-06-14.
I merged the obj2href() and as_summary_row() methods of
Model into a single method named
as_summary_item.
They did almost the same, both returned a link (an <a href="...">...</a>
fragment) that opens the detail window of this object. One difference between
them was that obj2href() returned an ElementTree element while
as_summary_row() returned a safe string. The as_summary_item()
method returns an ElementTree element. ElementTree is better than safe HTML for
specifying small HTML chunks because it is more flexible and more fool-proof
(and thus actually safer). And at this level we won’t use any templating nor
store the result in a database, so there is no advantage of using safe html. So
I converted the as_summary_row() methods from generating safe html to
using ElementTree.
The as_summary_item() method expects the text of the link as an optional
positional argument after the ar.
Note: We should also rename the obj2html() method. But this is another
topic because application developers aren’t supposed to override it.
obj2html() just returns a link to
Documentation about this is still poor. I started to move docstrings from
lino.core.requests to lino.api.core.Request, but then stopped
because this is yet another huge set of changes. I prefer to do this another
time.
Usage examples:
lino_xl.lib.cal.Eventcustomizes thetitleof the linkPolymorphic.obj2href() potentially loops over navigatable MTI models (
_mtinav_models)Voucher.obj2href() finds the MTI leaf (the implementing document type) before linking to it.
Note.obj2href() customizes the default text to use.
Ticket.obj2href() customizes both title and default text.
ProjectRelated.as_summary_row() adds, between parentheses, a clickable link to the related project.
coachings.Coaching.as_summary_row() adds, between parentheses, a clickable link to the related client.
comments.Reaction.as_summary_row()
publisher.Page.as_summary_row()
cal.Component.as_summary_row() adds a bit more information (the start_time, state and summary).
notes.Note.as_summary_row() adds a bit more information (the subject).
Calls:
as_summary_row() is called by
Actor.row_as_summary()
Request.row_as_summary()
obj2href() is called by
TableRow.as_summary_row and get_overview_elems() and as_paragraph()
Changes¶
converted every
as_summary_row()to use ElementTree instead of safe html.Renamed all
as_summary_row()andobj2href()toas_summary_item().as_summary_item()supports a second optional positional argumenttextAs a consequence,
row_as_summary()(on both Actor and Request) now returns an ET element instead of safe html.
TODO: Rename obj2href() to as_summary_item() or something similar,
and row_as_summary() to row_as_summary_item(). I leave these renames
to a later commit to keep the changes as transparent as possible.