1.1 --- a/imip_manager.py Sat Jan 31 17:54:29 2015 +0100
1.2 +++ b/imip_manager.py Sat Jan 31 18:10:47 2015 +0100
1.3 @@ -31,8 +31,9 @@
1.4 sys.path.append(LIBRARY_PATH)
1.5
1.6 from imiptools.content import Handler, get_address, \
1.7 - get_item, get_uri, get_utc_datetime, get_value, \
1.8 - get_value_map, get_values, parse_object, to_part
1.9 + get_item, get_items, get_uri, get_utc_datetime, \
1.10 + get_value, get_value_map, get_values, \
1.11 + parse_object, to_part
1.12 from imiptools.dates import format_datetime, get_datetime, get_start_of_day, \
1.13 get_end_of_day, ends_on_same_day, to_timezone
1.14 from imiptools.mail import Messenger
1.15 @@ -474,6 +475,14 @@
1.16 self.page.p.close()
1.17 self.page.form.close()
1.18
1.19 + object_labels = {
1.20 + "SUMMARY" : "Summary",
1.21 + "DTSTART" : "Start",
1.22 + "DTEND" : "End",
1.23 + "ORGANIZER" : "Organiser",
1.24 + "ATTENDEE" : "Attendee",
1.25 + }
1.26 +
1.27 def show_object_on_page(self, uid, obj):
1.28
1.29 """
1.30 @@ -481,6 +490,8 @@
1.31 on the current page.
1.32 """
1.33
1.34 + page = self.page
1.35 +
1.36 # Obtain the user's timezone.
1.37
1.38 prefs = self.get_preferences()
1.39 @@ -490,21 +501,49 @@
1.40
1.41 details = self._get_details(obj)
1.42
1.43 - self.page.dl()
1.44 + page.table(cellspacing=5, cellpadding=5)
1.45
1.46 for name in ["SUMMARY", "DTSTART", "DTEND", "ORGANIZER", "ATTENDEE"]:
1.47 + page.tr()
1.48 +
1.49 + label = self.object_labels.get(name, name)
1.50 +
1.51 + # Handle datetimes specially.
1.52 +
1.53 if name in ["DTSTART", "DTEND"]:
1.54 value, attr = get_item(details, name)
1.55 tzid = attr.get("TZID", tzid)
1.56 value = self.format_datetime(to_timezone(get_datetime(value), tzid), "full")
1.57 - self.page.dt(name)
1.58 - self.page.dd(value)
1.59 + page.th(label, class_="objectheading")
1.60 + page.td(value)
1.61 + page.tr.close()
1.62 +
1.63 + # Handle potentially many values.
1.64 +
1.65 else:
1.66 - for value in get_values(details, name):
1.67 - self.page.dt(name)
1.68 - self.page.dd(value)
1.69 + items = get_items(details, name)
1.70 + page.th(label, class_="objectheading", rowspan=len(items))
1.71 +
1.72 + first = True
1.73 +
1.74 + for value, attr in items:
1.75 + if not first:
1.76 + page.tr()
1.77 + else:
1.78 + first = False
1.79
1.80 - self.page.dl.close()
1.81 + page.td()
1.82 + page.add(value)
1.83 +
1.84 + if name == "ATTENDEE":
1.85 + partstat = attr.get("PARTSTAT")
1.86 + if partstat:
1.87 + page.add(" (%s)" % partstat)
1.88 +
1.89 + page.td.close()
1.90 + page.tr.close()
1.91 +
1.92 + page.table.close()
1.93
1.94 dtstart = format_datetime(get_utc_datetime(details, "DTSTART"))
1.95 dtend = format_datetime(get_utc_datetime(details, "DTEND"))
1.96 @@ -530,14 +569,14 @@
1.97 if uid != found_uid:
1.98 start = self.format_datetime(to_timezone(get_datetime(start), tzid), "full")
1.99 end = self.format_datetime(to_timezone(get_datetime(end), tzid), "full")
1.100 - self.page.p("Event conflicts with another from %s to %s: " % (start, end))
1.101 + page.p("Event conflicts with another from %s to %s: " % (start, end))
1.102
1.103 # Show the event summary for the conflicting event.
1.104
1.105 found_obj = self._get_object(found_uid)
1.106 if found_obj:
1.107 found_details = self._get_details(found_obj)
1.108 - self.page.a(get_value(found_details, "SUMMARY"), href=self.env.new_url(found_uid))
1.109 + page.a(get_value(found_details, "SUMMARY"), href=self.env.new_url(found_uid))
1.110
1.111 def show_requests_on_page(self):
1.112