diff --git a/calendar/base/content/calendar-decorated-month-view.xml b/calendar/base/content/calendar-decorated-month-view.xml index 4dfd2c1bf964..5f4ee78f8074 100644 --- a/calendar/base/content/calendar-decorated-month-view.xml +++ b/calendar/base/content/calendar-decorated-month-view.xml @@ -64,6 +64,8 @@ viewElem.weekStartOffset = pb2.getIntPref("calendar.week.start"); } catch (ex) {} + this.updateDaysOffPrefs(); + // add a preference observer to monitor changes pb2.addObserver("calendar.", this.mPrefObserver, false); return; @@ -85,6 +87,20 @@ switch (pref) { + case "calendar.previousweeks.inview": + case "calendar.week.d0sundaysoff": + case "calendar.week.d1mondaysoff": + case "calendar.week.d2tuesdaysoff": + case "calendar.week.d3wednesdaysoff": + case "calendar.week.d4thursdaysoff": + case "calendar.week.d5fridaysoff": + case "calendar.week.d6saturdaysoff": + this.calView.updateDaysOffPrefs(); + if (this.calView.selectedDay) { + this.calView.goToDay(this.calView.selectedDay); + } + break; + case "calendar.week.start": viewElem = document.getAnonymousElementByAttribute( this.calView, "anonid", "view-element"); @@ -119,6 +135,7 @@ + + + + diff --git a/calendar/base/content/calendar-decorated-multiweek-view.xml b/calendar/base/content/calendar-decorated-multiweek-view.xml index 02b6b86e00c5..2938f1e14ed5 100644 --- a/calendar/base/content/calendar-decorated-multiweek-view.xml +++ b/calendar/base/content/calendar-decorated-multiweek-view.xml @@ -69,6 +69,8 @@ this.mWeeksInView = pb2.getIntPref("calendar.weeks.inview"); } catch (ex) {} + this.updateDaysOffPrefs(); + // add a preference observer to monitor changes pb2.addObserver("calendar.", this.mPrefObserver, false); return; @@ -90,6 +92,20 @@ switch (pref) { + case "calendar.previousweeks.inview": + case "calendar.week.d0sundaysoff": + case "calendar.week.d1mondaysoff": + case "calendar.week.d2tuesdaysoff": + case "calendar.week.d3wednesdaysoff": + case "calendar.week.d4thursdaysoff": + case "calendar.week.d5fridaysoff": + case "calendar.week.d6saturdaysoff": + this.calView.updateDaysOffPrefs(); + if (this.calView.selectedDay) { + this.calView.goToDay(this.calView.selectedDay); + } + break; + case "calendar.week.start": viewElem = document.getAnonymousElementByAttribute( this.calView, "anonid", "view-element"); @@ -146,6 +162,7 @@ var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element"); viewElement.showFullMonth = false; viewElement.tasksInView = this.mTasksInView; + viewElement.displayDaysOff = !this.mWorkdaysOnly; aDate = aDate.getInTimezone(viewElement.timezone); @@ -219,10 +236,34 @@ + + + + diff --git a/calendar/base/content/calendar-decorated-week-view.xml b/calendar/base/content/calendar-decorated-week-view.xml index 9643ef723989..728b4b0cd064 100644 --- a/calendar/base/content/calendar-decorated-week-view.xml +++ b/calendar/base/content/calendar-decorated-week-view.xml @@ -106,6 +106,22 @@ switch (pref) { + case "calendar.previousweeks.inview": + case "calendar.week.d0sundaysoff": + case "calendar.week.d1mondaysoff": + case "calendar.week.d2tuesdaysoff": + case "calendar.week.d3wednesdaysoff": + case "calendar.week.d4thursdaysoff": + case "calendar.week.d5fridaysoff": + case "calendar.week.d6saturdaysoff": + if (!this.calView.startDay || !this.calView.endDay) { + // Don't refresh if we're not initialized + return; + } + + this.calView.goToDay(this.calView.selectedDay); + break; + case "calendar.view.defaultstarthour": this.calView.mStartMin = subj.getIntPref(pref) * 60; var viewElem = document.getAnonymousElementByAttribute( diff --git a/calendar/base/content/calendar-month-view.xml b/calendar/base/content/calendar-month-view.xml index 9d0148fe21a0..856531e94861 100644 --- a/calendar/base/content/calendar-month-view.xml +++ b/calendar/base/content/calendar-month-view.xml @@ -462,7 +462,8 @@ true true 0 - + [0,6] + true + + + + + + + + + + @@ -920,9 +941,12 @@ } else { boxClass = "calendar-month-day-box-even"; } - // XXX isWeekend? - if (date.weekday == 0 || date.weekday == 6) + + function matchesDayOff(dayOffNum) { return dayOffNum == date.weekday; } + if (this.mDaysOffArray.some(matchesDayOff)) { boxClass = "calendar-month-day-box-weekend " + boxClass; + } + box.setAttribute("class", boxClass); curRow.appendChild(box); @@ -951,6 +975,7 @@ // Store these, so that we can access them later this.mDateBoxes = dateBoxes; + this.hideDaysOff(); ]]> @@ -1004,8 +1029,11 @@ var boxClass = "calendar-month-day-box-" + ((mainMonth == date.month) ? "even" : "odd"); - if (date.weekday == 0 || date.weekday == 6) + function matchesDayOff(dayOffNum) { return dayOffNum == date.weekday; } + if (this.mDaysOffArray.some(matchesDayOff)) { boxClass = "calendar-month-day-box-weekend " + boxClass; + } + box.setAttribute("class", boxClass); box.setDate(date); @@ -1024,6 +1052,20 @@ this.mDateBoxes[0].showMonthLabel = true; this.mDateBoxes[this.mDateBoxes.length-1].showMonthLabel = true; } + this.hideDaysOff(); + ]]> + + + + diff --git a/calendar/resources/content/pref/rootCalendarPref.js b/calendar/resources/content/pref/rootCalendarPref.js index 3d40e45361e4..2c92befd612f 100644 --- a/calendar/resources/content/pref/rootCalendarPref.js +++ b/calendar/resources/content/pref/rootCalendarPref.js @@ -60,18 +60,6 @@ calendarPrefObserver.prototype = // when calendar pref was changed, we reinitialize switch( prefName ) { - case "calendar.previousweeks.inview": - case "calendar.week.d0sundaysoff": - case "calendar.week.d1mondaysoff": - case "calendar.week.d2tuesdaysoff": - case "calendar.week.d3wednesdaysoff": - case "calendar.week.d4thursdaysoff": - case "calendar.week.d5fridaysoff": - case "calendar.week.d6saturdaysoff": - if (this.CalendarPreferences.calendarWindow.currentView != null) { - this.CalendarPreferences.calendarWindow.currentView.refresh(); - } - break; case "calendar.week.start": if (this.CalendarPreferences.calendarWindow.currentView != null) { this.CalendarPreferences.calendarWindow.currentView.refresh();