From 12896b24dbcc9889e64132bb91f6b26495ef135e Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 16 Oct 2009 19:38:23 +0000 Subject: [PATCH] Fix scrolling issues when selecting events in the web calendar module. Monotone-Parent: a74db01453c909399692b43b08ec1c2e4a21a2fa Monotone-Revision: bdd11428b30ea8b34d0aab6d7ff6ef311b949890 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2009-10-16T19:38:23 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 7 +++++++ UI/WebServerResources/SchedulerUI.js | 30 ++++++++++++++++++---------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index a1c850420..8d09934da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-10-16 Francis Lachapelle + * UI/WebServerResources/SchedulerUI.js (eventsListCallback): don't + set the hour attribute for all-day events. + (changeCalendarDisplay): enable auto-scroll when scrolling + to an event (!). + (refreshCalendarEventsCallback): idem. + (scrollDayView): don't scroll when selecting an all-day event. + * UI/Scheduler/UIxComponentEditor.m (-_loadRRules): the repeat rule interval can be set unconditionally for weekly rules. When an end date or repeat count is defined, the rule must be considered diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index bf21a1506..4e1688f76 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -601,7 +601,8 @@ function eventsListCallback(http) { var startDate = new Date(); startDate.setTime(data[i][4] * 1000); row.day = startDate.getDayString(); - row.hour = startDate.getHourString(); + if (!data[i][7]) + row.hour = startDate.getHourString(); // event is not all day row.observe("mousedown", onRowClick); row.observe("selectstart", listRowMouseDownHandler); if (data[i][2] != null) @@ -827,13 +828,15 @@ function changeCalendarDisplay(data, newView) { var selectedLink = $$('table#dateSelectorTable span[day='+day+']'); if (selectedLink.length > 0) { selectedCell = selectedLink[0].getParentWithTagName("td"); - selectedCell.selectElement(); + $(selectedCell).selectElement(); document.selectedDate = selectedCell; } // Scroll to event - if (scrollEvent) + if (scrollEvent) { + preventAutoScroll = false; scrollDayView(scrollEvent); + } return false; } @@ -913,13 +916,15 @@ function scrollDayView(scrollEvent) { else contentView = $("daysView"); - var top = firstEvent.cumulativeOffset()[1] - contentView.scrollTop; - - // Don't scroll if the event is visible to the user - if (top < contentView.cumulativeOffset()[1]) - contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; - else if (top > contentView.cumulativeOffset()[1] + contentView.getHeight() - firstEvent.getHeight()) - contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; + // Don't scroll to an all-day event + if (typeof eventRow.hour != "undefined") { + var top = firstEvent.cumulativeOffset()[1] - contentView.scrollTop; + // Don't scroll if the event is visible to the user + if (top < contentView.cumulativeOffset()[1]) + contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; + else if (top > contentView.cumulativeOffset()[1] + contentView.getHeight() - firstEvent.getHeight()) + contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; + } } else if (currentView != "monthview") { var contentView = $("daysView"); @@ -1020,7 +1025,10 @@ function refreshCalendarEventsCallback(http) { } onWindowResize(null); } - scrollDayView(http.callbackData["scrollEvent"]); + if (http.callbackData["scrollEvent"]) { + preventAutoScroll = false; + scrollDayView(http.callbackData["scrollEvent"]); + } } else log("AJAX error when refreshing calendar events");