3.1 --- a/macros/EventAggregator.py Sat Apr 04 21:08:02 2009 +0200
3.2 +++ b/macros/EventAggregator.py Sat Apr 04 23:27:16 2009 +0200
3.3 @@ -21,6 +21,119 @@
3.4
3.5 Dependencies = ['pages']
3.6
3.7 +# Abstractions.
3.8 +
3.9 +class View:
3.10 +
3.11 + "A view of the event calendar."
3.12 +
3.13 + def __init__(self, page, calendar_name, first, last):
3.14 +
3.15 + """
3.16 + Initialise the view with the current 'page', a 'calendar_name' (which
3.17 + may be None), and the 'first' and 'last' months.
3.18 + """
3.19 +
3.20 + self.page = page
3.21 + self.calendar_name = calendar_name
3.22 +
3.23 + if self.calendar_name is not None:
3.24 +
3.25 + # Store the view parameters.
3.26 +
3.27 + span = EventAggregatorSupport.span(first, last)
3.28 + self.number_of_months = span[0] * 12 + span[1] + 1
3.29 +
3.30 + self.previous_month_start = EventAggregatorSupport.prevmonth(first)
3.31 + self.next_month_start = EventAggregatorSupport.nextmonth(first)
3.32 + self.previous_month_end = EventAggregatorSupport.prevmonth(last)
3.33 + self.next_month_end = EventAggregatorSupport.nextmonth(last)
3.34 +
3.35 + self.previous_set_start = EventAggregatorSupport.monthupdate(first, -self.number_of_months)
3.36 + self.next_set_start = EventAggregatorSupport.monthupdate(first, self.number_of_months)
3.37 + self.previous_set_end = EventAggregatorSupport.monthupdate(last, -self.number_of_months)
3.38 + self.next_set_end = EventAggregatorSupport.monthupdate(last, self.number_of_months)
3.39 +
3.40 + def getMonthQueryString(self, argname, month):
3.41 + if month is not None:
3.42 + return "%s-%s=%04d-%02d" % ((self.calendar_name, argname) + month)
3.43 + else:
3.44 + return ""
3.45 +
3.46 + def writeMonthHeading(self, year, month):
3.47 + page = self.page
3.48 + request = page.request
3.49 + fmt = page.formatter
3.50 + _ = request.getText
3.51 +
3.52 + output = []
3.53 +
3.54 + month_label = _(EventAggregatorSupport.getMonthLabel(month))
3.55 +
3.56 + # Prepare navigation links.
3.57 +
3.58 + if self.calendar_name is not None:
3.59 + calendar_name = self.calendar_name
3.60 +
3.61 + # Links to the previous set of months and to a calendar shifted
3.62 + # back one month.
3.63 +
3.64 + previous_set_link = "%s&%s" % (
3.65 + self.getMonthQueryString("start", self.previous_set_start),
3.66 + self.getMonthQueryString("end", self.previous_set_end)
3.67 + )
3.68 + previous_month_link = "%s&%s" % (
3.69 + self.getMonthQueryString("start", self.previous_month_start),
3.70 + self.getMonthQueryString("end", self.previous_month_end)
3.71 + )
3.72 +
3.73 + # Links to the next set of months and to a calendar shifted
3.74 + # forward one month.
3.75 +
3.76 + next_set_link = "%s&%s" % (
3.77 + self.getMonthQueryString("start", self.next_set_start),
3.78 + self.getMonthQueryString("end", self.next_set_end)
3.79 + )
3.80 + next_month_link = "%s&%s" % (
3.81 + self.getMonthQueryString("start", self.next_month_start),
3.82 + self.getMonthQueryString("end", self.next_month_end)
3.83 + )
3.84 +
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 + end_month = EventAggregatorSupport.monthupdate((year, month), self.number_of_months - 1)
3.89 +
3.90 + month_link = "%s&%s" % (
3.91 + self.getMonthQueryString("start", (year, month)),
3.92 + self.getMonthQueryString("end", end_month)
3.93 + )
3.94 +
3.95 + output.append(fmt.span(on=1, css_class="previous-month"))
3.96 + output.append(linkToPage(request, page, "<<", previous_set_link))
3.97 + output.append(fmt.text(" "))
3.98 + output.append(linkToPage(request, page, "<", previous_month_link))
3.99 + output.append(fmt.span(on=0))
3.100 +
3.101 + output.append(fmt.span(on=1, css_class="next-month"))
3.102 + output.append(linkToPage(request, page, ">", next_month_link))
3.103 + output.append(fmt.text(" "))
3.104 + output.append(linkToPage(request, page, ">>", next_set_link))
3.105 + output.append(fmt.span(on=0))
3.106 +
3.107 + output.append(linkToPage(request, page, full_month_label, month_link))
3.108 +
3.109 + else:
3.110 + output.append(fmt.span(on=1))
3.111 + output.append(fmt.text(month_label))
3.112 + output.append(fmt.span(on=0))
3.113 + output.append(fmt.text(" "))
3.114 + output.append(fmt.span(on=1))
3.115 + output.append(fmt.text(unicode(year)))
3.116 + output.append(fmt.span(on=0))
3.117 +
3.118 + return "".join(output)
3.119 +
3.120 # HTML-related functions.
3.121
3.122 def getColour(s):
3.123 @@ -45,12 +158,6 @@
3.124 else:
3.125 return ""
3.126
3.127 -def getMonthQueryString(calendar_name, argname, month):
3.128 - if month is not None:
3.129 - return "%s-%s=%04d-%02d" % ((calendar_name, argname) + month)
3.130 - else:
3.131 - return ""
3.132 -
3.133 # Macro functions.
3.134
3.135 def execute(macro, args):
3.136 @@ -133,21 +240,9 @@
3.137
3.138 first, last = EventAggregatorSupport.getConcretePeriod(calendar_start, calendar_end, earliest, latest)
3.139
3.140 - # Define some useful navigation months.
3.141 -
3.142 - if calendar_name is not None:
3.143 - span = EventAggregatorSupport.span(first, last)
3.144 - number_of_months = span[0] * 12 + span[1] + 1
3.145 + # Define a view of the calendar, retaining useful navigational information.
3.146
3.147 - previous_month_start = EventAggregatorSupport.prevmonth(first)
3.148 - next_month_start = EventAggregatorSupport.nextmonth(first)
3.149 - previous_month_end = EventAggregatorSupport.prevmonth(last)
3.150 - next_month_end = EventAggregatorSupport.nextmonth(last)
3.151 -
3.152 - previous_set_start = EventAggregatorSupport.monthupdate(first, -number_of_months)
3.153 - next_set_start = EventAggregatorSupport.monthupdate(first, number_of_months)
3.154 - previous_set_end = EventAggregatorSupport.monthupdate(last, -number_of_months)
3.155 - next_set_end = EventAggregatorSupport.monthupdate(last, number_of_months)
3.156 + view = View(page, calendar_name, first, last)
3.157
3.158 # Make a calendar.
3.159
3.160 @@ -200,68 +295,10 @@
3.161 output.append(fmt.table_row(on=1))
3.162 output.append(fmt.table_cell(on=1, attrs={"class" : "event-month-heading", "colspan" : "21"}))
3.163
3.164 - # Either write a month heading or produce a link for navigable
3.165 + # Either write a month heading or produce links for navigable
3.166 # calendars.
3.167
3.168 - month_label = _(EventAggregatorSupport.getMonthLabel(month))
3.169 -
3.170 - if calendar_name is not None:
3.171 -
3.172 - # Links to the previous set of months and to a calendar shifted
3.173 - # back one month.
3.174 -
3.175 - previous_set_link = "%s&%s" % (
3.176 - getMonthQueryString(calendar_name, "start", previous_set_start),
3.177 - getMonthQueryString(calendar_name, "end", previous_set_end)
3.178 - )
3.179 - previous_month_link = "%s&%s" % (
3.180 - getMonthQueryString(calendar_name, "start", previous_month_start),
3.181 - getMonthQueryString(calendar_name, "end", previous_month_end)
3.182 - )
3.183 -
3.184 - output.append(fmt.span(on=1, css_class="previous-month"))
3.185 - output.append(linkToPage(request, page, "<<", previous_set_link))
3.186 - output.append(fmt.text(" "))
3.187 - output.append(linkToPage(request, page, "<", previous_month_link))
3.188 - output.append(fmt.span(on=0))
3.189 -
3.190 - # Links to the next set of months and to a calendar shifted
3.191 - # forward one month.
3.192 -
3.193 - next_set_link = "%s&%s" % (
3.194 - getMonthQueryString(calendar_name, "start", next_set_start),
3.195 - getMonthQueryString(calendar_name, "end", next_set_end)
3.196 - )
3.197 - next_month_link = "%s&%s" % (
3.198 - getMonthQueryString(calendar_name, "start", next_month_start),
3.199 - getMonthQueryString(calendar_name, "end", next_month_end)
3.200 - )
3.201 -
3.202 - output.append(fmt.span(on=1, css_class="next-month"))
3.203 - output.append(linkToPage(request, page, ">", next_month_link))
3.204 - output.append(fmt.text(" "))
3.205 - output.append(linkToPage(request, page, ">>", next_set_link))
3.206 - output.append(fmt.span(on=0))
3.207 -
3.208 - # A link leading to this month being at the top of the calendar.
3.209 -
3.210 - full_month_label = "%s %s" % (month_label, year)
3.211 - end_month = EventAggregatorSupport.monthupdate((year, month), number_of_months - 1)
3.212 -
3.213 - month_link = "%s&%s" % (
3.214 - getMonthQueryString(calendar_name, "start", (year, month)),
3.215 - getMonthQueryString(calendar_name, "end", end_month)
3.216 - )
3.217 - output.append(linkToPage(request, page, full_month_label, month_link))
3.218 -
3.219 - else:
3.220 - output.append(fmt.span(on=1))
3.221 - output.append(fmt.text(month_label))
3.222 - output.append(fmt.span(on=0))
3.223 - output.append(fmt.text(" "))
3.224 - output.append(fmt.span(on=1))
3.225 - output.append(fmt.text(unicode(year)))
3.226 - output.append(fmt.span(on=0))
3.227 + output.append(view.writeMonthHeading(year, month))
3.228
3.229 output.append(fmt.table_cell(on=0))
3.230 output.append(fmt.table_row(on=0))
3.231 @@ -582,24 +619,23 @@
3.232
3.233 elif mode == "list":
3.234
3.235 - month_label = _(EventAggregatorSupport.getMonthLabel(month))
3.236 + # Output a list.
3.237
3.238 output.append(fmt.listitem(on=1, attr={"class" : "event-listings-month"}))
3.239 output.append(fmt.div(on=1, attr={"class" : "event-listings-month-heading"}))
3.240 - output.append(fmt.span(on=1))
3.241 - output.append(fmt.text(month_label))
3.242 - output.append(fmt.span(on=0))
3.243 - output.append(fmt.text(" "))
3.244 - output.append(fmt.span(on=1))
3.245 - output.append(fmt.text(unicode(year)))
3.246 - output.append(fmt.span(on=0))
3.247 +
3.248 + # Either write a month heading or produce links for navigable
3.249 + # calendars.
3.250 +
3.251 + output.append(view.writeMonthHeading(year, month))
3.252 +
3.253 output.append(fmt.div(on=0))
3.254
3.255 output.append(fmt.bullet_list(on=1, attr={"class" : "event-month-listings"}))
3.256
3.257 # Get the events in order.
3.258
3.259 - ordered_events = EventAggregatorSummary.getOrderedEvents(shown_events.get((year, month), []))
3.260 + ordered_events = EventAggregatorSupport.getOrderedEvents(shown_events.get((year, month), []))
3.261
3.262 # Show the events in order.
3.263