diff --git a/ChangeLog b/ChangeLog index 3f50312d2..7d014fa67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2010-01-13 Francis Lachapelle + + * UI/WebServerResources/ContactsUI.js (-fixSearchFieldPosition): + replaced this function by the equivalent CSS definition. + (-initContacts): initialized import buttons even for "popup" mode. + +2010-01-12 Ludovic Marcotte + + * SoObjects/SOGo/NSString+Utilities.m + We retain the autoreleased strings static variable + to avoir random issues with the -fromCSSIdentifier method + + * Updated the Moz guide for the updateLink part of + the updates.php script. + +2010-01-11 Ludovic Marcotte + + * UI/Contacts/UIxContactFolderActions.m (-importVcardData:): + We now support multiple vCards in the same file during + the import process + 2010-01-08 Ludovic Marcotte * SoObjects/SOGo/LDAPSource.{h,m} - bindFields is now diff --git a/Documentation/SOGo Mozilla Thunderbird Configuration.odt b/Documentation/SOGo Mozilla Thunderbird Configuration.odt index 4ba568f97..c4bfccd67 100644 Binary files a/Documentation/SOGo Mozilla Thunderbird Configuration.odt and b/Documentation/SOGo Mozilla Thunderbird Configuration.odt differ diff --git a/SoObjects/SOGo/NSString+Utilities.m b/SoObjects/SOGo/NSString+Utilities.m index 128159130..9f2a67d06 100644 --- a/SoObjects/SOGo/NSString+Utilities.m +++ b/SoObjects/SOGo/NSString+Utilities.m @@ -317,6 +317,7 @@ static int cssEscapingCount; strings = [NSArray arrayWithObjects: @"_U_", @"_D_", @"_H_", @"_A_", @"_S_", @"_C_", @"_CO_", @"_SP_", nil]; + [strings retain]; cssEscapingStrings = [strings asPointersOfObjects]; characters = [NSArray arrayWithObjects: @"_", @".", @"#", @"@", @"*", @":", diff --git a/UI/Contacts/UIxContactFolderActions.m b/UI/Contacts/UIxContactFolderActions.m index 94a47e541..c8081fd5c 100644 --- a/UI/Contacts/UIxContactFolderActions.m +++ b/UI/Contacts/UIxContactFolderActions.m @@ -194,13 +194,27 @@ - (int) importVcardData: (NSString *) vcardData { - NGVCard *card; + NSArray *allCards; int rc; rc = 0; - card = [NGVCard parseSingleFromSource: vcardData]; - if ([self importVcard: card]) - rc = 1; + allCards = [NGVCard parseFromSource: vcardData]; + + if (allCards && [allCards count]) + { + int i; + + for (i = 0; i < [allCards count]; i++) + { + if (![self importVcard: [allCards objectAtIndex: i]]) + { + rc = 0; + break; + } + else + rc++; + } + } return rc; } diff --git a/UI/WebServerResources/ContactsUI.css b/UI/WebServerResources/ContactsUI.css index 400fbe8bc..18f102d79 100644 --- a/UI/WebServerResources/ContactsUI.css +++ b/UI/WebServerResources/ContactsUI.css @@ -319,6 +319,11 @@ BODY.popup DIV#rightDragHandle BODY.popup DIV#contactView { top: 10em; } +BODY.popup DIV#filterPanel +{ position: relative; + top: 7px; +} + DIV.contactSelection { z-index: 10; diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index 7fbfec507..bedf35647 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -1150,29 +1150,28 @@ function onDocumentKeydown(event) { } } -function fixSearchFieldPosition () { +/*function fixSearchFieldPosition () { var panel = $("filterPanel"); if (panel) { panel.style.position = "relative"; panel.style.top = "7px"; } -} + }*/ function initContacts(event) { if ($(document.body).hasClassName("popup")) { configureSelectionButtons(); - fixSearchFieldPosition (); - } - else { - // Addressbook import form - $("uploadCancel").observe("click", hideContactsImport); - $("uploadOK").observe("click", hideImportResults); - - if (Prototype.Browser.Gecko) - Event.observe(document, "keypress", onDocumentKeydown); // for FF2 - else - Event.observe(document, "keydown", onDocumentKeydown); } + + // Addressbook import form + $("uploadCancel").observe("click", hideContactsImport); + $("uploadOK").observe("click", hideImportResults); + + if (Prototype.Browser.Gecko) + Event.observe(document, "keypress", onDocumentKeydown); // for FF2 + else + Event.observe(document, "keydown", onDocumentKeydown); + configureAbToolbar(); configureAddressBooks(); updateAddressBooksMenus(); diff --git a/UI/WebServerResources/SchedulerUI.css b/UI/WebServerResources/SchedulerUI.css index c3b125971..5465def7e 100644 --- a/UI/WebServerResources/SchedulerUI.css +++ b/UI/WebServerResources/SchedulerUI.css @@ -300,7 +300,7 @@ DIV#eventDialog P DIV#eventDialog SPAN.label { color: #444; } -DIV#eventDialog p#description +DIV#eventDialog P#description { margin-top: 1em; } ._unfocused#dateSelector TD._selected, diff --git a/UI/WebServerResources/UIxAppointmentEditor.js b/UI/WebServerResources/UIxAppointmentEditor.js index 9dd539c08..7d457d400 100644 --- a/UI/WebServerResources/UIxAppointmentEditor.js +++ b/UI/WebServerResources/UIxAppointmentEditor.js @@ -303,7 +303,8 @@ function refreshAttendeesRO () { var attendeesLabel = $("attendeesLabel"); var attendeesDiv = $("attendeesDiv"); - attendeesLabel.setStyle({ display: "block" }); + if (attendeesLabel) + attendeesLabel.setStyle({display: "block"}); attendeesDiv.setStyle({display: "block"}); // Register "click" event on each attendee's email diff --git a/UI/WebServerResources/UIxComponentEditor.js b/UI/WebServerResources/UIxComponentEditor.js index e8e24e864..f3bc1ffbd 100644 --- a/UI/WebServerResources/UIxComponentEditor.js +++ b/UI/WebServerResources/UIxComponentEditor.js @@ -193,9 +193,6 @@ function onComponentEditorLoad(event) { tmp = $("cancelButton"); if (tmp) tmp.observe ("click", onCancelButtonClick); - - if (tmp) - window.resizeTo(430,540); } function onSummaryChange (e) { diff --git a/UI/WebServerResources/UIxOccurenceDialog.js b/UI/WebServerResources/UIxOccurenceDialog.js index d62e9a670..1dc281fc1 100644 --- a/UI/WebServerResources/UIxOccurenceDialog.js +++ b/UI/WebServerResources/UIxOccurenceDialog.js @@ -1,42 +1,42 @@ /* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onCancelButtonClick(event) { - window.close(); + window.close(); } function onThisButtonClick(event) { - if (action == 'edit') - window.opener.performEventEdition(calendarFolder, componentName, - recurrenceName); - else if (action == 'delete') - window.opener.performEventDeletion(calendarFolder, componentName, - recurrenceName); - else - window.alert("Invalid action: " + action); + if (action == 'edit') + window.opener.performEventEdition(calendarFolder, componentName, + recurrenceName); + else if (action == 'delete') + window.opener.performEventDeletion(calendarFolder, componentName, + recurrenceName); + else + window.alert("Invalid action: " + action); - window.close(); + window.close(); } function onAllButtonClick(event) { - if (action == 'edit') - window.opener.performEventEdition(calendarFolder, componentName); - else if (action == 'delete') - window.opener.performEventDeletion(calendarFolder, componentName); - else - window.alert("Invalid action: " + action); + if (action == 'edit') + window.opener.performEventEdition(calendarFolder, componentName); + else if (action == 'delete') + window.opener.performEventDeletion(calendarFolder, componentName); + else + window.alert("Invalid action: " + action); - window.close(); + window.close(); } function onOccurenceDialogLoad() { - var thisButton = $("thisButton"); - thisButton.observe("click", onThisButtonClick); + var thisButton = $("thisButton"); + thisButton.observe("click", onThisButtonClick); - var allButton = $("allButton"); - allButton.observe("click", onAllButtonClick); + var allButton = $("allButton"); + allButton.observe("click", onAllButtonClick); - var cancelButton = $("cancelButton"); - cancelButton.observe("click", onCancelButtonClick); + var cancelButton = $("cancelButton"); + cancelButton.observe("click", onCancelButtonClick); } document.observe("dom:loaded", onOccurenceDialogLoad);