Monotone-Parent: 4de8470166df292fcd9ceff9ebe9f6837f051a3e
Monotone-Revision: b0e1ac9e028f296dd60f8db6aff67c520b3f1fea Monotone-Author: crobert@inverse.ca Monotone-Date: 2009-06-05T16:55:26 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
399f05cc77
commit
40cc7a3785
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -244,3 +244,7 @@ DIV#windowButtons
|
|||
right: 0px;
|
||||
height: 4em;
|
||||
text-align: right; }
|
||||
|
||||
.officeHour
|
||||
{ color: #666 !important;
|
||||
font-weight: bold !important; }
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue