# HG changeset patch # User Paul Boddie # Date 1445810134 -3600 # Node ID ac535227a950c4d2f103ba2638727ea268c4722e # Parent de1b9500ebbff4413c183d11e1ebd7acdd4df193 Added navigation directly to earlier and later events. diff -r de1b9500ebbf -r ac535227a950 htdocs/styles.css --- a/htdocs/styles.css Sun Oct 25 22:54:49 2015 +0100 +++ b/htdocs/styles.css Sun Oct 25 22:55:34 2015 +0100 @@ -244,6 +244,8 @@ input#earlier, input#later, +input#earlier-events, +input#later-events, input#hidebusy, input#showdays, diff -r de1b9500ebbf -r ac535227a950 imipweb/calendar.py --- a/imipweb/calendar.py Sun Oct 25 22:54:49 2015 +0100 +++ b/imipweb/calendar.py Sun Oct 25 22:55:34 2015 +0100 @@ -300,11 +300,11 @@ page.input(name="reset", type="submit", value="Clear selections", id="reset") page.p.close() - def show_time_navigation(self, view_period): + def show_time_navigation(self, freebusy, view_period): """ - Show the calendar navigation links for the period defined by - 'view_period'. + Show the calendar navigation links for the schedule defined by + 'freebusy' and for the period defined by 'view_period'. """ page = self.page @@ -312,19 +312,40 @@ view_end = view_period.get_end() duration = view_period.get_duration() + preceding_events = view_start and get_overlapping(freebusy, Period(None, view_start, self.get_tzid())) or [] + following_events = view_end and get_overlapping(freebusy, Period(view_end, None, self.get_tzid())) or [] + + last_preceding = preceding_events and to_date(preceding_events[-1].get_end()) + timedelta(1) or None + first_following = following_events and to_date(following_events[0].get_start()) or None + page.p(id_="time-navigation") if view_start: + if last_preceding: + preceding_start = last_preceding - duration + page.label("Show earlier events", for_="earlier-events", class_="earlier") + page.input(name="earlier-events", id_="earlier-events", type="submit") + page.input(name="earlier-events-start", type="hidden", value=format_datetime(preceding_start)) + page.input(name="earlier-events-end", type="hidden", value=format_datetime(last_preceding)) + earlier_start = view_start - duration - page.label("Show earlier events", for_="earlier", class_="earlier") + page.label("Show earlier", for_="earlier", class_="earlier") page.input(name="earlier", id_="earlier", type="submit") page.input(name="earlier-start", type="hidden", value=format_datetime(earlier_start)) page.input(name="earlier-end", type="hidden", value=format_datetime(view_start)) + page.input(name="start", type="hidden", value=format_datetime(view_start)) if view_end: + if first_following: + following_end = first_following + duration + page.label("Show later events", for_="later-events", class_="later") + page.input(name="later-events", id_="later-events", type="submit") + page.input(name="later-events-start", type="hidden", value=format_datetime(first_following)) + page.input(name="later-events-end", type="hidden", value=format_datetime(following_end)) + later_end = view_end + duration - page.label("Show later events", for_="later", class_="later") + page.label("Show later", for_="later", class_="later") page.input(name="later", id_="later", type="submit") page.input(name="later-start", type="hidden", value=format_datetime(view_end)) page.input(name="later-end", type="hidden", value=format_datetime(later_end)) @@ -340,9 +361,15 @@ if args.has_key("earlier"): start_name, end_name = "earlier-start", "earlier-end" break + elif args.has_key("earlier-events"): + start_name, end_name = "earlier-events-start", "earlier-events-end" + break elif args.has_key("later"): start_name, end_name = "later-start", "later-end" break + elif args.has_key("later-events"): + start_name, end_name = "later-events-start", "later-events-end" + break elif args.has_key("start") or args.has_key("end"): start_name, end_name = "start", "end" break @@ -551,11 +578,13 @@ self.show_requests_on_page() self.show_participants_on_page(participants) + # Get the view period and details of events within it and outside it. + + view_period = self.get_view_period() + # Day view: start at the earliest known day and produce days until the # latest known day, with expandable sections of empty days. - view_period = self.get_view_period() - (days, partitioned_groups, partitioned_group_types, partitioned_group_sources, group_columns) = \ self.get_period_group_details(freebusy, participants, view_period) @@ -567,7 +596,7 @@ self.show_view_period(view_period) self.show_calendar_controls() - self.show_time_navigation(view_period) + self.show_time_navigation(freebusy, view_period) # Show the calendar itself.