1.1 --- a/EventAggregatorSupport.py Sun Feb 05 01:29:45 2012 +0100
1.2 +++ b/EventAggregatorSupport.py Sun Feb 05 01:49:44 2012 +0100
1.3 @@ -1540,13 +1540,31 @@
1.4 process the page or any macro invocation.
1.5 """
1.6
1.7 - return "calendar=%s&%s&%s&%s=%s&%s=%s" % (
1.8 - self.calendar_name,
1.9 - self.getRawDateQueryString("start", start),
1.10 - self.getRawDateQueryString("end", end),
1.11 - self.getQualifiedParameterName("mode"), mode or self.mode,
1.12 - self.getQualifiedParameterName("resolution"), resolution or self.resolution
1.13 - )
1.14 + parameters = [
1.15 + self.getRawDateQueryString("start", start, 0),
1.16 + self.getRawDateQueryString("end", end, 0),
1.17 + self.category_name_parameters,
1.18 + self.remote_source_parameters,
1.19 + ]
1.20 +
1.21 + pairs = [
1.22 + ("calendar", self.calendar_name or ""),
1.23 + ("calendarstart", self.raw_calendar_start or ""),
1.24 + ("calendarend", self.raw_calendar_end or ""),
1.25 + ("mode", mode or self.mode),
1.26 + ("resolution", resolution or self.resolution),
1.27 + ("parent", self.parent_name or ""),
1.28 + ("template", self.template_name or ""),
1.29 + ("names", self.name_usage),
1.30 + ("map", self.map_name or ""),
1.31 + ]
1.32 +
1.33 + url = self.page.url(self.page.request,
1.34 + "action=EventAggregatorUpdate&%s" % (
1.35 + "&".join([("%s=%s" % pair) for pair in pairs] + parameters)
1.36 + ), relative=True)
1.37 +
1.38 + return "return replaceCalendar('EventAggregator-%s', '%s')" % (self.getIdentifier(), url)
1.39
1.40 def getNewEventLink(self, start):
1.41
1.42 @@ -1631,7 +1649,7 @@
1.43
1.44 page = self.page
1.45 request = page.request
1.46 - fmt = page.formatter
1.47 + fmt = request.formatter
1.48 _ = request.getText
1.49
1.50 output = []
1.51 @@ -1792,7 +1810,7 @@
1.52
1.53 page = self.page
1.54 request = page.request
1.55 - fmt = page.formatter
1.56 + fmt = request.formatter
1.57 _ = request.getText
1.58
1.59 output = []
1.60 @@ -1853,7 +1871,7 @@
1.61 label = self.getCalendarPeriod()
1.62
1.63 if self.raw_calendar_start is None or self.raw_calendar_end is None:
1.64 - fmt = self.page.formatter
1.65 + fmt = self.page.request.formatter
1.66 output = []
1.67 output.append(fmt.span(on=1))
1.68 output.append(fmt.text(label))
1.69 @@ -1900,7 +1918,7 @@
1.70
1.71 page = self.page
1.72 request = page.request
1.73 - fmt = page.formatter
1.74 + fmt = request.formatter
1.75 _ = request.getText
1.76
1.77 output = []
1.78 @@ -1919,6 +1937,12 @@
1.79 previous_link = self.getNavigationLink(
1.80 self.previous_start, self.previous_end
1.81 )
1.82 + previous_set_update_link = self.getUpdateLink(
1.83 + self.previous_set_start, self.previous_set_end
1.84 + )
1.85 + previous_update_link = self.getUpdateLink(
1.86 + self.previous_start, self.previous_end
1.87 + )
1.88
1.89 # Links to the next set of months and to a calendar shifted
1.90 # forward one month.
1.91 @@ -1929,24 +1953,31 @@
1.92 next_link = self.getNavigationLink(
1.93 self.next_start, self.next_end
1.94 )
1.95 + next_set_update_link = self.getUpdateLink(
1.96 + self.next_set_start, self.next_set_end
1.97 + )
1.98 + next_update_link = self.getUpdateLink(
1.99 + self.next_start, self.next_end
1.100 + )
1.101
1.102 # A link leading to this date being at the top of the calendar.
1.103
1.104 date_link = self.getNavigationLink(start, end)
1.105 + date_update_link = self.getUpdateLink(start, end)
1.106
1.107 output.append(fmt.span(on=1, css_class="previous"))
1.108 - output.append(linkToPage(request, page, "<<", previous_set_link))
1.109 + output.append(linkToPage(request, page, "<<", previous_set_link, onclick=previous_set_update_link))
1.110 output.append(fmt.text(" "))
1.111 - output.append(linkToPage(request, page, "<", previous_link))
1.112 + output.append(linkToPage(request, page, "<", previous_link, onclick=previous_update_link))
1.113 output.append(fmt.span(on=0))
1.114
1.115 output.append(fmt.span(on=1, css_class="next"))
1.116 - output.append(linkToPage(request, page, ">", next_link))
1.117 + output.append(linkToPage(request, page, ">", next_link, onclick=next_update_link))
1.118 output.append(fmt.text(" "))
1.119 - output.append(linkToPage(request, page, ">>", next_set_link))
1.120 + output.append(linkToPage(request, page, ">>", next_set_link, onclick=next_set_update_link))
1.121 output.append(fmt.span(on=0))
1.122
1.123 - output.append(linkToPage(request, page, label, date_link))
1.124 + output.append(linkToPage(request, page, label, date_link, onclick=date_update_link))
1.125
1.126 else:
1.127 output.append(fmt.span(on=1))
1.128 @@ -1965,7 +1996,7 @@
1.129
1.130 page = self.page
1.131 request = page.request
1.132 - fmt = page.formatter
1.133 + fmt = request.formatter
1.134 _ = request.getText
1.135
1.136 output = []
1.137 @@ -2026,7 +2057,7 @@
1.138
1.139 page = self.page
1.140 request = page.request
1.141 - fmt = page.formatter
1.142 + fmt = request.formatter
1.143
1.144 output = []
1.145
1.146 @@ -2066,7 +2097,7 @@
1.147
1.148 def writeMonthTableHeading(self, year_month):
1.149 page = self.page
1.150 - fmt = page.formatter
1.151 + fmt = page.request.formatter
1.152
1.153 output = []
1.154 output.append(fmt.table_row(on=1))
1.155 @@ -2082,7 +2113,7 @@
1.156 def writeWeekdayHeadings(self):
1.157 page = self.page
1.158 request = page.request
1.159 - fmt = page.formatter
1.160 + fmt = request.formatter
1.161 _ = request.getText
1.162
1.163 output = []
1.164 @@ -2098,7 +2129,7 @@
1.165
1.166 def writeDayNumbers(self, first_day, number_of_days, month, coverage):
1.167 page = self.page
1.168 - fmt = page.formatter
1.169 + fmt = page.request.formatter
1.170
1.171 output = []
1.172 output.append(fmt.table_row(on=1))
1.173 @@ -2129,7 +2160,7 @@
1.174
1.175 def writeEmptyWeek(self, first_day, number_of_days):
1.176 page = self.page
1.177 - fmt = page.formatter
1.178 + fmt = page.request.formatter
1.179
1.180 output = []
1.181 output.append(fmt.table_row(on=1))
1.182 @@ -2180,7 +2211,7 @@
1.183 def writeWeekSlot(self, first_day, number_of_days, month, week_end, events):
1.184 page = self.page
1.185 request = page.request
1.186 - fmt = page.formatter
1.187 + fmt = request.formatter
1.188
1.189 output = []
1.190 output.append(fmt.table_row(on=1))
1.191 @@ -2352,7 +2383,7 @@
1.192
1.193 def writeWeekSpacer(self, first_day, number_of_days):
1.194 page = self.page
1.195 - fmt = page.formatter
1.196 + fmt = page.request.formatter
1.197
1.198 output = []
1.199 output.append(fmt.table_row(on=1))
1.200 @@ -2376,7 +2407,7 @@
1.201
1.202 def writeDayTableHeading(self, date, colspan=1):
1.203 page = self.page
1.204 - fmt = page.formatter
1.205 + fmt = page.request.formatter
1.206
1.207 output = []
1.208 output.append(fmt.table_row(on=1))
1.209 @@ -2390,7 +2421,7 @@
1.210
1.211 def writeEmptyDay(self, date):
1.212 page = self.page
1.213 - fmt = page.formatter
1.214 + fmt = page.request.formatter
1.215
1.216 output = []
1.217 output.append(fmt.table_row(on=1))
1.218 @@ -2410,7 +2441,7 @@
1.219 """
1.220
1.221 page = self.page
1.222 - fmt = page.formatter
1.223 + fmt = page.request.formatter
1.224
1.225 output = []
1.226
1.227 @@ -2536,7 +2567,7 @@
1.228
1.229 def writeDayScaleHeading(self, heading):
1.230 page = self.page
1.231 - fmt = page.formatter
1.232 + fmt = page.request.formatter
1.233
1.234 output = []
1.235 output.append(fmt.table_cell(on=1, attrs={"class" : "event-scale-heading"}))
1.236 @@ -2555,7 +2586,7 @@
1.237
1.238 def writeDaySlot(self, period, event, rowspan):
1.239 page = self.page
1.240 - fmt = page.formatter
1.241 + fmt = page.request.formatter
1.242
1.243 output = []
1.244
1.245 @@ -2577,7 +2608,7 @@
1.246
1.247 def writeEmptyDaySlot(self):
1.248 page = self.page
1.249 - fmt = page.formatter
1.250 + fmt = page.request.formatter
1.251
1.252 output = []
1.253
1.254 @@ -2589,7 +2620,7 @@
1.255
1.256 def writeDaySpacer(self, colspan=1, cls="timespan"):
1.257 page = self.page
1.258 - fmt = page.formatter
1.259 + fmt = page.request.formatter
1.260
1.261 output = []
1.262 output.append(fmt.table_cell(on=1, attrs={
1.263 @@ -2602,7 +2633,7 @@
1.264
1.265 def writeMapTableHeading(self):
1.266 page = self.page
1.267 - fmt = page.formatter
1.268 + fmt = page.request.formatter
1.269
1.270 output = []
1.271 output.append(fmt.table_cell(on=1, attrs={"class" : "event-map-heading"}))
1.272 @@ -2613,8 +2644,8 @@
1.273
1.274 def showDictError(self, text, pagename):
1.275 page = self.page
1.276 - fmt = page.formatter
1.277 request = page.request
1.278 + fmt = request.formatter
1.279
1.280 output = []
1.281
1.282 @@ -2630,8 +2661,8 @@
1.283
1.284 def writeMapEventSummaries(self, events):
1.285 page = self.page
1.286 - fmt = page.formatter
1.287 request = page.request
1.288 + fmt = request.formatter
1.289
1.290 # Sort the events by date.
1.291
1.292 @@ -2680,15 +2711,15 @@
1.293 """
1.294
1.295 page = self.page
1.296 - fmt = page.formatter
1.297 request = page.request
1.298 + fmt = request.formatter
1.299 _ = request.getText
1.300
1.301 # Make a calendar.
1.302
1.303 output = []
1.304
1.305 - output.append(fmt.div(on=1, css_class="event-calendar"))
1.306 + output.append(fmt.div(on=1, css_class="event-calendar", id=("EventAggregator-%s" % self.getIdentifier())))
1.307
1.308 # Output download controls.
1.309
1.310 @@ -3207,6 +3238,36 @@
1.311
1.312 output.append(fmt.div(on=0))
1.313
1.314 + # Add any scripts.
1.315 +
1.316 + if isinstance(fmt, request.html_formatter.__class__):
1.317 + output.append(self.update_script)
1.318 +
1.319 return ''.join(output)
1.320
1.321 + update_script = """\
1.322 +<script type="text/javascript">
1.323 +function replaceCalendar(name, url) {
1.324 + var calendar = document.getElementById(name);
1.325 +
1.326 + if (calendar == null) {
1.327 + return true;
1.328 + }
1.329 +
1.330 + var xmlhttp = new XMLHttpRequest();
1.331 + xmlhttp.open("GET", url, false);
1.332 + xmlhttp.send(null);
1.333 +
1.334 + var newCalendar = xmlhttp.responseText;
1.335 +
1.336 + if (newCalendar != null) {
1.337 + calendar.parentNode.innerHTML = newCalendar;
1.338 + return false;
1.339 + }
1.340 +
1.341 + return true;
1.342 +}
1.343 +</script>
1.344 +"""
1.345 +
1.346 # vim: tabstop=4 expandtab shiftwidth=4
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/actions/EventAggregatorUpdate.py Sun Feb 05 01:49:44 2012 +0100
2.3 @@ -0,0 +1,87 @@
2.4 +# -*- coding: iso-8859-1 -*-
2.5 +"""
2.6 + MoinMoin - EventAggregatorUpdate Action
2.7 +
2.8 + @copyright: 2012 by Paul Boddie <paul@boddie.org.uk>
2.9 + @license: GNU GPL (v2 or later), see COPYING.txt for details.
2.10 +"""
2.11 +
2.12 +from MoinMoin.Page import Page
2.13 +from MoinMoin import config
2.14 +from EventAggregatorSupport import *
2.15 +
2.16 +Dependencies = ['pages']
2.17 +
2.18 +# Action function.
2.19 +
2.20 +def execute(pagename, request):
2.21 +
2.22 + """
2.23 + On the given 'pagename', for the given 'request', write a page fragment
2.24 + producing the rendered calendar information for inclusion in an existing Web
2.25 + page. Since the page is not processed, all necessary parameters need to be
2.26 + supplied in the request.
2.27 + """
2.28 +
2.29 + form = get_form(request)
2.30 + page = Page(request, pagename)
2.31 +
2.32 + # Find settings from the request parameters only.
2.33 +
2.34 + calendar_name = form.get("calendar", [None])[0]
2.35 + category_names = form.get("category", [])
2.36 + remote_sources = form.get("source", [])
2.37 + name_usage = getParameter(request, "names", "weekly")
2.38 + template_name = getParameter(request, "template")
2.39 + parent_name = getParameter(request, "parent")
2.40 + mode = getParameter(request, "mode", "calendar")
2.41 + resolution = getParameter(request, "resolution", mode == "day" and "date" or "month")
2.42 + map_name = getParameter(request, "map")
2.43 +
2.44 + # The underlying dimensions of the calendar are supplied in special
2.45 + # parameters.
2.46 +
2.47 + raw_calendar_start = getParameter(request, "calendarstart")
2.48 + raw_calendar_end = getParameter(request, "calendarend")
2.49 +
2.50 + # Different modes require different levels of precision by default.
2.51 +
2.52 + resolution = mode == "calendar" and "month" or resolution
2.53 +
2.54 + if resolution == "date":
2.55 + get_date = getParameterDate
2.56 + else:
2.57 + get_date = getParameterMonth
2.58 +
2.59 + # Determine the limits of the calendar.
2.60 +
2.61 + original_calendar_start = calendar_start = get_date(raw_calendar_start)
2.62 + original_calendar_end = calendar_end = get_date(raw_calendar_end)
2.63 +
2.64 + calendar_start = get_date(getParameter(request, "start")) or calendar_start
2.65 + calendar_end = get_date(getParameter(request, "end")) or calendar_end
2.66 +
2.67 + # Get the events according to the resolution of the calendar.
2.68 +
2.69 + pages = getPagesFromResults(getAllCategoryPages(category_names, request), request)
2.70 + events = getEventsFromResources(getEventPages(pages))
2.71 + events += getEventsFromResources(getEventResources(remote_sources, calendar_start, calendar_end, request))
2.72 + all_shown_events = getEventsInPeriod(events, getCalendarPeriod(calendar_start, calendar_end))
2.73 + earliest, latest = getEventLimits(all_shown_events)
2.74 +
2.75 + # Get a concrete period of time.
2.76 +
2.77 + first, last = getConcretePeriod(calendar_start, calendar_end, earliest, latest, resolution)
2.78 +
2.79 + # Define a view of the calendar, retaining useful navigational information.
2.80 +
2.81 + view = View(page, calendar_name, raw_calendar_start, raw_calendar_end,
2.82 + original_calendar_start, original_calendar_end, calendar_start, calendar_end,
2.83 + first, last, category_names, remote_sources, template_name, parent_name,
2.84 + mode, resolution, name_usage, map_name)
2.85 +
2.86 + send_headers = get_send_headers(request)
2.87 + send_headers(["Content-Type: text/html; charset=%s" % config.charset])
2.88 + request.write(view.render(all_shown_events))
2.89 +
2.90 +# vim: tabstop=4 expandtab shiftwidth=4