# HG changeset patch # User Paul Boddie # Date 1422724247 -3600 # Node ID d7aefae45e7c4cf38fdafc91db16a019e61e37b1 # Parent 4a1cb2084a0ebb3a1c50b580fa0105c2eb18af68 Employed a table to show event information. diff -r 4a1cb2084a0e -r d7aefae45e7c imip_manager.py --- a/imip_manager.py Sat Jan 31 17:54:29 2015 +0100 +++ b/imip_manager.py Sat Jan 31 18:10:47 2015 +0100 @@ -31,8 +31,9 @@ sys.path.append(LIBRARY_PATH) from imiptools.content import Handler, get_address, \ - get_item, get_uri, get_utc_datetime, get_value, \ - get_value_map, get_values, parse_object, to_part + get_item, get_items, get_uri, get_utc_datetime, \ + get_value, get_value_map, get_values, \ + parse_object, to_part from imiptools.dates import format_datetime, get_datetime, get_start_of_day, \ get_end_of_day, ends_on_same_day, to_timezone from imiptools.mail import Messenger @@ -474,6 +475,14 @@ self.page.p.close() self.page.form.close() + object_labels = { + "SUMMARY" : "Summary", + "DTSTART" : "Start", + "DTEND" : "End", + "ORGANIZER" : "Organiser", + "ATTENDEE" : "Attendee", + } + def show_object_on_page(self, uid, obj): """ @@ -481,6 +490,8 @@ on the current page. """ + page = self.page + # Obtain the user's timezone. prefs = self.get_preferences() @@ -490,21 +501,49 @@ details = self._get_details(obj) - self.page.dl() + page.table(cellspacing=5, cellpadding=5) for name in ["SUMMARY", "DTSTART", "DTEND", "ORGANIZER", "ATTENDEE"]: + page.tr() + + label = self.object_labels.get(name, name) + + # Handle datetimes specially. + if name in ["DTSTART", "DTEND"]: value, attr = get_item(details, name) tzid = attr.get("TZID", tzid) value = self.format_datetime(to_timezone(get_datetime(value), tzid), "full") - self.page.dt(name) - self.page.dd(value) + page.th(label, class_="objectheading") + page.td(value) + page.tr.close() + + # Handle potentially many values. + else: - for value in get_values(details, name): - self.page.dt(name) - self.page.dd(value) + items = get_items(details, name) + page.th(label, class_="objectheading", rowspan=len(items)) + + first = True + + for value, attr in items: + if not first: + page.tr() + else: + first = False - self.page.dl.close() + page.td() + page.add(value) + + if name == "ATTENDEE": + partstat = attr.get("PARTSTAT") + if partstat: + page.add(" (%s)" % partstat) + + page.td.close() + page.tr.close() + + page.table.close() dtstart = format_datetime(get_utc_datetime(details, "DTSTART")) dtend = format_datetime(get_utc_datetime(details, "DTEND")) @@ -530,14 +569,14 @@ if uid != found_uid: start = self.format_datetime(to_timezone(get_datetime(start), tzid), "full") end = self.format_datetime(to_timezone(get_datetime(end), tzid), "full") - self.page.p("Event conflicts with another from %s to %s: " % (start, end)) + page.p("Event conflicts with another from %s to %s: " % (start, end)) # Show the event summary for the conflicting event. found_obj = self._get_object(found_uid) if found_obj: found_details = self._get_details(found_obj) - self.page.a(get_value(found_details, "SUMMARY"), href=self.env.new_url(found_uid)) + page.a(get_value(found_details, "SUMMARY"), href=self.env.new_url(found_uid)) def show_requests_on_page(self):