1.1 --- a/EventAggregatorSupport.py Mon Mar 30 01:37:45 2009 +0200
1.2 +++ b/EventAggregatorSupport.py Tue Mar 31 00:43:20 2009 +0200
1.3 @@ -421,6 +421,35 @@
1.4
1.5 return events, shown_events, all_shown_events, earliest, latest
1.6
1.7 +def compareEvents(event1, event2):
1.8 +
1.9 + """
1.10 + Compare 'event1' and 'event2' by start and end date, where both parameters
1.11 + are of the following form:
1.12 +
1.13 + (event_page, event_details)
1.14 + """
1.15 +
1.16 + event_page1, event_details1 = event1
1.17 + event_page2, event_details2 = event2
1.18 + return cmp(
1.19 + (event_details1["start"], event_details1["end"]),
1.20 + (event_details2["start"], event_details2["end"])
1.21 + )
1.22 +
1.23 +def getOrderedEvents(events):
1.24 +
1.25 + """
1.26 + Return a list with the given 'events' ordered according to their start and
1.27 + end dates. Each list element must be of the following form:
1.28 +
1.29 + (event_page, event_details)
1.30 + """
1.31 +
1.32 + ordered_events = events[:]
1.33 + ordered_events.sort(compareEvents)
1.34 + return ordered_events
1.35 +
1.36 def getConcretePeriod(calendar_start, calendar_end, earliest, latest):
1.37
1.38 """
3.1 --- a/macros/EventAggregator.py Mon Mar 30 01:37:45 2009 +0200
3.2 +++ b/macros/EventAggregator.py Tue Mar 31 00:43:20 2009 +0200
3.3 @@ -37,6 +37,18 @@
3.4 else:
3.5 return (255, 255, 255)
3.6
3.7 +def getMonthActionQueryString(argname, month):
3.8 + if month is not None:
3.9 + return "%s=%04d-%02d" % ((argname,) + month)
3.10 + else:
3.11 + return ""
3.12 +
3.13 +def getMonthQueryString(calendar_name, argname, month):
3.14 + if month is not None:
3.15 + return "%s-%s=%04d-%02d" % ((calendar_name, argname) + month)
3.16 + else:
3.17 + return ""
3.18 +
3.19 # Macro functions.
3.20
3.21 def execute(macro, args):
3.22 @@ -139,6 +151,25 @@
3.23
3.24 output = []
3.25
3.26 + # Output download controls.
3.27 +
3.28 + download_all_link = "action=EventAggregatorSummary&doit=1&%s" % (
3.29 + "&".join([("category=%s" % name) for name in category_names])
3.30 + )
3.31 + download_link = download_all_link + ("&%s&%s" % (
3.32 + getMonthActionQueryString("start", calendar_start),
3.33 + getMonthActionQueryString("end", calendar_end)
3.34 + ))
3.35 +
3.36 + output.append(fmt.div(on=1, css_class="event-controls"))
3.37 + output.append(fmt.span(on=1, css_class="event-download-calendar"))
3.38 + output.append(page.link_to_raw(request, wikiutil.escape(_("Download this calendar in iCalendar format")), download_link))
3.39 + output.append(fmt.span(on=0))
3.40 + output.append(fmt.span(on=1, css_class="event-download-all"))
3.41 + output.append(page.link_to_raw(request, wikiutil.escape(_("Download all events in iCalendar format")), download_all_link))
3.42 + output.append(fmt.span(on=0))
3.43 + output.append(fmt.div(on=0))
3.44 +
3.45 # Output top-level information.
3.46
3.47 if mode == "list":
3.48 @@ -169,11 +200,13 @@
3.49 # Links to the previous set of months and to a calendar shifted
3.50 # back one month.
3.51
3.52 - previous_set_link = "%s-start=%04d-%02d&%s-end=%04d-%02d" % (
3.53 - (calendar_name,) + previous_set_start + (calendar_name,) + previous_set_end
3.54 + previous_set_link = "%s&%s" % (
3.55 + getMonthQueryString(calendar_name, "start", previous_set_start),
3.56 + getMonthQueryString(calendar_name, "end", previous_set_end)
3.57 )
3.58 - previous_month_link = "%s-start=%04d-%02d&%s-end=%04d-%02d" % (
3.59 - (calendar_name,) + previous_month_start + (calendar_name,) + previous_month_end
3.60 + previous_month_link = "%s&%s" % (
3.61 + getMonthQueryString(calendar_name, "start", previous_month_start),
3.62 + getMonthQueryString(calendar_name, "end", previous_month_end)
3.63 )
3.64
3.65 output.append(fmt.span(on=1, css_class="previous-month"))
3.66 @@ -185,11 +218,13 @@
3.67 # Links to the next set of months and to a calendar shifted
3.68 # forward one month.
3.69
3.70 - next_set_link = "%s-start=%04d-%02d&%s-end=%04d-%02d" % (
3.71 - (calendar_name,) + next_set_start + (calendar_name,) + next_set_end
3.72 + next_set_link = "%s&%s" % (
3.73 + getMonthQueryString(calendar_name, "start", next_set_start),
3.74 + getMonthQueryString(calendar_name, "end", next_set_end)
3.75 )
3.76 - next_month_link = "%s-start=%04d-%02d&%s-end=%04d-%02d" % (
3.77 - (calendar_name,) + next_month_start + (calendar_name,) + next_month_end
3.78 + next_month_link = "%s&%s" % (
3.79 + getMonthQueryString(calendar_name, "start", next_month_start),
3.80 + getMonthQueryString(calendar_name, "end", next_month_end)
3.81 )
3.82
3.83 output.append(fmt.span(on=1, css_class="next-month"))
3.84 @@ -201,9 +236,11 @@
3.85 # A link leading to this month being at the top of the calendar.
3.86
3.87 full_month_label = "%s %s" % (month_label, year)
3.88 - month_link = "%s-start=%04d-%02d&%s-end=%04d-%02d" % (
3.89 - (calendar_name, year, month, calendar_name) +
3.90 - EventAggregatorSupport.monthupdate((year, month), number_of_months - 1)
3.91 + end_month = EventAggregatorSupport.monthupdate((year, month), number_of_months - 1)
3.92 +
3.93 + month_link = "%s&%s" % (
3.94 + getMonthQueryString(calendar_name, "start", (year, month)),
3.95 + getMonthQueryString(calendar_name, "end", end_month)
3.96 )
3.97 output.append(page.link_to_raw(request, wikiutil.escape(full_month_label), month_link))
3.98
3.99 @@ -418,16 +455,11 @@
3.100
3.101 # Get the events in order.
3.102
3.103 - ordered_events = []
3.104 -
3.105 - for event_page, event_details in shown_events.get((year, month), []):
3.106 - ordered_events.append((event_details["start"], event_details["end"], (event_page, event_details)))
3.107 -
3.108 - ordered_events.sort(lambda x, y: cmp((x[0], x[1]), (y[0], y[1])))
3.109 + ordered_events = EventAggregatorSummary.getOrderedEvents(shown_events.get((year, month), []))
3.110
3.111 # Show the events in order.
3.112
3.113 - for start, end, (event_page, event_details) in ordered_events:
3.114 + for event_page, event_details in ordered_events:
3.115 event_summary = EventAggregatorSupport.getEventSummary(event_page, event_details)
3.116
3.117 output.append(fmt.listitem(on=1, attr={"class" : "event-listing"}))