See ChangeLog

Monotone-Parent: eb22f4d3b368a79ce56bcad18f9f176fff0cb73c
Monotone-Revision: 157670819f732591d0987b295faeb89c843803db

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2012-09-07T19:46:49
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Francis Lachapelle 2012-09-07 19:46:49 +00:00
parent 613499c63a
commit e7f0c9c03f
38 changed files with 389 additions and 259 deletions

View File

@ -1,3 +1,26 @@
2012-09-07 Francis Lachapelle <flachapelle@inverse.ca>
* UI/WebServerResources/SchedulerUI.js (tasksListCallback): list
the tasks in a table, along the events table.
(saveTabState): save which of the events or the tasks tab is
selected.
* UI/WebServerResources/SOGoTabsController.js
(attachToTabsContainer): select and show the active tab if it's
defined.
* UI/WebServerResources/HTMLTableElement.js (getSelectedRows):
accept calling this method from a "tbody".
* UI/Scheduler/UIxCalMainView.m (-saveSelectedListAction): new
method to save the name of the selected tab (events or tasks).
(-eventsTabClass): return "active" if the selected tab was "events".
(-tasksTabClass): idem for "tasks".
* UI/Scheduler/UIxCalListingActions.m (-tasksListAction): added
more quick fields, including the calendar name, location, category
and a formatted version of the due date.
2012-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca> 2012-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreContext.m (CompleteURLFromMapistoreURI): * OpenChange/MAPIStoreContext.m (CompleteURLFromMapistoreURI):

12
NEWS
View File

@ -1,9 +1,19 @@
2.0.0 (2012-09-DD)
-------------------
New Features
Enhancements
- calendars list and mini-calendar are now always visible
- tasks list has moved to a table in a tabs view along the events list
Bug Fixes
1.3.18a (2012-09-04) 1.3.18a (2012-09-04)
------------------- -------------------
Bug Fixes Bug Fixes
- fixed display of weekly events with no day mask - fixed display of weekly events with no day mask
- fixed parsing of mail headers - fixed parsing of mail headers
- fixed support for OS X 10.8 (Mounting Lion) - fixed support for OS X 10.8 (Mountain Lion)
1.3.18 (2012-08-28) 1.3.18 (2012-08-28)
------------------- -------------------

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "A data que você informou ocorre antes da data ini
"Title" = "Título"; "Title" = "Título";
"Start" = "Início"; "Start" = "Início";
"End" = "Fim"; "End" = "Fim";
"Due Date" = "Data";
"Location" = "Localização"; "Location" = "Localização";
"(Private Event)" = "(Evento Privado)"; "(Private Event)" = "(Evento Privado)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "La data/hora de començament és posterior a la d'
"Title" = "Títol"; "Title" = "Títol";
"Start" = "Inici"; "Start" = "Inici";
"End" = "Final"; "End" = "Final";
"Due Date" = "Data límit";
"Location" = "Lloc"; "Location" = "Lloc";
"(Private Event)" = "(Esdeveniment privat)"; "(Private Event)" = "(Esdeveniment privat)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "Zadané datum konce je před začátkem události.
"Title" = "Název"; "Title" = "Název";
"Start" = "Začátek"; "Start" = "Začátek";
"End" = "Konec"; "End" = "Konec";
"Due Date" = "Datum splnění";
"Location" = "Místo"; "Location" = "Místo";
"(Private Event)" = "(Soukromá událost)"; "(Private Event)" = "(Soukromá událost)";

View File

@ -507,6 +507,7 @@ Behold de aktuelle indstillinger alligevel?";
"Title" = "Titel"; "Title" = "Titel";
"Start" = "Start"; "Start" = "Start";
"End" = "Slut"; "End" = "Slut";
"Due Date" = "Forfaldsdato";
"Location" = "Sted"; "Location" = "Sted";
"(Private Event)" = "(Privat begivenhed)"; "(Private Event)" = "(Privat begivenhed)";

View File

@ -1,4 +1,3 @@
/* this file is in UTF-8 format! */
/* Tooltips */ /* Tooltips */
@ -503,6 +502,7 @@ validate_endbeforestart = "Het einde is voor de begindatum.";
"Title" = "Titel"; "Title" = "Titel";
"Start" = "Begin"; "Start" = "Begin";
"End" = "Eind"; "End" = "Eind";
"Due Date" = "Verloopdatum";
"Location" = "Plaats"; "Location" = "Plaats";
"(Private Event)" = "(Privé-afspraak)"; "(Private Event)" = "(Privé-afspraak)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "The end date that you entered occurs before the st
"Title" = "Title"; "Title" = "Title";
"Start" = "Start"; "Start" = "Start";
"End" = "End"; "End" = "End";
"Due Date" = "Due Date";
"Location" = "Location"; "Location" = "Location";
"(Private Event)" = "(Private Event)"; "(Private Event)" = "(Private Event)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "La date de fin est avant la date de début.";
"Title" = "Titre"; "Title" = "Titre";
"Start" = "Début"; "Start" = "Début";
"End" = "Fin"; "End" = "Fin";
"Due Date" = "Fin prévue";
"Location" = "Lieu"; "Location" = "Lieu";
"(Private Event)" = "(Événement privé)"; "(Private Event)" = "(Événement privé)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "Ihr Ende ist vor dem Beginndatum.";
"Title" = "Titel"; "Title" = "Titel";
"Start" = "Beginn"; "Start" = "Beginn";
"End" = "Ende"; "End" = "Ende";
"Due Date" = "Fällig";
"Location" = "Ort"; "Location" = "Ort";
"(Private Event)" = "(Privater Termin)"; "(Private Event)" = "(Privater Termin)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "A megadott befejező dátum korábbi, mint a kezd
"Title" = "Cím"; "Title" = "Cím";
"Start" = "Kezdés"; "Start" = "Kezdés";
"End" = "Befejezés"; "End" = "Befejezés";
"Due Date" = "Lejárat";
"Location" = "Hely"; "Location" = "Hely";
"(Private Event)" = "(Magán esemény)"; "(Private Event)" = "(Magán esemény)";

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "Lokadagurinn sem er tilgreindur, er fyrr en byrjun
"Title" = "Titill"; "Title" = "Titill";
"Start" = "Byrjun"; "Start" = "Byrjun";
"End" = "Endir"; "End" = "Endir";
"Due Date" = "Lokadagur";
"Location" = "Staðsetning"; "Location" = "Staðsetning";
"(Private Event)" = "(Einkaviðburður)"; "(Private Event)" = "(Einkaviðburður)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "La data finale specificata è precedente alla data
"Title" = "Titolo"; "Title" = "Titolo";
"Start" = "Inizio"; "Start" = "Inizio";
"End" = "Fine"; "End" = "Fine";
"Due Date" = "Scadenza";
"Location" = "Luogo"; "Location" = "Luogo";
"(Private Event)" = "(Evento privato)"; "(Private Event)" = "(Evento privato)";

View File

@ -124,8 +124,8 @@
if (result == NSOrderedSame) if (result == NSOrderedSame)
{ {
// End date // End date
selfTime = [[self objectAtIndex: 4] intValue]; selfTime = [[self objectAtIndex: 5] intValue];
otherTime = [[otherTask objectAtIndex: 4] intValue]; otherTime = [[otherTask objectAtIndex: 5] intValue];
if (selfTime && !otherTime) if (selfTime && !otherTime)
result = NSOrderedAscending; result = NSOrderedAscending;
else if (!selfTime && otherTime) else if (!selfTime && otherTime)
@ -143,8 +143,8 @@
compare: [otherTask objectAtIndex: 1]]; compare: [otherTask objectAtIndex: 1]];
if (result == NSOrderedSame) if (result == NSOrderedSame)
// Task name // Task name
result = [[self objectAtIndex: 3] result = [[self objectAtIndex: 4]
compare: [otherTask objectAtIndex: 3] compare: [otherTask objectAtIndex: 4]
options: NSCaseInsensitiveSearch]; options: NSCaseInsensitiveSearch];
} }
} }

View File

@ -1,4 +1,3 @@
/* this file is in UTF-8 format! */
/* Tooltips */ /* Tooltips */
@ -502,6 +501,7 @@ validate_endbeforestart = "Angitt sluttdato inntreffer før angitt startdato.
"Title" = "Tittel"; "Title" = "Tittel";
"Start" = "Start"; "Start" = "Start";
"End" = "Slutt"; "End" = "Slutt";
"Due Date" = "Dato";
"Location" = "Plass"; "Location" = "Plass";
"(Private Event)" = "(Privat hendelse)"; "(Private Event)" = "(Privat hendelse)";

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "Angitt sluttdato inntreffer før angitt startdato.
"Title" = "Tittel"; "Title" = "Tittel";
"Start" = "Start"; "Start" = "Start";
"End" = "Slutt"; "End" = "Slutt";
"Due Date" = "Dato";
"Location" = "Plass"; "Location" = "Plass";
"(Private Event)" = "(Privat hendelse)"; "(Private Event)" = "(Privat hendelse)";

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "Podana data końca jest wcześniejsza niż data po
"Title" = "Tytuł"; "Title" = "Tytuł";
"Start" = "Początek"; "Start" = "Początek";
"End" = "Koniec"; "End" = "Koniec";
"Due Date" = "Termin";
"Location" = "Miejsce"; "Location" = "Miejsce";
"(Private Event)" = "(Wydarzenie prywatne)"; "(Private Event)" = "(Wydarzenie prywatne)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "Дата начала позже даты конц
"Title" = "Название"; "Title" = "Название";
"Start" = "Начало"; "Start" = "Начало";
"End" = "Конец"; "End" = "Конец";
"Due Date" = "К дате";
"Location" = "Место"; "Location" = "Место";
"(Private Event)" = "(Приватное событие)"; "(Private Event)" = "(Приватное событие)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "La fecha/hora de inicio es posterior a la de fin."
"Title" = "Título"; "Title" = "Título";
"Start" = "Inicio"; "Start" = "Inicio";
"End" = "Fin"; "End" = "Fin";
"Due Date" = "Vencimiento";
"Location" = "Lugar"; "Location" = "Lugar";
"(Private Event)" = "(Evento privado)"; "(Private Event)" = "(Evento privado)";

View File

@ -503,6 +503,7 @@ validate_endbeforestart = "La fecha/hora de inicio es posterior a la de fin."
"Title" = "Título"; "Title" = "Título";
"Start" = "Inicio"; "Start" = "Inicio";
"End" = "Fin"; "End" = "Fin";
"Due Date" = "Vencimiento";
"Location" = "Lugar"; "Location" = "Lugar";
"(Private Event)" = "(Evento privado)"; "(Private Event)" = "(Evento privado)";

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "Angivet slutdatumet inträffar före angivet start
"Title" = "Titel"; "Title" = "Titel";
"Start" = "Start"; "Start" = "Start";
"End" = "Slut"; "End" = "Slut";
"Due Date" = "Datum";
"Location" = "Plats"; "Location" = "Plats";
"(Private Event)" = "(Privat händelse)"; "(Private Event)" = "(Privat händelse)";

View File

@ -96,8 +96,10 @@ static NSArray *tasksFields = nil;
if (!tasksFields) if (!tasksFields)
{ {
tasksFields = [NSArray arrayWithObjects: @"c_name", @"c_folder", tasksFields = [NSArray arrayWithObjects: @"c_name", @"c_folder",
@"calendarName",
@"c_status", @"c_title", @"c_enddate", @"c_status", @"c_title", @"c_enddate",
@"c_classification", @"editable", @"erasable", @"c_classification", @"c_location", @"c_category",
@"editable", @"erasable",
@"c_priority", nil]; @"c_priority", nil];
[tasksFields retain]; [tasksFields retain];
} }
@ -1069,14 +1071,17 @@ _computeBlocksPosition (NSArray *blocks)
forComponentOfType: @"vtodo"] objectEnumerator]; forComponentOfType: @"vtodo"] objectEnumerator];
while ((task = [tasks nextObject])) while ((task = [tasks nextObject]))
{ {
statusCode = [[task objectAtIndex: 2] intValue]; statusCode = [[task objectAtIndex: 3] intValue];
if (statusCode != 1 || showCompleted) if (statusCode != 1 || showCompleted)
{ {
filteredTask = [NSMutableArray arrayWithArray: task]; filteredTask = [NSMutableArray arrayWithArray: task];
endDateStamp = [[task objectAtIndex: 4] intValue]; endDateStamp = [[task objectAtIndex: 5] intValue];
statusFlag = [self _getStatusClassForStatusCode: statusCode statusFlag = [self _getStatusClassForStatusCode: statusCode
andEndDateStamp: endDateStamp]; andEndDateStamp: endDateStamp];
[filteredTask addObject: statusFlag]; [filteredTask addObject: statusFlag];
if (endDateStamp > 0)
[filteredTask addObject: [self _formattedDateForSeconds: endDateStamp
forAllDay: NO]];
[filteredTasks addObject: filteredTask]; [filteredTasks addObject: filteredTask];
} }
} }

View File

@ -166,7 +166,7 @@
[self _setupContext]; [self _setupContext];
height = [moduleSettings objectForKey: @"DragHandleVertical"]; height = [moduleSettings objectForKey: @"DragHandleVertical"];
return ((height && [height intValue] > 0) ? [NSString stringWithFormat: @"%ipx", ([height intValue] - 27)] : nil); return ((height && [height intValue] > 0) ? [NSString stringWithFormat: @"%ipx", [height intValue]] : nil);
} }
- (WOResponse *) saveDragHandleStateAction - (WOResponse *) saveDragHandleStateAction
@ -192,6 +192,42 @@
return [self responseWithStatus: 204]; return [self responseWithStatus: 204];
} }
- (NSString *) eventsTabClass
{
NSString *list;
[self _setupContext];
list = [moduleSettings objectForKey: @"SelectedList"];
return (list && [list compare: @"eventsListView"] == NSOrderedSame)? @"active" : @"";
}
- (NSString *) tasksTabClass
{
NSString *list;
[self _setupContext];
list = [moduleSettings objectForKey: @"SelectedList"];
return (list && [list compare: @"tasksListView"] == NSOrderedSame)? @"active" : @"";
}
- (WOResponse *) saveSelectedListAction
{
WORequest *request;
NSString *selectedList;
[self _setupContext];
request = [context request];
selectedList = [request formValueForKey: @"list"];
[moduleSettings setObject: selectedList
forKey: @"SelectedList"];
[us synchronize];
return [self responseWithStatus: 204];
}
- (unsigned int) firstDayOfWeek - (unsigned int) firstDayOfWeek
{ {
SOGoUserDefaults *ud; SOGoUserDefaults *ud;

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "Дата закінчення передує да
"Title" = "Назва"; "Title" = "Назва";
"Start" = "Початок"; "Start" = "Початок";
"End" = "Кінець"; "End" = "Кінець";
"Due Date" = "Дійсно до";
"Location" = "Місце"; "Location" = "Місце";
"(Private Event)" = "(Особиста подія)"; "(Private Event)" = "(Особиста подія)";

View File

@ -502,6 +502,7 @@ validate_endbeforestart = "Mae'r dyddiad gorffen sydd wedi'i roi yn digwydd c
"Title" = "Teitl"; "Title" = "Teitl";
"Start" = "Dechrau"; "Start" = "Dechrau";
"End" = "Diwedd"; "End" = "Diwedd";
"Due Date" = "Dyddiad dyledus";
"Location" = "Lleoliad"; "Location" = "Lleoliad";
"(Private Event)" = "(Digwyddiad preifat)"; "(Private Event)" = "(Digwyddiad preifat)";

View File

@ -50,6 +50,11 @@
pageName = "UIxCalMainView"; pageName = "UIxCalMainView";
actionName = "saveDragHandleState"; actionName = "saveDragHandleState";
}; };
saveSelectedList = {
protectedBy = "View";
pageName = "UIxCalMainView";
actionName = "saveSelectedList";
};
dateselector = { dateselector = {
protectedBy = "View"; protectedBy = "View";
pageName = "UIxCalDateSelector"; pageName = "UIxCalDateSelector";

View File

@ -88,36 +88,19 @@
</ul> </ul>
</div> </div>
<div class="contactFoldersList" id="contactFoldersList"> <div id="contactFoldersList">
<div class="tabsContainer" id="smallToolbarContainer"> <h6><var:string label:value="Address Books" /></h6>
<ul> <div id="abToolbar">
<li target="abToolbar"> <a href="#" class="smallToolbarButton"
<span><var:string label:value="Address Books" /></span> ><span><img rsrc:src="add-addressbook.png" label:title="New Addressbook..."
</li> /></span></a>
</ul> <a href="#" class="smallToolbarButton"
<div class="tabs"> ><span><img rsrc:src="add-user-addressbook.png" label:title="Subscribe to an Addressbook..."
<div id="abToolbar" class="tab"> /></span></a>
<a href="#" class="smallToolbarButton"> <a href="#" class="smallToolbarButton"
<span><img rsrc:src="add-addressbook.png" ><span><img rsrc:src="remove-addressbook.png" label:title="Remove the selected Addressbook"
label:title="New Addressbook..."/> /></span></a>
</span>
</a>
<a href="#" class="smallToolbarButton">
<span>
<img rsrc:src="add-user-addressbook.png"
label:title="Subscribe to an Addressbook..." />
</span>
</a>
<a href="#" class="smallToolbarButton">
<span>
<img rsrc:src="remove-addressbook.png"
label:title="Remove the selected Addressbook"/>
</span>
</a>
</div>
</div>
</div> </div>
<ul id="contactFolders"> <ul id="contactFolders">
<var:foreach list="contactFolders" item="currentFolder" <var:foreach list="contactFolders" item="currentFolder"
><li var:id="currentContactFolderId" ><li var:id="currentContactFolderId"
@ -129,7 +112,6 @@
></var:foreach ></var:foreach
> >
</ul> </ul>
<var:if condition="hasContactSelectionButtons"> <var:if condition="hasContactSelectionButtons">
<div class="contactSelection"> <div class="contactSelection">
<var:component value="selectorComponent" /> <var:component value="selectorComponent" />

View File

@ -26,7 +26,7 @@
DIV#rightDragHandle, DIV#calendarView DIV#rightDragHandle, DIV#calendarView
{ top: <var:string value="verticalDragHandleStyle" />; } { top: <var:string value="verticalDragHandleStyle" />; }
</var:if><var:if condition="eventsListViewStyle"> </var:if><var:if condition="eventsListViewStyle">
DIV#eventsListView DIV#schedulerTabs
{ height: <var:string value="eventsListViewStyle" />; } { height: <var:string value="eventsListViewStyle" />; }
</var:if> </var:if>
</style> </style>
@ -132,49 +132,60 @@
</div> </div>
<div id="leftPanel"> <div id="leftPanel">
<div class="tabsContainer" id="schedulerTabs"> <div id="dateSelectorView" class=""
<ul> ><var:component className="UIxCalDateSelector"
<li target="dateSelectorView" selectedDate="thisMonth"
><span><var:string label:value="Date" /></span></li> /></div>
<li target="calendarSelectorView" <div id="calendarSelectorView"
><span><var:string label:value="Calendars" /></span></li> ><var:component className="UIxCalendarSelector"
</ul> var:calendarFolders="calendarFolders" /></div>
<div class="tabs">
<div id="dateSelectorView" class="tab"
><var:component className="UIxCalDateSelector"
selectedDate="thisMonth"
/></div>
<div id="calendarSelectorView" class="tab"
><var:component className="UIxCalendarSelector"
var:calendarFolders="calendarFolders" /></div>
</div>
</div>
<div id="tasksListView">
<label><input id="showHideCompletedTasks"
type="checkbox" class="checkBox"
/><var:string label:value="Show completed tasks"/></label>
<ul id="tasksList"><!-- space --></ul>
</div>
</div> </div>
<div id="verticalDragHandle" class="dragHandle"><!-- space --></div> <div id="verticalDragHandle" class="dragHandle"><!-- space --></div>
<div id="rightPanel"> <div id="rightPanel">
<var:component className="UIxCalFilterPanel" /> <div class="tabsContainer" id="schedulerTabs">
<div id="eventsListView"> <ul>
<table id="eventsList" cellspacing="0"> <li target="eventsListView" var:class="eventsTabClass"
<thead> ><span><var:string label:value="Events" /></span></li>
<tr> <li target="tasksListView" var:class="tasksTabClass"
<td id="titleHeader" class="headerCell headerTitle sortableTableHeader"><var:string label:value="Title"/></td> ><span><var:string label:value="Tasks" /></span></li>
<td id="startHeader" class="headerCell headerDateTime sortableTableHeader"><var:string label:value="Start"/></td> </ul>
<td id="endHeader" class="headerCell headerDateTime sortableTableHeader"><var:string label:value="End"/></td> <div class="tabs">
<td id="locationHeader" class="headerCell headerLocation sortableTableHeader"><var:string label:value="Location"/></td> <div id="eventsListView" class="tab">
<td id="calendarNameHeader" class="headerCell headerCalendarName sortableTableHeader"><var:string label:value="Calendar"/></td> <var:component className="UIxCalFilterPanel" />
</tr> <table id="eventsList" cellspacing="0">
</thead> <thead>
<tbody><!-- events list --></tbody> <tr>
</table> <td id="titleHeader" class="headerCell headerTitle sortableTableHeader"><var:string label:value="Title"/></td>
<td id="startHeader" class="headerCell headerDateTime sortableTableHeader"><var:string label:value="Start"/></td>
<td id="endHeader" class="headerCell headerDateTime sortableTableHeader"><var:string label:value="End"/></td>
<td id="locationHeader" class="headerCell headerLocation sortableTableHeader"><var:string label:value="Location"/></td>
<td id="calendarNameHeader" class="headerCell headerCalendarName sortableTableHeader"><var:string label:value="Calendar"/></td>
</tr>
</thead>
<tbody><!-- events list --></tbody>
</table>
</div>
<div id="tasksListView" class="tab">
<label>
<input id="showHideCompletedTasks" type="checkbox" class="checkBox"/><var:string label:value="Show completed tasks"/>
</label>
<table id="tasksList" cellspacing="0">
<thead>
<tr>
<td id="completedHeader" class="headerCell"><entity name="nbsp"/></td>
<td class="headerCell headerTitle sortableTableHeader"><var:string label:value="Title"/></td>
<td class="headerCell headerDateTime sortableTableHeader"><var:string label:value="Due Date"/></td>
<td class="headerCell headerLocation sortableTableHeader"><var:string label:value="Location"/></td>
<td class="headerCell"><var:string label:value="Category"/></td>
<td class="headerCell headerCalendarName sortableTableHeader"><var:string label:value="Calendar"/></td>
</tr>
</thead>
<tbody><!-- tasks list --></tbody>
</table>
</div>
</div>
</div> </div>
<div id="rightDragHandle" class="dragHandle"><!-- space --></div> <div id="rightDragHandle" class="dragHandle"><!-- space --></div>
<div id="calendarView"><!-- space --></div> <div id="calendarView"><!-- space --></div>

View File

@ -15,6 +15,7 @@ div.colorBox.calendarFolder<var:string value="currentCalendar.folder" />
</var:foreach> </var:foreach>
</style> </style>
<div id="calendarSelector"> <div id="calendarSelector">
<h6><var:string label:value="Calendars"/></h6>
<div id="calendarSelectorButtons"> <div id="calendarSelectorButtons">
<a href="#" class="smallToolbarButton" <a href="#" class="smallToolbarButton"
><span><img rsrc:src="add-calendar.png" ><span><img rsrc:src="add-calendar.png"
@ -33,19 +34,17 @@ div.colorBox.calendarFolder<var:string value="currentCalendar.folder" />
label:title="Remove the selected Calendar" label:title="Remove the selected Calendar"
/></span></a> /></span></a>
</div> </div>
<div id="calendarListWrapper"> <ul id="calendarList">
<ul id="calendarList"> <var:foreach list="calendars" item="currentCalendar"
<var:foreach list="calendars" item="currentCalendar" ><li class="denied" var:id="currentCalendar.id"
><li class="denied" var:id="currentCalendar.id" var:owner="currentCalendar.owner" >
var:owner="currentCalendar.owner" > <input type="checkbox" class="checkBox"
<input type="checkbox" class="checkBox" const:disabled="disabled"
const:disabled="disabled" var:checked="currentCalendar.active" />
var:checked="currentCalendar.active" /> <div var:class="currentCalendarClass">OO</div
<div var:class="currentCalendarClass">OO</div ><var:string value="currentCalendar.displayName"
><var:string value="currentCalendar.displayName" /></li>
/></li> </var:foreach>
</var:foreach> </ul>
</ul>
</div>
</div> </div>
</container> </container>

View File

@ -103,24 +103,17 @@ TABLE.titletable TD.titlecell SELECT
DIV#contactFoldersList DIV#contactFoldersList
{ position: absolute; { position: absolute;
top: 84px; top: 82px;
left: 0px; left: 0px;
width: 15em; width: 15em;
background-color: #CCDDEC;
bottom: 0px; bottom: 0px;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
overflow: hidden; } overflow: hidden; }
DIV#smallToolbarContainer
{ height: 50px;
margin: 0px 2px; }
DIV#smallToolbarContainer > .tabs
{ margin: 0px 2px;
height: 40px; }
DIV#abToolbar DIV#abToolbar
{ height: 38px; } { padding-left: 6px; }
SPAN.toolbarButton SPAN.toolbarButton
{ float: none; { float: none;
@ -130,27 +123,15 @@ A.toolbarButton
{ text-decoration: none; } { text-decoration: none; }
UL#contactFolders UL#contactFolders
{ display: block; { list-style-type: none;
list-style-type: none;
list-style-image: none; list-style-image: none;
clear: both; clear: left;
cursor: default; cursor: default;
color: #000; color: #000;
background: #CCDDEC;
position: absolute; /* required for Safari & IE */
top: 68px; /* leave space for the mini addressbook */
bottom: 0px;
left: 0;
right: 0;
width: auto;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
overflow: auto; overflow: auto;
overflow-x: hidden; overflow-x: hidden;
border-top: 1px solid #909090;
border-left: 1px solid #909090;
border-bottom: 1px solid #FFFFFF;
border-right: 1px solid #FFFFFF;
-moz-user-select: none; -moz-user-select: none;
-khtml-user-select: none; -khtml-user-select: none;
} }
@ -158,11 +139,10 @@ UL#contactFolders
UL#contactFolders LI UL#contactFolders LI
{ {
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 4px 2px; background-position: 14px 2px;
cursor: pointer; cursor: pointer;
line-height: 20px; line-height: 2em;
height: 20px; padding-left: 34px;
padding-left: 22px;
margin: 0px; margin: 0px;
width: auto; width: auto;
white-space: nowrap; white-space: nowrap;
@ -334,10 +314,6 @@ SPAN.photoFrame:hover {
-webkit-transform: scale(3.0, 3.0) rotate(0deg) translate(33%, 33%); -webkit-transform: scale(3.0, 3.0) rotate(0deg) translate(33%, 33%);
-ms-transform: rotate(0deg) scale(3.0, 3.0); } -ms-transform: rotate(0deg) scale(3.0, 3.0); }
SPAN.photoFrame:hover IMG.contactPhoto
{
}
/* drag handles */ /* drag handles */
DIV#dragHandle DIV#dragHandle
{ cursor: e-resize; { cursor: e-resize;

View File

@ -1319,10 +1319,8 @@ function initContacts(event) {
configureSelectionButtons(); configureSelectionButtons();
} }
var tabsContainer = $("smallToolbarContainer"); var foldersList = $("contactFoldersList");
if (tabsContainer) { if (foldersList) {
var controller = new SOGoTabsController();
controller.attachToTabsContainer(tabsContainer);
configureAbToolbar(); configureAbToolbar();
// Addressbook import form // Addressbook import form

View File

@ -8,6 +8,9 @@ Element.addMethods({
return $(tbody).getSelectedNodes(); return $(tbody).getSelectedNodes();
} }
else if (element.tagName == 'TBODY') {
return element.getSelectedNodes();
}
else if (element.tagName == 'UL') { else if (element.tagName == 'UL') {
return element.getSelectedNodes(); return element.getSelectedNodes();
} }

View File

@ -83,17 +83,20 @@ SOGoTabsController.prototype = {
currentNode.observe("mousedown", currentNode.observe("mousedown",
this.onTabMouseDownBound, false); this.onTabMouseDownBound, false);
currentNode.observe("click", this.onTabClickBound, false); currentNode.observe("click", this.onTabClickBound, false);
if (currentNode.hasClassName("active"))
this.activeTab = currentNode;
//$(currentNode.getAttribute("target")).hide(); //$(currentNode.getAttribute("target")).hide();
} }
this.firstTab.addClassName("first"); this.firstTab.addClassName("first");
this.firstTab.addClassName("active"); if (this.activeTab == null) {
this.activeTab = this.firstTab; this.activeTab = this.firstTab;
this.activeTab.addClassName("active");
}
var last = nodes.length - 1; var last = nodes.length - 1;
this.lastTab = $(nodes[last]); this.lastTab = $(nodes[last]);
var target = $(this.firstTab.getAttribute("target")); var target = $(this.activeTab.getAttribute("target"));
target.addClassName("active"); target.addClassName("active");
} }
this.onWindowResizeBound = this.onWindowResize.bindAsEventListener(this); this.onWindowResizeBound = this.onWindowResize.bindAsEventListener(this);
@ -141,6 +144,7 @@ SOGoTabsController.prototype = {
this.activeTab = $(clickedTab); this.activeTab = $(clickedTab);
this.activeTab.addClassName("active"); // current LI this.activeTab.addClassName("active"); // current LI
content.addClassName("active"); content.addClassName("active");
this.activeTab.fire("tabs:click", content.id);
// Prototype alternative // Prototype alternative

View File

@ -4,57 +4,44 @@ DIV#leftPanel
left: 0px; left: 0px;
width: 19.25em; width: 19.25em;
bottom: 0px; bottom: 0px;
background-color: #CCDDEC;
overflow: hidden; } overflow: hidden; }
DIV#schedulerTabs DIV#schedulerTabs
{ position: absolute; { position: absolute;
top: 4px; top: 4px;
left: 2px; left: 1px;
right: 2px; right: 0px;
height: 186px; } height: 186px; }
DIV#tasksListView DIV#schedulerTabs .tabs
{ position: absolute; { right: 5px; }
top: 200px;
bottom: 0px;
left: 2px;
right: 0px;
overflow: hidden; }
DIV#tasksListView H2 DIV#schedulerTabs .tab
{ font-size: 10pt; { left: 0px;
margin: 0px; right: 0px; }
margin-left: .25em;
padding: 0px; }
DIV#tasksListView LABEL
{ margin: .25em; }
DIV#calendarSelectorView DIV#calendarSelectorView
{ top: 3px; { overflow: hidden; }
overflow: hidden; }
DIV#calendarsList DIV#calendarSelectorButtons
{ height: 100%; } { padding-left: 6px; }
DIV.colorBox DIV.colorBox
{ display: inline; { display: inline;
border: 1px solid #333;
font-weight: normal; font-weight: normal;
margin-right: 3px; margin-right: 3px;
font-size: 80%; font-size: 80%;
width: 1em; width: 1em;
height: .75em; } height: .75em;
-webkit-border-radius: 2px;
border-radius: 2px; }
UL#tasksList, UL#calendarList UL#calendarList
{ cursor: default; { cursor: default;
clear: left;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
border-top: 1px solid #909090;
border-left: 1px solid #909090;
border-bottom: 1px solid #FFFFFF;
border-right: 1px solid #FFFFFF;
background-color: #CCDDEC;
list-style-type: none; list-style-type: none;
list-style-image: none; list-style-image: none;
overflow: hidden; overflow: hidden;
@ -62,61 +49,51 @@ UL#tasksList, UL#calendarList
-moz-user-select: none; -moz-user-select: none;
-khtml-user-select: none; } -khtml-user-select: none; }
UL#calendarList
{ clear: left;
height: 115px; }
UL#calendarList LI UL#calendarList LI
{ cursor: pointer;
white-space: nowrap; }
UL#tasksList
{ position: absolute;
top: 2em;
left: 0px;
right: 0px;
bottom: .25em; }
UL#tasksList LI
{ cursor: pointer; { cursor: pointer;
width: 100%; width: 100%;
white-space: nowrap; } white-space: nowrap;
line-height: 2em;
padding-left: 10px; }
UL#tasksList LI.duelater, #tasksList .duelater,
UL#tasksList LI.duetoday, #tasksList .duetoday,
UL#tasksList LI.overdue #tasksList .overdue
{ font-weight: bold; } { font-weight: bold; }
UL#tasksList LI.overdue, #tasksList .overdue,
UL#tasksList LI.important #tasksList .important
{ color: #f00 !important; } { color: #f00 !important; }
UL#tasksList LI.duetoday #tasksList .low
{ color: #666 !important; }
#tasksList .duetoday
{ color: #00f !important; } { color: #00f !important; }
UL#tasksList LI.completed SPAN #tasksList .completed span
{ text-decoration: line-through; { text-decoration: line-through;
color: #000; } color: #000; }
UL#tasksList LI.important SPAN #tasksList .important SPAN
{ background-image: url(important.png); { background-image: url(important.png);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 3px 2px; background-position: 3px 2px;
padding-left: 10px; padding-left: 10px;
} }
UL#tasksList LI SPAN #tasksList SPAN
{ padding-left: 2px; } { padding-left: 2px; }
UL#tasksList LI._selected.overdue #tasksList ._selected.overdue
{ color: #fff !important; { color: #fff !important;
background-color: #f00 !important; } background-color: #f00 !important; }
UL#tasksList LI._selected.duetoday #tasksList ._selected.duetoday
{ color: #fff !important; { color: #fff !important;
background-color: #00f !important; } background-color: #00f !important; }
UL#tasksList LI._selected.duelater, #tasksList ._selected.duelater,
UL#tasksList LI._selected.completed #tasksList ._selected.completed
{ color: #fff !important; { color: #fff !important;
background-color: #9ABCD8 !important; } background-color: #9ABCD8 !important; }
@ -129,17 +106,12 @@ DIV#rightPanel
margin-left: 5px; margin-left: 5px;
overflow: hidden; } overflow: hidden; }
/* top list */ /* top lists in tabs */
DIV#eventsListView DIV#eventsListView,
DIV#tasksListView
{ cursor: default; { cursor: default;
position: absolute;
background-color: #FFFFFF; background-color: #FFFFFF;
top: 2.5em;
left: 0px;
right: 0px;
height: 15.5em;
overflow: hidden; overflow: hidden;
border-left: 1px solid #9B9B9B;
overflow-y: auto; } overflow-y: auto; }
DIV#calendarView DIV#calendarView
@ -174,9 +146,6 @@ DIV#calendarView A
right: 0px; right: 0px;
height: 5px; } height: 5px; }
#filterPanel
{ padding-right: .5em; }
DIV#dateSelectorView DIV#dateSelectorView
{ overflow: hidden; } { overflow: hidden; }
@ -184,7 +153,7 @@ DIV#dateSelectorView
{ margin: 0px auto; { margin: 0px auto;
height: 13.5em; height: 13.5em;
background-color: #fff; background-color: #fff;
border-top: 1px solid #FFFFFF !important; border-top: 1px solid #909090 !important;
border-left: 1px solid #FFFFFF !important; border-left: 1px solid #FFFFFF !important;
border-bottom: 1px solid #909090 !important; border-bottom: 1px solid #909090 !important;
border-right: 1px solid #909090 !important; } border-right: 1px solid #909090 !important; }
@ -279,21 +248,45 @@ TABLE#dateSelectorTable TD TABLE TD.dayOfToday
{ visibility: hidden; { visibility: hidden;
display: none; } display: none; }
TABLE#eventsList TABLE#eventsList,
TABLE#tasksList
{ width: 100%; } { width: 100%; }
TABLE#eventsList .colorBox
{ margin-left: 2px; }
TABLE#eventsList TD.headerTitle, TABLE#eventsList TD.headerTitle,
TABLE#eventsList TD.headerDateTime TABLE#eventsList TD.headerDateTime
{ width: 30%; } { width: 30%; }
TABLE#eventsList TD, TABLE#eventsList TD,
TABLE#eventsList TH TABLE#eventsList TH,
TABLE#tasksList TD,
TABLE#tasksList TH
{ overflow: hidden; { overflow: hidden;
line-height: 1.5em;
white-space: nowrap; } /* pre, normal, nowrap */ white-space: nowrap; } /* pre, normal, nowrap */
TABLE#eventsList TH TABLE#eventsList TH,
TABLE#tasksList TH
{ white-space: pre; } { white-space: pre; }
TABLE#tasksList TD#completedHeader
{ text-align: center;
width: 20px; }
TABLE#eventsList THEAD TD:last-child,
TABLE#tasksList THEAD TD:last-child
{ border-right: 0px; }
#filterPanel,
.tab label
{ display: block;
margin: 0;
padding: 5px;
background-color: #eee;
background-color: #E6E7E6; }
DIV#eventDialog DIV#eventDialog
{ width: 200px; } { width: 200px; }

View File

@ -241,8 +241,11 @@ function deleteEvent() {
} }
if (sortedNodes[calendar].indexOf(nodes[i].cname) < 0) { if (sortedNodes[calendar].indexOf(nodes[i].cname) < 0) {
sortedNodes[calendar].push(nodes[i].cname); sortedNodes[calendar].push(nodes[i].cname);
if (nodes[i].tagName == 'TR') if (nodes[i].tagName == 'TR') {
events.push(nodes[i].down('td').allTextContent()); // extract the first column only var cell = nodes[i].down('td span');
var title = cell.allTextContent();
events.push(title); // extract the first column only
}
else else
events.push(nodes[i].allTextContent()); events.push(nodes[i].allTextContent());
} }
@ -422,7 +425,7 @@ function onMenuRawEvent(event) {
var calendar = selectedCalendarCell[0].calendar; var calendar = selectedCalendarCell[0].calendar;
var cname = selectedCalendarCell[0].cname; var cname = selectedCalendarCell[0].cname;
var url = ApplicationBaseURL + calendar + "/" + cname + "/raw" var url = ApplicationBaseURL + calendar + "/" + cname + "/raw";
openGenericWindow(url); openGenericWindow(url);
} }
@ -918,8 +921,8 @@ function eventsListCallback(http) {
var rows = table.select("TBODY TR"); var rows = table.select("TBODY TR");
rows.each(function(e) { rows.each(function(e) {
e.remove(); e.remove();
}); });
if (http.responseText.length > 0) { if (http.responseText.length > 0) {
var data = http.responseText.evalJSON(true); var data = http.responseText.evalJSON(true);
@ -927,13 +930,14 @@ function eventsListCallback(http) {
var row = createElement("tr"); var row = createElement("tr");
table.tBodies[0].appendChild(row); table.tBodies[0].appendChild(row);
row.addClassName("eventRow"); row.addClassName("eventRow");
var calendar = escape(data[i][1]);
var rTime = data[i][16]; var rTime = data[i][16];
var id = escape(data[i][1] + "-" + data[i][0]); var id = escape(data[i][1] + "-" + data[i][0]);
if (rTime) if (rTime)
id += "-" + escape(rTime); id += "-" + escape(rTime);
row.setAttribute("id", id); row.setAttribute("id", id);
row.cname = escape(data[i][0]); row.cname = escape(data[i][0]);
row.calendar = escape(data[i][1]); row.calendar = calendar;
if (rTime) if (rTime)
row.recurrenceTime = escape(rTime); row.recurrenceTime = escape(rTime);
row.isException = data[i][17]; row.isException = data[i][17];
@ -954,8 +958,13 @@ function eventsListCallback(http) {
var td = createElement("td"); var td = createElement("td");
row.appendChild(td); row.appendChild(td);
td.observe("mousedown", listRowMouseDownHandler, true); td.observe("mousedown", listRowMouseDownHandler, true);
td.appendChild(document.createTextNode(data[i][4])); // title var colorDiv = createElement("div", false, "colorBox calendarFolder" + calendar);
td.appendChild(colorDiv);
colorDiv.update('OO');
var span = createElement("span");
td.appendChild(span);
span.update(data[i][4]); // title
td = createElement("td"); td = createElement("td");
row.appendChild(td); row.appendChild(td);
td.observe("mousedown", listRowMouseDownHandler, true); td.observe("mousedown", listRowMouseDownHandler, true);
@ -1002,57 +1011,98 @@ function eventsListCallback(http) {
} }
function tasksListCallback(http) { function tasksListCallback(http) {
var div = $("tasksListView");
if (http.readyState == 4 if (http.readyState == 4
&& http.status == 200) { && http.status == 200) {
var div = $("tasksListView");
document.tasksListAjaxRequest = null; document.tasksListAjaxRequest = null;
var list = $("tasksList"); var table = $("tasksList");
lastClickedRow = -1; // from generic.js
var rows = table.select("TBODY TR");
rows.each(function(e) {
e.remove();
});
if (http.responseText.length > 0) { if (http.responseText.length > 0) {
var data = http.responseText.evalJSON(true); var data = http.responseText.evalJSON(true);
list.previousScroll = list.scrollTop;
while (list.childNodes.length)
list.removeChild(list.childNodes[0]);
// [0] Task ID
// [1] Calendar ID
// [2] Calendar name
// [3] Status (0, 1 = completed, 2)
// [4] Title
// [5] Due date (int)
// [6] Classification (0 = public, 1, = private, 2 = confidential)
// [7] Location
// [8] Category
// [9] Editable?
// [10] Erasable?
// [11] Priority (0, 1 = important, 9 = low)
// [12] Status CSS class (duelater, completed, etc)
// (13) Due date (formatted)
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
var listItem = createElement("li"); var row = createElement("tr");
list.appendChild(listItem); table.tBodies[0].appendChild(row);
listItem.on("dblclick", editDoubleClickedEvent);
row.on("dblclick", editDoubleClickedEvent);
var calendar = escape(data[i][1]); var calendar = escape(data[i][1]);
var cname = escape(data[i][0]); var cname = escape(data[i][0]);
listItem.setAttribute("id", calendar + "-" + cname); row.setAttribute("id", calendar + "-" + cname);
//listItem.addClassName(data[i][5]); // Classification //listItem.addClassName(data[i][5]); // Classification
listItem.addClassName(data[i][9]); // status (duelater, completed, etc) row.addClassName(data[i][12]); // status
listItem.calendar = calendar; row.calendar = calendar;
listItem.cname = cname; row.cname = cname;
listItem.erasable = data[i][7] || IsSuperUser; row.erasable = data[i][10] || IsSuperUser;
if (parseInt(data[i][11]) == 1) {
row.addClassName("important");
}
else if (parseInt(data[i][11]) == 9) {
row.addClassName("low");
}
var cell = createElement("td");
row.appendChild(cell);
var input = createElement("input"); var input = createElement("input");
input.setAttribute("type", "checkbox"); input.setAttribute("type", "checkbox");
if (parseInt(data[i][6]) == 0) // editable? cell.appendChild(input);
input.setAttribute("disabled", true);
if (parseInt(data[i][8]) == 1) {
listItem.addClassName("important");
}
listItem.appendChild(input);
input.observe("click", updateTaskStatus, true);
input.setAttribute("value", "1"); input.setAttribute("value", "1");
if (data[i][2] == 1) if (parseInt(data[i][9]) == 0) // editable?
input.setAttribute("disabled", true);
input.addClassName("checkBox");
if (parseInt(data[i][3]) == 1) // completed?
input.setAttribute("checked", "checked"); input.setAttribute("checked", "checked");
$(input).addClassName("checkBox"); input.observe("click", updateTaskStatus, true);
cell = createElement("td");
row.appendChild(cell);
var colorDiv = createElement("div", false, "colorBox calendarFolder" + calendar); var colorDiv = createElement("div", false, "colorBox calendarFolder" + calendar);
cell.appendChild(colorDiv);
colorDiv.update('OO'); colorDiv.update('OO');
listItem.appendChild(colorDiv);
var t = new Element ("span"); var t = new Element ("span");
t.update(data[i][3]); cell.appendChild(t);
listItem.appendChild (t); t.update(data[i][4]); // title
cell = createElement("td");
row.appendChild(cell);
if (data[i][13])
cell.update(data[i][13]); // end date
cell = createElement("td");
row.appendChild(cell);
cell.update(data[i][7]); // location
cell = createElement("td");
row.appendChild(cell);
cell.update(data[i][8]); // category
cell = createElement("td");
row.appendChild(cell);
cell.update(data[i][2]); // calendar name
} }
list.scrollTop = list.previousScroll; table.scrollTop = table.previousScroll;
if (http.callbackData) { if (http.callbackData) {
var selectedNodesId = http.callbackData; var selectedNodesId = http.callbackData;
@ -1999,7 +2049,7 @@ function onEventsSelectionChange() {
tasksList.addClassName("_unfocused"); tasksList.addClassName("_unfocused");
deselectAll(tasksList); deselectAll(tasksList);
var rows = $(this.tBodies[0]).getSelectedNodes(); var rows = $(this).getSelectedNodes();
if (rows.length == 1) { if (rows.length == 1) {
var row = rows[0]; var row = rows[0];
changeCalendarDisplay( { "day": row.day, changeCalendarDisplay( { "day": row.day,
@ -2412,7 +2462,7 @@ function onShowCompletedTasks(event) {
function updateTaskStatus(event) { function updateTaskStatus(event) {
var newStatus = (this.checked ? 1 : 0); var newStatus = (this.checked ? 1 : 0);
_updateTaskCompletion (this.parentNode, newStatus); _updateTaskCompletion (this.up("tr"), newStatus);
return false; return false;
} }
@ -2637,7 +2687,7 @@ function newTask () {
} }
function marksTasksAsCompleted () { function marksTasksAsCompleted () {
var selectedTasks = $$("UL#tasksList LI._selected"); var selectedTasks = $$("#tasksList ._selected");
for (var i = 0; i < selectedTasks.length; i++) { for (var i = 0; i < selectedTasks.length; i++) {
var task = selectedTasks[i]; var task = selectedTasks[i];
@ -2655,7 +2705,7 @@ function _updateTaskCompletion (task, value) {
} }
function onMenuRawTask(event) { function onMenuRawTask(event) {
var selectedTasks = $$("UL#tasksList LI._selected"); var selectedTasks = $$("#tasksList ._selected");
if (selectedTasks.length != 1) { if (selectedTasks.length != 1) {
return; return;
} }
@ -2706,7 +2756,7 @@ function configureDragHandles() {
handle = $("rightDragHandle"); handle = $("rightDragHandle");
if (handle) { if (handle) {
handle.addInterface(SOGoDragHandlesInterface); handle.addInterface(SOGoDragHandlesInterface);
handle.upperBlock = $("eventsListView"); handle.upperBlock = $("schedulerTabs");
handle.lowerBlock = $("calendarView"); handle.lowerBlock = $("calendarView");
} }
} }
@ -3106,7 +3156,7 @@ function deletePersonalCalendarCallback(http) {
} }
function configureLists() { function configureLists() {
var list = $("tasksList"); var list = $$("#tasksList tbody").first();
list.multiselect = true; list.multiselect = true;
list.on("mousedown", onTasksSelectionChange); list.on("mousedown", onTasksSelectionChange);
list.on("selectstart", listRowMouseDownHandler); list.on("selectstart", listRowMouseDownHandler);
@ -3121,7 +3171,7 @@ function configureLists() {
list.multiselect = true; list.multiselect = true;
configureSortableTableHeaders(list); configureSortableTableHeaders(list);
TableKit.Resizable.init(list, {'trueResize' : true, 'keepWidth' : true}); TableKit.Resizable.init(list, {'trueResize' : true, 'keepWidth' : true});
list.observe("mousedown", onEventsSelectionChange); list.down("tbody").on("mousedown", onEventsSelectionChange);
} }
function initDateSelectorEvents() { function initDateSelectorEvents() {
@ -3223,6 +3273,15 @@ function onDocumentKeydown(event) {
} }
} }
function saveTabState(event) {
var tab = $(event).memo;
var url = ApplicationBaseURL + "saveSelectedList";
var params = "list=" + tab;
triggerAjaxRequest(url, null, null, params,
{ "Content-type": "application/x-www-form-urlencoded" });
}
function initScheduler() { function initScheduler() {
sorting["attribute"] = "start"; sorting["attribute"] = "start";
sorting["ascending"] = true; sorting["ascending"] = true;
@ -3234,6 +3293,7 @@ function initScheduler() {
var tabsContainer = $("schedulerTabs"); var tabsContainer = $("schedulerTabs");
var controller = new SOGoTabsController(); var controller = new SOGoTabsController();
controller.attachToTabsContainer(tabsContainer); controller.attachToTabsContainer(tabsContainer);
schedulerTabs.on("tabs:click", saveTabState);
if (UserSettings['ShowCompletedTasks']) { if (UserSettings['ShowCompletedTasks']) {
showCompletedTasks = parseInt(UserSettings['ShowCompletedTasks']); showCompletedTasks = parseInt(UserSettings['ShowCompletedTasks']);

View File

@ -55,6 +55,14 @@ LABEL
white-space: nowrap; white-space: nowrap;
margin-left: .5em; } margin-left: .5em; }
H6
{ font-size: 11px;
color: #9ABCD8;
color: #627e9c;
text-transform: uppercase;
margin: 10px 0px 5px 0px;
padding-left: 5px; }
TABLE TABLE
{ table-layout: fixed; { table-layout: fixed;
border-spacing: 0px; } border-spacing: 0px; }
@ -493,7 +501,7 @@ DIV.noJavascriptErrorMessage A
margin: 0px auto; } margin: 0px auto; }
LI.denied LI.denied
{ background-color: #fefefe; { n0background-color: #fefefe;
font-style: italic; font-style: italic;
color: #f33; } color: #f33; }
@ -507,7 +515,7 @@ TD._selected
color: #fff; color: #fff;
} }
LI[class~="_selected"].denied LI._selected.denied
{ {
background-color: #f33; background-color: #f33;
} }

View File

@ -1193,7 +1193,7 @@ function initCriteria() {
var searchValue = $("searchValue"); var searchValue = $("searchValue");
var searchOptions = $("searchOptions"); var searchOptions = $("searchOptions");
if (searchValue) { if (searchValue && searchOptions) {
var firstOption = searchOptions.down("li"); var firstOption = searchOptions.down("li");
if (firstOption) { if (firstOption) {
searchCriteria.value = firstOption.getAttribute('id'); searchCriteria.value = firstOption.getAttribute('id');

View File

@ -171,7 +171,8 @@ TABLE.framenocaption
TABLE.frame TBODY TABLE.frame TBODY
{ padding: 20px; } { padding: 20px; }
UL#calendarList UL#calendarList,
UL#contactFolders
{ margin-top: 2px; } { margin-top: 2px; }
A.toolbarButton SPAN, A.toolbarButton SPAN,
@ -179,10 +180,8 @@ A.toolbarButton:hover SPAN {
height: 50px; height: 50px;
padding: 5px 2px 6px 5px; padding: 5px 2px 6px 5px;
} }
A.smallToolbarButton, A.smallToolbarButton:hover, A.smallToolbarButton, A.smallToolbarButton:hover
A.smallToolbarButton SPAN, A.smallToolbarButton:hover SPAN { height: 34px; }
{ height: 33px; }
A.toolbarButton:active SPAN { A.toolbarButton:active SPAN {
background-position: auto; /*broken*/ background-position: auto; /*broken*/
} }