# HG changeset patch # User Paul Boddie # Date 1238880436 -7200 # Node ID 39ce8e50808bb77809398f3a886ae7618b4d2b05 # Parent a7cf947b8fd36dddaa09f025d7d0ddf1dc21189f Fixed a bad module reference when getting ordered events in the macro. Fixed links written by the action for MoinMoin 1.6.x. Introduced a View class to provide some level of abstraction and to improve the list view. diff -r a7cf947b8fd3 -r 39ce8e50808b actions/EventAggregatorSummary.py --- a/actions/EventAggregatorSummary.py Sat Apr 04 21:08:02 2009 +0200 +++ b/actions/EventAggregatorSummary.py Sat Apr 04 23:27:16 2009 +0200 @@ -192,12 +192,13 @@ # Get the summary details. event_summary = EventAggregatorSupport.getEventSummary(event_page, event_details) + link = request.getQualifiedURL(event_page.url(request, relative=0)) # Output the event details. request.write("BEGIN:VEVENT\r\n") - request.write("UID:%s\r\n" % request.getQualifiedURL(event_page.url(request))) - request.write("URL:%s\r\n" % request.getQualifiedURL(event_page.url(request))) + request.write("UID:%s\r\n" % link) + request.write("URL:%s\r\n" % link) request.write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["created"][:6]) request.write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["last-modified"][:6]) request.write("SEQUENCE:%d\r\n" % event_details["sequence"]) @@ -231,7 +232,7 @@ # Get the summary details. event_summary = EventAggregatorSupport.getEventSummary(event_page, event_details) - link = request.getQualifiedURL(event_page.url(request)) + link = request.getQualifiedURL(event_page.url(request, relative=0)) request.write('\r\n') request.write('%s\r\n' % wikiutil.escape(event_summary)) diff -r a7cf947b8fd3 -r 39ce8e50808b css/event-aggregator.css --- a/css/event-aggregator.css Sat Apr 04 21:08:02 2009 +0200 +++ b/css/event-aggregator.css Sat Apr 04 23:27:16 2009 +0200 @@ -201,10 +201,20 @@ .event-listings-month-heading { border-bottom: 1px solid #999999; + text-align: center; +} + +.event-listings-month-heading .previous-month { + float: left; +} + +.event-listings-month-heading .next-month { + float: right; } .event-month-listings { list-style: disc; + padding-bottom: 2em; } /* vim: tabstop=4 expandtab shiftwidth=4 diff -r a7cf947b8fd3 -r 39ce8e50808b macros/EventAggregator.py --- a/macros/EventAggregator.py Sat Apr 04 21:08:02 2009 +0200 +++ b/macros/EventAggregator.py Sat Apr 04 23:27:16 2009 +0200 @@ -21,6 +21,119 @@ Dependencies = ['pages'] +# Abstractions. + +class View: + + "A view of the event calendar." + + def __init__(self, page, calendar_name, first, last): + + """ + Initialise the view with the current 'page', a 'calendar_name' (which + may be None), and the 'first' and 'last' months. + """ + + self.page = page + self.calendar_name = calendar_name + + if self.calendar_name is not None: + + # Store the view parameters. + + span = EventAggregatorSupport.span(first, last) + self.number_of_months = span[0] * 12 + span[1] + 1 + + self.previous_month_start = EventAggregatorSupport.prevmonth(first) + self.next_month_start = EventAggregatorSupport.nextmonth(first) + self.previous_month_end = EventAggregatorSupport.prevmonth(last) + self.next_month_end = EventAggregatorSupport.nextmonth(last) + + self.previous_set_start = EventAggregatorSupport.monthupdate(first, -self.number_of_months) + self.next_set_start = EventAggregatorSupport.monthupdate(first, self.number_of_months) + self.previous_set_end = EventAggregatorSupport.monthupdate(last, -self.number_of_months) + self.next_set_end = EventAggregatorSupport.monthupdate(last, self.number_of_months) + + def getMonthQueryString(self, argname, month): + if month is not None: + return "%s-%s=%04d-%02d" % ((self.calendar_name, argname) + month) + else: + return "" + + def writeMonthHeading(self, year, month): + page = self.page + request = page.request + fmt = page.formatter + _ = request.getText + + output = [] + + month_label = _(EventAggregatorSupport.getMonthLabel(month)) + + # Prepare navigation links. + + if self.calendar_name is not None: + calendar_name = self.calendar_name + + # Links to the previous set of months and to a calendar shifted + # back one month. + + previous_set_link = "%s&%s" % ( + self.getMonthQueryString("start", self.previous_set_start), + self.getMonthQueryString("end", self.previous_set_end) + ) + previous_month_link = "%s&%s" % ( + self.getMonthQueryString("start", self.previous_month_start), + self.getMonthQueryString("end", self.previous_month_end) + ) + + # Links to the next set of months and to a calendar shifted + # forward one month. + + next_set_link = "%s&%s" % ( + self.getMonthQueryString("start", self.next_set_start), + self.getMonthQueryString("end", self.next_set_end) + ) + next_month_link = "%s&%s" % ( + self.getMonthQueryString("start", self.next_month_start), + self.getMonthQueryString("end", self.next_month_end) + ) + + # A link leading to this month being at the top of the calendar. + + full_month_label = "%s %s" % (month_label, year) + end_month = EventAggregatorSupport.monthupdate((year, month), self.number_of_months - 1) + + month_link = "%s&%s" % ( + self.getMonthQueryString("start", (year, month)), + self.getMonthQueryString("end", end_month) + ) + + output.append(fmt.span(on=1, css_class="previous-month")) + output.append(linkToPage(request, page, "<<", previous_set_link)) + output.append(fmt.text(" ")) + output.append(linkToPage(request, page, "<", previous_month_link)) + output.append(fmt.span(on=0)) + + output.append(fmt.span(on=1, css_class="next-month")) + output.append(linkToPage(request, page, ">", next_month_link)) + output.append(fmt.text(" ")) + output.append(linkToPage(request, page, ">>", next_set_link)) + output.append(fmt.span(on=0)) + + output.append(linkToPage(request, page, full_month_label, month_link)) + + else: + output.append(fmt.span(on=1)) + output.append(fmt.text(month_label)) + output.append(fmt.span(on=0)) + output.append(fmt.text(" ")) + output.append(fmt.span(on=1)) + output.append(fmt.text(unicode(year))) + output.append(fmt.span(on=0)) + + return "".join(output) + # HTML-related functions. def getColour(s): @@ -45,12 +158,6 @@ else: return "" -def getMonthQueryString(calendar_name, argname, month): - if month is not None: - return "%s-%s=%04d-%02d" % ((calendar_name, argname) + month) - else: - return "" - # Macro functions. def execute(macro, args): @@ -133,21 +240,9 @@ first, last = EventAggregatorSupport.getConcretePeriod(calendar_start, calendar_end, earliest, latest) - # Define some useful navigation months. - - if calendar_name is not None: - span = EventAggregatorSupport.span(first, last) - number_of_months = span[0] * 12 + span[1] + 1 + # Define a view of the calendar, retaining useful navigational information. - previous_month_start = EventAggregatorSupport.prevmonth(first) - next_month_start = EventAggregatorSupport.nextmonth(first) - previous_month_end = EventAggregatorSupport.prevmonth(last) - next_month_end = EventAggregatorSupport.nextmonth(last) - - previous_set_start = EventAggregatorSupport.monthupdate(first, -number_of_months) - next_set_start = EventAggregatorSupport.monthupdate(first, number_of_months) - previous_set_end = EventAggregatorSupport.monthupdate(last, -number_of_months) - next_set_end = EventAggregatorSupport.monthupdate(last, number_of_months) + view = View(page, calendar_name, first, last) # Make a calendar. @@ -200,68 +295,10 @@ output.append(fmt.table_row(on=1)) output.append(fmt.table_cell(on=1, attrs={"class" : "event-month-heading", "colspan" : "21"})) - # Either write a month heading or produce a link for navigable + # Either write a month heading or produce links for navigable # calendars. - month_label = _(EventAggregatorSupport.getMonthLabel(month)) - - if calendar_name is not None: - - # Links to the previous set of months and to a calendar shifted - # back one month. - - previous_set_link = "%s&%s" % ( - getMonthQueryString(calendar_name, "start", previous_set_start), - getMonthQueryString(calendar_name, "end", previous_set_end) - ) - previous_month_link = "%s&%s" % ( - getMonthQueryString(calendar_name, "start", previous_month_start), - getMonthQueryString(calendar_name, "end", previous_month_end) - ) - - output.append(fmt.span(on=1, css_class="previous-month")) - output.append(linkToPage(request, page, "<<", previous_set_link)) - output.append(fmt.text(" ")) - output.append(linkToPage(request, page, "<", previous_month_link)) - output.append(fmt.span(on=0)) - - # Links to the next set of months and to a calendar shifted - # forward one month. - - next_set_link = "%s&%s" % ( - getMonthQueryString(calendar_name, "start", next_set_start), - getMonthQueryString(calendar_name, "end", next_set_end) - ) - next_month_link = "%s&%s" % ( - getMonthQueryString(calendar_name, "start", next_month_start), - getMonthQueryString(calendar_name, "end", next_month_end) - ) - - output.append(fmt.span(on=1, css_class="next-month")) - output.append(linkToPage(request, page, ">", next_month_link)) - output.append(fmt.text(" ")) - output.append(linkToPage(request, page, ">>", next_set_link)) - output.append(fmt.span(on=0)) - - # A link leading to this month being at the top of the calendar. - - full_month_label = "%s %s" % (month_label, year) - end_month = EventAggregatorSupport.monthupdate((year, month), number_of_months - 1) - - month_link = "%s&%s" % ( - getMonthQueryString(calendar_name, "start", (year, month)), - getMonthQueryString(calendar_name, "end", end_month) - ) - output.append(linkToPage(request, page, full_month_label, month_link)) - - else: - output.append(fmt.span(on=1)) - output.append(fmt.text(month_label)) - output.append(fmt.span(on=0)) - output.append(fmt.text(" ")) - output.append(fmt.span(on=1)) - output.append(fmt.text(unicode(year))) - output.append(fmt.span(on=0)) + output.append(view.writeMonthHeading(year, month)) output.append(fmt.table_cell(on=0)) output.append(fmt.table_row(on=0)) @@ -582,24 +619,23 @@ elif mode == "list": - month_label = _(EventAggregatorSupport.getMonthLabel(month)) + # Output a list. output.append(fmt.listitem(on=1, attr={"class" : "event-listings-month"})) output.append(fmt.div(on=1, attr={"class" : "event-listings-month-heading"})) - output.append(fmt.span(on=1)) - output.append(fmt.text(month_label)) - output.append(fmt.span(on=0)) - output.append(fmt.text(" ")) - output.append(fmt.span(on=1)) - output.append(fmt.text(unicode(year))) - output.append(fmt.span(on=0)) + + # Either write a month heading or produce links for navigable + # calendars. + + output.append(view.writeMonthHeading(year, month)) + output.append(fmt.div(on=0)) output.append(fmt.bullet_list(on=1, attr={"class" : "event-month-listings"})) # Get the events in order. - ordered_events = EventAggregatorSummary.getOrderedEvents(shown_events.get((year, month), [])) + ordered_events = EventAggregatorSupport.getOrderedEvents(shown_events.get((year, month), [])) # Show the events in order.