Monotone-Parent: 4de8470166df292fcd9ceff9ebe9f6837f051a3e

Monotone-Revision: b0e1ac9e028f296dd60f8db6aff67c520b3f1fea

Monotone-Author: crobert@inverse.ca
Monotone-Date: 2009-06-05T16:55:26
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
C Robert 2009-06-05 16:55:26 +00:00
parent 399f05cc77
commit 40cc7a3785
13 changed files with 82 additions and 58 deletions

View File

@ -1,3 +1,12 @@
2009-06-05 Cyril Robert <crobert@inverse.ca>
* UI/Scheduler/UIxCalListingActions.m: Added support to ignore
office hours.
* UI/Templates/SchedulerUI/UIxAttendeesEditor.wox: Removed old commented-out
buttons, added text as a proper string.
* UI/WebServerResources/UIxAttendeesEditor.js: Fixed scrolling issues,
added support for "onlyOfficeHours" checkbox
2009-06-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Mailer/SOGoMailObject+Draft.m: add a default

View File

@ -458,6 +458,7 @@ validate_endbeforestart = "Het begin vindt plaats vóór het einde.";
"Next slot" = "Volgende";
"Previous hour" = "Vorig uur";
"Next hour" = "Volgend uur";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Titel";

View File

@ -476,6 +476,7 @@ validate_endbeforestart = "The end date that you entered occurs before the st
"Next slot" = "Next slot";
"Previous hour" = "Previous hour";
"Next hour" = "Next hour";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Title";

View File

@ -473,6 +473,7 @@ validate_endbeforestart = "La date de fin est avant la date de début.";
"Next slot" = "Prochain";
"Previous hour" = "Heure précédente";
"Next hour" = "Prochaine heure";
"Only office hours" = "Heures de bureau seulement";
/* apt list */
"Title" = "Titre";

View File

@ -473,6 +473,7 @@ validate_endbeforestart = "Ihr Beginn ist nach dem Ende";
"Next slot" = "Nächster";
"Previous hour" = "Vorherige Stunde";
"Next hour" = "Nächste Stunde";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Titel";

View File

@ -474,6 +474,7 @@ validate_endbeforestart = "La data finale specificata è precedente alla data
"Next slot" = "Successivo";
"Previous hour" = "Ora precedente";
"Next hour" = "Ora successiva";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Titolo";

View File

@ -475,6 +475,7 @@ validate_endbeforestart = "The end date that you entered occurs before the st
"Next slot" = "Next slot";
"Previous hour" = "Previous hour";
"Next hour" = "Next hour";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Title";

View File

@ -480,6 +480,7 @@ validate_endbeforestart = "Su fecha/hora de comienzo es posterio a la de fina
"Next slot" = "Siguiente ranura";
"Previous hour" = "Hora anterior";
"Next hour" = "Hora siguiente";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Título";

View File

@ -1218,7 +1218,7 @@ _computeBlocksPosition (NSArray *blocks)
NSMutableDictionary *rc;
int direction, count, blockDuration, step;
unsigned int **fbData;
BOOL isAllDay = NO;
BOOL isAllDay = NO, onlyOfficeHours = YES;
r = [context request];
rc = nil;
@ -1227,6 +1227,7 @@ _computeBlocksPosition (NSArray *blocks)
if ([uids count] > 0)
{
isAllDay = [[r formValueForKey: @"isAllDay"] boolValue];
onlyOfficeHours = [[r formValueForKey: @"onlyOfficeHours"] boolValue];
direction = [[r formValueForKey: @"direction"] intValue];
limits = [self _loadScheduleLimitsForUsers: uids];
@ -1251,9 +1252,10 @@ _computeBlocksPosition (NSArray *blocks)
count += step)
{
//NSLog (@"Trying %@ -> %@", nStart, nEnd);
if ([self _validateStart: nStart
andEnd: nEnd
against: limits])
if ((onlyOfficeHours && [self _validateStart: nStart
andEnd: nEnd
against: limits])
|| !onlyOfficeHours)
{
//NSLog (@"valid");
if ([self _possibleBlock: count

View File

@ -465,6 +465,7 @@ validate_endbeforestart = "Mae'r dyddiad gorffen sydd wedi'i roi yn digwydd c
"Next slot" = "Slot nesaf";
"Previous hour" = "Awr flaenorol";
"Next hour" = "Awr nesaf";
"Only office hours" = "Only office hours";
/* apt list */
"Title" = "Teitl";

View File

@ -24,17 +24,11 @@
<a id="previousSlot" href="#" class="button"
><var:string label:value="Previous slot" /></a>
<a id="nextSlot" href="#" class="button"
><var:string label:value="Next slot" /></a>
><var:string label:value="Next slot" /></a><label
><input class="checkbox" type="checkbox" checked="1" id="onlyOfficeHours"
/><var:string label:value="Only office hours"
/></label>
</div>
<!--
<div id="freeBusyZoomButtons">
<var:string label:value="Zoom:"/>
<a href="#" class="button _disabled"><var:string label:value="-" /></a>
<var:popup list="zoomList" item="item"
string="itemZoomText" selection="zoom"/>
<a href="#" class="button _disabled"><var:string label:value="+" /></a>
</div>
-->
<div id="freeBusyView">
<table id="freeBusy" cellspacing="0" cellpadding="0"
xmlns="http://www.w3.org/1999/xhtml"
@ -95,12 +89,6 @@
><var:string label:value="No free-busy information" /></li>
</ul>
</div>
<!--<div id="freeBusyButtons">
<a href="#" class="button _disabled"
><var:string label:value="Previous hour" /></a>
<a href="#" class="button _disabled"
><var:string label:value="Next hour" /></a>
</div>-->
<div id="freeBusyReplicas">
<div><var:string label:value="Start:"
/><var:component className="UIxTimeDateControl"

View File

@ -244,3 +244,7 @@ DIV#windowButtons
right: 0px;
height: 4em;
text-align: right; }
.officeHour
{ color: #666 !important;
font-weight: bold !important; }

View File

@ -4,10 +4,11 @@ var resultsDiv;
var address;
var awaitingFreeBusyRequests = new Array();
var additionalDays = 2;
var isAllDay = parent$("isAllDay").checked + 0;
dayStartHour = 0;
dayEndHour = 23;
var isAllDay = parent$("isAllDay").checked + 0;
var displayStartHour = 0;
var displayEndHour = 23;
// dayStartHour & dayEndHour
var attendeesEditor = {
delay: 500,
@ -249,20 +250,20 @@ function redisplayFreeBusyZone() {
var stMinute = parseInt($("startTime_time_minute").value) / 15;
var etHour = parseInt($("endTime_time_hour").value);
var etMinute = parseInt($("endTime_time_minute").value) / 15;
if (stHour < dayStartHour) {
stHour = dayStartHour;
if (stHour < displayStartHour) {
stHour = displayStartHour;
stMinute = 0;
}
if (stHour > dayEndHour + 1) {
stHour = dayEndHour + 1;
if (stHour > displayEndHour + 1) {
stHour = displayEndHour + 1;
stMinute = 0;
}
if (etHour < dayStartHour) {
etHour = dayStartHour;
if (etHour < displayStartHour) {
etHour = displayStartHour;
etMinute = 0;
}
if (etHour > dayEndHour + 1) {
etHour = dayEndHour;
if (etHour > displayEndHour + 1) {
etHour = displayEndHour;
etMinute = 0;
}
if (stHour > etHour) {
@ -280,9 +281,9 @@ function redisplayFreeBusyZone() {
}
}
var deltaCells = (etHour - stHour) + ((dayEndHour - dayStartHour + 1) * addDays);
var deltaCells = (etHour - stHour) + ((displayEndHour - displayStartHour + 1) * addDays);
var deltaSpans = (deltaCells * 4 ) + (etMinute - stMinute);
var currentCellNbr = stHour - dayStartHour;
var currentCellNbr = stHour - displayStartHour;
var currentCell = row.cells[currentCellNbr];
var currentSpanNbr = stMinute;
var spans = $(currentCell).childNodesWithTag("span");
@ -418,8 +419,8 @@ function setSlot(tds, nbr, status) {
days = Math.floor(tdnbr / 24);
tdnbr -= (days * 24);
}
if (tdnbr > (dayStartHour - 1) && tdnbr < (dayEndHour + 1)) {
var i = (days * (dayEndHour - dayStartHour + 1) + tdnbr - (dayStartHour - 1));
if (tdnbr > (displayStartHour - 1) && tdnbr < (displayEndHour + 1)) {
var i = (days * (displayEndHour - displayStartHour + 1) + tdnbr - (displayStartHour - 1));
var td = tds[i - 1];
var spans = $(td).childNodesWithTag("span");
if (status == '2')
@ -467,14 +468,6 @@ function initializeWindowButtons() {
$("previousSlot").observe ("click", onPreviousSlotClick, false);
$("nextSlot").observe ("click", onNextSlotClick, false);
/* buttons = $("freeBusyZoomButtons").childNodesWithTag("a");
for (var i = 0; i < buttons.length; i++)
buttons[i].observe("click", listRowMouseDownHandler, false);
buttons = $("freeBusyButtons").childNodesWithTag("a");
for (var i = 0; i < buttons.length; i++)
buttons[i].observe("click", listRowMouseDownHandler, false);
*/
}
function findSlot (direction) {
@ -505,7 +498,8 @@ function findSlot (direction) {
+ "&startTime=" + escape (st)
+ "&endDate=" + escape (ed)
+ "&endTime=" + escape (et)
+ "&isAllDay=" + isAllDay);
+ "&isAllDay=" + isAllDay
+ "&onlyOfficeHours=" + ($("onlyOfficeHours").checked + 0));
document.findSlotAjaxRequest = triggerAjaxRequest(urlstr,
updateSlotDisplayCallback,
userList);
@ -519,20 +513,35 @@ function cleanInt (data) {
}
function scrollToEvent () {
var ths = $("currentEventPosition").childNodesWithTag ("th");
for (var i = 0; i < ths.length; i++) {
var spans = ths[i].childNodesWithTag ("span");
for (var j = 0; j < spans.length; j++) {
if (spans[j].hasClassName ("busy")) {
spans[j].scrollIntoView ();
var headerDiv = $$('TABLE#freeBusy TD.freeBusyHeader DIV').first();
var dataDiv = $$('TABLE#freeBusy TD.freeBusyData DIV').first();
dataDiv.scrollLeft = headerDiv.scrollLeft;
}
var headerDiv = $$('TABLE#freeBusy TD.freeBusyHeader DIV').first();
var dataDiv = $$('TABLE#freeBusy TD.freeBusyData DIV').first();
var scroll = 0;
var spans = $$('TR#currentEventPosition TH SPAN');
for (var i = 0; i < spans.length; i++) {
scroll += spans[i].getWidth (spans[i]);
if (spans[i].hasClassName ("busy")) {
scroll -= 20 * spans[i].getWidth (spans[i]);
break;
}
}
headerDiv.scrollLeft = scroll;
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)
$("onlyOfficeHours").checked = false;
}
function updateSlotDisplayCallback (http) {
var data = http.responseText.evalJSON (true);
var start = new Date ();
@ -693,18 +702,20 @@ function prepareTableHeaders() {
var days = startDate.daysUpTo(endDate);
for (var i = 0; i < days.length; i++) {
var header1 = document.createElement("th");
header1.colSpan = ((dayEndHour - dayStartHour) + 1)/2;
header1.colSpan = ((displayEndHour - displayStartHour) + 1)/2;
header1.appendChild(document.createTextNode(days[i].toLocaleDateString()));
rows[0].appendChild(header1);
var header1b = document.createElement("th");
header1b.colSpan = ((dayEndHour - dayStartHour) + 1)/2;
header1b.colSpan = ((displayEndHour - displayStartHour) + 1)/2;
header1b.appendChild(document.createTextNode(days[i].toLocaleDateString()));
rows[0].appendChild(header1b);
for (var hour = dayStartHour; hour < (dayEndHour + 1); hour++) {
for (var hour = displayStartHour; hour < (displayEndHour + 1); hour++) {
var header2 = document.createElement("th");
var text = hour + ":00";
if (hour < 10)
text = "0" + text;
if (hour >= dayStartHour && hour <= dayEndHour)
$(header2).addClassName ("officeHour");
header2.appendChild(document.createTextNode(text));
rows[1].appendChild(header2);
@ -733,7 +744,7 @@ function prepareTableRows() {
$("freeBusyData").setStyle({ width: width + 'px' });
for (var i = 0; i < days.length; i++)
for (var rowNbr = 0; rowNbr < rows.length; rowNbr++)
for (var hour = dayStartHour; hour < (dayEndHour + 1); hour++)
for (var hour = displayStartHour; hour < (displayEndHour + 1); hour++)
rows[rowNbr].appendChild(document.createElement("td"));
}
@ -838,6 +849,7 @@ function onFreeBusyLoadHandler() {
Event.observe(window, "resize", onWindowResize);
$$('TABLE#freeBusy TD.freeBusyData DIV').first().observe("scroll", onScroll);
scrollToEvent ();
toggleOfficeHours ();
}
document.observe("dom:loaded", onFreeBusyLoadHandler);
@ -912,6 +924,7 @@ function onAdjustTime(event) {
// Specific function for the attendees editor
onTimeDateWidgetChange();
toggleOfficeHours ();
}
function _getDate(which) {