зеркало из https://github.com/mozilla/pjs.git
Bug 321608 First day of week setting not honoured in multiweek or month views. r=mvl
This commit is contained in:
Родитель
045ed3e89a
Коммит
5703cefa32
|
@ -53,6 +53,60 @@
|
|||
</content>
|
||||
|
||||
<implementation implements="calIDecoratedView">
|
||||
<constructor><![CDATA[
|
||||
var pb2 = Components.classes
|
||||
["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch2);
|
||||
// Set the preference for the default start of the week
|
||||
viewElem = document.getAnonymousElementByAttribute(
|
||||
this, "anonid", "view-element");
|
||||
try {
|
||||
viewElem.weekStartOffset = pb2.getIntPref("calendar.week.start");
|
||||
} catch (ex) {}
|
||||
|
||||
// add a preference observer to monitor changes
|
||||
pb2.addObserver("calendar.", this.mPrefObserver, false);
|
||||
return;
|
||||
]]></constructor>
|
||||
|
||||
<destructor><![CDATA[
|
||||
var pb2 = Components.classes
|
||||
["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch2);
|
||||
pb2.removeObserver("calendar.", this.mPrefObserver);
|
||||
return;
|
||||
]]></destructor>
|
||||
|
||||
<field name="mPrefObserver"><![CDATA[
|
||||
({ calView: this,
|
||||
observe: function calDecWeekViewPrefChange(subj, topic, pref) {
|
||||
|
||||
subj.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
|
||||
switch (pref) {
|
||||
|
||||
case "calendar.week.start":
|
||||
viewElem = document.getAnonymousElementByAttribute(
|
||||
this.calView, "anonid", "view-element");
|
||||
viewElem.weekStartOffset = subj.getIntPref(pref);
|
||||
|
||||
if (!this.calView.startDay || !this.calView.endDay) {
|
||||
// Don't refresh if we're not initialized
|
||||
return;
|
||||
}
|
||||
|
||||
// Refresh the view so the settings take effect
|
||||
this.calView.goToDay(this.calView.selectedDay);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
})
|
||||
]]></field>
|
||||
|
||||
<property name="observerID">
|
||||
<getter><![CDATA[
|
||||
return "month-view-observer";
|
||||
|
|
|
@ -54,6 +54,60 @@
|
|||
</content>
|
||||
|
||||
<implementation implements="calIDecoratedView">
|
||||
<constructor><![CDATA[
|
||||
var pb2 = Components.classes
|
||||
["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch2);
|
||||
// Set the preference for the default start of the week
|
||||
viewElem = document.getAnonymousElementByAttribute(
|
||||
this, "anonid", "view-element");
|
||||
try {
|
||||
viewElem.weekStartOffset = pb2.getIntPref("calendar.week.start");
|
||||
} catch (ex) {}
|
||||
|
||||
// add a preference observer to monitor changes
|
||||
pb2.addObserver("calendar.", this.mPrefObserver, false);
|
||||
return;
|
||||
]]></constructor>
|
||||
|
||||
<destructor><![CDATA[
|
||||
var pb2 = Components.classes
|
||||
["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch2);
|
||||
pb2.removeObserver("calendar.", this.mPrefObserver);
|
||||
return;
|
||||
]]></destructor>
|
||||
|
||||
<field name="mPrefObserver"><![CDATA[
|
||||
({ calView: this,
|
||||
observe: function calDecWeekViewPrefChange(subj, topic, pref) {
|
||||
|
||||
subj.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
|
||||
switch (pref) {
|
||||
|
||||
case "calendar.week.start":
|
||||
viewElem = document.getAnonymousElementByAttribute(
|
||||
this.calView, "anonid", "view-element");
|
||||
viewElem.weekStartOffset = subj.getIntPref(pref);
|
||||
|
||||
if (!this.calView.startDay || !this.calView.endDay) {
|
||||
// Don't refresh if we're not initialized
|
||||
return;
|
||||
}
|
||||
|
||||
// Refresh the view so the settings take effect
|
||||
this.calView.goToDay(this.calView.selectedDay);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
})
|
||||
]]></field>
|
||||
|
||||
<field name="mWeeksInView">4</field>
|
||||
|
||||
<property name="weeksInView">
|
||||
|
@ -85,7 +139,6 @@
|
|||
"@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
var calBranch = prefService.getBranch("calendar.");
|
||||
var weekStartOffset = calBranch.getIntPref("week.start");
|
||||
|
||||
// Get the first date that should be shown. This is the
|
||||
// start of the week of the day that we're centering around
|
||||
|
@ -100,23 +153,6 @@
|
|||
d2.day += 7*(this.mWeeksInView-1);
|
||||
d2.normalize();
|
||||
|
||||
// startOfWeek always returns a Sunday. If the user is in
|
||||
// a locale that starts weeks on a different day, adjust
|
||||
// XXX-this currently has no effect
|
||||
if (weekStartOffset != 0) {
|
||||
d1.day += weekStartOffset;
|
||||
d2.day += weekStartOffset;
|
||||
|
||||
// In this case, we actually jumped a week ahead
|
||||
if (aDate.weekday < weekStartOffset) {
|
||||
d1.day -= 7;
|
||||
d2.day -= 7;
|
||||
}
|
||||
|
||||
d1.normalize();
|
||||
d2.normalize();
|
||||
}
|
||||
|
||||
viewElement.setDateRange(d1,d2);
|
||||
|
||||
if (this.mWorkdaysOnly) {
|
||||
|
|
|
@ -77,8 +77,12 @@
|
|||
viewElement.setStartEndMinutes(this.mStartMin,
|
||||
this.mEndMin);
|
||||
|
||||
try {
|
||||
this.mWeekStartOffset = pb2.getIntPref("calendar.week.start");
|
||||
} catch (ex) {}
|
||||
|
||||
// add a preference observer to monitor changes
|
||||
pb2.addObserver("calendar.view.", this.mPrefObserver, false);
|
||||
pb2.addObserver("calendar.", this.mPrefObserver, false);
|
||||
return;
|
||||
]]></constructor>
|
||||
|
||||
|
@ -86,12 +90,13 @@
|
|||
var pb2 = Components.classes
|
||||
["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch2);
|
||||
pb2.removeObserver("calendar.view.", this.mPrefObserver);
|
||||
pb2.removeObserver("calendar.", this.mPrefObserver);
|
||||
return;
|
||||
]]></destructor>
|
||||
|
||||
<field name="mStartMin">8 * 60</field>
|
||||
<field name="mEndMin">17 * 60</field>
|
||||
<field name="mWeekStartOffset">0</field>
|
||||
|
||||
<field name="mPrefObserver"><![CDATA[
|
||||
({ calView: this,
|
||||
|
@ -117,6 +122,18 @@
|
|||
this.calView.mEndMin);
|
||||
break;
|
||||
|
||||
case "calendar.week.start":
|
||||
this.calView.mWeekStartOffset = subj.getIntPref(pref);
|
||||
|
||||
if (!this.calView.startDay || !this.calView.endDay) {
|
||||
// Don't refresh if we're not initialized
|
||||
return;
|
||||
}
|
||||
|
||||
// Refresh the view. goToDay will do the calculation
|
||||
this.calView.goToDay(this.calView.selectedDay);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -138,16 +155,11 @@
|
|||
var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element");
|
||||
viewElement.tasksInView = this.mTasksInView;
|
||||
|
||||
// Get the preferences that we'll need
|
||||
var prefService = Components.classes[
|
||||
"@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
var calBranch = prefService.getBranch("calendar.");
|
||||
var weekStartOffset = calBranch.getIntPref("week.start");
|
||||
|
||||
var d1 = aDate.startOfWeek.clone();
|
||||
var d2 = aDate.endOfWeek.clone();
|
||||
|
||||
var weekStartOffset = this.mWeekStartOffset;
|
||||
|
||||
// startOfWeek always returns a Sunday. Adjust if the user
|
||||
// chose a different day to start weeks on.
|
||||
if (weekStartOffset != 0) {
|
||||
|
|
|
@ -464,6 +464,8 @@
|
|||
<field name="mShowDaysOutsideMonth">true</field>
|
||||
<field name="mTasksInView">true</field>
|
||||
<field name="mShowFullMonth">true</field>
|
||||
<field name="mWeekStartOffset">0</field>
|
||||
|
||||
|
||||
<field name="mSelectionObserver"><![CDATA[
|
||||
({ calView: this,
|
||||
|
@ -525,6 +527,15 @@
|
|||
]]></setter>
|
||||
</property>
|
||||
|
||||
<property name="weekStartOffset">
|
||||
<getter><![CDATA[
|
||||
return this.mWeekStartOffset;
|
||||
]]></getter>
|
||||
<setter><![CDATA[
|
||||
this.mWeekStartOffset = val;
|
||||
]]></setter>
|
||||
</property>
|
||||
|
||||
<property name="controller"
|
||||
onget="return this.mController;"
|
||||
onset="return this.mController = val;"/>
|
||||
|
@ -634,9 +645,23 @@
|
|||
|
||||
|
||||
<method name="showDate">
|
||||
<parameter name="aDate"/>
|
||||
<body><![CDATA[
|
||||
this.setDateRange(aDate.startOfMonth, aDate.endOfMonth);
|
||||
<parameter name="aDate"/>
|
||||
<body><![CDATA[
|
||||
// We might need to do some adjusting here to make sure we still
|
||||
// display whole month even with alternative week-start days
|
||||
var startDate = aDate.startOfMonth;
|
||||
var endDate = aDate.endOfMonth;
|
||||
if (startDate.weekday < this.mWeekStartOffset) {
|
||||
// Go back one week to make sure we display this day
|
||||
startDate.day -= 7;
|
||||
}
|
||||
|
||||
if (endDate.weekday < this.mWeekStartOffset) {
|
||||
// Go back one week so we don't display any extra days
|
||||
endDate.day -= 7;
|
||||
}
|
||||
|
||||
this.setDateRange(startDate, endDate);
|
||||
this.selectedDay = aDate.getInTimezone(this.mTimezone);
|
||||
]]></body>
|
||||
</method>
|
||||
|
@ -653,6 +678,11 @@
|
|||
this.mStartDate = aStartDate.startOfWeek;
|
||||
this.mEndDate = aEndDate.endOfWeek;
|
||||
|
||||
this.mStartDate.day += this.mWeekStartOffset;
|
||||
this.mEndDate.day += this.mWeekStartOffset;
|
||||
this.mStartDate.normalize();
|
||||
this.mEndDate.normalize();
|
||||
|
||||
this.refresh();
|
||||
]]></body>
|
||||
</method>
|
||||
|
@ -744,6 +774,17 @@
|
|||
return document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", el);
|
||||
}
|
||||
|
||||
// Adjust headers based on the starting day of the week, if necessary
|
||||
var headerbox = document.getAnonymousElementByAttribute(this, "anonid", "headerbox");
|
||||
|
||||
if (headerbox.firstChild.index != this.mWeekStartOffset) {
|
||||
var i = 0;
|
||||
for each(header in headerbox.childNodes) {
|
||||
header.index = (i + this.mWeekStartOffset) % 7;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.mSelectedItem) {
|
||||
this.selectedItem = null;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче