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.sogomaint-2.0.2
commit
4b63a768c4
20
ChangeLog
20
ChangeLog
|
@ -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
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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?"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue