bug 360479: move workweek days calculation to multiday-view so it refreshes just once. patch by gekacheka@yahoo.com, r=lilmatt, jminta
git-svn-id: svn://10.0.0.236/trunk@217250 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -151,6 +151,7 @@
|
||||
<body><![CDATA[
|
||||
var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element");
|
||||
viewElement.tasksInView = this.mTasksInView;
|
||||
viewElement.displayDaysOff = !this.mWorkdaysOnly;
|
||||
|
||||
aDate = aDate.getInTimezone(viewElement.timezone);
|
||||
|
||||
@@ -171,13 +172,8 @@
|
||||
d1.normalize();
|
||||
d2.normalize();
|
||||
}
|
||||
|
||||
document.getAnonymousElementByAttribute(this, "anonid", "view-element").setDateRange(d1, d2);
|
||||
|
||||
viewElement.setDateRange(d1, d2);
|
||||
viewElement.selectedDay = aDate;
|
||||
if (this.mWorkdaysOnly) {
|
||||
this.removeNonWorkdays();
|
||||
}
|
||||
this.setNavLabels(aDate);
|
||||
]]></body>
|
||||
</method>
|
||||
@@ -215,32 +211,6 @@
|
||||
document.getAnonymousElementByAttribute(this, "anonid", "nav-control").setNames(nameArray);
|
||||
]]></body>
|
||||
</method>
|
||||
<method name="removeNonWorkdays">
|
||||
<body><![CDATA[
|
||||
var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element")
|
||||
var dateList = viewElement.getDateList({});
|
||||
|
||||
var prefService = Components.classes[
|
||||
"@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
var weekBranch = prefService.getBranch("calendar.week.");
|
||||
var prefNames = ["d0sundaysoff", "d1mondaysoff", "d2tuesdaysoff",
|
||||
"d3wednesdaysoff", "d4thursdaysoff",
|
||||
"d5fridaysoff", "d6saturdaysoff"];
|
||||
function getPrefValue(prefName) {
|
||||
return weekBranch.getBoolPref(prefName)
|
||||
}
|
||||
var prefValueArray = prefNames.map(getPrefValue);
|
||||
var newDateList = new Array();
|
||||
|
||||
for each(date in dateList) {
|
||||
if (!prefValueArray[date.weekday]) {
|
||||
newDateList.push(date);
|
||||
}
|
||||
}
|
||||
viewElement.setDateList(newDateList.length, newDateList);
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
<method name="updateDaysOffPrefs">
|
||||
<body><![CDATA[
|
||||
|
||||
@@ -1703,6 +1703,7 @@
|
||||
<field name="mStartMin">0*60</field>
|
||||
<field name="mEndMin">24*60</field>
|
||||
<field name="mTasksInView">false</field>
|
||||
<field name="mDisplayDaysOff">true</field>
|
||||
<field name="mDaysOffArray">[0,6]</field>
|
||||
<field name="mTimezone">"UTC"</field>
|
||||
|
||||
@@ -1950,6 +1951,10 @@
|
||||
]]></setter>
|
||||
</property>
|
||||
|
||||
<property name="displayDaysOff"
|
||||
onget="return this.mDisplayDaysOff;"
|
||||
onset="return (this.mDisplayDaysOff = val);"/>
|
||||
|
||||
<property name="daysOffArray">
|
||||
<getter><![CDATA[
|
||||
return this.mDaysOffArray;
|
||||
@@ -2005,22 +2010,40 @@
|
||||
<parameter name="aStartDate"/>
|
||||
<parameter name="aEndDate"/>
|
||||
<body><![CDATA[
|
||||
//dump ("setDateRange\n");
|
||||
this.mDateList = null;
|
||||
// normalize dates to display timezone
|
||||
var startDate = aStartDate.getInTimezone(this.mTimezone);
|
||||
startDate.isDate = true;
|
||||
var endDate = aEndDate.getInTimezone(this.mTimezone);
|
||||
endDate.isDate = true;
|
||||
// make sure unnormalized version not used below
|
||||
aStartDate = aEndDate = null;
|
||||
|
||||
this.mStartDate = aStartDate.getInTimezone(this.mTimezone);
|
||||
this.mStartDate.isDate = true;
|
||||
this.mStartDate.makeImmutable();
|
||||
|
||||
this.mEndDate = aEndDate.getInTimezone(this.mTimezone);
|
||||
this.mEndDate.isDate = true;
|
||||
this.mEndDate.makeImmutable();
|
||||
|
||||
// this function needs to be smarter, and needs to compare
|
||||
// the current date range and add/remove, instead of just
|
||||
// replacing.
|
||||
|
||||
this.refresh();
|
||||
if (this.mDisplayDaysOff) {
|
||||
startDate.makeImmutable();
|
||||
endDate.makeImmutable();
|
||||
this.mDateList = null;
|
||||
this.mStartDate = startDate;
|
||||
this.mEndDate = endDate;
|
||||
//
|
||||
// For a true multiday view (e.g, 3 days advanced by one day
|
||||
// at a time), a smarter refresh could reuse boxes, comparing
|
||||
// the current date range and add/remove, instead of just
|
||||
// replacing.
|
||||
//
|
||||
this.refresh();
|
||||
} else { // workdays only
|
||||
var dateList = new Array();
|
||||
for (var d = startDate.clone(); d.compare(endDate) <= 0;) {
|
||||
if (this.mDaysOffArray.indexOf(d.weekday) == -1) {
|
||||
var workday = d.clone();
|
||||
workday.makeImmutable();
|
||||
dateList.push(workday);
|
||||
}
|
||||
d.day += 1;
|
||||
d.normalize();
|
||||
}
|
||||
this.setDateList(dateList.length, dateList);
|
||||
}
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
@@ -2422,8 +2445,7 @@
|
||||
}
|
||||
setUpDayHeaderBox(dayHeaderBox);
|
||||
|
||||
function matchesDayOff(dayOffNum) { return dayOffNum == d.weekday; }
|
||||
if (this.mDaysOffArray.some(matchesDayOff)) {
|
||||
if (0 <= this.mDaysOffArray.indexOf(d.weekday)) {
|
||||
dayEventsBox.setAttribute("weekend", "true");
|
||||
dayHeaderBox.setAttribute("weekend", "true");
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user