merge of '29fd9949fb7298bd5c25f926f16a0126f65f6b15'

and '8db65223b26070872a7995e55aefc91c7b932796'

Monotone-Parent: 29fd9949fb7298bd5c25f926f16a0126f65f6b15
Monotone-Parent: 8db65223b26070872a7995e55aefc91c7b932796
Monotone-Revision: fdc663e746cda0a1106c97d2d9af95b6eb0d1b40

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2010-05-27T17:08:22
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Francis Lachapelle 2010-05-27 17:08:22 +00:00
commit 4b63a768c4
16 changed files with 94 additions and 107 deletions

View File

@ -1,3 +1,9 @@
2010-05-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/UIxAttendeesEditor.js: (prepareAttendees):
automatically append a new attendee line when the window is loaded
and no attendee is present in the list yet.
2010-05-27 Francis Lachapelle <flachapelle@inverse.ca>
* UI/MailerUI/UIxMailListActions.m: renamed from
@ -41,6 +47,20 @@
moved those methods from UIxMailListView, since the messages table
is now populated with a JSON representation of the data.
2010-05-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/UIxAttendeesEditor.js:
(toggleOfficeHours): removed obsolete method.
(initialiseTimeSlotWidgets): we now initialize the time range
hours to the day start hour and day end hour, respectively,
instead of the event start and end time.
(handleAllDay): we make use of the "dayStartHour" and "dayEndHour"
variables instead of hardcoded values. Also, we hide the time
range widgets when this code is executed.
(availabilityController.onNextSlotClick,
availabilityController.onPreviousSlotClick): ignore clicks when a
request is already active.
2010-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoCalendarComponent.m

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "A data que você informou ocorre antes da data ini
"Next hour" = "Próxima hora";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "Zadané datum konce je před začátkem události.
"Next hour" = "Následující hodina";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,7 +484,6 @@ validate_endbeforestart = "Het begin vindt plaats vóór het einde.";
"Next hour" = "Volgend uur";
"Work days only" = "Slechts werkdagen";
"The whole day" = "De hele dag";
"During specified hours" = "Tijdens gespecificeerde uren";
"and" = "en";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "The end date that you entered occurs before the st
"Next hour" = "Next hour";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "La date de fin est avant la date de début.";
"Next hour" = "Prochaine heure";
"Work days only" = "Seulement les jours ouvrables";
"The whole day" = "La journée complète";
"During office hours" = "Pendant les heures de bureau";
"During specified hours" = "Pendant les heures spécifiées";
"and" = "et";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "Ihr Beginn ist nach dem Ende";
"Next hour" = "Nächste Stunde";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "A megadott befejező dátum korábbi, mint a kezd
"Next hour" = "Következő óra";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "La data finale specificata è precedente alla data
"Next hour" = "Ora successiva";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "The end date that you entered occurs before the st
"Next hour" = "Next hour";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "Su fecha/hora de comienzo es posterio a la de fina
"Next hour" = "Hora siguiente";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "Angivet slutdatumet inträffar före angivet start
"Next hour" = "Nästa timme";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -484,8 +484,6 @@ validate_endbeforestart = "Mae'r dyddiad gorffen sydd wedi'i roi yn digwydd c
"Next hour" = "Awr nesaf";
"Work days only" = "Work days only";
"The whole day" = "The whole day";
"During office hours" = "During office hours";
"During specified hours" = "During specified hours";
"and" = "and";
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"

View File

@ -19,6 +19,28 @@
var dayEndHour = <var:string value="dayEndHour"/>;
</script>
<div id="attendeesView">
<form const:href=""
><div id="freeBusyViewButtons">
<var:string label:value="Suggest time slot:"/>
<span id="freeBusyTimeRange">
<var:string label:value="Between:"/>
<select const:id="timeSlotStartLimitHour"><!-- space --></select>
<select const:id="timeSlotStartLimitMinute"><!-- space --></select>
<var:string label:value="and"/>
<select const:id="timeSlotEndLimitHour"><!-- space --></select>
<select const:id="timeSlotEndLimitMinute"><!-- space --></select>
</span>
<label><input type="checkbox" const:id="workDaysOnly"
const:checked="YES"
/><var:string label:value="Work days only"/></label>
<a id="nextSlot" href="#" class="button"
><span><var:string label:value="Next slot" /></span></a>
<a id="previousSlot" href="#" class="button"
><span><var:string label:value="Previous slot" /></span></a>
</div></form>
<div id="freeBusyView">
<table id="freeBusy" cellspacing="0" cellpadding="0">
<thead>
@ -88,35 +110,6 @@
><var:string label:value="No free-busy information" /></li>
</ul>
</div>
<form const:href=""
><div id="freeBusyViewButtons">
<var:string label:value="Suggest time slot:"/><br/>
<label><input type="checkbox" const:id="workDaysOnly"
const:checked="YES"
/><var:string label:value="Work days only"/></label>
<select name="timeSlotLimits" const:id="timeSlotLimits">
<option value="whole-day"
><var:string label:value="The whole day"
/></option>
<option value="office-hours"
const:selected="yes"
><var:string label:value="During office hours"
/></option>
<option value="range"
><var:string label:value="During specified hours"/></option>
</select><br/>
<select const:id="timeSlotStartLimitHour"><!-- space --></select>
<select const:id="timeSlotStartLimitMinute"><!-- space --></select>
<var:string label:value="and"/>
<select const:id="timeSlotEndLimitHour"><!-- space --></select>
<select const:id="timeSlotEndLimitMinute"><!-- space --></select>
<br/>
<a id="nextSlot" href="#" class="button"
><span><var:string label:value="Next slot" /></span></a>
<a id="previousSlot" href="#" class="button"
><span><var:string label:value="Previous slot" /></span></a>
</div
></form>
<div id="freeBusyReplicas">
<div><span><var:string label:value="Start:"
/></span><var:component className="UIxTimeDateControl"

View File

@ -12,7 +12,7 @@ DIV#attendeesView
DIV#freeBusyView
{ background-color: #fff;
position: absolute;
top: 5px;
top: 30px;
bottom: 135px;
left: 0px;
right: 0px;
@ -240,23 +240,15 @@ TABLE#freeBusyData TD.noFreeBusy
{ background-color: #e09ebd; }
#freeBusyViewButtons
{ border: 1px solid #aaa;
float: left;
width: 320px;
margin: 0px;
padding: 5px;
{ margin: 0px;
text-align: left; }
SPAN.hidden
{ display: none; }
#freeBusyViewButtons > DIV.buttons
{ margin: 0px;
margin-top: 4px;
background-color: #000; }
DIV#freeBusyZoomButtons
{ position: absolute;
height: 2em;
top: 0px;
right: 0px; }
margin-top: 4px; }
DIV#freeBusyReplicas
{ position: absolute;

View File

@ -20,15 +20,17 @@ var attendeesEditor = {
};
function handleAllDay() {
window.timeWidgets['end']['hour'].value = 17;
window.timeWidgets['end']['minute'].value = 0;
window.timeWidgets['start']['hour'].value = 9;
window.timeWidgets['start']['hour'].value = dayStartHour;
window.timeWidgets['start']['minute'].value = 0;
window.timeWidgets['end']['hour'].value = dayEndHour;
window.timeWidgets['end']['minute'].value = 0;
$("startTime_time_hour").disabled = true;
$("startTime_time_minute").disabled = true;
$("endTime_time_hour").disabled = true;
$("endTime_time_minute").disabled = true;
$("freeBusyTimeRange").addClassName("hidden");
}
/* address completion */
@ -550,6 +552,7 @@ function availabilitySession(uids, direction, start, end, listener) {
this._findDate = this._backwardFindDate;
this._adjustCurrentStart = this._backwardAdjustCurrentStart;
}
this.mStart = start;
this.mStartLimit = 0;
@ -756,6 +759,7 @@ availabilitySession.prototype = {
};
function availabilityController(previousSlotButton, nextSlotButton) {
this.mActive = false;
this.previousSlotButton = previousSlotButton;
this.nextSlotButton = nextSlotButton;
@ -766,15 +770,22 @@ function availabilityController(previousSlotButton, nextSlotButton) {
}
availabilityController.prototype = {
mActive: false,
previousSlotButton: null,
nextSlotButton: null,
onPreviousSlotClick: function ac_onPreviousSlotClick(event) {
this._findSlot(-1);
if (!this.mActive) {
this.mActive = true;
this._findSlot(-1);
}
this.previousSlotButton.blur();
},
onNextSlotClick: function aC_onNextSlotClick(event) {
this._findSlot(1);
if (!this.mActive) {
this.mActive = true;
this._findSlot(1);
}
this.nextSlotButton.blur();
},
_findSlot: function aC__findSlot(direction) {
@ -788,22 +799,27 @@ availabilityController.prototype = {
}
var start = window.timeWidgets['start']['date'].valueAsDate();
start.setHours(window.timeWidgets['start']['hour'].value);
start.setMinutes(window.timeWidgets['start']['minute'].value);
var end = window.timeWidgets['end']['date'].valueAsDate();
end.setHours(window.timeWidgets['end']['hour'].value);
end.setMinutes(window.timeWidgets['end']['minute'].value);
if (isAllDay) {
start.setHours(dayStartHour);
start.setMinutes(0);
start.setSeconds(0);
end.setHours(dayEndHour);
end.setMinutes(0);
end.setSeconds(0);
}
else {
start.setHours(window.timeWidgets['start']['hour'].value);
start.setMinutes(window.timeWidgets['start']['minute'].value);
end.setHours(window.timeWidgets['end']['hour'].value);
end.setMinutes(window.timeWidgets['end']['minute'].value);
}
var session = new availabilitySession(uids, direction,
start, end,
this);
var limits = $("timeSlotLimits");
if (limits.value == "office-hours") {
var start = dayStartHour * 4;
var end = dayEndHour * 4;
session.setLimits(start, end);
}
else if (limits.value == "range") {
if (isAllDay) {
session.setLimits(dayStartHour * 4, dayEndHour * 4);
} else {
var start = (parseInt($("timeSlotStartLimitHour").value)
+ parseInt($("timeSlotStartLimitMinute").value));
var end = (parseInt($("timeSlotEndLimitHour").value)
@ -828,6 +844,7 @@ availabilityController.prototype = {
else {
redisplayEventSpans();
}
this.mActive = false;
}
};
@ -1169,9 +1186,9 @@ function initializeTimeSlotWidgets() {
}
}
var limitWidget = $("timeSlotStartLimitHour");
limitWidget.value = parseInt($("startTime_time_hour").value) * 4;
limitWidget.value = dayStartHour * 4;
limitWidget = $("timeSlotEndLimitHour");
limitWidget.value = parseInt($("endTime_time_hour").value) * 4;
limitWidget.value = dayEndHour * 4;
var minuteWidgets = [ "timeSlotStartLimitMinute",
"timeSlotEndLimitMinute" ];
@ -1227,20 +1244,6 @@ function scrollToEvent () {
dataDiv.scrollLeft = headerDiv.scrollLeft;
}
function toggleOfficeHours () {
var endDate = window.getEndDate();
var startDate = window.getStartDate();
if (startDate.getHours () < dayStartHour
|| startDate.getHours () > dayEndHour
|| endDate.getHours () > dayEndHour
|| endDate.getHours () < dayStartHour) {
if ($("onlyOfficeHours")) {
$("onlyOfficeHours").checked = false;
}
}
}
function updateSlotDisplayCallback(http) {
var data = http.responseText.evalJSON(true);
var start = new Date();
@ -1468,8 +1471,8 @@ function prepareAttendees() {
var tableAttendees = $("freeBusyAttendees");
var tableData = $("freeBusyData");
var attendees = window.opener.attendees;
if (attendees && attendees.keys()) {
var attendeesKeys = (attendees ? attendees.keys() : null);
if (attendeesKeys && attendeesKeys.length > 0) {
var tbodyAttendees = tableAttendees.tBodies[0];
var modelAttendee = tbodyAttendees.rows[tbodyAttendees.rows.length - 1];
var newAttendeeRow = tbodyAttendees.rows[tbodyAttendees.rows.length - 2];
@ -1478,7 +1481,7 @@ function prepareAttendees() {
var modelData = tbodyData.rows[tbodyData.rows.length - 1];
var newDataRow = tbodyData.rows[tbodyData.rows.length - 2];
attendees.keys().each(function(atKey) {
attendeesKeys.each(function(atKey) {
var attendee = attendees.get(atKey);
var row = $(modelAttendee.cloneNode(true));
tbodyAttendees.insertBefore(row, newAttendeeRow);
@ -1501,7 +1504,7 @@ function prepareAttendees() {
= onAttendeeStatusClick.bindAsEventListener(row);
statusTD.observe("click", boundOnStatusClick, false);
}
var input = row.down("input");
var value = attendee["name"];
if (value)
@ -1521,9 +1524,12 @@ function prepareAttendees() {
row = $(modelData.cloneNode(true));
tbodyData.insertBefore(row, newDataRow);
row.removeClassName("dataModel");
displayFreeBusyForNode(input);
displayFreeBusyForNode(input);
});
}
else {
newAttendee();
}
// Activate "Add attendee" button
var links = tableAttendees.select("TR.futureAttendee TD A");
@ -1565,9 +1571,10 @@ function onFreeBusyLoadHandler() {
'minute': $("endTime_time_minute")}};
synchronizeWithParent("startTime", "startTime");
synchronizeWithParent("endTime", "endTime");
initTimeWidgets(widgets);
initTimeWidgets(widgets);
initializeTimeSlotWidgets();
initializeWindowButtons();
prepareTableHeaders();
prepareTableRows();
@ -1577,7 +1584,6 @@ function onFreeBusyLoadHandler() {
Event.observe(window, "resize", onWindowResize);
$$('TABLE#freeBusy TD.freeBusyData DIV').first().observe("scroll", onScroll);
scrollToEvent();
toggleOfficeHours();
}
document.observe("dom:loaded", onFreeBusyLoadHandler);
@ -1652,7 +1658,6 @@ function onAdjustTime(event) {
// Specific function for the attendees editor
onTimeDateWidgetChange();
toggleOfficeHours ();
}
function _getDate(which) {