Merge to 2.0.7
commit
885e59a2af
|
@ -1,5 +1,5 @@
|
||||||
[main]
|
[main]
|
||||||
host = https://www.transifex.net
|
host = https://www.transifex.com
|
||||||
|
|
||||||
[sogo.ui-mailerui]
|
[sogo.ui-mailerui]
|
||||||
source_file = UI/MailerUI/English.lproj/Localizable.strings
|
source_file = UI/MailerUI/English.lproj/Localizable.strings
|
||||||
|
|
209
ChangeLog
209
ChangeLog
|
@ -1,3 +1,212 @@
|
||||||
|
commit d5f76ac832912402d714dd13291c43aa9f84940f
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Jul 19 13:39:18 2013 -0400
|
||||||
|
|
||||||
|
Improve CSS print media
|
||||||
|
|
||||||
|
M UI/WebServerResources/generic.css
|
||||||
|
|
||||||
|
commit 12b7fea82543c105a39854eb4bc3f9e68cc080e7
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Jul 19 13:37:13 2013 -0400
|
||||||
|
|
||||||
|
Documentation - bump version to 2.0.7
|
||||||
|
|
||||||
|
M Documentation/SOGo Installation Guide.odt
|
||||||
|
M Documentation/SOGo Mobile Devices Configuration.odt
|
||||||
|
M Documentation/SOGo Mozilla Thunderbird Configuration.odt
|
||||||
|
M Documentation/SOGo Native Microsoft Outlook Configuration.odt
|
||||||
|
|
||||||
|
commit 1c82af8842ac78b70d8e40a4d78e866522adf139
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Jul 19 11:29:10 2013 -0400
|
||||||
|
|
||||||
|
Updated pt_BR, cs, nl, de, pl and ru translations
|
||||||
|
|
||||||
|
M .tx/config
|
||||||
|
M NEWS
|
||||||
|
M SoObjects/Appointments/German.lproj/Localizable.strings
|
||||||
|
M UI/MainUI/Czech.lproj/Localizable.strings
|
||||||
|
M UI/MainUI/German.lproj/Localizable.strings
|
||||||
|
M UI/PreferencesUI/German.lproj/Localizable.strings
|
||||||
|
M UI/PreferencesUI/Russian.lproj/Localizable.strings
|
||||||
|
M UI/Scheduler/BrazilianPortuguese.lproj/Localizable.strings
|
||||||
|
M UI/Scheduler/Czech.lproj/Localizable.strings
|
||||||
|
M UI/Scheduler/Dutch.lproj/Localizable.strings
|
||||||
|
M UI/Scheduler/German.lproj/Localizable.strings
|
||||||
|
M UI/Scheduler/Polish.lproj/Localizable.strings
|
||||||
|
M UI/Scheduler/Russian.lproj/Localizable.strings
|
||||||
|
|
||||||
|
commit 6cef5245e10515b1199102cf2c19d48364862027
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Jul 19 11:27:17 2013 -0400
|
||||||
|
|
||||||
|
Bump version to 2.0.7
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
M Version
|
||||||
|
|
||||||
|
commit 0069a4200b1d087c9d931289cd57746aaa4e23bd
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Jul 19 10:43:21 2013 -0400
|
||||||
|
|
||||||
|
Handle possible jQuery error with DnD of contacts
|
||||||
|
|
||||||
|
M UI/WebServerResources/ContactsUI.js
|
||||||
|
|
||||||
|
commit e24c20c48af0e5eadcb4f8a8683bae15e22ae100
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Fri Jul 19 10:11:08 2013 -0400
|
||||||
|
|
||||||
|
Reverted patch
|
||||||
|
|
||||||
|
M SOPE/GDLContentStore/EOQualifier+GCS.m
|
||||||
|
M SOPE/GDLContentStore/GCSFolder.m
|
||||||
|
|
||||||
|
commit 256b679798404db77fa85b53df6bcf815c8e4007
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Thu Jul 18 11:46:49 2013 -0400
|
||||||
|
|
||||||
|
Bug fix for #2366
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
M SoObjects/Mailer/SOGoMailBaseObject.m
|
||||||
|
|
||||||
|
commit b85ed0db1c1bf37d0f1ec870c8c0a88566954ec6
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Thu Jul 18 11:32:29 2013 -0400
|
||||||
|
|
||||||
|
Fix blur of active element on click on a draggable
|
||||||
|
|
||||||
|
This bug has yet to be officially part of jQuery UI, therefore this
|
||||||
|
commit updates jquery-ui to version 1.10.3 patched with commit fcd1caf:
|
||||||
|
|
||||||
|
https://github.com/jquery/jquery-ui/commit/fcd1cafac8afe3a947676ec018e844eeada5b9de
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
M UI/WebServerResources/jquery-ui.js
|
||||||
|
|
||||||
|
commit 048bae2fc510f0cdd39b07d23bb23cf492001921
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Thu Jul 18 10:52:37 2013 -0400
|
||||||
|
|
||||||
|
Applied patch from bug #2235
|
||||||
|
|
||||||
|
M SOPE/GDLContentStore/EOQualifier+GCS.m
|
||||||
|
M SOPE/GDLContentStore/GCSFolder.m
|
||||||
|
|
||||||
|
commit 19e542396bc32debab6f53b229166c57d05e4599
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Thu Jul 18 10:25:39 2013 -0400
|
||||||
|
|
||||||
|
Applied patch from bug #2360
|
||||||
|
|
||||||
|
M UI/MailPartViewers/GNUmakefile
|
||||||
|
M UI/MailPartViewers/GNUmakefile.preamble
|
||||||
|
M UI/MailerUI/GNUmakefile
|
||||||
|
|
||||||
|
commit 249a1fcf14f80e1f7a612ae9faa710488e716140
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Wed Jul 17 14:57:07 2013 -0400
|
||||||
|
|
||||||
|
Bubble box of event should not overlap event cell
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
M UI/WebServerResources/SchedulerUI.js
|
||||||
|
|
||||||
|
commit 7dad5ad84ed5a59409ce7f0083e750ac079beb16
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Tue Jul 16 15:20:26 2013 -0400
|
||||||
|
|
||||||
|
Updated for v2.0.7
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
|
||||||
|
commit 16105d37b83a2632e5389407b783ef062939f9c6
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Tue Jul 16 15:18:04 2013 -0400
|
||||||
|
|
||||||
|
Properly handle RFC2231 everywhere
|
||||||
|
|
||||||
|
M SoObjects/Mailer/GNUmakefile
|
||||||
|
A SoObjects/Mailer/NSDictionary+Mail.h
|
||||||
|
A SoObjects/Mailer/NSDictionary+Mail.m
|
||||||
|
M SoObjects/Mailer/SOGoMailBodyPart.m
|
||||||
|
M SoObjects/Mailer/SOGoMailObject+Draft.m
|
||||||
|
M UI/MailPartViewers/UIxMailPartViewer.m
|
||||||
|
|
||||||
|
commit e08ebd2390ad81bcf7d63c200de85eddbf80bcd6
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Tue Jul 16 11:31:08 2013 -0400
|
||||||
|
|
||||||
|
Fix for bugs #2368 and #2369
|
||||||
|
|
||||||
|
M SoObjects/Appointments/SOGoAptMailNotification.m
|
||||||
|
M UI/MailPartViewers/UIxMailPartICalViewer.m
|
||||||
|
M UI/MailerUI/UIxMailListActions.m
|
||||||
|
M UI/Templates/Appointments/SOGoAptMailInvitation.wox
|
||||||
|
M UI/WebServerResources/SchedulerUI.js
|
||||||
|
|
||||||
|
commit 03553980fd2abb2da397c0810fd8f6d70ba26d65
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Thu Jul 11 13:55:03 2013 -0400
|
||||||
|
|
||||||
|
Update NEWS file and add missing image
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
A UI/WebServerResources/collapse.png
|
||||||
|
|
||||||
|
commit 33fd60efb335b180938492eddb75ab59591d4153
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Thu Jul 11 13:50:44 2013 -0400
|
||||||
|
|
||||||
|
Calendar: print gridlines to 15-minute intervals
|
||||||
|
|
||||||
|
M UI/Templates/SchedulerUI/UIxCalDayTable.wox
|
||||||
|
M UI/WebServerResources/SchedulerUI.css
|
||||||
|
M UI/WebServerResources/SchedulerUIDnD.js
|
||||||
|
|
||||||
|
commit b8e2255a071dcb2fd2172a73e95d38600d41c1bf
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Thu Jul 11 13:46:38 2013 -0400
|
||||||
|
|
||||||
|
Set the events/tasks list collapsable
|
||||||
|
|
||||||
|
M UI/Scheduler/UIxCalMainView.m
|
||||||
|
M UI/Scheduler/UIxCalView.m
|
||||||
|
M UI/Scheduler/product.plist
|
||||||
|
M UI/Templates/SchedulerUI/UIxCalDayView.wox
|
||||||
|
M UI/Templates/SchedulerUI/UIxCalMainView.wox
|
||||||
|
M UI/Templates/SchedulerUI/UIxCalMonthView.wox
|
||||||
|
M UI/Templates/SchedulerUI/UIxCalWeekView.wox
|
||||||
|
M UI/WebServerResources/SOGoTabsController.js
|
||||||
|
M UI/WebServerResources/SchedulerUI.css
|
||||||
|
M UI/WebServerResources/SchedulerUI.js
|
||||||
|
|
||||||
|
commit e687dbf155963e1931fd2f7ac58bd2f4cf862dca
|
||||||
|
Author: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||||
|
Date: Thu Jul 4 13:11:02 2013 -0400
|
||||||
|
|
||||||
|
If the organizer's name is non-existent, use the email address
|
||||||
|
|
||||||
|
M UI/Scheduler/UIxComponentEditor.m
|
||||||
|
|
||||||
|
commit f42d52743df169d6bfdc58428e920dd6208a1879
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jun 27 11:35:17 2013 -0400
|
||||||
|
|
||||||
|
bump version to 2.0.6b
|
||||||
|
|
||||||
|
M Version
|
||||||
|
|
||||||
|
commit 70cd64a626470e0c07ac0f8cb7119cab6e763bfa
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jun 27 11:34:06 2013 -0400
|
||||||
|
|
||||||
|
Update ChangeLog
|
||||||
|
|
||||||
|
M ChangeLog
|
||||||
|
|
||||||
commit 4359b05da8ba291b9bbc00e330d65575a4dbb253
|
commit 4359b05da8ba291b9bbc00e330d65575a4dbb253
|
||||||
Author: Jean Raby <jraby@inverse.ca>
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
Date: Thu Jun 27 11:33:44 2013 -0400
|
Date: Thu Jun 27 11:33:44 2013 -0400
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
17
NEWS
17
NEWS
|
@ -1,3 +1,20 @@
|
||||||
|
2.0.7 (2013-07-19)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
New features
|
||||||
|
- print gridlines of calendar in 15-minute intervals
|
||||||
|
- allow the events/tasks lists to be collapsable
|
||||||
|
|
||||||
|
Enhancements
|
||||||
|
- bubble box of events no longer overlaps the current event
|
||||||
|
- now pass the x-originating-ip using the IMAP ID extension (#2366)
|
||||||
|
- updated BrazilianPortuguese, Czech, Dutch, German, Polish and Russian translations
|
||||||
|
|
||||||
|
Bug fixes
|
||||||
|
- properly handle RFC2231 everywhere
|
||||||
|
- fixed minor XSS issues
|
||||||
|
- fixed jquery-ui not bluring the active element when clicking on a draggable
|
||||||
|
|
||||||
2.0.6b (2013-06-27)
|
2.0.6b (2013-06-27)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
|
@ -27,13 +27,13 @@ vtodo_class2 = "(Vertrauliche Aufgabe)";
|
||||||
/* Invitation */
|
/* Invitation */
|
||||||
"Event Invitation: \"%{Summary}\"" = "Termineinladung: \"%{Summary}\"";
|
"Event Invitation: \"%{Summary}\"" = "Termineinladung: \"%{Summary}\"";
|
||||||
"(sent by %{SentBy}) " = "(gesendet von %{SentBy}) ";
|
"(sent by %{SentBy}) " = "(gesendet von %{SentBy}) ";
|
||||||
"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText} Hat Sie eingeladen zu %{Summary}.\n\nBeginn: %{StartDate}\nEnde: %{EndDate}\nBeschreibung: %{Description}";
|
"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText} Hat Sie eingeladen zu \"%{Summary}\".\n\nBeginn: %{StartDate}\nEnde: %{EndDate}\nBeschreibung: %{Description}";
|
||||||
"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText} hat Sie eingeladen zu \"%{Summary}\".\n\nBeginn: %{StartDate} um %{StartTime}\nEnde: %{EndDate} um %{EndTime}\nBeschreibung: %{Description}";
|
"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText} hat Sie eingeladen zu \"%{Summary}\".\n\nBeginn: %{StartDate} um %{StartTime}\nEnde: %{EndDate} um %{EndTime}\nBeschreibung: %{Description}";
|
||||||
|
|
||||||
/* Deletion */
|
/* Deletion */
|
||||||
"Event Cancelled: \"%{Summary}\"" = "Termin abgesagt: \"%{Summary}\"";
|
"Event Cancelled: \"%{Summary}\"" = "Termin abgesagt: \"%{Summary}\"";
|
||||||
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}"
|
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}"
|
||||||
= "%{Organizer} %{SentByText} hat den folgenden Termin abgesagt: %{Summary}.\n\nBeginn: %{StartDate}\nEnde: %{EndDate}\nBeschreibung: %{Description}";
|
= "%{Organizer} %{SentByText} hat den folgenden Termin abgesagt: \"%{Summary}\".\n\nBeginn: %{StartDate}\nEnde: %{EndDate}\nBeschreibung: %{Description}";
|
||||||
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}"
|
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}"
|
||||||
= "%{Organizer} %{SentByText} hat diesen Termin abgesagt: \"%{Summary}\".\n\nBeginn: %{StartDate} um %{StartTime}\nEnde: %{EndDate} um %{EndTime}\nBeschreibung: %{Description}";
|
= "%{Organizer} %{SentByText} hat diesen Termin abgesagt: \"%{Summary}\".\n\nBeginn: %{StartDate} um %{StartTime}\nEnde: %{EndDate} um %{EndTime}\nBeschreibung: %{Description}";
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ vtodo_class2 = "(Vertrauliche Aufgabe)";
|
||||||
"The following parameters have changed in the \"%{Summary}\" meeting:"
|
"The following parameters have changed in the \"%{Summary}\" meeting:"
|
||||||
= "Folgendes wurde am Termin \"%{Summary}\" geändert:";
|
= "Folgendes wurde am Termin \"%{Summary}\" geändert:";
|
||||||
"Please accept or decline those changes."
|
"Please accept or decline those changes."
|
||||||
= "Bitte akzeptieren Sie diese Änderung oder lehnen Sie ab.";
|
= "Bitte akzeptieren Sie diese Änderung oder lehnen Sie diese ab.";
|
||||||
|
|
||||||
/* Reply */
|
/* Reply */
|
||||||
"Accepted invitation: \"%{Summary}\"" = "Einladung zugestimmt: \"%{Summary}\"";
|
"Accepted invitation: \"%{Summary}\"" = "Einladung zugestimmt: \"%{Summary}\"";
|
||||||
|
|
|
@ -140,9 +140,14 @@
|
||||||
return newEndDate;
|
return newEndDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *) location
|
||||||
|
{
|
||||||
|
return [[apt location] stringByEscapingHTMLString];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSString *) summary
|
- (NSString *) summary
|
||||||
{
|
{
|
||||||
return [apt summary];
|
return [[apt summary] stringByEscapingHTMLString];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setOrganizerName: (NSString *) theString
|
- (void) setOrganizerName: (NSString *) theString
|
||||||
|
|
|
@ -35,6 +35,7 @@ Mailer_OBJC_FILES += \
|
||||||
\
|
\
|
||||||
EOQualifier+MailDAV.m \
|
EOQualifier+MailDAV.m \
|
||||||
NSData+Mail.m \
|
NSData+Mail.m \
|
||||||
|
NSDictionary+Mail.m \
|
||||||
NSString+Mail.m \
|
NSString+Mail.m \
|
||||||
SOGoUser+Mailer.m
|
SOGoUser+Mailer.m
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/* NSDictionary+Mail.h - this file is part of SOGo
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 Inverse inc.
|
||||||
|
*
|
||||||
|
* This file is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This file is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NSDICTIONARY_MAIL_H
|
||||||
|
#define NSDICTIONARY_MAIL_H
|
||||||
|
|
||||||
|
#import <Foundation/NSDictionary.h>
|
||||||
|
|
||||||
|
@class NSString;
|
||||||
|
|
||||||
|
@interface NSDictionary (SOGoExtension)
|
||||||
|
|
||||||
|
- (NSString *) filename;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* NSDICTIONARY_MAIL_H */
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* NSDictionary+Mail.m - this file is part of SOGo
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 Inverse inc.
|
||||||
|
*
|
||||||
|
* This file is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This file is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Foundation/NSDictionary.h>
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
|
||||||
|
#import "NSDictionary+Mail.h"
|
||||||
|
|
||||||
|
@implementation NSDictionary (SOGoExtension)
|
||||||
|
|
||||||
|
- (NSString *) filename
|
||||||
|
{
|
||||||
|
NSDictionary *parameters;
|
||||||
|
NSString *filename;
|
||||||
|
|
||||||
|
filename = [[self objectForKey: @"parameterList"]
|
||||||
|
objectForKey: @"name"];
|
||||||
|
|
||||||
|
if (!filename)
|
||||||
|
{
|
||||||
|
parameters = [[self objectForKey: @"disposition"]
|
||||||
|
objectForKey: @"parameterList"];
|
||||||
|
filename = [parameters objectForKey: @"filename"];
|
||||||
|
|
||||||
|
|
||||||
|
// We might have something like filename*=UTF-8''foobar
|
||||||
|
// See RFC2231 for details. If it was folded before, it will
|
||||||
|
// be unfolded when we get here.
|
||||||
|
if (!filename)
|
||||||
|
{
|
||||||
|
filename = [parameters objectForKey: @"filename*"];
|
||||||
|
|
||||||
|
if (filename)
|
||||||
|
{
|
||||||
|
NSRange r;
|
||||||
|
|
||||||
|
filename = [filename stringByUnescapingURL];
|
||||||
|
|
||||||
|
// We skip up to the language
|
||||||
|
r = [filename rangeOfString: @"'"];
|
||||||
|
|
||||||
|
if (r.length)
|
||||||
|
{
|
||||||
|
r = [filename rangeOfString: @"'" options: 0 range: NSMakeRange(r.location+1, [filename length]-r.location-1)];
|
||||||
|
|
||||||
|
if (r.length)
|
||||||
|
filename = [filename substringFromIndex: r.location+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -151,6 +151,22 @@ static BOOL debugOn = YES;
|
||||||
newConnection = (NGImap4Connection *) [NSNull null];
|
newConnection = (NGImap4Connection *) [NSNull null];
|
||||||
[self errorWithFormat:@"Could not connect IMAP4"];
|
[self errorWithFormat:@"Could not connect IMAP4"];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If the server has the ID capability (RFC 2971), we set the x-originating-ip
|
||||||
|
// accordingly for the IMAP connection.
|
||||||
|
NSString *remoteHost;
|
||||||
|
|
||||||
|
remoteHost = [[context request] headerForKey: @"x-webobjects-remote-host"];
|
||||||
|
|
||||||
|
if (remoteHost)
|
||||||
|
{
|
||||||
|
if ([[[[newConnection client] capability] objectForKey: @"capability"] containsObject: @"id"])
|
||||||
|
{
|
||||||
|
[[newConnection client] processCommand: [NSString stringWithFormat: @"ID (\"x-originating-ip\" \"%@\")", remoteHost]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return newConnection;
|
return newConnection;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
|
|
||||||
#import <SoObjects/SOGo/NSDictionary+Utilities.h>
|
#import <SoObjects/SOGo/NSDictionary+Utilities.h>
|
||||||
|
|
||||||
|
#import "NSDictionary+Mail.h"
|
||||||
#import "SOGoMailObject.h"
|
#import "SOGoMailObject.h"
|
||||||
#import "SOGoMailManager.h"
|
#import "SOGoMailManager.h"
|
||||||
|
|
||||||
|
@ -201,21 +202,9 @@ static BOOL debugOn = NO;
|
||||||
|
|
||||||
- (NSString *) filename
|
- (NSString *) filename
|
||||||
{
|
{
|
||||||
NSString *filename;
|
|
||||||
NSDictionary *parameters;
|
|
||||||
|
|
||||||
[self partInfo];
|
[self partInfo];
|
||||||
|
|
||||||
filename = [[partInfo objectForKey: @"parameterList"]
|
return [partInfo filename];
|
||||||
objectForKey: @"name"];
|
|
||||||
if (!filename)
|
|
||||||
{
|
|
||||||
parameters = [[partInfo objectForKey: @"disposition"]
|
|
||||||
objectForKey: @"parameterList"];
|
|
||||||
filename = [parameters objectForKey: @"filename"];
|
|
||||||
}
|
|
||||||
|
|
||||||
return filename;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We overwrite the super's class method in order to make sure
|
/* We overwrite the super's class method in order to make sure
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#import <SoObjects/SOGo/SOGoUser.h>
|
#import <SoObjects/SOGo/SOGoUser.h>
|
||||||
#import <SoObjects/SOGo/SOGoUserDefaults.h>
|
#import <SoObjects/SOGo/SOGoUserDefaults.h>
|
||||||
|
|
||||||
|
#import "NSDictionary+Mail.h"
|
||||||
#import "NSString+Mail.h"
|
#import "NSString+Mail.h"
|
||||||
#import "SOGoMailForward.h"
|
#import "SOGoMailForward.h"
|
||||||
#import "SOGoMailObject+Draft.h"
|
#import "SOGoMailObject+Draft.h"
|
||||||
|
@ -250,39 +251,10 @@
|
||||||
intoArray: (NSMutableArray *) keys
|
intoArray: (NSMutableArray *) keys
|
||||||
withPath: (NSString *) path
|
withPath: (NSString *) path
|
||||||
{
|
{
|
||||||
NSDictionary *disposition, *currentFile;
|
|
||||||
NSString *filename, *mimeType;
|
NSString *filename, *mimeType;
|
||||||
|
NSDictionary *currentFile;
|
||||||
|
|
||||||
disposition = [part objectForKey: @"disposition"];
|
filename = [part filename];
|
||||||
filename = [[disposition objectForKey: @"parameterList"]
|
|
||||||
objectForKey: @"filename"];
|
|
||||||
|
|
||||||
// We might have something like filename*=UTF-8''foobar
|
|
||||||
// See RFC2231 for details. If it was folded before, it will
|
|
||||||
// be unfolded when we get here.
|
|
||||||
if (!filename)
|
|
||||||
{
|
|
||||||
filename = [[disposition objectForKey: @"parameterList"]
|
|
||||||
objectForKey: @"filename*"];
|
|
||||||
|
|
||||||
if (filename)
|
|
||||||
{
|
|
||||||
NSRange r;
|
|
||||||
|
|
||||||
filename = [filename stringByUnescapingURL];
|
|
||||||
|
|
||||||
// We skip up to the language
|
|
||||||
r = [filename rangeOfString: @"'"];
|
|
||||||
|
|
||||||
if (r.length)
|
|
||||||
{
|
|
||||||
r = [filename rangeOfString: @"'" options: 0 range: NSMakeRange(r.location+1, [filename length]-r.location-1)];
|
|
||||||
|
|
||||||
if (r.length)
|
|
||||||
filename = [filename substringFromIndex: r.location+1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mimeType = [NSString stringWithFormat: @"%@/%@",
|
mimeType = [NSString stringWithFormat: @"%@/%@",
|
||||||
[part objectForKey: @"type"],
|
[part objectForKey: @"type"],
|
||||||
|
|
|
@ -26,6 +26,24 @@ MailPartViewers_OBJC_FILES += \
|
||||||
UIxMailPartICalViewer.m \
|
UIxMailPartICalViewer.m \
|
||||||
\
|
\
|
||||||
UIxMailPartICalActions.m \
|
UIxMailPartICalActions.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailBodyPart.m \
|
||||||
|
../../SoObjects/Mailer/SOGoHTMLMailBodyPart.m \
|
||||||
|
../../SoObjects/Mailer/SOGoCalendarMailBodyPart.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailAccounts.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailBaseObject.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailAccount.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailNamespace.m \
|
||||||
|
../../SoObjects/Mailer/SOGoDraftsFolder.m \
|
||||||
|
../../SoObjects/Mailer/SOGoSentFolder.m \
|
||||||
|
../../SoObjects/Mailer/SOGoTrashFolder.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailFolder.m \
|
||||||
|
../../SoObjects/Mailer/SOGoDraftObject.m \
|
||||||
|
../../SoObjects/Mailer/SOGoMailObject.m \
|
||||||
|
../../SoObjects/Appointments/SOGoEMailAlarmsManager.m \
|
||||||
|
../../SoObjects/Appointments/SOGoAppointmentObject.m \
|
||||||
|
../../SoObjects/Appointments/SOGoComponentOccurence.m \
|
||||||
|
../../SoObjects/Appointments/SOGoAppointmentOccurence.m \
|
||||||
|
../../SoObjects/Appointments/SOGoCalendarComponent.m
|
||||||
|
|
||||||
MailPartViewers_RESOURCE_FILES += \
|
MailPartViewers_RESOURCE_FILES += \
|
||||||
product.plist \
|
product.plist \
|
||||||
|
|
|
@ -2,3 +2,10 @@ ifeq ($(HAS_LIBRARY_ssl),yes)
|
||||||
ADDITIONAL_CPPFLAGS += -DHAVE_OPENSSL=1
|
ADDITIONAL_CPPFLAGS += -DHAVE_OPENSSL=1
|
||||||
BUNDLE_LIBS += -lcrypto
|
BUNDLE_LIBS += -lcrypto
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ADDITIONAL_CPPFLAGS += \
|
||||||
|
-Wall -DCOMPILE_FOR_GSTEP_MAKE=1 \
|
||||||
|
-DUIX_MAILER_MAJOR_VERSION="@\"$(MAJOR_VERSION)\"" \
|
||||||
|
-DUIX_MAILER_MINOR_VERSION="@\"$(MINOR_VERSION)\"" \
|
||||||
|
-DUIX_MAILER_SUBMINOR_VERSION="@\"$(SUBMINOR_VERSION)\""
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2004-2005 SKYRIX Software AG
|
Copyright (C) 2004-2005 SKYRIX Software AG
|
||||||
|
Copyright (C) 2006-2013 Inverse inc.
|
||||||
|
|
||||||
This file is part of SOGo.
|
This file is part of SOGo.
|
||||||
|
|
||||||
SOGo is free software; you can redistribute it and/or modify it under
|
SOGo is free software; you can redistribute it and/or modify it under
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2007-2009 Inverse inc.
|
Copyright (C) 2007-2013 Inverse inc.
|
||||||
Copyright (C) 2004-2005 SKYRIX Software AG
|
Copyright (C) 2004-2005 SKYRIX Software AG
|
||||||
|
|
||||||
This file is part of SOGo.
|
This file is part of SOGo.
|
||||||
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#import <SOGo/NSString+Utilities.h>
|
#import <SOGo/NSString+Utilities.h>
|
||||||
#import <Mailer/NSData+Mail.h>
|
#import <Mailer/NSData+Mail.h>
|
||||||
|
#import <Mailer/NSDictionary+Mail.h>
|
||||||
#import <Mailer/SOGoMailBodyPart.h>
|
#import <Mailer/SOGoMailBodyPart.h>
|
||||||
|
|
||||||
#import "MailerUI/WOContext+UIxMailer.h"
|
#import "MailerUI/WOContext+UIxMailer.h"
|
||||||
|
@ -210,22 +211,7 @@
|
||||||
|
|
||||||
- (NSString *) filename
|
- (NSString *) filename
|
||||||
{
|
{
|
||||||
NSDictionary *parameters;
|
return [bodyInfo filename];
|
||||||
NSString *filename;
|
|
||||||
|
|
||||||
filename = nil;
|
|
||||||
parameters = [bodyInfo valueForKey: @"parameterList"];
|
|
||||||
if (parameters)
|
|
||||||
filename = [parameters valueForKey: @"name"];
|
|
||||||
|
|
||||||
if (!filename)
|
|
||||||
{
|
|
||||||
parameters = [[bodyInfo valueForKey: @"disposition"]
|
|
||||||
valueForKey: @"parameterList"];
|
|
||||||
filename = [parameters valueForKey: @"filename"];
|
|
||||||
}
|
|
||||||
|
|
||||||
return filename;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) filenameForDisplay
|
- (NSString *) filenameForDisplay
|
||||||
|
@ -280,7 +266,7 @@
|
||||||
NSMutableString *filename;
|
NSMutableString *filename;
|
||||||
NSString *extension;
|
NSString *extension;
|
||||||
|
|
||||||
filename = [NSMutableString stringWithString: [bodyPart filename]];
|
filename = [self filename];
|
||||||
if (![filename length])
|
if (![filename length])
|
||||||
[filename appendFormat: @"%@-%@",
|
[filename appendFormat: @"%@-%@",
|
||||||
[self labelForKey: @"Untitled"],
|
[self labelForKey: @"Untitled"],
|
||||||
|
@ -323,22 +309,22 @@
|
||||||
NSString *mimeImageFile, *mimeImageUrl;
|
NSString *mimeImageFile, *mimeImageUrl;
|
||||||
|
|
||||||
mimeImageFile = [NSString stringWithFormat: @"mime-%@-%@.png",
|
mimeImageFile = [NSString stringWithFormat: @"mime-%@-%@.png",
|
||||||
[bodyInfo objectForKey: @"type"],
|
[bodyInfo objectForKey: @"type"],
|
||||||
[bodyInfo objectForKey: @"subtype"]];
|
[bodyInfo objectForKey: @"subtype"]];
|
||||||
|
|
||||||
mimeImageUrl = [self urlForResourceFilename: mimeImageFile];
|
mimeImageUrl = [self urlForResourceFilename: mimeImageFile];
|
||||||
|
|
||||||
if ( [mimeImageUrl length] == 0 )
|
if ([mimeImageUrl length] == 0)
|
||||||
{
|
{
|
||||||
mimeImageFile = [NSString stringWithFormat: @"mime-%@.png",
|
mimeImageFile = [NSString stringWithFormat: @"mime-%@.png",
|
||||||
[bodyInfo objectForKey: @"type"]];
|
[bodyInfo objectForKey: @"type"]];
|
||||||
mimeImageUrl = [self urlForResourceFilename: mimeImageFile];
|
mimeImageUrl = [self urlForResourceFilename: mimeImageFile];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( [mimeImageUrl length] == 0 )
|
if ([mimeImageUrl length] == 0)
|
||||||
{
|
{
|
||||||
mimeImageUrl = [self urlForResourceFilename: @"mime-unknown.png"];
|
mimeImageUrl = [self urlForResourceFilename: @"mime-unknown.png"];
|
||||||
}
|
}
|
||||||
|
|
||||||
return mimeImageUrl;
|
return mimeImageUrl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ MailerUI_OBJC_FILES += \
|
||||||
UIxMailWindowCloser.m \
|
UIxMailWindowCloser.m \
|
||||||
\
|
\
|
||||||
UIxMailUserRightsEditor.m \
|
UIxMailUserRightsEditor.m \
|
||||||
|
../MailPartViewers/UIxMailRenderingContext.m \
|
||||||
UIxMailUserDelegationEditor.m \
|
UIxMailUserDelegationEditor.m \
|
||||||
# UIxMailEditorAction.m \
|
# UIxMailEditorAction.m \
|
||||||
# UIxMailReplyAction.m \
|
# UIxMailReplyAction.m \
|
||||||
|
|
|
@ -753,7 +753,7 @@
|
||||||
// To
|
// To
|
||||||
to = [[message objectForKey: @"envelope"] to];
|
to = [[message objectForKey: @"envelope"] to];
|
||||||
if ([to count] > 0)
|
if ([to count] > 0)
|
||||||
[msg addObject: [addressFormatter stringForArray: to]];
|
[msg addObject: [[addressFormatter stringForArray: to] stringByEscapingHTMLString]];
|
||||||
else
|
else
|
||||||
[msg addObject: @""];
|
[msg addObject: @""];
|
||||||
|
|
||||||
|
@ -778,7 +778,7 @@
|
||||||
// From
|
// From
|
||||||
from = [[message objectForKey: @"envelope"] from];
|
from = [[message objectForKey: @"envelope"] from];
|
||||||
if ([from count] > 0)
|
if ([from count] > 0)
|
||||||
[msg addObject: [addressFormatter stringForArray: from]];
|
[msg addObject: [[addressFormatter stringForArray: from] stringByEscapingHTMLString]];
|
||||||
else
|
else
|
||||||
[msg addObject: @""];
|
[msg addObject: @""];
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
"Welsh" = "Cymraeg";
|
"Welsh" = "Cymraeg";
|
||||||
|
|
||||||
"About" = "O aplikaci";
|
"About" = "O aplikaci";
|
||||||
"AboutBox" = "SOGo je plně vybavený groupwarový server vyvíjený Inverse, který je zaměřený na jednoduchost a škálovatelnost.<br/><br/>⏎ SOGo poskytuje bohaté webové prostředí založené na technologii AJAX a podporuje i mnoho kalendářových klientů pracujících se standardními protokoly CalDAV a CardDAV.<br/><br/>⏎ SOGo je distribuováno pod licencí <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPL</a> verze 2 nebo novější a některé části jsou distribuovány pod licencí GNU LGPL verze 2. Toto je svobodný software: můžete ho svobodně měnit a šířit dále. Neexistuje ŽÁDNÁ ZÁRUKA v rozsahu upraveném zákonem.<br/><br/>⏎ \nRůzné možnosti podpory naleznete na <a href=\"http://www.sogo.nu/en/support/community.html\">této stránce</a>.";
|
"AboutBox" = "SOGo je plně vybavený groupwarový server vyvíjený Inverse, který je zaměřený na jednoduchost a škálovatelnost.<br/><br/>\nSOGo poskytuje bohaté webové prostředí založené na technologii AJAX a podporuje i mnoho kalendářových klientů pracujících se standardními protokoly CalDAV a CardDAV.<br/><br/>\nSOGo je distribuováno pod licencí <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPL</a> verze 2 nebo novější a některé části jsou distribuovány pod licencí GNU LGPL verze 2. Toto je svobodný software: můžete ho svobodně měnit a šířit dále. Neexistuje ŽÁDNÁ ZÁRUKA v rozsahu upraveném zákonem.<br/><br/>\nRůzné možnosti podpory naleznete na <a href=\"http://www.sogo.nu/en/support/community.html\">této stránce</a>.";
|
||||||
|
|
||||||
"Your account was locked due to too many failed attempts." = "Váš účet byl zablokován z důvodu mnoha neúspěšných pokusů o přihlášení.";
|
"Your account was locked due to too many failed attempts." = "Váš účet byl zablokován z důvodu mnoha neúspěšných pokusů o přihlášení.";
|
||||||
"Your account was locked due to an expired password." = "Váš účet byl zablokován z důvodu expirovaného hesla.";
|
"Your account was locked due to an expired password." = "Váš účet byl zablokován z důvodu expirovaného hesla.";
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
"Connect" = "Anmelden";
|
"Connect" = "Anmelden";
|
||||||
|
|
||||||
"Wrong username or password." = "Falscher Benutzername oder falsches Passwort";
|
"Wrong username or password." = "Falscher Benutzername oder falsches Passwort";
|
||||||
"cookiesNotEnabled" = "Verbindung zu SOGo ist nicht möglich, da Cookies in Ihrem Browser deaktiviert sind. Bitte aktivieren Sie Cookies in Ihrem Browser.";
|
"cookiesNotEnabled" = "Anmeldung an SOGo ist nicht möglich, da Cookies in Ihrem Browser deaktiviert sind. Bitte aktivieren Sie Cookies in Ihrem Browser und versuchen Sie es erneut.";
|
||||||
|
|
||||||
"browserNotCompatible" = "Wir haben festgestellt, dass Ihre Browserversion im Moment nicht von SOGo unterstützt wird. Klicken Sie unten auf den Link, um die aktuelle Version Ihres Browsers zu installieren.";
|
"browserNotCompatible" = "Wir haben festgestellt, dass Ihre Browserversion im Moment nicht von SOGo unterstützt wird. Wir empfehlen Firefox zu verwenden. Klicken Sie unten auf den Link, um die aktuelle Version dieses Browsers zu installieren.";
|
||||||
"alternativeBrowsers" = "Sie können auch die folgenden Browser benutzen";
|
"alternativeBrowsers" = "Sie können auch die folgenden Browser benutzen";
|
||||||
"alternativeBrowserSafari" = "Sie können auch Safari benutzen.";
|
"alternativeBrowserSafari" = "Sie können auch Safari benutzen.";
|
||||||
"Download" = "Herunterladen";
|
"Download" = "Herunterladen";
|
||||||
|
|
||||||
"Language:" = "Sprache:";
|
"Language:" = "Sprache:";
|
||||||
"choose" = "Auswählen";
|
"choose" = "Auswählen ...";
|
||||||
"Arabic" = "العربية";
|
"Arabic" = "العربية";
|
||||||
"Catalan" = "Català";
|
"Catalan" = "Català";
|
||||||
"Czech" = "Česky";
|
"Czech" = "Česky";
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
"About" = "Über";
|
"About" = "Über";
|
||||||
"AboutBox" = "Entwickelt von Inverse. SOGo ist ein vollständiger Groupware-Server mit Fokus auf Skalierbarkeit und Unkompliziertheit.<br/><br/>\nSOGo bietet ein umfangreiches, auf AJAX basierendes Web-Interface. Durch die Verwendung von Protokollstandards wie etwa CalDAV und CardDAV werden verschiedene native Clients unterstützt.<br/><br/>\nSOGo wird unter der <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPLv2</a> oder höher, Teile unter der <a href=\"http://gnu.org/licenses/lgpl.html\">GNU LGPLv2</a> angeboten. Dies ist freie Software: Sie haben die Freiheit sie zu verändern und erneut zu verbreiten. Es besteht KEINE GEWÄHRLEISTUNG, soweit dies gesetzlich zulässig ist.<br/><br/>\nAuf <a href=\"http://www.sogo.nu/en/support/community.html\">dieser Seite</a> (in englischer Sprache) können Sie sich über weitere Support-Möglichkeiten informieren.";
|
"AboutBox" = "Entwickelt von Inverse. SOGo ist ein vollständiger Groupware-Server mit Fokus auf Skalierbarkeit und Unkompliziertheit.<br/><br/>\nSOGo bietet ein umfangreiches, auf AJAX basierendes Web-Interface. Durch die Verwendung von Protokollstandards wie etwa CalDAV und CardDAV werden verschiedene native Clients unterstützt.<br/><br/>\nSOGo wird unter der <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPLv2</a> oder höher, Teile unter der <a href=\"http://gnu.org/licenses/lgpl.html\">GNU LGPLv2</a> angeboten. Dies ist freie Software: Sie haben die Freiheit sie zu verändern und erneut zu verbreiten. Es besteht KEINE GEWÄHRLEISTUNG, soweit dies gesetzlich zulässig ist.<br/><br/>\nAuf <a href=\"http://www.sogo.nu/en/support/community.html\">dieser Seite</a> (in englischer Sprache) können Sie sich über weitere Support-Möglichkeiten informieren.";
|
||||||
|
|
||||||
"Your account was locked due to too many failed attempts." = "Ihr Konto wurde wegen zu vieler fehlgeschlagener Versuche gesperrt.";
|
"Your account was locked due to too many failed attempts." = "Ihr Konto wurde wegen zu vieler fehlgeschlagener Anmeldeversuche gesperrt.";
|
||||||
"Your account was locked due to an expired password." = "Ihr Konto wurde wegen eines abgelaufenen Passwortes gesperrt.";
|
"Your account was locked due to an expired password." = "Ihr Konto wurde wegen eines abgelaufenen Passwortes gesperrt.";
|
||||||
"Login failed due to unhandled error case: " = "Die Anmeldung ist aufgrund eines unbehandelten Fehlers fehlgeschlagen: ";
|
"Login failed due to unhandled error case: " = "Die Anmeldung ist aufgrund eines unbehandelten Fehlers fehlgeschlagen: ";
|
||||||
"Change your Password" = "Bitte Passwort ändern";
|
"Change your Password" = "Bitte Passwort ändern";
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
"Delete" = "Löschen";
|
"Delete" = "Löschen";
|
||||||
|
|
||||||
/* contacts categories */
|
/* contacts categories */
|
||||||
"contacts_category_labels" = "Geschäftspartner, Familie, Freund, Kollegin, Konkurrenten, Kunden, Lieferant, Presse, VIP";
|
"contacts_category_labels" = "Familie, Freund, Geschäftspartner, Kollegin, Konkurrenten, Kunden, Lieferant, Presse, VIP";
|
||||||
|
|
||||||
/* vacation (auto-reply) */
|
/* vacation (auto-reply) */
|
||||||
"Enable vacation auto reply" = "Automatische Abwesenheitsnachricht aktivieren";
|
"Enable vacation auto reply" = "Automatische Abwesenheitsnachricht aktivieren";
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
/* forward messages */
|
/* forward messages */
|
||||||
"Forward incoming messages" = "Ankommende Nachrichten weiterleiten";
|
"Forward incoming messages" = "Ankommende Nachrichten weiterleiten";
|
||||||
"Keep a copy" = "Kopie behalten";
|
"Keep a copy" = "Eine Kopie behalten";
|
||||||
"Please specify an address to which you want to forward your messages."
|
"Please specify an address to which you want to forward your messages."
|
||||||
= "Bitte Adresse angeben, an die Ihre Nachrichten weitergeleitet werden sollen.";
|
= "Bitte Adresse angeben, an die Ihre Nachrichten weitergeleitet werden sollen.";
|
||||||
|
|
||||||
|
@ -96,12 +96,12 @@
|
||||||
"Day start time must be prior to day end time." = "Der Tagesanfang muss vor dem Tagesende liegen.";
|
"Day start time must be prior to day end time." = "Der Tagesanfang muss vor dem Tagesende liegen.";
|
||||||
"Show time as busy outside working hours" = "Zeiten außerhalb der Arbeitszeit als belegt anzeigen";
|
"Show time as busy outside working hours" = "Zeiten außerhalb der Arbeitszeit als belegt anzeigen";
|
||||||
"First week of year :" = "Erste Woche des Jahres:";
|
"First week of year :" = "Erste Woche des Jahres:";
|
||||||
"Enable reminders for Calendar items" = "Terminerinnerung aktivieren";
|
"Enable reminders for Calendar items" = "Termin- und Aufgabenerinnerungen aktivieren";
|
||||||
"Play a sound when a reminder comes due"
|
"Play a sound when a reminder comes due"
|
||||||
= "Akustisches Signal zur Terminerinnerung";
|
= "Akustisches Signal zur Terminerinnerung";
|
||||||
"Default reminder :" = "Standard Terminerinnerung:";
|
"Default reminder :" = "Standard Terminerinnerung:";
|
||||||
|
|
||||||
"firstWeekOfYear_January1" = "Beginnt am 1.Januar";
|
"firstWeekOfYear_January1" = "Beginnt am 1. Januar";
|
||||||
"firstWeekOfYear_First4DayWeek" = "Erste 4 Tage Woche";
|
"firstWeekOfYear_First4DayWeek" = "Erste 4 Tage Woche";
|
||||||
"firstWeekOfYear_FirstFullWeek" = "Erste ganze Woche";
|
"firstWeekOfYear_FirstFullWeek" = "Erste ganze Woche";
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@
|
||||||
"Email:" = "E-Mail-Adresse:";
|
"Email:" = "E-Mail-Adresse:";
|
||||||
"Reply To Email:" = "\"Antworten An\" E-Mail-Adresse (Reply-To):";
|
"Reply To Email:" = "\"Antworten An\" E-Mail-Adresse (Reply-To):";
|
||||||
"Signature:" = "Signatur:";
|
"Signature:" = "Signatur:";
|
||||||
"(Click to create)" = "(Klick zum Erstellen)";
|
"(Click to create)" = "(Zum Erstellen klicken)";
|
||||||
|
|
||||||
"Signature" = "Signatur";
|
"Signature" = "Signatur";
|
||||||
"Please enter your signature below:" = "Bitte fügen Sie die Signatur hier ein:";
|
"Please enter your signature below:" = "Bitte fügen Sie die Signatur hier ein:";
|
||||||
|
@ -193,17 +193,17 @@
|
||||||
|
|
||||||
/* Event+task categories */
|
/* Event+task categories */
|
||||||
"category_none" = "Keine";
|
"category_none" = "Keine";
|
||||||
"calendar_category_labels" = "Jubiläum,Geburtstag,Geschäft,Anrufe,Klienten,Konkurrenz,Kunde,Favoriten,Fortsetzung,Geschenke,Ferien,Ideen,Besprechung,Fragen,Verschiedenes,Persönlich,Projekte,Feiertag,Status,Lieferanten,Reise,Urlaub";
|
"calendar_category_labels" = "Anrufe,Besprechung,Favoriten,Feiertag,Ferien,Fortsetzung,Fragen,Geburtstag,Geschäft,Geschenke,Ideen,Jubiläum,Klienten,Konkurrenz,Kunde,Lieferanten,Persönlich,Projekte,Reise,Status,Urlaub,Verschiedenes";
|
||||||
|
|
||||||
/* Default module */
|
/* Default module */
|
||||||
"Calendar" = "Kalender";
|
"Calendar" = "Kalender";
|
||||||
"Contacts" = "Adressbuch";
|
"Contacts" = "Adressbuch";
|
||||||
"Mail" = "Mail";
|
"Mail" = "E-Mail";
|
||||||
"Last" = "Zuletzt benutztes";
|
"Last" = "Zuletzt benutztes";
|
||||||
"Default module :" = "Vorgegebenes Modul:";
|
"Default module :" = "Vorgegebenes Modul:";
|
||||||
|
|
||||||
"Language :" = "Sprache :";
|
"Language :" = "Sprache :";
|
||||||
"choose" = "Auswählen";
|
"choose" = "Auswählen ...";
|
||||||
"Arabic" = "العربية";
|
"Arabic" = "العربية";
|
||||||
"Catalan" = "Català";
|
"Catalan" = "Català";
|
||||||
"Czech" = "Česky";
|
"Czech" = "Česky";
|
||||||
|
|
|
@ -141,6 +141,7 @@
|
||||||
"messageforward_inline" = "В теле письма";
|
"messageforward_inline" = "В теле письма";
|
||||||
"messageforward_attached" = "Приложенным файлом";
|
"messageforward_attached" = "Приложенным файлом";
|
||||||
|
|
||||||
|
"When replying to a message:" = "При ответе на сообщение:";
|
||||||
"replyplacement_above" = "Начинать мой ответ над цитируемым текстом";
|
"replyplacement_above" = "Начинать мой ответ над цитируемым текстом";
|
||||||
"replyplacement_below" = "Начинать мой ответ под цитируемым текстом";
|
"replyplacement_below" = "Начинать мой ответ под цитируемым текстом";
|
||||||
"And place my signature" = "И поместить мою подпись";
|
"And place my signature" = "И поместить мою подпись";
|
||||||
|
@ -149,12 +150,17 @@
|
||||||
"Compose messages in" = "Compose messages in";
|
"Compose messages in" = "Compose messages in";
|
||||||
"composemessagestype_html" = "HTML";
|
"composemessagestype_html" = "HTML";
|
||||||
"composemessagestype_text" = "Plain text";
|
"composemessagestype_text" = "Plain text";
|
||||||
|
"Display remote inline images" = "Показать встроенные изображения из сети";
|
||||||
|
"displayremoteinlineimages_never" = "Никогда";
|
||||||
|
"displayremoteinlineimages_always" = "Всегда";
|
||||||
|
|
||||||
/* IMAP Accounts */
|
/* IMAP Accounts */
|
||||||
"New Mail Account" = "New Mail Account";
|
"New Mail Account" = "New Mail Account";
|
||||||
|
|
||||||
"Server Name:" = "Server Name:";
|
"Server Name:" = "Server Name:";
|
||||||
"Port:" = "Port:";
|
"Port:" = "Port:";
|
||||||
|
"Encryption:" = "Шифрование:";
|
||||||
|
"None" = "Нет";
|
||||||
"User Name:" = "User Name:";
|
"User Name:" = "User Name:";
|
||||||
"Password:" = "Пароль:";
|
"Password:" = "Пароль:";
|
||||||
|
|
||||||
|
@ -247,6 +253,7 @@
|
||||||
"match any of the following rules:" = "отвечают любому из следующих правил:";
|
"match any of the following rules:" = "отвечают любому из следующих правил:";
|
||||||
"match all messages" = "все сообщения";
|
"match all messages" = "все сообщения";
|
||||||
"Perform these actions:" = "Произвести следующие действия:";
|
"Perform these actions:" = "Произвести следующие действия:";
|
||||||
|
"Untitled Filter" = "Фильтр без названия";
|
||||||
|
|
||||||
"Subject" = "Subject";
|
"Subject" = "Subject";
|
||||||
"From" = "From";
|
"From" = "From";
|
||||||
|
|
|
@ -179,6 +179,8 @@
|
||||||
"Reminder:" = "Lembrete:";
|
"Reminder:" = "Lembrete:";
|
||||||
"General:" = "Geral:";
|
"General:" = "Geral:";
|
||||||
"Reply:" = "Responder:";
|
"Reply:" = "Responder:";
|
||||||
|
"Created by:" = "Criado por:";
|
||||||
|
|
||||||
|
|
||||||
"Target:" = "Marca:";
|
"Target:" = "Marca:";
|
||||||
|
|
||||||
|
@ -373,6 +375,9 @@
|
||||||
|
|
||||||
"Show Time as Free" = "Exibir Hora como Livre";
|
"Show Time as Free" = "Exibir Hora como Livre";
|
||||||
|
|
||||||
|
/* email notifications */
|
||||||
|
"Send Appointment Notifications" = "Enviar Notificações de Apontamento";
|
||||||
|
|
||||||
/* validation errors */
|
/* validation errors */
|
||||||
|
|
||||||
validate_notitle = "Nenhum título informado, continue?";
|
validate_notitle = "Nenhum título informado, continue?";
|
||||||
|
|
|
@ -179,6 +179,8 @@
|
||||||
"Reminder:" = "Připomenutí:";
|
"Reminder:" = "Připomenutí:";
|
||||||
"General:" = "Obecný:";
|
"General:" = "Obecný:";
|
||||||
"Reply:" = "Odpověď:";
|
"Reply:" = "Odpověď:";
|
||||||
|
"Created by:" = "Vytvořeno:";
|
||||||
|
|
||||||
|
|
||||||
"Target:" = "Vložte adresu webové stránky nebo dokumentu.";
|
"Target:" = "Vložte adresu webové stránky nebo dokumentu.";
|
||||||
|
|
||||||
|
@ -373,6 +375,9 @@
|
||||||
|
|
||||||
"Show Time as Free" = "Čas zobrazit jako volný";
|
"Show Time as Free" = "Čas zobrazit jako volný";
|
||||||
|
|
||||||
|
/* email notifications */
|
||||||
|
"Send Appointment Notifications" = "Poslat připomenutí";
|
||||||
|
|
||||||
/* validation errors */
|
/* validation errors */
|
||||||
|
|
||||||
validate_notitle = "Název nebyl nastaven, pokračovat?";
|
validate_notitle = "Název nebyl nastaven, pokračovat?";
|
||||||
|
|
|
@ -179,6 +179,8 @@
|
||||||
"Reminder:" = "Alarm:";
|
"Reminder:" = "Alarm:";
|
||||||
"General:" = "Algemeen:";
|
"General:" = "Algemeen:";
|
||||||
"Reply:" = "Antwoord:";
|
"Reply:" = "Antwoord:";
|
||||||
|
"Created by:" = "Aangemaakt door:";
|
||||||
|
|
||||||
|
|
||||||
"Target:" = "Bestemming:";
|
"Target:" = "Bestemming:";
|
||||||
|
|
||||||
|
@ -373,6 +375,9 @@
|
||||||
|
|
||||||
"Show Time as Free" = "Toon tijd als vrij";
|
"Show Time as Free" = "Toon tijd als vrij";
|
||||||
|
|
||||||
|
/* email notifications */
|
||||||
|
"Send Appointment Notifications" = "Stuur afspraakmeldingen";
|
||||||
|
|
||||||
/* validation errors */
|
/* validation errors */
|
||||||
|
|
||||||
validate_notitle = "U heeft geen titel opgegeven. Wilt u doorgaan?";
|
validate_notitle = "U heeft geen titel opgegeven. Wilt u doorgaan?";
|
||||||
|
|
|
@ -179,6 +179,8 @@
|
||||||
"Reminder:" = "Erinnerung:";
|
"Reminder:" = "Erinnerung:";
|
||||||
"General:" = "Generell:";
|
"General:" = "Generell:";
|
||||||
"Reply:" = "Antwort:";
|
"Reply:" = "Antwort:";
|
||||||
|
"Created by:" = "Erstellt von:";
|
||||||
|
|
||||||
|
|
||||||
"Target:" = "Ziel:";
|
"Target:" = "Ziel:";
|
||||||
|
|
||||||
|
@ -373,6 +375,9 @@
|
||||||
|
|
||||||
"Show Time as Free" = "Zeige Zeit als Verfügbar";
|
"Show Time as Free" = "Zeige Zeit als Verfügbar";
|
||||||
|
|
||||||
|
/* email notifications */
|
||||||
|
"Send Appointment Notifications" = "Verabredungsbenachrichtigungen senden";
|
||||||
|
|
||||||
/* validation errors */
|
/* validation errors */
|
||||||
|
|
||||||
validate_notitle = "Sie haben keinen Titel eingegeben. Wollen Sie trotzdem fortfahren?";
|
validate_notitle = "Sie haben keinen Titel eingegeben. Wollen Sie trotzdem fortfahren?";
|
||||||
|
|
|
@ -179,6 +179,8 @@
|
||||||
"Reminder:" = "Przypomnienie:";
|
"Reminder:" = "Przypomnienie:";
|
||||||
"General:" = "Ogólne:";
|
"General:" = "Ogólne:";
|
||||||
"Reply:" = "Odpowiedź:";
|
"Reply:" = "Odpowiedź:";
|
||||||
|
"Created by:" = "Stworzone przez:";
|
||||||
|
|
||||||
|
|
||||||
"Target:" = "Cel:";
|
"Target:" = "Cel:";
|
||||||
|
|
||||||
|
@ -373,6 +375,9 @@
|
||||||
|
|
||||||
"Show Time as Free" = "Pokaż czas jako wolny";
|
"Show Time as Free" = "Pokaż czas jako wolny";
|
||||||
|
|
||||||
|
/* email notifications */
|
||||||
|
"Send Appointment Notifications" = "Wyślij powiadomienia o spotkaniu";
|
||||||
|
|
||||||
/* validation errors */
|
/* validation errors */
|
||||||
|
|
||||||
validate_notitle = "Nie podano tytułu, kontynuować?";
|
validate_notitle = "Nie podano tytułu, kontynuować?";
|
||||||
|
|
|
@ -179,6 +179,8 @@
|
||||||
"Reminder:" = "Напоминание:";
|
"Reminder:" = "Напоминание:";
|
||||||
"General:" = "Общее:";
|
"General:" = "Общее:";
|
||||||
"Reply:" = "Ответ:";
|
"Reply:" = "Ответ:";
|
||||||
|
"Created by:" = "Создано:";
|
||||||
|
|
||||||
|
|
||||||
"Target:" = "Цель:";
|
"Target:" = "Цель:";
|
||||||
|
|
||||||
|
@ -373,6 +375,9 @@
|
||||||
|
|
||||||
"Show Time as Free" = "Отображать время как свободное";
|
"Show Time as Free" = "Отображать время как свободное";
|
||||||
|
|
||||||
|
/* email notifications */
|
||||||
|
"Send Appointment Notifications" = "Отправлять напоминания о встречах";
|
||||||
|
|
||||||
/* validation errors */
|
/* validation errors */
|
||||||
|
|
||||||
validate_notitle = "Нет названия. Продолжить?";
|
validate_notitle = "Нет названия. Продолжить?";
|
||||||
|
|
|
@ -214,8 +214,6 @@
|
||||||
|
|
||||||
- (BOOL) showCompletedTasks
|
- (BOOL) showCompletedTasks
|
||||||
{
|
{
|
||||||
BOOL show;
|
|
||||||
|
|
||||||
[self _setupContext];
|
[self _setupContext];
|
||||||
|
|
||||||
return [[us objectForKey: @"ShowCompletedTasks"] boolValue];
|
return [[us objectForKey: @"ShowCompletedTasks"] boolValue];
|
||||||
|
@ -237,6 +235,32 @@
|
||||||
return [self responseWithStatus: 204];
|
return [self responseWithStatus: 204];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (WOResponse *) saveListStateAction
|
||||||
|
{
|
||||||
|
WORequest *request;
|
||||||
|
NSString *state;
|
||||||
|
|
||||||
|
[self _setupContext];
|
||||||
|
request = [context request];
|
||||||
|
|
||||||
|
state = [request formValueForKey: @"state"];
|
||||||
|
[moduleSettings setObject: state
|
||||||
|
forKey: @"ListState"];
|
||||||
|
[us synchronize];
|
||||||
|
|
||||||
|
return [self responseWithStatus: 204];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *) listStateStyle
|
||||||
|
{
|
||||||
|
NSString *state;
|
||||||
|
|
||||||
|
[self _setupContext];
|
||||||
|
state = [moduleSettings objectForKey: @"ListState"];
|
||||||
|
|
||||||
|
return (state && [state compare: @"collapse"] == NSOrderedSame)? @"display: none;" : @"";
|
||||||
|
}
|
||||||
|
|
||||||
- (unsigned int) firstDayOfWeek
|
- (unsigned int) firstDayOfWeek
|
||||||
{
|
{
|
||||||
SOGoUserDefaults *ud;
|
SOGoUserDefaults *ud;
|
||||||
|
|
|
@ -343,6 +343,26 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *) collapseBtnClass
|
||||||
|
{
|
||||||
|
NSString *module, *state;
|
||||||
|
NSMutableDictionary *moduleSettings;
|
||||||
|
SOGoUser *activeUser;
|
||||||
|
SOGoAppointmentFolders *clientObject;
|
||||||
|
SOGoUserSettings *us;
|
||||||
|
|
||||||
|
activeUser = [context activeUser];
|
||||||
|
clientObject = [self clientObject];
|
||||||
|
|
||||||
|
module = [clientObject nameInContainer];
|
||||||
|
|
||||||
|
us = [activeUser userSettings];
|
||||||
|
moduleSettings = [us objectForKey: module];
|
||||||
|
state = [moduleSettings objectForKey: @"ListState"];
|
||||||
|
|
||||||
|
return (state && [state compare: @"collapse"] == NSOrderedSame)? @"rise" : @"collapse";
|
||||||
|
}
|
||||||
|
|
||||||
/* current day related */
|
/* current day related */
|
||||||
|
|
||||||
- (void) setCurrentDay:(NSCalendarDate *) _day
|
- (void) setCurrentDay:(NSCalendarDate *) _day
|
||||||
|
|
|
@ -872,10 +872,16 @@ iRANGE(2);
|
||||||
- (NSString *) organizerName
|
- (NSString *) organizerName
|
||||||
{
|
{
|
||||||
NSDictionary *profile;
|
NSDictionary *profile;
|
||||||
|
NSString *s;
|
||||||
|
|
||||||
profile = [[[self organizerProfile] allValues] lastObject];
|
profile = [[[self organizerProfile] allValues] lastObject];
|
||||||
|
|
||||||
|
s = [profile objectForKey: @"name"];
|
||||||
|
|
||||||
return [profile objectForKey: @"name"];
|
if ([s length] == 0)
|
||||||
|
s = [profile objectForKey: @"email"];
|
||||||
|
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) jsonOrganizer
|
- (NSString *) jsonOrganizer
|
||||||
|
|
|
@ -55,6 +55,11 @@
|
||||||
pageName = "UIxCalMainView";
|
pageName = "UIxCalMainView";
|
||||||
actionName = "saveSelectedList";
|
actionName = "saveSelectedList";
|
||||||
};
|
};
|
||||||
|
saveListState = {
|
||||||
|
protectedBy = "View";
|
||||||
|
pageName = "UIxCalMainView";
|
||||||
|
actionName = "saveListState";
|
||||||
|
};
|
||||||
dateselector = {
|
dateselector = {
|
||||||
protectedBy = "View";
|
protectedBy = "View";
|
||||||
pageName = "UIxCalDateSelector";
|
pageName = "UIxCalDateSelector";
|
||||||
|
|
|
@ -24,9 +24,9 @@ h1, dd, .dl-list dt { margin-left: 130px; }
|
||||||
<small><var:string value="organizerName" const:escapeHTML="NO"/><var:string value="sentByText" const:escapeHTML="NO"/></small></h1>
|
<small><var:string value="organizerName" const:escapeHTML="NO"/><var:string value="sentByText" const:escapeHTML="NO"/></small></h1>
|
||||||
|
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<var:if condition="apt.location.length"
|
<var:if condition="location.length"
|
||||||
><dt><var:string label:value="location_label" const:escapeHTML="NO"/></dt>
|
><dt><var:string label:value="location_label" const:escapeHTML="NO"/></dt>
|
||||||
<dd><var:string value="apt.location" const:escapeHTML="NO"/></dd></var:if>
|
<dd><var:string value="location" const:escapeHTML="NO"/></dd></var:if>
|
||||||
<dt><var:string label:value="startDate_label" const:escapeHTML="NO"/></dt>
|
<dt><var:string label:value="startDate_label" const:escapeHTML="NO"/></dt>
|
||||||
<dd><var:string value="formattedAptStartDate" const:escapeHTML="NO"
|
<dd><var:string value="formattedAptStartDate" const:escapeHTML="NO"
|
||||||
/><var:if condition="formattedAptStartTime.length"> - <var:string value="formattedAptStartTime" const:escapeHTML="NO"/> <var:string value="viewTZ" const:escapeHTML="NO"/>
|
/><var:if condition="formattedAptStartTime.length"> - <var:string value="formattedAptStartTime" const:escapeHTML="NO"/> <var:string value="viewTZ" const:escapeHTML="NO"/>
|
||||||
|
|
|
@ -45,7 +45,10 @@
|
||||||
><div var:class="clickableHourCellClass"
|
><div var:class="clickableHourCellClass"
|
||||||
var:day="currentTableDay.shortDateString"
|
var:day="currentTableDay.shortDateString"
|
||||||
var:hour="currentAppointmentHour">
|
var:hour="currentAppointmentHour">
|
||||||
</div></var:foreach></div>
|
<span class="minutes15"><!-- space --></span>
|
||||||
|
<span class="minutes30"><!-- space --></span>
|
||||||
|
<span class="minutes45"><!-- space --></span>
|
||||||
|
</div></var:foreach></div>
|
||||||
<div class="events"><!-- space --></div>
|
<div class="events"><!-- space --></div>
|
||||||
</div>
|
</div>
|
||||||
</var:foreach>
|
</var:foreach>
|
||||||
|
|
|
@ -1,63 +1,43 @@
|
||||||
<?xml version="1.0" standalone="yes"?>
|
<?xml version="1.0" standalone="yes"?>
|
||||||
<!DOCTYPE container>
|
<container
|
||||||
<container
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
xmlns="http://www.w3.org/1999/xhtml"
|
xmlns:var="http://www.skyrix.com/od/binding"
|
||||||
xmlns:var="http://www.skyrix.com/od/binding"
|
xmlns:const="http://www.skyrix.com/od/constant"
|
||||||
xmlns:const="http://www.skyrix.com/od/constant"
|
xmlns:rsrc="OGo:url"
|
||||||
xmlns:rsrc="OGo:url"
|
xmlns:label="OGo:label">
|
||||||
xmlns:label="OGo:label">
|
|
||||||
|
|
||||||
<div class="menu" id="currentViewMenu">
|
<div class="menu" id="currentViewMenu">
|
||||||
<ul>
|
<ul>
|
||||||
<li><var:string label:value="New Event..."/></li>
|
<li><var:string label:value="New Event..."/></li>
|
||||||
<li><var:string label:value="New Task..."/></li>
|
<li><var:string label:value="New Task..."/></li>
|
||||||
<li><!-- separator --></li>
|
<li><!-- separator --></li>
|
||||||
<li><var:string label:value="Previous Day"/></li>
|
<li><var:string label:value="Previous Day"/></li>
|
||||||
<li><var:string label:value="Next Day"/></li>
|
<li><var:string label:value="Next Day"/></li>
|
||||||
<li><!-- separator --></li>
|
<li><!-- separator --></li>
|
||||||
<li><var:string label:value="Delete Event"/></li>
|
<li><var:string label:value="Delete Event"/></li>
|
||||||
<li><var:string label:value="Copy event to my calendar"/></li>
|
<li><var:string label:value="Copy event to my calendar"/></li>
|
||||||
<li><var:string label:value="View Raw Source"/></li>
|
<li><var:string label:value="View Raw Source"/></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
<span class="daysHeader">
|
||||||
class="leftNavigationArrow"
|
<span class="day1">
|
||||||
var:date="prevDayQueryParameters.day"
|
<a href="#"
|
||||||
onclick="return onCalendarGotoDay(this);"
|
var:date="prevDayQueryParameters.day"
|
||||||
><img rsrc:src="arrow-left.png"/></a>
|
onclick="return onCalendarGotoDay(this);"><img rsrc:src="arrow-left.png"/></a>
|
||||||
<span class="daysHeader">
|
</span>
|
||||||
<span class="day2"><a href="#"
|
<span class="day0"><var:string value="currentDayName"/></span>
|
||||||
var:date="dayBeforePrevDayQueryParameters.day"
|
<span class="day1">
|
||||||
onclick="return onCalendarGotoDay(this);"
|
<a href="#"
|
||||||
><var:string value="dayBeforeYesterdayName"
|
var:date="nextDayQueryParameters.day"
|
||||||
/></a></span
|
onclick="return onCalendarGotoDay(this);"><img rsrc:src="arrow-right.png"/></a>
|
||||||
><span class="day1"><a href="#"
|
</span>
|
||||||
var:date="prevDayQueryParameters.day"
|
<a href="#" id="listCollapse"><img var:class="collapseBtnClass" rsrc:src="collapse.png"/></a>
|
||||||
onclick="return onCalendarGotoDay(this);"
|
</span>
|
||||||
><var:string value="yesterdayName"
|
<div id="calendarContent">
|
||||||
/></a></span
|
<var:component
|
||||||
><span class="day0"><var:string value="currentDayName" /></span
|
className="UIxCalDayTable"
|
||||||
><span class="day1"><a href="#"
|
startDate="startDate"
|
||||||
var:date="nextDayQueryParameters.day"
|
const:CSSClass="dayOverview"
|
||||||
onclick="return onCalendarGotoDay(this);"
|
const:numberOfDays="1" />
|
||||||
><var:string value="tomorrowName"
|
</div>
|
||||||
/></a></span
|
</container>
|
||||||
><span class="day2"><a href="#"
|
|
||||||
var:date="dayAfterNextDayQueryParameters.day"
|
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><var:string value="dayAfterTomorrowName"
|
|
||||||
/></a></span
|
|
||||||
></span>
|
|
||||||
<a href="#"
|
|
||||||
class="rightNavigationArrow"
|
|
||||||
var:date="nextDayQueryParameters.day"
|
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><img rsrc:src="arrow-right.png"/></a>
|
|
||||||
<div id="calendarContent">
|
|
||||||
<var:component
|
|
||||||
className="UIxCalDayTable"
|
|
||||||
startDate="startDate"
|
|
||||||
const:CSSClass="dayOverview"
|
|
||||||
const:numberOfDays="1" />
|
|
||||||
</div>
|
|
||||||
</container>
|
|
||||||
|
|
|
@ -147,7 +147,7 @@
|
||||||
<div id="verticalDragHandle" class="dragHandle"><!-- space --></div>
|
<div id="verticalDragHandle" class="dragHandle"><!-- space --></div>
|
||||||
|
|
||||||
<div id="rightPanel">
|
<div id="rightPanel">
|
||||||
<div class="tabsContainer" id="schedulerTabs">
|
<div class="tabsContainer" id="schedulerTabs" var:style="listStateStyle">
|
||||||
<ul>
|
<ul>
|
||||||
<li target="eventsListView" var:class="eventsTabClass"
|
<li target="eventsListView" var:class="eventsTabClass"
|
||||||
><span><var:string label:value="Events" /></span></li>
|
><span><var:string label:value="Events" /></span></li>
|
||||||
|
@ -202,7 +202,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="rightDragHandle" class="dragHandle"><!-- space --></div>
|
<div id="rightDragHandle" class="dragHandle" var:style="listStateStyle"><!-- space --></div>
|
||||||
<div id="calendarView"><!-- space --></div>
|
<div id="calendarView" var:style="listStateStyle"><!-- space --></div>
|
||||||
</div>
|
</div>
|
||||||
</var:component>
|
</var:component>
|
||||||
|
|
|
@ -1,77 +1,58 @@
|
||||||
<?xml version="1.0" standalone="yes"?>
|
<?xml version="1.0" standalone="yes"?>
|
||||||
<!DOCTYPE container>
|
<!DOCTYPE container>
|
||||||
<container
|
<container
|
||||||
xmlns="http://www.w3.org/1999/xhtml"
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
xmlns:var="http://www.skyrix.com/od/binding"
|
xmlns:var="http://www.skyrix.com/od/binding"
|
||||||
xmlns:const="http://www.skyrix.com/od/constant"
|
xmlns:const="http://www.skyrix.com/od/constant"
|
||||||
xmlns:rsrc="OGo:url"
|
xmlns:rsrc="OGo:url"
|
||||||
xmlns:label="OGo:label">
|
xmlns:label="OGo:label">
|
||||||
|
|
||||||
<div class="menu" id="currentViewMenu">
|
<div class="menu" id="currentViewMenu">
|
||||||
<ul>
|
<ul>
|
||||||
<li><var:string label:value="New Event..."/></li>
|
<li><var:string label:value="New Event..."/></li>
|
||||||
<li><var:string label:value="New Task..."/></li>
|
<li><var:string label:value="New Task..."/></li>
|
||||||
<li><!-- separator --></li>
|
<li><!-- separator --></li>
|
||||||
<li><var:string label:value="Previous Month"/></li>
|
<li><var:string label:value="Previous Month"/></li>
|
||||||
<li><var:string label:value="Next Month"/></li>
|
<li><var:string label:value="Next Month"/></li>
|
||||||
<li><!-- separator --></li>
|
<li><!-- separator --></li>
|
||||||
<li><var:string label:value="Delete Event"/></li>
|
<li><var:string label:value="Delete Event"/></li>
|
||||||
<li><var:string label:value="Copy event to my calendar"/></li>
|
<li><var:string label:value="Copy event to my calendar"/></li>
|
||||||
<li><var:string label:value="View Raw Source"/></li>
|
<li><var:string label:value="View Raw Source"/></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
<span class="monthsHeader">
|
||||||
class="leftNavigationArrow"
|
<span class="month1">
|
||||||
var:date="prevMonthQueryParameters.month"
|
<a href="#"
|
||||||
onclick="return onCalendarGotoDay(this);"
|
var:date="prevMonthQueryParameters.month"
|
||||||
><img rsrc:src="arrow-left.png"/></a>
|
onclick="return onCalendarGotoDay(this);"
|
||||||
<span class="monthsHeader">
|
><img rsrc:src="arrow-left.png"/></a>
|
||||||
<span class="month2"><a href="#"
|
</span>
|
||||||
var:date="monthBeforePrevMonthQueryParameters.month"
|
<span class="month0"><var:string value="monthNameOfThisMonth" /></span>
|
||||||
onclick="return onCalendarGotoDay(this);"
|
<span class="month1">
|
||||||
><var:string value="monthNameOfTwoMonthAgo"
|
<a href="#"
|
||||||
/></a></span
|
var:date="nextMonthQueryParameters.month"
|
||||||
><span class="month1"><a href="#"
|
onclick="return onCalendarGotoDay(this);"><img rsrc:src="arrow-right.png"/></a>
|
||||||
var:date="prevMonthQueryParameters.month"
|
</span>
|
||||||
onclick="return onCalendarGotoDay(this);"
|
<a href="#" id="listCollapse"><img var:class="collapseBtnClass" rsrc:src="collapse.png"/></a>
|
||||||
><var:string value="monthNameOfOneMonthAgo"
|
</span>
|
||||||
/></a></span
|
<div id="calendarContent">
|
||||||
><span class="month0"><var:string value="monthNameOfThisMonth" /></span
|
<div class="monthView">
|
||||||
><span class="month1"><a href="#"
|
<var:foreach list="headerDaysToDisplay" item="currentTableDay"
|
||||||
var:date="nextMonthQueryParameters.month"
|
><div var:class="headerDayCellClasses"
|
||||||
onclick="return onCalendarGotoDay(this);"
|
><var:string value="labelForCurrentDayToDisplay"
|
||||||
><var:string value="monthNameOfNextMonth"
|
/></div></var:foreach>
|
||||||
/></a></span
|
<div class="days" const:id="monthDaysView"
|
||||||
><span class="month2"><a href="#"
|
><var:foreach list="weeksToDisplay" item="currentWeek"
|
||||||
var:date="monthAfterNextMonthQueryParameters.month"
|
><var:foreach list="currentWeek" item="currentTableDay"
|
||||||
onclick="return onCalendarGotoDay(this);"
|
><div var:class="dayCellClasses"
|
||||||
><var:string value="monthNameOfTheMonthAfterNextMonth"
|
var:day="currentTableDay.shortDateString"
|
||||||
/></a></span
|
var:day-number="currentDayNumber"
|
||||||
></span>
|
var:id="currentDayId"
|
||||||
<a href="#"
|
|
||||||
class="rightNavigationArrow"
|
|
||||||
var:date="nextMonthQueryParameters.month"
|
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><img rsrc:src="arrow-right.png"/></a>
|
|
||||||
|
|
||||||
<div id="calendarContent">
|
|
||||||
<div class="monthView">
|
|
||||||
<var:foreach list="headerDaysToDisplay" item="currentTableDay"
|
|
||||||
><div var:class="headerDayCellClasses"
|
|
||||||
><var:string value="labelForCurrentDayToDisplay"
|
|
||||||
/></div></var:foreach>
|
|
||||||
<div class="days" const:id="monthDaysView"
|
|
||||||
><var:foreach list="weeksToDisplay" item="currentWeek"
|
|
||||||
><var:foreach list="currentWeek" item="currentTableDay"
|
|
||||||
><div var:class="dayCellClasses"
|
|
||||||
var:day="currentTableDay.shortDateString"
|
|
||||||
var:day-number="currentDayNumber"
|
|
||||||
var:id="currentDayId"
|
|
||||||
><div class="dayHeader"><var:string value="dayHeaderNumber"/></div
|
><div class="dayHeader"><var:string value="dayHeaderNumber"/></div
|
||||||
></div>
|
></div>
|
||||||
|
</var:foreach>
|
||||||
</var:foreach>
|
</var:foreach>
|
||||||
</var:foreach>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</container>
|
||||||
</container>
|
|
||||||
|
|
|
@ -1,63 +1,43 @@
|
||||||
<?xml version="1.0" standalone="yes"?>
|
<?xml version="1.0" standalone="yes"?>
|
||||||
<container
|
<container
|
||||||
xmlns="http://www.w3.org/1999/xhtml"
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
xmlns:var="http://www.skyrix.com/od/binding"
|
xmlns:var="http://www.skyrix.com/od/binding"
|
||||||
xmlns:const="http://www.skyrix.com/od/constant"
|
xmlns:const="http://www.skyrix.com/od/constant"
|
||||||
xmlns:rsrc="OGo:url"
|
xmlns:rsrc="OGo:url"
|
||||||
xmlns:label="OGo:label">
|
xmlns:label="OGo:label">
|
||||||
|
|
||||||
<div class="menu" id="currentViewMenu">
|
<div class="menu" id="currentViewMenu">
|
||||||
<ul>
|
<ul>
|
||||||
<li><var:string label:value="New Event..."/></li>
|
<li><var:string label:value="New Event..."/></li>
|
||||||
<li><var:string label:value="New Task..."/></li>
|
<li><var:string label:value="New Task..."/></li>
|
||||||
<li><!-- separator --></li>
|
<li><!-- separator --></li>
|
||||||
<li><var:string label:value="Previous Week"/></li>
|
<li><var:string label:value="Previous Week"/></li>
|
||||||
<li><var:string label:value="Next Week"/></li>
|
<li><var:string label:value="Next Week"/></li>
|
||||||
<li><!-- separator --></li>
|
<li><!-- separator --></li>
|
||||||
<li><var:string label:value="Delete Event"/></li>
|
<li><var:string label:value="Delete Event"/></li>
|
||||||
<li><var:string label:value="Copy event to my calendar"/></li>
|
<li><var:string label:value="Copy event to my calendar"/></li>
|
||||||
<li><var:string label:value="View Raw Source"/></li>
|
<li><var:string label:value="View Raw Source"/></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
|
||||||
class="leftNavigationArrow"
|
|
||||||
var:date="prevWeekQueryParameters.day"
|
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><img rsrc:src="arrow-left.png"/></a>
|
|
||||||
<span class="weeksHeader">
|
<span class="weeksHeader">
|
||||||
<span class="week2"><a href="#"
|
<span class="week1">
|
||||||
var:date="weekBeforePrevWeekQueryParameters.day"
|
<a href="#"
|
||||||
onclick="return onCalendarGotoDay(this);"
|
var:date="prevWeekQueryParameters.day"
|
||||||
><var:string value="weekBeforeLastWeekName"
|
onclick="return onCalendarGotoDay(this);"><img rsrc:src="arrow-left.png"/></a>
|
||||||
/></a></span
|
</span>
|
||||||
><span class="week1"><a href="#"
|
<span class="week0"><var:string value="currentWeekName" /></span>
|
||||||
var:date="prevWeekQueryParameters.day"
|
<span class="week1">
|
||||||
onclick="return onCalendarGotoDay(this);"
|
<a href="#"
|
||||||
><var:string value="lastWeekName"
|
var:date="nextWeekQueryParameters.day"
|
||||||
/></a></span
|
onclick="return onCalendarGotoDay(this);"><img rsrc:src="arrow-right.png"/></a>
|
||||||
><span class="week0"><var:string value="currentWeekName" /></span
|
</span>
|
||||||
><span class="week1"><a href="#"
|
<a href="#" id="listCollapse"><img var:class="collapseBtnClass" rsrc:src="collapse.png"/></a>
|
||||||
var:date="nextWeekQueryParameters.day"
|
</span>
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><var:string value="nextWeekName"
|
|
||||||
/></a></span
|
|
||||||
><span class="week2"><a href="#"
|
|
||||||
var:date="weekAfterNextWeekQueryParameters.day"
|
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><var:string value="weekAfterNextWeekName"
|
|
||||||
/></a></span
|
|
||||||
></span>
|
|
||||||
<a href="#"
|
|
||||||
class="rightNavigationArrow"
|
|
||||||
var:date="nextWeekQueryParameters.day"
|
|
||||||
onclick="return onCalendarGotoDay(this);"
|
|
||||||
><img rsrc:src="arrow-right.png"/></a>
|
|
||||||
|
|
||||||
<div id="calendarContent">
|
<div id="calendarContent">
|
||||||
<var:component
|
<var:component
|
||||||
className="UIxCalDayTable"
|
className="UIxCalDayTable"
|
||||||
startDate="startDate"
|
startDate="startDate"
|
||||||
const:CSSClass="weekOverview"
|
const:CSSClass="weekOverview"
|
||||||
const:numberOfDays="7" />
|
const:numberOfDays="7" />
|
||||||
</div>
|
</div>
|
||||||
</container>
|
</container>
|
||||||
|
|
|
@ -1502,18 +1502,18 @@ function unsetCategoryOnNode(contactNode, category) {
|
||||||
function configureDraggables() {
|
function configureDraggables() {
|
||||||
if ($("contactFolders")) {
|
if ($("contactFolders")) {
|
||||||
var rows = jQuery("tr.vcard");
|
var rows = jQuery("tr.vcard");
|
||||||
rows.draggable("destroy");
|
try { rows.draggable("destroy"); } catch (e) {}
|
||||||
rows.draggable({
|
rows.draggable({
|
||||||
helper: function (event) { return '<div id="dragDropVisual"></div>'; },
|
helper: function (event) { return '<div id="dragDropVisual"></div>'; },
|
||||||
start: startDragging,
|
start: startDragging,
|
||||||
drag: whileDragging,
|
drag: whileDragging,
|
||||||
stop: stopDragging,
|
stop: stopDragging,
|
||||||
appendTo: 'body',
|
appendTo: 'body',
|
||||||
cursorAt: { right: 25 },
|
cursorAt: { right: 25 },
|
||||||
scroll: false,
|
scroll: false,
|
||||||
distance: 4,
|
distance: 4,
|
||||||
zIndex: 20
|
zIndex: 20
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@ SOGoTabsController.prototype = {
|
||||||
|
|
||||||
attachToTabsContainer: function STC_attachToTabsContainer(container) {
|
attachToTabsContainer: function STC_attachToTabsContainer(container) {
|
||||||
this.container = container;
|
this.container = container;
|
||||||
|
container.controller = this;
|
||||||
this.onTabMouseDownBound
|
this.onTabMouseDownBound
|
||||||
= this.onTabMouseDown.bindAsEventListener(this);
|
= this.onTabMouseDown.bindAsEventListener(this);
|
||||||
this.onTabClickBound
|
this.onTabClickBound
|
||||||
|
|
|
@ -319,23 +319,23 @@ SPAN.weeksHeader,
|
||||||
SPAN.monthsHeader
|
SPAN.monthsHeader
|
||||||
{ display: block;
|
{ display: block;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
text-align: center;
|
||||||
background-color: #DFDFDF;
|
background-color: #DFDFDF;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
height: 3em;
|
height: 3em;
|
||||||
padding: 2px 1.5em;
|
padding: 2px 0px;
|
||||||
border-bottom: 1px solid #ccc; }
|
border-bottom: 1px solid #ccc; }
|
||||||
|
|
||||||
SPAN.daysHeader SPAN,
|
SPAN.daysHeader SPAN,
|
||||||
SPAN.weeksHeader SPAN,
|
SPAN.weeksHeader SPAN,
|
||||||
SPAN.monthsHeader SPAN
|
SPAN.monthsHeader SPAN
|
||||||
{ display: block;
|
{ font-size: large;
|
||||||
margin: .1em;
|
margin: .1em;
|
||||||
float: left;
|
padding: 6px 12px;
|
||||||
width: 18%;
|
|
||||||
padding: 0px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
line-height: 1.5em;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
vertical-align: top; }
|
vertical-align: top; }
|
||||||
|
|
||||||
|
@ -343,67 +343,51 @@ SPAN.daysHeader A,
|
||||||
SPAN.weeksHeader A,
|
SPAN.weeksHeader A,
|
||||||
SPAN.monthsHeader A
|
SPAN.monthsHeader A
|
||||||
{ border: 1px solid transparent;
|
{ border: 1px solid transparent;
|
||||||
color: #000;
|
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
padding: 0px .5em; }
|
padding: 0px 0.7em; }
|
||||||
|
|
||||||
A.leftNavigationArrow,
|
.day1 A:hover,
|
||||||
A.rightNavigationArrow
|
.week1 A:hover,
|
||||||
{ border: 1px solid transparent;
|
.month1 A:hover
|
||||||
padding: .5em;
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: bottom; }
|
|
||||||
|
|
||||||
A.leftNavigationArrow:hover,
|
|
||||||
A.rightNavigationArrow:hover,
|
|
||||||
SPAN.daysHeader A:hover,
|
|
||||||
SPAN.weeksHeader A:hover,
|
|
||||||
SPAN.monthsHeader A:hover
|
|
||||||
{ border-top: 1px solid #fff;
|
{ border-top: 1px solid #fff;
|
||||||
border-left: 1px solid #fff;
|
border-left: 1px solid #fff;
|
||||||
border-bottom: 1px solid #828482;
|
border-bottom: 1px solid #828482;
|
||||||
border-right: 1px solid #828482; }
|
border-right: 1px solid #828482; }
|
||||||
|
|
||||||
A.leftNavigationArrow:active,
|
.day1 A:active,
|
||||||
A.rightNavigationArrow:active,
|
.week1 A:active,
|
||||||
SPAN.daysHeader A:active,
|
.month1 A:active
|
||||||
SPAN.weeksHeader A:active,
|
|
||||||
SPAN.monthsHeader A:active
|
|
||||||
{ border-top: 1px solid #828482;
|
{ border-top: 1px solid #828482;
|
||||||
border-left: 1px solid #828482;
|
border-left: 1px solid #828482;
|
||||||
border-bottom: 1px solid #fff;
|
border-bottom: 1px solid #fff;
|
||||||
border-right: 1px solid #fff; }
|
border-right: 1px solid #fff; }
|
||||||
|
|
||||||
SPAN.week2, SPAN.month2
|
#listCollapse
|
||||||
{ font-size: small; }
|
|
||||||
|
|
||||||
SPAN.day2, SPAN.week1, SPAN.month1
|
|
||||||
{ font-size: medium; }
|
|
||||||
|
|
||||||
SPAN.day1, SPAN.week0, SPAN.month0
|
|
||||||
{ font-size: large; }
|
|
||||||
|
|
||||||
SPAN.day0
|
|
||||||
{ font-size: x-large; }
|
|
||||||
|
|
||||||
SPAN.day0, SPAN.week0, SPAN.month0
|
|
||||||
{ border-top: 1px solid #909090 !important;
|
|
||||||
border-left: 1px solid #909090 !important;
|
|
||||||
border-bottom: 1px solid #FFFFFF !important;
|
|
||||||
border-right: 1px solid #FFFFFF !important;
|
|
||||||
background-color: #ddd; }
|
|
||||||
|
|
||||||
A.leftNavigationArrow
|
|
||||||
{ position: absolute;
|
{ position: absolute;
|
||||||
display: block;
|
top: .2em;
|
||||||
top: .5em;
|
right: 0;
|
||||||
left: .5em; }
|
margin: 0.5em 1em; }
|
||||||
|
|
||||||
A.rightNavigationArrow
|
#listCollapse img
|
||||||
{ position: absolute;
|
{ position: absolute; }
|
||||||
display: block;
|
|
||||||
top: .5em;
|
#listCollapse img.collapse
|
||||||
right: .5em; }
|
{ clip: rect(0 18px 18px 0);
|
||||||
|
left: 0;
|
||||||
|
top: 0; }
|
||||||
|
|
||||||
|
#listCollapse img.collapse:hover
|
||||||
|
{ clip: rect(0 36px 18px 18px);
|
||||||
|
left: -18px; }
|
||||||
|
|
||||||
|
#listCollapse img.rise
|
||||||
|
{ clip: rect(18px 18px 36px 0);
|
||||||
|
left: 0;
|
||||||
|
top: -18px; }
|
||||||
|
|
||||||
|
#listCollapse img.rise:hover
|
||||||
|
{ clip: rect(18px 36px 36px 18px);
|
||||||
|
left: -18px; }
|
||||||
|
|
||||||
DIV#calendarHeader,
|
DIV#calendarHeader,
|
||||||
DIV#daysView
|
DIV#daysView
|
||||||
|
@ -595,6 +579,14 @@ DIV.daysViewFor7Days#daysView DIV.selectedDay.weekEndDay DIV.clickableHourCell,
|
||||||
DIV.daysViewFor7Days#daysView DIV.selectedDay DIV.clickableHourCell.outOfDay
|
DIV.daysViewFor7Days#daysView DIV.selectedDay DIV.clickableHourCell.outOfDay
|
||||||
{ background-color: #f5dd92; }
|
{ background-color: #f5dd92; }
|
||||||
|
|
||||||
|
.minutes15, .minutes30, .minutes45
|
||||||
|
{ display: block;
|
||||||
|
height: 9px;
|
||||||
|
border-bottom: 1px dotted #eee; }
|
||||||
|
|
||||||
|
.minutes30
|
||||||
|
{ border-bottom: 1px dotted #ccc; }
|
||||||
|
|
||||||
DIV.weekOf4
|
DIV.weekOf4
|
||||||
{ height: 25%; }
|
{ height: 25%; }
|
||||||
|
|
||||||
|
|
|
@ -723,9 +723,9 @@ function onViewEventCallback(http) {
|
||||||
top -= cell.up("DIV.day").scrollTop;
|
top -= cell.up("DIV.day").scrollTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
left = cellPosition[0] + cellDimensions["width"] - parseInt(cellDimensions["width"]/3);
|
left = cellPosition[0] + cellDimensions["width"] + 4;
|
||||||
if (left + divDimensions["width"] > window.width()) {
|
if (left + divDimensions["width"] > window.width()) {
|
||||||
left = cellPosition[0] - divDimensions["width"] + 10;
|
left = cellPosition[0] - divDimensions["width"];
|
||||||
div.removeClassName("left");
|
div.removeClassName("left");
|
||||||
div.addClassName("right");
|
div.addClassName("right");
|
||||||
}
|
}
|
||||||
|
@ -748,14 +748,14 @@ function onViewEventCallback(http) {
|
||||||
para = $(paras[1]);
|
para = $(paras[1]);
|
||||||
if (data["calendar"].length) {
|
if (data["calendar"].length) {
|
||||||
// Remove owner email from calendar's name
|
// Remove owner email from calendar's name
|
||||||
para.down("SPAN", 1).update(data["calendar"].replace(/ \<.*\>/, ""));
|
para.down("SPAN", 1).update(data["calendar"].escapeHTML());
|
||||||
para.show();
|
para.show();
|
||||||
} else
|
} else
|
||||||
para.hide();
|
para.hide();
|
||||||
|
|
||||||
para = $(paras[2]);
|
para = $(paras[2]);
|
||||||
if (data["location"].length) {
|
if (data["location"].length) {
|
||||||
para.down("SPAN", 1).update(data["location"]);
|
para.down("SPAN", 1).update(data["location"].escapeHTML());
|
||||||
para.show();
|
para.show();
|
||||||
} else
|
} else
|
||||||
para.hide();
|
para.hide();
|
||||||
|
@ -3205,6 +3205,11 @@ function deletePersonalCalendarCallback(http) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function configureLists() {
|
function configureLists() {
|
||||||
|
// Move calendar view if lists are collapsed
|
||||||
|
if (!$("schedulerTabs").visible()) {
|
||||||
|
$('calendarView').setStyle({ top: '0' }).show();
|
||||||
|
}
|
||||||
|
|
||||||
// TASK LIST
|
// TASK LIST
|
||||||
var list = $("tasksList");
|
var list = $("tasksList");
|
||||||
list.multiselect = true;
|
list.multiselect = true;
|
||||||
|
@ -3292,6 +3297,37 @@ function drawNowLine() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onListCollapse(event, element) {
|
||||||
|
var img = element.select('img').first();
|
||||||
|
var tabs = $("schedulerTabs");
|
||||||
|
var handle = $("rightDragHandle");
|
||||||
|
var view = jQuery("#calendarView");
|
||||||
|
var state = 'collapse';
|
||||||
|
|
||||||
|
if (tabs.visible()) {
|
||||||
|
img.removeClassName('collapse').addClassName('rise');
|
||||||
|
handle.hide();
|
||||||
|
view.animate({ top: '0' }, 200, function() {
|
||||||
|
tabs.hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state = 'rise';
|
||||||
|
img.removeClassName('rise').addClassName('collapse');
|
||||||
|
tabs.show();
|
||||||
|
tabs.controller.onWindowResize();
|
||||||
|
view.animate({ top: handle.getStyle('top') }, 200, function() {
|
||||||
|
handle.show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var url = ApplicationBaseURL + "saveListState";
|
||||||
|
var params = "state=" + state;
|
||||||
|
triggerAjaxRequest(url, null, null, params,
|
||||||
|
{ "Content-type": "application/x-www-form-urlencoded" });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function onDocumentKeydown(event) {
|
function onDocumentKeydown(event) {
|
||||||
var target = Event.element(event);
|
var target = Event.element(event);
|
||||||
if (target.tagName != "INPUT") {
|
if (target.tagName != "INPUT") {
|
||||||
|
@ -3367,7 +3403,7 @@ function initScheduler() {
|
||||||
// Calendar import form
|
// Calendar import form
|
||||||
$("uploadCancel").observe("click", hideCalendarImport);
|
$("uploadCancel").observe("click", hideCalendarImport);
|
||||||
$("uploadOK").observe("click", hideImportResults);
|
$("uploadOK").observe("click", hideImportResults);
|
||||||
|
$("calendarView").on("click", "#listCollapse", onListCollapse);
|
||||||
Event.observe(document, "keydown", onDocumentKeydown);
|
Event.observe(document, "keydown", onDocumentKeydown);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1007,6 +1007,10 @@ SOGoEventDragController.prototype = {
|
||||||
onDragStart: function SEDC_onDragStart(event) {
|
onDragStart: function SEDC_onDragStart(event) {
|
||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
if (eventIsLeftClick(event) && (target.nodeType == 1)) {
|
if (eventIsLeftClick(event) && (target.nodeType == 1)) {
|
||||||
|
if (target.hasClassName("minutes15") ||
|
||||||
|
target.hasClassName("minutes30") ||
|
||||||
|
target.hasClassName("minutes45"))
|
||||||
|
target = target.parentNode;
|
||||||
if ((!this.eventCells
|
if ((!this.eventCells
|
||||||
&& (target.hasClassName("clickableHourCell")
|
&& (target.hasClassName("clickableHourCell")
|
||||||
|| target.hasClassName("day"))
|
|| target.hasClassName("day"))
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 963 B |
|
@ -60,7 +60,6 @@ LABEL
|
||||||
|
|
||||||
H6
|
H6
|
||||||
{ font-size: 11px;
|
{ font-size: 11px;
|
||||||
color: #9ABCD8;
|
|
||||||
color: #627e9c;
|
color: #627e9c;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
margin: 10px 0px 5px 0px;
|
margin: 10px 0px 5px 0px;
|
||||||
|
@ -1168,6 +1167,7 @@ span.cke_skin_kama
|
||||||
DIV#linkBanner,
|
DIV#linkBanner,
|
||||||
DIV#toolbar,
|
DIV#toolbar,
|
||||||
DIV.menu,
|
DIV.menu,
|
||||||
|
DIV.filterPanel,
|
||||||
DIV.tabsContainer
|
DIV.tabsContainer
|
||||||
{ display: none; }
|
{ display: none; }
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue