# HG changeset patch # User Paul Boddie # Date 1367365494 -7200 # Node ID 96d7d93d65306c9f92bca9e40b179e17fa76ecb9 # Parent 17ff0b1fee63d3e4b72f301ae0bfa86d447137da Propagated the resolution of the defined calendar to the user interface in order to correctly configure download/subscription links using special date notation. Moved various date function selection routines into the actions module. diff -r 17ff0b1fee63 -r 96d7d93d6530 EventAggregatorSupport/Actions.py --- a/EventAggregatorSupport/Actions.py Wed May 01 00:04:59 2013 +0200 +++ b/EventAggregatorSupport/Actions.py Wed May 01 01:44:54 2013 +0200 @@ -8,6 +8,8 @@ from DateSupport import * from MoinSupport import * +from MoinDateSupport import getFormDate, getFormMonth, \ + getParameterDate, getParameterMonth from MoinMoin.wikiutil import escape @@ -73,4 +75,16 @@ return start_day_default, end_day_default +def get_date_functions(resolution): + if resolution == "date": + return getParameterDate, getFormDate + else: + return getParameterMonth, getFormMonth + +def get_date_label_functions(resolution): + if resolution == "date": + return getParameterDate, getFullDateLabel + else: + return getParameterMonth, getFullMonthLabel + # vim: tabstop=4 expandtab shiftwidth=4 diff -r 17ff0b1fee63 -r 96d7d93d6530 EventAggregatorSupport/View.py --- a/EventAggregatorSupport/View.py Wed May 01 00:04:59 2013 +0200 +++ b/EventAggregatorSupport/View.py Wed May 01 01:44:54 2013 +0200 @@ -82,7 +82,7 @@ calendar_start, calendar_end, wider_calendar_start, wider_calendar_end, first, last, category_names, remote_sources, search_pattern, template_name, - parent_name, mode, resolution, name_usage, map_name): + parent_name, mode, raw_resolution, resolution, name_usage, map_name): """ Initialise the view with the current 'page', a 'calendar_name' (which @@ -101,7 +101,8 @@ 'template_name', 'parent_name' and 'mode' parameters are used to configure the links employed by the view. - The 'resolution' affects the view for certain modes and is also used to + The 'raw_resolution' is used to parameterise download links, whereas the + 'resolution' affects the view for certain modes and is also used to parameterise links. The 'name_usage' parameter controls how names are shown on calendar mode @@ -124,6 +125,7 @@ self.template_name = template_name self.parent_name = parent_name self.mode = mode + self.raw_resolution = raw_resolution self.resolution = resolution self.name_usage = name_usage self.map_name = map_name @@ -265,6 +267,7 @@ ("calendarend", self.raw_calendar_end or ""), ("mode", mode or self.mode), ("resolution", resolution or self.resolution), + ("raw-resolution", self.raw_resolution), ("parent", self.parent_name or ""), ("template", self.template_name or ""), ("names", self.name_usage), @@ -314,8 +317,8 @@ def getFullMonthLabel(self, year_month): return getFullMonthLabel(self.page.request, year_month) - def getFullLabel(self, arg): - return self.resolution == "date" and self.getFullDateLabel(arg) or self.getFullMonthLabel(arg) + def getFullLabel(self, arg, resolution): + return resolution == "date" and self.getFullDateLabel(arg) or self.getFullMonthLabel(arg) def _getCalendarPeriod(self, start_label, end_label, default_label): @@ -337,22 +340,31 @@ return "".join(output) or default_label def getCalendarPeriod(self): + + "Return the period description for the shown calendar." + _ = self.page.request.getText return self._getCalendarPeriod( - self.calendar_start and self.getFullLabel(self.calendar_start), - self.calendar_end and self.getFullLabel(self.calendar_end), + self.calendar_start and self.getFullLabel(self.calendar_start, self.resolution), + self.calendar_end and self.getFullLabel(self.calendar_end, self.resolution), _("All events") ) def getOriginalCalendarPeriod(self): + + "Return the period description for the originally specified calendar." + _ = self.page.request.getText return self._getCalendarPeriod( - self.original_calendar_start and self.getFullLabel(self.original_calendar_start), - self.original_calendar_end and self.getFullLabel(self.original_calendar_end), + self.original_calendar_start and self.getFullLabel(self.original_calendar_start, self.raw_resolution), + self.original_calendar_end and self.getFullLabel(self.original_calendar_end, self.raw_resolution), _("All events") ) def getRawCalendarPeriod(self): + + "Return the raw period description for the calendar." + _ = self.page.request.getText return self._getCalendarPeriod( self.raw_calendar_start, @@ -381,9 +393,8 @@ # Generate the links. - download_dialogue_link = "action=EventAggregatorSummary&parent=%s&resolution=%s&search=%s%s%s" % ( + download_dialogue_link = "action=EventAggregatorSummary&parent=%s&search=%s%s%s" % ( self.parent_name or "", - self.resolution, self.search_pattern or "", self.category_name_parameters and "&%s" % self.category_name_parameters, self.remote_source_parameters and "&%s" % self.remote_source_parameters @@ -394,6 +405,14 @@ self.getDateQueryString("end", self.calendar_end, prefix=0) )) + # The entire calendar download uses the originally specified resolution + # of the calendar as does the dialogue. The other link uses the current + # resolution. + + download_dialogue_link += "&resolution=%s" % self.raw_resolution + download_all_link += "&resolution=%s" % self.raw_resolution + download_link += "&resolution=%s" % self.resolution + # Subscription links just explicitly select the RSS format. subscribe_dialogue_link = download_dialogue_link + "&format=RSS" @@ -423,7 +442,7 @@ # Pop-up descriptions of the downloadable calendars. - calendar_period = self.getCalendarPeriod() + shown_calendar_period = self.getCalendarPeriod() original_calendar_period = self.getOriginalCalendarPeriod() raw_calendar_period = self.getRawCalendarPeriod() @@ -450,7 +469,7 @@ append(fmt.text(_("Download this view"))) append(fmt.span(on=0)) # end label append(fmt.span(on=1, css_class="event-download-period")) - append(fmt.text(calendar_period)) + append(fmt.text(shown_calendar_period)) append(fmt.span(on=0)) append(fmt.div(on=0)) @@ -494,7 +513,7 @@ append(linkToPage(request, page, _("Subscribe to this view"), subscribe_link)) append(fmt.span(on=0)) # end label append(fmt.span(on=1, css_class="event-download-period")) - append(fmt.text(calendar_period)) + append(fmt.text(shown_calendar_period)) append(fmt.span(on=0)) append(fmt.div(on=0)) diff -r 17ff0b1fee63 -r 96d7d93d6530 README.txt --- a/README.txt Wed May 01 00:04:59 2013 +0200 +++ b/README.txt Wed May 01 01:44:54 2013 +0200 @@ -359,6 +359,8 @@ * Fixed quoting of special date parameters in navigation URLs and download dialogue URLs. + * Fixed the resolution of whole calendar download/subscription links in day + views. * Changed iCalendar serialisation to use the vContent library, making vContent a requirement of this software. * Refactored the library, replacing the support module with a package diff -r 17ff0b1fee63 -r 96d7d93d6530 actions/EventAggregatorUpdate.py --- a/actions/EventAggregatorUpdate.py Wed May 01 00:04:59 2013 +0200 +++ b/actions/EventAggregatorUpdate.py Wed May 01 01:44:54 2013 +0200 @@ -6,8 +6,9 @@ @license: GNU GPL (v2 or later), see COPYING.txt for details. """ -from MoinDateSupport import getParameterDate, getParameterMonth +from EventAggregatorSupport.Actions import get_date_functions from EventAggregatorSupport import * +from MoinDateSupport import getParameterMonth from MoinMoin.Page import Page from MoinMoin import config @@ -37,6 +38,7 @@ template_name = getParameter(request, "template") parent_name = getParameter(request, "parent") mode = getParameter(request, "mode", "calendar") + raw_resolution = getParameter(request, "raw-resolution") resolution = getParameter(request, "resolution", mode == "day" and "date" or "month") map_name = getParameter(request, "map") @@ -50,22 +52,21 @@ resolution = mode == "calendar" and "month" or resolution - if resolution == "date": - get_date = getParameterDate - else: - get_date = getParameterMonth + # Determine the limits of the calendar. - # Determine the limits of the calendar. + get_date, _get_form_date = get_date_functions(raw_resolution) original_calendar_start = calendar_start = get_date(raw_calendar_start) original_calendar_end = calendar_end = get_date(raw_calendar_end) + wider_calendar_start = getParameterMonth(getParameter(request, "wider-start")) + wider_calendar_end = getParameterMonth(getParameter(request, "wider-end")) + + get_date, _get_form_date = get_date_functions(resolution) + calendar_start = get_date(getParameter(request, "start")) or calendar_start calendar_end = get_date(getParameter(request, "end")) or calendar_end - wider_calendar_start = getParameterMonth(getParameter(request, "wider-start")) - wider_calendar_end = getParameterMonth(getParameter(request, "wider-end")) - # Get the events according to the resolution of the calendar. all_shown_events, first, last = getEventsUsingParameters( @@ -80,7 +81,7 @@ calendar_start, calendar_end, wider_calendar_start, wider_calendar_end, first, last, category_names, remote_sources, search_pattern, template_name, - parent_name, mode, resolution, name_usage, map_name) + parent_name, mode, raw_resolution, resolution, name_usage, map_name) send_headers = get_send_headers(request) send_headers(["Content-Type: text/html; charset=%s" % config.charset]) diff -r 17ff0b1fee63 -r 96d7d93d6530 macros/EventAggregator.py --- a/macros/EventAggregator.py Wed May 01 00:04:59 2013 +0200 +++ b/macros/EventAggregator.py Wed May 01 01:44:54 2013 +0200 @@ -8,10 +8,10 @@ @license: GNU GPL (v2 or later), see COPYING.txt for details. """ +from EventAggregatorSupport.Actions import get_date_functions from EventAggregatorSupport.Resources import getEventsUsingParameters from EventAggregatorSupport.View import View, getQualifiedParameter -from MoinDateSupport import getFormDate, getFormMonth, \ - getParameterDate, getParameterMonth +from MoinDateSupport import getFormMonth from MoinMoin import wikiutil Dependencies = ['pages'] @@ -85,6 +85,7 @@ raw_calendar_end = None calendar_start = None calendar_end = None + raw_mode = None mode = None name_usage = "weekly" calendar_name = None @@ -100,7 +101,7 @@ raw_calendar_end = arg[4:] elif arg.startswith("mode="): - mode = arg[5:] + raw_mode = arg[5:] elif arg.startswith("names="): name_usage = arg[6:] @@ -128,31 +129,30 @@ # Find request parameters to override settings. - mode = getQualifiedParameter(request, calendar_name, "mode", mode or "calendar") + mode = getQualifiedParameter(request, calendar_name, "mode", raw_mode or "calendar") # Different modes require different levels of precision by default. + raw_resolution = raw_mode == "day" and "date" or "month" + resolution = getQualifiedParameter(request, calendar_name, "resolution", mode == "day" and "date" or "month") resolution = mode == "calendar" and "month" or resolution - if resolution == "date": - get_date = getParameterDate - get_form_date = getFormDate - else: - get_date = getParameterMonth - get_form_date = getFormMonth + # Determine the limits of the calendar. - # Determine the limits of the calendar. + get_date, get_form_date = get_date_functions(raw_resolution) original_calendar_start = calendar_start = get_date(raw_calendar_start) original_calendar_end = calendar_end = get_date(raw_calendar_end) + wider_calendar_start = getFormMonth(request, calendar_name, "wider-start") + wider_calendar_end = getFormMonth(request, calendar_name, "wider-end") + + get_date, get_form_date = get_date_functions(resolution) + calendar_start = get_form_date(request, calendar_name, "start") or calendar_start calendar_end = get_form_date(request, calendar_name, "end") or calendar_end - wider_calendar_start = getFormMonth(request, calendar_name, "wider-start") - wider_calendar_end = getFormMonth(request, calendar_name, "wider-end") - # Get the events according to the resolution of the calendar. all_shown_events, first, last = getEventsUsingParameters( @@ -167,7 +167,7 @@ calendar_start, calendar_end, wider_calendar_start, wider_calendar_end, first, last, category_names, remote_sources, search_pattern, template_name, - parent_name, mode, resolution, name_usage, map_name) + parent_name, mode, raw_resolution, resolution, name_usage, map_name) return view.render(all_shown_events)