1.1 --- a/EventAggregatorSupport.py Mon Jun 18 01:09:14 2012 +0200
1.2 +++ b/EventAggregatorSupport.py Tue Jul 10 23:55:53 2012 +0200
1.3 @@ -1712,12 +1712,14 @@
1.4
1.5 def _getCalendarPeriod(self, start_label, end_label, default_label):
1.6 output = []
1.7 + append = output.append
1.8 +
1.9 if start_label:
1.10 - output.append(start_label)
1.11 + append(start_label)
1.12 if end_label and start_label != end_label:
1.13 if output:
1.14 - output.append(" - ")
1.15 - output.append(end_label)
1.16 + append(" - ")
1.17 + append(end_label)
1.18 return "".join(output) or default_label
1.19
1.20 def getCalendarPeriod(self):
1.21 @@ -1757,6 +1759,7 @@
1.22 _ = request.getText
1.23
1.24 output = []
1.25 + append = output.append
1.26
1.27 # The full URL is needed for webcal links.
1.28
1.29 @@ -1813,95 +1816,95 @@
1.30
1.31 # Download controls.
1.32
1.33 - output.append(fmt.div(on=1, css_class="event-download-controls"))
1.34 -
1.35 - output.append(fmt.span(on=1, css_class="event-download"))
1.36 - output.append(fmt.text(_("Download...")))
1.37 - output.append(fmt.div(on=1, css_class="event-download-popup"))
1.38 -
1.39 - output.append(fmt.div(on=1, css_class="event-download-item"))
1.40 - output.append(fmt.span(on=1, css_class="event-download-types"))
1.41 - output.append(fmt.span(on=1, css_class="event-download-webcal"))
1.42 - output.append(linkToResource(full_url.replace("http", "webcal", 1), request, _("webcal"), download_link))
1.43 - output.append(fmt.span(on=0))
1.44 - output.append(fmt.span(on=1, css_class="event-download-http"))
1.45 - output.append(linkToPage(request, page, _("http"), download_link))
1.46 - output.append(fmt.span(on=0))
1.47 - output.append(fmt.span(on=0)) # end types
1.48 - output.append(fmt.span(on=1, css_class="event-download-label"))
1.49 - output.append(fmt.text(_("Download this view")))
1.50 - output.append(fmt.span(on=0)) # end label
1.51 - output.append(fmt.span(on=1, css_class="event-download-period"))
1.52 - output.append(fmt.text(calendar_period))
1.53 - output.append(fmt.span(on=0))
1.54 - output.append(fmt.div(on=0))
1.55 -
1.56 - output.append(fmt.div(on=1, css_class="event-download-item"))
1.57 - output.append(fmt.span(on=1, css_class="event-download-types"))
1.58 - output.append(fmt.span(on=1, css_class="event-download-webcal"))
1.59 - output.append(linkToResource(full_url.replace("http", "webcal", 1), request, _("webcal"), download_all_link))
1.60 - output.append(fmt.span(on=0))
1.61 - output.append(fmt.span(on=1, css_class="event-download-http"))
1.62 - output.append(linkToPage(request, page, _("http"), download_all_link))
1.63 - output.append(fmt.span(on=0))
1.64 - output.append(fmt.span(on=0)) # end types
1.65 - output.append(fmt.span(on=1, css_class="event-download-label"))
1.66 - output.append(fmt.text(_("Download this calendar")))
1.67 - output.append(fmt.span(on=0)) # end label
1.68 - output.append(fmt.span(on=1, css_class="event-download-period"))
1.69 - output.append(fmt.text(original_calendar_period))
1.70 - output.append(fmt.span(on=0))
1.71 - output.append(fmt.span(on=1, css_class="event-download-period-raw"))
1.72 - output.append(fmt.text(raw_calendar_period))
1.73 - output.append(fmt.span(on=0))
1.74 - output.append(fmt.div(on=0))
1.75 -
1.76 - output.append(fmt.div(on=1, css_class="event-download-item"))
1.77 - output.append(fmt.span(on=1, css_class="event-download-link"))
1.78 - output.append(linkToPage(request, page, _("Edit download options..."), download_dialogue_link))
1.79 - output.append(fmt.span(on=0)) # end label
1.80 - output.append(fmt.div(on=0))
1.81 -
1.82 - output.append(fmt.div(on=0)) # end of pop-up
1.83 - output.append(fmt.span(on=0)) # end of download
1.84 + append(fmt.div(on=1, css_class="event-download-controls"))
1.85 +
1.86 + append(fmt.span(on=1, css_class="event-download"))
1.87 + append(fmt.text(_("Download...")))
1.88 + append(fmt.div(on=1, css_class="event-download-popup"))
1.89 +
1.90 + append(fmt.div(on=1, css_class="event-download-item"))
1.91 + append(fmt.span(on=1, css_class="event-download-types"))
1.92 + append(fmt.span(on=1, css_class="event-download-webcal"))
1.93 + append(linkToResource(full_url.replace("http", "webcal", 1), request, _("webcal"), download_link))
1.94 + append(fmt.span(on=0))
1.95 + append(fmt.span(on=1, css_class="event-download-http"))
1.96 + append(linkToPage(request, page, _("http"), download_link))
1.97 + append(fmt.span(on=0))
1.98 + append(fmt.span(on=0)) # end types
1.99 + append(fmt.span(on=1, css_class="event-download-label"))
1.100 + append(fmt.text(_("Download this view")))
1.101 + append(fmt.span(on=0)) # end label
1.102 + append(fmt.span(on=1, css_class="event-download-period"))
1.103 + append(fmt.text(calendar_period))
1.104 + append(fmt.span(on=0))
1.105 + append(fmt.div(on=0))
1.106 +
1.107 + append(fmt.div(on=1, css_class="event-download-item"))
1.108 + append(fmt.span(on=1, css_class="event-download-types"))
1.109 + append(fmt.span(on=1, css_class="event-download-webcal"))
1.110 + append(linkToResource(full_url.replace("http", "webcal", 1), request, _("webcal"), download_all_link))
1.111 + append(fmt.span(on=0))
1.112 + append(fmt.span(on=1, css_class="event-download-http"))
1.113 + append(linkToPage(request, page, _("http"), download_all_link))
1.114 + append(fmt.span(on=0))
1.115 + append(fmt.span(on=0)) # end types
1.116 + append(fmt.span(on=1, css_class="event-download-label"))
1.117 + append(fmt.text(_("Download this calendar")))
1.118 + append(fmt.span(on=0)) # end label
1.119 + append(fmt.span(on=1, css_class="event-download-period"))
1.120 + append(fmt.text(original_calendar_period))
1.121 + append(fmt.span(on=0))
1.122 + append(fmt.span(on=1, css_class="event-download-period-raw"))
1.123 + append(fmt.text(raw_calendar_period))
1.124 + append(fmt.span(on=0))
1.125 + append(fmt.div(on=0))
1.126 +
1.127 + append(fmt.div(on=1, css_class="event-download-item"))
1.128 + append(fmt.span(on=1, css_class="event-download-link"))
1.129 + append(linkToPage(request, page, _("Edit download options..."), download_dialogue_link))
1.130 + append(fmt.span(on=0)) # end label
1.131 + append(fmt.div(on=0))
1.132 +
1.133 + append(fmt.div(on=0)) # end of pop-up
1.134 + append(fmt.span(on=0)) # end of download
1.135
1.136 # Subscription controls.
1.137
1.138 - output.append(fmt.span(on=1, css_class="event-download"))
1.139 - output.append(fmt.text(_("Subscribe...")))
1.140 - output.append(fmt.div(on=1, css_class="event-download-popup"))
1.141 -
1.142 - output.append(fmt.div(on=1, css_class="event-download-item"))
1.143 - output.append(fmt.span(on=1, css_class="event-download-label"))
1.144 - output.append(linkToPage(request, page, _("Subscribe to this view"), subscribe_link))
1.145 - output.append(fmt.span(on=0)) # end label
1.146 - output.append(fmt.span(on=1, css_class="event-download-period"))
1.147 - output.append(fmt.text(calendar_period))
1.148 - output.append(fmt.span(on=0))
1.149 - output.append(fmt.div(on=0))
1.150 -
1.151 - output.append(fmt.div(on=1, css_class="event-download-item"))
1.152 - output.append(fmt.span(on=1, css_class="event-download-label"))
1.153 - output.append(linkToPage(request, page, _("Subscribe to this calendar"), subscribe_all_link))
1.154 - output.append(fmt.span(on=0)) # end label
1.155 - output.append(fmt.span(on=1, css_class="event-download-period"))
1.156 - output.append(fmt.text(original_calendar_period))
1.157 - output.append(fmt.span(on=0))
1.158 - output.append(fmt.span(on=1, css_class="event-download-period-raw"))
1.159 - output.append(fmt.text(raw_calendar_period))
1.160 - output.append(fmt.span(on=0))
1.161 - output.append(fmt.div(on=0))
1.162 -
1.163 - output.append(fmt.div(on=1, css_class="event-download-item"))
1.164 - output.append(fmt.span(on=1, css_class="event-download-link"))
1.165 - output.append(linkToPage(request, page, _("Edit subscription options..."), subscribe_dialogue_link))
1.166 - output.append(fmt.span(on=0)) # end label
1.167 - output.append(fmt.div(on=0))
1.168 -
1.169 - output.append(fmt.div(on=0)) # end of pop-up
1.170 - output.append(fmt.span(on=0)) # end of download
1.171 -
1.172 - output.append(fmt.div(on=0)) # end of controls
1.173 + append(fmt.span(on=1, css_class="event-download"))
1.174 + append(fmt.text(_("Subscribe...")))
1.175 + append(fmt.div(on=1, css_class="event-download-popup"))
1.176 +
1.177 + append(fmt.div(on=1, css_class="event-download-item"))
1.178 + append(fmt.span(on=1, css_class="event-download-label"))
1.179 + append(linkToPage(request, page, _("Subscribe to this view"), subscribe_link))
1.180 + append(fmt.span(on=0)) # end label
1.181 + append(fmt.span(on=1, css_class="event-download-period"))
1.182 + append(fmt.text(calendar_period))
1.183 + append(fmt.span(on=0))
1.184 + append(fmt.div(on=0))
1.185 +
1.186 + append(fmt.div(on=1, css_class="event-download-item"))
1.187 + append(fmt.span(on=1, css_class="event-download-label"))
1.188 + append(linkToPage(request, page, _("Subscribe to this calendar"), subscribe_all_link))
1.189 + append(fmt.span(on=0)) # end label
1.190 + append(fmt.span(on=1, css_class="event-download-period"))
1.191 + append(fmt.text(original_calendar_period))
1.192 + append(fmt.span(on=0))
1.193 + append(fmt.span(on=1, css_class="event-download-period-raw"))
1.194 + append(fmt.text(raw_calendar_period))
1.195 + append(fmt.span(on=0))
1.196 + append(fmt.div(on=0))
1.197 +
1.198 + append(fmt.div(on=1, css_class="event-download-item"))
1.199 + append(fmt.span(on=1, css_class="event-download-link"))
1.200 + append(linkToPage(request, page, _("Edit subscription options..."), subscribe_dialogue_link))
1.201 + append(fmt.span(on=0)) # end label
1.202 + append(fmt.div(on=0))
1.203 +
1.204 + append(fmt.div(on=0)) # end of pop-up
1.205 + append(fmt.span(on=0)) # end of download
1.206 +
1.207 + append(fmt.div(on=0)) # end of controls
1.208
1.209 return "".join(output)
1.210
1.211 @@ -1918,6 +1921,7 @@
1.212 _ = request.getText
1.213
1.214 output = []
1.215 + append = output.append
1.216
1.217 start = self.calendar_start
1.218 end = self.calendar_end
1.219 @@ -1935,37 +1939,37 @@
1.220
1.221 # Write the controls.
1.222
1.223 - output.append(fmt.div(on=1, css_class="event-view-controls"))
1.224 -
1.225 - output.append(fmt.span(on=1, css_class="event-view"))
1.226 - output.append(linkToPage(request, help_page, _("Help")))
1.227 - output.append(fmt.span(on=0))
1.228 -
1.229 - output.append(fmt.span(on=1, css_class="event-view"))
1.230 - output.append(linkToPage(request, page, _("New event"), new_event_link))
1.231 - output.append(fmt.span(on=0))
1.232 + append(fmt.div(on=1, css_class="event-view-controls"))
1.233 +
1.234 + append(fmt.span(on=1, css_class="event-view"))
1.235 + append(linkToPage(request, help_page, _("Help")))
1.236 + append(fmt.span(on=0))
1.237 +
1.238 + append(fmt.span(on=1, css_class="event-view"))
1.239 + append(linkToPage(request, page, _("New event"), new_event_link))
1.240 + append(fmt.span(on=0))
1.241
1.242 if self.mode != "calendar":
1.243 - output.append(fmt.span(on=1, css_class="event-view"))
1.244 - output.append(linkToPage(request, page, _("View as calendar"), calendar_link, onclick=calendar_update_link))
1.245 - output.append(fmt.span(on=0))
1.246 + append(fmt.span(on=1, css_class="event-view"))
1.247 + append(linkToPage(request, page, _("View as calendar"), calendar_link, onclick=calendar_update_link))
1.248 + append(fmt.span(on=0))
1.249
1.250 if self.mode != "list":
1.251 - output.append(fmt.span(on=1, css_class="event-view"))
1.252 - output.append(linkToPage(request, page, _("View as list"), list_link, onclick=list_update_link))
1.253 - output.append(fmt.span(on=0))
1.254 + append(fmt.span(on=1, css_class="event-view"))
1.255 + append(linkToPage(request, page, _("View as list"), list_link, onclick=list_update_link))
1.256 + append(fmt.span(on=0))
1.257
1.258 if self.mode != "table":
1.259 - output.append(fmt.span(on=1, css_class="event-view"))
1.260 - output.append(linkToPage(request, page, _("View as table"), table_link, onclick=table_update_link))
1.261 - output.append(fmt.span(on=0))
1.262 + append(fmt.span(on=1, css_class="event-view"))
1.263 + append(linkToPage(request, page, _("View as table"), table_link, onclick=table_update_link))
1.264 + append(fmt.span(on=0))
1.265
1.266 if self.mode != "map" and self.map_name:
1.267 - output.append(fmt.span(on=1, css_class="event-view"))
1.268 - output.append(linkToPage(request, page, _("View as map"), map_link, onclick=map_update_link))
1.269 - output.append(fmt.span(on=0))
1.270 -
1.271 - output.append(fmt.div(on=0))
1.272 + append(fmt.span(on=1, css_class="event-view"))
1.273 + append(linkToPage(request, page, _("View as map"), map_link, onclick=map_update_link))
1.274 + append(fmt.span(on=0))
1.275 +
1.276 + append(fmt.div(on=0))
1.277
1.278 return "".join(output)
1.279
1.280 @@ -1981,9 +1985,10 @@
1.281 if self.raw_calendar_start is None or self.raw_calendar_end is None:
1.282 fmt = self.page.request.formatter
1.283 output = []
1.284 - output.append(fmt.span(on=1))
1.285 - output.append(fmt.text(label))
1.286 - output.append(fmt.span(on=0))
1.287 + append = output.append
1.288 + append(fmt.span(on=1))
1.289 + append(fmt.text(label))
1.290 + append(fmt.span(on=0))
1.291 return "".join(output)
1.292 else:
1.293 return self._writeCalendarHeading(label, self.calendar_start, self.calendar_end)
1.294 @@ -2030,6 +2035,7 @@
1.295 _ = request.getText
1.296
1.297 output = []
1.298 + append = output.append
1.299
1.300 # Prepare navigation links.
1.301
1.302 @@ -2073,24 +2079,24 @@
1.303 date_link = self.getNavigationLink(start, end)
1.304 date_update_link = self.getUpdateLink(start, end)
1.305
1.306 - output.append(fmt.span(on=1, css_class="previous"))
1.307 - output.append(linkToPage(request, page, "<<", previous_set_link, onclick=previous_set_update_link))
1.308 - output.append(fmt.text(" "))
1.309 - output.append(linkToPage(request, page, "<", previous_link, onclick=previous_update_link))
1.310 - output.append(fmt.span(on=0))
1.311 -
1.312 - output.append(fmt.span(on=1, css_class="next"))
1.313 - output.append(linkToPage(request, page, ">", next_link, onclick=next_update_link))
1.314 - output.append(fmt.text(" "))
1.315 - output.append(linkToPage(request, page, ">>", next_set_link, onclick=next_set_update_link))
1.316 - output.append(fmt.span(on=0))
1.317 -
1.318 - output.append(linkToPage(request, page, label, date_link, onclick=date_update_link))
1.319 + append(fmt.span(on=1, css_class="previous"))
1.320 + append(linkToPage(request, page, "<<", previous_set_link, onclick=previous_set_update_link))
1.321 + append(fmt.text(" "))
1.322 + append(linkToPage(request, page, "<", previous_link, onclick=previous_update_link))
1.323 + append(fmt.span(on=0))
1.324 +
1.325 + append(fmt.span(on=1, css_class="next"))
1.326 + append(linkToPage(request, page, ">", next_link, onclick=next_update_link))
1.327 + append(fmt.text(" "))
1.328 + append(linkToPage(request, page, ">>", next_set_link, onclick=next_set_update_link))
1.329 + append(fmt.span(on=0))
1.330 +
1.331 + append(linkToPage(request, page, label, date_link, onclick=date_update_link))
1.332
1.333 else:
1.334 - output.append(fmt.span(on=1))
1.335 - output.append(fmt.text(label))
1.336 - output.append(fmt.span(on=0))
1.337 + append(fmt.span(on=1))
1.338 + append(fmt.text(label))
1.339 + append(fmt.span(on=0))
1.340
1.341 return "".join(output)
1.342
1.343 @@ -2108,6 +2114,7 @@
1.344 _ = request.getText
1.345
1.346 output = []
1.347 + append = output.append
1.348
1.349 year, month, day = date.as_tuple()
1.350 new_event_link = self.getNewEventLink(date)
1.351 @@ -2119,7 +2126,7 @@
1.352
1.353 # Output the heading class.
1.354
1.355 - output.append(
1.356 + append(
1.357 fmt.table_cell(on=1, attrs={
1.358 "class" : "event-day-heading event-day-%s" % (busy and "busy" or "empty"),
1.359 "colspan" : "3"
1.360 @@ -2127,26 +2134,26 @@
1.361
1.362 # Output the number and pop-up menu.
1.363
1.364 - output.append(fmt.div(on=1, css_class="event-day-box"))
1.365 -
1.366 - output.append(fmt.span(on=1, css_class="event-day-number-popup"))
1.367 - output.append(fmt.span(on=1, css_class="event-day-number-link"))
1.368 - output.append(linkToPage(request, page, _("View day"), day_view_link, onclick=day_view_update_link))
1.369 - output.append(fmt.span(on=0))
1.370 - output.append(fmt.span(on=1, css_class="event-day-number-link"))
1.371 - output.append(linkToPage(request, page, _("New event"), new_event_link))
1.372 - output.append(fmt.span(on=0))
1.373 - output.append(fmt.span(on=0))
1.374 -
1.375 - output.append(fmt.span(on=1, css_class="event-day-number"))
1.376 - output.append(fmt.text(unicode(day)))
1.377 - output.append(fmt.span(on=0))
1.378 -
1.379 - output.append(fmt.div(on=0))
1.380 + append(fmt.div(on=1, css_class="event-day-box"))
1.381 +
1.382 + append(fmt.span(on=1, css_class="event-day-number-popup"))
1.383 + append(fmt.span(on=1, css_class="event-day-number-link"))
1.384 + append(linkToPage(request, page, _("View day"), day_view_link, onclick=day_view_update_link))
1.385 + append(fmt.span(on=0))
1.386 + append(fmt.span(on=1, css_class="event-day-number-link"))
1.387 + append(linkToPage(request, page, _("New event"), new_event_link))
1.388 + append(fmt.span(on=0))
1.389 + append(fmt.span(on=0))
1.390 +
1.391 + append(fmt.span(on=1, css_class="event-day-number"))
1.392 + append(fmt.text(unicode(day)))
1.393 + append(fmt.span(on=0))
1.394 +
1.395 + append(fmt.div(on=0))
1.396
1.397 # End of heading.
1.398
1.399 - output.append(fmt.table_cell(on=0))
1.400 + append(fmt.table_cell(on=0))
1.401
1.402 return "".join(output)
1.403
1.404 @@ -2169,6 +2176,7 @@
1.405 fmt = request.formatter
1.406
1.407 output = []
1.408 + append = output.append
1.409
1.410 event_details = event.getDetails()
1.411 event_summary = event.getSummary(self.parent_name)
1.412 @@ -2179,26 +2187,26 @@
1.413 # The event box contains the summary, alongside
1.414 # other elements.
1.415
1.416 - output.append(fmt.div(on=1, css_class="event-summary-box"))
1.417 - output.append(fmt.div(on=1, css_class="event-summary", style=style))
1.418 + append(fmt.div(on=1, css_class="event-summary-box"))
1.419 + append(fmt.div(on=1, css_class="event-summary", style=style))
1.420
1.421 if is_ambiguous:
1.422 - output.append(fmt.icon("/!\\"))
1.423 -
1.424 - output.append(event.linkToEvent(request, event_summary))
1.425 - output.append(fmt.div(on=0))
1.426 + append(fmt.icon("/!\\"))
1.427 +
1.428 + append(event.linkToEvent(request, event_summary))
1.429 + append(fmt.div(on=0))
1.430
1.431 # Add a pop-up element for long summaries.
1.432
1.433 - output.append(fmt.div(on=1, css_class="event-summary-popup", style=style))
1.434 + append(fmt.div(on=1, css_class="event-summary-popup", style=style))
1.435
1.436 if is_ambiguous:
1.437 - output.append(fmt.icon("/!\\"))
1.438 -
1.439 - output.append(event.linkToEvent(request, event_summary))
1.440 - output.append(fmt.div(on=0))
1.441 -
1.442 - output.append(fmt.div(on=0))
1.443 + append(fmt.icon("/!\\"))
1.444 +
1.445 + append(event.linkToEvent(request, event_summary))
1.446 + append(fmt.div(on=0))
1.447 +
1.448 + append(fmt.div(on=0))
1.449
1.450 return "".join(output)
1.451
1.452 @@ -2209,13 +2217,15 @@
1.453 fmt = page.request.formatter
1.454
1.455 output = []
1.456 - output.append(fmt.table_row(on=1))
1.457 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-month-heading", "colspan" : "21"}))
1.458 -
1.459 - output.append(self.writeMonthHeading(year_month))
1.460 -
1.461 - output.append(fmt.table_cell(on=0))
1.462 - output.append(fmt.table_row(on=0))
1.463 + append = output.append
1.464 +
1.465 + append(fmt.table_row(on=1))
1.466 + append(fmt.table_cell(on=1, attrs={"class" : "event-month-heading", "colspan" : "21"}))
1.467 +
1.468 + append(self.writeMonthHeading(year_month))
1.469 +
1.470 + append(fmt.table_cell(on=0))
1.471 + append(fmt.table_row(on=0))
1.472
1.473 return "".join(output)
1.474
1.475 @@ -2226,14 +2236,16 @@
1.476 _ = request.getText
1.477
1.478 output = []
1.479 - output.append(fmt.table_row(on=1))
1.480 + append = output.append
1.481 +
1.482 + append(fmt.table_row(on=1))
1.483
1.484 for weekday in range(0, 7):
1.485 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-weekday-heading", "colspan" : "3"}))
1.486 - output.append(fmt.text(_(getDayLabel(weekday))))
1.487 - output.append(fmt.table_cell(on=0))
1.488 -
1.489 - output.append(fmt.table_row(on=0))
1.490 + append(fmt.table_cell(on=1, attrs={"class" : "event-weekday-heading", "colspan" : "3"}))
1.491 + append(fmt.text(_(getDayLabel(weekday))))
1.492 + append(fmt.table_cell(on=0))
1.493 +
1.494 + append(fmt.table_row(on=0))
1.495 return "".join(output)
1.496
1.497 def writeDayNumbers(self, first_day, number_of_days, month, coverage):
1.498 @@ -2241,7 +2253,9 @@
1.499 fmt = page.request.formatter
1.500
1.501 output = []
1.502 - output.append(fmt.table_row(on=1))
1.503 + append = output.append
1.504 +
1.505 + append(fmt.table_row(on=1))
1.506
1.507 for weekday in range(0, 7):
1.508 day = first_day + weekday
1.509 @@ -2250,9 +2264,9 @@
1.510 # Output out-of-month days.
1.511
1.512 if day < 1 or day > number_of_days:
1.513 - output.append(fmt.table_cell(on=1,
1.514 + append(fmt.table_cell(on=1,
1.515 attrs={"class" : "event-day-heading event-day-excluded", "colspan" : "3"}))
1.516 - output.append(fmt.table_cell(on=0))
1.517 + append(fmt.table_cell(on=0))
1.518
1.519 # Output normal days.
1.520
1.521 @@ -2260,11 +2274,11 @@
1.522 # Output the day heading, making a link to a new event
1.523 # action.
1.524
1.525 - output.append(self.writeDayNumberHeading(date, date in coverage))
1.526 + append(self.writeDayNumberHeading(date, date in coverage))
1.527
1.528 # End of day numbers.
1.529
1.530 - output.append(fmt.table_row(on=0))
1.531 + append(fmt.table_row(on=0))
1.532 return "".join(output)
1.533
1.534 def writeEmptyWeek(self, first_day, number_of_days):
1.535 @@ -2272,7 +2286,9 @@
1.536 fmt = page.request.formatter
1.537
1.538 output = []
1.539 - output.append(fmt.table_row(on=1))
1.540 + append = output.append
1.541 +
1.542 + append(fmt.table_row(on=1))
1.543
1.544 for weekday in range(0, 7):
1.545 day = first_day + weekday
1.546 @@ -2280,21 +2296,22 @@
1.547 # Output out-of-month days.
1.548
1.549 if day < 1 or day > number_of_days:
1.550 - output.append(fmt.table_cell(on=1,
1.551 + append(fmt.table_cell(on=1,
1.552 attrs={"class" : "event-day-content event-day-excluded", "colspan" : "3"}))
1.553 - output.append(fmt.table_cell(on=0))
1.554 + append(fmt.table_cell(on=0))
1.555
1.556 # Output empty days.
1.557
1.558 else:
1.559 - output.append(fmt.table_cell(on=1,
1.560 + append(fmt.table_cell(on=1,
1.561 attrs={"class" : "event-day-content event-day-empty", "colspan" : "3"}))
1.562
1.563 - output.append(fmt.table_row(on=0))
1.564 + append(fmt.table_row(on=0))
1.565 return "".join(output)
1.566
1.567 def writeWeekSlots(self, first_day, number_of_days, month, week_end, week_slots):
1.568 output = []
1.569 + append = output.append
1.570
1.571 locations = week_slots.keys()
1.572 locations.sort(sort_none_first)
1.573 @@ -2309,11 +2326,11 @@
1.574
1.575 # Output each set.
1.576
1.577 - output.append(self.writeWeekSlot(first_day, number_of_days, month, week_end, events))
1.578 + append(self.writeWeekSlot(first_day, number_of_days, month, week_end, events))
1.579
1.580 # Add a spacer.
1.581
1.582 - output.append(self.writeWeekSpacer(first_day, number_of_days))
1.583 + append(self.writeWeekSpacer(first_day, number_of_days))
1.584
1.585 return "".join(output)
1.586
1.587 @@ -2323,7 +2340,9 @@
1.588 fmt = request.formatter
1.589
1.590 output = []
1.591 - output.append(fmt.table_row(on=1))
1.592 + append = output.append
1.593 +
1.594 + append(fmt.table_row(on=1))
1.595
1.596 # Then, output day details.
1.597
1.598 @@ -2334,15 +2353,15 @@
1.599 # Skip out-of-month days.
1.600
1.601 if day < 1 or day > number_of_days:
1.602 - output.append(fmt.table_cell(on=1,
1.603 + append(fmt.table_cell(on=1,
1.604 attrs={"class" : "event-day-content event-day-excluded", "colspan" : "3"}))
1.605 - output.append(fmt.table_cell(on=0))
1.606 + append(fmt.table_cell(on=0))
1.607 continue
1.608
1.609 # Output the day.
1.610
1.611 if date not in events:
1.612 - output.append(fmt.table_cell(on=1,
1.613 + append(fmt.table_cell(on=1,
1.614 attrs={"class" : "event-day-content event-day-empty", "colspan" : "3"}))
1.615
1.616 # Get event details for the current day.
1.617 @@ -2385,8 +2404,8 @@
1.618 # Events starting today...
1.619
1.620 else:
1.621 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-day-start-gap"}))
1.622 - output.append(fmt.table_cell(on=0))
1.623 + append(fmt.table_cell(on=1, attrs={"class" : "event-day-start-gap"}))
1.624 + append(fmt.table_cell(on=0))
1.625
1.626 # Calculate the span of this cell.
1.627 # Events whose names appear on every day...
1.628 @@ -2470,24 +2489,24 @@
1.629 if not (starts_today and ends_today):
1.630 attrs["style"] = style
1.631
1.632 - output.append(fmt.table_cell(on=1, attrs=attrs))
1.633 + append(fmt.table_cell(on=1, attrs=attrs))
1.634
1.635 # Output the event.
1.636
1.637 if starts_today and ends_today or not hide_text:
1.638 - output.append(self.writeEventSummaryBox(event))
1.639 -
1.640 - output.append(fmt.table_cell(on=0))
1.641 + append(self.writeEventSummaryBox(event))
1.642 +
1.643 + append(fmt.table_cell(on=0))
1.644
1.645 # Output end of day gap.
1.646
1.647 if ends_today and not starts_today:
1.648 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-day-end-gap"}))
1.649 - output.append(fmt.table_cell(on=0))
1.650 + append(fmt.table_cell(on=1, attrs={"class" : "event-day-end-gap"}))
1.651 + append(fmt.table_cell(on=0))
1.652
1.653 # End of set.
1.654
1.655 - output.append(fmt.table_row(on=0))
1.656 + append(fmt.table_row(on=0))
1.657 return "".join(output)
1.658
1.659 def writeWeekSpacer(self, first_day, number_of_days):
1.660 @@ -2495,7 +2514,9 @@
1.661 fmt = page.request.formatter
1.662
1.663 output = []
1.664 - output.append(fmt.table_row(on=1))
1.665 + append = output.append
1.666 +
1.667 + append(fmt.table_row(on=1))
1.668
1.669 for weekday in range(0, 7):
1.670 day = first_day + weekday
1.671 @@ -2506,10 +2527,10 @@
1.672 if day < 1 or day > number_of_days:
1.673 css_classes += " event-day-excluded"
1.674
1.675 - output.append(fmt.table_cell(on=1, attrs={"class" : css_classes, "colspan" : "3"}))
1.676 - output.append(fmt.table_cell(on=0))
1.677 -
1.678 - output.append(fmt.table_row(on=0))
1.679 + append(fmt.table_cell(on=1, attrs={"class" : css_classes, "colspan" : "3"}))
1.680 + append(fmt.table_cell(on=0))
1.681 +
1.682 + append(fmt.table_row(on=0))
1.683 return "".join(output)
1.684
1.685 # Day layout methods.
1.686 @@ -2519,13 +2540,15 @@
1.687 fmt = page.request.formatter
1.688
1.689 output = []
1.690 - output.append(fmt.table_row(on=1))
1.691 -
1.692 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-full-day-heading", "colspan" : str(colspan)}))
1.693 - output.append(self.writeDayHeading(date))
1.694 - output.append(fmt.table_cell(on=0))
1.695 -
1.696 - output.append(fmt.table_row(on=0))
1.697 + append = output.append
1.698 +
1.699 + append(fmt.table_row(on=1))
1.700 +
1.701 + append(fmt.table_cell(on=1, attrs={"class" : "event-full-day-heading", "colspan" : str(colspan)}))
1.702 + append(self.writeDayHeading(date))
1.703 + append(fmt.table_cell(on=0))
1.704 +
1.705 + append(fmt.table_row(on=0))
1.706 return "".join(output)
1.707
1.708 def writeEmptyDay(self, date):
1.709 @@ -2533,12 +2556,14 @@
1.710 fmt = page.request.formatter
1.711
1.712 output = []
1.713 - output.append(fmt.table_row(on=1))
1.714 -
1.715 - output.append(fmt.table_cell(on=1,
1.716 + append = output.append
1.717 +
1.718 + append(fmt.table_row(on=1))
1.719 +
1.720 + append(fmt.table_cell(on=1,
1.721 attrs={"class" : "event-day-content event-day-empty"}))
1.722
1.723 - output.append(fmt.table_row(on=0))
1.724 + append(fmt.table_row(on=0))
1.725 return "".join(output)
1.726
1.727 def writeDaySlots(self, date, full_coverage, day_slots):
1.728 @@ -2553,6 +2578,7 @@
1.729 fmt = page.request.formatter
1.730
1.731 output = []
1.732 + append = output.append
1.733
1.734 locations = day_slots.keys()
1.735 locations.sort(sort_none_first)
1.736 @@ -2599,26 +2625,26 @@
1.737
1.738 # Output the locations.
1.739
1.740 - output.append(fmt.table_row(on=1))
1.741 + append(fmt.table_row(on=1))
1.742
1.743 # Add a spacer.
1.744
1.745 - output.append(self.writeDaySpacer(colspan=2, cls="location"))
1.746 + append(self.writeDaySpacer(colspan=2, cls="location"))
1.747
1.748 for location in locations:
1.749
1.750 # Add spacers to the column spans.
1.751
1.752 columns = len(day_slots[location]) * 2 - 1
1.753 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-location-heading", "colspan" : str(columns)}))
1.754 - output.append(fmt.text(location or ""))
1.755 - output.append(fmt.table_cell(on=0))
1.756 + append(fmt.table_cell(on=1, attrs={"class" : "event-location-heading", "colspan" : str(columns)}))
1.757 + append(fmt.text(location or ""))
1.758 + append(fmt.table_cell(on=0))
1.759
1.760 # Add a trailing spacer.
1.761
1.762 - output.append(self.writeDaySpacer(cls="location"))
1.763 -
1.764 - output.append(fmt.table_row(on=0))
1.765 + append(self.writeDaySpacer(cls="location"))
1.766 +
1.767 + append(fmt.table_row(on=0))
1.768
1.769 # Output the periods with event details.
1.770
1.771 @@ -2631,16 +2657,16 @@
1.772 # applicable timespan starts before this day.
1.773
1.774 if period.start < date:
1.775 - output.append(fmt.table_row(on=1))
1.776 - output.append(self.writeDayScaleHeading(""))
1.777 + append(fmt.table_row(on=1))
1.778 + append(self.writeDayScaleHeading(""))
1.779
1.780 # Otherwise, write a heading describing the time.
1.781
1.782 else:
1.783 - output.append(fmt.table_row(on=1))
1.784 - output.append(self.writeDayScaleHeading(period.start.time_string()))
1.785 -
1.786 - output.append(self.writeDaySpacer())
1.787 + append(fmt.table_row(on=1))
1.788 + append(self.writeDayScaleHeading(period.start.time_string()))
1.789 +
1.790 + append(self.writeDaySpacer())
1.791
1.792 # Visit each slot corresponding to a location (or no location).
1.793
1.794 @@ -2649,28 +2675,28 @@
1.795 # Output each location slot's contribution.
1.796
1.797 if event is None or event not in events_written:
1.798 - output.append(self.writeDaySlot(period, event, event is None and 1 or rowspans[event]))
1.799 + append(self.writeDaySlot(period, event, event is None and 1 or rowspans[event]))
1.800 if event is not None:
1.801 events_written.add(event)
1.802
1.803 # Add a trailing spacer.
1.804
1.805 - output.append(self.writeDaySpacer())
1.806 -
1.807 - output.append(fmt.table_row(on=0))
1.808 + append(self.writeDaySpacer())
1.809 +
1.810 + append(fmt.table_row(on=0))
1.811
1.812 # Write a final time heading if the last period ends in the current day.
1.813
1.814 if period is not None:
1.815 if period.end == date:
1.816 - output.append(fmt.table_row(on=1))
1.817 - output.append(self.writeDayScaleHeading(period.end.time_string()))
1.818 + append(fmt.table_row(on=1))
1.819 + append(self.writeDayScaleHeading(period.end.time_string()))
1.820
1.821 for slot in day_row:
1.822 - output.append(self.writeDaySpacer())
1.823 - output.append(self.writeEmptyDaySlot())
1.824 -
1.825 - output.append(fmt.table_row(on=0))
1.826 + append(self.writeDaySpacer())
1.827 + append(self.writeEmptyDaySlot())
1.828 +
1.829 + append(fmt.table_row(on=0))
1.830
1.831 return "".join(output)
1.832
1.833 @@ -2679,9 +2705,11 @@
1.834 fmt = page.request.formatter
1.835
1.836 output = []
1.837 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-scale-heading"}))
1.838 - output.append(fmt.text(heading))
1.839 - output.append(fmt.table_cell(on=0))
1.840 + append = output.append
1.841 +
1.842 + append(fmt.table_cell(on=1, attrs={"class" : "event-scale-heading"}))
1.843 + append(fmt.text(heading))
1.844 + append(fmt.table_cell(on=0))
1.845
1.846 return "".join(output)
1.847
1.848 @@ -2698,20 +2726,21 @@
1.849 fmt = page.request.formatter
1.850
1.851 output = []
1.852 + append = output.append
1.853
1.854 if event is not None:
1.855 event_summary = event.getSummary(self.parent_name)
1.856 style = self.getEventStyle(event_summary)
1.857
1.858 - output.append(fmt.table_cell(on=1, attrs={
1.859 + append(fmt.table_cell(on=1, attrs={
1.860 "class" : "event-timespan-content event-timespan-busy",
1.861 "style" : style,
1.862 "rowspan" : str(rowspan)
1.863 }))
1.864 - output.append(self.writeEventSummaryBox(event))
1.865 - output.append(fmt.table_cell(on=0))
1.866 + append(self.writeEventSummaryBox(event))
1.867 + append(fmt.table_cell(on=0))
1.868 else:
1.869 - output.append(self.writeEmptyDaySlot())
1.870 + append(self.writeEmptyDaySlot())
1.871
1.872 return "".join(output)
1.873
1.874 @@ -2720,10 +2749,11 @@
1.875 fmt = page.request.formatter
1.876
1.877 output = []
1.878 -
1.879 - output.append(fmt.table_cell(on=1,
1.880 + append = output.append
1.881 +
1.882 + append(fmt.table_cell(on=1,
1.883 attrs={"class" : "event-timespan-content event-timespan-empty"}))
1.884 - output.append(fmt.table_cell(on=0))
1.885 + append(fmt.table_cell(on=0))
1.886
1.887 return "".join(output)
1.888
1.889 @@ -2732,10 +2762,12 @@
1.890 fmt = page.request.formatter
1.891
1.892 output = []
1.893 - output.append(fmt.table_cell(on=1, attrs={
1.894 + append = output.append
1.895 +
1.896 + append(fmt.table_cell(on=1, attrs={
1.897 "class" : "event-%s-spacer" % cls,
1.898 "colspan" : str(colspan)}))
1.899 - output.append(fmt.table_cell(on=0))
1.900 + append(fmt.table_cell(on=0))
1.901 return "".join(output)
1.902
1.903 # Map layout methods.
1.904 @@ -2745,9 +2777,11 @@
1.905 fmt = page.request.formatter
1.906
1.907 output = []
1.908 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-map-heading"}))
1.909 - output.append(self.writeMapHeading())
1.910 - output.append(fmt.table_cell(on=0))
1.911 + append = output.append
1.912 +
1.913 + append(fmt.table_cell(on=1, attrs={"class" : "event-map-heading"}))
1.914 + append(self.writeMapHeading())
1.915 + append(fmt.table_cell(on=0))
1.916
1.917 return "".join(output)
1.918
1.919 @@ -2757,14 +2791,15 @@
1.920 fmt = request.formatter
1.921
1.922 output = []
1.923 -
1.924 - output.append(fmt.div(on=1, attrs={"class" : "event-aggregator-error"}))
1.925 - output.append(fmt.paragraph(on=1))
1.926 - output.append(fmt.text(text))
1.927 - output.append(fmt.paragraph(on=0))
1.928 - output.append(fmt.paragraph(on=1))
1.929 - output.append(linkToPage(request, Page(request, pagename), pagename))
1.930 - output.append(fmt.paragraph(on=0))
1.931 + append = output.append
1.932 +
1.933 + append(fmt.div(on=1, attrs={"class" : "event-aggregator-error"}))
1.934 + append(fmt.paragraph(on=1))
1.935 + append(fmt.text(text))
1.936 + append(fmt.paragraph(on=0))
1.937 + append(fmt.paragraph(on=1))
1.938 + append(linkToPage(request, Page(request, pagename), pagename))
1.939 + append(fmt.paragraph(on=0))
1.940
1.941 return "".join(output)
1.942
1.943 @@ -2780,7 +2815,9 @@
1.944 # Write out a self-contained list of events.
1.945
1.946 output = []
1.947 - output.append(fmt.bullet_list(on=1, attr={"class" : "event-map-location-events"}))
1.948 + append = output.append
1.949 +
1.950 + append(fmt.bullet_list(on=1, attr={"class" : "event-map-location-events"}))
1.951
1.952 for event in events:
1.953
1.954 @@ -2793,22 +2830,22 @@
1.955 end and self.getFullDateLabel(end),
1.956 "")
1.957
1.958 - output.append(fmt.listitem(on=1))
1.959 + append(fmt.listitem(on=1))
1.960
1.961 # Link to the page using the summary.
1.962
1.963 - output.append(event.linkToEvent(request, event_summary))
1.964 + append(event.linkToEvent(request, event_summary))
1.965
1.966 # Add the event period.
1.967
1.968 - output.append(fmt.text(" "))
1.969 - output.append(fmt.span(on=1, css_class="event-map-period"))
1.970 - output.append(fmt.text(event_period))
1.971 - output.append(fmt.span(on=0))
1.972 -
1.973 - output.append(fmt.listitem(on=0))
1.974 -
1.975 - output.append(fmt.bullet_list(on=0))
1.976 + append(fmt.text(" "))
1.977 + append(fmt.span(on=1, css_class="event-map-period"))
1.978 + append(fmt.text(event_period))
1.979 + append(fmt.span(on=0))
1.980 +
1.981 + append(fmt.listitem(on=0))
1.982 +
1.983 + append(fmt.bullet_list(on=0))
1.984
1.985 return "".join(output)
1.986
1.987 @@ -2827,14 +2864,15 @@
1.988 # Make a calendar.
1.989
1.990 output = []
1.991 -
1.992 - output.append(fmt.div(on=1, css_class="event-calendar", id=("EventAggregator-%s" % self.getIdentifier())))
1.993 + append = output.append
1.994 +
1.995 + append(fmt.div(on=1, css_class="event-calendar", id=("EventAggregator-%s" % self.getIdentifier())))
1.996
1.997 # Output download controls.
1.998
1.999 - output.append(fmt.div(on=1, css_class="event-controls"))
1.1000 - output.append(self.writeDownloadControls())
1.1001 - output.append(fmt.div(on=0))
1.1002 + append(fmt.div(on=1, css_class="event-controls"))
1.1003 + append(self.writeDownloadControls())
1.1004 + append(fmt.div(on=0))
1.1005
1.1006 # Output a table.
1.1007
1.1008 @@ -2842,19 +2880,19 @@
1.1009
1.1010 # Start of table view output.
1.1011
1.1012 - output.append(fmt.table(on=1, attrs={"tableclass" : "event-table"}))
1.1013 -
1.1014 - output.append(fmt.table_row(on=1))
1.1015 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-table-heading"}))
1.1016 - output.append(fmt.text(_("Event dates")))
1.1017 - output.append(fmt.table_cell(on=0))
1.1018 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-table-heading"}))
1.1019 - output.append(fmt.text(_("Event location")))
1.1020 - output.append(fmt.table_cell(on=0))
1.1021 - output.append(fmt.table_cell(on=1, attrs={"class" : "event-table-heading"}))
1.1022 - output.append(fmt.text(_("Event details")))
1.1023 - output.append(fmt.table_cell(on=0))
1.1024 - output.append(fmt.table_row(on=0))
1.1025 + append(fmt.table(on=1, attrs={"tableclass" : "event-table"}))
1.1026 +
1.1027 + append(fmt.table_row(on=1))
1.1028 + append(fmt.table_cell(on=1, attrs={"class" : "event-table-heading"}))
1.1029 + append(fmt.text(_("Event dates")))
1.1030 + append(fmt.table_cell(on=0))
1.1031 + append(fmt.table_cell(on=1, attrs={"class" : "event-table-heading"}))
1.1032 + append(fmt.text(_("Event location")))
1.1033 + append(fmt.table_cell(on=0))
1.1034 + append(fmt.table_cell(on=1, attrs={"class" : "event-table-heading"}))
1.1035 + append(fmt.text(_("Event details")))
1.1036 + append(fmt.table_cell(on=0))
1.1037 + append(fmt.table_row(on=0))
1.1038
1.1039 # Show the events in order.
1.1040
1.1041 @@ -2877,43 +2915,43 @@
1.1042
1.1043 attrs = {"class" : " ".join(css_classes)}
1.1044
1.1045 - output.append(fmt.table_row(on=1))
1.1046 + append(fmt.table_row(on=1))
1.1047
1.1048 # Start and end dates.
1.1049
1.1050 - output.append(fmt.table_cell(on=1, attrs=attrs))
1.1051 - output.append(fmt.span(on=1))
1.1052 - output.append(fmt.text(str(event_details["start"])))
1.1053 - output.append(fmt.span(on=0))
1.1054 + append(fmt.table_cell(on=1, attrs=attrs))
1.1055 + append(fmt.span(on=1))
1.1056 + append(fmt.text(str(event_details["start"])))
1.1057 + append(fmt.span(on=0))
1.1058
1.1059 if event_details["start"] != event_details["end"]:
1.1060 - output.append(fmt.text(" - "))
1.1061 - output.append(fmt.span(on=1))
1.1062 - output.append(fmt.text(str(event_details["end"])))
1.1063 - output.append(fmt.span(on=0))
1.1064 -
1.1065 - output.append(fmt.table_cell(on=0))
1.1066 + append(fmt.text(" - "))
1.1067 + append(fmt.span(on=1))
1.1068 + append(fmt.text(str(event_details["end"])))
1.1069 + append(fmt.span(on=0))
1.1070 +
1.1071 + append(fmt.table_cell(on=0))
1.1072
1.1073 # Location.
1.1074
1.1075 - output.append(fmt.table_cell(on=1, attrs=attrs))
1.1076 + append(fmt.table_cell(on=1, attrs=attrs))
1.1077
1.1078 if event_details.has_key("location"):
1.1079 - output.append(event_page.formatText(event_details["location"], fmt))
1.1080 -
1.1081 - output.append(fmt.table_cell(on=0))
1.1082 + append(event_page.formatText(event_details["location"], fmt))
1.1083 +
1.1084 + append(fmt.table_cell(on=0))
1.1085
1.1086 # Link to the page using the summary.
1.1087
1.1088 - output.append(fmt.table_cell(on=1, attrs=attrs))
1.1089 - output.append(event.linkToEvent(request, event_summary))
1.1090 - output.append(fmt.table_cell(on=0))
1.1091 -
1.1092 - output.append(fmt.table_row(on=0))
1.1093 + append(fmt.table_cell(on=1, attrs=attrs))
1.1094 + append(event.linkToEvent(request, event_summary))
1.1095 + append(fmt.table_cell(on=0))
1.1096 +
1.1097 + append(fmt.table_row(on=0))
1.1098
1.1099 # End of table view output.
1.1100
1.1101 - output.append(fmt.table(on=0))
1.1102 + append(fmt.table(on=0))
1.1103
1.1104 # Output a map view.
1.1105
1.1106 @@ -2951,22 +2989,22 @@
1.1107 # Report errors.
1.1108
1.1109 if maps is None:
1.1110 - output.append(self.showDictError(
1.1111 + append(self.showDictError(
1.1112 _("You do not have read access to the maps page:"),
1.1113 maps_page))
1.1114
1.1115 elif not self.map_name:
1.1116 - output.append(self.showDictError(
1.1117 + append(self.showDictError(
1.1118 _("Please specify a valid map name corresponding to an entry on the following page:"),
1.1119 maps_page))
1.1120
1.1121 elif map_image is None:
1.1122 - output.append(self.showDictError(
1.1123 + append(self.showDictError(
1.1124 _("Please specify a valid entry for %s on the following page:") % self.map_name,
1.1125 maps_page))
1.1126
1.1127 elif locations is None:
1.1128 - output.append(self.showDictError(
1.1129 + append(self.showDictError(
1.1130 _("You do not have read access to the locations page:"),
1.1131 locations_page))
1.1132
1.1133 @@ -3025,20 +3063,20 @@
1.1134 # Start of map view output.
1.1135
1.1136 map_identifier = "map-%s" % self.getIdentifier()
1.1137 - output.append(fmt.div(on=1, css_class="event-map", id=map_identifier))
1.1138 -
1.1139 - output.append(fmt.table(on=1))
1.1140 -
1.1141 - output.append(fmt.table_row(on=1))
1.1142 - output.append(self.writeMapTableHeading())
1.1143 - output.append(fmt.table_row(on=0))
1.1144 -
1.1145 - output.append(fmt.table_row(on=1))
1.1146 - output.append(fmt.table_cell(on=1))
1.1147 -
1.1148 - output.append(fmt.div(on=1, css_class="event-map-container"))
1.1149 - output.append(fmt.image(map_image_url))
1.1150 - output.append(fmt.number_list(on=1))
1.1151 + append(fmt.div(on=1, css_class="event-map", id=map_identifier))
1.1152 +
1.1153 + append(fmt.table(on=1))
1.1154 +
1.1155 + append(fmt.table_row(on=1))
1.1156 + append(self.writeMapTableHeading())
1.1157 + append(fmt.table_row(on=0))
1.1158 +
1.1159 + append(fmt.table_row(on=1))
1.1160 + append(fmt.table_cell(on=1))
1.1161 +
1.1162 + append(fmt.div(on=1, css_class="event-map-container"))
1.1163 + append(fmt.image(map_image_url))
1.1164 + append(fmt.number_list(on=1))
1.1165
1.1166 # Events with no location are unpositioned.
1.1167
1.1168 @@ -3085,77 +3123,77 @@
1.1169
1.1170 # Put a marker on the map.
1.1171
1.1172 - output.append(fmt.listitem(on=1, css_class="event-map-label"))
1.1173 + append(fmt.listitem(on=1, css_class="event-map-label"))
1.1174
1.1175 # Have a positioned marker for the print mode.
1.1176
1.1177 - output.append(fmt.div(on=1, css_class="event-map-label-only",
1.1178 + append(fmt.div(on=1, css_class="event-map-label-only",
1.1179 style="left:%dpx; top:%dpx; min-width:%dpx; min-height:%dpx") % (
1.1180 marker_x, marker_y, map_x_scale, map_y_scale))
1.1181 - output.append(fmt.div(on=0))
1.1182 + append(fmt.div(on=0))
1.1183
1.1184 # Have a marker containing a pop-up when using the screen mode,
1.1185 # providing a normal block when using the print mode.
1.1186
1.1187 - output.append(fmt.div(on=1, css_class="event-map-label",
1.1188 + append(fmt.div(on=1, css_class="event-map-label",
1.1189 style="left:%dpx; top:%dpx; min-width:%dpx; min-height:%dpx") % (
1.1190 marker_x, marker_y, map_x_scale, map_y_scale))
1.1191 - output.append(fmt.div(on=1, css_class="event-map-details"))
1.1192 - output.append(fmt.div(on=1, css_class="event-map-shadow"))
1.1193 - output.append(fmt.div(on=1, css_class="event-map-location"))
1.1194 -
1.1195 - output.append(fmt.heading(on=1, depth=2))
1.1196 - output.append(fmt.text(location))
1.1197 - output.append(fmt.heading(on=0, depth=2))
1.1198 -
1.1199 - output.append(self.writeMapEventSummaries(events))
1.1200 -
1.1201 - output.append(fmt.div(on=0))
1.1202 - output.append(fmt.div(on=0))
1.1203 - output.append(fmt.div(on=0))
1.1204 - output.append(fmt.div(on=0))
1.1205 - output.append(fmt.listitem(on=0))
1.1206 -
1.1207 - output.append(fmt.number_list(on=0))
1.1208 - output.append(fmt.div(on=0))
1.1209 - output.append(fmt.table_cell(on=0))
1.1210 - output.append(fmt.table_row(on=0))
1.1211 + append(fmt.div(on=1, css_class="event-map-details"))
1.1212 + append(fmt.div(on=1, css_class="event-map-shadow"))
1.1213 + append(fmt.div(on=1, css_class="event-map-location"))
1.1214 +
1.1215 + append(fmt.heading(on=1, depth=2))
1.1216 + append(fmt.text(location))
1.1217 + append(fmt.heading(on=0, depth=2))
1.1218 +
1.1219 + append(self.writeMapEventSummaries(events))
1.1220 +
1.1221 + append(fmt.div(on=0))
1.1222 + append(fmt.div(on=0))
1.1223 + append(fmt.div(on=0))
1.1224 + append(fmt.div(on=0))
1.1225 + append(fmt.listitem(on=0))
1.1226 +
1.1227 + append(fmt.number_list(on=0))
1.1228 + append(fmt.div(on=0))
1.1229 + append(fmt.table_cell(on=0))
1.1230 + append(fmt.table_row(on=0))
1.1231
1.1232 # Write unpositioned events.
1.1233
1.1234 if unpositioned_events:
1.1235 unpositioned_identifier = "unpositioned-%s" % self.getIdentifier()
1.1236
1.1237 - output.append(fmt.table_row(on=1, css_class="event-map-unpositioned",
1.1238 + append(fmt.table_row(on=1, css_class="event-map-unpositioned",
1.1239 id=unpositioned_identifier))
1.1240 - output.append(fmt.table_cell(on=1))
1.1241 -
1.1242 - output.append(fmt.heading(on=1, depth=2))
1.1243 - output.append(fmt.text(_("Events not shown on the map")))
1.1244 - output.append(fmt.heading(on=0, depth=2))
1.1245 + append(fmt.table_cell(on=1))
1.1246 +
1.1247 + append(fmt.heading(on=1, depth=2))
1.1248 + append(fmt.text(_("Events not shown on the map")))
1.1249 + append(fmt.heading(on=0, depth=2))
1.1250
1.1251 # Show and hide controls.
1.1252
1.1253 - output.append(fmt.div(on=1, css_class="event-map-show-control"))
1.1254 - output.append(fmt.anchorlink(on=1, name=unpositioned_identifier))
1.1255 - output.append(fmt.text(_("Show unpositioned events")))
1.1256 - output.append(fmt.anchorlink(on=0))
1.1257 - output.append(fmt.div(on=0))
1.1258 -
1.1259 - output.append(fmt.div(on=1, css_class="event-map-hide-control"))
1.1260 - output.append(fmt.anchorlink(on=1, name=map_identifier))
1.1261 - output.append(fmt.text(_("Hide unpositioned events")))
1.1262 - output.append(fmt.anchorlink(on=0))
1.1263 - output.append(fmt.div(on=0))
1.1264 -
1.1265 - output.append(self.writeMapEventSummaries(unpositioned_events))
1.1266 + append(fmt.div(on=1, css_class="event-map-show-control"))
1.1267 + append(fmt.anchorlink(on=1, name=unpositioned_identifier))
1.1268 + append(fmt.text(_("Show unpositioned events")))
1.1269 + append(fmt.anchorlink(on=0))
1.1270 + append(fmt.div(on=0))
1.1271 +
1.1272 + append(fmt.div(on=1, css_class="event-map-hide-control"))
1.1273 + append(fmt.anchorlink(on=1, name=map_identifier))
1.1274 + append(fmt.text(_("Hide unpositioned events")))
1.1275 + append(fmt.anchorlink(on=0))
1.1276 + append(fmt.div(on=0))
1.1277 +
1.1278 + append(self.writeMapEventSummaries(unpositioned_events))
1.1279
1.1280 # End of map view output.
1.1281
1.1282 - output.append(fmt.table_cell(on=0))
1.1283 - output.append(fmt.table_row(on=0))
1.1284 - output.append(fmt.table(on=0))
1.1285 - output.append(fmt.div(on=0))
1.1286 + append(fmt.table_cell(on=0))
1.1287 + append(fmt.table_row(on=0))
1.1288 + append(fmt.table(on=0))
1.1289 + append(fmt.div(on=0))
1.1290
1.1291 # Output a list.
1.1292
1.1293 @@ -3163,23 +3201,23 @@
1.1294
1.1295 # Start of list view output.
1.1296
1.1297 - output.append(fmt.bullet_list(on=1, attr={"class" : "event-listings"}))
1.1298 + append(fmt.bullet_list(on=1, attr={"class" : "event-listings"}))
1.1299
1.1300 # Output a list.
1.1301
1.1302 for period in self.first.until(self.last):
1.1303
1.1304 - output.append(fmt.listitem(on=1, attr={"class" : "event-listings-period"}))
1.1305 - output.append(fmt.div(on=1, attr={"class" : "event-listings-heading"}))
1.1306 + append(fmt.listitem(on=1, attr={"class" : "event-listings-period"}))
1.1307 + append(fmt.div(on=1, attr={"class" : "event-listings-heading"}))
1.1308
1.1309 # Either write a date heading or produce links for navigable
1.1310 # calendars.
1.1311
1.1312 - output.append(self.writeDateHeading(period))
1.1313 -
1.1314 - output.append(fmt.div(on=0))
1.1315 -
1.1316 - output.append(fmt.bullet_list(on=1, attr={"class" : "event-period-listings"}))
1.1317 + append(self.writeDateHeading(period))
1.1318 +
1.1319 + append(fmt.div(on=0))
1.1320 +
1.1321 + append(fmt.bullet_list(on=1, attr={"class" : "event-period-listings"}))
1.1322
1.1323 # Show the events in order.
1.1324
1.1325 @@ -3191,52 +3229,52 @@
1.1326 event_details = event.getDetails()
1.1327 event_summary = event.getSummary(self.parent_name)
1.1328
1.1329 - output.append(fmt.listitem(on=1, attr={"class" : "event-listing"}))
1.1330 + append(fmt.listitem(on=1, attr={"class" : "event-listing"}))
1.1331
1.1332 # Link to the page using the summary.
1.1333
1.1334 - output.append(fmt.paragraph(on=1))
1.1335 - output.append(event.linkToEvent(request, event_summary))
1.1336 - output.append(fmt.paragraph(on=0))
1.1337 + append(fmt.paragraph(on=1))
1.1338 + append(event.linkToEvent(request, event_summary))
1.1339 + append(fmt.paragraph(on=0))
1.1340
1.1341 # Start and end dates.
1.1342
1.1343 - output.append(fmt.paragraph(on=1))
1.1344 - output.append(fmt.span(on=1))
1.1345 - output.append(fmt.text(str(event_details["start"])))
1.1346 - output.append(fmt.span(on=0))
1.1347 - output.append(fmt.text(" - "))
1.1348 - output.append(fmt.span(on=1))
1.1349 - output.append(fmt.text(str(event_details["end"])))
1.1350 - output.append(fmt.span(on=0))
1.1351 - output.append(fmt.paragraph(on=0))
1.1352 + append(fmt.paragraph(on=1))
1.1353 + append(fmt.span(on=1))
1.1354 + append(fmt.text(str(event_details["start"])))
1.1355 + append(fmt.span(on=0))
1.1356 + append(fmt.text(" - "))
1.1357 + append(fmt.span(on=1))
1.1358 + append(fmt.text(str(event_details["end"])))
1.1359 + append(fmt.span(on=0))
1.1360 + append(fmt.paragraph(on=0))
1.1361
1.1362 # Location.
1.1363
1.1364 if event_details.has_key("location"):
1.1365 - output.append(fmt.paragraph(on=1))
1.1366 - output.append(event_page.formatText(event_details["location"], fmt))
1.1367 - output.append(fmt.paragraph(on=1))
1.1368 + append(fmt.paragraph(on=1))
1.1369 + append(event_page.formatText(event_details["location"], fmt))
1.1370 + append(fmt.paragraph(on=1))
1.1371
1.1372 # Topics.
1.1373
1.1374 if event_details.has_key("topics") or event_details.has_key("categories"):
1.1375 - output.append(fmt.bullet_list(on=1, attr={"class" : "event-topics"}))
1.1376 + append(fmt.bullet_list(on=1, attr={"class" : "event-topics"}))
1.1377
1.1378 for topic in event_details.get("topics") or event_details.get("categories") or []:
1.1379 - output.append(fmt.listitem(on=1))
1.1380 - output.append(event_page.formatText(topic, fmt))
1.1381 - output.append(fmt.listitem(on=0))
1.1382 -
1.1383 - output.append(fmt.bullet_list(on=0))
1.1384 -
1.1385 - output.append(fmt.listitem(on=0))
1.1386 -
1.1387 - output.append(fmt.bullet_list(on=0))
1.1388 + append(fmt.listitem(on=1))
1.1389 + append(event_page.formatText(topic, fmt))
1.1390 + append(fmt.listitem(on=0))
1.1391 +
1.1392 + append(fmt.bullet_list(on=0))
1.1393 +
1.1394 + append(fmt.listitem(on=0))
1.1395 +
1.1396 + append(fmt.bullet_list(on=0))
1.1397
1.1398 # End of list view output.
1.1399
1.1400 - output.append(fmt.bullet_list(on=0))
1.1401 + append(fmt.bullet_list(on=0))
1.1402
1.1403 # Output a month calendar. This shows month-by-month data.
1.1404
1.1405 @@ -3248,16 +3286,16 @@
1.1406
1.1407 # Output a month.
1.1408
1.1409 - output.append(fmt.table(on=1, attrs={"tableclass" : "event-month"}))
1.1410 + append(fmt.table(on=1, attrs={"tableclass" : "event-month"}))
1.1411
1.1412 # Either write a month heading or produce links for navigable
1.1413 # calendars.
1.1414
1.1415 - output.append(self.writeMonthTableHeading(month))
1.1416 + append(self.writeMonthTableHeading(month))
1.1417
1.1418 # Weekday headings.
1.1419
1.1420 - output.append(self.writeWeekdayHeadings())
1.1421 + append(self.writeWeekdayHeadings())
1.1422
1.1423 # Process the days of the month.
1.1424
1.1425 @@ -3283,17 +3321,17 @@
1.1426
1.1427 # Output a week, starting with the day numbers.
1.1428
1.1429 - output.append(self.writeDayNumbers(first_day, number_of_days, month, full_coverage))
1.1430 + append(self.writeDayNumbers(first_day, number_of_days, month, full_coverage))
1.1431
1.1432 # Either generate empty days...
1.1433
1.1434 if not week_slots:
1.1435 - output.append(self.writeEmptyWeek(first_day, number_of_days))
1.1436 + append(self.writeEmptyWeek(first_day, number_of_days))
1.1437
1.1438 # Or generate each set of scheduled events...
1.1439
1.1440 else:
1.1441 - output.append(self.writeWeekSlots(first_day, number_of_days, month, week_end, week_slots))
1.1442 + append(self.writeWeekSlots(first_day, number_of_days, month, week_end, week_slots))
1.1443
1.1444 # Process the next week...
1.1445
1.1446 @@ -3301,7 +3339,7 @@
1.1447
1.1448 # End of month.
1.1449
1.1450 - output.append(fmt.table(on=0))
1.1451 + append(fmt.table(on=0))
1.1452
1.1453 # Output a day view.
1.1454
1.1455 @@ -3311,7 +3349,7 @@
1.1456
1.1457 for date in self.first.days_until(self.last):
1.1458
1.1459 - output.append(fmt.table(on=1, attrs={"tableclass" : "event-calendar-day"}))
1.1460 + append(fmt.table(on=1, attrs={"tableclass" : "event-calendar-day"}))
1.1461
1.1462 full_coverage, day_slots = getCoverage(
1.1463 getEventsInPeriod(all_shown_events, getCalendarPeriod(date, date)), "datetime")
1.1464 @@ -3321,36 +3359,36 @@
1.1465
1.1466 colspan = sum(map(len, day_slots.values())) * 2 + 2
1.1467
1.1468 - output.append(self.writeDayTableHeading(date, colspan))
1.1469 + append(self.writeDayTableHeading(date, colspan))
1.1470
1.1471 # Either generate empty days...
1.1472
1.1473 if not day_slots:
1.1474 - output.append(self.writeEmptyDay(date))
1.1475 + append(self.writeEmptyDay(date))
1.1476
1.1477 # Or generate each set of scheduled events...
1.1478
1.1479 else:
1.1480 - output.append(self.writeDaySlots(date, full_coverage, day_slots))
1.1481 + append(self.writeDaySlots(date, full_coverage, day_slots))
1.1482
1.1483 # End of day.
1.1484
1.1485 - output.append(fmt.table(on=0))
1.1486 + append(fmt.table(on=0))
1.1487
1.1488 # Output view controls.
1.1489
1.1490 - output.append(fmt.div(on=1, css_class="event-controls"))
1.1491 - output.append(self.writeViewControls())
1.1492 - output.append(fmt.div(on=0))
1.1493 + append(fmt.div(on=1, css_class="event-controls"))
1.1494 + append(self.writeViewControls())
1.1495 + append(fmt.div(on=0))
1.1496
1.1497 # Close the calendar region.
1.1498
1.1499 - output.append(fmt.div(on=0))
1.1500 + append(fmt.div(on=0))
1.1501
1.1502 # Add any scripts.
1.1503
1.1504 if isinstance(fmt, request.html_formatter.__class__):
1.1505 - output.append(self.update_script)
1.1506 + append(self.update_script)
1.1507
1.1508 return ''.join(output)
1.1509
1.1510 @@ -3397,12 +3435,14 @@
1.1511 of the page or event collection.
1.1512 """
1.1513
1.1514 + write = request.write
1.1515 +
1.1516 # Start the collection.
1.1517
1.1518 if mimetype == "text/calendar":
1.1519 - request.write("BEGIN:VCALENDAR\r\n")
1.1520 - request.write("PRODID:-//MoinMoin//EventAggregatorSummary\r\n")
1.1521 - request.write("VERSION:2.0\r\n")
1.1522 + write("BEGIN:VCALENDAR\r\n")
1.1523 + write("PRODID:-//MoinMoin//EventAggregatorSummary\r\n")
1.1524 + write("VERSION:2.0\r\n")
1.1525
1.1526 elif mimetype == "application/rss+xml":
1.1527
1.1528 @@ -3411,14 +3451,14 @@
1.1529
1.1530 path_info = getPathInfo(request)
1.1531
1.1532 - request.write('<rss version="2.0">\r\n')
1.1533 - request.write('<channel>\r\n')
1.1534 - request.write('<title>%s</title>\r\n' % path_info[1:])
1.1535 - request.write('<link>%s%s</link>\r\n' % (request.getBaseURL(), path_info))
1.1536 - request.write('<description>Events published on %s%s</description>\r\n' % (request.getBaseURL(), path_info))
1.1537 + write('<rss version="2.0">\r\n')
1.1538 + write('<channel>\r\n')
1.1539 + write('<title>%s</title>\r\n' % path_info[1:])
1.1540 + write('<link>%s%s</link>\r\n' % (request.getBaseURL(), path_info))
1.1541 + write('<description>Events published on %s%s</description>\r\n' % (request.getBaseURL(), path_info))
1.1542
1.1543 if latest_timestamp is not None:
1.1544 - request.write('<lastBuildDate>%s</lastBuildDate>\r\n' % latest_timestamp.as_HTTP_datetime_string())
1.1545 + write('<lastBuildDate>%s</lastBuildDate>\r\n' % latest_timestamp.as_HTTP_datetime_string())
1.1546
1.1547 # Sort the events by start date, reversed.
1.1548
1.1549 @@ -3434,11 +3474,11 @@
1.1550 # End the collection.
1.1551
1.1552 if mimetype == "text/calendar":
1.1553 - request.write("END:VCALENDAR\r\n")
1.1554 + write("END:VCALENDAR\r\n")
1.1555
1.1556 elif mimetype == "application/rss+xml":
1.1557 - request.write('</channel>\r\n')
1.1558 - request.write('</rss>\r\n')
1.1559 + write('</channel>\r\n')
1.1560 + write('</rss>\r\n')
1.1561
1.1562 def formatEventForOutputType(event, request, mimetype, parent=None, descriptions=None):
1.1563
1.1564 @@ -3453,6 +3493,7 @@
1.1565 for events in the output resource.
1.1566 """
1.1567
1.1568 + write = request.write
1.1569 event_details = event.getDetails()
1.1570
1.1571 if mimetype == "text/calendar":
1.1572 @@ -3467,43 +3508,43 @@
1.1573
1.1574 # Output the event details.
1.1575
1.1576 - request.write("BEGIN:VEVENT\r\n")
1.1577 - request.write("UID:%s\r\n" % link)
1.1578 - request.write("URL:%s\r\n" % link)
1.1579 - request.write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["created"].as_tuple()[:6])
1.1580 - request.write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["last-modified"].as_tuple()[:6])
1.1581 - request.write("SEQUENCE:%d\r\n" % event_details["sequence"])
1.1582 + write("BEGIN:VEVENT\r\n")
1.1583 + write("UID:%s\r\n" % link)
1.1584 + write("URL:%s\r\n" % link)
1.1585 + write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["created"].as_tuple()[:6])
1.1586 + write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["last-modified"].as_tuple()[:6])
1.1587 + write("SEQUENCE:%d\r\n" % event_details["sequence"])
1.1588
1.1589 start = event_details["start"]
1.1590 end = event_details["end"]
1.1591
1.1592 if isinstance(start, DateTime):
1.1593 - request.write("DTSTART")
1.1594 + write("DTSTART")
1.1595 write_calendar_datetime(request, start)
1.1596 else:
1.1597 - request.write("DTSTART;VALUE=DATE:%04d%02d%02d\r\n" % start.as_date().as_tuple())
1.1598 + write("DTSTART;VALUE=DATE:%04d%02d%02d\r\n" % start.as_date().as_tuple())
1.1599
1.1600 if isinstance(end, DateTime):
1.1601 - request.write("DTEND")
1.1602 + write("DTEND")
1.1603 write_calendar_datetime(request, end)
1.1604 else:
1.1605 - request.write("DTEND;VALUE=DATE:%04d%02d%02d\r\n" % end.next_day().as_date().as_tuple())
1.1606 -
1.1607 - request.write("SUMMARY:%s\r\n" % getQuotedText(event_summary))
1.1608 + write("DTEND;VALUE=DATE:%04d%02d%02d\r\n" % end.next_day().as_date().as_tuple())
1.1609 +
1.1610 + write("SUMMARY:%s\r\n" % getQuotedText(event_summary))
1.1611
1.1612 # Optional details.
1.1613
1.1614 if event_details.get("topics") or event_details.get("categories"):
1.1615 - request.write("CATEGORIES:%s\r\n" % ",".join(
1.1616 + write("CATEGORIES:%s\r\n" % ",".join(
1.1617 [getQuotedText(topic)
1.1618 for topic in event_details.get("topics") or event_details.get("categories")]
1.1619 ))
1.1620 if event_details.has_key("location"):
1.1621 - request.write("LOCATION:%s\r\n" % getQuotedText(event_details["location"]))
1.1622 + write("LOCATION:%s\r\n" % getQuotedText(event_details["location"]))
1.1623 if event_details.has_key("geo"):
1.1624 - request.write("GEO:%s\r\n" % getQuotedText(";".join([str(ref.to_degrees()) for ref in event_details["geo"]])))
1.1625 -
1.1626 - request.write("END:VEVENT\r\n")
1.1627 + write("GEO:%s\r\n" % getQuotedText(";".join([str(ref.to_degrees()) for ref in event_details["geo"]])))
1.1628 +
1.1629 + write("END:VEVENT\r\n")
1.1630
1.1631 elif mimetype == "application/rss+xml":
1.1632
1.1633 @@ -3519,9 +3560,9 @@
1.1634 event_summary = event.getSummary(parent)
1.1635 link = event.getEventURL()
1.1636
1.1637 - request.write('<item>\r\n')
1.1638 - request.write('<title>%s</title>\r\n' % wikiutil.escape(event_summary))
1.1639 - request.write('<link>%s</link>\r\n' % link)
1.1640 + write('<item>\r\n')
1.1641 + write('<title>%s</title>\r\n' % wikiutil.escape(event_summary))
1.1642 + write('<link>%s</link>\r\n' % link)
1.1643
1.1644 # Write a description according to the preferred source of
1.1645 # descriptions.
1.1646 @@ -3531,16 +3572,16 @@
1.1647 else:
1.1648 description = event_details["last-comment"]
1.1649
1.1650 - request.write('<description>%s</description>\r\n' %
1.1651 + write('<description>%s</description>\r\n' %
1.1652 fmt.text(event_page.formatText(description, fmt)))
1.1653
1.1654 for topic in event_details.get("topics") or event_details.get("categories") or []:
1.1655 - request.write('<category>%s</category>\r\n' %
1.1656 + write('<category>%s</category>\r\n' %
1.1657 fmt.text(event_page.formatText(topic, fmt)))
1.1658
1.1659 - request.write('<pubDate>%s</pubDate>\r\n' % event_details["created"].as_HTTP_datetime_string())
1.1660 - request.write('<guid>%s#%s</guid>\r\n' % (link, event_details["sequence"]))
1.1661 - request.write('</item>\r\n')
1.1662 + write('<pubDate>%s</pubDate>\r\n' % event_details["created"].as_HTTP_datetime_string())
1.1663 + write('<guid>%s#%s</guid>\r\n' % (link, event_details["sequence"]))
1.1664 + write('</item>\r\n')
1.1665
1.1666 # iCalendar format helper functions.
1.1667