From fb8ba8f3b9ee1f669aae56f03549a9fb8f4c3aff Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 15 Mar 2017 10:38:20 -0400 Subject: [PATCH 01/45] (fix) remove old code conflicting with #3905 --- SoObjects/Appointments/SOGoCalendarComponent.m | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/SoObjects/Appointments/SOGoCalendarComponent.m b/SoObjects/Appointments/SOGoCalendarComponent.m index 3fd7e3360..ecf6b1be5 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.m +++ b/SoObjects/Appointments/SOGoCalendarComponent.m @@ -579,17 +579,6 @@ [allAttendees addObject: person]; } } - else - { - // We remove any attendees matching the organizer. Apple iCal will do that when - // you invite someone. It'll add the organizer in the attendee list, which will - // confuse itself! - if ([[currentAttendee rfc822Email] caseInsensitiveCompare: organizerEmail] == NSOrderedSame) - { - [allAttendees removeObject: currentAttendee]; - eventWasModified = YES; - } - } j++; } // while (currentAttendee ... From 3155ecf3251e5662f1dd87f2f885be1c08521431 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Sat, 18 Mar 2017 15:34:56 -0400 Subject: [PATCH 02/45] (fix) fix opacity in freebusy over EAS --- ActiveSync/iCalEvent+ActiveSync.m | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ActiveSync/iCalEvent+ActiveSync.m b/ActiveSync/iCalEvent+ActiveSync.m index ffdaac244..2f3f7bee3 100644 --- a/ActiveSync/iCalEvent+ActiveSync.m +++ b/ActiveSync/iCalEvent+ActiveSync.m @@ -238,9 +238,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } else { - // If it's a normal event (ie, with no organizer/attendee) or we are the organizer to an event - // invitation, we set the busy status to 2 (Busy) - [s appendFormat: @"%d", 2]; + // If it's a normal event (i.e. with no organizer/attendee) or we are the organizer of an event + // invitation, we set the busy status depending on TRANSP. + [s appendFormat: @"%d", (([self isOpaque]) ? 2 : 0)]; } [s appendFormat: @"%d", meetingStatus]; @@ -481,7 +481,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // if ((o = [theValues objectForKey: @"BusyStatus"])) { - [o intValue]; + if ([o boolValue]) + [self setTransparency: @"OPAQUE"]; + else + [self setTransparency: @"TRANSPARENT"]; } // From a7740dc5eddc065ba1d5904469a218431d36ee58 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Sat, 18 Mar 2017 15:37:15 -0400 Subject: [PATCH 03/45] Updated NEWS --- NEWS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NEWS b/NEWS index eab5af9db..e70a3f917 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +2.3.21 (2017-XX-XX) +------------------- + +Bug fixes + - [eas] fixed opacity in EAS freebusy (#4033) + 2.3.20 (2017-03-10) ------------------- From 4a3f17506cdb3958f4e0f688be7f911688bfdc62 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Sun, 29 Jan 2017 18:07:59 -0500 Subject: [PATCH 04/45] Remove debugging output --- SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m b/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m index 929fa5026..f6ba47f37 100644 --- a/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalWeeklyRecurrenceCalculator.m @@ -71,7 +71,7 @@ iCalByDayMask *dayMask; BOOL hasRepeatCount; - [self logWithFormat: @"Weekly %@", rrule]; + // [self logWithFormat: @"Weekly %@", rrule]; firStart = [firstRange startDate]; startDate = [_r startDate]; @@ -187,7 +187,7 @@ if ([_r doesIntersectWithDateRange: r]) { [ranges addObject: r]; - [self logWithFormat: @"Add range %@ - %@", [r startDate], [r endDate]]; + // [self logWithFormat: @"Add range %@ - %@", [r startDate], [r endDate]]; } } } From 28ab0015a98dc7e22b1b19c35b884b1c8d05cd1a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 24 Mar 2017 11:11:10 -0400 Subject: [PATCH 05/45] (fix) more fixes for #3905 --- SoObjects/Appointments/SOGoAppointmentObject.m | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 23a70d10f..8baeefee3 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -1808,16 +1808,14 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent uid = [[event organizer] uidInContext: context]; if (uid) { + iCalPerson *attendee, *organizer; NSDictionary *defaultIdentity; NSArray *allAttendees; - iCalPerson *attendee; - SOGoUser *organizer; - - organizer = [SOGoUser userWithLogin: uid]; - defaultIdentity = [organizer defaultIdentity]; - [[event organizer] setCn: [defaultIdentity objectForKey: @"fullName"]]; - [[event organizer] setEmail: [defaultIdentity objectForKey: @"email"]]; + defaultIdentity = [[SOGoUser userWithLogin: uid] defaultIdentity]; + organizer = [[event organizer] copy]; + [organizer setCn: [defaultIdentity objectForKey: @"fullName"]]; + [organizer setEmail: [defaultIdentity objectForKey: @"email"]]; // We now check if one of the attendee is also the organizer. If so, // we remove it. See bug #3905 (https://sogo.nu/bugs/view.php?id=3905) @@ -1830,6 +1828,10 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent if ([organizer hasEmail: [attendee rfc822Email]]) [event removeFromAttendees: attendee]; } + + // We reset the organizer + [event setOrganizer: organizer]; + RELEASE(organizer); } } } From 9995ccc29fb4488492b784106eb83a59fca10686 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 24 Mar 2017 11:37:54 -0400 Subject: [PATCH 06/45] (fix) more fixes for #3905 --- SoObjects/Appointments/SOGoAppointmentObject.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 8baeefee3..e2145370d 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -1810,9 +1810,11 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent { iCalPerson *attendee, *organizer; NSDictionary *defaultIdentity; + SOGoUser *organizerUser; NSArray *allAttendees; - defaultIdentity = [[SOGoUser userWithLogin: uid] defaultIdentity]; + organizerUser = [SOGoUser userWithLogin: uid]; + defaultIdentity = [organizerUser defaultIdentity]; organizer = [[event organizer] copy]; [organizer setCn: [defaultIdentity objectForKey: @"fullName"]]; [organizer setEmail: [defaultIdentity objectForKey: @"email"]]; @@ -1825,7 +1827,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent for (j = [allAttendees count]-1; j >= 0; j--) { attendee = [allAttendees objectAtIndex: j]; - if ([organizer hasEmail: [attendee rfc822Email]]) + if ([organizerUser hasEmail: [attendee rfc822Email]]) [event removeFromAttendees: attendee]; } From 43dc7dee8748e97819c950e54d61932eb4f43b39 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 31 Mar 2017 15:33:19 -0400 Subject: [PATCH 07/45] (fix) calendar component move across collections (fixes #4116) --- NEWS | 1 + .../Appointments/SOGoCalendarComponent.m | 76 +++++++++---------- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/NEWS b/NEWS index e70a3f917..7e3404077 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ ------------------- Bug fixes + - [core] fixed calendar component move across collections (#4116) - [eas] fixed opacity in EAS freebusy (#4033) 2.3.20 (2017-03-10) diff --git a/SoObjects/Appointments/SOGoCalendarComponent.m b/SoObjects/Appointments/SOGoCalendarComponent.m index ecf6b1be5..535120c83 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.m +++ b/SoObjects/Appointments/SOGoCalendarComponent.m @@ -1197,6 +1197,36 @@ return uids; } +- (NSException *) _copyComponent: (iCalCalendar *) calendar + toFolder: (SOGoGCSFolder *) newFolder + updateUID: (BOOL) updateUID +{ + NSString *newUID; + SOGoCalendarComponent *newComponent; + + if (updateUID) + { + NSArray *elements; + unsigned int count, max; + + newUID = [self globallyUniqueObjectId]; + elements = [calendar allObjects]; + max = [elements count]; + for (count = 0; count < max; count++) + [[elements objectAtIndex: count] setUid: newUID]; + } + else + { + newUID = [[[calendar allObjects] objectAtIndex: 0] uid]; + } + + newComponent = [[self class] objectWithName: + [NSString stringWithFormat: @"%@.ics", newUID] + inContainer: newFolder]; + + return [newComponent saveCalendar: calendar]; +} + - (NSException *) copyToFolder: (SOGoGCSFolder *) newFolder { return [self copyComponent: [self calendar: NO secure: NO] @@ -1206,51 +1236,21 @@ - (NSException *) copyComponent: (iCalCalendar *) calendar toFolder: (SOGoGCSFolder *) newFolder { - NSArray *elements; - NSString *newUID; - unsigned int count, max; - SOGoCalendarComponent *newComponent; - - newUID = [self globallyUniqueObjectId]; - elements = [calendar allObjects]; - max = [elements count]; - for (count = 0; count < max; count++) - [[elements objectAtIndex: count] setUid: newUID]; - - newComponent = [[self class] objectWithName: - [NSString stringWithFormat: @"%@.ics", newUID] - inContainer: newFolder]; - - return [newComponent saveCalendar: calendar]; + return [self _copyComponent: calendar + toFolder: newFolder + updateUID: YES]; } - (NSException *) moveToFolder: (SOGoGCSFolder *) newFolder { - SOGoCalendarComponent *newComponent; NSException *ex; - id o; - // Lookup to see if the event exists in the target calendar. During a MOVE, we do - // keep the ID of the event intact. - o = [newFolder lookupName: [self nameInContainer] - inContext: context - acquire: NO]; + ex = [self _copyComponent: [self calendar: NO secure: NO] + toFolder: newFolder + updateUID: NO]; - if ([o isKindOfClass: [NSException class]]) - { - newComponent = [[self class] objectWithName: [self nameInContainer] - inContainer: newFolder]; - - ex = [newComponent saveCalendar: [self calendar: NO secure: NO]]; - - if (!ex) - ex = [self delete]; - } - else - { - ex = [NSException exceptionWithHTTPStatus: 409 - reason: @"Target exists - MOVE disallowed."]; - } + if (!ex) + ex = [self delete]; return ex; } From d9d4808d297138dc59cb5d8821819186027d0e65 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 6 Apr 2017 11:02:59 -0400 Subject: [PATCH 08/45] (fix) protect ourself from broken SOPE/SOGo installs (fixes #4117) --- SoObjects/SOGo/SOGoMailer.m | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SoObjects/SOGo/SOGoMailer.m b/SoObjects/SOGo/SOGoMailer.m index 089ee2e9b..6bee54102 100644 --- a/SoObjects/SOGo/SOGoMailer.m +++ b/SoObjects/SOGo/SOGoMailer.m @@ -369,9 +369,12 @@ // It does not, let's search in the entire headers if (r1.location == NSNotFound) - r1 = [cleaned_message rangeOfCString: "\r\nBcc: " - options: 0 - range: NSMakeRange(0,limit)]; + { + r1 = [cleaned_message rangeOfCString: "\r\nBcc: " + options: 0 + range: NSMakeRange(0,limit)]; + r1.location += 2; + } if (r1.location != NSNotFound) { From 2e8c6680fe8e80bb58eb3111e74125507c4b647e Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 6 Apr 2017 14:24:25 -0400 Subject: [PATCH 09/45] (fix) check if found before changing location --- SoObjects/SOGo/SOGoMailer.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SoObjects/SOGo/SOGoMailer.m b/SoObjects/SOGo/SOGoMailer.m index 6bee54102..95a06d874 100644 --- a/SoObjects/SOGo/SOGoMailer.m +++ b/SoObjects/SOGo/SOGoMailer.m @@ -373,7 +373,8 @@ r1 = [cleaned_message rangeOfCString: "\r\nBcc: " options: 0 range: NSMakeRange(0,limit)]; - r1.location += 2; + if (r1.location != NSNotFound) + r1.location += 2; } if (r1.location != NSNotFound) From 8b307d8ac6f4647e9734057174e5c71f9ea5d437 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 7 Apr 2017 13:43:18 -0400 Subject: [PATCH 10/45] (fix) correctly set flags when ReplaceMime is set (fixes #4133) --- ActiveSync/SOGoActiveSyncDispatcher.m | 40 ++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index f56e51fb9..fc8a143a8 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -3532,10 +3532,14 @@ void handle_eas_terminate(int signum) { NSString *folderId, *itemId, *realCollectionId; SOGoMicrosoftActiveSyncFolderType folderType; + SOGoMailAccounts *accountsFolder; + SOGoMailFolder *currentFolder; + SOGoUserFolder *userFolder; + SOGoMailObject *mailObject; SOGoUserDefaults *ud; BOOL htmlComposition, isHTML; - id value; + id value, currentCollection; isHTML = NO; ud = [[context activeUser] userDefaults]; @@ -3561,23 +3565,31 @@ void handle_eas_terminate(int signum) value = [theDocumentElement getElementsByTagName: @"ReplaceMime"]; + // We fetch the mail object from the server + userFolder = [[context activeUser] homeFolderInContext: context]; + accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO]; + currentFolder = [accountsFolder lookupName: @"0" inContext: context acquire: NO]; + + currentCollection = [currentFolder lookupName: [NSString stringWithFormat: @"folder%@", realCollectionId] + inContext: context + acquire: NO]; + + mailObject = [currentCollection lookupName: itemId inContext: context acquire: NO]; + // ReplaceMime IS specified so we must NOT use the server copy // but rather take the data as-is from the client. if ([value count]) { - [self processSendMail: theDocumentElement - inResponse: theResponse]; + [self processSendMail: theDocumentElement inResponse: theResponse]; + if (!isSmartForward) + [mailObject addFlags: @"Answered"]; + else + [mailObject addFlags: @"$Forwarded"]; return; } if (folderType == ActiveSyncMailFolder) { - SOGoMailAccounts *accountsFolder; - SOGoMailFolder *currentFolder; - SOGoUserFolder *userFolder; - SOGoMailObject *mailObject; - id currentCollection; - NGMimeMessage *messageFromSmartForward, *messageToSend; NGMimeMessageParser *parser; NSData *data; @@ -3596,16 +3608,6 @@ void handle_eas_terminate(int signum) int a; - userFolder = [[context activeUser] homeFolderInContext: context]; - accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO]; - currentFolder = [accountsFolder lookupName: @"0" inContext: context acquire: NO]; - - currentCollection = [currentFolder lookupName: [NSString stringWithFormat: @"folder%@", realCollectionId] - inContext: context - acquire: NO]; - - mailObject = [currentCollection lookupName: itemId inContext: context acquire: NO]; - parser = [[NGMimeMessageParser alloc] init]; data = [[[[(id)[theDocumentElement getElementsByTagName: @"MIME"] lastObject] textValue] stringByDecodingBase64] dataUsingEncoding: NSUTF8StringEncoding]; messageFromSmartForward = [parser parsePartFromData: data]; From b4f5430ac57a61bad03bb98f264e6e48590b4b2c Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 7 Apr 2017 13:45:32 -0400 Subject: [PATCH 11/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index 7e3404077..cf6f95760 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ Bug fixes - [core] fixed calendar component move across collections (#4116) - [eas] fixed opacity in EAS freebusy (#4033) + - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) 2.3.20 (2017-03-10) ------------------- From be527031bc4724e1718981de69f63c400b28ea08 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 11 Apr 2017 10:13:56 -0400 Subject: [PATCH 12/45] (fix) remove over EAS alarms if we don't want them (fixes #4059) --- ActiveSync/SOGoActiveSyncDispatcher+Sync.m | 27 +++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m index cb0c89d32..a6f653f4b 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m +++ b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m @@ -78,11 +78,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #import #import +#import + #import #import #import #import #import +#import #import #import @@ -264,7 +267,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. return nameInCache; } +- (void) _removeAllAlarmsFromCalendar: (iCalCalendar *) theCalendar +{ + NSArray *allComponents; + iCalEntityObject *currentComponent; + NSUInteger count, max; + if (debugOn) + [self logWithFormat: @"EAS - Remove all alarms"]; + + allComponents = [theCalendar allObjects]; + + max = [allComponents count]; + for (count = 0; count < max; count++) + { + currentComponent = [allComponents objectAtIndex: count]; + if ([currentComponent isKindOfClass: [iCalEvent class]] || + [currentComponent isKindOfClass: [iCalToDo class]]) + [currentComponent removeAllAlarms]; + } +} // // @@ -1239,6 +1261,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. d = [NSCalendarDate distantFuture]; [dateCache setObject: d forKey: uid]; + + if (!([theCollection showCalendarAlarms])) + [self _removeAllAlarmsFromCalendar: [componentObject parent]]; } if (updated) @@ -1599,7 +1624,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. [s appendString: [mailObject activeSyncRepresentationInContext: context]]; [s appendString: @""]; [s appendString: @""]; - + [syncCache setObject: [aCacheObject sequence] forKey: [aCacheObject uid]]; [dateCache setObject: [NSCalendarDate date] forKey: [aCacheObject uid]]; From b8ae9afbd220c9dad6803e89b0fd0da22b446d8d Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 11 Apr 2017 10:15:32 -0400 Subject: [PATCH 13/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index cf6f95760..2ed5c6cd2 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Bug fixes - [core] fixed calendar component move across collections (#4116) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) + - [eas] remove alarms over EAS if we don't want them (#4059) 2.3.20 (2017-03-10) ------------------- From 34e22dad42587a5397d5f4c9b9e46d7359211985 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 12 Apr 2017 12:59:53 -0400 Subject: [PATCH 14/45] (fix) set RSVP when sending events invite --- ActiveSync/iCalEvent+ActiveSync.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ActiveSync/iCalEvent+ActiveSync.m b/ActiveSync/iCalEvent+ActiveSync.m index 2f3f7bee3..a9988caed 100644 --- a/ActiveSync/iCalEvent+ActiveSync.m +++ b/ActiveSync/iCalEvent+ActiveSync.m @@ -865,7 +865,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. person = [iCalPerson elementWithTag: @"attendee"]; [person setCn: [attendee objectForKey: @"Attendee_Name"]]; [person setEmail: [attendee objectForKey: @"Attendee_Email"]]; - + status = [[attendee objectForKey: @"Attendee_Status"] intValue]; switch (status) @@ -882,7 +882,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. case 0: case 5: default: - [person setPartStat: @"NEEDS-ACTION"]; + { + [person setPartStat: @"NEEDS-ACTION"]; + [person setRsvp: @"TRUE"]; + } break; } From 7a418582c4f2ac4dc094724662c43c201c83a469 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 12 Apr 2017 13:04:29 -0400 Subject: [PATCH 15/45] (fix) avoid sending IMIP messages for all EAS clients (fixes #4022) --- SoObjects/Appointments/SOGoCalendarComponent.m | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/SoObjects/Appointments/SOGoCalendarComponent.m b/SoObjects/Appointments/SOGoCalendarComponent.m index 535120c83..9c63ec46c 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.m +++ b/SoObjects/Appointments/SOGoCalendarComponent.m @@ -788,6 +788,15 @@ if ([object firstChildWithTag: @"X-SOGo-Send-Appointment-Notifications"]) return; + // We never send IMIP inivitaton/deletion/update when the "initiator" is an EAS client. + // That is because Outlook, iOS and Android will always issue a SendMail command + // with the meeting details (ie., IMIP message with METHOD:REQUEST) so there's + // no need to send it twice. Moreover, Outlook users can also choose to NOT send + // the IMIP messsage at all, so SOGo won't send one without user's consent + if ([[[context request] requestHandlerKey] isEqualToString: @"Microsoft-Server-ActiveSync"]) + return; + + ownerUser = [SOGoUser userWithLogin: owner]; dd = [ownerUser domainDefaults]; if ([dd appointmentSendEMailNotifications] && [object isStillRelevant]) From f28b7f2f8cc91dc69b3976f5311b18bd9e51bbd5 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 12 Apr 2017 13:05:06 -0400 Subject: [PATCH 16/45] Updated NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 2ed5c6cd2..50dcb5b40 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ Bug fixes - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) + - [eas] correctly set RSVP on event invitations + - [eas] avoid sending IMIP request/update messages for all EAS clients (#4022) 2.3.20 (2017-03-10) ------------------- From 43385ce5bf8a3dc8371289c6acd600c57fa1fa06 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 12 Apr 2017 16:13:40 -0400 Subject: [PATCH 17/45] (fix) enhance display of all-day invitations (fixes #4145) --- .../English.lproj/Localizable.strings | 2 ++ .../Appointments/SOGoAptMailNotification.m | 14 ++++++++++++++ UI/MailPartViewers/UIxMailPartICalViewer.m | 18 ++++++++---------- .../Appointments/SOGoAptMailInvitation.wox | 18 ++++++++++++++---- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/SoObjects/Appointments/English.lproj/Localizable.strings b/SoObjects/Appointments/English.lproj/Localizable.strings index f25897d4a..84f5e5d7d 100644 --- a/SoObjects/Appointments/English.lproj/Localizable.strings +++ b/SoObjects/Appointments/English.lproj/Localizable.strings @@ -18,6 +18,8 @@ vtodo_class2 = "(Confidential task)"; "calendar_label" = "Calendar"; "startDate_label" = "Start"; "endDate_label" = "End"; +"time_label" = "Time"; +"to_label" = "to"; "due_label" = "Due Date"; "location_label" = "Location"; "summary_label" = "Summary"; diff --git a/SoObjects/Appointments/SOGoAptMailNotification.m b/SoObjects/Appointments/SOGoAptMailNotification.m index 4c26191ae..c57c89adb 100644 --- a/SoObjects/Appointments/SOGoAptMailNotification.m +++ b/SoObjects/Appointments/SOGoAptMailNotification.m @@ -27,6 +27,7 @@ #import #import #import +#import #import #import #import @@ -186,6 +187,19 @@ return sentByText; } +- (NSTimeInterval) duration +{ + return [[self newEndDate] timeIntervalSinceDate:[self newStartDate]]; +} + +- (BOOL) isEndDateOnSameDay +{ + if ([[self apt] isAllDay]) + return ([self duration] <= 86400); + + return [[self newStartDate] isDateOnSameDay: [self newEndDate]]; +} + - (NSString *) formattedAptStartDate { NSString *s; diff --git a/UI/MailPartViewers/UIxMailPartICalViewer.m b/UI/MailPartViewers/UIxMailPartICalViewer.m index b54f452b5..98c8cedfd 100644 --- a/UI/MailPartViewers/UIxMailPartICalViewer.m +++ b/UI/MailPartViewers/UIxMailPartICalViewer.m @@ -221,21 +221,19 @@ return [[self dateFormatter] formattedTime: [self endCalendarDate]]; } -- (BOOL) isEndDateOnSameDay -{ - NSCalendarDate *aDate; - if ([[self inEvent] isAllDay]) - aDate = [[self endCalendarDate] dateByAddingYears:0 months:0 days:0 hours:0 minutes:0 seconds:-1]; - else - aDate = [self endCalendarDate]; - return [[self startCalendarDate] isDateOnSameDay: aDate]; -} - - (NSTimeInterval) duration { return [[self endCalendarDate] timeIntervalSinceDate:[self startCalendarDate]]; } +- (BOOL) isEndDateOnSameDay +{ + if ([[self inEvent] isAllDay]) + return [self duration] <= 86400; + + return [[self startCalendarDate] isDateOnSameDay: [self endCalendarDate]]; +} + /* calendar folder support */ - (SOGoAppointmentFolder *) calendarFolder diff --git a/UI/Templates/Appointments/SOGoAptMailInvitation.wox b/UI/Templates/Appointments/SOGoAptMailInvitation.wox index 1abc71423..a389986c1 100644 --- a/UI/Templates/Appointments/SOGoAptMailInvitation.wox +++ b/UI/Templates/Appointments/SOGoAptMailInvitation.wox @@ -23,10 +23,19 @@ th, td { font-family: Lucida Grande, Bitstream VeraSans, Tahoma, sans-serif; fon > - + + + - + + + + + + + + - @@ -36,7 +45,8 @@ th, td { font-family: Lucida Grande, Bitstream VeraSans, Tahoma, sans-serif; fon - - + + From 8fc55833d299b8d8194cc75319f1548a814894b2 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 12 Apr 2017 16:37:39 -0400 Subject: [PATCH 18/45] Updated NEWS --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 50dcb5b40..d6bd35970 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ 2.3.21 (2017-XX-XX) ------------------- +Enhancements + - [core] improved event initation for all day events (#4145) + Bug fixes - [core] fixed calendar component move across collections (#4116) - [eas] fixed opacity in EAS freebusy (#4033) From 9c1e481d54d1911d0ff393e0340671ce9d069159 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 20 Apr 2017 14:29:15 -0400 Subject: [PATCH 19/45] (fix) handle properly windows-1255 charset (fixes #4124) --- UI/MailPartViewers/UIxMailPartHTMLViewer.m | 1 + 1 file changed, 1 insertion(+) diff --git a/UI/MailPartViewers/UIxMailPartHTMLViewer.m b/UI/MailPartViewers/UIxMailPartHTMLViewer.m index e0cdb6193..7250c5ebe 100644 --- a/UI/MailPartViewers/UIxMailPartHTMLViewer.m +++ b/UI/MailPartViewers/UIxMailPartHTMLViewer.m @@ -84,6 +84,7 @@ _xmlCharsetForCharset (NSString *charset) { @"koi8-r", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger koi8-r -> utf8 conversion { @"windows-1250", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1250 -> utf8 conversion { @"windows-1251", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1251 -> utf8 conversion + { @"windows-1255", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1251 -> utf8 conversion { @"windows-1257", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1257 -> utf8 conversion { @"gb2312", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger gb2312 -> utf8 conversion { @"gbk", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger gb2312 -> utf8 conversion From 341885542bf2743be39a5edc3f27a3402644703a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 20 Apr 2017 14:30:54 -0400 Subject: [PATCH 20/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index d6bd35970..de1f65c09 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ Enhancements Bug fixes - [core] fixed calendar component move across collections (#4116) + - [core] handle properly mails using windows-1255 charset (#4124) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) From e6baba445f2035ae17ec2918b289fbd6ad751dd9 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 20 Apr 2017 14:35:44 -0400 Subject: [PATCH 21/45] Updated comment --- UI/MailPartViewers/UIxMailPartHTMLViewer.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/MailPartViewers/UIxMailPartHTMLViewer.m b/UI/MailPartViewers/UIxMailPartHTMLViewer.m index 7250c5ebe..432d51eb9 100644 --- a/UI/MailPartViewers/UIxMailPartHTMLViewer.m +++ b/UI/MailPartViewers/UIxMailPartHTMLViewer.m @@ -84,7 +84,7 @@ _xmlCharsetForCharset (NSString *charset) { @"koi8-r", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger koi8-r -> utf8 conversion { @"windows-1250", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1250 -> utf8 conversion { @"windows-1251", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1251 -> utf8 conversion - { @"windows-1255", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1251 -> utf8 conversion + { @"windows-1255", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1255 -> utf8 conversion { @"windows-1257", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger windows-1257 -> utf8 conversion { @"gb2312", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger gb2312 -> utf8 conversion { @"gbk", XML_CHAR_ENCODING_ERROR}, // unsupported, will trigger gb2312 -> utf8 conversion From 89400fe980515687a658e4f0a88885d9ba323df8 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 21 Apr 2017 15:29:34 -0400 Subject: [PATCH 22/45] (feat) added photo support in GAL search ops --- ActiveSync/SOGoActiveSyncDispatcher.m | 62 +++++++++++++++++--- Documentation/SOGoInstallationGuide.asciidoc | 6 ++ SoObjects/SOGo/SOGoSystemDefaults.h | 1 + SoObjects/SOGo/SOGoSystemDefaults.m | 15 +++++ 4 files changed, 77 insertions(+), 7 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index fc8a143a8..0094f8210 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -2785,7 +2785,7 @@ void handle_eas_terminate(int signum) inResponse: (WOResponse *) theResponse { SOGoContactSourceFolder *currentFolder; - NSArray *allKeys, *allContacts, *mails; + NSArray *allKeys, *allContacts, *mails, *a; NSDictionary *systemSources, *contact; SOGoContactFolders *contactFolders; NSString *current_mail, *query; @@ -2795,7 +2795,10 @@ void handle_eas_terminate(int signum) NSData *d; id o; - int i, j, total; + int i, j, t, v, total, minResult, maxResult, maxSize, maxPictures; + BOOL withPhoto; + + withPhoto = NO; query = [[(id)[theDocumentElement getElementsByTagName: @"Query"] lastObject] textValue]; @@ -2804,6 +2807,33 @@ void handle_eas_terminate(int signum) systemSources = [contactFolders systemSources]; allKeys = [systemSources allKeys]; + // We check for the maximum number of results to return. + a = [[[(id)[theDocumentElement getElementsByTagName: @"Range"] lastObject] textValue] componentsSeparatedByString: @"-"]; + minResult = [[a objectAtIndex: 0] intValue]; + maxResult = [[a objectAtIndex: 1] intValue]; + + if (maxResult == 0) + maxResult = 99; + + if ((o = [(id)[[(id)[theDocumentElement getElementsByTagName: @"Options"] lastObject] getElementsByTagName: @"Picture"] lastObject])) + { + withPhoto = YES; + + // We check for a MaxSize, default to 102400. + maxSize = [[[(id)[o getElementsByTagName: @"MaxSize"] lastObject] textValue] intValue]; + + // We check if we must overwrite the maxSize with a system preference. This can be useful + // if we don't want to have pictures in the response. + if ((v = [[SOGoSystemDefaults sharedSystemDefaults] maximumPictureSize])) + maxSize = v; + + // We check for a MaxPictures, default to 99. + maxPictures = [[[(id)[o getElementsByTagName: @"MaxPictures"] lastObject] textValue] intValue]; + + if (maxPictures == 0) + maxPictures = 99; + } + s = [NSMutableString string]; [s appendString: @""]; @@ -2825,7 +2855,7 @@ void handle_eas_terminate(int signum) ordering: NSOrderedAscending inDomain: [[context activeUser] domain]]; - for (j = 0; j < [allContacts count]; j++) + for (j = minResult; (j < [allContacts count] && j < maxResult) ; j++) { contact = [allContacts objectAtIndex: j]; @@ -2843,9 +2873,9 @@ void handle_eas_terminate(int signum) else mails = [NSArray arrayWithObjects: o ? o : @"", nil]; - for (total = 0; total < [mails count]; total++) + for (t = 0; t < [mails count]; t++) { - current_mail = [mails objectAtIndex: total]; + current_mail = [mails objectAtIndex: t]; [s appendString: @""]; [s appendString: @""]; @@ -2863,7 +2893,7 @@ void handle_eas_terminate(int signum) [s appendFormat: @"%@", [o activeSyncRepresentationInContext: context]]; if ([current_mail length] > 0) - [s appendFormat: @"%@", current_mail]; + [s appendFormat: @"%@", [current_mail activeSyncRepresentationInContext: context]]; if ((o = [contact objectForKey: @"telephonenumber"])) [s appendFormat: @"%@", [o activeSyncRepresentationInContext: context]]; @@ -2876,9 +2906,27 @@ void handle_eas_terminate(int signum) if ((o = [contact objectForKey: @"o"])) [s appendFormat: @"%@", [o activeSyncRepresentationInContext: context]]; - + + if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 14.1 && withPhoto) + { + o = [contact objectForKey: @"photo"]; + if (o && [o length] <= maxSize && total < maxPictures) + { + [s appendString: @"1"]; + [s appendString: [o activeSyncRepresentationInContext: context]]; + [s appendString: @""]; + } + else if (!o) + [s appendString: @"173"]; + else if ([o length] > maxSize) + [s appendString: @"174"]; + else if (total >= maxPictures) + [s appendString: @"175"]; + } + [s appendString: @""]; [s appendString: @""]; + total++; } } } diff --git a/Documentation/SOGoInstallationGuide.asciidoc b/Documentation/SOGoInstallationGuide.asciidoc index 4f32b1d1f..7e8e11aa0 100644 --- a/Documentation/SOGoInstallationGuide.asciidoc +++ b/Documentation/SOGoInstallationGuide.asciidoc @@ -2545,6 +2545,12 @@ have unexpected behaviour with various ActiveSync clients. EAS command. Defaults to `NO`, which means no logging is performed. + +|S |SOGoMaximumPictureSize +|Parameter used to overwrite the maximum number of bytes returned in the picture +for EAS Search operations in the GAL. + +If not set, it defaults to `102400` bytes, or 100 KB. |======================================================================= Please be aware of the following limitations: diff --git a/SoObjects/SOGo/SOGoSystemDefaults.h b/SoObjects/SOGo/SOGoSystemDefaults.h index d6a2f7f22..5a9c8dff3 100644 --- a/SoObjects/SOGo/SOGoSystemDefaults.h +++ b/SoObjects/SOGo/SOGoSystemDefaults.h @@ -109,6 +109,7 @@ - (int) internalSyncInterval; - (int) maximumSyncWindowSize; - (int) maximumSyncResponseSize; +- (int) maximumPictureSize; @end diff --git a/SoObjects/SOGo/SOGoSystemDefaults.m b/SoObjects/SOGo/SOGoSystemDefaults.m index 5fee77b54..161083553 100644 --- a/SoObjects/SOGo/SOGoSystemDefaults.m +++ b/SoObjects/SOGo/SOGoSystemDefaults.m @@ -699,4 +699,19 @@ _injectConfigurationFromFile (NSMutableDictionary *defaultsDict, return v; } +// +// See https://msdn.microsoft.com/en-us/library/gg672032(v=exchg.80).aspx +// +- (int) maximumPictureSize +{ + int v; + + v = [self integerForKey: @"SOGoMaximumPictureSize"]; + + if (!v) + v = 102400; + + return v; +} + @end From 65e735a31422eaa70ec77fb8494b36012f6e2904 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 21 Apr 2017 15:31:54 -0400 Subject: [PATCH 23/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index de1f65c09..16d6bc989 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ Enhancements - [core] improved event initation for all day events (#4145) + - [eas] added photo support for GAL search operations Bug fixes - [core] fixed calendar component move across collections (#4116) From e0cb700f54906220b6406a81e22372a4bafd6f76 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 21 Apr 2017 16:42:08 -0400 Subject: [PATCH 24/45] (js) Prevent 304 HTTP status code in IE11 --- UI/WebServerResources/generic.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index f7794d656..20e3f5785 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -468,8 +468,8 @@ function triggerAjaxRequest(url, callback, userdata, content, headers, attempt) activeAjaxRequests++; document.animTimer = setTimeout("checkAjaxRequestsState();", 250); - if (Prototype.Browser.IE) { - // Prevent 304 HTTP status code from the server + if (navigator.userAgent.include('Trident')) { + // Prevent 304 HTTP status code from the server with IE if (url.indexOf('?') >= 0) url += '&'; else From 2705b5956a06585076c9029de31edb643c50a457 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 26 Apr 2017 09:42:25 -0400 Subject: [PATCH 25/45] (doc) Update installation guide --- Documentation/SOGoInstallationGuide.asciidoc | 94 ++++++++++++-------- 1 file changed, 55 insertions(+), 39 deletions(-) diff --git a/Documentation/SOGoInstallationGuide.asciidoc b/Documentation/SOGoInstallationGuide.asciidoc index 7e8e11aa0..729949878 100644 --- a/Documentation/SOGoInstallationGuide.asciidoc +++ b/Documentation/SOGoInstallationGuide.asciidoc @@ -18,13 +18,13 @@ About this Guide This guide will walk you through the installation and configuration of the SOGo solution. It also covers the installation and configuration of -SOGo ActiveSync support – the solution used to synchronize mobile +SOGo ActiveSync support - the solution used to synchronize mobile devices with SOGo. The instructions are based on version {release_version} of SOGo. The latest version of this guide is available -at http://www.sogo.nu/downloads/documentation.html. +at http://sogo.nu/downloads/documentation.html. Introduction ------------ @@ -50,8 +50,7 @@ the SOGo Connector and the SOGo Integrator device, or Outlook 2013 SOGo is developed by a community of developers located mainly in North -America and Europe. More information can be found -at http://www.sogo.nu/ +America and Europe. More information can be found at http://sogo.nu/ Architecture and Compatibility ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -202,6 +201,11 @@ should apply to all supported operating systems. Software Downloads ~~~~~~~~~~~~~~~~~~ +[NOTE] +In order to access the production builds, you need a proper support contract +from https://sogo.nu/support/index_new.html#support-plans[Inverse]. Continue +with the configuration once you received your username and password. + SOGo can be installed using the `yum` utility. To do so, first create the `/etc/yum.repos.d/inverse.repo` configuration file with the following content: @@ -209,17 +213,22 @@ content: ---- [SOGo] name=Inverse SOGo Repository -baseurl=http://inverse.ca/downloads/SOGo/RHEL6/$basearch +baseurl=https://:@packages.inverse.ca/SOGo/release/2/rhel/6/$basearch gpgcheck=0 ---- -Some of the softwares on which SOGo depends are available from the -repository of RepoForge (previously known as RPMforge). To add RepoForge -to your packages sources, download and install the appropriate RPM -package from http://packages.sw.be/rpmforge-release/. -Also make sure you enabled the "rpmforge-extras" repository. +[NOTE] +Any non-URL safe characters in username/password must be URL-encoded. For +example, if your password is `so%go`, you must set the value in your +configuration file to `so%25go` - where `%` is encoded to `%25`. -For more information on using RepoForge, visit http://repoforge.org/use/. +Inverse signs its RPM packages with its GPG key. Integrity verification happens +all by itself on package installation, all you need to do is first import the +key into your rpm keychain: + +---- +rpm --import "https://pgp.mit.edu/pks/lookup?op=get&search=0xCB2D3A2AA0030E2C" +---- Software Installation ~~~~~~~~~~~~~~~~~~~~~ @@ -504,8 +513,8 @@ In our example, we set the default domain to `acme.com`. meeting participants. Possible values are: [options="compact"] -* `YES` – to send notifications -* `NO` – to not send notifications +* `YES` - to send notifications +* `NO` - to not send notifications Defaults to `NO` when unset. @@ -578,6 +587,8 @@ for SOGo. Possible values are: * `Basque` * `BrazilianPortuguese` * `Catalan` +* `ChineseTaiwan` +* `Croatian` * `Czech` * `Danish` * `Dutch` @@ -588,14 +599,19 @@ for SOGo. Possible values are: * `Hungarian` * `Icelandic` * `Italian` +* `Lithuanian` +* `Macedonian` * `NorwegianBokmal` * `NorwegianNynorsk` * `Polish` +* `Portuguese` * `Russian` * `Slovak` -* `SpanishSpain` +* `Slovenian` * `SpanishArgentina` +* `SpanishSpain` * `Swedish` +* `TurkishTurkey` * `Ukrainian` * `Welsh` @@ -604,8 +620,8 @@ for SOGo. Possible values are: someone changes his/her own calendar. Possible values are: [options="compact"] -- `YES` – to send notifications -- `NO` – to not send notifications +- `YES` - to send notifications +- `NO` - to not send notifications Defaults to `NO` when unset. User can overwrite this from the calendar properties window. @@ -616,8 +632,8 @@ modification is being done to his/her own calendar by someone else. Possible values are: [options="compact"] -* `YES` – to send notifications -* `NO` – to not send notifications +* `YES` - to send notifications +* `NO` - to not send notifications Defaults to `NO` when unset. User can overwrite this from the calendar properties window. @@ -640,8 +656,8 @@ requiring not authentication) their calendars and address books. Possible values are: [options="compact"] -* `YES` – to allow them -* `NO` – to prevent them from doing so +* `YES` - to allow them +* `NO` - to prevent them from doing so Defaults to `NO` when unset. @@ -652,8 +668,8 @@ SOGo. Possible values are: [options="compact"] -* `YES` – to allow them -* `NO` – to prevent them from doing so +* `YES` - to allow them +* `NO` - to prevent them from doing so Defaults to `NO` when unset. @@ -683,7 +699,7 @@ Defaults to `NO` when unset. string (attendee completion, address book search, etc.) prior triggering the server-side search operation. -Defaults to `2` when unset – which means a search operation will be +Defaults to `2` when unset - which means a search operation will be triggered on the 3rd typed character. |S |SOGoMaximumFailedLoginCount @@ -888,7 +904,7 @@ source can contain the following values: |The type of this user source, set to ldap` for an LDAP source. |id -|The identification name of the LDAP repository. This must be unique – +|The identification name of the LDAP repository. This must be unique - even when using multiple domains. |CNFieldName @@ -955,8 +971,8 @@ be marked as busy the first time it is booked. EOQualifier. The following operators are supported: [options="compact"] -* `<>` – inequality operator -* `=` – equality operator +* `<>` - inequality operator +* `=` - equality operator Multiple qualifiers can be joined by using `OR` and `AND`, they can also be grouped together by using parenthesis. Attribute values should be @@ -1374,9 +1390,9 @@ SOGoProfileURL = Create the database user and schema using the following commands: ---- -su – postgres -createuser --no-superuser --no-createdb –-no-createrole \ - –-encrypted --pwprompt sogo +su - postgres +createuser --no-superuser --no-createdb --no-createrole \ + --encrypted --pwprompt sogo (specify “sogo” as password) createdb -O sogo sogo ---- @@ -1477,7 +1493,7 @@ source can contain the following values: |The type of this user source, set to `sql` for a SQL source. |id -|The identification name of the SQL repository. This must be unique – +|The identification name of the SQL repository. This must be unique - even when using multiple domains. |viewURL @@ -1485,9 +1501,9 @@ even when using multiple domains. present. Required columns are: [options="compact"] -* `c_uid`: will be used for authentication – it's a username or +* `c_uid`: will be used for authentication - it's a username or username@domain.tld -* `c_name`: will be used to uniquely identify entries – which can be +* `c_name`: will be used to uniquely identify entries - which can be identical to `c_uid` * `c_password`: password of the user, plain text, crypt, md5 or sha encoded @@ -1593,14 +1609,14 @@ SOGoUserSources = Certain database columns must be present in the view/table, such as: -* `c_uid` – will be used for authentication – it's the username +* `c_uid` - will be used for authentication - it's the username or username@domain.tld -* `c_name` – which can be identical to `c_uid` – will be used to +* `c_name` - which can be identical to `c_uid` - will be used to uniquely identify entries -* `c_password` – password of the user, plain-text, md5 or sha encoded +* `c_password` - password of the user, plain-text, md5 or sha encoded for now -* `c_cn` – the user's common name – such as "John Doe" -* `mail` – the user's mail address +* `c_cn` - the user's common name - such as "John Doe" +* `mail` - the user's mail address Note that groups are currently not supported for SQL-based authentication sources. @@ -1620,8 +1636,8 @@ The following table describes the related parameters. are: [options="compact"] -* `sendmail` – to use the sendmail binary -* `smtp` – to use the SMTP protocol +* `sendmail` - to use the sendmail binary +* `smtp` - to use the SMTP protocol |D |SOGoSMTPServer |The DNS name or IP address of the SMTP server used when From 3f698447b912b1e4752baeb752b1df4635c2bfc8 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 27 Apr 2017 09:02:46 -0400 Subject: [PATCH 26/45] Properly honor "include in freebusy" Fixes #3354 --- NEWS | 1 + .../Appointments/SOGoAppointmentFolder.m | 41 ++++++++----------- SoObjects/Appointments/SOGoFreeBusyObject.m | 10 +++-- SoObjects/SOGo/SOGoParentFolder.m | 8 +++- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/NEWS b/NEWS index 16d6bc989..3d6df120c 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ Enhancements Bug fixes - [core] fixed calendar component move across collections (#4116) - [core] handle properly mails using windows-1255 charset (#4124) + - [core] properly honor the "include in freebusy" setting (#3354) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index ac5967655..582de41c0 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -445,36 +445,27 @@ static Class iCalEventK = nil; - (BOOL) includeInFreeBusy { NSNumber *excludeFromFreeBusy; - NSString *userLogin; + NSString *userLogin, *ownerInContext; BOOL is_owner; userLogin = [[context activeUser] login]; - is_owner = [userLogin isEqualToString: self->owner]; - - // Check if the owner (not the active user) has excluded the calendar from her/his free busy data. - excludeFromFreeBusy - = [self folderPropertyValueInCategory: @"FreeBusyExclusions" - forUser: [context activeUser]]; + ownerInContext = [[self container] ownerInContext: context]; + is_owner = [userLogin isEqualToString: ownerInContext]; - if ([self isSubscription]) - { - // If the user has not yet set an include/not include fb information let's EXCLUDE it. - if (!excludeFromFreeBusy) - return NO; - else - return ![excludeFromFreeBusy boolValue]; - } - else if (is_owner) - { - // We are the owner but we haven't included/excluded freebusy info, let's INCLUDE it. - if (!excludeFromFreeBusy) - return YES; - else - return ![excludeFromFreeBusy boolValue]; - } + if (is_owner) + excludeFromFreeBusy + = [self folderPropertyValueInCategory: @"FreeBusyExclusions" + forUser: [context activeUser]]; + else + excludeFromFreeBusy + = [self folderPropertyValueInCategory: @"FreeBusyExclusions" + forUser: [SOGoUser userWithLogin: ownerInContext]]; - // It's not a subscribtion and we aren't the owner. Let's INCLUDE the freebusy info. - return YES; + // We haven't included/excluded freebusy info, let's INCLUDE it. + if (!excludeFromFreeBusy) + return YES; + + return ![excludeFromFreeBusy boolValue]; } - (void) setIncludeInFreeBusy: (BOOL) newInclude diff --git a/SoObjects/Appointments/SOGoFreeBusyObject.m b/SoObjects/Appointments/SOGoFreeBusyObject.m index 1c6e55662..1cc0b1a79 100644 --- a/SoObjects/Appointments/SOGoFreeBusyObject.m +++ b/SoObjects/Appointments/SOGoFreeBusyObject.m @@ -317,6 +317,7 @@ to: (NSCalendarDate *) endDate { SOGoAppointmentFolder *calFolder; + SOGoAppointmentFolders *calFolders; SOGoUser *user; SOGoUserDefaults *ud; NSArray *folders; @@ -326,9 +327,12 @@ infos = [NSMutableArray array]; - folders = [[container lookupName: @"Calendar" - inContext: context - acquire: NO] subFolders]; + calFolders = [container lookupName: @"Calendar" + inContext: context + acquire: NO]; + [calFolders appendSubscribedSources]; + folders = [calFolders subFolders]; + max = [folders count]; for (count = 0; count < max; count++) { diff --git a/SoObjects/SOGo/SOGoParentFolder.m b/SoObjects/SOGo/SOGoParentFolder.m index 89521b058..fbed6bd1d 100644 --- a/SoObjects/SOGo/SOGoParentFolder.m +++ b/SoObjects/SOGo/SOGoParentFolder.m @@ -1,6 +1,6 @@ /* SOGoParentFolder.m - this file is part of SOGo * - * Copyright (C) 2006-2015 Inverse inc. + * Copyright (C) 2006-2017 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 @@ -323,6 +323,12 @@ static SoSecurityManager *sm = nil; int i; BOOL dirty; + if (!subscribedSubFolders) + subscribedSubFolders = [NSMutableDictionary new]; + + if (!subFolderClass) + subFolderClass = [[self class] subFolderClass]; + error = nil; /* we ignore non-DB errors at this time... */ dirty = NO; From c3121c50d5b99996029a4e06e63df7802b262fad Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 8 May 2017 10:44:12 -0400 Subject: [PATCH 27/45] (fix) make sure to use crypt as the scheme for md5/sha256/sha512 (fixes #4137) --- SoObjects/SOGo/LDAPSource.m | 7 +++++++ SoObjects/SOGo/SQLSource.m | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/SoObjects/SOGo/LDAPSource.m b/SoObjects/SOGo/LDAPSource.m index c8198fa9b..f1bb094d3 100644 --- a/SoObjects/SOGo/LDAPSource.m +++ b/SoObjects/SOGo/LDAPSource.m @@ -606,6 +606,13 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses return nil; } + if ([_userPasswordAlgorithm caseInsensitiveCompare: @"md5-crypt"] == NSOrderedSame || + [_userPasswordAlgorithm caseInsensitiveCompare: @"sha256-crypt"] == NSOrderedSame || + [_userPasswordAlgorithm caseInsensitiveCompare: @"sha512-crypt"] == NSOrderedSame) + { + _userPasswordAlgorithm = @"crypt"; + } + return [NSString stringWithFormat: @"{%@}%@", _userPasswordAlgorithm, pass]; } diff --git a/SoObjects/SOGo/SQLSource.m b/SoObjects/SOGo/SQLSource.m index f3503be45..3ee912ff7 100644 --- a/SoObjects/SOGo/SQLSource.m +++ b/SoObjects/SOGo/SQLSource.m @@ -197,6 +197,13 @@ return nil; } + if ([_userPasswordAlgorithm caseInsensitiveCompare: @"md5-crypt"] == NSOrderedSame || + [_userPasswordAlgorithm caseInsensitiveCompare: @"sha256-crypt"] == NSOrderedSame || + [_userPasswordAlgorithm caseInsensitiveCompare: @"sha512-crypt"] == NSOrderedSame) + { + _userPasswordAlgorithm = @"crypt"; + } + if (_prependPasswordScheme) result = [NSString stringWithFormat: @"{%@}%@", _userPasswordAlgorithm, pass]; else From 9b4dd624c6fd87295c18ffd42e958cf6f52fc7f8 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 8 May 2017 10:46:12 -0400 Subject: [PATCH 28/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index 3d6df120c..911ebe1fe 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Bug fixes - [core] fixed calendar component move across collections (#4116) - [core] handle properly mails using windows-1255 charset (#4124) - [core] properly honor the "include in freebusy" setting (#3354) + - [core] make sure to use crypt scheme when encoding md5/sha256/sha512 (#4137) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) From 149997b4cd60f97c023007cd6ddb316c1b9d0580 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Mon, 8 May 2017 11:23:32 -0400 Subject: [PATCH 29/45] Fix mail delegation of pristine user accounts Fixes #4160 --- NEWS | 1 + SoObjects/Mailer/SOGoMailAccount.m | 11 +++++++++-- SoObjects/Mailer/SOGoUser+Mailer.m | 11 +++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 911ebe1fe..41247a3ef 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ Bug fixes - [core] handle properly mails using windows-1255 charset (#4124) - [core] properly honor the "include in freebusy" setting (#3354) - [core] make sure to use crypt scheme when encoding md5/sha256/sha512 (#4137) + - [web] fixed mail delegation of pristine user accounts (#4160) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) diff --git a/SoObjects/Mailer/SOGoMailAccount.m b/SoObjects/Mailer/SOGoMailAccount.m index a915effe6..4b19c6c23 100644 --- a/SoObjects/Mailer/SOGoMailAccount.m +++ b/SoObjects/Mailer/SOGoMailAccount.m @@ -999,13 +999,20 @@ static NSString *inboxFolderName = @"INBOX"; - (void) _setDelegates: (NSArray *) newDelegates { + NSMutableDictionary *mailSettings; SOGoUser *ownerUser; SOGoUserSettings *settings; ownerUser = [SOGoUser userWithLogin: [self ownerInContext: context]]; settings = [ownerUser userSettings]; - [[settings objectForKey: @"Mail"] setObject: newDelegates - forKey: @"DelegateTo"]; + mailSettings = [settings objectForKey: @"Mail"]; + if (!mailSettings) + { + mailSettings = [NSMutableDictionary dictionaryWithCapacity: 1]; + [settings setObject: mailSettings forKey: @"Mail"]; + } + [mailSettings setObject: newDelegates + forKey: @"DelegateTo"]; [settings synchronize]; } diff --git a/SoObjects/Mailer/SOGoUser+Mailer.m b/SoObjects/Mailer/SOGoUser+Mailer.m index eafd83934..d82b2db4b 100644 --- a/SoObjects/Mailer/SOGoUser+Mailer.m +++ b/SoObjects/Mailer/SOGoUser+Mailer.m @@ -75,11 +75,18 @@ - (void) _setMailDelegators: (NSArray *) newDelegators { + NSMutableDictionary *mailSettings; SOGoUserSettings *settings; settings = [self userSettings]; - [[settings objectForKey: @"Mail"] setObject: newDelegators - forKey: @"DelegateFrom"]; + mailSettings = [settings objectForKey: @"Mail"]; + if (!mailSettings) + { + mailSettings = [NSMutableDictionary dictionaryWithCapacity: 1]; + [settings setObject: mailSettings forKey: @"Mail"]; + } + [mailSettings setObject: newDelegators + forKey: @"DelegateFrom"]; [settings synchronize]; } From 5027aabc1b0adbba6ed3177a7bc833dc7d5da352 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 26 Oct 2016 15:42:50 -0400 Subject: [PATCH 30/45] Improve validation of mail account delegators --- SoObjects/Mailer/SOGoMailAccount.m | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/SoObjects/Mailer/SOGoMailAccount.m b/SoObjects/Mailer/SOGoMailAccount.m index 4b19c6c23..4e74932ff 100644 --- a/SoObjects/Mailer/SOGoMailAccount.m +++ b/SoObjects/Mailer/SOGoMailAccount.m @@ -1059,11 +1059,9 @@ static NSString *inboxFolderName = @"INBOX"; { currentDelegate = [oldDelegates objectAtIndex: count]; delegateUser = [SOGoUser userWithLogin: currentDelegate]; + [delegates removeObject: currentDelegate]; if (delegateUser) - { - [delegates removeObject: currentDelegate]; - [delegateUser removeMailDelegator: owner]; - } + [delegateUser removeMailDelegator: owner]; } [self _setDelegates: delegates]; From a57cad33f669f1dc03fec7f3c6463953796ad9a0 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 17 May 2017 09:44:34 -0400 Subject: [PATCH 31/45] (feat) now able to subscribe/unsubscribe folders using sogo-tool --- SoObjects/SOGo/SOGoGCSFolder.m | 4 ++- Tools/SOGoToolManageACL.m | 61 ++++++++++++++++++++++++++++------ 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index 4b51fe216..2cb172ecd 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -388,7 +388,9 @@ static NSArray *childRecordFields = nil; dd = [[context activeUser] domainDefaults]; displayNameFormat = [dd subscriptionFolderFormat]; - name = [folderSubscriptionValues keysWithFormat: displayNameFormat]; + // Use a format only if it was defined by the user + if (displayNameFormat) + name = [folderSubscriptionValues keysWithFormat: displayNameFormat]; } return name; diff --git a/Tools/SOGoToolManageACL.m b/Tools/SOGoToolManageACL.m index 6465ebd63..fb40a595d 100644 --- a/Tools/SOGoToolManageACL.m +++ b/Tools/SOGoToolManageACL.m @@ -35,12 +35,17 @@ #import #import #import +#import +#import #import +#import #import #import #import +#import + #import "SOGoTool.h" typedef enum @@ -49,6 +54,8 @@ typedef enum ManageACLGet = 0, ManageACLAdd = 1, ManageACLRemove = 2, + ManageACLSubscribe = 3, + ManageACLUnsubscribe = 3, } SOGoManageACLCommand; @interface SOGoToolManageACL : SOGoTool @@ -99,14 +106,16 @@ typedef enum - (void) usage { - fprintf (stderr, "manage-acl get|add|remove owner folder user \n\n" - " get get ACL information of folder for user\n" - " add add ACL information of folder for user\n" - " remove remove all ACL information of folder for user\n" - " owner the user owning the folder\n" - " folder the folder - Calendar/ or Contacst/\n" - " user the user to get/set rights for - 'ALL', '', 'anonymous' are supported\n" - " rights rights to add\n\n" + fprintf (stderr, "manage-acl get|add|remove|subscribe|unsubscribe owner folder user \n\n" + " get get ACL information of folder for user\n" + " add add ACL information of folder for user\n" + " remove remove all ACL information of folder for user\n" + " subscribe subscribe user to owner's folder\n" + " unsubscribe unsubscribe user to owner's folder\n" + " owner the user owning the folder\n" + " folder the folder - Calendar/ or Contacst/\n" + " user the user to get/set rights for - 'ALL', '', 'anonymous' are supported\n" + " rights rights to add\n\n" "Example: sogo-tool manage-acl get jdoe Calendar/personal\n\n" "Note: You can add only one access right at the time. To set them all at once,\n" " invoke 'remove' first to remove them all.\n\n"); @@ -131,6 +140,10 @@ typedef enum } else if ([s isEqualToString: @"remove"]) command = ManageACLRemove; + else if ([s isEqualToString: @"subscribe"]) + command = ManageACLSubscribe; + else if ([s isEqualToString: @"unsubscribe"]) + command = ManageACLUnsubscribe; else { [self usage]; @@ -349,9 +362,7 @@ typedef enum if ([theUser isEqualToString: @"ALL"]) qs = [NSString stringWithFormat: @"c_uid LIKE '\%'", theUser]; else - { - qs = [NSString stringWithFormat: @"c_uid = '%@'", theUser]; - } + qs = [NSString stringWithFormat: @"c_uid = '%@'", theUser]; qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; @@ -363,6 +374,30 @@ typedef enum forPath: path]; } +- (void) subscribeOrUnsubscribeUser: (NSString *) theUser + toFolder: (GCSFolder *) theFolder + reallyDo: (BOOL) reallyDo +{ + SOGoParentFolder *parentFolder; + SOGoUserFolder *userFolder; + SOGoGCSFolder *gcsFolder; + WOContext *localContext; + NSArray *components; + + localContext = [WOContext context]; + [localContext setActiveUser: [SOGoUser userWithLogin: owner]]; + userFolder = [SOGoUserFolder objectWithName: owner inContainer: nil]; + components = [folder componentsSeparatedByString: @"/"]; + parentFolder = [userFolder lookupName: [components objectAtIndex: 0] + inContext: localContext + acquire: NO]; + + gcsFolder = [parentFolder lookupPersonalFolder: [components objectAtIndex: 1] + ignoringRights: YES]; + + [gcsFolder subscribeUserOrGroup: user reallyDo: YES response: nil]; +} + - (BOOL) proceed { NSAutoreleasePool *pool; @@ -391,6 +426,10 @@ typedef enum [self removeACLForUser: user folder: f]; else if (command == ManageACLAdd) [self addACLForUser: user folder: f]; + else if (command == ManageACLSubscribe) + [self subscribeOrUnsubscribeUser: user toFolder: f reallyDo: YES]; + else if (command == ManageACLUnsubscribe) + [self subscribeOrUnsubscribeUser: user toFolder: f reallyDo: NO]; else [self usage]; } From 20cbe3cf77b4be5641a2f423c78ed89c6e68bb1e Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 17 May 2017 09:46:27 -0400 Subject: [PATCH 32/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index 41247a3ef..68ca94130 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ Enhancements - [core] improved event initation for all day events (#4145) + - [core] now possible to {un}subscribe to folders using sogo-tool - [eas] added photo support for GAL search operations Bug fixes From b3149ee7c23320f2e22dccf689850d0e317a751f Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 17 May 2017 09:56:16 -0400 Subject: [PATCH 33/45] Fixed typo --- Tools/SOGoToolManageACL.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/SOGoToolManageACL.m b/Tools/SOGoToolManageACL.m index fb40a595d..4d980b305 100644 --- a/Tools/SOGoToolManageACL.m +++ b/Tools/SOGoToolManageACL.m @@ -395,7 +395,7 @@ typedef enum gcsFolder = [parentFolder lookupPersonalFolder: [components objectAtIndex: 1] ignoringRights: YES]; - [gcsFolder subscribeUserOrGroup: user reallyDo: YES response: nil]; + [gcsFolder subscribeUserOrGroup: user reallyDo: reallyDo response: nil]; } - (BOOL) proceed From 95d08c015057a3760adbef5f8c21cb9d22bb3c2b Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 30 May 2017 09:26:30 -0400 Subject: [PATCH 34/45] Newly subscribed calendars are excluded from FB Fixes #3354 --- NEWS | 1 + .../Appointments/SOGoAppointmentFolder.m | 98 ++++++++++++++++++- SoObjects/SOGo/SOGoGCSFolder.m | 19 +--- 3 files changed, 102 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index 68ca94130..ed85d7afb 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,7 @@ Bug fixes - [core] handle properly mails using windows-1255 charset (#4124) - [core] properly honor the "include in freebusy" setting (#3354) - [core] make sure to use crypt scheme when encoding md5/sha256/sha512 (#4137) + - [core] newly subscribed calendars are excluded from freebusy (#3354) - [web] fixed mail delegation of pristine user accounts (#4160) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 582de41c0..78855cc49 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -434,6 +434,93 @@ static Class iCalEventK = nil; inCategory: @"FolderShowTasks"]; } +- (BOOL) subscribeUserOrGroup: (NSString *) theIdentifier + reallyDo: (BOOL) reallyDo + response: (WOResponse *) theResponse +{ + NSMutableDictionary *moduleSettings, *folderShowAlarms, *freeBusyExclusions; + NSString *subscriptionPointer; + NSMutableArray *allUsers; + SOGoUserSettings *us; + NSDictionary *dict; + SOGoUser *sogoUser; + BOOL rc; + int i; + + rc = [super subscribeUserOrGroup: theIdentifier reallyDo: reallyDo response: theResponse]; + + if (rc) + { + dict = [[SOGoUserManager sharedUserManager] contactInfosForUserWithUIDorEmail: theIdentifier]; + + if ([[dict objectForKey: @"isGroup"] boolValue]) + { + SOGoGroup *aGroup; + + aGroup = [SOGoGroup groupWithIdentifier: theIdentifier + inDomain: [[context activeUser] domain]]; + allUsers = [NSMutableArray arrayWithArray: [aGroup members]]; + + // We remove the active user from the group (if present) in order to + // not subscribe him to their own resource! + [allUsers removeObject: [context activeUser]]; + } + else + { + sogoUser = [SOGoUser userWithLogin: theIdentifier roles: nil]; + + if (sogoUser) + allUsers = [NSArray arrayWithObject: sogoUser]; + else + allUsers = [NSArray array]; + } + + for (i = 0; i < [allUsers count]; i++) + { + sogoUser = [allUsers objectAtIndex: i]; + us = [sogoUser userSettings]; + moduleSettings = [us objectForKey: [container nameInContainer]]; + if (!(moduleSettings + && [moduleSettings isKindOfClass: [NSMutableDictionary class]])) + { + moduleSettings = [NSMutableDictionary dictionary]; + [us setObject: moduleSettings forKey: [container nameInContainer]]; + } + + subscriptionPointer = [self folderReference]; + + folderShowAlarms = [moduleSettings objectForKey: @"FolderShowAlarms"]; + freeBusyExclusions = [moduleSettings objectForKey: @"FreeBusyExclusions"]; + + if (reallyDo) + { + if (!(folderShowAlarms + && [folderShowAlarms isKindOfClass: [NSMutableDictionary class]])) + { + folderShowAlarms = [NSMutableDictionary dictionary]; + [moduleSettings setObject: folderShowAlarms + forKey: @"FolderShowAlarms"]; + } + + // By default, we disable alarms on subscribed calendars + [folderShowAlarms setObject: [NSNumber numberWithBool: NO] + forKey: subscriptionPointer]; + } + else + { + [folderShowAlarms removeObjectForKey: subscriptionPointer]; + [freeBusyExclusions removeObjectForKey: subscriptionPointer]; + } + + [us synchronize]; + + rc = YES; + } + } + + return rc; +} + // // If the user is the owner of the calendar, by default we include the freebusy information. // @@ -461,9 +548,16 @@ static Class iCalEventK = nil; = [self folderPropertyValueInCategory: @"FreeBusyExclusions" forUser: [SOGoUser userWithLogin: ownerInContext]]; - // We haven't included/excluded freebusy info, let's INCLUDE it. + // User has not setting for freebusy inclusion/exclusion, + // * include it if it's a personal folder; + // * exclude it if it's a subscription. if (!excludeFromFreeBusy) - return YES; + { + if ([self isSubscription]) + return NO; + else + return YES; + } return ![excludeFromFreeBusy boolValue]; } diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index 2cb172ecd..48cea27be 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -970,8 +970,12 @@ static NSArray *childRecordFields = nil; folderSubscription = [moduleSettings objectForKey: @"SubscribedFolders"]; subscriptionPointer = [self folderReference]; - + + // We used to set "show alarms" for any type of folder, so we remove it + // here and let the subclass handle it (SOGoAppointmentFolder). folderShowAlarms = [moduleSettings objectForKey: @"FolderShowAlarms"]; + if (folderShowAlarms) + [folderShowAlarms removeObjectForKey: subscriptionPointer]; if (reallyDo) { @@ -983,30 +987,17 @@ static NSArray *childRecordFields = nil; forKey: @"SubscribedFolders"]; } - if (!(folderShowAlarms - && [folderShowAlarms isKindOfClass: [NSMutableDictionary class]])) - { - folderShowAlarms = [NSMutableDictionary dictionary]; - [moduleSettings setObject: folderShowAlarms - forKey: @"FolderShowAlarms"]; - } - [self setFolderPropertyValue: [self _displayNameFromSubscriber] inCategory: @"FolderDisplayNames" settings: us]; [folderSubscription addObjectUniquely: subscriptionPointer]; - - // By default, we disable alarms on subscribed calendars - [folderShowAlarms setObject: [NSNumber numberWithBool: NO] - forKey: subscriptionPointer]; } else { [self removeFolderSettings: moduleSettings withReference: subscriptionPointer]; [folderSubscription removeObject: subscriptionPointer]; - [folderShowAlarms removeObjectForKey: subscriptionPointer]; } [us synchronize]; From ec397b39b04e232fbb02039f0a4f9e835fd76e60 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 30 May 2017 10:38:31 -0400 Subject: [PATCH 35/45] (feat) added custom fields support from Thunderbird's address book --- NEWS | 1 + SoObjects/Contacts/NGVCard+SOGo.h | 6 +- SoObjects/Contacts/NGVCard+SOGo.m | 81 +++++++++++++++++++- UI/Contacts/UIxContactEditor.m | 2 +- UI/Contacts/UIxContactView.m | 48 +++++++++++- UI/Templates/ContactsUI/UIxContactEditor.wox | 36 +++++++++ UI/Templates/ContactsUI/UIxContactView.wox | 4 + 7 files changed, 173 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index ed85d7afb..e54b8a6af 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Enhancements - [core] improved event initation for all day events (#4145) - [core] now possible to {un}subscribe to folders using sogo-tool - [eas] added photo support for GAL search operations + - [web] added custom fields support from Thunderbird's address book Bug fixes - [core] fixed calendar component move across collections (#4116) diff --git a/SoObjects/Contacts/NGVCard+SOGo.h b/SoObjects/Contacts/NGVCard+SOGo.h index 512037888..b4025e9c4 100644 --- a/SoObjects/Contacts/NGVCard+SOGo.h +++ b/SoObjects/Contacts/NGVCard+SOGo.h @@ -1,6 +1,6 @@ /* NGVCard+SOGo.h - this file is part of SOGo * - * Copyright (C) 2009-2014 Inverse inc. + * Copyright (C) 2009-2017 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 @@ -45,6 +45,10 @@ - (NSString *) pager; - (NSCalendarDate *) birthday; +- (void) addElementWithTag: (NSString *) elementTag + ofType: (NSString *) type + withValue: (id) value; + @end #endif /* NGVCARD_SOGO_H */ diff --git a/SoObjects/Contacts/NGVCard+SOGo.m b/SoObjects/Contacts/NGVCard+SOGo.m index d59d91798..e69b6dd17 100644 --- a/SoObjects/Contacts/NGVCard+SOGo.m +++ b/SoObjects/Contacts/NGVCard+SOGo.m @@ -217,9 +217,9 @@ convention: - (void) updateFromLDIFRecord: (NSDictionary *) ldifRecord { NSInteger year, yearOfToday, month, day; + NSArray *units, *elements; CardElement *element; NSCalendarDate *now; - NSArray *units; NSString *fn, *ou; id o; @@ -320,6 +320,43 @@ convention: else [self setCategories: [o componentsSeparatedByString: @","]]; + // Custom fields from Thunderbird + if ((o = [ldifRecord objectForKey: @"custom1"])) + { + elements = [self childrenWithTag: @"custom1"]; + [self removeChildren: elements]; + + if ([o length]) + [self addElementWithTag: @"custom1" ofType: nil withValue: o]; + } + + if ((o = [ldifRecord objectForKey: @"custom2"])) + { + elements = [self childrenWithTag: @"custom2"]; + [self removeChildren: elements]; + + if ([o length]) + [self addElementWithTag: @"custom2" ofType: nil withValue: o]; + } + + if ((o = [ldifRecord objectForKey: @"custom3"])) + { + elements = [self childrenWithTag: @"custom3"]; + [self removeChildren: elements]; + + if ([o length]) + [self addElementWithTag: @"custom3" ofType: nil withValue: o]; + } + + if ((o = [ldifRecord objectForKey: @"custom4"])) + { + elements = [self childrenWithTag: @"custom4"]; + [self removeChildren: elements]; + + if ([o length]) + [self addElementWithTag: @"custom4" ofType: nil withValue: o]; + } + [self cleanupEmptyChildren]; } @@ -646,6 +683,19 @@ convention: dn = @""; [ldifRecord setObject: dn forKey: @"dn"]; + // Custom fields from Thunderbird + if ((stringValue = [[self uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""]) && [stringValue length]) + [ldifRecord setObject: stringValue forKey: @"custom1"]; + + if ((stringValue = [[self uniqueChildWithTag: @"custom2"] flattenedValuesForKey: @""]) && [stringValue length]) + [ldifRecord setObject: stringValue forKey: @"custom2"]; + + if ((stringValue = [[self uniqueChildWithTag: @"custom3"] flattenedValuesForKey: @""]) && [stringValue length]) + [ldifRecord setObject: stringValue forKey: @"custom3"]; + + if ((stringValue = [[self uniqueChildWithTag: @"custom4"] flattenedValuesForKey: @""]) && [stringValue length]) + [ldifRecord setObject: stringValue forKey: @"custom4"]; + return ldifRecord; } @@ -871,4 +921,33 @@ convention: return fields; } +- (void) addElementWithTag: (NSString *) elementTag + ofType: (NSString *) type + withValue: (id) value +{ + NSArray *allValues; + NSEnumerator *list; + CardElement *element; + + // value is either an array or a string + if ([value isKindOfClass: [NSString class]]) + allValues = [NSArray arrayWithObject: value]; + else + allValues = value; + + // Add all values as separate elements + list = [allValues objectEnumerator]; + while ((value = [list nextObject])) + { + if ([type length]) + element = [CardElement simpleElementWithTag: elementTag + singleType: type + value: value]; + else + element = [CardElement simpleElementWithTag: elementTag + value: value]; + [self addChild: element]; + } +} + @end /* NGVCard */ diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index 418945337..12603e982 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -1,6 +1,6 @@ /* Copyright (C) 2004-2005 SKYRIX Software AG - Copyright (C) 2005-2015 Inverse inc. + Copyright (C) 2005-2017 Inverse inc. This file is part of SOGo diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index 10fd1725a..9f8b7e181 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -1,6 +1,6 @@ /* Copyright (C) 2004 SKYRIX Software AG - Copyright (C) 2005-2015 Inverse inc. + Copyright (C) 2005-2017 Inverse inc. This file is part of SOGo. @@ -573,11 +573,55 @@ return [self _urlOfType: @"work"]; } +- (NSString *) custom1 +{ + NSString *value; + + value = [[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""]; + value = [value stringByEscapingHTMLString]; + + return [self _cardStringWithLabel: @"Custom 1" value: value]; +} + +- (NSString *) custom2 +{ + NSString *value; + + value = [[card uniqueChildWithTag: @"custom2"] flattenedValuesForKey: @""]; + value = [value stringByEscapingHTMLString]; + + return [self _cardStringWithLabel: @"Custom 2" value: value]; +} + +- (NSString *) custom3 +{ + NSString *value; + + value = [[card uniqueChildWithTag: @"custom3"] flattenedValuesForKey: @""]; + value = [value stringByEscapingHTMLString]; + + return [self _cardStringWithLabel: @"Custom 3" value: value]; +} + +- (NSString *) custom4 +{ + NSString *value; + + value = [[card uniqueChildWithTag: @"custom4"] flattenedValuesForKey: @""]; + value = [value stringByEscapingHTMLString]; + + return [self _cardStringWithLabel: @"Custom 4" value: value]; +} + - (BOOL) hasOtherInfos { return ([[card note] length] > 0 || [[card bday] length] > 0 - || [[card tz] length] > 0); + || [[card tz] length] > 0 + || [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0 + || [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0 + || [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0 + || [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0); } - (NSString *) bday diff --git a/UI/Templates/ContactsUI/UIxContactEditor.wox b/UI/Templates/ContactsUI/UIxContactEditor.wox index 5032708fc..7510db633 100644 --- a/UI/Templates/ContactsUI/UIxContactEditor.wox +++ b/UI/Templates/ContactsUI/UIxContactEditor.wox @@ -377,6 +377,42 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/UI/Templates/ContactsUI/UIxContactView.wox b/UI/Templates/ContactsUI/UIxContactView.wox index 9f216b09b..fa2337592 100644 --- a/UI/Templates/ContactsUI/UIxContactView.wox +++ b/UI/Templates/ContactsUI/UIxContactView.wox @@ -48,6 +48,10 @@
From 7cc3ff2fccb7905300456b01091286581e4b3842 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 30 May 2017 13:15:04 -0400 Subject: [PATCH 36/45] (fix) remove any trailing cr (fixes #4172) --- UI/Contacts/UIxContactFolderActions.m | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/UI/Contacts/UIxContactFolderActions.m b/UI/Contacts/UIxContactFolderActions.m index c4b8063c7..b095bf87f 100644 --- a/UI/Contacts/UIxContactFolderActions.m +++ b/UI/Contacts/UIxContactFolderActions.m @@ -165,7 +165,7 @@ static NSArray *photoTags = nil; id value; NSRange r; - int i, j, count, linesCount; + int i, j, count, linesCount, len; int rc; folder = [self clientObject]; @@ -184,6 +184,11 @@ static NSArray *photoTags = nil; for (j = 0; j < linesCount; j++) { line = [lines objectAtIndex: j]; + len = [line length]; + + /* we check for trailing \r and we strip them */ + if (len && [line characterAtIndex: len-1] == '\r') + line = [line substringToIndex: len-1]; /* skip embedded comment lines */ if ([line hasPrefix: @"#"]) From d7eb75195147160957a2c865f95728cdfe430cf6 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 30 May 2017 13:16:35 -0400 Subject: [PATCH 37/45] Updated NEWS --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index e54b8a6af..cdc86ddcd 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Bug fixes - [core] properly honor the "include in freebusy" setting (#3354) - [core] make sure to use crypt scheme when encoding md5/sha256/sha512 (#4137) - [core] newly subscribed calendars are excluded from freebusy (#3354) + - [core] strip cr during LDIF import process (#4172) - [web] fixed mail delegation of pristine user accounts (#4160) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) From bbac4662768444a1821f72351a2c12da2878f783 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 30 May 2017 14:44:43 -0400 Subject: [PATCH 38/45] (fix) sanity check when no defaults are found (fixes #4179) --- Tools/SOGoToolDumpDefaults.m | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tools/SOGoToolDumpDefaults.m b/Tools/SOGoToolDumpDefaults.m index 2344c3a3c..3aec1c424 100644 --- a/Tools/SOGoToolDumpDefaults.m +++ b/Tools/SOGoToolDumpDefaults.m @@ -67,8 +67,8 @@ - (NSString *) processDefaults: (BOOL)allDefaults { - NSUserDefaults *ud; NSDictionary *defaultsDict; + NSUserDefaults *ud; NSData *plistData; ud = [NSUserDefaults standardUserDefaults]; @@ -83,6 +83,9 @@ defaultsDict = [ud persistentDomainForName: @"sogod"]; } + if (!defaultsDict) + return @"No defaults found. Try to use -f."; + plistData = [NSPropertyListSerialization dataFromPropertyList: (id) defaultsDict format: NSPropertyListOpenStepFormat errorDescription: 0 ]; From 98f042b390eb3047f4294b037b6ced4a8b9c4928 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 30 May 2017 14:47:23 -0400 Subject: [PATCH 39/45] (fix) fixed typos in tools' help (fixes #4175) --- Tools/SOGoToolManageEAS.m | 2 +- Tools/SOGoToolTruncateCalendar.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/SOGoToolManageEAS.m b/Tools/SOGoToolManageEAS.m index 338c11d9a..d3e6cac98 100644 --- a/Tools/SOGoToolManageEAS.m +++ b/Tools/SOGoToolManageEAS.m @@ -122,7 +122,7 @@ NSURL *folderTableURL; - (void) usage { - fprintf (stderr, "manage-eas listdevices|resetdevice|resetfolder|mergevcard|mergevevent user \n\n" + fprintf (stderr, "manage-eas listdevices|resetdevice|resetfolder|mergevcard|mergevevent user \n\n" " user the user of whom to reset the whole device or a single folder\n" " Examples:\n" " sogo-tool manage-eas listdevices janedoe\n" diff --git a/Tools/SOGoToolTruncateCalendar.m b/Tools/SOGoToolTruncateCalendar.m index 75923ec25..3b3e0bced 100644 --- a/Tools/SOGoToolTruncateCalendar.m +++ b/Tools/SOGoToolTruncateCalendar.m @@ -214,7 +214,7 @@ - (void) usage { fprintf (stderr, "Usage: truncate-calendar USER FOLDER DATE\n\n" - " USER the owner of the contact folder\n" + " USER the owner of the calendar folder\n" " FOLDER the id of the folder to clean up\n" " DATE UTC datetime - non-recurring events older than this date will be removed (ex: \"2016-06-27T17:38:56\")\n\n"); } From 0cca551c223d8406a55dee75940fd70e50e66aa9 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 30 May 2017 17:27:49 -0400 Subject: [PATCH 40/45] Add Latvian (lv) translation --- .tx/config | 11 + NEWS | 1 + .../English.lproj/Localizable.strings | 2 + .../French.lproj/Localizable.strings | 4 + .../German.lproj/Localizable.strings | 2 + .../Latvian.lproj/Localizable.strings | 64 ++ .../Polish.lproj/Localizable.strings | 4 + .../TurkishTurkey.lproj/Localizable.strings | 12 +- .../Latvian.lproj/Localizable.strings | 2 + SoObjects/Mailer/GNUmakefile | 2 + .../Mailer/Latvian.lproj/Localizable.strings | 2 + SoObjects/Mailer/SOGoMailForward.h | 3 + SoObjects/Mailer/SOGoMailForward.m | 3 + SoObjects/Mailer/SOGoMailReply.h | 3 + SoObjects/Mailer/SOGoMailReply.m | 3 + SoObjects/SOGo/SOGoDefaults.plist | 1 + Tests/Integration/preferences.py | 2 +- .../Latvian.lproj/Localizable.strings | 26 + UI/Common/Dutch.lproj/Localizable.strings | 28 +- UI/Common/Finnish.lproj/Localizable.strings | 28 +- UI/Common/Latvian.lproj/Localizable.strings | 183 ++++++ UI/Contacts/Czech.lproj/Localizable.strings | 2 +- UI/Contacts/Dutch.lproj/Localizable.strings | 2 +- UI/Contacts/Finnish.lproj/Localizable.strings | 2 +- UI/Contacts/French.lproj/Localizable.strings | 5 +- UI/Contacts/Latvian.lproj/Localizable.strings | 264 ++++++++ UI/Contacts/Polish.lproj/Localizable.strings | 5 +- UI/Contacts/Slovak.lproj/Localizable.strings | 2 +- .../TurkishTurkey.lproj/Localizable.strings | 5 +- .../Latvian.lproj/Localizable.strings | 50 ++ .../TurkishTurkey.lproj/Localizable.strings | 2 +- UI/MailerUI/Dutch.lproj/Localizable.strings | 13 + UI/MailerUI/English.lproj/Localizable.strings | 2 + UI/MailerUI/Finnish.lproj/Localizable.strings | 13 + UI/MailerUI/French.lproj/Localizable.strings | 2 + UI/MailerUI/German.lproj/Localizable.strings | 2 +- UI/MailerUI/Latvian.lproj/Localizable.strings | 409 ++++++++++++ UI/MailerUI/Polish.lproj/Localizable.strings | 2 + .../TurkishTurkey.lproj/Localizable.strings | 4 +- UI/MainUI/Arabic.lproj/Localizable.strings | 1 + UI/MainUI/Basque.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + UI/MainUI/Catalan.lproj/Localizable.strings | 1 + .../ChineseTaiwan.lproj/Localizable.strings | 1 + UI/MainUI/Croatian.lproj/Localizable.strings | 1 + UI/MainUI/Czech.lproj/Localizable.strings | 1 + UI/MainUI/Danish.lproj/Localizable.strings | 1 + UI/MainUI/Dutch.lproj/Localizable.strings | 1 + UI/MainUI/English.lproj/Localizable.strings | 1 + UI/MainUI/Finnish.lproj/Localizable.strings | 1 + UI/MainUI/French.lproj/Localizable.strings | 1 + UI/MainUI/German.lproj/Localizable.strings | 1 + UI/MainUI/Hebrew.lproj/Localizable.strings | 1 + UI/MainUI/Hungarian.lproj/Localizable.strings | 1 + UI/MainUI/Icelandic.lproj/Localizable.strings | 1 + UI/MainUI/Italian.lproj/Localizable.strings | 1 + UI/MainUI/Latvian.lproj/Locale | 35 + UI/MainUI/Latvian.lproj/Localizable.strings | 95 +++ .../Lithuanian.lproj/Localizable.strings | 3 +- .../Macedonian.lproj/Localizable.strings | 1 + .../NorwegianBokmal.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + UI/MainUI/Polish.lproj/Localizable.strings | 1 + .../Portuguese.lproj/Localizable.strings | 1 + UI/MainUI/Russian.lproj/Localizable.strings | 1 + UI/MainUI/Serbian.lproj/Localizable.strings | 1 + UI/MainUI/Slovak.lproj/Localizable.strings | 1 + UI/MainUI/Slovenian.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../SpanishSpain.lproj/Localizable.strings | 1 + UI/MainUI/Swedish.lproj/Localizable.strings | 1 + .../TurkishTurkey.lproj/Localizable.strings | 1 + UI/MainUI/Ukrainian.lproj/Localizable.strings | 1 + UI/MainUI/Welsh.lproj/Localizable.strings | 1 + .../Arabic.lproj/Localizable.strings | 1 + .../Basque.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../Catalan.lproj/Localizable.strings | 1 + .../ChineseTaiwan.lproj/Localizable.strings | 1 + .../Croatian.lproj/Localizable.strings | 1 + .../Czech.lproj/Localizable.strings | 1 + .../Danish.lproj/Localizable.strings | 1 + .../Dutch.lproj/Localizable.strings | 2 + .../English.lproj/Localizable.strings | 9 + .../Finnish.lproj/Localizable.strings | 2 + .../French.lproj/Localizable.strings | 9 + .../German.lproj/Localizable.strings | 9 + .../Hebrew.lproj/Localizable.strings | 1 + .../Hungarian.lproj/Localizable.strings | 1 + .../Icelandic.lproj/Localizable.strings | 1 + .../Italian.lproj/Localizable.strings | 1 + .../Latvian.lproj/Localizable.strings | 411 ++++++++++++ .../Lithuanian.lproj/Localizable.strings | 1 + .../Macedonian.lproj/Localizable.strings | 1 + .../NorwegianBokmal.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../Polish.lproj/Localizable.strings | 9 + .../Portuguese.lproj/Localizable.strings | 1 + .../Russian.lproj/Localizable.strings | 1 + .../Serbian.lproj/Localizable.strings | 1 + .../Slovak.lproj/Localizable.strings | 1 + .../Slovenian.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../SpanishSpain.lproj/Localizable.strings | 1 + .../Swedish.lproj/Localizable.strings | 1 + .../TurkishTurkey.lproj/Localizable.strings | 15 +- .../Ukrainian.lproj/Localizable.strings | 1 + .../Welsh.lproj/Localizable.strings | 1 + UI/SOGoUI/SOGoFolderAdvisory.h | 12 + UI/SOGoUI/SOGoFolderAdvisory.m | 12 + UI/Scheduler/Czech.lproj/Localizable.strings | 2 +- UI/Scheduler/Dutch.lproj/Localizable.strings | 2 +- .../Finnish.lproj/Localizable.strings | 2 +- .../Latvian.lproj/Localizable.strings | 603 ++++++++++++++++++ UI/Scheduler/Slovak.lproj/Localizable.strings | 2 +- .../TurkishTurkey.lproj/Localizable.strings | 8 +- configure | 2 +- 117 files changed, 2428 insertions(+), 46 deletions(-) create mode 100644 SoObjects/Appointments/Latvian.lproj/Localizable.strings create mode 100644 SoObjects/Contacts/Latvian.lproj/Localizable.strings create mode 100644 SoObjects/Mailer/Latvian.lproj/Localizable.strings create mode 100644 UI/AdministrationUI/Latvian.lproj/Localizable.strings create mode 100644 UI/Common/Latvian.lproj/Localizable.strings create mode 100644 UI/Contacts/Latvian.lproj/Localizable.strings create mode 100644 UI/MailPartViewers/Latvian.lproj/Localizable.strings create mode 100644 UI/MailerUI/Latvian.lproj/Localizable.strings create mode 100644 UI/MainUI/Latvian.lproj/Locale create mode 100644 UI/MainUI/Latvian.lproj/Localizable.strings create mode 100644 UI/PreferencesUI/Latvian.lproj/Localizable.strings create mode 100644 UI/Scheduler/Latvian.lproj/Localizable.strings diff --git a/.tx/config b/.tx/config index 9a6354205..31d3567a2 100644 --- a/.tx/config +++ b/.tx/config @@ -21,6 +21,7 @@ trans.hu = UI/MailerUI/Hungarian.lproj/Localizable.strings trans.is = UI/MailerUI/Icelandic.lproj/Localizable.strings trans.it = UI/MailerUI/Italian.lproj/Localizable.strings trans.lt = UI/MailerUI/Lithuanian.lproj/Localizable.strings +trans.lv = UI/MailerUI/Latvian.lproj/Localizable.strings trans.mk_MK = UI/MailerUI/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/MailerUI/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/MailerUI/Dutch.lproj/Localizable.strings @@ -57,6 +58,7 @@ trans.hu = UI/PreferencesUI/Hungarian.lproj/Localizable.strings trans.is = UI/PreferencesUI/Icelandic.lproj/Localizable.strings trans.it = UI/PreferencesUI/Italian.lproj/Localizable.strings trans.lt = UI/PreferencesUI/Lithuanian.lproj/Localizable.strings +trans.lv = UI/PreferencesUI/Latvian.lproj/Localizable.strings trans.mk_MK = UI/PreferencesUI/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/PreferencesUI/Dutch.lproj/Localizable.strings @@ -93,6 +95,7 @@ trans.hu = UI/Scheduler/Hungarian.lproj/Localizable.strings trans.is = UI/Scheduler/Icelandic.lproj/Localizable.strings trans.it = UI/Scheduler/Italian.lproj/Localizable.strings trans.lt = UI/Scheduler/Lithuanian.lproj/Localizable.strings +trans.lv = UI/Scheduler/Latvian.lproj/Localizable.strings trans.mk_MK = UI/Scheduler/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/Scheduler/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/Scheduler/Dutch.lproj/Localizable.strings @@ -129,6 +132,7 @@ trans.hu = UI/Contacts/Hungarian.lproj/Localizable.strings trans.is = UI/Contacts/Icelandic.lproj/Localizable.strings trans.it = UI/Contacts/Italian.lproj/Localizable.strings trans.lt = UI/Contacts/Lithuanian.lproj/Localizable.strings +trans.lv = UI/Contacts/Latvian.lproj/Localizable.strings trans.mk_MK = UI/Contacts/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/Contacts/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/Contacts/Dutch.lproj/Localizable.strings @@ -165,6 +169,7 @@ trans.hu = UI/MainUI/Hungarian.lproj/Localizable.strings trans.is = UI/MainUI/Icelandic.lproj/Localizable.strings trans.it = UI/MainUI/Italian.lproj/Localizable.strings trans.lt = UI/MainUI/Lithuanian.lproj/Localizable.strings +trans.lv = UI/MainUI/Latvian.lproj/Localizable.strings trans.mk_MK = UI/MainUI/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/MainUI/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/MainUI/Dutch.lproj/Localizable.strings @@ -201,6 +206,7 @@ trans.hu = UI/Common/Hungarian.lproj/Localizable.strings trans.is = UI/Common/Icelandic.lproj/Localizable.strings trans.it = UI/Common/Italian.lproj/Localizable.strings trans.lt = UI/Common/Lithuanian.lproj/Localizable.strings +trans.lv = UI/Common/Latvian.lproj/Localizable.strings trans.mk_MK = UI/Common/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/Common/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/Common/Dutch.lproj/Localizable.strings @@ -237,6 +243,7 @@ trans.hu = UI/AdministrationUI/Hungarian.lproj/Localizable.strings trans.is = UI/AdministrationUI/Icelandic.lproj/Localizable.strings trans.it = UI/AdministrationUI/Italian.lproj/Localizable.strings trans.lt = UI/AdministrationUI/Lithuanian.lproj/Localizable.strings +trans.lv = UI/AdministrationUI/Latvian.lproj/Localizable.strings trans.mk_MK = UI/AdministrationUI/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/AdministrationUI/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/AdministrationUI/Dutch.lproj/Localizable.strings @@ -273,6 +280,7 @@ trans.hu = SoObjects/Appointments/Hungarian.lproj/Localizable.strings trans.is = SoObjects/Appointments/Icelandic.lproj/Localizable.strings trans.it = SoObjects/Appointments/Italian.lproj/Localizable.strings trans.lt = SoObjects/Appointments/Lithuanian.lproj/Localizable.strings +trans.lv = SoObjects/Appointments/Latvian.lproj/Localizable.strings trans.mk_MK = SoObjects/Appointments/Macedonian.lproj/Localizable.strings trans.nb_NO = SoObjects/Appointments/NorwegianBokmal.lproj/Localizable.strings trans.nl = SoObjects/Appointments/Dutch.lproj/Localizable.strings @@ -309,6 +317,7 @@ trans.hu = SoObjects/Contacts/Hungarian.lproj/Localizable.strings trans.is = SoObjects/Contacts/Icelandic.lproj/Localizable.strings trans.it = SoObjects/Contacts/Italian.lproj/Localizable.strings trans.lt = SoObjects/Contacts/Lithuanian.lproj/Localizable.strings +trans.lv = SoObjects/Contacts/Latvian.lproj/Localizable.strings trans.mk_MK = SoObjects/Contacts/Macedonian.lproj/Localizable.strings trans.nb_NO = SoObjects/Contacts/NorwegianBokmal.lproj/Localizable.strings trans.nl = SoObjects/Contacts/Dutch.lproj/Localizable.strings @@ -345,6 +354,7 @@ trans.hu = SoObjects/Mailer/Hungarian.lproj/Localizable.strings trans.is = SoObjects/Mailer/Icelandic.lproj/Localizable.strings trans.it = SoObjects/Mailer/Italian.lproj/Localizable.strings trans.lt = SoObjects/Mailer/Lithuanian.lproj/Localizable.strings +trans.lv = SoObjects/Mailer/Latvian.lproj/Localizable.strings trans.mk_MK = SoObjects/Mailer/Macedonian.lproj/Localizable.strings trans.nb_NO = SoObjects/Mailer/NorwegianBokmal.lproj/Localizable.strings trans.nl = SoObjects/Mailer/Dutch.lproj/Localizable.strings @@ -381,6 +391,7 @@ trans.hu = UI/MailPartViewers/Hungarian.lproj/Localizable.strings trans.is = UI/MailPartViewers/Icelandic.lproj/Localizable.strings trans.it = UI/MailPartViewers/Italian.lproj/Localizable.strings trans.lt = UI/MailPartViewers/Lithuanian.lproj/Localizable.strings +trans.lv = UI/MailPartViewers/Latvian.lproj/Localizable.strings trans.mk_MK = UI/MailPartViewers/Macedonian.lproj/Localizable.strings trans.nb_NO = UI/MailPartViewers/NorwegianBokmal.lproj/Localizable.strings trans.nl = UI/MailPartViewers/Dutch.lproj/Localizable.strings diff --git a/NEWS b/NEWS index cdc86ddcd..2c8530f83 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ Enhancements - [core] now possible to {un}subscribe to folders using sogo-tool - [eas] added photo support for GAL search operations - [web] added custom fields support from Thunderbird's address book + - [web] added Latvian (lv) translation - thanks to Juris Balandis Bug fixes - [core] fixed calendar component move across collections (#4116) diff --git a/SoObjects/Appointments/English.lproj/Localizable.strings b/SoObjects/Appointments/English.lproj/Localizable.strings index 84f5e5d7d..da4f31192 100644 --- a/SoObjects/Appointments/English.lproj/Localizable.strings +++ b/SoObjects/Appointments/English.lproj/Localizable.strings @@ -24,6 +24,8 @@ vtodo_class2 = "(Confidential task)"; "location_label" = "Location"; "summary_label" = "Summary"; "comment_label" = "Comment"; +"organizer_label" = "Organizer"; +"attendee_label" = "Attendee"; /* Invitation */ "Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\""; "(sent by %{SentBy}) " = "(sent by %{SentBy}) "; diff --git a/SoObjects/Appointments/French.lproj/Localizable.strings b/SoObjects/Appointments/French.lproj/Localizable.strings index e920dd885..4eaa1b987 100644 --- a/SoObjects/Appointments/French.lproj/Localizable.strings +++ b/SoObjects/Appointments/French.lproj/Localizable.strings @@ -18,10 +18,14 @@ vtodo_class2 = "(Tâche confidentielle)"; "calendar_label" = "Agenda "; "startDate_label" = "Début "; "endDate_label" = "Fin "; +"time_label" = "Date"; +"to_label" = "au"; "due_label" = "Fin prévue :"; "location_label" = "Lieu "; "summary_label" = "Titre :"; "comment_label" = "Description :"; +"organizer_label" = "Organisateur"; +"attendee_label" = "Participants "; /* Invitation */ "Event Invitation: \"%{Summary}\"" = "Invitation à la réunion : «%{Summary}»"; "(sent by %{SentBy}) " = "(envoyé par %{SentBy}) "; diff --git a/SoObjects/Appointments/German.lproj/Localizable.strings b/SoObjects/Appointments/German.lproj/Localizable.strings index 697a20413..ecec438dd 100644 --- a/SoObjects/Appointments/German.lproj/Localizable.strings +++ b/SoObjects/Appointments/German.lproj/Localizable.strings @@ -22,6 +22,8 @@ vtodo_class2 = "(Vertrauliche Aufgabe)"; "location_label" = "Ort"; "summary_label" = "Zusammenfassung:"; "comment_label" = "Kommentar:"; +"organizer_label" = "Organisator"; +"attendee_label" = "Teilnehmer"; /* Invitation */ "Event Invitation: \"%{Summary}\"" = "Termineinladung: \"%{Summary}\""; "(sent by %{SentBy}) " = "(gesendet von %{SentBy}) "; diff --git a/SoObjects/Appointments/Latvian.lproj/Localizable.strings b/SoObjects/Appointments/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..9bc094976 --- /dev/null +++ b/SoObjects/Appointments/Latvian.lproj/Localizable.strings @@ -0,0 +1,64 @@ +"Inviting the following persons is prohibited:" = "Šo personu uzaicināšana ir aizliegta:"; +"Personal Calendar" = "Personiskais kalendārs"; +vevent_class0 = "(Publisks notikums)"; +vevent_class1 = "(Privāts notikums)"; +vevent_class2 = "(Konfidenciāls notikums)"; + +vtodo_class0 = "(Publisks uzdevums)"; +vtodo_class1 = "(Privāts uzdevums)"; +vtodo_class2 = "(Konfidenciāls uzdevums)"; +/* Receipts */ +"The event \"%{Summary}\" was created" = "Notikums \"%{Summary}\" ir izveidots"; +"The event \"%{Summary}\" was deleted" = "Notikums \"%{Summary}\" ir dzēsts"; +"The event \"%{Summary}\" was updated" = "Notikums \"%{Summary}\" ir atjaunināts"; +"The following attendees(s) were notified" = "Paziņojums nosūtīts šiem dalībniekiem"; +"The following attendees(s) were added" = "Pievienoti šādi dalībnieki"; +"The following attendees(s) were removed" = "Dzēsti šādi dalībnieki"; +/* IMIP messages */ +"calendar_label" = "Kalendārs"; +"startDate_label" = "Sākums"; +"endDate_label" = "Beigas"; +"time_label" = "Laiks"; +"to_label" = "kam"; +"due_label" = "Gala termiņš"; +"location_label" = "Vieta"; +"summary_label" = "Kopsavilkums"; +"comment_label" = "Komentārs"; +"organizer_label" = "Organizētājs"; +"attendee_label" = "Dalībnieks"; +/* Invitation */ +"Event Invitation: \"%{Summary}\"" = "Pasākuma ielūgums: \"%{Summary}\""; +"(sent by %{SentBy}) " = "(sūtīja %{SentBy}) "; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText} ielūdza Jūs uz %{Summary}.\n\nSākums: %{StartDate}\nBeigas: %{EndDate}\nApraksts: %{Description}"; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText} ielūdza Jūs uz %{Summary}.\n\nSākums: %{StartDate} %{StartTime}\nBeigas: %{EndDate} %{EndTime}\nApraksts: %{Description}"; +/* Deletion */ +"Event Cancelled: \"%{Summary}\"" = "Atcelts pasākums: \"%{Summary}\""; +"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" += "%{Organizer} %{SentByText} atcēla notikumu: %{Summary}.\n\nSākums: %{StartDate}\nBeigas: %{EndDate}\nApraksts: %{Description}"; +"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" += "%{Organizer} %{SentByText} atcēla notikumu: %{Summary}.\n\nSākums: %{StartDate} %{StartTime}\nBeigas: %{EndDate} %{EndTime}\nApraksts: %{Description}"; +/* Update */ +"The appointment \"%{Summary}\" for the %{OldStartDate} has changed" += "Tikšanās \"%{Summary}\" %{OldStartDate} ir mainīta"; +"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed" += "Tikšanās \"%{Summary}\" %{OldStartDate} %{OldStartTime} ir mainīta"; +"The following parameters have changed in the \"%{Summary}\" meeting:" += "Plānotā tikšanās \"%{Summary}\" ir mainīta, ir veiktas šādas izmaiņas:"; +"Please accept or decline those changes." += "Lūdzu pieņemt vai noraidīt šīs izmaiņas."; +/* Reply */ +"Accepted invitation: \"%{Summary}\"" = "Akceptēt uzaicinājumu: \"%{Summary}\""; +"Declined invitation: \"%{Summary}\"" = "Noraidīt uzaicinājumu: \"%{Summary}\""; +"Delegated invitation: \"%{Summary}\"" = "Deleģēt uzaicinājumu: \"%{Summary}\""; +"Not yet decided on invitation: \"%{Summary}\"" = "Vēl nav izlemts par uzaicinājumu: \"%{Summary}\""; +"%{Attendee} %{SentByText}has accepted your event invitation." += "%{Attendee} %{SentByText}ir akceptējis uzaicinājumu piedalīties pasākumā."; +"%{Attendee} %{SentByText}has declined your event invitation." += "%{Attendee} %{SentByText} ir noraidījis jūsu uzaicinājumu piedalīties pasākumā."; +"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}." += "%{Attendee} %{SentByText} deleģējusi uzaicinājumu %{Delegate}."; +"%{Attendee} %{SentByText}has not yet decided upon your event invitation." += "%{Attendee} %{SentByText} vēl nav izlemts par jūsu uzaicinājumu piedalīties pasākumā."; +/* Resources */ +"Cannot access resource: \"%{Cn} %{SystemEmail}\"" = "Nevar piekļūt resursiem: \"%{Cn} %{SystemEmail}\""; +"Maximum number of simultaneous bookings (%{NumberOfSimultaneousBookings}) reached for resource \"%{Cn} %{SystemEmail}\". The conflicting event is \"%{EventTitle}\", and starts on %{StartDate}." = "Maksimālais skaits vienlaicīgām rezervācijām (%{NumberOfSimultaneousBookings}) sasniedza resursu \"%{Cn} %{SystemEmail}\". Strīdu notikums ir \"%{EventTitle}\", un sākas %{StartDate}."; diff --git a/SoObjects/Appointments/Polish.lproj/Localizable.strings b/SoObjects/Appointments/Polish.lproj/Localizable.strings index b5ea88b64..e72a4dbde 100644 --- a/SoObjects/Appointments/Polish.lproj/Localizable.strings +++ b/SoObjects/Appointments/Polish.lproj/Localizable.strings @@ -18,10 +18,14 @@ vtodo_class2 = "(Zadanie poufne)"; "calendar_label" = "Kalendarz"; "startDate_label" = "Początek"; "endDate_label" = "Koniec"; +"time_label" = "Data"; +"to_label" = "do"; "due_label" = "Termin"; "location_label" = "Miejsce"; "summary_label" = "Podsumowanie"; "comment_label" = "Komentarz"; +"organizer_label" = "Organizator"; +"attendee_label" = "Uczestnik"; /* Invitation */ "Event Invitation: \"%{Summary}\"" = "Zaproszenie na wydarzenie: \"%{Summary}\""; "(sent by %{SentBy}) " = "(wysłane przez %{SentBy}) "; diff --git a/SoObjects/Appointments/TurkishTurkey.lproj/Localizable.strings b/SoObjects/Appointments/TurkishTurkey.lproj/Localizable.strings index c5ea537ca..6250d182b 100644 --- a/SoObjects/Appointments/TurkishTurkey.lproj/Localizable.strings +++ b/SoObjects/Appointments/TurkishTurkey.lproj/Localizable.strings @@ -11,33 +11,37 @@ vtodo_class2 = "(Gizli görev)"; "The event \"%{Summary}\" was created" = "\"%{Summary}\" etkinliği oluşturuldu"; "The event \"%{Summary}\" was deleted" = "\"%{Summary}\" etkinliği silindi"; "The event \"%{Summary}\" was updated" = "\"%{Summary}\" etkinliği güncellendi"; -"The following attendees(s) were notified" = "Şu katılımcı(lar) haberdar edilidi"; +"The following attendees(s) were notified" = "Şu katılımcı(lar) bilgilendirildi"; "The following attendees(s) were added" = "Şu katılımcılar eklendi"; "The following attendees(s) were removed" = "Şu katılımcılar çıkarıldı"; /* IMIP messages */ "calendar_label" = "Takvim"; "startDate_label" = "Başlangıç"; "endDate_label" = "Bitiş"; +"time_label" = "Saat"; +"to_label" = "alıcı"; "due_label" = "Kapanış Tarihi"; "location_label" = "Konum"; "summary_label" = "Özet"; "comment_label" = "Açıklama"; +"organizer_label" = "Düzenleyen"; +"attendee_label" = "Katılımcı"; /* Invitation */ "Event Invitation: \"%{Summary}\"" = "Etkinlik Daveti: \"%{Summary}\""; "(sent by %{SentBy}) " = "(%{SentBy} tarafından gönderilidi) "; "%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText}sizi %{Summary} etkinliğine davet etti.\n\nBaşlangıç: %{StartDate}\nBitiş: %{EndDate}\nTanım: %{Description}"; -"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText}sizi %{Summary} etkinliğine davet etti.\n\nBaşlangıç: %{StartDate} saat %{StartTime}\nBitiş: %{EndDate} saat %{EndTime}\nTanım: %{Description}"; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText} sizi %{Summary} etkinliğine davet etti.\n\nBaşlangıç Tarihi: %{StartDate} saat %{StartTime}\nBitiş Tarihi: %{EndDate} saat %{EndTime}\nAçıklama: %{Description}"; /* Deletion */ "Event Cancelled: \"%{Summary}\"" = "Etkinlik İptal Edildi: \"%{Summary}\""; "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText}şu etkiliği iptal etti: %{Summary}.\n\nBaşlangıç: %{StartDate}\nBitiş: %{EndDate}\nTanım: %{Description}"; "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" -= "%{Organizer} %{SentByText}şu etkinliği iptal etti: %{Summary}.\n\nBaşlangıç: %{StartDate} saat %{StartTime}\nBitiş: %{EndDate} saat %{EndTime}\nTanım: %{Description}"; += "%{Organizer} %{SentByText} %{Summary} etkinliğini iptal etti.\n\nBaşlangıç Tarihi: %{StartDate} saat %{StartTime}\nBitiş Tarihi: %{EndDate} saat %{EndTime}\nAçıklama: %{Description}"; /* Update */ "The appointment \"%{Summary}\" for the %{OldStartDate} has changed" = "%{OldStartDate} tarihindeki \"%{Summary}\" çalışması değişti"; "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed" -= " %{OldStartDate} tarihli ve %{OldStartTime} başlangıç saatli \"%{Summary}\" çalışması değişti"; += " %{OldStartDate} tarihli ve %{OldStartTime} başlangıç saatli \"%{Summary}\" çalışması değiştirildi"; "The following parameters have changed in the \"%{Summary}\" meeting:" = "\"%{Summary}\" buluşmasının şu özellikleri değişti:"; "Please accept or decline those changes." diff --git a/SoObjects/Contacts/Latvian.lproj/Localizable.strings b/SoObjects/Contacts/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..942b7861c --- /dev/null +++ b/SoObjects/Contacts/Latvian.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"Personal Address Book" = "Personiskā adrešu grāmata"; +"Collected Address Book" = "Savāktā adrešu grāmata"; diff --git a/SoObjects/Mailer/GNUmakefile b/SoObjects/Mailer/GNUmakefile index 5e08d71f7..c15ee7303 100644 --- a/SoObjects/Mailer/GNUmakefile +++ b/SoObjects/Mailer/GNUmakefile @@ -77,6 +77,8 @@ Mailer_RESOURCE_FILES += \ SOGoMailIcelandicReply.wo \ SOGoMailItalianForward.wo \ SOGoMailItalianReply.wo \ + SOGoMailLatvianForward.wo \ + SOGoMailLatvianReply.wo \ SOGoMailLithuanianForward.wo \ SOGoMailLithuanianReply.wo \ SOGoMailMacedonianForward.wo \ diff --git a/SoObjects/Mailer/Latvian.lproj/Localizable.strings b/SoObjects/Mailer/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..1a4d8f0e9 --- /dev/null +++ b/SoObjects/Mailer/Latvian.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"OtherUsersFolderName" = "Citi lietotāji"; +"SharedFoldersName" = "Koplietotās mapes"; diff --git a/SoObjects/Mailer/SOGoMailForward.h b/SoObjects/Mailer/SOGoMailForward.h index b217db1f0..a1f222eda 100644 --- a/SoObjects/Mailer/SOGoMailForward.h +++ b/SoObjects/Mailer/SOGoMailForward.h @@ -88,6 +88,9 @@ @interface SOGoMailItalianForward : SOGoMailForward @end +@interface SOGoMailLatvianForward : SOGoMailForward +@end + @interface SOGoMailLithuanianForward : SOGoMailForward @end diff --git a/SoObjects/Mailer/SOGoMailForward.m b/SoObjects/Mailer/SOGoMailForward.m index fc5a75bc1..1254edfcf 100644 --- a/SoObjects/Mailer/SOGoMailForward.m +++ b/SoObjects/Mailer/SOGoMailForward.m @@ -299,6 +299,9 @@ @implementation SOGoMailItalianForward @end +@implementation SOGoMailLatvianForward +@end + @implementation SOGoMailLithuanianForward @end diff --git a/SoObjects/Mailer/SOGoMailReply.h b/SoObjects/Mailer/SOGoMailReply.h index cd97bd52c..75f304a29 100644 --- a/SoObjects/Mailer/SOGoMailReply.h +++ b/SoObjects/Mailer/SOGoMailReply.h @@ -87,6 +87,9 @@ @interface SOGoMailItalianReply : SOGoMailReply @end +@interface SOGoMailLatvianReply : SOGoMailReply +@end + @interface SOGoMailLithuanianReply : SOGoMailReply @end diff --git a/SoObjects/Mailer/SOGoMailReply.m b/SoObjects/Mailer/SOGoMailReply.m index ac14495a4..7bdd1b453 100644 --- a/SoObjects/Mailer/SOGoMailReply.m +++ b/SoObjects/Mailer/SOGoMailReply.m @@ -135,6 +135,9 @@ @implementation SOGoMailItalianReply @end +@implementation SOGoMailLatvianReply +@end + @implementation SOGoMailLithuanianReply @end diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index 1c0889ec1..824cd60e4 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -57,6 +57,7 @@ "Hungarian", "Icelandic", "Italian", + "Latvian", "Lithuanian", "Macedonian", "NorwegianBokmal", diff --git a/Tests/Integration/preferences.py b/Tests/Integration/preferences.py index 0389cf09d..cb92dfa2a 100644 --- a/Tests/Integration/preferences.py +++ b/Tests/Integration/preferences.py @@ -12,7 +12,7 @@ import sogoLogin # this should probably be fetched magically... SOGoSupportedLanguages = [ "Arabic", "Basque", "Catalan", "ChineseTaiwan", "Croatian", "Czech", "Dutch", "Danish", "Welsh", "English", "Finnish", "SpanishSpain", "SpanishArgentina", "French", "German", "Hebrew", - "Icelandic", "Italian", "Lithuanian", "Macedonian", "Hungarian", "Portuguese", "BrazilianPortuguese", + "Icelandic", "Italian", "Latvian", "Lithuanian", "Macedonian", "Hungarian", "Portuguese", "BrazilianPortuguese", "NorwegianBokmal", "NorwegianNynorsk", "Polish", "Russian", "Serbian", "Slovak", "Slovenian", "Swedish", "TurkishTurkey", "Ukrainian" ]; daysBetweenResponseList=[1,2,3,5,7,14,21,30] diff --git a/UI/AdministrationUI/Latvian.lproj/Localizable.strings b/UI/AdministrationUI/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..254891820 --- /dev/null +++ b/UI/AdministrationUI/Latvian.lproj/Localizable.strings @@ -0,0 +1,26 @@ +/* this file is in UTF-8 format! */ + +"Help" = "Palīdzība"; +"Close" = "Aizvērt"; +"Modules" = "Moduļi"; +/* Modules short names */ +"ACLs" = "ACLs"; +/* Modules titles */ +"ACLs_title" = "Lietotāju mapes ACLs pārvaldība"; +/* Modules descriptions */ +"ACLs_description" = "

Access Control Lists administrēšanas modulis ļauj mainīt ACL lietotāja kalendāru un adrešu grāmatu.

Lai modificētu ACL lietotāja mapi ierakstiet lietotāja vārdu meklēšanas laukā loga augšdaļā un veiciet dubultklikšķi uz vajadzīgās mapes.

"; +"Name or Email" = "Vārds vai e-pasts"; +/* Rights module: initial search message */ +"Start a search to edit the rights" = "Sākt meklēšanu, lai rediģētu tiesības"; +/* Rights module: Empty search result */ +"No matching user" = "Neviens atbilstošs lietotājs"; +/* Rights module: no selection */ +"No resource selected" = "Nav atlasīts resurss"; +"Add User" = "Pievienot lietotāju"; +"Subscribe User" = "Abonēt lietotāju"; +"Rights" = "Tiesības"; +"Search Users" = "Meklēt lietotājus"; +"users found" = "atrasti lietotāji"; +"No resource" = "Nav resursu"; +"Any Authenticated User" = "Visi autentificētie lietotāji"; +"Public Access" = "Publiska piekļuve"; diff --git a/UI/Common/Dutch.lproj/Localizable.strings b/UI/Common/Dutch.lproj/Localizable.strings index 7cb87da80..036aa2206 100644 --- a/UI/Common/Dutch.lproj/Localizable.strings +++ b/UI/Common/Dutch.lproj/Localizable.strings @@ -69,14 +69,6 @@ "delegate is organizer" = "De gedelegeerde is de organisator. Geef een andere gedelegeerde op."; "delegate is a participant" = "De gedelegeerde is al een deelnemer."; "delegate is a group" = "U heeft een groepsadres opgegeven. U kunt alleen delegeren aan een uniek persoon."; -"Snooze for " = "Sluimer nog "; -"5 minutes" = "5 minuten"; -"10 minutes" = "10 minuten"; -"15 minutes" = "15 minuten"; -"30 minutes" = "30 minuten"; -"45 minutes" = "45 minuten"; -"1 hour" = "1 uur"; -"1 day" = "1 dag"; /* common buttons */ "OK" = "OK"; @@ -89,6 +81,15 @@ "Start" = "Begin"; "Due Date" = "Verloopdatum"; "Location" = "Plaats"; +"Snooze" = "Sluimeren"; +"Snooze for " = "Sluimer nog "; +"5 minutes" = "5 minuten"; +"10 minutes" = "10 minuten"; +"15 minutes" = "15 minuten"; +"30 minutes" = "30 minuten"; +"45 minutes" = "45 minuten"; +"1 hour" = "1 uur"; +"1 day" = "1 dag"; /* mail labels */ "Important" = "Belangrijk"; @@ -118,18 +119,27 @@ /* Authentication failed */ "Wrong username or password." = "Onjuiste gebruikersnaam of wachtwoord."; -/* Error message display bellow search field when the search string has less than the required number of characters */ +/* Error message displayed bellow search field when the search string has less than the required number of characters */ "Enter at least %{minimumSearchLength} characters" = "Voer minstens %{minimumSearchLength} tekens in"; +/* Error message displayed when a file upload exceeds WOMaxUploadSize */ +"File size upload limit reached" = "Bestand grote limiet is bereikt"; + /* Toggle visibility (ex: mail account in left navigation menu) */ "Toggle visibility" = "Tonen/verbergen"; +/* Toggle multiple items at the same time (hotkeys cheatsheet) */ +"Toggle range of items" = "Reeks items schakelen"; + /* Question mark shows list of hotkeys */ "Show or hide this help" = "Toon of verberg deze hulp"; /* Space key */ "key_space" = "space"; +/* Shift and space key */ +"key_shift+space" = "shift + spatie"; + /* Up arrow key */ "key_up" = "↑"; diff --git a/UI/Common/Finnish.lproj/Localizable.strings b/UI/Common/Finnish.lproj/Localizable.strings index 8e2d706fa..8e053c990 100644 --- a/UI/Common/Finnish.lproj/Localizable.strings +++ b/UI/Common/Finnish.lproj/Localizable.strings @@ -69,14 +69,6 @@ "delegate is organizer" = "Valtuutettu on järjestäjä. Ole hyvä ja valitse toinen valtuutettu."; "delegate is a participant" = "Valtuutettu on jo osallistuja."; "delegate is a group" = "Annettu osoite on ryhmäosoite. Voit valtuuttaa vain yksittäisiä henkilöitä."; -"Snooze for " = "Torku"; -"5 minutes" = "5 minuuttia"; -"10 minutes" = "10 minuuttia"; -"15 minutes" = "15 minuuttia"; -"30 minutes" = "30 minuuttia"; -"45 minutes" = "45 minuuttia"; -"1 hour" = "1 tunti"; -"1 day" = "1 päivä"; /* common buttons */ "OK" = "OK"; @@ -89,6 +81,15 @@ "Start" = "Alkaa"; "Due Date" = "Päättyy"; "Location" = "Sijainti"; +"Snooze" = "Torkku"; +"Snooze for " = "Torku"; +"5 minutes" = "5 minuuttia"; +"10 minutes" = "10 minuuttia"; +"15 minutes" = "15 minuuttia"; +"30 minutes" = "30 minuuttia"; +"45 minutes" = "45 minuuttia"; +"1 hour" = "1 tunti"; +"1 day" = "1 päivä"; /* mail labels */ "Important" = "Tärkeä"; @@ -118,18 +119,27 @@ /* Authentication failed */ "Wrong username or password." = "Väärä käyttäjätunnus tai salasana."; -/* Error message display bellow search field when the search string has less than the required number of characters */ +/* Error message displayed bellow search field when the search string has less than the required number of characters */ "Enter at least %{minimumSearchLength} characters" = "Syötä vähintään %{minimumSearchLength} merkkiä"; +/* Error message displayed when a file upload exceeds WOMaxUploadSize */ +"File size upload limit reached" = "Tiedostolatauksen kokorajoitus saavutettu"; + /* Toggle visibility (ex: mail account in left navigation menu) */ "Toggle visibility" = "Vaihda näkyvyyttä"; +/* Toggle multiple items at the same time (hotkeys cheatsheet) */ +"Toggle range of items" = "Valitse kohteet"; + /* Question mark shows list of hotkeys */ "Show or hide this help" = "Näytä tai piilota tämä apu"; /* Space key */ "key_space" = "space"; +/* Shift and space key */ +"key_shift+space" = "vaihto + välilyönti"; + /* Up arrow key */ "key_up" = "↑"; diff --git a/UI/Common/Latvian.lproj/Localizable.strings b/UI/Common/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..1e541748a --- /dev/null +++ b/UI/Common/Latvian.lproj/Localizable.strings @@ -0,0 +1,183 @@ +/* this file is in UTF-8 format! */ + +/* toolbars */ +"Save" = "Saglabāt"; +"Close" = "Aizvērt"; +"Edit User Rights" = "Rediģēt lietotāja tiesības"; +"Home" = "Sākums"; +"Calendar" = "Kalendārs"; +"Address Book" = "Adrešu grāmata"; +"Mail" = "E-pasts"; +"Preferences" = "Preferences"; +"Administration" = "Administrēšana"; +"Disconnect" = "Atvienot"; +"Toggle Menu" = "Pārslēgt izvēlni"; +"Right Administration" = "Tiesību administrēšana"; +"Log Console (dev.)" = "Log konsole (dev.)"; +"User" = "Lietotājs"; +"Vacation message is enabled" = "Atvaļinājuma ziņa ir iespējota"; +"Help" = "Palīdzība"; +"noJavascriptError" = "SOGo prasa Javascript, lai palaistu. Lūdzu, pārliecinieties, vai šī opcija ir aktivizēta un pieejama, pārlūkprogrammas iestatījumos."; +"noJavascriptRetry" = "Mēģināt vēlreiz"; +"Owner" = "Īpašnieks"; +"Publish the Free/Busy information" = "Publicēt informāciju Brīvs / Aizņemts "; +"Add..." = "Pievienot..."; +"Remove" = "Noņemt"; +"Subscribe User" = "Abonēt lietotāju"; +"Any Authenticated User" = "Visi autentificētie lietotāji"; +"Public Access" = "Publiska piekļuve"; +"Any user not listed above" = "Jebkurš lietotājs, kas nav iepriekš minētas"; +"Anybody accessing this resource from the public area" = "Ikviena piekļuvei šim resursam publiskajā zonā"; +"Sorry, the user rights can not be configured for that object." = "Atvainojiet, lietotāja tiesības nevar konfigurēt šo objektu."; +"Any user with an account on this system will be able to access your mailbox \"%{0}\". Are you certain you trust them all?" + = "Jebkurš lietotājs, kuram ir konts šajā sistēmā varēs piekļūt jūsu pastkastei \"%{0}\". Vai esat pārliecināts, ka uzticaties viņiem visiem?"; +"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?" + = "Jebkurš lietotājs, kuram ir konts šajā sistēmā varēs piekļūt jūsu kalendāram \"%{0}\". Vai esat pārliecināts, ka uzticaties viņiem visiem?"; +"Potentially anyone on the Internet will be able to access your calendar \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?" + = "Potenciāli ikviens interneta lietotājs varēs piekļūt jūsu kalendāram \"%{0}\", pat ja tiem nav konta šajā sistēmā. Vai šī informācija ir piemērota publiskajam internetam?"; +"Any user with an account on this system will be able to access your address book \"%{0}\". Are you certain you trust them all?" + = "Jebkurš lietotājs, kuram ir konts šajā sistēmā varēs piekļūt jūsu adrešu grāmatai \"%{0}\". Vai esat pārliecināts, ka uzticaties viņiem visiem?"; +"Potentially anyone on the Internet will be able to access your address book \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?" + = "Potenciāli ikviens interneta lietotājs varēs piekļūt jūsu adrešu grāmatai \"%{0}\", pat ja tiem nav konta šajā sistēmā. Vai šī informācija ir piemērota publiskajam internetam?"; +"Give Access" = "Dot piekļuvi"; +"Keep Private" = "Turēt privātu"; + +/* generic.js */ +"Unable to subscribe to that folder!" + = "Nevar pierakstīties uz šo mapi!"; +"You cannot subscribe to a folder that you own!" + = "Jūs nevarat abonēt mapi, kas tev pieder!"; +"Unable to unsubscribe from that folder!" + = "Nevar atcelt šīs mapes abonēšanu !"; +"You cannot unsubscribe from a folder that you own!" + = "Nevar atcelt abonēšanu mapei, kas tev pieder!"; +"Unable to rename that folder!" = "Nevar pārdēvēt šo mapi!"; +"You have already subscribed to that folder!" + = "Jūs jau esat abonējis šo mapi!"; +"The user rights cannot be edited for this object!" + = "Lietotāja tiesības, nevar rediģēt, šo objektu!"; +"A folder by that name already exists." = "Mape ar šādu nosaukumu jau pastāv."; +"You cannot create a list in a shared address book." + = "Nevar izveidot sarakstu koplietojamā adrešu grāmatā."; +"Warning" = "Brīdinājums"; +"Can't contact server" = "Radās kļūda, sazinoties ar serveri. Lūdzu, vēlāk mēģiniet vēlreiz."; +"You are not allowed to access this module or this system. Please contact your system administrator." += "Jums nav atļaujas piekļūt šim modulim vai sistēmai. Lūdzu, sazinieties ar sistēmas administratoru."; +"You don't have the required privileges to perform the operation." += "Jums nav nepieciešamo tiesību, lai veiktu šo darbību."; +"noEmailForDelegation" = "Norādiet adresi, uz kuru vēlaties deleģēt jūsu uzaicinājumu."; +"delegate is organizer" = "Delegāts ir organizators. Lūdzu, norādiet citu pārstāvi."; +"delegate is a participant" = "Delegāts ir jau dalībnieks."; +"delegate is a group" = "Norādītā adrese sakrīt ar grupu. Var tikai deleģēt unikāla persona."; + +/* common buttons */ +"OK" = "OK"; +"Cancel" = "Atcelt"; +"Yes" = "Jā"; +"No" = "Nē"; + +/* alarms */ +"Reminder" = "Atgādinājums"; +"Start" = "Sākums"; +"Due Date" = "Izpildes datums"; +"Location" = "Vieta"; +"Snooze" = "Atlikt"; +"Snooze for " = "Atlikt uz"; +"5 minutes" = "5 minūtes"; +"10 minutes" = "10 minūtes"; +"15 minutes" = "15 minūtes"; +"30 minutes" = "30 minūtes"; +"45 minutes" = "45 minūtes"; +"1 hour" = "1 stunda"; +"1 day" = "1 diena"; + +/* mail labels */ +"Important" = "Svarīgs"; +"Work" = "Darbs"; +"Personal" = "Personisks"; +"To Do" = "Uzdevums"; +"Later" = "Vēlāk"; +"a2_Sunday" = "Sv"; +"a2_Monday" = "Pr"; +"a2_Tuesday" = "Ot"; +"a2_Wednesday" = "Tr"; +"a2_Thursday" = "Ce"; +"a2_Friday" = "Pi"; +"a2_Saturday" = "Se"; +"Access Rights" = "Piekļuves tiesības"; +"Add User" = "Pievienot lietotāju"; +"Loading" = "Ielādēšana"; +"No such user." = "Nav šādu lietotāju."; +"You cannot (un)subscribe to a folder that you own!" = "Nevar (ne) abonēt mapi, kas tev pieder!"; + +/* Authentication username */ +"Username" = "Lietotājvārds"; + +/* Authentication password */ +"Password" = "Parole"; + +/* Authentication failed */ +"Wrong username or password." = "Nepareizs lietotājvārds vai parole."; + +/* Error message displayed bellow search field when the search string has less than the required number of characters */ +"Enter at least %{minimumSearchLength} characters" = "Jāievada vismaz %{minimumSearchLength} rakstzīmes"; + +/* Error message displayed when a file upload exceeds WOMaxUploadSize */ +"File size upload limit reached" = "Sasniegts augšupielādes faila lielums"; + +/* Toggle visibility (ex: mail account in left navigation menu) */ +"Toggle visibility" = "Pārslēgt redzamību"; + +/* Toggle multiple items at the same time (hotkeys cheatsheet) */ +"Toggle range of items" = "Pārslēgt vienību diapazonu"; + +/* Question mark shows list of hotkeys */ +"Show or hide this help" = "Parādīt vai paslēpt šo palīdzība"; + +/* Space key */ +"key_space" = "space"; + +/* Shift and space key */ +"key_shift+space" = "shift + space"; + +/* Up arrow key */ +"key_up" = "↑"; + +/* Down arrow key */ +"key_down" = "↓"; + +/* Left arrow key */ +"key_left" = "←"; + +/* Right arrow key */ +"key_right" = "→"; + +/* Shift and up arrow combo keys */ +"key_shift+up" = "shift + ↑"; + +/* Shift and down arrow combo keys */ +"key_shift+down" = "shift + ↓"; + +/* Backspace key */ +"key_backspace" = "backspace"; + +/* Hotkey to start a search */ +"hotkey_search" = "s"; + +/* Hotkey description to select next list item */ +"View next item" = "Apskatīt nākamo punktu"; + +/* Hotkey description to select previous list item */ +"View previous item" = "Skatīt iepriekšējo punktu"; + +/* Hotkey description to add next list item to selection */ +"Add next item to selection" = "Pievienot nākamo vienību atlasei"; + +/* Hotkey description to add previous list item to selection */ +"Add previous item to selection" = "Pievienot iepriekšējo vienību atlasei"; + +/* Hotkey description to move backward in current view */ +"Move backward" = "Atpakaļ"; + +/* Hotkey description to move forward in current view */ +"Move forward" = "Uz priekšu"; diff --git a/UI/Contacts/Czech.lproj/Localizable.strings b/UI/Contacts/Czech.lproj/Localizable.strings index 55d090a49..395de0fdc 100644 --- a/UI/Contacts/Czech.lproj/Localizable.strings +++ b/UI/Contacts/Czech.lproj/Localizable.strings @@ -175,7 +175,7 @@ "%{0} card(s) copied" = "%{0} kontakt(ů) zkopírováno"; "%{0} card(s) moved" = "%{0} kontakt(ů) přesunuto"; "SoAccessDeniedException" = "Nemůžete zapisovat do tohoto adresáře."; -"Forbidden" = "Nemůžete zapisovat do tohoto adresáře."; +"Forbidden" = "Zakázané"; "Invalid Contact" = "Označený kontakt již neexistuje."; "Unknown Destination Folder" = "Zvolený cílový adresář již neexistuje."; diff --git a/UI/Contacts/Dutch.lproj/Localizable.strings b/UI/Contacts/Dutch.lproj/Localizable.strings index 5fe2a92fb..bfa2969bb 100644 --- a/UI/Contacts/Dutch.lproj/Localizable.strings +++ b/UI/Contacts/Dutch.lproj/Localizable.strings @@ -175,7 +175,7 @@ "%{0} card(s) copied" = "%{0} kaart(en) gekopieerd"; "%{0} card(s) moved" = "%{0} kaart(en) verplaatst"; "SoAccessDeniedException" = "U kunt niet naar dit adresboek schrijven."; -"Forbidden" = "U kunt niet naar dit adresboek schrijven."; +"Forbidden" = "Toegang geweigerd"; "Invalid Contact" = "De geselecteerde contactpersoon bestaat niet meer."; "Unknown Destination Folder" = "Het geselecteerde doeladresboek bestaat niet meer."; diff --git a/UI/Contacts/Finnish.lproj/Localizable.strings b/UI/Contacts/Finnish.lproj/Localizable.strings index bece8995a..d4a0a00ff 100644 --- a/UI/Contacts/Finnish.lproj/Localizable.strings +++ b/UI/Contacts/Finnish.lproj/Localizable.strings @@ -175,7 +175,7 @@ "%{0} card(s) copied" = "%{0} osoitekortti(a) kopioitu"; "%{0} card(s) moved" = "%{0} osoitekortti(a) siirretty"; "SoAccessDeniedException" = "Et voi kirjoittaa tähän osoitekirjaan."; -"Forbidden" = "Et voi kirjoittaa tähän osoitekirjaan."; +"Forbidden" = "Kielletty"; "Invalid Contact" = "Valittua yhteystietoa ei enää ole. "; "Unknown Destination Folder" = "Valittua kohdeosoitekirjaa ei enää ole."; diff --git a/UI/Contacts/French.lproj/Localizable.strings b/UI/Contacts/French.lproj/Localizable.strings index 59be51c52..db414cbdf 100644 --- a/UI/Contacts/French.lproj/Localizable.strings +++ b/UI/Contacts/French.lproj/Localizable.strings @@ -41,6 +41,9 @@ "Move To" = "Déplacer vers"; "Copy To" = "Copier vers"; "Add to" = "Ajouter à"; +"To" = "Destinataire"; +"Carbon Copy (Cc)" = "Copie carbone"; +"Blind Carbon Copy (Bcc)" = "C. carbone cachée"; /* Subheader of empty addressbook */ "No contact" = "Aucun contact"; @@ -258,4 +261,4 @@ "key_create_card" = "c"; /* Hotkey to create a new list */ -"key_create_list" = "l"; \ No newline at end of file +"key_create_list" = "l"; diff --git a/UI/Contacts/Latvian.lproj/Localizable.strings b/UI/Contacts/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..c44c6fd35 --- /dev/null +++ b/UI/Contacts/Latvian.lproj/Localizable.strings @@ -0,0 +1,264 @@ +/* this file is in UTF-8 format! */ + +"Contact" = "Kontakts"; +"Address" = "Adrese"; +"Photos" = "Fotoattēli"; +"Other" = "Cits"; +"Address Books" = "Adrešu grāmatas"; +"Addressbook" = "Adrešu grāmata"; +"Addresses" = "Adreses"; +"Update" = "Atjaunināt"; +"Cancel" = "Atcelt"; +"Common" = "Kopīgs"; +"Contact editor" = "Kontaktpersonu redaktors"; +"Contact viewer" = "Kontaktpersona skatītājs"; +"Email" = "E-pasts"; +"Screen Name" = "Ekrāna vārds"; +"Extended" = "Paplašināts"; +"Fax" = "Fax"; +"Firstname" = "Vārds"; +"Home" = "Mājas"; +"HomePhone" = "Mājas tālrunis"; +"Lastname" = "Uzvārds"; +"Location" = "Vieta"; +"Add a category" = "Pievienot kategorijai"; +"MobilePhone" = "Mobilais tālrunis"; +"Name" = "Nosaukums"; +"OfficePhone" = "Darba tālrunis"; +"Organization" = "Organizācija"; +"Work Phone" = "Tālrunis darbā"; +"Phone" = "Tālrunis"; +"Phones" = "Tālruņi"; +"Postal" = "Pasts"; +"Save" = "Saglabāt"; +"Internet" = "Internets"; +"Unit" = "Vienība"; +"delete" = "dzēst"; +"edit" = "labot"; +"invalidemailwarn" = "Norādītā e-pasta adrese ir nederīga"; +"new" = "jauns"; +"Preferred Phone" = "Vēlamais tālrunis"; +"Move To" = "Pārvietot uz"; +"Copy To" = "Kopēt uz"; +"Add to" = "Pievienot"; +"To" = "Kam"; +"Carbon Copy (Cc)" = "Kopija (Cc)"; +"Blind Carbon Copy (Bcc)" = "Diskrētā kopija (Bcc)"; + +/* Subheader of empty addressbook */ +"No contact" = "Nav kontaktpersonas"; + +/* Subheader of system addressbook */ +"Start a search to browse this address book" = "Sākt meklēt, lai pārlūkotu šo adrešu grāmatu"; + +/* Number of contacts in addressbook; string is prefixed by number */ +"contacts" = "kontakti"; + +/* No contact matching search criteria */ +"No matching contact" = "Neviens atbilstošs kontakts"; + +/* Number of contacts matching search criteria; string is prefixed by number */ +"matching contacts" = "atbilstoši kontakti"; + +/* Number of selected contacts in list */ +"selected" = "atlasīts"; + +/* Empty right pane */ +"No contact selected" = "Nav atlasīta neviena kontaktpersona"; + +/* Tooltips */ +"Create a new address book card" = "Izveidot jaunu adrešu grāmatas kartiņu"; +"Create a new list" = "Izveidot jaunu sarakstu"; +"Edit the selected card" = "Rediģēt atlasīto kartiņu"; +"Send a mail message" = "Nosūtīt e-pasta ziņojumu"; +"Delete selected card or address book" = "Dzēst izvēlēto kartiņu vai adrešu grāmatu"; +"Reload all contacts" = "Pārlādēt visus kontaktus"; +"htmlMailFormat_UNKNOWN" = "Nezināms"; +"htmlMailFormat_FALSE" = "Plain Text"; +"htmlMailFormat_TRUE" = "HTML"; +"Name or Email" = "Vārds vai e-pasts"; +"Category" = "Kategorija"; +"Personal Addressbook" = "Personiskā adrešu grāmata"; +"Search in Addressbook" = "Meklēt adrešu grāmatā"; +"New Card" = "Jauna kartiņa"; +"New List" = "Jauns saraksts"; +"Edit" = "Labot"; +"Properties" = "Rekvizīti"; +"Sharing..." = "Koplieto..."; +"Write" = "Rakstīt"; +"Delete" = "Dzēst"; +"Instant Message" = "Tūlītējais ziņojums"; +"Add..." = "Pievienot..."; +"Remove" = "Noņemt"; +"Please wait..." = "Lūdzu, uzgaidiet..."; +"No possible subscription" = "Nav iespējams abonēt"; +"Preferred" = "Vēlamais"; +"Display" = "Rādīt"; +"Display Name" = "Parādāmais nosaukums"; +"Additional Email" = "Papildu e-pasts"; +"Phone Number" = "Tālruņa numurs"; +"Prefers to receive messages formatted as" = "Vēlas saņemt ziņojumus formātā"; +"Categories" = "Kategorijas"; +"First" = "Vārds"; +"Last" = "Uzvārds"; +"Nickname" = "Iesauka"; +"Telephone" = "Tālrunis"; +"Work" = "Darbs"; +"Mobile" = "Mobilais"; +"Pager" = "Peidžeris"; + +/* categories */ +"contacts_category_labels" = "Kolēģi, konkurenti, klienti, draugi, ģimene, biznesa partneri, piegādātāji, Prese, VIP"; +"New category" = "Jauna kategorija"; + +/* adresses */ +"Title" = "Nosaukums"; +"Service" = "Pakalpojums"; +"Company" = "Uzņēmums"; +"Department" = "Departaments"; +"City" = "Pilsēta"; +"State_Province" = "Štats / province"; +"ZIP_Postal Code" = "ZIP/Pasta indekss"; +"Country" = "Valsts"; +"Web Page" = "Interneta lappuse"; +"Other Infos" = "Cita informācija"; +"Note" = "Piezīme"; +"Timezone" = "Laika josla"; +"Birthday" = "Dzimšanas diena"; +"Birthday (yyyy-mm-dd)" = "Dzimšanas diena (yyyy-mm-dd)"; +"Freebusy URL" = "Aizņemtības URL"; +"Add as..." = "Pievienot kā..."; +"Recipient" = "Adresāts"; +"Carbon Copy" = "Kopija"; +"Blind Carbon Copy" = "Diskrētā kopija"; +"New Addressbook..." = "Jauna adrešu grāmata..."; +"Subscribe to an Addressbook..." = "Parakstīties uz adrešu grāmatu..."; +"Remove the selected Addressbook" = "Noņemt atlasīto adrešu katalogu"; +"Subscribe to a shared folder" = "Parakstīties uz koplietojamu mapi"; +"Search User" = "Meklēt lietotāju"; +"Name of the Address Book" = "Adrešu grāmatas nosaukums"; +"Are you sure you want to delete the selected address book?" += "Vai tiešām vēlaties izdzēst atlasīto adrešu grāmatu?"; +"Are you sure you want to delete the addressbook \"%{0}\"?" += "Vai tiešām vēlaties dzēst adrešu grāmatu \"%{0}\"?"; +"You cannot remove nor unsubscribe from a public addressbook." += "Nevar noņemt nedz atteikties no publiskā adrešu kataloga."; +"You cannot remove nor unsubscribe from your personal addressbook." += "Jūs nevarat noņemt abonementu, no jūsu personiskās adrešu grāmatas."; +"Are you sure you want to delete the selected contacts?" += "Vai tiešām vēlaties izdzēst atlasītās kontaktpersonas?"; +"Are you sure you want to delete the card of %{0}?" = "Vai tiešām vēlaties izdzēst šo kartiņu %{0}?"; +"You cannot delete the card of \"%{0}\"." += "Nevar dzēst kartiņu \"%{0}\"."; +"You cannot subscribe to a folder that you own!" += "Jūs nevarat abonēt mapi, kas jums pieder."; +"Unable to subscribe to that folder!" += "Nevar parakstīties uz šo mapi."; + +/* acls */ +"Access rights to" = "Piekļuves tiesības"; +"For user" = "Lietotājam"; +"Any Authenticated User" = "Visi autentificētie lietotāji"; +"Public Access" = "Publiska piekļuve"; +"This person can add cards to this addressbook." += "Šī persona var pievienot ierakstus adrešu katalogā."; +"This person can edit the cards of this addressbook." += "Šī persona var rediģēt ierakstus adrešu katalogā."; +"This person can list the content of this addressbook." += "Šī persona var skatīt adrešu grāmatas saturu."; +"This person can read the cards of this addressbook." += "Šīs personas var lasīt ierakstus no adrešu kataloga."; +"This person can erase cards from this addressbook." += "Šī persona var dzēst ierakstus no adrešu kataloga."; +"The selected contact has no email address." += "Izvēlētajam kontaktam nav e-pasta adreses."; +"Please select a contact." = "Lūdzu, atlasiet kontaktpersonu."; + +/* Messages for move and copy */ +"%{0} card(s) copied" = "%{0} kartiņa(s) ir nokopēta/s"; +"%{0} card(s) moved" = "%{0} kartiņa(s) ir pārvietota/s"; +"SoAccessDeniedException" = "Jūs nevarat rakstīt adrešu grāmatā."; +"Forbidden" = "Aizliegts"; +"Invalid Contact" = "Atlasītā kontaktpersona vairs nepastāv."; +"Unknown Destination Folder" = "Izvēlētais adresāts adrešu grāmatā vairs nepastāv."; + +/* Lists */ +"List details" = "Saraksta detaļas"; +"List name" = "Saraksta nosaukums"; +"List nickname" = "Saraksta segvārds"; +"List description" = "Saraksta apraksts"; +"Members" = "Locekļi"; +"Contacts" = "Kontakti"; +"Add" = "Pievienot"; +"Lists can't be moved or copied." = "Sarakstus nevar pārvietot vai kopēt."; +"Export" = "Eksportēt"; +"Export Address Book..." = "Eksportēt adrešu grāmatu..."; +"View Raw Source" = "Apskatīt RAW avotu"; + +/* Import */ +"Import Cards" = "Importēt kartiņas"; +"Select a vCard or LDIF file." = "Izvēlieties vCard vai LDIF failu"; +"Upload" = "Augšupielādēt"; +"Uploading" = "Augšupielāde"; +"Done" = "Darīts"; +"An error occured while importing contacts." = "Importējot kontaktpersonas radās kļūda."; +"No card was imported." = "Nav kartiņa importēta."; +"A total of %{0} cards were imported in the addressbook." = "Kopumā no % {0} kartiņas tika importētas adrešu grāmatā."; +"Reload" = "Pārlādēt"; + +/* Properties window */ +"Address Book Name" = "Adrešu grāmatas nosaukums"; +"Links to this Address Book" = "Saites uz šo adrešu grāmatu"; +"Authenticated User Access" = "Autentificēto lietotāju piekļuve"; +"CardDAV URL" = "CardDAV URL"; +"Options" = "Opcijas"; +"Rename" = "Pārdēvēt"; +"Subscriptions" = "Abonementi"; +"Global Addressbooks" = "Globāla adrešu grāmata"; +"Search" = "Meklēšana"; +"Sort" = "Kārtot"; +"Descending Order" = "Dilstoša secība"; +"Back" = "Atpakaļ"; +"Select All" = "Atlasīt visu"; +"Copy contacts" = "Kopēt kontaktus"; +"More messages options" = "Vairāk ziņojumu opciju"; +"New Contact" = "Jauns kontakts"; +"Close" = "Aizvērt"; +"More contact options" = "Vairāk kontaktu iespējas"; +"Organization Unit" = "Organizācijas vienība"; +"Add Organizational Unit" = "Pievienot organizācijas vienību"; +"Type" = "Tips"; +"Email Address" = "E-pasta adrese"; +"New Email Address" = "Jauna e-pasta adrese"; +"New Phone Number" = "Jauns tālruņa numurs"; +"URL" = "URL"; +"New URL" = "Jauns URL"; +"street" = "iela"; +"Postoffice" = "Pasts"; +"Region" = "Reģions"; +"Postal Code" = "Pasta indekss"; +"New Address" = "Jauna adrese"; +"Reset" = "Atiestatīt"; +"Description" = "Apraksts"; +"Add Member" = "Pievienot dalībnieku"; +"Subscribe" = "Abonēt"; +"Add Birthday" = "Pievienot dzimšanas dienu"; +"Import" = "Importēt"; +"More options" = "Papildu opcijas"; +"Role" = "Loma"; +"Add Screen Name" = "Pievienot ekrāna vārdu"; +"Synchronization" = "Sinhronizācija"; +"Synchronize" = "Sinhronizēt"; +"Sucessfully subscribed to address book" = "Sekmīgi abonējis adrešu grāmatu"; + +/* Aria label for scope of search on contacts */ +"Search scope" = "Meklēšanas tvērums"; + +/* Aria label for avatar button to select and unselect a card */ +"Toggle item" = "Pārslēgt vienumu"; + +/* Hotkey to create a new card */ +"key_create_card" = "c"; + +/* Hotkey to create a new list */ +"key_create_list" = "l"; diff --git a/UI/Contacts/Polish.lproj/Localizable.strings b/UI/Contacts/Polish.lproj/Localizable.strings index c8563306e..b62e3e8d5 100644 --- a/UI/Contacts/Polish.lproj/Localizable.strings +++ b/UI/Contacts/Polish.lproj/Localizable.strings @@ -41,6 +41,9 @@ "Move To" = "Przenieś do"; "Copy To" = "Kopiuj do"; "Add to" = "Dodaj do"; +"To" = "Do"; +"Carbon Copy (Cc)" = "Do wiadomości (Cc)"; +"Blind Carbon Copy (Bcc)" = "Ukryte DW (Bcc)"; /* Subheader of empty addressbook */ "No contact" = "Brak kontaktów"; @@ -258,4 +261,4 @@ "key_create_card" = "c"; /* Hotkey to create a new list */ -"key_create_list" = "l"; \ No newline at end of file +"key_create_list" = "l"; diff --git a/UI/Contacts/Slovak.lproj/Localizable.strings b/UI/Contacts/Slovak.lproj/Localizable.strings index 8d917faa7..5d10985ac 100644 --- a/UI/Contacts/Slovak.lproj/Localizable.strings +++ b/UI/Contacts/Slovak.lproj/Localizable.strings @@ -175,7 +175,7 @@ "%{0} card(s) copied" = "%{0} kontakt(ov) skopírovaných"; "%{0} card(s) moved" = "%{0} kontakt(ov) presunutých"; "SoAccessDeniedException" = "Nemôžete písať do tohoto adresára."; -"Forbidden" = "Nemôžete písať do tohoto adresára."; +"Forbidden" = "Zakázané"; "Invalid Contact" = "Zvolený kontakt už neexistuje."; "Unknown Destination Folder" = "Vybraný adresár už neexistuje."; diff --git a/UI/Contacts/TurkishTurkey.lproj/Localizable.strings b/UI/Contacts/TurkishTurkey.lproj/Localizable.strings index 29c872e90..fda68b0ef 100644 --- a/UI/Contacts/TurkishTurkey.lproj/Localizable.strings +++ b/UI/Contacts/TurkishTurkey.lproj/Localizable.strings @@ -41,6 +41,9 @@ "Move To" = "Taşı"; "Copy To" = "Kopyala"; "Add to" = "Ekle"; +"To" = "Alıcı"; +"Carbon Copy (Cc)" = "Karbon Kopya (Cc)"; +"Blind Carbon Copy (Bcc)" = "Gizli Karbon Kopya (Bcc)"; /* Subheader of empty addressbook */ "No contact" = "Adres defteri boş"; @@ -258,4 +261,4 @@ "key_create_card" = "c"; /* Hotkey to create a new list */ -"key_create_list" = "l"; \ No newline at end of file +"key_create_list" = "l"; diff --git a/UI/MailPartViewers/Latvian.lproj/Localizable.strings b/UI/MailPartViewers/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..b715f5258 --- /dev/null +++ b/UI/MailPartViewers/Latvian.lproj/Localizable.strings @@ -0,0 +1,50 @@ +ACCEPTED = "akceptēts"; +COMPLETED = "pabeigts"; +DECLINED = "noraidīts"; +DELEGATED = "deleģēts"; +"IN-PROCESS" = "procesā"; +"NEEDS-ACTION" = "nepieciešama darbība"; +TENTATIVE = "varbūtējs"; +organized_by_you = "ko jūs organizējat"; +you_are_an_attendee = "jūs esat dalībnieks"; +add_info_text = "iMIP 'ADD' pieprasījumi nav pagaidām SOGo atbalstīti."; +publish_info_text = "Sūtītājs jūs informē par pievienoto notikumu."; +cancel_info_text = "Jūsu uzaicinājums vai viss pasākums tika atcelts."; +request_info_no_attendee = "ierosina tikšanos ar apmeklētājiem. Jūs saņemat šo e-pasta ziņojumu kā paziņojumu, tu neesi ieplānots kā dalībnieks."; +Appointment = "Tikšanās"; +"Status Update" = "Atjaunināt statusu"; +was = "bija"; + +Organizer = "Organizētājs"; +Time = "Laiks"; +Attendees = "Dalībnieki"; +request_info = "aicina Jūs piedalīties sanāksmē."; +"Add to calendar" = "Pievienot kalendāram"; +"Delete from calendar" = "Dzēst no kalendāra"; +"Update status" = "Atjaunināt statusu"; +Accept = "Akceptēt"; +Decline = "Noraidīt"; +Tentative = "Varbūtējs"; +"Delegate ..." = "Deleģēt ..."; +"Delegated to" = "Deleģēt"; +"Update status in calendar" = "Atjaunināt kalendāra statusu"; +"delegated from" = "deleģēts no"; +reply_info_no_attendee = "Jūs saņēmāt atbildi uz plānoto notikumu, bet atbildes sūtītājs nav dalībnieks."; +reply_info = "Šī ir atbilde uz uzaicinājumu piedalīties pasākumā."; +"to" = "kam"; +"Untitled" = "Nenosaukts"; +"Size" = "Izmērs"; +"Digital signature is not valid" = "Ciparparaksts nav derīgs"; +"Message is signed" = "Ziņojums ir parakstīts"; +"Subject" = "Temats"; +"From" = "No"; +"Date" = "Datums"; +"To" = "Kam"; +"Issuer" = "Izdevējs"; +/* Tooltips */ +"View Attachment" = "Skatīt pielikumu"; +"Save Attachment" = "Saglabāt pielikumu"; +"CC" = "Kopija"; +"Cancel" = "Atcelt"; +"OK" = "OK"; +"Comment" = "Komentārs"; diff --git a/UI/MailPartViewers/TurkishTurkey.lproj/Localizable.strings b/UI/MailPartViewers/TurkishTurkey.lproj/Localizable.strings index d568efde7..b0e0b49a7 100644 --- a/UI/MailPartViewers/TurkishTurkey.lproj/Localizable.strings +++ b/UI/MailPartViewers/TurkishTurkey.lproj/Localizable.strings @@ -16,7 +16,7 @@ Appointment = "Çalışma"; was = "önceden"; Organizer = "Düzenleyen"; -Time = "Zaman"; +Time = "Saat"; Attendees = "Katılımcılar"; request_info = "sizi toplantıya katılmaya davet ediyor. "; "Add to calendar" = "Takvime ekle"; diff --git a/UI/MailerUI/Dutch.lproj/Localizable.strings b/UI/MailerUI/Dutch.lproj/Localizable.strings index fa0d4f86d..528cae9ef 100644 --- a/UI/MailerUI/Dutch.lproj/Localizable.strings +++ b/UI/MailerUI/Dutch.lproj/Localizable.strings @@ -53,7 +53,13 @@ /* Mail account main windows */ "Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Welkom bij de SOGo Mailer. Gebruik de mappenlijst aan de linkerkant om door uw e-mailaccounts te bladeren."; "Read messages" = "Gelezen berichten"; + +/* Tooltip for fab button */ "Write a new message" = "Een nieuw bericht opstellen"; + +/* Tooltip for fab button */ +"Write a message in new window" = "Bericht maken in een nieuw scherm"; + "Share" = "Delen"; "Account" = "Account"; "Shared Account" = "Gedeeld account"; @@ -217,6 +223,12 @@ /* Message view "more" menu: create a task from message */ "Convert To Task" = "Omzetten naar taak"; +/* Message view "more" menu: download all attachments as a zip archive */ +"Download all attachments" = "Download alle bijlagen"; + +/* Filename prefix when downloading all attachments as a zip archive */ +"attachments" = "bijlagen"; + "Print..." = "Afdrukken..."; "Delete Message" = "Bericht verwijderen"; "Delete Selected Messages" = "Geselecteerde berichten verwijderen"; @@ -315,6 +327,7 @@ /* Error when uploading a file attachment */ "Error while uploading the file \"%{0}\":" = "Fout bij uploaden van bestand \"%{0}\":"; "There is an active file upload. Closing the window will interrupt it." = "Een bestandsupload is actief. Sluiten van het venster zal hem onderbreken."; +"Message is too big" = "Bericht is te groot"; /* Appears while sending the message */ "Sending" = "Verzenden"; diff --git a/UI/MailerUI/English.lproj/Localizable.strings b/UI/MailerUI/English.lproj/Localizable.strings index 0918b210e..71fa1b592 100644 --- a/UI/MailerUI/English.lproj/Localizable.strings +++ b/UI/MailerUI/English.lproj/Localizable.strings @@ -70,6 +70,8 @@ /* No mailbox is selected (usually resulting from an IMAP connection problem) */ "No mailbox selected" = "No mailbox selected"; +"An error occured while communicating with the mail server" = "An error occured while communicating with the mail server"; + /* Mailbox actions */ /* Compact Folder success message */ "Folder compacted" = "Folder compacted"; diff --git a/UI/MailerUI/Finnish.lproj/Localizable.strings b/UI/MailerUI/Finnish.lproj/Localizable.strings index 27808d4e7..181b82089 100644 --- a/UI/MailerUI/Finnish.lproj/Localizable.strings +++ b/UI/MailerUI/Finnish.lproj/Localizable.strings @@ -53,7 +53,13 @@ /* Mail account main windows */ "Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Tervetuloa SOGo Sähköpostiin. Käytä vasemmanpuoleista hakupuuta sähköpostitiliesi selaamiseen."; "Read messages" = "Luetut viestit"; + +/* Tooltip for fab button */ "Write a new message" = "Kirjoita uusi viesti"; + +/* Tooltip for fab button */ +"Write a message in new window" = "Kirjoita viesti uudessa ikkunassa"; + "Share" = "Jaa"; "Account" = "Tili"; "Shared Account" = "Jaettu tili"; @@ -217,6 +223,12 @@ /* Message view "more" menu: create a task from message */ "Convert To Task" = "Muunna tehtäväksi"; +/* Message view "more" menu: download all attachments as a zip archive */ +"Download all attachments" = "Lataa kaikki liitteet"; + +/* Filename prefix when downloading all attachments as a zip archive */ +"attachments" = "liitteet"; + "Print..." = "Tulosta..."; "Delete Message" = "Poista viesti"; "Delete Selected Messages" = "Poista valitut viestit"; @@ -315,6 +327,7 @@ /* Error when uploading a file attachment */ "Error while uploading the file \"%{0}\":" = "Virhe tiedoston \"%{0}\" latauksessa: "; "There is an active file upload. Closing the window will interrupt it." = "Tiedoston lataus on käynnissä. Ikkunan sulkeminen pysäyttää latauksen."; +"Message is too big" = "Viesti on liian iso"; /* Appears while sending the message */ "Sending" = "Lähettää"; diff --git a/UI/MailerUI/French.lproj/Localizable.strings b/UI/MailerUI/French.lproj/Localizable.strings index c8564ac46..ad4f75b77 100644 --- a/UI/MailerUI/French.lproj/Localizable.strings +++ b/UI/MailerUI/French.lproj/Localizable.strings @@ -70,6 +70,8 @@ /* No mailbox is selected (usually resulting from an IMAP connection problem) */ "No mailbox selected" = "Aucune boîte sélectionnée"; +"An error occured while communicating with the mail server" = "Une erreur est survenue lors de la connexion au serveur de courrier."; + /* Mailbox actions */ /* Compact Folder success message */ "Folder compacted" = "Dossier compressé"; diff --git a/UI/MailerUI/German.lproj/Localizable.strings b/UI/MailerUI/German.lproj/Localizable.strings index ceea0aabc..41e0eddaa 100644 --- a/UI/MailerUI/German.lproj/Localizable.strings +++ b/UI/MailerUI/German.lproj/Localizable.strings @@ -361,7 +361,7 @@ "Set as Junk" = "Als Spam markieren"; "Sort" = "Sortieren"; -"Order Received" = "Anweisung erhalten"; +"Order Received" = "Nach Empfang sortieren"; "Descending Order" = "Absteigende Sortierung"; "Back" = "Zurück"; "Copy messages" = "Nachrichten kopieren"; diff --git a/UI/MailerUI/Latvian.lproj/Localizable.strings b/UI/MailerUI/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..2f604f20c --- /dev/null +++ b/UI/MailerUI/Latvian.lproj/Localizable.strings @@ -0,0 +1,409 @@ +/* this file is in UTF-8 format! */ + +/* Icon's label */ +"Create" = "Izveidot"; +"Empty Trash" = "Tukša atkritne"; +"Delete" = "Dzēst"; +"Expunge" = "Izdzēst"; +"Forward" = "Pārsūtīt"; +"Get Mail" = "Saņemt e-pastu"; +"Junk" = "Nevēlams"; +"Not junk" = "Nav nevēlams"; +"Reply" = "Atbildēt"; +"Reply All" = "Atbildēt visiem"; +"Print" = "Drukāt"; +"Stop" = "Stop"; +"Write" = "Rakstīt"; +"Search" = "Meklēt"; +"Send" = "Sūtīt"; +"Contacts" = "Kontakti"; +"Attach" = "Pievienot"; +"Save" = "Saglabāt"; +"Options" = "Opcijas"; +"Close" = "Aizvērt"; +"Size" = "Izmērs"; + +/* Tooltips */ +"Send this message now" = "Sūtīt šo ziņojumu tūlīt"; +"Select a recipient from an Address Book" = "Izvēlieties adresātu no adrešu grāmatas"; +"Include an attachment" = "Pielikuma iekļaušana"; +"Save this message" = "Saglabāt šo ziņojumu"; +"Get new messages" = "Jaunu ziņojumu saņemšana"; +"Create a new message" = "Izveidot jaunu ziņu"; +"Go to address book" = "Atveriet adrešu grāmatu"; +"Reply to the message" = "Atbildēt uz ziņu"; +"Reply to sender and all recipients" = "Atbildēt sūtītājam un visiem adresātiem"; +"Forward selected message" = "Pārsūtīt izvēlēto ziņu"; +"Delete selected message or folder" = "Izdzēsiet izvēlēto ziņu vai mapi"; +"Print this message" = "Drukāt šo ziņojumu"; +"Stop the current transfer" = "Apturēt pašreizējo pārraidi"; +"Attachment" = "Pielikums"; +"Unread" = "Nelasīts"; +"Flagged" = "Ar karodziņu"; +"Search multiple mailboxes" = "Vairāku pastkastu meklēšana"; + +/* Main Frame */ +"Home" = "Sākums"; +"Calendar" = "Kalendārs"; +"Addressbook" = "Adrešu grāmata"; +"Mail" = "E-pasts"; +"Right Administration" = "Tiesību administrēšana"; +"Help" = "Palīdzība"; + +/* Mail account main windows */ +"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Esiet sveicināts SOGo Mailer. Izmantojiet mapes koku par kreisi, lai pārlūkotu jūsu pasta kontus!"; +"Read messages" = "Lasīt ziņas"; + +/* Tooltip for fab button */ +"Write a new message" = "Rakstīt jaunu ziņu"; + +/* Tooltip for fab button */ +"Write a message in new window" = "Rakstīt ziņojumu jaunā logā"; + +"Share" = "Koplietot"; +"Account" = "Konts"; +"Shared Account" = "Kopējs konts"; + +/* A mailbox is selected, but no message (only shown on large screens) */ +"No message selected" = "Nav izvēlēta ziņa"; + +/* No mailbox is selected (usually resulting from an IMAP connection problem) */ +"No mailbox selected" = "Neviena pastkaste nav atlasīta"; + +"An error occured while communicating with the mail server" = "Radās kļūda, sazinoties ar serveri"; + +/* Mailbox actions */ +/* Compact Folder success message */ +"Folder compacted" = "Mape saspiesta"; +/* Empty Trash success message */ +"Trash emptied" = "Atkritne iztukšota"; + +/* acls */ +"Access rights to" = "Piekļuves tiesības"; +"For user" = "Lietotājam"; +"Any Authenticated User" = "Visi autentificētie lietotāji"; +"List and see this folder" = "Attēlot un skatīt šo mapi"; +"Read mails from this folder" = "Lasīt pastu no šīs mapes"; +"Mark mails read and unread" = "Atzīmēt lasītās un nelasītās ziņas"; +"Modify the flags of the mails in this folder" = "Modificēt e-pasta karogus šajā mapē"; +"Insert, copy and move mails into this folder" = "Ievietot, kopēt un pārvietot pasta ziņas šajā mapē"; +"Post mails" = "Pasta ziņas"; +"Add subfolders to this folder" = "Pievienot mapei apakšmapes"; +"Remove this folder" = "Noņemt šo mapi"; +"Erase mails from this folder" = "Dzēst pastu no šīs mapes"; +"Expunge this folder" = "Izdzēst šo mapi"; +"Export This Folder" = "Eksportēt šo mapi"; +"Modify the acl of this folder" = "Mainīt šīs mapes ACL"; +"Saved Messages.zip" = "Saglabāts Ziņas*.zip"; +"Update" = "Atjaunināt"; +"Cancel" = "Atcelt"; + +/* Mail edition */ +"From" = "No"; +"Subject" = "Temats"; +"To" = "Kam"; +"Cc" = "Kopija"; +"Bcc" = "Diskrētā kopija"; +"Reply-To" = "Atbildēt uz"; +"Add address" = "Pievienot adresi"; +"Body" = "Korpuss"; +"Open" = "Atvērt"; +"Select All" = "Atlasīt visu"; +"Select Message" = "Izvēlieties ziņojumu"; +"Attach Web Page..." = "Pievienot tīmekļa lapu..."; +"file" = "fails"; +"files" = "faili"; +"Save all" = "Saglabāt visu"; +"to" = "Kam"; +"cc" = "Cc"; +"bcc" = "Bcc"; +"Add a recipient" = "Pievienot adresātu"; +"Edit Draft..." = "Melnraksta rediģēšana..."; +"Load Images" = "Ielādēt attēlus"; +"Return Receipt" = "Saņemšanas paziņojums"; +"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "Šī ziņojuma nosūtītājs ir pieprasījis, lai tiktu paziņots, kad izlasīsiet šo ziņojumu. Vai vēlaties apstiprināt ?"; +"Return Receipt (displayed) - %@"= "Saņemšanas paziņojums (parādīts) - %@"; +"This is a Return Receipt for the mail that you sent to %@.\n\nNote: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. There is no guarantee that the recipient has read or understood the message contents." = "Šis ir saņemšanas paziņojums e-pastam ko jūs nosūtījāt %@.\n\nPiezīme: šī ziņojuma saņemšanas paziņojums tikai apstiprināts, ka ziņojums tika parādīts adresāta datorā. Bet nav garantijas, ka adresāts ir izlasījis un sapratis šo ziņojumu saturu."; +"Priority" = "Prioritāte"; +"highest" = "Augstākā"; +"high" = "Augsts"; +"normal" = "Normāls"; +"low" = "Zems"; +"lowest" = "Zemākā"; +"This mail is being sent from an unsecure network!" = "Šis e-pasta ziņojums tiek sūtīts no nedroša tīkla!"; +"Address Book" = "Adrešu grāmata"; +"Search For" = "Meklēt"; + +/* Popup "show" */ +"all" = "visi"; +"read" = "lasīts"; +"unread" = "nelasīts"; +"deleted" = "dzēsts"; +"flagged" = "ar karodziņu"; + +/* MailListView */ +"Sender" = "Sūtītājs"; +"Subject or Sender" = "Tēma vai sūtītājs"; +"To or Cc" = "Kam vai Kopija"; +"Entire Message" = "Visu ziņojumu"; +"Date" = "Datums"; +"View" = "Skatīt"; +"All" = "Viss"; +"No message" = "Ziņu nav"; +"messages" = "ziņojumi"; +"Yesterday" = "Vakar"; +"first" = "Pirmais"; +"previous" = "Iepriekšējais"; +"next" = "Nākamais"; +"last" = "Pēdējais"; +"msgnumber_to" = "kam"; +"msgnumber_of" = "no"; +"Mark Unread" = "Atzīmēt kā nelasītu"; +"Mark Read" = "Atzīmēt kā lasītu"; +"Untitled" = "Nenosaukts"; + +/* Tree */ +"SentFolderName" = "Sūtīt"; +"TrashFolderName" = "Atkritne"; +"InboxFolderName" = "Iesūtne"; +"DraftsFolderName" = "Melnraksti"; +"JunkFolderName" = "Nevēlams"; +"SieveFolderName" = "Filtri"; +"Folders" = "Mapes"; /* title line */ + +/* MailMoveToPopUp */ +"MoveTo" = "Pārvietot …"; + +/* Address Popup menu */ +"Add to Address Book..." = "... pievienot adrešu grāmatai"; +"Compose Mail To" = "Rakstīt pastu"; +"Create Filter From Message..." = "Izveidot filtru no ziņojuma..."; + +/* Image Popup menu */ +"Save Image" = "Saglabāt attēlu"; +"Save Attachment" = "Saglabāt pielikumu"; + +/* Mailbox popup menus */ +"Open in New Mail Window" = "Atvērt jaunā epasta logā"; +"Copy Folder Location" = "Kopēt mapes atrašanās vietu"; +"Subscribe..." = "Abonēt..."; +"Mark Folder Read" = "Atzīmēt mapi kā lasītu"; +"New Folder..." = "Jauna mape..."; +"Compact This Folder" = "Saspiest šo mapi"; +"Search Messages..." = "Ziņu meklēšana..."; +"Sharing..." = "Koplieto..."; +"New Subfolder..." = "Jauna apakšmape..."; +"Rename Folder..." = "Pārdēvēt mapi..."; +"Delete Folder" = "Dzēst mapi"; +"Use This Folder For" = "Lietojiet šo mapi"; +"Get Messages for Account" = "Saņemt ziņojumus kontam"; +"Properties..." = "Rekvizīti..."; +"Delegation..." = "Deleģēšana..."; + +/* Use This Folder menu */ +"Sent Messages" = "Nosūtīt ziņojumus"; +"Drafts" = "Melnraksti"; +"Deleted Messages" = "Dzēst ziņojumus"; +"Junk Messages" = "Nevēlamā e-pasta ziņojumi"; + +/* Message list popup menu */ +"Open Message In New Window" = "Atvērt ziņu jaunā logā"; +"Reply to Sender Only" = "Atbildēt tikai sūtītājam"; +"Reply to All" = "Atbildēt visiem"; +"Edit As New..." = "Labot kā jaunu..."; +"Move To" = "Pārvietot uz"; +"Copy To" = "Kopēt uz"; +"Label" = "Etiķete"; +"Mark" = "Atzīmēt"; +"Save As..." = "Saglabāt kā..."; +"Print Preview" = "Drukas priekšskatījums"; +"View Message Source" = "Skatīt ziņojuma avotu"; + +/* Message view "more" menu: create an event from message */ +"Convert To Event" = "Pārvērst par notikumu"; + +/* Message view "more" menu: create a task from message */ +"Convert To Task" = "Pārvērst par uzdevumu"; + +/* Message view "more" menu: download all attachments as a zip archive */ +"Download all attachments" = "Lejupielādēt visus pielikumus"; + +/* Filename prefix when downloading all attachments as a zip archive */ +"attachments" = "pielikumi"; + +"Print..." = "Drukāt..."; +"Delete Message" = "Dzēst ziņojumu"; +"Delete Selected Messages" = "Izdzēst atlasītos ziņojumus"; +"Mark the selected messages as junk" = "Atzīmēt atlasīto ziņojumu kā nevēlamu"; +"Mark the selected messages as not junk" = "Atzīmēt atlasīto ziņojumu kā vēlamu"; + +/* Text appended to the recipients list when there are too many recipients */ +"and %{0} more..." = "un %{0} vairāk..."; + +/* Button label to hide extended list of recipients */ +"Hide" = "Paslēpt"; + +/* Number of selected messages in list */ +"selected" = "atlasīts"; + +"This Folder" = "Šī mape"; + +/* Label popup menu */ +"None" = "Neviens"; + +/* Mark popup menu */ +"As Read" = "Kā lasītu"; +"Thread As Read" = "Pavedienu kā lasītu"; +"As Read By Date..." = "Kā lasīts pēc datuma..."; +"All Read" = "Visi izlasītie"; +"Flag" = "Karogs"; +"As Junk" = "Kā nevēlamu"; +"As Not Junk" = "Kā vēlamu"; +"Run Junk Mail Controls" = "Palaist Mēstuļu kontroli"; +"Search messages in" = "Meklēt ziņu"; +"Search" = "Meklēt"; +"Search subfolders" = "Meklēt apakšmapēs"; +"Match any of the following" = "Atbilst jebkuram no "; +"Match all of the following" = "Atbilst viss no"; +"contains" = "satur"; +"does not contain" = "nesatur"; +"No matches found" = "Nav atrasta neviena atbilstība"; +"results found" = "atrastie rezultāti"; +"result found" = "atrastie rezultāti"; +"Please specify at least one filter" = "Lūdzu, norādiet vismaz vienu filtru"; + +/* Folder operations */ +"Name" = "Vārds"; +"Enter the new name of your folder" + ="Ievadiet jaunu mapes nosaukumu"; +"Do you really want to move this folder into the trash ?" + = "Vai tiešām vēlaties šo mapi pārvietot uz atkritni?"; +"Operation failed" = "Darbība neizdevās"; +"Quota" = "Kvota:"; +"quotasFormat" = "%{0}% izmantoti no %{1} MB"; +"Unable to move/delete folder." = "Nevar pārvietot vai dzēst mapi."; + +/* Alternative operation when folder cannot be deleted */ +"The mailbox could not be moved to the trash folder. Would you like to delete it immediately?" += "Pastkasti nevarēja pārvietot uz atkritni. Vai vēlaties dzēst to tūlīt?"; + +/* Confirmation message when deleting multiple messages */ +"Are you sure you want to delete the selected messages?" = "Vai tiešām vēlaties izdzēst atlasītos ziņojumus?"; + +/* Notification on the number of messages successfuly copied */ +"%{0} message(s) copied" = "%{0} ziņojums(i) nokopēts"; + +/* Notification on the number of messages successfuly movied */ +"%{0} message(s) moved" = "%{0} ziņojumus(i) pārvietots"; + +"Please select a message." = "Izvēlieties ziņu."; +"Please select a message to print." = "Izvēlieties ziņu, lai to varētu izdrukāt."; +"Please select only one message to print." = "Lūdzu, izvēlieties tikai vienu ziņu, lai drukātu."; +"The message you have selected doesn't exist anymore." = "Atlasītais ziņojums vairs neeksistē."; +"The folder with name \"%{0}\" could not be created." += "Mapi ar nosaukumu \"%{0}\" nevar izveidot."; +"This folder could not be renamed to \"%{0}\"." += "Šo mapi nevar pārdēvēt par \"%{0}\"."; +"The folder could not be deleted." += "Mapi nevarēja dzēst."; +"The trash could not be emptied." += "Atkritni nevar iztukšot."; +"The folder functionality could not be changed." += "Mapes funkciju nevar mainīt."; +"You need to choose a non-virtual folder!" = "Ir jāizvēlas non-virtual mape!"; +"Moving a message into its own folder is impossible!" += "Ziņas pārvietošana uz savu mapi nav iespējama!"; +"Copying a message into its own folder is impossible!" += "Kopēt ziņu uz savu mapi nav iespējams!"; + +/* Message operations */ +"The messages could not be moved to the trash folder. Would you like to delete them immediately?" += "Ziņas nevarēja pārvietot uz atkritni. Vai vēlaties dzēst tās tūlīt?"; + +/* Message editing */ +"error_missingsubject" = "Šim ziņojumam nav tēmas. Vai tiešām vēlaties to nosūtīt?"; +"error_missingrecipients" = "Lūdzu, norādiet vismaz vienu adresātu."; +"Send Anyway" = "Tomēr nosūtīt"; +"Error while saving the draft" = "Melnraksta saglabāšanas kļūda"; + +/* Error when uploading a file attachment */ +"Error while uploading the file \"%{0}\":" = "Kļūda, augšupielādējot failu \"%{0}\":"; +"There is an active file upload. Closing the window will interrupt it." = "Ir aktīva failu augšupielāde. Loga aizvēršana pārtrauc to."; +"Message is too big" = "Ziņojums ir pārāk liels."; + +/* Appears while sending the message */ +"Sending" = "Sūtīšana"; + +/* Appears when the message is successfuly sent */ +"Sent" = "Sūtīt"; + +"cannot send message: (smtp) all recipients discarded" = "Nevar nosūtīt ziņu: visi adresāti ir nederīgi."; +"cannot send message (smtp) - recipients discarded" = "Nevar nosūtīt ziņu. Šī adrese ir nederīga"; +"cannot send message: (smtp) error when connecting" = "Nevar nosūtīt ziņu: kļūda, veidojot savienojumu ar SMTP serveri."; + +/* Contacts list in mail editor */ +"Email" = "E-pasts"; +"More mail options" = "Papildus e-pasta opcijas"; +"Delegation" = "Deleģēšana"; +"Add User" = "Pievienot lietotāju"; +"Add a tag" = "Pievienot birku"; +"reply" = "atbildēt"; +"Edit" = "Labot"; +"Yes" = "Jā"; +"No" = "Nē"; +"Location" = "Vieta"; +"Rename" = "Pārdēvēt"; +"Compact" = "Kompakts"; +"Export" = "Eksportēt"; +"Set as Drafts" = "Iestatīt kā projektu"; +"Set as Sent" = "Iestatīt kā nosūtīts"; +"Set as Trash" = "Iestatīt kā drazu"; + +/* Set the folder as the one holding Junk mails */ +"Set as Junk" = "Iestatīt kā nevēlamu"; + +"Sort" = "Kārtot"; +"Order Received" = "Saņemšanas apstiprinājums"; +"Descending Order" = "Dilstoša secība"; +"Back" = "Atpakaļ"; +"Copy messages" = "Kopēt ziņojumus"; +"More messages options" = "Vairāk ziņojumu opcijas"; +"Mark as Unread" = "Atzīmēt kā nelasītu"; +"Mark as Read" = "Atzīmēt kā lasītu"; +"Closing Window ..." = "... loga aizvēršana"; +"Tried to send too many mails. Please wait." = "Mēģinājāt nosūtīt pārāk daudz e-pastu. Lūdzu, uzgaidiet."; +"View Mail" = "Skatīt pastu"; +"This message contains external images." = "Šis ziņojums satur ārējos attēlus."; +"Expanded" = "Izvērsts"; +"Add a Criteria" = "Pievienot kritēriju"; +"More search options" = "Papildu meklēšanas opcijas"; +"Your email has been saved" = "Jūsu e-pasts ir saglabāts"; +"Your email has been sent" = "Jūsu e-pasts ir nosūtīts"; +"Folder compacted" = "Mape saspiesta"; + +/* Aria label for scope of search on messages */ +"Search scope" = "Meklēšanas joma"; + +/* Subscriptions Dialog */ +"Manage Subscriptions" = "Pārvaldīt abonementus"; + +/* Label of filter input field in subscriptions dialog */ +"Filter" = "Filtrs"; + +/* Hotkey to write a new message */ +"hotkey_compose" = "w"; + +/* Hotkey to mark selected message(s) as junk */ +"hotkey_junk" = "j"; + +/* Hotkey to flag a message */ +"hotkey_flag" = "*"; + +/* Hotkey to reply to a message */ +"hotkey_reply" = "r"; + +/* Hotkey to reply to all recipients of a message */ +"hotkey_replyall" = "a"; + +/* Hotkey to forward to a message */ +"hotkey_forward" = "f"; diff --git a/UI/MailerUI/Polish.lproj/Localizable.strings b/UI/MailerUI/Polish.lproj/Localizable.strings index 3fe1c1461..a32e37a19 100644 --- a/UI/MailerUI/Polish.lproj/Localizable.strings +++ b/UI/MailerUI/Polish.lproj/Localizable.strings @@ -70,6 +70,8 @@ /* No mailbox is selected (usually resulting from an IMAP connection problem) */ "No mailbox selected" = "Nie wybrano skrzynki"; +"An error occured while communicating with the mail server" = "Wystąpił błąd w trakcie komunikacji z serwerem pocztowym"; + /* Mailbox actions */ /* Compact Folder success message */ "Folder compacted" = "Folder zkompaktowany"; diff --git a/UI/MailerUI/TurkishTurkey.lproj/Localizable.strings b/UI/MailerUI/TurkishTurkey.lproj/Localizable.strings index 2a91d2f86..b4cd0d805 100644 --- a/UI/MailerUI/TurkishTurkey.lproj/Localizable.strings +++ b/UI/MailerUI/TurkishTurkey.lproj/Localizable.strings @@ -58,7 +58,7 @@ "Write a new message" = "Yeni ileti yaz"; /* Tooltip for fab button */ -"Write a message in new window" = "Yeni pencerede bir ileti yaz"; +"Write a message in new window" = "Yeni pencerede ileti yaz"; "Share" = "Paylaşım"; "Account" = "Hesap"; @@ -70,6 +70,8 @@ /* No mailbox is selected (usually resulting from an IMAP connection problem) */ "No mailbox selected" = "Seçili e-posta klasörü yok"; +"An error occured while communicating with the mail server" = "E-posta sunucusu ile iletişime geçerken bir hata oluştu"; + /* Mailbox actions */ /* Compact Folder success message */ "Folder compacted" = "Klasör sıkıştırıldı"; diff --git a/UI/MainUI/Arabic.lproj/Localizable.strings b/UI/MainUI/Arabic.lproj/Localizable.strings index 6114f0edf..a49a66eb9 100644 --- a/UI/MainUI/Arabic.lproj/Localizable.strings +++ b/UI/MainUI/Arabic.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Basque.lproj/Localizable.strings b/UI/MainUI/Basque.lproj/Localizable.strings index e58b37a11..bae3f08ae 100644 --- a/UI/MainUI/Basque.lproj/Localizable.strings +++ b/UI/MainUI/Basque.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings b/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings index 3cc6428c3..e1dfdb540 100644 --- a/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings +++ b/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Catalan.lproj/Localizable.strings b/UI/MainUI/Catalan.lproj/Localizable.strings index e8b9f044f..bcf1495e7 100644 --- a/UI/MainUI/Catalan.lproj/Localizable.strings +++ b/UI/MainUI/Catalan.lproj/Localizable.strings @@ -30,6 +30,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings b/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings index 201c54904..24e50fe83 100644 --- a/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings +++ b/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Croatian.lproj/Localizable.strings b/UI/MainUI/Croatian.lproj/Localizable.strings index 27a8fd65e..a74ad471b 100644 --- a/UI/MainUI/Croatian.lproj/Localizable.strings +++ b/UI/MainUI/Croatian.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/MainUI/Czech.lproj/Localizable.strings b/UI/MainUI/Czech.lproj/Localizable.strings index 525ed04e1..42979cfbe 100644 --- a/UI/MainUI/Czech.lproj/Localizable.strings +++ b/UI/MainUI/Czech.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Danish.lproj/Localizable.strings b/UI/MainUI/Danish.lproj/Localizable.strings index b994f31f0..032a03d8d 100644 --- a/UI/MainUI/Danish.lproj/Localizable.strings +++ b/UI/MainUI/Danish.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Dutch.lproj/Localizable.strings b/UI/MainUI/Dutch.lproj/Localizable.strings index c2ac1a6bc..9aa2c7ea5 100644 --- a/UI/MainUI/Dutch.lproj/Localizable.strings +++ b/UI/MainUI/Dutch.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/English.lproj/Localizable.strings b/UI/MainUI/English.lproj/Localizable.strings index 839c5d074..bca37929f 100644 --- a/UI/MainUI/English.lproj/Localizable.strings +++ b/UI/MainUI/English.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Finnish.lproj/Localizable.strings b/UI/MainUI/Finnish.lproj/Localizable.strings index 1f4ab09df..162570aaf 100644 --- a/UI/MainUI/Finnish.lproj/Localizable.strings +++ b/UI/MainUI/Finnish.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/French.lproj/Localizable.strings b/UI/MainUI/French.lproj/Localizable.strings index 1a2d8b48e..5fe7732f1 100644 --- a/UI/MainUI/French.lproj/Localizable.strings +++ b/UI/MainUI/French.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/German.lproj/Localizable.strings b/UI/MainUI/German.lproj/Localizable.strings index db9addd55..bb7484fb3 100644 --- a/UI/MainUI/German.lproj/Localizable.strings +++ b/UI/MainUI/German.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Hebrew.lproj/Localizable.strings b/UI/MainUI/Hebrew.lproj/Localizable.strings index 547c67279..baf504181 100644 --- a/UI/MainUI/Hebrew.lproj/Localizable.strings +++ b/UI/MainUI/Hebrew.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Hungarian.lproj/Localizable.strings b/UI/MainUI/Hungarian.lproj/Localizable.strings index d703adc64..56fb3ee80 100644 --- a/UI/MainUI/Hungarian.lproj/Localizable.strings +++ b/UI/MainUI/Hungarian.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Icelandic.lproj/Localizable.strings b/UI/MainUI/Icelandic.lproj/Localizable.strings index 06d07e817..63e9b83a6 100644 --- a/UI/MainUI/Icelandic.lproj/Localizable.strings +++ b/UI/MainUI/Icelandic.lproj/Localizable.strings @@ -30,6 +30,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Italian.lproj/Localizable.strings b/UI/MainUI/Italian.lproj/Localizable.strings index a70a33c67..4d667450d 100644 --- a/UI/MainUI/Italian.lproj/Localizable.strings +++ b/UI/MainUI/Italian.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Latvian.lproj/Locale b/UI/MainUI/Latvian.lproj/Locale new file mode 100644 index 000000000..efa7eb67d --- /dev/null +++ b/UI/MainUI/Latvian.lproj/Locale @@ -0,0 +1,35 @@ +/* Latvian */ +{ + NSLanguageName = "Latvian"; + NSFormalName = "Latvijas"; + NSLocaleCode = "lv"; /* ISO 639-1 */ + NSLanguageCode = "lav"; /* ISO 639-2 */ + NSParentContext = ""; + + NSAMPMDesignation = (AM, PM); + NSCurrencySymbol = "€"; + NSDateFormatString = "%A, %B %e, %Y"; + NSDateTimeOrdering = MDYH; + NSDecimalDigits = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + NSDecimalSeparator = "."; + NSEarlierTimeDesignations = (pirms, "pēdējais", "pēc", sen); + NSHourNameDesignations = ((0, pusnakts), (10, "rīts"), (12, pusdienlaiks, pusdienas), (14, "pēcpusdienā"), (19, "vakariņas")); + NSInternationalCurrencyString = EUR; /* ISO 4217 */ + NSLaterTimeDesignations = ("nākamais"); + NSMonthNameArray = ("Janvāris", "Februāris", Marts, "Aprīlis", Maijs, "Jūnijs", "Jūlijs", Augusts, Septembris, Oktobris, Novembris, Decembris); + NSNextDayDesignations = ("rīt"); + NSNextNextDayDesignations = ("nākamā diena"); + NSPriorDayDesignations = (vakar); + NSShortDateFormatString = "%m.%e.%y"; + NSShortMonthNameArray = (Jan, Feb, Mar, Apr, Mai, "Jūn", "Jūl", Aug, Sept, Okt, Nov, Dec); + NSShortTimeDateFormatString = "%m.%e.%y %I:%M %p"; + NSShortWeekDayNameArray = (Sv, Pr, Ot, Tr, Ce, Pk, Se); + NSThisDayDesignations = ("šodien", tagad); + NSThousandsSeparator = ","; + NSTimeDateFormatString = "%A, %B %e, %Y %I:%M:%S %p %Z"; + NSTimeFormatString = "%I:%M:%S %p"; + NSWeekDayNameArray = ("Svētdiena", Pirmdiena, Otrdiena, "Trešdiena", Ceturtdiena, Piektdiena, Sestdiena); + NSYearMonthWeekDesignations = (gads, "mēnesis", "nedēļa"); + NSPositiveCurrencyFormatString = "€9,999.00"; + NSNegativeCurrencyFormatString = "-€9,999.00"; +} diff --git a/UI/MainUI/Latvian.lproj/Localizable.strings b/UI/MainUI/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..ca2c09869 --- /dev/null +++ b/UI/MainUI/Latvian.lproj/Localizable.strings @@ -0,0 +1,95 @@ +/* this file is in UTF-8 format! */ + +"title" = "SOGo"; +"Username" = "Lietotājvārds"; +"Password" = "Parole"; +"Domain" = "Domēns"; +"Remember username" = "Atcerēties lietotājvārdu"; +"Connect" = "Savienot"; + +/* Appears while authentication is in progress */ +"Authenticating" = "Autentificēšana"; + +/* Appears when authentication succeeds */ +"Welcome" = "Sveicināti"; + +"Authentication Failed" = "Autentifikācija neizdevās"; +"Wrong username or password." = "Nepareizs lietotājvārds vai parole."; +"Retry" = "Mēģināt vēlreiz"; +"cookiesNotEnabled" = "Jūs nevarat pieteikties, jo jūsu pārlūkprogrammas sīkfaili ir atspējoti. Lūdzu, iespējojiet sīkfailus savā pārlūkprogrammas iestatījumos un mēģiniet vēlreiz."; +"browserNotCompatible" = "Mēs esam noteikuši, ka jūsu pārlūkprogrammas versija pašlaik netiek atbalstīta šajā vietnē. Mūsu ieteikums ir izmantot Firefox. Noklikšķiniet uz tālāk norādītās saites, lai lejupielādētu visjaunāko šīs pārlūkprogrammas versiju."; +"alternativeBrowsers" = "Alternatīvi var izmantot arī šādas saderīgas pārlūkprogrammas"; +"alternativeBrowserSafari" = "Alternatīvi, jūs varat arī izmantot Safari."; +"Download" = "Lejupielādēt"; +"Language" = "Valoda"; +"choose" = "Izvēlieties..."; +"Arabic" = "العربية"; +"Basque" = "Euskara"; +"Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; +"Croatian" = "Hrvatski"; +"Czech" = "Česky"; +"Danish" = "Dansk (Danmark)"; +"Dutch" = "Nederlands"; +"English" = "English"; +"Finnish" = "Suomi"; +"French" = "Français"; +"German" = "Deutsch"; +"Hebrew" = "עברית"; +"Hungarian" = "Magyar"; +"Icelandic" = "Íslenska"; +"Italian" = "Italiano"; +"Latvian" = "Latvijas"; +"Lithuanian" = "Lietuvių"; +"Macedonian" = "Македонски"; +"NorwegianBokmal" = "Norsk bokmål"; +"NorwegianNynorsk" = "Norsk nynorsk"; +"Polish" = "Polski"; +"Portuguese" = "Português"; +"BrazilianPortuguese" = "Português brasileiro"; +"Russian" = "Русский"; +"Serbian" = "Српски"; +"Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; +"SpanishSpain" = "Español (España)"; +"SpanishArgentina" = "Español (Argentina)"; +"Swedish" = "Svenska"; +"TurkishTurkey" = "Türkçe (Türkiye)"; +"Ukrainian" = "Українська"; +"Welsh" = "Cymraeg"; + +"About" = "Par"; +"AboutBox" = "SOGo izstrādātās inversā, bezmaksas grupprogrammatūras serveris ar uzsvaru uz mērogojamību un vienkāršību.

\nAJAX-based sniedz bagātu SOGo Web interfeisu un atbalsta vairāki klienti, izmantojot standarta protokolus CalDAV un CardDAV.

\nSOGo tiek izplatīts saskaņā ar GNU GPL versiju 2 vai jaunāku un detaļas tiek izplatītas saskaņā ar GNU LGPL versiju 2. Šī ir bezmaksas programmatūra: tu vari to mainīt un izplatīt. Nav NEKĀDAS GARANTIJAS, likums to atļauj.

\nSkatīt šo lapu par dažādām atbalsta iespējām."; +"Your account was locked due to too many failed attempts." = "Jūsu konts ir bloķēts, jo tika veikti pārāk daudz nesekmīgu mēģinājumu."; +"Your account was locked due to an expired password." = "Jūsu konts ir bloķēts, jo ir beidzies paroles derīguma termiņš."; +"Login failed due to unhandled error case" = "Pieteikšanās neizdevās nezināmas kļūdas dēļ"; +"Change your Password" = "Mainīt paroli"; +"The password was changed successfully." = "Parole sekmīgi nomainīta."; +"Your password has expired, please enter a new one below" = "Jūsu paroles derīguma termiņš ir beidzies, lūdzu, ievadiet jaunu"; +"Password must not be empty." = "Parole nedrīkst būt tukša."; +"The passwords do not match. Please try again." = "Paroles nesakrīt. Lūdzu, mēģiniet vēlreiz."; +"Password Grace Period" = "Paroles derīguma periods"; +"You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog." = "Jums ir % {0} pieteikšanās atlikušas pirms jūsu konts tiks bloķēts. Lūdzu, nomainiet savu paroli preferenču logā."; +"Password about to expire" = "Paroles derīguma termiņa beigas"; +"Your password is going to expire in %{0} %{1}." = "Jūsu paroles termiņš beidzas %{0} %{1}."; +"days" = "dienas"; +"hours" = "stundas"; +"minutes" = "minūtes"; +"seconds" = "sekundes"; +"Password change failed" = "Paroles maiņa neizdevās"; +"Password change failed - Permission denied" = "Paroles maiņa neizdevās - Atļauja liegta"; +"Password change failed - Insufficient password quality" = "Paroles maiņa neizdevās - Nepietiekama paroles kvalitāte"; +"Password change failed - Password is too short" = "Paroles maiņa neizdevās - parole ir pārāk īsa"; +"Password change failed - Password is too young" = "Paroles maiņa neizdevās - parole ir pārāk maza, jauna"; +"Password change failed - Password is in history" = "Paroles maiņa neizdevās - parole atrodas vēsturē"; +"Unhandled policy error: %{0}" = "Neapstrādāta politikas kļūda: %{0}"; +"Unhandled error response" = "Neapstrādāta kļūda"; +"Password change is not supported." = "Paroles maiņa nav atbalstīta."; +"Unhandled HTTP error code: %{0}" = "Neparedzēts HTTP kļūdas kods: %{0}"; +"New password" = "Jauna parole"; +"Confirmation" = "Apstiprinājums"; +"Cancel" = "Atcelt"; +"Please wait..." = "Lūdzu, uzgaidiet..."; +"Close" = "Aizvērt"; +"Missing search parameter" = "Trūkst meklēšanas parametru"; +"Missing type parameter" = "Trūkst tipa parametru"; diff --git a/UI/MainUI/Lithuanian.lproj/Localizable.strings b/UI/MainUI/Lithuanian.lproj/Localizable.strings index 95b72a50b..ec6060b20 100644 --- a/UI/MainUI/Lithuanian.lproj/Localizable.strings +++ b/UI/MainUI/Lithuanian.lproj/Localizable.strings @@ -28,8 +28,9 @@ "German" = "Deutsch"; "Hebrew" = "עברית"; "Hungarian" = "Magyar"; -"Icelandic" = "\nÍslenska"; +"Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; "Polish" = "Polski"; diff --git a/UI/MainUI/Macedonian.lproj/Localizable.strings b/UI/MainUI/Macedonian.lproj/Localizable.strings index 9a4d4867b..db857d491 100644 --- a/UI/MainUI/Macedonian.lproj/Localizable.strings +++ b/UI/MainUI/Macedonian.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings b/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings index 70c057125..7e18de5f6 100644 --- a/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings +++ b/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings b/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings index 4ef79f80a..8491593bd 100644 --- a/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings +++ b/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Polish.lproj/Localizable.strings b/UI/MainUI/Polish.lproj/Localizable.strings index 0f425d350..54732fe9e 100644 --- a/UI/MainUI/Polish.lproj/Localizable.strings +++ b/UI/MainUI/Polish.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Portuguese.lproj/Localizable.strings b/UI/MainUI/Portuguese.lproj/Localizable.strings index 3c285d425..671d9fd4f 100644 --- a/UI/MainUI/Portuguese.lproj/Localizable.strings +++ b/UI/MainUI/Portuguese.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Russian.lproj/Localizable.strings b/UI/MainUI/Russian.lproj/Localizable.strings index 2fec5c9ab..2fe118e6a 100644 --- a/UI/MainUI/Russian.lproj/Localizable.strings +++ b/UI/MainUI/Russian.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Serbian.lproj/Localizable.strings b/UI/MainUI/Serbian.lproj/Localizable.strings index 5e0e9d6a1..0f1f0dda7 100644 --- a/UI/MainUI/Serbian.lproj/Localizable.strings +++ b/UI/MainUI/Serbian.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Slovak.lproj/Localizable.strings b/UI/MainUI/Slovak.lproj/Localizable.strings index 80c86fd32..bd36e9a15 100644 --- a/UI/MainUI/Slovak.lproj/Localizable.strings +++ b/UI/MainUI/Slovak.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Slovenian.lproj/Localizable.strings b/UI/MainUI/Slovenian.lproj/Localizable.strings index bb3412e7f..359aca990 100644 --- a/UI/MainUI/Slovenian.lproj/Localizable.strings +++ b/UI/MainUI/Slovenian.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/SpanishArgentina.lproj/Localizable.strings b/UI/MainUI/SpanishArgentina.lproj/Localizable.strings index 832e6dafb..ca71c560d 100644 --- a/UI/MainUI/SpanishArgentina.lproj/Localizable.strings +++ b/UI/MainUI/SpanishArgentina.lproj/Localizable.strings @@ -32,6 +32,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/MainUI/SpanishSpain.lproj/Localizable.strings b/UI/MainUI/SpanishSpain.lproj/Localizable.strings index 5a47b87a3..ec9564a13 100644 --- a/UI/MainUI/SpanishSpain.lproj/Localizable.strings +++ b/UI/MainUI/SpanishSpain.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Swedish.lproj/Localizable.strings b/UI/MainUI/Swedish.lproj/Localizable.strings index 6594e5ff1..9b8754cc5 100644 --- a/UI/MainUI/Swedish.lproj/Localizable.strings +++ b/UI/MainUI/Swedish.lproj/Localizable.strings @@ -30,6 +30,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/TurkishTurkey.lproj/Localizable.strings b/UI/MainUI/TurkishTurkey.lproj/Localizable.strings index b0824d47c..477ee0076 100644 --- a/UI/MainUI/TurkishTurkey.lproj/Localizable.strings +++ b/UI/MainUI/TurkishTurkey.lproj/Localizable.strings @@ -39,6 +39,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Ukrainian.lproj/Localizable.strings b/UI/MainUI/Ukrainian.lproj/Localizable.strings index bb7bd98a5..248432dae 100644 --- a/UI/MainUI/Ukrainian.lproj/Localizable.strings +++ b/UI/MainUI/Ukrainian.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/MainUI/Welsh.lproj/Localizable.strings b/UI/MainUI/Welsh.lproj/Localizable.strings index f7905c9a7..5ead0a869 100644 --- a/UI/MainUI/Welsh.lproj/Localizable.strings +++ b/UI/MainUI/Welsh.lproj/Localizable.strings @@ -30,6 +30,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Arabic.lproj/Localizable.strings b/UI/PreferencesUI/Arabic.lproj/Localizable.strings index bb4b138cf..bfc841dca 100644 --- a/UI/PreferencesUI/Arabic.lproj/Localizable.strings +++ b/UI/PreferencesUI/Arabic.lproj/Localizable.strings @@ -188,6 +188,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Basque.lproj/Localizable.strings b/UI/PreferencesUI/Basque.lproj/Localizable.strings index 4ca436f58..c66d8d793 100644 --- a/UI/PreferencesUI/Basque.lproj/Localizable.strings +++ b/UI/PreferencesUI/Basque.lproj/Localizable.strings @@ -195,6 +195,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings b/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings index 6ee7fa997..28191d10b 100644 --- a/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings +++ b/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings @@ -247,6 +247,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Catalan.lproj/Localizable.strings b/UI/PreferencesUI/Catalan.lproj/Localizable.strings index 0d151a183..16a1f8ec5 100644 --- a/UI/PreferencesUI/Catalan.lproj/Localizable.strings +++ b/UI/PreferencesUI/Catalan.lproj/Localizable.strings @@ -208,6 +208,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings b/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings index 7f73b43ea..6fac58aa6 100644 --- a/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings +++ b/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings @@ -196,6 +196,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Croatian.lproj/Localizable.strings b/UI/PreferencesUI/Croatian.lproj/Localizable.strings index 37b92204b..0e5125219 100644 --- a/UI/PreferencesUI/Croatian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Croatian.lproj/Localizable.strings @@ -222,6 +222,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/PreferencesUI/Czech.lproj/Localizable.strings b/UI/PreferencesUI/Czech.lproj/Localizable.strings index 58cd7c7f5..3b9017263 100644 --- a/UI/PreferencesUI/Czech.lproj/Localizable.strings +++ b/UI/PreferencesUI/Czech.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Danish.lproj/Localizable.strings b/UI/PreferencesUI/Danish.lproj/Localizable.strings index 72d890c45..bdd11fe50 100644 --- a/UI/PreferencesUI/Danish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Danish.lproj/Localizable.strings @@ -187,6 +187,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk"; diff --git a/UI/PreferencesUI/Dutch.lproj/Localizable.strings b/UI/PreferencesUI/Dutch.lproj/Localizable.strings index 2940e2354..97cf461a9 100644 --- a/UI/PreferencesUI/Dutch.lproj/Localizable.strings +++ b/UI/PreferencesUI/Dutch.lproj/Localizable.strings @@ -194,6 +194,7 @@ "Please enter your signature below" = "Stel de ondertekening hieronder op"; "Please specify a valid sender address." = "Geef alstublieft een geldig afzendadres aan."; "Please specify a valid reply-to address." = "Geef alstublieft een geldig antwoordadres aan."; +"Specify a hostname other than the local host" = "Geef een hostname anders dan de locale hostname op"; /* Additional Parameters */ "Additional Parameters" = "Extra Parameters"; @@ -249,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index ca4638831..9b86f170a 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; @@ -400,3 +401,11 @@ "monsterid" = "Monster"; "wavatar" = "Wavatar"; "retro" = "Retro"; + +/* Animation Level */ +"Animation Level" = "Animation Level"; +/* Normal Animation Mode */ +"animation_NORMAL" = "Normal"; +/* Limited Animation Mode */ +"animation_LIMITED" = "Limited"; +"animation_NONE" = "None"; \ No newline at end of file diff --git a/UI/PreferencesUI/Finnish.lproj/Localizable.strings b/UI/PreferencesUI/Finnish.lproj/Localizable.strings index 6cddc5560..f5b81cdc8 100644 --- a/UI/PreferencesUI/Finnish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Finnish.lproj/Localizable.strings @@ -194,6 +194,7 @@ "Please enter your signature below" = "Ole hyvä ja syötä allekirjoituksesi alle"; "Please specify a valid sender address." = "Ole hyvä ja syötä kelvollinen lähettäjäosoite"; "Please specify a valid reply-to address." = "Ole hyvä ja syötä kelvollinen vastausosoite"; +"Specify a hostname other than the local host" = "Määritä muu kuin paikallinen palvelinosoite"; /* Additional Parameters */ "Additional Parameters" = "Lisäparametrit"; @@ -249,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/French.lproj/Localizable.strings b/UI/PreferencesUI/French.lproj/Localizable.strings index 59672e29c..c57e974d6 100644 --- a/UI/PreferencesUI/French.lproj/Localizable.strings +++ b/UI/PreferencesUI/French.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; @@ -400,3 +401,11 @@ "monsterid" = "Monstre"; "wavatar" = "Wavatar"; "retro" = "Rétro"; + +/* Animation Level */ +"Animation Level" = "Niveau d'animation"; +/* Normal Animation Mode */ +"animation_NORMAL" = "Normal"; +/* Limited Animation Mode */ +"animation_LIMITED" = "Restreint"; +"animation_NONE" = "Aucun"; \ No newline at end of file diff --git a/UI/PreferencesUI/German.lproj/Localizable.strings b/UI/PreferencesUI/German.lproj/Localizable.strings index 7041e1177..330d06b98 100644 --- a/UI/PreferencesUI/German.lproj/Localizable.strings +++ b/UI/PreferencesUI/German.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; @@ -400,3 +401,11 @@ "monsterid" = "Monster"; "wavatar" = "Wavatar"; "retro" = "Retro"; + +/* Animation Level */ +"Animation Level" = "Animationsstufe"; +/* Normal Animation Mode */ +"animation_NORMAL" = "Normal"; +/* Limited Animation Mode */ +"animation_LIMITED" = "Begrenzt"; +"animation_NONE" = "Keine"; \ No newline at end of file diff --git a/UI/PreferencesUI/Hebrew.lproj/Localizable.strings b/UI/PreferencesUI/Hebrew.lproj/Localizable.strings index cbc2fcb6d..770b0d739 100644 --- a/UI/PreferencesUI/Hebrew.lproj/Localizable.strings +++ b/UI/PreferencesUI/Hebrew.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Hungarian.lproj/Localizable.strings b/UI/PreferencesUI/Hungarian.lproj/Localizable.strings index d697e6b2b..73b7b19fd 100644 --- a/UI/PreferencesUI/Hungarian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Hungarian.lproj/Localizable.strings @@ -249,6 +249,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Icelandic.lproj/Localizable.strings b/UI/PreferencesUI/Icelandic.lproj/Localizable.strings index 565546814..817bc4c2d 100644 --- a/UI/PreferencesUI/Icelandic.lproj/Localizable.strings +++ b/UI/PreferencesUI/Icelandic.lproj/Localizable.strings @@ -159,6 +159,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Italian.lproj/Localizable.strings b/UI/PreferencesUI/Italian.lproj/Localizable.strings index 0edb3d8e9..4205438f7 100644 --- a/UI/PreferencesUI/Italian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Italian.lproj/Localizable.strings @@ -247,6 +247,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Latvian.lproj/Localizable.strings b/UI/PreferencesUI/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..c052a7467 --- /dev/null +++ b/UI/PreferencesUI/Latvian.lproj/Localizable.strings @@ -0,0 +1,411 @@ +/* toolbar */ +"Save and Close" = "Saglabāt un aizvērt"; +"Close" = "Aizvērt"; +"Preferences saved" = "Preferences saglabātas"; + +/* Unsaved changes confirmation dialog title */ +"Unsaved Changes" = "Nesaglabātas izmaiņas"; + +/* Unsaved changes confirmation dialog text */ +"Do you want to save your changes made to the configuration?" = "Vai vēlaties saglabāt izmaiņas, kas veiktas konfigurācijā?"; + +/* Unsaved changes confirmation dialog button */ +"Save" = "Saglabāt"; + +/* Unsaved changes confirmation dialog button */ +"Don't Save" = "Nesaglabāt"; + +/* tabs */ +"General" = "Vispārīgi"; +"Calendar Options" = "Kalendāra opcijas"; +"Contacts Options" = "Kontaktu opcijas"; +"Mail Options" = "Pasta opcijas"; +"IMAP Accounts" = "IMAP konti"; +"Vacation" = "Atvaļinājums"; +"Forward" = "Pārsūtīt"; +"Password" = "Parole"; +"Categories" = "Kategorijas"; +"Appointments invitations" = "Tikšanās uzaicinājums"; +"Name" = "Nosaukums"; +"Color" = "Krāsa"; +"Add" = "Pievienot"; +"Delete" = "Dzēst"; + +/* contacts categories */ +"contacts_category_labels" = "Kolēģi, konkurenti, klienti, draugi, ģimene, biznesa partneri, piegādātāji, Prese, VIP"; + +/* vacation (auto-reply) */ +"Enable vacation auto reply" = "Iespējot automātisku atvaļinājuma atbildi"; +"Enable custom auto reply subject" = "Iespējot pielāgotu automātisko atbildi"; +"Auto reply subject" = "Automātiskā atbilde"; +"You can write ${subject} to insert the original subject" = "Varat rakstīt ${subject} ievietot sākotnējo tēmu"; +"Auto reply message" = "Automātiskās atbildes ziņa"; +"Email addresses (separated by commas)" = "E-pasta adreses (atdalītas ar komatu)"; +"Add default email addresses" = "Pievienot noklusējuma e-pasta adreses"; +"Days between responses" = "Dienas starp atbildēm"; +"Do not send responses to mailing lists" = "Nesūtīt automātiskās atbildes adresātu sarakstam"; +"Enable auto reply on" = "Ieslēgt automātisko atbildi"; +"Disable auto reply on" = "Izslēgt automātisko atbildi"; +"Always send vacation message response" = "Vienmēr sūtīt atvaļinājuma atbildes ziņojumu"; +"Please specify your message and your email addresses for which you want to enable auto reply." += "Lūdzu, norādiet ziņojuma adresātu un e-pasta adreses, kuras vēlaties iespējot automātisko atbildi."; +"Your vacation message must not end with a single dot on a line." = "Jūsu atvaļinājums ziņa nedrīkst beigties ar vienu punktiņu līnijā."; +"End date of your auto reply must be in the future." += "Jūsu automātiskās atbildes beigu datumam ir jābūt nākotnē."; + +/* forward messages */ +"Forward incoming messages" = "Pārsūtīt ienākošos ziņojumus"; +"Keep a copy" = "Paturēt kopiju"; +"Please specify an address to which you want to forward your messages." += "Lūdzu, norādiet adresi, uz kuru vēlaties pārsūtīt ziņojumu."; +"You are not allowed to forward your messages to an external email address." = "Jums nav atļauts pārsūtīt ziņojumus uz ārēju e-pasta adresi."; +"You are not allowed to forward your messages to an internal email address." = "Jums nav atļauts nosūtīt savus ziņojumus iekšējai e-pasta adresei."; + +/* d & t */ +"Current Time Zone" = "Pašreizējā laika josla"; +"Short Date Format" = "Īsais datuma formāts"; +"Long Date Format" = "Garais datuma formāts"; +"Time Format" = "Datuma formāts"; +"default" = "Noklusējuma"; +"Default Module" = "Noklusējuma modulis"; +"Save" = "Saglabāt"; +"shortDateFmt_0" = "%d-%b-%y"; +"shortDateFmt_1" = "%d-%m-%y"; +"shortDateFmt_2" = "%d/%m/%y"; +"shortDateFmt_3" = "%e/%m/%y"; +"shortDateFmt_4" = "%d-%m-%Y"; +"shortDateFmt_5" = "%d/%m/%Y"; +"shortDateFmt_6" = "%m-%d-%y"; +"shortDateFmt_7" = "%m/%d/%y"; +"shortDateFmt_8" = "%m/%e/%y"; +"shortDateFmt_9" = "%y-%m-%d"; +"shortDateFmt_10" = "%y/%m/%d"; +"shortDateFmt_11" = "%y.%m.%d"; +"shortDateFmt_12" = "%Y-%m-%d"; +"shortDateFmt_13" = "%Y/%m/%d"; +"shortDateFmt_14" = "%Y.%m.%d"; +"shortDateFmt_15" = ""; + +"longDateFmt_0" = "%A, %B %d, %Y"; +"longDateFmt_1" = "%B %d, %Y"; +"longDateFmt_2" = "%A, %d %B, %Y"; +"longDateFmt_3" = "%d %B, %Y"; +"longDateFmt_4" = ""; +"longDateFmt_5" = ""; +"longDateFmt_6" = ""; +"longDateFmt_7" = ""; +"longDateFmt_8" = ""; +"longDateFmt_9" = ""; +"longDateFmt_10" = ""; +"timeFmt_0" = "%I:%M %p"; +"timeFmt_1" = "%H:%M"; +"timeFmt_2" = ""; +"timeFmt_3" = ""; +"timeFmt_4" = ""; + +/* Timezone autocompletion */ +"No matches found." = "Nav atrasta neviena atbilstība."; + +/* calendar */ +"Week begins on" = "Nedēļa sākas ar"; +"Day start time" = "Dienas sākuma laiks"; +"Day end time" = "Dienas beigu laiks"; +"Day start time must be prior to day end time." = "Dienas sākuma laikam jābūt pirms dienas beigu laika."; +"Week days to display" = "Nedēļas dienas parādīšana"; +"Show time as busy outside working hours" = "Rādīt, ārpus darba laiku, kā aizņemts"; +"First week of year" = "Gada pirmā nedēļa"; +"Enable reminders for Calendar items" = "Iespējot atgādinājumus par kalendāra ierakstiem"; +"Play a sound when a reminder comes due" = "Atskaņot skaņu, kad atgādinājums stājas spēkā"; +"Default reminder" = "Noklusējuma atgādinājums"; +"firstWeekOfYear_January1" = "Sākums 1. janvārī"; +"firstWeekOfYear_First4DayWeek" = "Pirmās nedēļas 4 dienas"; +"firstWeekOfYear_FirstFullWeek" = "Pirmā pilnā nedēļa"; +"Prevent from being invited to appointments" = "Izvairītos no aicinājuma uz tikšanos"; +"White list for appointment invitations" = "Tikšanās uzaicinājumu baltais saraksts"; +"Contacts Names" = "Kontaktu nosaukumi"; + +/* Default Calendar */ +"Default calendar" = "Noklusējuma kalendārs"; +"selectedCalendar" = "Atlasītajam kalendāram"; +"personalCalendar" = "Personiskais kalendārs"; +"firstCalendar" = "Vispirms iespējot kalendāru"; +"reminder_NONE" = "Nav atgādinājumu"; +"reminder_5_MINUTES_BEFORE" = "pirms 5 minūtēm"; +"reminder_10_MINUTES_BEFORE" = "pirms 10 minūtēm"; +"reminder_15_MINUTES_BEFORE" = "pirms 15 minūtēm"; +"reminder_30_MINUTES_BEFORE" = "pirms 30 minūtēm"; +"reminder_45_MINUTES_BEFORE" = "pirms 45 minūtēm"; +"reminder_1_HOUR_BEFORE" = "pirms 1 stundas"; +"reminder_2_HOURS_BEFORE" = "pirms 2 stundām"; +"reminder_5_HOURS_BEFORE" = "pirms 5 stundām"; +"reminder_15_HOURS_BEFORE" = "pirms 15 stundām"; +"reminder_1_DAY_BEFORE" = "pirms 1 dienas"; +"reminder_2_DAYS_BEFORE" = "pirms 2 dienām"; +"reminder_1_WEEK_BEFORE" = "pirms 1 nedēļas"; + +/* Mailer */ +"Labels" = "Etiķetes"; +"Label" = "Etiķete"; +"New label" = "Jauna etiķete"; +"Show subscribed mailboxes only" = "Rādīt tikai abonētajām pastkastēm"; +"Synchronize only default mail folders (EAS)" = "Sinhronizēt tikai noklusējuma pasta mapes (EAS)"; +"Sort messages by threads" = "Kārtot ziņojumus pēc pavedieniem"; +"When sending mail, add unknown recipients to my" = "Sūtot e-pastu, pievienojiet nezināmos adresātus manai"; +"Address Book" = "Adrešu grāmata"; +"Forward messages" = "Pārsūtīt ziņojumus"; +"messageforward_inline" = "Rindā"; +"messageforward_attached" = "Kā pielikumu"; +"When replying to a message" = "Atbildot uz ziņojumu"; +"replyplacement_above" = "Sākt savu atbildi virs citāta"; +"replyplacement_below" = "Sākt savu atbildi zem citāta"; +"And place my signature" = "Un ievietot manu parakstu"; +"signatureplacement_above" = "zem manas atbildes"; +"signatureplacement_below" = "zem citāta"; +"Compose messages in" = "Rakstīt ziņojumus"; +"composemessagestype_html" = "HTML"; +"composemessagestype_text" = "Vienkāršs teksts"; + +/* Base font size for messages composed in HTML */ +"Default font size" = "Noklusējuma fonta lielums"; + +"Display remote inline images" = "Attēlot attāli iekļautos attēlus"; +"displayremoteinlineimages_never" = "Nekad"; +"displayremoteinlineimages_always" = "Vienmēr"; +"Auto save every" = "Automātiski saglabāt ik pēc"; +"minutes" = "minūtes"; + +/* Contact */ +"Personal Address Book" = "Personiskā adrešu grāmata"; +"Collected Address Book" = "Savāktā adrešu grāmata"; + +/* IMAP Accounts */ +"Mail Account" = "E-pasta konts"; +"New Mail Account" = "Jauns e-pasta konts"; +"Server Name" = "Servera nosaukums"; +"Port" = "Ports"; +"Encryption" = "Šifrēšana"; +"None" = "Neviens"; +"User Name" = "Lietotāja vārds"; +"Full Name" = "Pilns vārds"; +"Email" = "E-pasts"; +"Reply To Email" = "Atbildēt uz e-pastu"; +"Signature" = "Paraksts"; +"(Click to create)" = "(Noklikšķiniet, lai izveidotu)"; +"Please enter your signature below" = "Lūdzu, ievadiet savu parakstu zem"; +"Please specify a valid sender address." = "Lūdzu, norādiet derīgu sūtītāja adresi."; +"Please specify a valid reply-to address." = "Lūdzu, norādiet derīgu atbildēt-uz adresi."; +"Specify a hostname other than the local host" = "Jānorāda resursdatora nosaukums, izņemot vietējo resursdatoru"; + +/* Additional Parameters */ +"Additional Parameters" = "Papildu parametri"; + +/* password */ +"New password" = "Jauna parole"; +"Confirmation" = "Apstiprinājums"; +"Change" = "Mainīt"; + +/* Event+task classifications */ +"Default events classification" = "Noklusējuma notikumu klasifikācija"; +"Default tasks classification" = "Noklusējuma uzdevumu klasifikācija"; +"PUBLIC_item" = "Publisks"; +"CONFIDENTIAL_item" = "Konfidenciāli"; +"PRIVATE_item" = "Privāts"; + +/* Event+task categories */ +"Calendar Category" = "Kalendāra kategorija"; +"Add Calendar Category" = "Pievienot kalendāra kategorijai"; +"New category" = "Jauna kategorija"; +"Remove Calendar Category" = "Noņemiet kalendāra kategorijas"; +"Contact Category" = "Kontaktu kategorijas"; +"Add Contact Category" = "Pievienot kontaktpersonu kategorijas"; +"Remove Contact Category" = "Noņemt kontaktpersonu kategorijas"; +"category_none" = "Neviens"; +"calendar_category_labels" = "Gadadienas, Dzimšanas dienas, Bizness, Zvani, Klienti, Konkurence, Izlase, Sekošana, Dāvanas, Brīvdienas, Idejas, Sapulces, Jautājumi, Dažādi, Personīgi, Projekti, Valsts svētki, Statusi, Piegādātāji, Ceļojumi, Atvaļinājumi"; + +/* Default module */ +"Calendar" = "Kalendārs"; +"Contacts" = "Adrešu grāmata"; +"Mail" = "E-pasts"; +"Last" = "Pēdējais lietotais"; +"Default Module " = "Standarta modulis"; +"SOGo Version" = "SOGo versija"; + +/* Confirmation asked when changing the language */ +"Save preferences and reload page now?" = "Saglabāt preferences un pārlādēt lapu tūlīt?"; +"Language" = "Valoda"; +"choose" = "Izvēlieties..."; +"Arabic" = "العربية"; +"Basque" = "Euskara"; +"Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; +"Croatian" = "Hrvatski"; +"Czech" = "Česky"; +"Danish" = "Dansk (Danmark)"; +"Dutch" = "Nederlands"; +"English" = "English"; +"Finnish" = "Suomi"; +"French" = "Français"; +"German" = "Deutsch"; +"Hebrew" = "עברית"; +"Hungarian" = "Magyar"; +"Icelandic" = "Íslenska"; +"Italian" = "Italiano"; +"Latvian" = "Latvijas"; +"Lithuanian" = "Lietuvių"; +"Macedonian" = "Македонски"; +"NorwegianBokmal" = "Norsk bokmål"; +"NorwegianNynorsk" = "Norsk nynorsk"; +"Polish" = "Polski"; +"Portuguese" = "Português"; +"BrazilianPortuguese" = "Português brasileiro"; +"Russian" = "Русский"; +"Serbian" = "Српски"; +"Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; +"SpanishSpain" = "Español (España)"; +"SpanishArgentina" = "Español (Argentina)"; +"Swedish" = "Svenska"; +"TurkishTurkey" = "Türkçe (Türkiye)"; +"Ukrainian" = "Українська"; +"Welsh" = "Cymraeg"; + +"Refresh View" = "Atsvaidzināt skatu"; +"refreshview_manually" = "Manuāli"; +"refreshview_every_minute" = "Katru minūti"; +"refreshview_every_2_minutes" = "Ik pēc 2 minūtēm"; +"refreshview_every_5_minutes" = "Ik pēc 5 minūtēm"; +"refreshview_every_10_minutes" = "Ik pēc 10 minūtēm"; +"refreshview_every_20_minutes" = "Ik pēc 20 minūtēm"; +"refreshview_every_30_minutes" = "Ik pēc 30 minūtēm"; +"refreshview_once_per_hour" = "Reizi stundā"; + +/* Return receipts */ +"When I receive a request for a return receipt" = "Kad saņemu pieprasījuma par saņemšanu"; +"Never send a return receipt" = "Nekad nosūtīt atskaites par saņemšanu"; +"Allow return receipts for some messages" = "Ļaut atskaites par saņemšanu dažiem ziņojumiem"; +"If I'm not in the To or Cc of the message" = "Ja es neesmu ziņojuma lodziņā Kam vai Kopija"; +"If the sender is outside my domain" = "Ja sūtītājs ir ārpus mana domēna"; +"In all other cases" = "Visos pārējos gadījumos"; +"Never send" = "Nekad nesūtīt"; +"Always send" = "Vienmēr sūtīt"; +"Ask me" = "Jautāt man"; + +/* Filters - UIxPreferences */ +"Filters" = "Filtri"; +"Active" = "Aktīvs"; +"Move Up" = "Pārvietot augšup"; +"Move Down" = "Pārvietot lejup"; +"Connection error" = "Savienojuma kļūda"; +"Service temporarily unavailable" = "Pakalpojums īslaicīgi nav pieejams"; + +/* Aria label for filter enable checkbox */ +"Enable filter" = "Iespējot filtru"; + +/* Filters - UIxFilterEditor */ +"Filter name" = "Filtra nosaukums"; +/* Button label */ +"Add a condition" = "Pievienot nosacījums"; +/* Button label */ +"Add an action" = "Darbības pievienošana"; +"For incoming messages that" = "Ienākošajiem ziņojumiem, kuri"; +"match all of the following rules" = "atbilst visiem noteikumiem"; +"match any of the following rules" = "atbilst jebkuram noteikumam"; +"match all messages" = "atbilst visas ziņas"; +"Perform these actions" = "Veiciet šīs darbības"; +"Untitled Filter" = "Nenosaukta filtrs"; +"Subject" = "Temats"; +"From" = "No"; +"To" = "Kam"; +"Cc" = "Kopija"; +"To or Cc" = "Kam vai Kopija"; +"Size (Kb)" = "Izmērs (Kb)"; +"Header" = "Galvene"; +"Body" = "Korpuss"; +"Flag the message with" = "Ziņojums ar karodziņu"; + +/* Select field label of "flag message" mail filter action */ +"Flag" = "Karogs"; + +"Discard the message" = "Atcelt ziņojumu"; +"File the message in" = "Ziņojumu fails"; + +/* Select field label of "file message" mail filter action */ +"Mailbox" = "Pastkaste"; + +"Keep the message" = "Saglabāt ziņojumu"; +"Forward the message to" = "Pārsūtīt ziņu"; + +/* Input field label of "forward" mail filter action */ +"Email" = "E-pasts"; + +"Send a reject message" = "Nosūtīt noraidīšanas ziņu"; + +/* Input field label of "reject" mail filter action */ +"Message" = "Ziņojums"; + +"Send a vacation message" = "Sūtīt atvaļinājuma ziņu"; +"Stop processing filter rules" = "Apturēt filtru noteikumu apstrādi"; +"is under" = "ir zem"; +"is over" = "ir virs"; +"is" = "ir"; +"is not" = "nav"; +"contains" = "satur"; +"does not contain" = "nesatur"; +"matches" = "atbilstības"; +"does not match" = "neatbilst"; +"matches regex" = "regulāra izteiksme sakrīt"; +"does not match regex" = "regulāra izteiksme neatbilst"; +/* Placeholder for the value field of a condition */ +"Value" = "Vērtība"; +"Seen" = "Redzējis"; +"Deleted" = "Izdzēsts"; +"Answered" = "Atbildēts"; +"Flagged" = "Ar karodziņu"; +"Junk" = "Nevēlams"; +"Not Junk" = "Nav nevēlams"; + +/* Password policy */ +"The password was changed successfully." = "Parole sekmīgi nomainīta."; +"Password must not be empty." = "Parole nedrīkst būt tukša."; +"The passwords do not match. Please try again." = "Paroles nesakrīt. Lūdzu, mēģiniet vēlreiz."; +"Password change failed" = "Paroles maiņa neizdevās"; +"Password change failed - Permission denied" = "Paroles maiņa neizdevās - Atļauja liegta"; +"Password change failed - Insufficient password quality" = "Paroles maiņa neizdevās - Nepietiekama paroles kvalitāte"; +"Password change failed - Password is too short" = "Paroles maiņa neizdevās - parole ir pārāk īsa"; +"Password change failed - Password is too young" = "Paroles maiņa neizdevās - parole ir pārāk maza, jauna"; +"Password change failed - Password is in history" = "Paroles maiņa neizdevās - parole atrodas vēsturē"; +"Unhandled policy error: %{0}" = "Neapstrādāta politikas kļūda: %{0}"; +"Unhandled error response" = "Neapstrādāta kļūda"; +"Password change is not supported." = "Paroles maiņa nav atbalstīta."; +"Unhandled HTTP error code: %{0}" = "Neparedzēts HTTP kļūdas kods: %{0}"; +"Cancel" = "Atcelt"; +"Invitations" = "Uzaicinājumi"; +"Edit Filter" = "Rediģēt filtru"; +"Delete Filter" = "Dzēst filtru"; +"Create Filter" = "Izveidot filtru"; +"Delete Label" = "Dzēst etiķeti"; +"Create Label" = "Izveidot etiķeti"; +"Accounts" = "Konti"; +"Edit Account" = "Rediģēt kontu"; +"Delete Account" = "Dzēst kontu"; +"Create Account" = "Izveidot kontu"; +"Account Name" = "Konta nosaukums"; +"SSL" = "SSL"; +"TLS" = "TLS"; + +/* Avatars */ +"Use Gravatar" = "Izmantojiet Gravatar"; +"Alternate Avatar" = "Alternatīvais avatārs"; +"none" = "Neviens"; +"identicon" = "Idect. ikona"; +"monsterid" = "Monster"; +"wavatar" = "Wavatar"; +"retro" = "Retro"; + +/* Animation Level */ +"Animation Level" = "Animācijas līmenis"; +/* Normal Animation Mode */ +"animation_NORMAL" = "Normāls"; +/* Limited Animation Mode */ +"animation_LIMITED" = "Ierobežota"; +"animation_NONE" = "Neviens"; diff --git a/UI/PreferencesUI/Lithuanian.lproj/Localizable.strings b/UI/PreferencesUI/Lithuanian.lproj/Localizable.strings index 24dfc05cb..be948903f 100644 --- a/UI/PreferencesUI/Lithuanian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Lithuanian.lproj/Localizable.strings @@ -222,6 +222,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Makedonų"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Macedonian.lproj/Localizable.strings b/UI/PreferencesUI/Macedonian.lproj/Localizable.strings index 5cb496e30..ba5530c5b 100644 --- a/UI/PreferencesUI/Macedonian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Macedonian.lproj/Localizable.strings @@ -249,6 +249,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings b/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings index 04248eb68..38c99361c 100644 --- a/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings +++ b/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings @@ -214,6 +214,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Macedonian" = "Makedonsk"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings b/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings index e0007804f..8c1a17aa3 100644 --- a/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings +++ b/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings @@ -214,6 +214,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/PreferencesUI/Polish.lproj/Localizable.strings b/UI/PreferencesUI/Polish.lproj/Localizable.strings index a6ab40c3f..668cdcc74 100644 --- a/UI/PreferencesUI/Polish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Polish.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; @@ -400,3 +401,11 @@ "monsterid" = "Monster"; "wavatar" = "Wavatar"; "retro" = "Retro"; + +/* Animation Level */ +"Animation Level" = "Poziom animacji"; +/* Normal Animation Mode */ +"animation_NORMAL" = "Normalny"; +/* Limited Animation Mode */ +"animation_LIMITED" = "Ograniczony"; +"animation_NONE" = "Bez animacji"; \ No newline at end of file diff --git a/UI/PreferencesUI/Portuguese.lproj/Localizable.strings b/UI/PreferencesUI/Portuguese.lproj/Localizable.strings index 5962e16d9..b384a7659 100644 --- a/UI/PreferencesUI/Portuguese.lproj/Localizable.strings +++ b/UI/PreferencesUI/Portuguese.lproj/Localizable.strings @@ -222,6 +222,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Macedonian" = "Macedônico"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/PreferencesUI/Russian.lproj/Localizable.strings b/UI/PreferencesUI/Russian.lproj/Localizable.strings index 69219aa17..4e0e90421 100644 --- a/UI/PreferencesUI/Russian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Russian.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Serbian.lproj/Localizable.strings b/UI/PreferencesUI/Serbian.lproj/Localizable.strings index b76700ea3..dd50dba8e 100644 --- a/UI/PreferencesUI/Serbian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Serbian.lproj/Localizable.strings @@ -249,6 +249,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Slovak.lproj/Localizable.strings b/UI/PreferencesUI/Slovak.lproj/Localizable.strings index 28390b658..ef777e3a6 100644 --- a/UI/PreferencesUI/Slovak.lproj/Localizable.strings +++ b/UI/PreferencesUI/Slovak.lproj/Localizable.strings @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Slovenian.lproj/Localizable.strings b/UI/PreferencesUI/Slovenian.lproj/Localizable.strings index c63f03d82..87ec8fd0e 100644 --- a/UI/PreferencesUI/Slovenian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Slovenian.lproj/Localizable.strings @@ -195,6 +195,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings b/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings index b8ca2f9b3..8bc41c5e7 100644 --- a/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings +++ b/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings @@ -223,6 +223,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "NorwegianBokmal" = "Norsk bokmål"; "NorwegianNynorsk" = "Norsk nynorsk"; diff --git a/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings b/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings index bd28fcd1e..f7942dfe8 100644 --- a/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings +++ b/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings @@ -247,6 +247,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Swedish.lproj/Localizable.strings b/UI/PreferencesUI/Swedish.lproj/Localizable.strings index 382cca95d..5ba1234c4 100644 --- a/UI/PreferencesUI/Swedish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Swedish.lproj/Localizable.strings @@ -167,6 +167,7 @@ Servernamn:"; "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/TurkishTurkey.lproj/Localizable.strings b/UI/PreferencesUI/TurkishTurkey.lproj/Localizable.strings index d6a7220f6..a3d62a9a7 100644 --- a/UI/PreferencesUI/TurkishTurkey.lproj/Localizable.strings +++ b/UI/PreferencesUI/TurkishTurkey.lproj/Localizable.strings @@ -108,9 +108,9 @@ /* calendar */ "Week begins on" = "Haftanın ilk günü"; -"Day start time" = "Günün başlangıç saati"; -"Day end time" = "Günün bitiş saati"; -"Day start time must be prior to day end time." = "Günün başlangıç saati, günün bitiş saatinden önce olmalı."; +"Day start time" = "Gün başlangıç saati"; +"Day end time" = "Gün bitiş saati"; +"Day start time must be prior to day end time." = "Gün başlangıç saati, gün bitiş saatinden önce olmalı."; "Week days to display" = "Gösterilen günler"; "Show time as busy outside working hours" = "Mesai dışındaki saatleri meşgul olarak göster"; "First week of year" = "Yılın ilk haftası"; @@ -250,6 +250,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; @@ -400,3 +401,11 @@ "monsterid" = "Canavar"; "wavatar" = "Wavatar"; "retro" = "Retro"; + +/* Animation Level */ +"Animation Level" = "Animasyon Seviyesi"; +/* Normal Animation Mode */ +"animation_NORMAL" = "Normal"; +/* Limited Animation Mode */ +"animation_LIMITED" = "Sınırlı"; +"animation_NONE" = "Yok"; \ No newline at end of file diff --git a/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings b/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings index 6e4cb0ef2..160f20642 100644 --- a/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings @@ -177,6 +177,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/PreferencesUI/Welsh.lproj/Localizable.strings b/UI/PreferencesUI/Welsh.lproj/Localizable.strings index c8f425ce8..65c787a47 100644 --- a/UI/PreferencesUI/Welsh.lproj/Localizable.strings +++ b/UI/PreferencesUI/Welsh.lproj/Localizable.strings @@ -165,6 +165,7 @@ "Hungarian" = "Magyar"; "Icelandic" = "Íslenska"; "Italian" = "Italiano"; +"Latvian" = "Latvijas"; "Lithuanian" = "Lietuvių"; "Macedonian" = "Македонски"; "NorwegianBokmal" = "Norsk bokmål"; diff --git a/UI/SOGoUI/SOGoFolderAdvisory.h b/UI/SOGoUI/SOGoFolderAdvisory.h index 79849ced7..3e5bb98a9 100644 --- a/UI/SOGoUI/SOGoFolderAdvisory.h +++ b/UI/SOGoUI/SOGoFolderAdvisory.h @@ -119,6 +119,18 @@ @interface SOGoFolderItalianRemovalAdvisory : SOGoFolderRemovalAdvisory @end +@interface SOGoFolderLatvianAdditionAdvisory : SOGoFolderAdditionAdvisory +@end + +@interface SOGoFolderLatvianRemovalAdvisory : SOGoFolderRemovalAdvisory +@end + +@interface SOGoFolderLithuanianAdditionAdvisory : SOGoFolderAdditionAdvisory +@end + +@interface SOGoFolderLithuanianRemovalAdvisory : SOGoFolderRemovalAdvisory +@end + @interface SOGoFolderNorwegianBokmalAdditionAdvisory : SOGoFolderAdditionAdvisory @end diff --git a/UI/SOGoUI/SOGoFolderAdvisory.m b/UI/SOGoUI/SOGoFolderAdvisory.m index 5fa0e3bf8..bada26475 100644 --- a/UI/SOGoUI/SOGoFolderAdvisory.m +++ b/UI/SOGoUI/SOGoFolderAdvisory.m @@ -291,6 +291,18 @@ @implementation SOGoFolderItalianRemovalAdvisory @end +@implementation SOGoFolderLatvianAdditionAdvisory +@end + +@implementation SOGoFolderLatvianRemovalAdvisory +@end + +@implementation SOGoFolderLithuanianAdditionAdvisory +@end + +@implementation SOGoFolderLithuanianRemovalAdvisory +@end + @implementation SOGoFolderNorwegianBokmalAdditionAdvisory @end diff --git a/UI/Scheduler/Czech.lproj/Localizable.strings b/UI/Scheduler/Czech.lproj/Localizable.strings index cb915780f..04a9d4ffd 100644 --- a/UI/Scheduler/Czech.lproj/Localizable.strings +++ b/UI/Scheduler/Czech.lproj/Localizable.strings @@ -526,7 +526,7 @@ vtodo_class2 = "(Důvěrný úkol)"; "tagWasAdded" = "Chcete-li synchronizovat tento kalendář, budete muset znovu načíst data do svého mobilního zařízení.\nPokračovat?"; "tagWasRemoved" = "Odstraníte-li u tohoto kalendáře synchronizaci, budete muset znovu načíst data do svého mobilního zařízení.\nPokračovat?"; "DestinationCalendarError" = "The source and destination calendars are the same. Please try to copy to a different calendar."; -"EventCopyError" = "The copy failed. Please try to copy to a difference calendar."; +"EventCopyError" = "Kopírování selhalo. Zkuste prosím zkopírovat do jiného kalendáře."; "Please select at least one calendar" = "Prosím zvolte alespoň jeden kalendář"; "Open Task..." = "Otevřít úkol..."; "Mark Completed" = "Označit jako dokončené"; diff --git a/UI/Scheduler/Dutch.lproj/Localizable.strings b/UI/Scheduler/Dutch.lproj/Localizable.strings index b349f83b7..e3a16df9a 100644 --- a/UI/Scheduler/Dutch.lproj/Localizable.strings +++ b/UI/Scheduler/Dutch.lproj/Localizable.strings @@ -526,7 +526,7 @@ vtodo_class2 = "(Vertrouwelijke taak)"; "tagWasAdded" = "Wilt u deze agenda synchroniseren, dan moet u de gegevens opnieuw laden op uw mobiele apparaat.\nDoorgaan?"; "tagWasRemoved" = "Als u deze agenda wil verwijderen van de synchronisatie, moet u de gegevens opnieuw laden op uw mobiele apparaat.\nDoorgaan?"; "DestinationCalendarError" = "De bron en bestemming agenda's zijn hetzelfde. Probeer te kopiëren naar een andere agenda."; -"EventCopyError" = "De kopie is mislukt. Probeer te kopiëren naar een verschil-agenda."; +"EventCopyError" = "Kopiëren mislukt. Probeer te kopiëren naar een andere agenda."; "Please select at least one calendar" = "Selecteer tenminste een agenda"; "Open Task..." = "Taak openen..."; "Mark Completed" = "Markeren als voltooid"; diff --git a/UI/Scheduler/Finnish.lproj/Localizable.strings b/UI/Scheduler/Finnish.lproj/Localizable.strings index 44e1a1287..99b8f2d6a 100644 --- a/UI/Scheduler/Finnish.lproj/Localizable.strings +++ b/UI/Scheduler/Finnish.lproj/Localizable.strings @@ -526,7 +526,7 @@ vtodo_class2 = "(Luottamuksellinen tehtävä)"; "tagWasAdded" = "Mobiililaitteesi kalenteritiedot on päivitettävä mikäli muutat kalenterisi tägiä.⏎ Jatketaanko?"; "tagWasRemoved" = "Mobiililaitteesi kalenteritiedot on päivitettävä mikäli haluat poistaa tämän kalenterin synkronoinnista.⏎ Jatketaanko?"; "DestinationCalendarError" = "Lähde- ja kohdekalenterit ovat samoja. Ole hyvä ja yritä kopiointia toiseen kalenteriin."; -"EventCopyError" = "Kopiointi epäonnistui. Ole hyvä ja yritä kopiointia toiseen kalenteriin."; +"EventCopyError" = "Kopiointi epäonnistui. Yritä kopiointia toiseen kalenteriin. "; "Please select at least one calendar" = "Ole hyvä ja valitse ainakin yksi kalenteri"; "Open Task..." = "Avaa tehtävä..."; "Mark Completed" = "Merkitse valmistuneeksi"; diff --git a/UI/Scheduler/Latvian.lproj/Localizable.strings b/UI/Scheduler/Latvian.lproj/Localizable.strings new file mode 100644 index 000000000..a77280c17 --- /dev/null +++ b/UI/Scheduler/Latvian.lproj/Localizable.strings @@ -0,0 +1,603 @@ +/* this file is in UTF-8 format! */ + +/* Tooltips */ +"Create a new event" = "Izveidot jaunu notikumu"; +"Create a new task" = "Izveidot jaunu uzdevumu"; +"Edit this event or task" = "Rediģēt šo notikumu vai uzdevumu"; +"Print the current calendar view" = "Drukāt pašreizējā kalendāra skatu"; +"Delete this event or task" = "Dzēst šo pasākumu vai uzdevumu"; +"Go to today" = "Pāriet uz šodienu"; +"Switch to day view" = "Pārslēgties uz dienas skatu"; +"Switch to week view" = "Pārslēgties uz nedēļas skatu"; +"Switch to month view" = "Pārslēgties uz mēneša skatu"; +"Switch to multi-columns day view" = "Pārslēgties uz multi-kolonnu dienas skatu "; +"Reload all calendars" = "Pārlādēt visus kalendārus"; + +/* Tabs */ +"Date" = "Datums"; +"Calendars" = "Kalendāri"; +"No events for selected criteria" = "Nav notikumu pēc izvēlētajiem kritērijiem"; +"No tasks for selected criteria" = "Nav uzdevumu pēc izvēlētajiem kritērijiem"; + +/* Day */ +"DayOfTheMonth" = "Mēneša diena"; +"dayLabelFormat" = "%m/%d/%Y"; +"today" = "Šodien"; +"Previous Day" = "Iepriekšējā diena"; +"Next Day" = "Nākamā diena"; + +/* Week */ +"Week" = "Nedēļa"; +"this week" = "šonedēļ"; +"Week %d" = "Nedēļa %d"; +"Previous Week" = "Iepriekšējā nedēļa"; +"Next Week" = "Nākamā nedēļa"; + +/* Month */ +"this month" = "šis mēnesis"; +"Previous Month" = "Iepriekšējais mēnesis"; +"Next Month" = "Nākamais mēnesis"; + +/* Year */ +"this year" = "šogad"; + +/* Menu */ +"Calendar" = "Kalendārs"; +"Contacts" = "Kontakti"; +"New Calendar..." = "Jauns kalendārs..."; +"Delete Calendar" = "Dzēst kalendāru..."; +"Unsubscribe Calendar" = "Atcelt abonēšanu kalendāram"; +"Sharing..." = "Koplieto..."; +"Export Calendar..." = "Eksportēt kalendāru..."; +"Import Events..." = "Importēt notikumus..."; +"Import Events" = "Importēt notikumus"; +"Select an iCalendar file (.ics)." = "Izvēlieties iCalendar failu (.ics)."; +"Upload" = "Augšupielādēt"; +"Uploading" = "Augšupielāde"; +"Publish Calendar..." = "Publicēt kalendāru..."; +"Reload Remote Calendars" = "Pārlādēt attālos kalendārus"; +"Properties" = "Rekvizīti"; +"Done" = "Darīts"; +"An error occurred while importing calendar." = "Radās kļūda, importējot kalendāru."; +"No event was imported." = "Nav notikumi importēti."; +"A total of %{0} events were imported in the calendar." = "Kopumā no %{0} notikumiem tika importēti kalendārā."; +"Compose E-Mail to All Attendees" = "Rakstīt e-pastu visiem dalībniekiem"; +"Compose E-Mail to Undecided Attendees" = "Rakstīt e-pastu iespējamajiem dalībniekiem"; + +/* Folders */ +"Personal calendar" = "Personiskais kalendārs"; + +/* Misc */ +"OpenGroupware.org" = "OpenGroupware.org"; +"Forbidden" = "Aizliegts"; + +/* acls */ +"Access rights to" = "Piekļuves tiesības"; +"For user" = "Lietotājam"; +"Any Authenticated User" = "Visi autentificētie lietotāji"; +"Public Access" = "Publiska piekļuve"; +"label_Public" = "Publisks"; +"label_Private" = "Privāts"; +"label_Confidential" = "Konfidenciāli"; +"label_Viewer" = "Skatīt visu"; +"label_DAndTViewer" = "Datuma un laika apskate"; +"label_Modifier" = "Modificēt"; +"label_Responder" = "Atbildēt uz"; +"label_None" = "Neviens"; +"View All" = "Skatīt visu"; +"View the Date & Time" = "Datuma un laika apskate"; +"Modify" = "Modificēt"; +"Respond To" = "Atbildēt uz"; +"None" = "Neviens"; +"This person can create objects in my calendar." += "Šī persona var izveidot ierakstus manā kalendārā."; +"This person can erase objects from my calendar." += "Šī persona var izdzēst ierakstus no mana kalendāra."; + +/* Button Titles */ +"Subscribe to a Calendar..." = "Abonēt kalendāru..."; +"Remove the selected Calendar" = "Noņemt atlasīto kalendāru"; +"New calendar" = "Jauns kalendārs"; +"Name of the Calendar" = "Kalendāra nosaukums"; +"new" = "Jauns"; +"Print view" = "Drukas skats"; +"edit" = "Labot"; +"delete" = "Dzēst"; +"proposal" = "Priekšlikums"; +"Save and Close" = "Saglabāt un aizvērt"; +"Close" = "Aizvērt"; +"Invite Attendees" = "Uzaicināt dalībniekus"; +"Attach" = "Pievienot"; +"Update" = "Atjaunināt"; +"Cancel" = "Atcelt"; +"Reset" = "Atiestatīt"; +"Save" = "Saglabāt"; +"show_rejected_apts" = "Rādīt noraidītās tikšanās"; +"hide_rejected_apts" = "Paslēpt noraidītās tikšanās"; + +/* Schedule */ +"Schedule" = "Grafiks"; +"No appointments found" = "Nav atrastas tikšanās"; +"Meetings proposed by you" = "Jūsu ierosinātā tikšanās"; +"Meetings proposed to you" = "Tev ierosinātas sanāksmes"; +"sched_startDateFormat" = "%d/%m %H:%M"; +"action" = "Darbība"; +"accept" = "Akceptēt"; +"decline" = "Noraidīt"; +"more attendees" = "Vairāk dalībnieki"; +"Hide already accepted and rejected appointments" = "Paslēpt akceptētās un noraidītās tikšanās"; +"Show already accepted and rejected appointments" = "Rādīt akceptētās un noraidītās tikšanās"; + +/* Print view */ +"LIST" = "Sarakts"; +"Print Settings" = "Drukas iestatījumi"; +"Title" = "Nosaukums"; +"Layout" = "Izkārtojums"; +"What to Print" = "Ko drukāt"; +"Options" = "Opcijas"; +"Tasks with no due date" = "Uzdevumi bez izpildes datuma"; +"Display working hours only" = "Rādīt tikai darba laiku"; +"Completed tasks" = "Pabeigtie uzdevumi"; +"Display events and tasks colors" = "Rādīt notikumus un uzdevumus krāsas"; +"Borders" = "Robežas"; +"Backgrounds" = "Foni"; + +/* Appointments */ +"Appointment viewer" = "Tikšanās skatītājs"; +"Appointment editor" = "Tikšanās redaktors"; +"Appointment proposal" = "Tikšanās ierosinātājs"; +"Appointment on" = "Tikšanās"; +"Start" = "Sākums"; +"End" = "Beigas"; +"Due Date" = "Izpildes datums"; +"Name" = "Nosaukums"; +"Email" = "E-pasts"; +"Status" = "Statuss"; +"% complete" = "% pabeigts"; +"Location" = "Vieta"; +"Add a category" = "Pievienot kategorijai"; +"Priority" = "Prioritāte"; +"Privacy" = "Konfidencialitāte"; +"Cycle" = "Cikls"; +"Cycle End" = "Cikla beigas"; +"Categories" = "Kategorijas"; +"Classification" = "Klasifikācija"; +"Duration" = "Ilgums"; +"Attendees" = "Dalībnieki"; +"Resources" = "Resursi"; +"Organizer" = "Organizētājs"; +"Description" = "Apraksts"; +"Document" = "Dokuments"; +"Category" = "Kategorija"; +"Repeat" = "Atkārtot"; +"Reminder" = "Atgādinājums"; +"General" = "Vispārīgi"; +"Reply" = "Atbildēt"; +"Created by" = "Izveidots"; +"You are invited to participate" = "Jūs tiekat uzaicināts piedalīties"; +"Target" = "Mērķis"; +"attributes" = "atribūti"; +"attendees" = "dalībnieki"; +"delegated from" = "deleģēts no"; + +/* checkbox title */ +"is private" = "ir privāts"; + +/* classification */ +"Public" = "Publisks"; +"Private" = "Privāts"; + +/* text used in overviews and tooltips */ +"empty title" = "Tukšs virsraksts"; +"private appointment" = "Privāta tikšanās"; +"Change..." = "Mainīt..."; + +/* Appointments (participation state) */ +"partStat_NEEDS-ACTION" = "Es apstiprināšu vēlāk"; +"partStat_ACCEPTED" = "Es piedalīšos"; +"partStat_DECLINED" = "Es nepiedalīšos"; +"partStat_TENTATIVE" = "Es piedalīšos"; +"partStat_DELEGATED" = "Es deleģēju"; +"partStat_OTHER" = "Cits"; + +/* Appointments (error messages) */ +"Conflicts found!" = "Atrasts konflikts!"; +"Invalid iCal data!" = "Nederīgi iCal dati!"; +"Could not create iCal data!" = "Nevarēja izveidot iCal datus!"; + +/* Searching */ +"view_all" = "Viss"; +"view_today" = "Šodien"; +"view_next7" = "Nākamās 7 dienas"; +"view_next14" = "Nākamās 14 dienas"; +"view_next31" = "Nākamās 31 diena"; +"view_thismonth" = "Šis mēnesis"; +"view_future" = "Visi nākotnes notikumi"; +"view_selectedday" = "Izvēlētā diena"; +"view_not_started" = "Neuzsāktie uzdevumi"; +"view_overdue" = "Nokavētie uzdevumi"; +"view_incomplete" = "Nepabeigtie uzdevumi"; +"View" = "Skatīt"; +"Title, category or location" = "Virsraksts, kategorija vai atrašanās vieta"; +"Entire content" = "Viss saturs"; +"Search" = "Meklēt"; +"Search attendees" = "Meklēt dalībnieku"; +"Search resources" = "Meklēt resursu"; +"Search appointments" = "Meklēt tikšanos "; +"All day Event" = "Visas dienas notikums"; +"check for conflicts" = "Pārbaudi, vai nav konfliktu"; +"URL" = "URL"; +"newAttendee" = "Pievienot dalībnieku"; + +/* calendar modes */ +"Overview" = "Pārskats"; +"Chart" = "Tabula"; +"List" = "Sarakts"; +"Columns" = "Kolonnas"; + +/* Priorities */ +"prio_0" = "Nav norādīts"; +"prio_1" = "Augsts"; +"prio_2" = "Augsts"; +"prio_3" = "Augsts"; +"prio_4" = "Augsts"; +"prio_5" = "Normāls"; +"prio_6" = "Zems"; +"prio_7" = "Zems"; +"prio_8" = "Zems"; +"prio_9" = "Zems"; + +/* access classes (privacy) */ +"PUBLIC_vevent" = "Publisks notikums"; +"CONFIDENTIAL_vevent" = "Konfidenciāls notikums"; +"PRIVATE_vevent" = "Privāts notikums"; +"PUBLIC_vtodo" = "Publisks uzdevums"; +"CONFIDENTIAL_vtodo" = "Konfidenciāls uzdevums"; +"PRIVATE_vtodo" = "Privāts uzdevums"; + +/* status type */ +"status_" = "Nav norādīts"; +"status_NOT-SPECIFIED" = "Nav norādīts"; +"status_TENTATIVE" = "Varbūtējs"; +"status_CONFIRMED" = "Apstiprināts"; +"status_CANCELLED" = "Atcelts"; +"status_NEEDS-ACTION" = "Nepieciešama darbība"; +"status_IN-PROCESS" = "Procesā"; +"status_COMPLETED" = "Pabeigts"; + +/* Priority level */ +"low" = "zems"; + +/* Priority level */ +"normal" = "normāls"; + +/* Priority level */ +"high" = "augsts"; + +/* Cycles */ +"cycle_once" = "cikls - vienreiz"; +"cycle_daily" = "cikls - ikdienas"; +"cycle_weekly" = "cikls - nedēļa"; +"cycle_2weeks" = "cikls - 2 nedēļas"; +"cycle_4weeks" = "cikls - 4 nedēļas"; +"cycle_monthly" = "mēneša cikls"; +"cycle_weekday" = "nedēļas dienu cikls"; +"cycle_yearly" = "gada cikls"; +"cycle_end_never" = "cikls nebeidzas nekad"; +"cycle_end_until" = "cikla beigas, līdz"; +"Recurrence pattern" = "Atkārtošanās veids"; +"Range of recurrence" = "Atkārtošanās diapazons"; +"Daily" = "Ikdienas"; +"Multi-Columns" = "Multi-kolonnas"; +"Weekly" = "Iknedēļas"; +"Monthly" = "Ikmēneša"; +"Yearly" = "Ik gadu"; +"Every" = "Katrs"; +"Days" = "Dienas"; +"Week(s)" = "Nedēļa(s)"; +"On" = "Uz"; +"Month(s)" = "Mēnesis(ši)"; + +/* [Event recurrence editor] Ex: _The_ first Sunday */ +"The" = "..."; +"Recur on day(s)" = "Atkārtojas dienā(s)"; +"Year(s)" = "Gads(i)"; + +/* [Event recurrence editor] Ex: Every first Sunday _of_ April */ +"cycle_of" = "no"; +"No end date" = "Bez beigu datuma"; +"Create" = "Izveidot"; +"appointment(s)" = "tikšanā(s)"; +"Repeat until" = "Atkārtot līdz"; +"End Repeat" = "Atkārtošanas beigas"; +"Never" = "Nekad"; +"After" = "Pēc"; +"On Date" = "Datumā"; +"times" = "reizes"; +"First" = "Pirmais"; +"Second" = "Otrais"; +"Third" = "Trešais"; +"Fourth" = "Ceturtais"; +"Fift" = "Piektais"; +"Last" = "Pēdējais"; + +/* Appointment categories */ +"category_none" = "Neviens"; +"category_labels" = "Gadadienas, Dzimšanas dienas, Bizness, Zvani, Klienti, Konkurence, Izlase, Sekošana, Dāvanas, Brīvdienas, Idejas, Sapulces, Jautājumi, Dažādi, Personīgi, Projekti, Valsts svētki, Statusi, Piegādātāji, Ceļojumi, Atvaļinājumi"; +"repeat_NEVER" = "Neatkārto"; +"repeat_DAILY" = "Ikdienas"; +"repeat_WEEKLY" = "Iknedēļas"; +"repeat_BI-WEEKLY" = "Ik pēc divām nedēļām"; +"repeat_EVERY WEEKDAY" = "Katru darbdienu"; +"repeat_MONTHLY" = "Ikmēneša"; +"repeat_YEARLY" = "Ik gadu"; +"repeat_CUSTOM" = "Pielāgots..."; +"reminder_NONE" = "Nav atgādinājumu"; +"reminder_5_MINUTES_BEFORE" = "pirms 5 minūtēm"; +"reminder_10_MINUTES_BEFORE" = "pirms 10 minūtēm"; +"reminder_15_MINUTES_BEFORE" = "pirms 15 minūtēm"; +"reminder_30_MINUTES_BEFORE" = "pirms 30 minūtēm"; +"reminder_45_MINUTES_BEFORE" = "pirms 45 minūtēm"; +"reminder_1_HOUR_BEFORE" = "pirms 1 stundas"; +"reminder_2_HOURS_BEFORE" = "pirms 2 stundām"; +"reminder_5_HOURS_BEFORE" = "pirms 5 stundām"; +"reminder_15_HOURS_BEFORE" = "pirms 15 stundām"; +"reminder_1_DAY_BEFORE" = "pirms 1 dienas"; +"reminder_2_DAYS_BEFORE" = "pirms 2 dienām"; +"reminder_1_WEEK_BEFORE" = "pirms 1 nedēļas"; +"reminder_CUSTOM" = "Pielāgots..."; +"reminder_MINUTES" = "minūtes"; +"reminder_HOURS" = "stundas"; +"reminder_DAYS" = "dienas"; +"reminder_WEEKS" = "nedēļas"; +"reminder_BEFORE" = "pirms"; +"reminder_AFTER" = "pēc"; +"reminder_START" = "notikums sākas"; +"reminder_END" = "notikums beidzas"; +"Reminder Details" = "Atgādinājuma dati"; +"Choose a Reminder Action" = "Izvēlieties Atgādinājuma darbību"; +"Show an Alert" = "Rādīt brīdinājumu"; +"Send an E-mail" = "Nosūtīt e-pastu"; +"Email Organizer" = "E-pasta organizēšana"; +"Email Attendees" = "E-pasta dalībnieki"; +"zoom_400" = "400%"; +"zoom_200" = "200%"; +"zoom_100" = "100%"; +"zoom_50" = "50%"; +"zoom_25" = "25%"; + +/* Arial label for reminder units */ +"Reminder units" = "Atgādinājuma vienības"; + +/* Aria label for reminder time position (after or before) */ +"Reminder position" = "Atgādinājuma pozīcija"; + +/* Aria label for reminder relation with event (start or end) */ +"Reminder relation" = "Atgādinājuma attiecība"; + +/* transparency */ +"Show Time as Free" = "Rādīt laiku, kā brīvs"; + +/* email notifications */ +"Send Appointment Notifications" = "Sūta tikšanās paziņojumus"; +"From" = "No"; +"To" = "Kam"; + +/* validation errors */ +validate_notitle = "Nav nosaukuma, turpināt?"; +validate_invalid_startdate = "Nepareizs sākuma datuma lauks!"; +validate_invalid_enddate = "Nepareizs beigu datuma lauks!"; +validate_endbeforestart = "Ievadītais beigu datums ir pirms sākuma datuma."; +validate_untilbeforeend = "Atkārtošanās ir jāpārtrauc pēc pirmā gadījuma."; + +"Events" = "Notikumi"; +"Tasks" = "Uzdevumi"; +"Show completed tasks" = "Rādīt pabeigtos uzdevumus"; + +/* tabs */ +"Task" = "Uzdevums"; +"Event" = "Notikums"; +"Recurrence" = "Atkārtošanās"; + +/* toolbar */ +"New Event" = "Jauns notikums"; +"New Task" = "Jauns uzdevums"; +"Edit" = "Labot"; +"Delete" = "Dzēst"; +"Go to Today" = "Pāriet uz šodienu"; +"Day View" = "Dienas skats"; +"Week View" = "Nedēļas skats"; +"Month View" = "Mēneša skats"; +"Reload" = "Pārlādēt"; + +/* Number of selected components in events or tasks list */ +"selected" = "atlasīts"; +"eventPartStatModificationError" = "Jūsu dalības statusu nevar mainīt."; + +/* menu */ +"New Event..." = "Jauns notikums..."; +"New Task..." = "Jauna uzdevuma..."; +"Edit Selected Event..." = "Rediģēt atlasīto notikumu..."; +"Delete Selected Event" = "Dzēst atlasīto notikumu"; +"Select All" = "Atlasīt visu"; +"Workweek days only" = "Tikai darba nedēļu dienas"; +"Tasks in View" = "Uzdevumu skats"; +"eventDeleteConfirmation" = "Sekojošais notikums(i) tiks izdzēsts:"; +"taskDeleteConfirmation" = "Sekojošais uzdevums(i) tiks izdzēsts:"; +"Would you like to continue?" = "Vai vēlaties turpināt?"; +"You cannot remove nor unsubscribe from your personal calendar." += "Jūs nevarat noņemt vai atteikties no jūsu personiskā kalendāra."; +"Are you sure you want to delete the calendar \"%{0}\"?" += "Vai tiešām vēlaties dzēst kalendāru \"%{0}\"?"; + +/* Legend */ +"Participant" = "Dalībnieks"; +"Optional Participant" = "Neobligāts dalībnieks"; +"Non Participant" = "Nav dalībnieks"; +"Chair" = "Katedra"; +"Needs action" = "Nepieciešama darbība"; +"Accepted" = "Akceptēts"; +"Declined" = "Noraidījis"; +"Tentative" = "Varbūtējs"; +"Free" = "Brīvs"; +"Busy" = "Aizņemts"; +"Maybe busy" = "Varbūt aizņemts"; +"No free-busy information" = "Nav Brīvs / Aizņemts informācijas"; + +/* FreeBusy panel buttons and labels */ +"Suggest time slot" = "Ieteikt laika sprauga"; +"Zoom" = "Tālummaiņa"; +"Previous slot" = "Iepriekšējā sprauga"; +"Next slot" = "Nākamā sprauga"; +"Previous hour" = "Iepriekšējā stunda"; +"Next hour" = "Nākamo stundu"; +"Work days only" = "Tikai darba dienās"; +"The whole day" = "Visa diena"; +"Between" = "Starp"; +"and" = "un"; +"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?" += "Laika konflikts ar vienu vai vairākiem dalībniekiem.\nVai vēlaties saglabāt pašreizējos iestatījumus jebkurā gadījumā?"; + +/* events list */ +"Due" = "Paredzēts"; +"(Private Event)" = "(Privāts notikums)"; +vevent_class0 = "(Publisks notikums)"; +vevent_class1 = "(Privāts notikums)"; +vevent_class2 = "(Konfidenciāls notikums)"; + +/* tasks list */ +"Descending Order" = "Dilstoša secība"; +vtodo_class0 = "(Publisks uzdevums)"; +vtodo_class1 = "(Privāts uzdevums)"; +vtodo_class2 = "(Konfidenciāls uzdevums)"; +"closeThisWindowMessage" = "Paldies! Tagad varat aizvērt šo logu, vai skatīt savu"; +"Multicolumn Day View" = "Daudzkolonnu dienas skats"; +"Please select an event or a task." = "Lūdzu, atlasiet notikumu vai uzdevumu."; +"editRepeatingItem" = "Vienums, kuru rediģējat, atkārtojas. Vai vēlaties labot visus vai tikai šo vienu gadījumu?"; +"button_thisOccurrenceOnly" = "Tikai šis notikums"; +"button_allOccurrences" = "Visi notikumi"; +"Edit This Occurrence" = "Rediģēt šo notikumu"; +"Edit All Occurrences" = "Rediģēt visus notikumus"; +"Update This Occurrence" = "Atjaunināt šo notikumu"; +"Update All Occurrences" = "Atjaunināt visus notikumus"; + +/* Properties dialog */ +"Color" = "Krāsa"; +"Include in free-busy" = "Iekļaut brīvs-aizņemts"; +"Synchronization" = "Sinhronizācija"; +"Synchronize" = "Sinhronizēt"; +"Tag" = "Birka"; +"Display" = "Rādīt"; +"Show alarms" = "Rādīt brīdinājumus"; +"Show tasks" = "Rādīt uzdevumus"; +"Notifications" = "Paziņojumi"; +"Receive a mail when I modify my calendar" = "Saņemt pastu, kad es laboju savu kalendāru"; +"Receive a mail when someone else modifies my calendar" = "Saņemt pastu, ja kāds cits labo manu kalendāru"; +"When I modify my calendar, send a mail to" = "Kad es laboju savu kalendāru, nosūtiet e-pastu uz"; +"Email Address" = "E-pasta adrese"; +"Export" = "Eksportēt"; + + +/* Show only the calendar for which the menu is displayed */ +"Show Only This Calendar" = "Rādīt tikai šo kalendāru"; + + +/* Show all calendar (personal, subscriptions and web) */ +"Show All Calendars" = "Rādīt visus kalendārus"; + +"Links to this Calendar" = "Saites uz šo kalendāru"; +"Authenticated User Access" = "Autentificēto lietotāju piekļuve"; +"CalDAV URL" = "CalDAV URL "; +"WebDAV ICS URL" = "WebDAV ICS URL"; +"WebDAV XML URL" = "WebDAV XML URL"; + +/* Error messages */ +"dayFieldInvalid" = "Lūdzu, DIENAS laukā norādiet skaitlisko vērtību kas lielāka vai vienāda ar 1."; +"weekFieldInvalid" = "Lūdzu, NEDĒĻA(S) laukā norādiet skaitlisko vērtību kas lielāka vai vienāda ar 1."; +"monthFieldInvalid" = "Lūdzu, MĒNESIS(ŠU) laukā norādiet skaitlisko vērtību kas lielāka vai vienāda ar 1."; +"monthDayFieldInvalid" = "Lūdzu, norādiet skaitlisku vērtību mēneša dienu laukā kas ir lielāka vai vienāda ar 1."; +"yearFieldInvalid" = "Lūdzu, norādiet skaitlisku vērtību GADA(U) laukā kas ir lielāka vai vienāda ar 1."; +"appointmentFieldInvalid" = "Lūdzu, norādiet skaitlisku vērtību TIKŠANĀ(S) laukā kas ir lielāka vai vienāda ar 1."; +"recurrenceUnsupported" = "Šāda veida atkārtošanās pašlaik netiek atbalstīts."; +"Please specify a calendar name." = "Lūdzu, norādiet kalendāra nosaukumu."; +"tagNotDefined" = "Jums jānorāda birka, ja jūs vēlaties, lai sinhronizētu šo kalendāru."; +"tagAlreadyExists" = "Norādītā birka jau ir saistīta ar citu kalendāru."; +"tagHasChanged" = "Ja vēlaties mainīt kalendāra birku, jums vajadzēs atkārtoti ielādēt datus no mobilās ierīces.\nTurpināt?"; +"tagWasAdded" = "Ja vēlaties sinhronizēt kalendāru, jums vajadzēs atkārtoti ielādēt datus no mobilās ierīces.\nTurpināt?"; +"tagWasRemoved" = "Ja noņemsit šī kalendāra sinhronizāciju, jums vajadzēs atkārtoti ielādēt datus no mobilās ierīces.\nTurpināt?"; +"DestinationCalendarError" = "Avota un mērķa kalendāri ir vienādi. Lūdzu, mēģiniet kopēt uz citu kalendāru."; +"EventCopyError" = "Kopija neizdevās. Lūdzu, mēģiniet kopēt uz citu kalendāru."; +"Please select at least one calendar" = "Lūdzu, atlasiet vismaz vienu kalendāru"; +"Open Task..." = "Atveriet uzdevumu..."; +"Mark Completed" = "Zīme \"Pabeigts\""; +"Delete Task" = "Dzēst uzdevumu"; +"Delete Event" = "Dzēst notikumu"; +"Copy event to my calendar" = "Kopēt manā kalendārā notikumu"; +"View Raw Source" = "Apskatīt RAW avotu"; +"Subscriptions" = "Abonementi"; +"Subscribe to a shared folder" = "Parakstīties uz koplietojamu mapi"; +"Subscribe to a web calendar..." = "Abonēt Web kalendāru..."; +"URL of the Calendar" = "Kalendāra URL"; +"Web Calendar" = "Web kalendārs"; +"Web Calendars" = "Web kalendāri"; +"Reload on login" = "Pārlādēt pieteikšanās laikā"; +"Invalid number." = "Nederīgs skaitlis."; +"Please identify yourself to %{0}" = "Lūdzu, iepazīstiniet sevi ar %{0}"; +"quantity" = "daudzums"; +"Current view" = "Pašreizējais skats"; +"Selected events and tasks" = "Izvēlētie notikumi un uzdevumi"; +"Custom date range" = "Pielāgots datuma diapazons"; +"Select starting date" = "Izvēlieties sākuma datumu"; +"Select ending date" = "Atlasiet beigu datumu"; +"Delegated to" = "Deleģēt"; +"Keep sending me updates" = "Turpiniet sūtīt man atjauninājumus"; +"OK" = "OK"; +"Confidential" = "Konfidenciāli"; +"Enable" = "Iespējot"; +"Filter" = "Filtrs"; +"Sort" = "Kārtot"; +"Back" = "Atpakaļ"; +"Day" = "Diena"; +"Month" = "Mēnesis"; +"New Appointment" = "Jauna tikšanās"; +"filters" = "filtri"; +"Today" = "Šodien"; +"More options" = "Papildu opcijas"; +"Delete This Occurrence" = "Dzēst šo notikumu"; +"Delete All Occurrences" = "Dzēst visus notikumus"; +"Add From" = "Pievienot No"; +"Add Due" = "Pievienot paredzamu"; +"Import" = "Importēt"; +"Rename" = "Pārdēvēt"; +"Import Calendar" = "Importēt kalendāru"; +"Select an ICS file." = "Atlasiet ICS failu."; + +/* Notification when user subscribes to a calendar */ +"Successfully subscribed to calendar" = "Veiksmīgi abonējis kalendāru"; + +/* Aria label for color chip button to select and unselect an event or task */ +"Toggle item" = "Pārslēgt vienumu"; + +/* Aria label for scope of search on events or tasks */ +"Search scope" = "Meklēšanas tvērums"; + +/* Hotkey to create an event */ +"hotkey_create_event" = "e"; + +/* Hotkey to create a task */ +"hotkey_create_task" = "t"; + +/* Hotkey to go to today */ +"hotkey_today" = "n"; + +/* Hotkey to switch to day view */ +"hotkey_dayview" = "d"; + +/* Hotkey to switch to week view */ +"hotkey_weekview" = "w"; + +/* Hotkey to switch to month view */ +"hotkey_monthview" = "m"; + +/* Hotkey to switch to multicolumn day view */ +"hotkey_multicolumndayview" = "c"; diff --git a/UI/Scheduler/Slovak.lproj/Localizable.strings b/UI/Scheduler/Slovak.lproj/Localizable.strings index 84cb1d868..a42cad626 100644 --- a/UI/Scheduler/Slovak.lproj/Localizable.strings +++ b/UI/Scheduler/Slovak.lproj/Localizable.strings @@ -526,7 +526,7 @@ vtodo_class2 = "(Dôverná úloha)"; "tagWasAdded" = "Ak chcete synchronizovať tento kalendár, budete musieť znovu načítať údaje do svojho mobilného zariadenia.\nPokračovať?"; "tagWasRemoved" = "Ak odstránite v tomto kalendári synchronizáciu, budete musieť znovu načítať údaje do svojho mobilného zariadenia.\nPokračovať?"; "DestinationCalendarError" = "Zdrojový a cieľový kalendár sú rovnaké. Prosím, skúste kopírovať iný kalendár."; -"EventCopyError" = "Kopírovanie sa nepodarilo. Prosím, skúste kopírovať iný kalendár."; +"EventCopyError" = "Kopírovanie sa nepodarilo. Skúste prosím skopírovať do iného kalendáru."; "Please select at least one calendar" = "Prosím zvoľte aspoň jeden kalendár"; "Open Task..." = "Otvoriť úlohu..."; "Mark Completed" = "Označiť ako dokončené"; diff --git a/UI/Scheduler/TurkishTurkey.lproj/Localizable.strings b/UI/Scheduler/TurkishTurkey.lproj/Localizable.strings index 4734f7011..7be3742f0 100644 --- a/UI/Scheduler/TurkishTurkey.lproj/Localizable.strings +++ b/UI/Scheduler/TurkishTurkey.lproj/Localizable.strings @@ -80,12 +80,12 @@ "label_Private" = "Kişisel"; "label_Confidential" = "Gizli"; "label_Viewer" = "Hepsini Görüntüler"; -"label_DAndTViewer" = "Günü ve Saati Görüntüler"; +"label_DAndTViewer" = "Gün ve Saati Görüntüler"; "label_Modifier" = "Değiştirir"; "label_Responder" = "Yanıtlar"; "label_None" = "Hiç biri"; "View All" = "Hepsini Görüntüler"; -"View the Date & Time" = "Günü ve Saati Görüntüler"; +"View the Date & Time" = "Gün ve Saati Görüntüler"; "Modify" = "Değiştirir"; "Respond To" = "Yanıtlar"; "None" = "Hiç biri"; @@ -445,7 +445,7 @@ validate_untilbeforeend = "Tekrar bitiş tarihi ilk tekrar tarihinden sonra o "No free-busy information" = "serbest-meşgul bilgisi yok"; /* FreeBusy panel buttons and labels */ -"Suggest time slot" = "Önerilen saat aralığı"; +"Suggest time slot" = "Saat aralığı önerin"; "Zoom" = "Zoom"; "Previous slot" = "Önceki aralık"; "Next slot" = "Sonraki aralık"; @@ -456,7 +456,7 @@ validate_untilbeforeend = "Tekrar bitiş tarihi ilk tekrar tarihinden sonra o "Between" = ":"; "and" = "ve"; "A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?" -= "Bir ya da daha fazla katılımcı ile zaman çakışması var.\nYine de mevcut düzenlemeyi devam ettirmek ister misiniz?"; += "Bir ya da daha fazla katılımcı ile saat çakışması var.\nYine de mevcut düzenlemeye devam etmek ister misiniz?"; /* events list */ "Due" = "Kapanış Tarihi"; diff --git a/configure b/configure index cf1e1f779..b09b7af67 100755 --- a/configure +++ b/configure @@ -246,7 +246,7 @@ genConfigMake() { cfgwrite "SOPE_MINOR_VERSION=9" # Languages - cfgwrite "SOGO_LANGUAGES=Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Croatian Czech Danish Dutch English Finnish French German Hebrew Hungarian Icelandic Italian Lithuanian Macedonian NorwegianBokmal NorwegianNynorsk Polish Portuguese Russian Serbian Slovak Slovenian SpanishArgentina SpanishSpain Swedish TurkishTurkey Ukrainian Welsh" + cfgwrite "SOGO_LANGUAGES=Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Croatian Czech Danish Dutch English Finnish French German Hebrew Hungarian Icelandic Italian Latvian Lithuanian Macedonian NorwegianBokmal NorwegianNynorsk Polish Portuguese Russian Serbian Slovak Slovenian SpanishArgentina SpanishSpain Swedish TurkishTurkey Ukrainian Welsh" #cfgwrite "# print on the cmdline that this file is being used" #cfgwrite "all :: " From 678cf66a574b7eeda936c3df3fbc9ac0367edd71 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 31 May 2017 06:32:40 -0400 Subject: [PATCH 41/45] Add Latvian (lv) translation (cont'd) --- .../SOGoMailLatvianForward.html | 16 +++ .../SOGoMailLatvianForward.wod | 88 +++++++++++++++ .../SOGoMailLatvianReply.html | 16 +++ .../SOGoMailLatvianReply.wod | 106 ++++++++++++++++++ 4 files changed, 226 insertions(+) create mode 100644 SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.html create mode 100644 SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.wod create mode 100644 SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.html create mode 100644 SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.wod diff --git a/SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.html b/SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.html new file mode 100644 index 000000000..2fac38519 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.html @@ -0,0 +1,16 @@ +<#newLine/> +<#newLine/> +<#signaturePlacementOnTop><#newLine/> +<#signature/><#newLine/> +-------- Sākotnējais ziņojums --------<#newLine/> +Temats: <#subject/><#newLine/> +Datums: <#date/><#newLine/> +No: <#from/><#newLine/> +<#hasReplyTo>Atbildēt uz: <#replyTo/><#hasOrganization>Organizācija: <#organization/>Kam: <#to/><#newLine/> +<#hasCc>Kopija: <#cc/><#hasNewsGroups>Intereškopas: <#newsgroups/><#hasReferences>Atsauces: <#references/><#newLine/> +<#newLine/> +<#messageBody/><#newLine/> +<#signaturePlacementOnBottom><#newLine/> +<#newLine/> +<#signature/> +<#newLine/> diff --git a/SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.wod b/SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.wod new file mode 100644 index 000000000..f2436acc9 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailLatvianForward.wo/SOGoMailLatvianForward.wod @@ -0,0 +1,88 @@ +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +newLine: WOString { + value = newLine; + escapeHTML = NO; +} + +hasReplyTo: WOConditional { + condition = hasReplyTo; +} + +replyTo: WOString { + value = replyTo; + escapeHTML = NO; +} + +hasOrganization: WOConditional { + condition = hasOrganization; +} + +organization: WOString { + value = organization; + escapeHTML = NO; +} + +to: WOString { + value = to; + escapeHTML = NO; +} + +hasCc: WOConditional { + condition = hasCc; +} + +cc: WOString { + value = cc; + escapeHTML = NO; +} + +hasNewsGroups: WOConditional { + condition = hasNewsGroups; +} + +newsgroups: WOString { + value = newsgroups; + escapeHTML = NO; +} + +hasReferences: WOConditional { + condition = hasReferences; +} + +references: WOString { + value = references; + escapeHTML = NO; +} + +messageBody: WOString { + value = messageBody; + escapeHTML = NO; +} + +signature: WOString { + value = signature; + escapeHTML = NO; +} + +signaturePlacementOnTop: WOConditional { + condition = signaturePlacementOnTop; +} + +signaturePlacementOnBottom: WOConditional { + condition = signaturePlacementOnTop; + negate = YES; +} diff --git a/SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.html b/SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.html new file mode 100644 index 000000000..34f7d1be1 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.html @@ -0,0 +1,16 @@ +<#replyPlacementOnTop><#newLine/> +<#newLine/> +<#signaturePlacementOnTop><#newLine/> +<#signature/><#newLine/> +<#outlookMode>-------- Sākotnējais ziņojums --------<#newLine/> +Temats: <#subject/><#newLine/> +Datums: <#date/><#newLine/> +No: <#from/><#newLine/> +<#hasReplyTo>Atbildēt uz: <#replyTo/><#hasOrganization>Organizācija: <#organization/>Kam: <#to/><#newLine/> +<#hasCc>Kopija: <#cc/><#hasNewsGroups>Intereškopas: <#newsgroups/><#hasReferences>Atsauces: <#references/><#newLine/> +<#standardMode><#date/>, <#from/> rakstīja:<#newLine/> +<#newLine/> +<#messageBody/><#newLine/> +<#replyPlacementOnBottom><#newLine/> +<#newLine/> +<#signaturePlacementOnBottom><#signature/><#newLine/> diff --git a/SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.wod b/SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.wod new file mode 100644 index 000000000..3fbed6d61 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailLatvianReply.wo/SOGoMailLatvianReply.wod @@ -0,0 +1,106 @@ +outlookMode: WOConditional { + condition = outlookMode; +} + +standardMode: WOConditional { + condition = outlookMode; + negate = YES; +} + +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +newLine: WOString { + value = newLine; + escapeHTML = NO; +} + +hasReplyTo: WOConditional { + condition = hasReplyTo; +} + +replyTo: WOString { + value = replyTo; + escapeHTML = NO; +} + +hasOrganization: WOConditional { + condition = hasOrganization; +} + +organization: WOString { + value = organization; + escapeHTML = NO; +} + +to: WOString { + value = to; + escapeHTML = NO; +} + +hasCc: WOConditional { + condition = hasCc; +} + +cc: WOString { + value = cc; + escapeHTML = NO; +} + +hasNewsGroups: WOConditional { + condition = hasNewsGroups; +} + +newsgroups: WOString { + value = newsgroups; + escapeHTML = NO; +} + +hasReferences: WOConditional { + condition = hasReferences; +} + +references: WOString { + value = references; + escapeHTML = NO; +} + +messageBody: WOString { + value = messageBody; + escapeHTML = NO; +} + +signature: WOString { + value = signature; + escapeHTML = NO; +} + +replyPlacementOnTop: WOConditional { + condition = replyPlacementOnTop; +} + +replyPlacementOnBottom: WOConditional { + condition = replyPlacementOnTop; + negate = YES; +} + +signaturePlacementOnTop: WOConditional { + condition = signaturePlacementOnTop; +} + +signaturePlacementOnBottom: WOConditional { + condition = signaturePlacementOnTop; + negate = YES; +} From e73a3495bb9e3caa8f8a9e142d5d942a93a14071 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 31 May 2017 10:48:35 -0400 Subject: [PATCH 42/45] Respect languages preferences on login page Fixes #4169 --- NEWS | 1 + SoObjects/SOGo/SOGoDefaults.plist | 1 + SoObjects/SOGo/WOContext+SOGo.m | 28 ++++++++++++++++++--------- UI/MainUI/SOGoRootPage.h | 2 ++ UI/MainUI/SOGoRootPage.m | 10 ++++++++++ UI/Templates/MainUI/SOGoRootPage.wox | 4 +++- UI/WebServerResources/SOGoRootPage.js | 9 +++++++++ 7 files changed, 45 insertions(+), 10 deletions(-) diff --git a/NEWS b/NEWS index 2c8530f83..eeb757988 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,7 @@ Bug fixes - [core] newly subscribed calendars are excluded from freebusy (#3354) - [core] strip cr during LDIF import process (#4172) - [web] fixed mail delegation of pristine user accounts (#4160) + - [web] respect SOGoLanguage and SOGoSupportedLanguages (#4169) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index 824cd60e4..855be56bb 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -38,6 +38,7 @@ SOGoEnableDomainBasedUID = NO; SOGoLoginModule = "Mail"; + WODefaultLanguages = (); SOGoLanguage = "English"; SOGoSupportedLanguages = ( "Arabic", diff --git a/SoObjects/SOGo/WOContext+SOGo.m b/SoObjects/SOGo/WOContext+SOGo.m index c558b1be6..5a4deeaea 100644 --- a/SoObjects/SOGo/WOContext+SOGo.m +++ b/SoObjects/SOGo/WOContext+SOGo.m @@ -26,6 +26,7 @@ #import #import "SOGoDomainDefaults.h" +#import "SOGoSystemDefaults.h" #import "SOGoUser.h" #import "SOGoUserDefaults.h" @@ -36,34 +37,43 @@ - (NSArray *) resourceLookupLanguages { NSMutableArray *languages; - NSArray *browserLanguages; + NSArray *browserLanguages, *supportedLanguages; + SOGoSystemDefaults *sd; SOGoUser *user; NSString *language; languages = [NSMutableArray array]; user = [self activeUser]; + + // Retrieve language parameter + language = [[self request] formValueForKey: @"language"]; + if ([language length] > 0) + [languages addObject: language]; + if (!user || [[user login] isEqualToString: @"anonymous"]) { + // Use browser's languages browserLanguages = [[self request] browserLanguages]; [languages addObjectsFromArray: browserLanguages]; } else { + // Use user's language or domain's language language = [[user userDefaults] language]; [languages addObject: language]; language = [[user domainDefaults] language]; [languages addObject: language]; } - // if (activeUser && [activeUser language]) - // [languages addObject: [activeUser language]]; - - // if ([self hasSession]) - // [languages addObjectsFromArray: [[self session] languages]]; - // else - // [languages addObjectsFromArray: [[self request] browserLanguages]]; + // Return the first language matching a supported language or the SOGoLanguage + // default if none is matching. + sd = [SOGoSystemDefaults sharedSystemDefaults]; + supportedLanguages = [sd supportedLanguages]; + language = [languages firstObjectCommonWithArray: supportedLanguages]; + if (!(language && [language isKindOfClass: [NSString class]])) + language = [sd stringForKey: @"SOGoLanguage"]; - return languages; + return [NSArray arrayWithObject: language]; } @end diff --git a/UI/MainUI/SOGoRootPage.h b/UI/MainUI/SOGoRootPage.h index acee8c049..673728961 100644 --- a/UI/MainUI/SOGoRootPage.h +++ b/UI/MainUI/SOGoRootPage.h @@ -31,6 +31,8 @@ NSString *cookieLogin; } +- (NSArray *) languages; + @end #endif /* SOGOROOTPAGE_H */ diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index 40ce07441..c984d4670 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -521,6 +521,16 @@ return item; } +- (BOOL) hasManyLanguages +{ + return [[self languages] count] > 1; +} + +- (NSString *) language +{ + return [[context resourceLookupLanguages] objectAtIndex: 0]; +} + - (NSArray *) languages { return [[SOGoSystemDefaults sharedSystemDefaults] supportedLanguages]; diff --git a/UI/Templates/MainUI/SOGoRootPage.wox b/UI/Templates/MainUI/SOGoRootPage.wox index 32ab4b083..e6b7bd43d 100644 --- a/UI/Templates/MainUI/SOGoRootPage.wox +++ b/UI/Templates/MainUI/SOGoRootPage.wox @@ -42,20 +42,22 @@ + + diff --git a/UI/WebServerResources/SOGoRootPage.js b/UI/WebServerResources/SOGoRootPage.js index 5ad4e2961..333ca809a 100644 --- a/UI/WebServerResources/SOGoRootPage.js +++ b/UI/WebServerResources/SOGoRootPage.js @@ -24,6 +24,15 @@ function initLogin() { event.stop() }); } + var language = $("language"); + if (language) + language.on("change", function(event) { + var value = $("language").value; + if (value != "WONoSelectionString") + // Reload page + window.location.href = ApplicationBaseURL + '/login?language=' + value; + }); + var submit = $("submit"); submit.observe("click", onLoginClick); From 428d179b9fd12a2a89747c1fb370350069434b1c Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 1 Jun 2017 09:44:32 -0400 Subject: [PATCH 43/45] (js) Update CKEditor to version 4.7.0 --- NEWS | 5 +- .../ckeditor/build-config.js | 52 +- UI/WebServerResources/ckeditor/ckeditor.js | 1161 +++++++++-------- UI/WebServerResources/ckeditor/lang/ar.js | 2 +- UI/WebServerResources/ckeditor/lang/ca.js | 2 +- UI/WebServerResources/ckeditor/lang/cs.js | 2 +- UI/WebServerResources/ckeditor/lang/cy.js | 2 +- UI/WebServerResources/ckeditor/lang/da.js | 2 +- UI/WebServerResources/ckeditor/lang/de.js | 2 +- UI/WebServerResources/ckeditor/lang/en.js | 2 +- UI/WebServerResources/ckeditor/lang/es.js | 2 +- UI/WebServerResources/ckeditor/lang/eu.js | 2 +- UI/WebServerResources/ckeditor/lang/fi.js | 2 +- UI/WebServerResources/ckeditor/lang/fr.js | 2 +- UI/WebServerResources/ckeditor/lang/he.js | 5 + UI/WebServerResources/ckeditor/lang/hr.js | 2 +- UI/WebServerResources/ckeditor/lang/hu.js | 2 +- UI/WebServerResources/ckeditor/lang/is.js | 2 +- UI/WebServerResources/ckeditor/lang/it.js | 2 +- UI/WebServerResources/ckeditor/lang/lt.js | 2 +- UI/WebServerResources/ckeditor/lang/lv.js | 5 + UI/WebServerResources/ckeditor/lang/mk.js | 2 +- UI/WebServerResources/ckeditor/lang/nb.js | 2 +- UI/WebServerResources/ckeditor/lang/nl.js | 2 +- UI/WebServerResources/ckeditor/lang/no.js | 2 +- UI/WebServerResources/ckeditor/lang/pl.js | 2 +- UI/WebServerResources/ckeditor/lang/pt-br.js | 2 +- UI/WebServerResources/ckeditor/lang/pt.js | 2 +- UI/WebServerResources/ckeditor/lang/ru.js | 2 +- UI/WebServerResources/ckeditor/lang/sk.js | 2 +- UI/WebServerResources/ckeditor/lang/sl.js | 2 +- UI/WebServerResources/ckeditor/lang/sr.js | 2 +- UI/WebServerResources/ckeditor/lang/sv.js | 2 +- UI/WebServerResources/ckeditor/lang/tr.js | 2 +- UI/WebServerResources/ckeditor/lang/uk.js | 2 +- UI/WebServerResources/ckeditor/lang/zh-cn.js | 2 +- UI/WebServerResources/ckeditor/lang/zh.js | 2 +- .../plugins/clipboard/dialogs/paste.js | 12 - .../ckeditor/plugins/div/dialogs/div.js | 4 +- .../ckeditor/plugins/link/dialogs/anchor.js | 7 +- .../ckeditor/plugins/link/dialogs/link.js | 46 +- .../plugins/pastefromword/filter/default.js | 87 +- .../ckeditor/plugins/scayt/dialogs/dialog.css | 23 + .../ckeditor/plugins/scayt/dialogs/options.js | 51 +- .../ckeditor/plugins/widget/images/handle.png | Bin 0 -> 220 bytes .../ckeditor/plugins/wsc/dialogs/wsc.js | 160 +-- .../ckeditor/skins/minimalist/editor.css | 2 +- .../skins/minimalist/editor_gecko.css | 2 +- .../ckeditor/skins/minimalist/editor_ie.css | 2 +- .../ckeditor/skins/minimalist/editor_ie7.css | 2 +- .../ckeditor/skins/minimalist/editor_ie8.css | 2 +- .../skins/minimalist/editor_iequirks.css | 2 +- 52 files changed, 879 insertions(+), 815 deletions(-) create mode 100644 UI/WebServerResources/ckeditor/lang/he.js create mode 100644 UI/WebServerResources/ckeditor/lang/lv.js delete mode 100644 UI/WebServerResources/ckeditor/plugins/clipboard/dialogs/paste.js create mode 100644 UI/WebServerResources/ckeditor/plugins/scayt/dialogs/dialog.css create mode 100644 UI/WebServerResources/ckeditor/plugins/widget/images/handle.png diff --git a/NEWS b/NEWS index eeb757988..a8f066a25 100644 --- a/NEWS +++ b/NEWS @@ -1,11 +1,12 @@ -2.3.21 (2017-XX-XX) +2.3.21 (2017-06-01) ------------------- Enhancements - - [core] improved event initation for all day events (#4145) + - [core] improved event invitation for all day events (#4145) - [core] now possible to {un}subscribe to folders using sogo-tool - [eas] added photo support for GAL search operations - [web] added custom fields support from Thunderbird's address book + - [web] updated CKEditor to version 4.7.0 - [web] added Latvian (lv) translation - thanks to Juris Balandis Bug fixes diff --git a/UI/WebServerResources/ckeditor/build-config.js b/UI/WebServerResources/ckeditor/build-config.js index a30e1fc1c..5deb9a413 100644 --- a/UI/WebServerResources/ckeditor/build-config.js +++ b/UI/WebServerResources/ckeditor/build-config.js @@ -13,10 +13,10 @@ * (1) http://ckeditor.com/builder * Visit online builder to build CKEditor from scratch. * - * (2) http://ckeditor.com/builder/5ea8a26bac20cc12a1d2d251da095b34 + * (2) http://ckeditor.com/builder/c20c45ae67ac54b36e05993dd5899e98 * Visit online builder to build CKEditor, starting with the same setup as before. * - * (3) http://ckeditor.com/builder/download/5ea8a26bac20cc12a1d2d251da095b34 + * (3) http://ckeditor.com/builder/download/c20c45ae67ac54b36e05993dd5899e98 * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. * * NOTE: @@ -27,28 +27,30 @@ var CKBUILDER_CONFIG = { skin: 'minimalist', preset: 'basic', - ignore: [ - '.bender', - 'bender.js', - 'bender-err.log', - 'bender-out.log', - 'dev', - '.DS_Store', - '.editorconfig', - '.gitattributes', - '.gitignore', - 'gruntfile.js', - '.idea', - '.jscsrc', - '.jshintignore', - '.jshintrc', - 'less', - '.mailmap', - 'node_modules', - 'package.json', - 'README.md', - 'tests' - ], + ignore: [ + '.DS_Store', + '.bender', + '.editorconfig', + '.gitattributes', + '.gitignore', + '.idea', + '.jscsrc', + '.jshintignore', + '.jshintrc', + '.mailmap', + '.travis.yml', + 'README.md', + 'bender-err.log', + 'bender-out.log', + 'bender.ci.js', + 'bender.js', + 'dev', + 'gruntfile.js', + 'less', + 'node_modules', + 'package.json', + 'tests' + ], plugins : { 'about' : 1, 'base64image' : 1, @@ -108,11 +110,13 @@ var CKBUILDER_CONFIG = { 'eu' : 1, 'fi' : 1, 'fr' : 1, + 'he' : 1, 'hr' : 1, 'hu' : 1, 'is' : 1, 'it' : 1, 'lt' : 1, + 'lv' : 1, 'mk' : 1, 'nb' : 1, 'nl' : 1, diff --git a/UI/WebServerResources/ckeditor/ckeditor.js b/UI/WebServerResources/ckeditor/ckeditor.js index afd15f99a..a367ab51b 100644 --- a/UI/WebServerResources/ckeditor/ckeditor.js +++ b/UI/WebServerResources/ckeditor/ckeditor.js @@ -2,14 +2,14 @@ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"H0CG",version:"4.6.2",revision:"20af917",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;df.getListenerIndex(d)){f=f.listeners;g||(g=this);isNaN(h)&&(h=10);var B=this;p.fn=d;p.priority=h;for(var u=f.length-1;0<=u;u--)if(f[u].priority<=h)return f.splice(u+1,0,p),{removeListener:r};f.unshift(p)}return{removeListener:r}}, -once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},g=0,k=function(){g=1};return function(h,p,r){var f=d(this)[h];h=a;var B=g;a=g=0;if(f){var u=f.listeners;if(u.length)for(var u=u.slice(0),z,y=0;yf.getListenerIndex(d)){f=f.listeners;g||(g=this);isNaN(k)&&(k=10);var C=this;n.fn=d;n.priority=k;for(var w=f.length-1;0<=w;w--)if(f[w].priority<=k)return f.splice(w+1,0,n),{removeListener:q};f.unshift(n)}return{removeListener:q}}, +once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},g=0,h=function(){g=1};return function(k,n,q){var f=d(this)[k];k=a;var C=g;a=g=0;if(f){var w=f.listeners;if(w.length)for(var w=w.slice(0),A,E=0;Edocument.documentMode),mobile:-1c||b.quirks);b.gecko&&(d=a.match(/rv:([\d\.]+)/))&&(d=d[1].split("."),c=1E4*d[0]+100*(d[1]||0)+1*(d[2]||0));b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1])); @@ -19,39 +19,39 @@ b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");retu CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status="basic_ready",a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*d))})})();CKEDITOR.status="basic_loaded"}();"use strict";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:a,additionalData:d})}; CKEDITOR.error=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log",{type:"error",errorCode:a,additionalData:d})}; CKEDITOR.on("log",function(a){if(window.console&&window.console.log){var d=console[a.data.type]?a.data.type:"log",b=a.data.errorCode;if(a=a.data.additionalData)console[d]("[CKEDITOR] Error code: "+b+".",a);else console[d]("[CKEDITOR] Error code: "+b+".");console[d]("[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-"+b)}},null,null,999);CKEDITOR.dom={}; -(function(){var a=[],d=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=//g,e=/|\s) /g, -function(a,f){return f+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",f=0;8>f;f++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,f){var b=f(a);b.prototype=a.prototype;return b},setTimeout:function(a,f,b,c,h){h||(h=window);b||(b=h);return h.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)}, +b=[],c=0;c|\s) /g, +function(a,f){return f+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",f=0;8>f;f++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,f){var b=f(a);b.prototype=a.prototype;return b},setTimeout:function(a,f,b,c,k){k||(k=window);b||(b=k);return k.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)}, f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if("function"==typeof f)for(var b=0,c=a.length;bb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2); -return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,c,h){a=b.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+h})},parseCssText:function(a,f,b){var c={};b&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, -function(a,b,h){f&&(b=b.toLowerCase(),"font-family"==b&&(h=h.replace(/\s*,\s*/g,",")),h=CKEDITOR.tools.trim(h));c[b]=h});return c},writeCssText:function(a,b){var c,h=[];for(c in a)h.push(c+":"+a[c]);b&&h.sort();return h.join("; ")},objectCompare:function(a,b,c){var h;if(!a&&!b)return!0;if(!a||!b)return!1;for(h in a)if(a[h]!=b[h])return!1;if(!c)for(h in b)if(a[h]!=b[h])return!1;return!0},objectKeys:function(a){var b=[],c;for(c in a)b.push(c);return b},convertArrayToObject:function(a,b){var c={};1== -arguments.length&&(b=!0);for(var h=0,d=a.length;hc;c++)a.push(Math.floor(256*Math.random()));for(c=0;cb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2); +return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,c,k){a=b.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+k})},parseCssText:function(a,f,b){var c={};b&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, +function(a,b,k){f&&(b=b.toLowerCase(),"font-family"==b&&(k=k.replace(/\s*,\s*/g,",")),k=CKEDITOR.tools.trim(k));c[b]=k});return c},writeCssText:function(a,f){var b,c=[];for(b in a)c.push(b+":"+a[b]);f&&c.sort();return c.join("; ")},objectCompare:function(a,f,b){var c;if(!a&&!f)return!0;if(!a||!f)return!1;for(c in a)if(a[c]!=f[c])return!1;if(!b)for(c in f)if(a[c]!=f[c])return!1;return!0},objectKeys:function(a){var b=[],c;for(c in a)b.push(c);return b},convertArrayToObject:function(a,b){var c={};1== +arguments.length&&(b=!0);for(var k=0,d=a.length;kc;c++)a.push(Math.floor(256*Math.random()));for(c=0;cCKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&c(e);return e},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$, -a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&d.unshift(this.getIndex.call({$:c},a));c=e}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var p=c?a.nextSibling:a.previousSibling;return p&&p.nodeType==CKEDITOR.NODE_TEXT?b(p)?d(p, -c):p:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,e=-1,g;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(g||b(c))||(e++,g=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return e},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var e;if(!a){if(this.type== +a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&d.unshift(this.getIndex.call({$:c},a));c=e}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var n=c?a.nextSibling:a.previousSibling;return n&&n.nodeType==CKEDITOR.NODE_TEXT?b(n)?d(n, +c):n:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,e=-1,g;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(g||b(c))||(e++,g=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return e},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var e;if(!a){if(this.type== CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&!1===b(e,!0))return null;a=e.getNext()}return!a||b&&!1===b(a)?null:d&&d!=a.type?a.getNextSourceNode(!1,d,b):a},getPreviousSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getLast&&this.getLast();var e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getPrevious()}for(;!a&&(e=(e||this).getParent());){if(b&&!1=== b(e,!0))return null;a=e.getPrevious()}return!a||b&&!1===b(a)?null:d&&a.type!=d?a.getPreviousSourceNode(!1,d,b):a},getPrevious:function(a){var d=this.$,b;do b=(d=d.previousSibling)&&10!=d.nodeType&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getNext:function(a){var d=this.$,b;do b=(d=d.nextSibling)&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getParent:function(a){var d=this.$.parentNode;return d&&(d.nodeType==CKEDITOR.NODE_ELEMENT||a&&d.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)? new CKEDITOR.dom.node(d):null},getParents:function(a){var d=this,b=[];do b[a?"push":"unshift"](d);while(d=d.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var d=this.contains?this:this.getParent();do if(d.contains(a))return d;while(d=d.getParent());return null},getPosition:function(a){var d=this.$,b=a.$;if(d.compareDocumentPosition)return d.compareDocumentPosition(b);if(d==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type== @@ -83,13 +83,13 @@ CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.foc a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var d=new CKEDITOR.dom.element("link");d.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(d)}},appendStyleText:function(a){if(this.$.createStyleSheet){var d=this.$.createStyleSheet("");d.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return d|| b.$.sheet},createElement:function(a,d){var b=new CKEDITOR.dom.element(a,this);d&&(d.attributes&&b.setAttributes(d.attributes),d.styles&&b.setStyles(d.styles));return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(d){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,d){for(var b= -this.$.documentElement,c=0;b&&c=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +this.$.documentElement,c=0;b&&c=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+ CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");a||(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a="string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node; CKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element("div",d);b.setHtml(a);return b.getFirst().remove()};CKEDITOR.dom.element.setMarker=function(a,d,b,c){var e=d.getCustomData("list_marker_id")||d.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),g=d.getCustomData("list_marker_names")||d.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=d;g[b]=1;return d.setCustomData(b,c)}; CKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)};CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData("list_marker_names"),e=d.getCustomData("list_marker_id"),g;for(g in c)d.removeCustomData(g);d.removeCustomData("list_marker_names");b&&(d.removeCustomData("list_marker_id"),delete a[e])}; -(function(){function a(a,b){return-1<(" "+a+" ").replace(g," ").indexOf(" "+b+" ")}function d(a){var b=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),b=!1);return function(){b||a.removeAttribute("id")}}function b(a,b){var c=CKEDITOR.tools.escapeCss(a.$.id);return"#"+c+" "+b.split(/,\s*/).join(", #"+c+" ")}function c(a){for(var b=0,c=0,f=k[a].length;cCKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a); @@ -107,174 +107,176 @@ a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var c for(var a=this.getChildren(),b=0,c=a.count();bCKEDITOR.env.version?function(b){return"name"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var f;if(b)for(;f=c.lastChild;)a.insertBefore(c.removeChild(f),a.firstChild);else for(;f=c.firstChild;)a.appendChild(c.removeChild(f))}},mergeSiblings:function(){function a(b,c,f){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d= -[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=f?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var h=f?b.getLast():b.getFirst();d.length;)d.shift().move(b,!f);c.moveChildren(b,!f);c.remove();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", +[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=f?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var k=f?b.getLast():b.getFirst();d.length;)d.shift().move(b,!f);c.moveChildren(b,!f);c.remove();k&&k.type==CKEDITOR.NODE_ELEMENT&&k.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){"class"==b?this.$.className=c:"style"==b?this.$.style.cssText=c:"tabindex"==b?this.$.tabIndex=c:"checked"==b?this.$.checked=c:"contenteditable"==b?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if("src"==b&&c.match(/^http:\/\//))try{a.apply(this, arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b= -0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", -"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();cz||0z?z:d);c&&(0>e||0e?e:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+ +0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();ce||0e?e:d);c&&(0>w||0w?w:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+ "_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",!0);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",!0);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off"),this.removeClass(b+"_on"),this.removeClass(b+"_disabled"),c&&this.removeAttribute("aria-pressed"),c&&this.removeAttribute("aria-disabled")}}, -getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){var c=this.$.attributes;b=b||{};for(var f=0;f=n.getChildCount()?(n=n.getChild(A-1),D=!0):n=n.getChild(A):H=D=!0;q.type==CKEDITOR.NODE_TEXT?l?p=!0:q.split(t):0fa)for(;X;)X=m(X,K,!0);K=L}l||h()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(), -c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(e){return c(e)||b(e)?!0:d(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(g)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&k(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function e(a){return function(){var b;return this[a? -"getPreviousNode":"getNextNode"](function(a){!b&&r(a)&&(b=a);return p(a)&&!(k(a)&&a.equals(b))})}}var g={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},k=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?: |\xa0)$/,p=CKEDITOR.dom.walker.editable(),r=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer); +(function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function d(a,b,c,d,e){function g(a,b,c,f){var d=c?a.getPrevious():a.getNext();if(f&&k)return d;l||f?b.append(a.clone(!0,e),c):(a.remove(),q&&b.append(a));return d}function m(){var a,b,c,f=Math.min(O.length,p.length);for(a=0;a=I.getChildCount()?(I=I.getChild(D-1),z=!0):I=I.getChild(D):B=z=!0;u.type==CKEDITOR.NODE_TEXT?l?L=!0:u.split(J):0ea)for(;U;)U=g(U,N,!0);N=Z}l||h()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(), +c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(e){return c(e)||b(e)?!0:d(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(g)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&h(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function e(a){return function(){var b;return this[a? +"getPreviousNode":"getNextNode"](function(a){!b&&q(a)&&(b=a);return n(a)&&!(h(a)&&a.equals(b))})}}var g={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),k=/^[\t\r\n ]*(?: |\xa0)$/,n=CKEDITOR.dom.walker.editable(),q=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer); a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed|| -d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,e,m=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(d="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id",d+(m?"C":"S")));m||(c=b.clone(),c.setHtml("\x26nbsp;"),a&&c.setAttribute("id",d+"E"),e=this.clone(), -e.collapse(),e.insertNode(c));e=this.clone();e.collapse(!0);e.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(m?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:m}},createBookmark2:function(){function a(b){var f=b.container,d=b.offset,e;e=f;var g=d;e=e.type!=CKEDITOR.NODE_ELEMENT||0===g||g==e.getChildCount()?0:e.getChild(g-1).type==CKEDITOR.NODE_TEXT&&e.getChild(g).type==CKEDITOR.NODE_TEXT;e&&(f=f.getChild(d- +d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,e,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(d="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id",d+(g?"C":"S")));g||(c=b.clone(),c.setHtml("\x26nbsp;"),a&&c.setAttribute("id",d+"E"),e=this.clone(), +e.collapse(),e.insertNode(c));e=this.clone();e.collapse(!0);e.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(g?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:g}},createBookmark2:function(){function a(b){var f=b.container,d=b.offset,e;e=f;var g=d;e=e.type!=CKEDITOR.NODE_ELEMENT||0===g||g==e.getChildCount()?0:e.getChild(g-1).type==CKEDITOR.NODE_TEXT&&e.getChild(g).type==CKEDITOR.NODE_TEXT;e&&(f=f.getChild(d- 1),d=f.getLength());if(f.type==CKEDITOR.NODE_ELEMENT&&0=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,e={container:this.startContainer,offset:this.startOffset},g={container:this.endContainer,offset:this.endOffset};c&&(a(e),b(e,this.root),d||(a(g),b(g,this.root)));return{start:e.container.getAddress(c),end:d?null:g.container.getAddress(c), -startOffset:e.offset,endOffset:g.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode,a=c?this.document.getById(a.endNode):a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()): +if(f){var d=a.container;f.equals(d)&&(a.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,e={container:this.startContainer,offset:this.startOffset},m={container:this.endContainer,offset:this.endOffset};c&&(a(e),b(e,this.root),d||(a(m),b(m,this.root)));return{start:e.container.getAddress(c),end:d?null:m.container.getAddress(c), +startOffset:e.offset,endOffset:m.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode,a=c?this.document.getById(a.endNode):a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()): this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>c)a=a.getChild(c);else if(1>e)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(e=b.getChildCount(),e>d)b=b.getChild(d).getPreviousSourceNode(!0);else if(1>e)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b= b.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a): this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&b.is&&b.is("span")&&b.data("cke-bookmark")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a|| -e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var m=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(m,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(e){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset;b||e||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1): -d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var m=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f= -c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;C=f!=a?f.getText():f.substring(b);if(d.test(C))return!1}return!0};if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,k,r,l,q,n,t=!1,A,C;A=this.startContainer;var D=this.startOffset;A.type==CKEDITOR.NODE_TEXT?(D&&(A=!CKEDITOR.tools.trim(A.substring(0,D)).length&&A,t=!!A),A&&((q=A.getPrevious())||(l=A.getParent()))):(D&&(q=A.getChild(D-1)||A.getLast()),q||(l=A));for(l=c(l);l||q;){if(l&&!q){!n&&l.equals(g)&&(n=!0);if(e?l.isBlockBoundary(): -!h.contains(l))break;t&&"inline"==l.getComputedStyle("display")||(t=!1,n?k=l:this.setStartBefore(l));q=l.getPrevious()}for(;q;)if(A=!1,q.type==CKEDITOR.NODE_COMMENT)q=q.getPrevious();else{if(q.type==CKEDITOR.NODE_TEXT)C=q.getText(),d.test(C)&&(q=null),A=/[\s\ufeff]$/.test(C);else if((q.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&q.is("br"))&&!q.data("cke-bookmark"))if(t&&CKEDITOR.dtd.$removeEmpty[q.getName()]){C=q.getText();if(d.test(C))q=null;else for(var D=q.$.getElementsByTagName("*"),M=0,H;H= -D[M++];)if(!CKEDITOR.dtd.$removeEmpty[H.nodeName.toLowerCase()]){q=null;break}q&&(A=!!C.length)}else q=null;A&&(t?n?k=l:l&&this.setStartBefore(l):t=!0);if(q){A=q.getPrevious();if(!l&&!A){l=q;q=null;break}q=A}else l=null}l&&(l=c(l.getParent()))}A=this.endContainer;D=this.endOffset;l=q=null;n=t=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(D)).length?t=!0:(t=!A.getLength(),D==A.getLength()?(q=A.getNext())||(l=A.getParent()):m(A,D)&&(l=A.getParent())):(q=A.getChild(D))||(l=A);for(;l|| -q;){if(l&&!q){!n&&l.equals(g)&&(n=!0);if(e?l.isBlockBoundary():!h.contains(l))break;t&&"inline"==l.getComputedStyle("display")||(t=!1,n?r=l:l&&this.setEndAfter(l));q=l.getNext()}for(;q;){A=!1;if(q.type==CKEDITOR.NODE_TEXT)C=q.getText(),m(q,0)||(q=null),A=/^[\s\ufeff]/.test(C);else if(q.type==CKEDITOR.NODE_ELEMENT){if((0=e.getLength()?d.setStartAfter(e):(d.setStartBefore(e),k=0):d.setStartBefore(e));m&&m.type==CKEDITOR.NODE_TEXT&&(h?h>=m.getLength()?d.setEndAfter(m): -(d.setEndAfter(m),r=0):d.setEndBefore(m));var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var q;d.guard=function(b,d){if(l(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(q)||!1===c&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;d||b.type!=CKEDITOR.NODE_ELEMENT|| -(q=b);return!0};k&&(e=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);r&&(d.reset(),(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!k&&!r)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&& -this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset= -c;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer||(this._setStartContainer(b),this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(), -a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b,b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b, -0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove(); -d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=c.block,m=d.block,g=null;if(!c.blockLimit.equals(d.blockLimit))return null;"br"!=a&&(e||(e=this.fixBlock(!0,a),m=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),m||(m=this.fixBlock(!1,a)));c=e&&this.checkStartOfBlock();d=m&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(m)&& -(d?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(m,CKEDITOR.POSITION_AFTER_END),m=null):c?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(m=this.splitElement(e,b||!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:m,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:g}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END); -var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||d.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block|| -d.blockLimit,g;e&&!e.equals(d.root)&&!e.getFirst(a(e));)g=e.getParent(),this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START: -CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),h.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c); -a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),h.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone(); -d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if("false"==b.getAttribute("contentEditable")&&!b.data("cke-editable"))return 0;if(b.is("html")|| -"true"==b.getAttribute("contentEditable")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&h.test(a.getText())?this.moveToPosition(a, -CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a), -!0;var d=a,e=c,m=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(m=d[b?"getLast":"getFirst"](r));e||m||(m=d[b?"getPrevious":"getNext"](r));a=m}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,m,g=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,g[b?0:1])):c=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(m=e.type==CKEDITOR.NODE_ELEMENT)&& -e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&m&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(e,0),c.collapse()):c.moveToPosition(e,g[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a= -this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a= -this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:e(),getPreviousEditableNode:e(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,e=this.clone();e.optimize();(d=e.startContainer.type==CKEDITOR.NODE_TEXT)?(c=e.startContainer.getText(),b=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView(); -d&&(e.startContainer.setText(c),b.remove());a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a,b){var c=this.getCommonAncestor(),d=this.getBoundaryNodes(),e=[],m,g,h,k;if(c&&c.find)for(g=c.find(a),m=0;m=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(g,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(e){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset;b||e||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1): +d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var g=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f= +c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;r=f!=a?f.getText():f.substring(b);if(d.test(r))return!1}return!0};if(this.collapsed)break;var m=this.getCommonAncestor(),h=this.root,k,q,l,u,I,J=!1,D,r;D=this.startContainer;var z=this.startOffset;D.type==CKEDITOR.NODE_TEXT?(z&&(D=!CKEDITOR.tools.trim(D.substring(0,z)).length&&D,J=!!D),D&&((u=D.getPrevious())||(l=D.getParent()))):(z&&(u=D.getChild(z-1)||D.getLast()),u||(l=D));for(l=c(l);l||u;){if(l&&!u){!I&&l.equals(m)&&(I=!0);if(e?l.isBlockBoundary(): +!h.contains(l))break;J&&"inline"==l.getComputedStyle("display")||(J=!1,I?k=l:this.setStartBefore(l));u=l.getPrevious()}for(;u;)if(D=!1,u.type==CKEDITOR.NODE_COMMENT)u=u.getPrevious();else{if(u.type==CKEDITOR.NODE_TEXT)r=u.getText(),d.test(r)&&(u=null),D=/[\s\ufeff]$/.test(r);else if((u.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&u.is("br"))&&!u.data("cke-bookmark"))if(J&&CKEDITOR.dtd.$removeEmpty[u.getName()]){r=u.getText();if(d.test(r))u=null;else for(var z=u.$.getElementsByTagName("*"),v=0,B;B= +z[v++];)if(!CKEDITOR.dtd.$removeEmpty[B.nodeName.toLowerCase()]){u=null;break}u&&(D=!!r.length)}else u=null;D&&(J?I?k=l:l&&this.setStartBefore(l):J=!0);if(u){D=u.getPrevious();if(!l&&!D){l=u;u=null;break}u=D}else l=null}l&&(l=c(l.getParent()))}D=this.endContainer;z=this.endOffset;l=u=null;I=J=!1;D.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(D.substring(z)).length?J=!0:(J=!D.getLength(),z==D.getLength()?(u=D.getNext())||(l=D.getParent()):g(D,z)&&(l=D.getParent())):(u=D.getChild(z))||(l=D);for(;l|| +u;){if(l&&!u){!I&&l.equals(m)&&(I=!0);if(e?l.isBlockBoundary():!h.contains(l))break;J&&"inline"==l.getComputedStyle("display")||(J=!1,I?q=l:l&&this.setEndAfter(l));u=l.getNext()}for(;u;){D=!1;if(u.type==CKEDITOR.NODE_TEXT)r=u.getText(),g(u,0)||(u=null),D=/^[\s\ufeff]/.test(r);else if(u.type==CKEDITOR.NODE_ELEMENT){if((0=m.getLength()?g.setStartAfter(m): +(g.setStartBefore(m),c=0):g.setStartBefore(m));h&&h.type==CKEDITOR.NODE_TEXT&&(q?q>=h.getLength()?g.setEndAfter(h):(g.setEndAfter(h),l=0):g.setEndBefore(h));var g=new CKEDITOR.dom.walker(g),u=CKEDITOR.dom.walker.bookmark(),I=CKEDITOR.dom.walker.bogus();g.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var J;g.guard=function(b,c){if(e&&I(b)||u(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||c&&b.equals(J)||!1===d&&b.type== +CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;c||b.type!=CKEDITOR.NODE_ELEMENT||(J=b);return!0};c&&(m=g[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(m,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);l&&(g.reset(),(g=g[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(g,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!c&&!l)}},insertNode:function(a){this.optimizeBookmark(); +this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())}, +setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=c;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer||(this._setStartContainer(b),this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(), +a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b,b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b); +break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a); +this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=c.block,g=d.block,m=null;if(!c.blockLimit.equals(d.blockLimit))return null;"br"!=a&&(e||(e=this.fixBlock(!0,a),g=(new CKEDITOR.dom.elementPath(this.endContainer, +this.root)).block),g||(g=this.fixBlock(!1,a)));c=e&&this.checkStartOfBlock();d=g&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(g)&&(d?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END),g=null):c?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(g=this.splitElement(e,b||!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:g,wasStartOfBlock:c, +wasEndOfBlock:d,elementPath:m}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||d.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(), +c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,g;e&&!e.equals(d.root)&&!e.getFirst(a(e));)g=e.getParent(),this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a, +b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),k.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root); +c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),k.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END); +a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type== +CKEDITOR.NODE_ELEMENT){if("false"==b.getAttribute("contentEditable")&&!b.data("cke-editable"))return 0;if(b.is("html")||"true"==b.getAttribute("contentEditable")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START), +!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&k.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); +else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var d=a,e=c,g=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(g=d[b?"getLast":"getFirst"](q));e||g||(g=d[b?"getPrevious":"getNext"](q));a=g}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,g,m=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,m[b?0:1])):c=this.clone();if(a&& +!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(g=e.type==CKEDITOR.NODE_ELEMENT)&&e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(e,0),c.collapse()):c.moveToPosition(e,m[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)}, +moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer; +return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:e(),getPreviousEditableNode:e(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var b=this.startContainer,c=this.endContainer,d=b.getAscendant("table",!0),e=c.getAscendant("table",!0);return CKEDITOR.env.safari&&d&&c.equals(this.root)? +b.getAscendant(a,!0):this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):d&&e&&(d.equals(e)||d.contains(e)||e.contains(d))?b.getAscendant(a,!0):null},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,e=this.clone();e.optimize();(d=e.startContainer.type==CKEDITOR.NODE_TEXT)?(c=e.startContainer.getText(),b=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView(); +d&&(e.startContainer.setText(c),b.remove());a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a,b){var c=this.getCommonAncestor(),d=this.getBoundaryNodes(),e=[],g,m,h,k;if(c&&c.find)for(m=c.find(a),g=0;garguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,e,g){a:{null==g&&(g=d(e));for(var h;h=g.shift();)if(h.getDtd().p){g={element:h,remaining:g};break a}g=null}if(!g)return 0;if((h=CKEDITOR.filter.instances[g.element.data("cke-filter")])&&!h.check(c))return b(a, -c,e,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:g.element,container:e,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker.whitespaces(!0), -h=function(a){return g(a)&&k(a)},p={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,k,u,z,y;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable= -null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var m=this.range.clone();k=m.startPath();var x=m.endPath(),J=!m.collapsed&&c(m,k.block),w=!m.collapsed&&c(m,x.block,1);m.shrink(CKEDITOR.SHRINK_ELEMENT,!0);J&&m.setStartAt(k.block,CKEDITOR.POSITION_BEFORE_END);w&&m.setEndAt(x.block,CKEDITOR.POSITION_AFTER_START);k=m.endContainer.hasAscendant("pre",!0)||m.startContainer.hasAscendant("pre",!0);m.enlarge(this.forceBrBreak&&!k||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS); -m.collapsed||(k=new CKEDITOR.dom.walker(m.clone()),x=CKEDITOR.dom.walker.bookmark(!0,!0),k.evaluator=x,this._.nextNode=k.next(),k=new CKEDITOR.dom.walker(m.clone()),k.evaluator=x,k=k.previous(),this._.lastNode=k.getNextSourceNode(!0,null,m.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(x=this.range.clone(),x.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),x.checkEndOfBlock()&& -(x=new CKEDITOR.dom.elementPath(x.endContainer,x.root),this._.lastNode=(x.block||x.blockLimit).getNextSourceNode(!0))),this._.lastNode&&m.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=m.document.createText(""),this._.lastNode.insertAfter(k)),m=null);this._.started=1;k=m}x=this._.nextNode;m=this._.lastNode;for(this._.nextNode=null;x;){var J=0,w=x.hasAscendant("pre"),F=x.type!=CKEDITOR.NODE_ELEMENT,l=0;if(F)x.type==CKEDITOR.NODE_TEXT&&e.test(x.getText())&&(F=0);else{var q=x.getName(); -if(CKEDITOR.dtd.$block[q]&&"false"==x.getAttribute("contenteditable")){d=x;b(this,a,d);break}else if(x.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){if("br"==q)F=1;else if(!k&&!x.getChildCount()&&"hr"!=q){d=x;u=x.equals(m);break}k&&(k.setEndAt(x,CKEDITOR.POSITION_BEFORE_START),"br"!=q&&(this._.nextNode=x));J=1}else{if(x.getFirst()){k||(k=this.range.clone(),k.setStartAt(x,CKEDITOR.POSITION_BEFORE_START));x=x.getFirst();continue}F=1}}F&&!k&&(k=this.range.clone(),k.setStartAt(x,CKEDITOR.POSITION_BEFORE_START)); -u=(!J||F)&&x.equals(m);if(k&&!J)for(;!x.getNext(h)&&!u;){q=x.getParent();if(q.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){J=1;F=0;u||q.equals(m);k.setEndAt(q,CKEDITOR.POSITION_BEFORE_END);break}x=q;F=1;u=x.equals(m);l=1}F&&k.setEndAt(x,CKEDITOR.POSITION_AFTER_END);x=this._getNextSourceNode(x,l,m);if((u=!x)||J&&k)break}if(!d){if(!k)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(k.startContainer,k.root);x=d.blockLimit;J={div:1,th:1,td:1}; -d=d.block;!d&&x&&!this.enforceRealBlocks&&J[x.getName()]&&k.checkStartOfBlock()&&k.checkEndOfBlock()&&!x.equals(k.root)?d=x:!d||this.enforceRealBlocks&&d.is(p)?(d=this.range.document.createElement(a),k.extractContents().appendTo(d),d.trim(),k.insertNode(d),z=y=!0):"li"!=d.getName()?k.checkStartOfBlock()&&k.checkEndOfBlock()||(d=d.clone(!1),k.extractContents().appendTo(d),d.trim(),y=k.splitBlock(),z=!y.wasStartOfBlock,y=!y.wasEndOfBlock,k.insertNode(d)):u||(this._.nextNode=d.equals(m)?null:this._getNextSourceNode(k.getBoundaryNodes().endNode, -1,m))}z&&(z=d.getPrevious())&&z.type==CKEDITOR.NODE_ELEMENT&&("br"==z.getName()?z.remove():z.getLast()&&"br"==z.getLast().$.nodeName.toLowerCase()&&z.getLast().remove());y&&(z=d.getLast())&&z.type==CKEDITOR.NODE_ELEMENT&&"br"==z.getName()&&(!CKEDITOR.env.needsBrFiller||z.getPrevious(g)||z.getNext(g))&&z.remove();this._.nextNode||(this._.nextNode=u||d.equals(m)||!m?null:this._getNextSourceNode(d,1,m));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(e))}var e= +c,e,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:g.element,container:e,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(!1,!0),h=CKEDITOR.dom.walker.whitespaces(!0), +k=function(a){return g(a)&&h(a)},n={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,h,w,A,E;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var x=this.range.clone();h=x.startPath();var m=x.endPath(),K=!x.collapsed&&c(x,h.block),y=!x.collapsed&&c(x,m.block,1);x.shrink(CKEDITOR.SHRINK_ELEMENT,!0);K&&x.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);y&&x.setEndAt(m.block,CKEDITOR.POSITION_AFTER_START);h=x.endContainer.hasAscendant("pre",!0)||x.startContainer.hasAscendant("pre",!0);x.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS); +x.collapsed||(h=new CKEDITOR.dom.walker(x.clone()),m=CKEDITOR.dom.walker.bookmark(!0,!0),h.evaluator=m,this._.nextNode=h.next(),h=new CKEDITOR.dom.walker(x.clone()),h.evaluator=m,h=h.previous(),this._.lastNode=h.getNextSourceNode(!0,null,x.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(m=this.range.clone(),m.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),m.checkEndOfBlock()&& +(m=new CKEDITOR.dom.elementPath(m.endContainer,m.root),this._.lastNode=(m.block||m.blockLimit).getNextSourceNode(!0))),this._.lastNode&&x.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=x.document.createText(""),this._.lastNode.insertAfter(h)),x=null);this._.started=1;h=x}m=this._.nextNode;x=this._.lastNode;for(this._.nextNode=null;m;){var K=0,y=m.hasAscendant("pre"),H=m.type!=CKEDITOR.NODE_ELEMENT,l=0;if(H)m.type==CKEDITOR.NODE_TEXT&&e.test(m.getText())&&(H=0);else{var u=m.getName(); +if(CKEDITOR.dtd.$block[u]&&"false"==m.getAttribute("contenteditable")){d=m;b(this,a,d);break}else if(m.isBlockBoundary(this.forceBrBreak&&!y&&{br:1})){if("br"==u)H=1;else if(!h&&!m.getChildCount()&&"hr"!=u){d=m;w=m.equals(x);break}h&&(h.setEndAt(m,CKEDITOR.POSITION_BEFORE_START),"br"!=u&&(this._.nextNode=m));K=1}else{if(m.getFirst()){h||(h=this.range.clone(),h.setStartAt(m,CKEDITOR.POSITION_BEFORE_START));m=m.getFirst();continue}H=1}}H&&!h&&(h=this.range.clone(),h.setStartAt(m,CKEDITOR.POSITION_BEFORE_START)); +w=(!K||H)&&m.equals(x);if(h&&!K)for(;!m.getNext(k)&&!w;){u=m.getParent();if(u.isBlockBoundary(this.forceBrBreak&&!y&&{br:1})){K=1;H=0;w||u.equals(x);h.setEndAt(u,CKEDITOR.POSITION_BEFORE_END);break}m=u;H=1;w=m.equals(x);l=1}H&&h.setEndAt(m,CKEDITOR.POSITION_AFTER_END);m=this._getNextSourceNode(m,l,x);if((w=!m)||K&&h)break}if(!d){if(!h)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(h.startContainer,h.root);m=d.blockLimit;K={div:1,th:1,td:1}; +d=d.block;!d&&m&&!this.enforceRealBlocks&&K[m.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!m.equals(h.root)?d=m:!d||this.enforceRealBlocks&&d.is(n)?(d=this.range.document.createElement(a),h.extractContents().appendTo(d),d.trim(),h.insertNode(d),A=E=!0):"li"!=d.getName()?h.checkStartOfBlock()&&h.checkEndOfBlock()||(d=d.clone(!1),h.extractContents().appendTo(d),d.trim(),E=h.splitBlock(),A=!E.wasStartOfBlock,E=!E.wasEndOfBlock,h.insertNode(d)):w||(this._.nextNode=d.equals(x)?null:this._getNextSourceNode(h.getBoundaryNodes().endNode, +1,x))}A&&(A=d.getPrevious())&&A.type==CKEDITOR.NODE_ELEMENT&&("br"==A.getName()?A.remove():A.getLast()&&"br"==A.getLast().$.nodeName.toLowerCase()&&A.getLast().remove());E&&(A=d.getLast())&&A.type==CKEDITOR.NODE_ELEMENT&&"br"==A.getName()&&(!CKEDITOR.env.needsBrFiller||A.getPrevious(g)||A.getNext(g))&&A.remove();this._.nextNode||(this._.nextNode=w||d.equals(x)||!x?null:this._getNextSourceNode(d,1,x));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(e))}var e= this.range.root;for(a=a.getNextSourceNode(b,null,d);!g(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire("exec")?!0:!1!==d.exec.call(this,a,b)};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!b.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire("refresh", {editor:a,path:b})?!0:d.refresh&&!1!==d.refresh.apply(this,arguments)};var b;this.checkAllowed=function(c){return c||"boolean"!=typeof b?b=a.activeFilter.checkFeature(this):b};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; -(function(){function a(a,b,c,d,l){var e,q;a=[];for(e in b){q=b[e];q="boolean"==typeof q?{}:"function"==typeof q?{match:q}:M(q);"$"!=e.charAt(0)&&(q.elements=e);c&&(q.featureName=c.toLowerCase());var n=q;n.elements=k(n.elements,/\s+/)||null;n.propertiesOnly=n.propertiesOnly||!0===n.elements;var f=/\s*,\s*/,t=void 0;for(t in Q){n[t]=k(n[t],f)||null;var m=n,g=P[t],E=k(n[P[t]],f),v=n[t],A=[],I=!0,C=void 0;E?I=!1:E={};for(C in v)"!"==C.charAt(0)&&(C=C.slice(1),A.push(C),E[C]=!0,I=!1);for(;C=A.pop();)v[C]= -v["!"+C],delete v["!"+C];m[g]=(I?!1:E)||null}n.match=n.match||null;d.push(q);a.push(q)}b=l.elements;l=l.generic;var h;c=0;for(d=a.length;c=--h&&(g&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),f(b))},u=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var f=0;f=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?f.$.onreadystatechange=function(){if("loaded"==f.$.readyState||"complete"==f.$.readyState)f.$.onreadystatechange=null,u(b,!0)}:(f.$.onload=function(){setTimeout(function(){u(b,!0)},0)},f.$.onerror=function(){u(b,!1)}));f.appendTo(CKEDITOR.document.getHead())}}};g&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var y=0;y=--k&&(g&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),f(b))},w=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var f=0;f=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?f.$.onreadystatechange=function(){if("loaded"==f.$.readyState||"complete"==f.$.readyState)f.$.onreadystatechange=null,w(b,!0)}:(f.$.onload=function(){setTimeout(function(){w(b,!0)},0)},f.$.onerror=function(){w(b,!1)}));f.appendTo(CKEDITOR.document.getHead())}}};g&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var E=0;E]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; -(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,g=0,k;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>g)if(g=b.substring(g,e),k)k.push(g);else this.onText(g); -g=this._.htmlPartsRegex.lastIndex;if(e=c[1])if(e=e.toLowerCase(),k&&CKEDITOR.dtd.$cdata[e]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(e);continue}if(k)k.push(c[0]);else if(e=c[3]){if(e=e.toLowerCase(),!/="/.test(e)){var h={},p,r=c[4];c=!!c[5];if(r)for(;p=a.exec(r);){var f=p[1].toLowerCase();p=p[2]||p[3]||p[4]||"";h[f]=!p&&d[f]?f:CKEDITOR.tools.htmlDecodeAttr(p)}this.onTagOpen(e,h,c);!k&&CKEDITOR.dtd.$cdata[e]&&(k=[])}}else if(e=c[2])this.onComment(e)}if(b.length>g)this.onText(b.substring(g, +a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;c.skin&&(CKEDITOR.skinName=c.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);n(a)});b&&null!=b.customConfig&&(a.config.customConfig=b.customConfig);h(a)||a.fireOnce("customConfigLoaded")}function n(a){CKEDITOR.skin.loadPart("editor",function(){q(a)})}function q(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b, +c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title="string"==typeof d||!1===d?d:[a.lang.editor,a.name].join(", ");a.config.contentsLangDirection||(a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire("langLoaded");f(a)})}function f(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);C(a)})}function C(a){var b=a.config,c=b.plugins,d=b.extraPlugins,e= +b.removePlugins;if(d)var f=new RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?\x3d,|$)","g"),c=c.replace(f,""),c=c+(","+d);if(e)var g=new RegExp("(?:^|,)(?:"+e.replace(/\s*,\s*/g,"|")+")(?\x3d,|$)","g"),c=c.replace(g,"");CKEDITOR.env.air&&(c+=",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],e=[],f=[];a.plugins=c;for(var l in c){var u=c[l],h=u.lang,k=null,O=u.requires,p;CKEDITOR.tools.isArray(O)&&(O=O.join(","));if(O&&(p=O.match(g)))for(;O=p.pop();)CKEDITOR.error("editor-plugin-required", +{plugin:O.replace(",",""),requiredBy:l});h&&!a.lang[l]&&(h.split&&(h=h.split(",")),0<=CKEDITOR.tools.indexOf(h,a.langCode)?k=a.langCode:(k=a.langCode.replace(/-.*/,""),k=k!=a.langCode&&0<=CKEDITOR.tools.indexOf(h,k)?k:0<=CKEDITOR.tools.indexOf(h,"en")?"en":h[0]),u.langEntries&&u.langEntries[k]?(a.lang[l]=u.langEntries[k],k=null):f.push(CKEDITOR.getUrl(u.path+"lang/"+k+".js")));e.push(k);d.push(u)}CKEDITOR.scriptLoader.load(f,function(){for(var c=["beforeInit","init","afterInit"],l=0;l]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,g=0,h;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>g)if(g=b.substring(g,e),h)h.push(g);else this.onText(g); +g=this._.htmlPartsRegex.lastIndex;if(e=c[1])if(e=e.toLowerCase(),h&&CKEDITOR.dtd.$cdata[e]&&(this.onCDATA(h.join("")),h=null),!h){this.onTagClose(e);continue}if(h)h.push(c[0]);else if(e=c[3]){if(e=e.toLowerCase(),!/="/.test(e)){var k={},n,q=c[4];c=!!c[5];if(q)for(;n=a.exec(q);){var f=n[1].toLowerCase();n=n[2]||n[3]||n[4]||"";k[f]=!n&&d[f]?f:CKEDITOR.tools.htmlDecodeAttr(n)}this.onTagOpen(e,k,c);!h&&CKEDITOR.dtd.$cdata[e]&&(h=[])}}else if(e=c[2])this.onComment(e)}if(b.length>g)this.onText(b.substring(g, b.length))}}})(); CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("\x3c",a)},openTagClose:function(a,d){d?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(a,d){"string"==typeof d&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(" ",a,'\x3d"',d,'"')},closeTag:function(a){this._.output.push("\x3c/",a,"\x3e")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("\x3c!--",a, "--\x3e")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(a){var d=this._.output.join("");a&&this.reset();return d}}});"use strict"; @@ -285,227 +287,232 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar (function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this)))return this.remove(),!1},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();"use strict"; (function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}}; (function(){function a(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= -function(g,k,h){function p(a){var b;if(0k;k++)if(g=d[k]){g=g.exec(a,c,this);if(!1===g)return null;if(g&&g!=c)return this.onNode(a,g);if(c.parent&&!c.name)break}return c}, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,d){return this.textRules.exec(a,c,d)},onComment:function(a,c,d){return this.commentRules.exec(a,c,d)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var d=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],g,h=0;3>h;h++)if(g=d[h]){g=g.exec(a,c,this);if(!1===g)return null;if(g&&g!=c)return this.onNode(a,g);if(c.parent&&!c.name)break}return c}, onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,g){return(d=this.attributesRules[d])?d.exec(a,g,c,this):g}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a, -c,d){for(var g=[this.findIndex(c),0],k=0,h=a.length;k/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function B(a){return a.replace(Q,function(a,b){return decodeURIComponent(b)})}function u(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, -function(a){return"\x3c!--"+J+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function z(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function y(a,b){var c=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function m(a,b){var c=[],d=b.config.protectedSource,l=b._.dataStore||(b._.dataStore= -{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,d=[/|$)/gi,//gi,//gi].concat(d);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(c.push(a)-1)+"--\x3e"});for(var f=0;f]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,b){l[l.id]=decodeURIComponent(b);return"{cke_protected_"+l.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,l){return"\x3c"+c+d+"\x3e"+y(z(l),b)+"\x3c/"+c+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var c, -l,e=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=l=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(q);c.addRules(n,{applyToAll:!0});c.addRules(a(b,"data"),{applyToAll:!0});l.addRules(t);l.addRules(A,{applyToAll:!0});l.addRules(a(b,"html"),{applyToAll:!0});b.on("toHtml",function(a){a=a.data;var c=a.dataValue,l,c=m(c,b),c=f(c,R),c=r(c),c=f(c,H),c=c.replace(P,"$1cke:$2"),c=c.replace(G,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"), -c=c.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");l=a.context||b.editable().getName();var e;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==l&&(l="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",e=1);l=b.document.createElement(l);l.setHtml("a"+c);c=l.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");e&&(c=c.replace(/^
|<\/pre>$/gi,""));c=c.replace(v,"$1$2");c=B(c);c=z(c);l=!1===a.fixForBody?!1:
-d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,l);l&&(e=c,!e.children.length&&CKEDITOR.dtd[e.name][l]&&(l=new CKEDITOR.htmlParser.element(l),e.add(l)));a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(e.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,
-c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=u(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^
/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(e.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue, -!1,!0)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=e.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=z(c);c=y(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var l=this.editor,e,f,n,q;b&&"object"==typeof b?(e=b.context,c=b.fixForBody,d=b.dontFilter,f=b.filter,n=b.enterMode,q=b.protectedWhitespaces):e=b;e||null===e||(e=l.editable().getName());return l.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d, -filter:f||l.filter,enterMode:n||l.enterMode,protectedWhitespaces:q}).dataValue},toDataFormat:function(a,b){var c,d,l;b&&(c=b.context,d=b.filter,l=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:l||this.editor.enterMode}).dataValue}};var x=/(?: |\xa0)$/,J="{cke_protected}",w=CKEDITOR.dtd,F="caption colgroup col thead tfoot tbody".split(" "),l=CKEDITOR.tools.extend({},w.$blockLimit, -w.$block),q={elements:{input:h,textarea:h}},n={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},t={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},A={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/, -""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var c=["name","href","src"],d,l=0;ld? -1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&k(a,b=new CKEDITOR.htmlParser.text); -b.value=a.attributes["data-cke-title"]||""},input:p,textarea:p},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(A.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var C=/<(a|area|img|input|source)\b([^>]*)>/gi,D=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,M=/^(href|src|name)$/i,H=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, -R=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,Q=/([^<]*)<\/cke:encoded>/gi,P=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,v=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,G=/]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; -CKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!!(CKEDITOR.dtd.$nonBodyContent[b]||CKEDITOR.dtd.$block[b]||CKEDITOR.dtd.$listItem[b]||CKEDITOR.dtd.$tableContent[b]||CKEDITOR.dtd.$nonEditable[b]||"br"==b);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +c,d){for(var g=[this.findIndex(c),0],h=0,k=a.length;h/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function C(a){return a.replace(V,function(a,b){return decodeURIComponent(b)})}function w(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, +function(a){return"\x3c!--"+K+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function A(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function E(a,b){var c=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function x(a,b){var c=[],d=b.config.protectedSource,e=b._.dataStore||(b._.dataStore= +{id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,d=[/|$)/gi,//gi,//gi].concat(d);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(c.push(a)-1)+"--\x3e"});for(var l=0;l]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,e){return"\x3c"+c+d+"\x3e"+E(A(e),b)+"\x3c/"+c+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var c, +e,l=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(u);c.addRules(I,{applyToAll:!0});c.addRules(a(b,"data"),{applyToAll:!0});e.addRules(J);e.addRules(D,{applyToAll:!0});e.addRules(a(b,"html"),{applyToAll:!0});b.on("toHtml",function(a){a=a.data;var c=a.dataValue,e,c=x(c,b),c=f(c,L),c=q(c),c=f(c,B),c=c.replace(O,"$1cke:$2"),c=c.replace(F,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"), +c=c.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");e=a.context||b.editable().getName();var l;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==e&&(e="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",l=1);e=b.document.createElement(e);e.setHtml("a"+c);c=e.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");l&&(c=c.replace(/^
|<\/pre>$/gi,""));c=c.replace(p,"$1$2");c=C(c);c=A(c);e=!1===a.fixForBody?!1:
+d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,e);e&&(l=c,!l.children.length&&CKEDITOR.dtd[l.name][e]&&(e=new CKEDITOR.htmlParser.element(e),l.add(e)));a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(l.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,
+c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=w(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^
/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(l.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue, +!1,!0)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=l.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=A(c);c=E(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var e=this.editor,f,l,v,g;b&&"object"==typeof b?(f=b.context,c=b.fixForBody,d=b.dontFilter,l=b.filter,v=b.enterMode,g=b.protectedWhitespaces):f=b;f||null===f||(f=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d, +filter:l||e.filter,enterMode:v||e.enterMode,protectedWhitespaces:g}).dataValue},toDataFormat:function(a,b){var c,d,e;b&&(c=b.context,d=b.filter,e=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var m=/(?: |\xa0)$/,K="{cke_protected}",y=CKEDITOR.dtd,H="caption colgroup col thead tfoot tbody".split(" "),l=CKEDITOR.tools.extend({},y.$blockLimit, +y.$block),u={elements:{input:k,textarea:k}},I={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},J={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var c=b.attributes.width,b=b.attributes.height; +c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},D={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var c=["name","href","src"],d,e=0;ed?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck; +delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:n,textarea:n},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(D.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g, +function(a){return a.toLowerCase()})});var r=/<(a|area|img|input|source)\b([^>]*)>/gi,z=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,v=/^(href|src|name)$/i,B=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,L=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,V=/([^<]*)<\/cke:encoded>/gi,O=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,p=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,F=/]*?)\/?>(?!\s*<\/cke:\1)/gi})(); +"use strict";CKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!!(CKEDITOR.dtd.$nonBodyContent[b]||CKEDITOR.dtd.$block[b]||CKEDITOR.dtd.$listItem[b]||CKEDITOR.dtd.$tableContent[b]||CKEDITOR.dtd.$nonEditable[b]||"br"==b);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; CKEDITOR.htmlParser.cssStyle=function(a){var d={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){"font-family"==c&&(e=e.replace(/["']/g,""));d[c.toLowerCase()]=e});return{rules:d,populate:function(a){var c=this.toString();c&&(a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c)},toString:function(){var a=[],c; for(c in d)d[c]&&a.push(c,":",d[c],";");return a.join("")}}}; -(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof a?b.name==a:b.name in a)}}var d=function(a,b){a=a[0];b=b[0];return ab?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,k,h;b=d.getFilterContext(b);if(b.off)return!0; -if(!d.parent)a.onRoot(b,d);for(;;){k=d.name;if(!(h=a.onElementName(b,k)))return this.remove(),!1;d.name=h;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==k)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}k=d.attributes;var p,r;for(p in k){for(h=k[p];;)if(r=a.onAttributeName(b,p))if(r!=p)delete k[p],p=r;else break;else{delete k[p];break}r&&(!1===(h=a.onAttribute(b,d,r,h))?delete k[r]: -k[r]=h)}d.isEmpty||this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,k=[],h=this.attributes,p,r;a.openTag(g,h);for(p in h)k.push([p,h[p]]);a.sortAttributes&&k.sort(d);p=0;for(r=k.length;pb?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,h,k;b=d.getFilterContext(b);if(b.off)return!0; +if(!d.parent)a.onRoot(b,d);for(;;){h=d.name;if(!(k=a.onElementName(b,h)))return this.remove(),!1;d.name=k;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==h)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}h=d.attributes;var n,q;for(n in h){for(k=h[n];;)if(q=a.onAttributeName(b,n))if(q!=n)delete h[n],n=q;else break;else{delete h[n];break}q&&(!1===(k=a.onAttribute(b,d,q,k))?delete h[q]: +h[q]=k)}d.isEmpty||this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,h=[],k=this.attributes,n,q;a.openTag(g,k);for(n in k)h.push([n,k[n]]);a.sortAttributes&&h.sort(d);n=0;for(q=h.length;nCKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()}, -null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};w.eol.detect(a,this);w.bogus.exclude(a);w.cell.shrink(a);a.fragment=a.range.cloneContents();w.tree.rebuild(a,this);w.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var c=F,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE, +(function(){function a(a,e,g,h){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var k=new CKEDITOR.editor(e,a,h);h==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.setStyle("visibility","hidden"),k._.required=a.hasAttribute("required"),a.removeAttribute("required"));g&&k.setData(g,null,!0);k.on("loaded",function(){b(k);h==CKEDITOR.ELEMENT_MODE_REPLACE&&k.config.autoUpdateElement&& +a.$.form&&k._attachToForm();k.setMode(k.config.startupMode,function(){k.resetDirty();k.status="ready";k.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,k)})});k.on("destroy",d);return k}function d(){var a=this.container,b=this.element;a&&(a.clearCustomData(),a.remove());b&&(b.clearCustomData(),this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.show(),this._.required&&b.setAttribute("required","required")),delete this.element)}function b(a){var b=a.name,d=a.element,h=a.elementMode,k= +a.fire("uiSpace",{space:"top",html:""}).html,n=a.fire("uiSpace",{space:"bottom",html:""}).html,q=new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"'+(a.title?' aria-labelledby\x3d"cke_{name}_arialbl"':"")+"\x3e"+(a.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':"")+'\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'), +b=CKEDITOR.dom.element.createFromHtml(q.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:k?'\x3cspan id\x3d"'+a.ui.spaceId("top")+'" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e'+k+"\x3c/span\x3e":"",contentId:a.ui.spaceId("contents"),bottomHtml:n?'\x3cspan id\x3d"'+a.ui.spaceId("bottom")+'" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e'+n+"\x3c/span\x3e":"",outerEl:CKEDITOR.env.ie?"span":"div"}));h==CKEDITOR.ELEMENT_MODE_REPLACE? +(d.hide(),b.insertAfter(d)):d.append(b);a.container=b;a.ui.contentsElement=a.ui.space("contents");k&&a.ui.space("top").unselectable();n&&a.ui.space("bottom").unselectable();d=a.config.width;h=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));h&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(h));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,d){return a(b,d,null,CKEDITOR.ELEMENT_MODE_REPLACE)}; +CKEDITOR.appendTo=function(b,d,g){return a(b,d,g,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;bCKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once("focus", +function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};y.eol.detect(a,this);y.bogus.exclude(a);y.cell.shrink(a);a.fragment=a.range.cloneContents();y.tree.rebuild(a,this);y.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var c=H,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE, 1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var f=this.editor.createRange();f.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=f.createBookmark();c.list.detectMerge(d,this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);d.tableContentsRanges?(c.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(c.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize(); -c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag("span"),f=0,g;if(d)for(;g=d.getItem(f++);)if(!B(g)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),u(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings(); -return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(y,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a, +c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag("span"),f=0,g;if(d)for(;g=d.getItem(f++);)if(!C(g)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),w(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings(); +return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(E,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a, "beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&"Control"==b.type||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"): a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null, null,-1);if(CKEDITOR.env.edge&&14CKEDITOR.env.version?h.$.styleSheet.cssText=k:h.setText(k)):(k=e.appendStyleText(k),k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement),t.setCustomData("stylesheet", -k),k.data("cke-temp",1))}t=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",t+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var D={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;if(c in D){b=a.getSelection();var e, -n=b.getRanges()[0],q=n.startPath(),t,k,h,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(e=b.getSelectedElement())||(e=g(b))?(a.fire("saveSnapshot"),n.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(),n.select(),a.fire("saveSnapshot"),d=1):n.collapsed&&((t=q.block)&&(h=t[c?"getPrevious":"getNext"](f))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("table")&&n[c?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),n[c?"checkEndOfBlock":"checkStartOfBlock"]()&&t.remove(),n["moveToElementEdit"+ -(c?"End":"Start")](h),n.select(),a.fire("saveSnapshot"),d=1):q.blockLimit&&q.blockLimit.is("td")&&(k=q.blockLimit.getAscendant("table"))&&n.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(h=k[c?"getPrevious":"getNext"](f))?(a.fire("saveSnapshot"),n["moveToElementEdit"+(c?"End":"Start")](h),n.checkStartOfBlock()&&n.checkEndOfBlock()?h.remove():n.select(),a.fire("saveSnapshot"),d=1):(k=q.contains(["td","th","caption"]))&&n.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}); -a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in D&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown", -function(b){var c=b.data.getTarget();c.is("img","hr","input","textarea","select")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getOuterHtml().replace(y,""))){var c=a.createRange(); -c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return!0;b=b.data.domEvent.getKey();if(b in D){var c=8==b,d=a.getSelection().getRanges()[0];b=d.startPath();if(d.collapsed)a:{var e= -b.block;if(e&&d[c?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(e,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=d.startContainer.getChild(d.startOffset-(c?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();b=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))b=void 0;else{a.fire("saveSnapshot");var n;(n=(c?d:e).getBogus())&&n.remove();n=a.getSelection();f=n.createBookmarks();(c?e:d).moveChildren(c? -d:e,!1);b.lastElement.mergeSiblings();r(e,d,!c);n.selectBookmarks(f);b=!0}}else b=!1}else c=d,n=b.block,d=c.endPath().block,n&&d&&!n.equals(d)?(a.fire("saveSnapshot"),(e=n.getBogus())&&e.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(n,!1),b.lastElement.mergeSiblings(),r(n,d,!0)),c=a.getSelection().getRanges()[0],c.collapse(1),c.optimize(),""===c.startContainer.getHtml()&&c.startContainer.appendBogus(),c.select(),b=!0):b=!1;if(!b)return;a.getSelection().scrollIntoView(); +this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var h=a.config.contentsLangDirection;this.getDirection(1)!=h&&this.changeAttr("dir",h);var k=CKEDITOR.getCss();if(k){var h=e.getHead(),r=h.getCustomData("stylesheet");r?k!=r.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?r.$.styleSheet.cssText=k:r.setText(k)):(k=e.appendStyleText(k),k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement),h.setCustomData("stylesheet", +k),k.data("cke-temp",1))}h=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",h+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var z={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;if(c in z){b=a.getSelection();var e, +r=b.getRanges()[0],p=r.startPath(),h,t,k,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(e=b.getSelectedElement())||(e=g(b))?(a.fire("saveSnapshot"),r.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(),r.select(),a.fire("saveSnapshot"),d=1):r.collapsed&&((h=p.block)&&(k=h[c?"getPrevious":"getNext"](f))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("table")&&r[c?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),r[c?"checkEndOfBlock":"checkStartOfBlock"]()&&h.remove(),r["moveToElementEdit"+ +(c?"End":"Start")](k),r.select(),a.fire("saveSnapshot"),d=1):p.blockLimit&&p.blockLimit.is("td")&&(t=p.blockLimit.getAscendant("table"))&&r.checkBoundaryOfElement(t,c?CKEDITOR.START:CKEDITOR.END)&&(k=t[c?"getPrevious":"getNext"](f))?(a.fire("saveSnapshot"),r["moveToElementEdit"+(c?"End":"Start")](k),r.checkStartOfBlock()&&r.checkEndOfBlock()?k.remove():r.select(),a.fire("saveSnapshot"),d=1):(t=p.contains(["td","th","caption"]))&&r.checkBoundaryOfElement(t,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}); +a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in z&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown", +function(b){var c=b.data.getTarget();c.is("img","hr","input","textarea","select")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getOuterHtml().replace(E,""))){var c=a.createRange(); +c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return!0;b=b.data.domEvent.getKey();if(b in z){var c=8==b,d=a.getSelection().getRanges()[0];b=d.startPath();if(d.collapsed)a:{var e= +b.block;if(e&&d[c?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(e,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=d.startContainer.getChild(d.startOffset-(c?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();b=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))b=void 0;else{a.fire("saveSnapshot");var p;(p=(c?d:e).getBogus())&&p.remove();p=a.getSelection();f=p.createBookmarks();(c?e:d).moveChildren(c? +d:e,!1);b.lastElement.mergeSiblings();q(e,d,!c);p.selectBookmarks(f);b=!0}}else b=!1}else c=d,p=b.block,d=c.endPath().block,p&&d&&!p.equals(d)?(a.fire("saveSnapshot"),(e=p.getBogus())&&e.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(p,!1),b.lastElement.mergeSiblings(),q(p,d,!0)),c=a.getSelection().getRanges()[0],c.collapse(1),c.optimize(),""===c.startContainer.getHtml()&&c.startContainer.appendBogus(),c.select(),b=!0):b=!1;if(!b)return;a.getSelection().scrollIntoView(); a.fire("saveSnapshot");return!1}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");--c?a.setCustomData("stylesheet_ref",c):(a.removeCustomData("stylesheet_ref"),b.removeCustomData("stylesheet").remove())}}this.editor.fire("contentDomUnload"); delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")? "true":"1"),a.setAttribute("contentEditable",!1))});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),a(b),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label; -if(d&&(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+e+'" class\x3d"cke_voice_label"\x3e'+d+"\x3c/span\x3e");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");f=CKEDITOR.dom.walker.whitespaces(!0);B=CKEDITOR.dom.walker.bookmark(!1,!0);u=CKEDITOR.dom.walker.empty(); -z=CKEDITOR.dom.walker.bogus();y=/(^|]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;m=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,n,t,g=[],k=d.range.startContainer;e=d.range.startPath();for(var k=p[k.getName()],h=0,C=c.getChildren(),A=C.count(),D=-1,m=-1,r=0,H=e.contains(p.$list);h]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;x=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,r,g,h=[],z=d.range.startContainer;e=d.range.startPath();for(var z=v[z.getName()],k=0,B=c.getChildren(),n=B.count(),L=-1,q=-1,D=0,m=e.contains(v.$list);kCKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=!1;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();f||(f=d.clone(),f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),g=!0);f||(f=e);f.is("table")?(d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START), -d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g)),f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();J=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&& -a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var c=b.startContainer,d=!1,e;e=b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),d=!0);e||(e=c);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((c=e.getBogus())&&c.remove(),b.moveToPosition(e,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();w={eol:{detect:function(a,b){var c=a.range, +d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g)),f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();K=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&& +a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var c=b.startContainer,d=!1,e;e=b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),d=!0);e||(e=c);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((c=e.getBogus())&&c.remove(),b.moveToPosition(e,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();y={eol:{detect:function(a,b){var c=a.range, d=c.clone(),e=c.clone(),f=new CKEDITOR.dom.elementPath(c.startContainer,b),g=new CKEDITOR.dom.elementPath(c.endContainer,b);d.collapse(1);e.collapse();f.block&&d.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(c.setStartAfter(f.block),a.prependEolBr=1);g.block&&e.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(c.setEndBefore(g.block),a.appendEolBr=1)},fix:function(a,b){var c=b.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(c),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(c), -1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode,b=b.endNode;!b||!z(b)||c&&c.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var c=a.range,d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(c.startContainer,b),c=new CKEDITOR.dom.elementPath(c.endContainer,b),g;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1, -table:1})){var k=e.contains("table").getParent();g=function(a){return!a.equals(k)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),c=c.contains(CKEDITOR.dtd.$list),!f.equals(c))){var h=e.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(h)}}g||(g=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,b,d,g)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);)e=c.clone(0,1),a.fragment.appendTo(e), -a.fragment=e,c=c.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,c=a.endContainer,d=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(c)&&b.is("tr")&&++d==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};F=function(){function a(b,c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?"insertBefore":"insertAfter"](d)}function b(c,d,e){a(d);a(e,1);for(var f;f=e.getNext();)f.insertAfter(d),d=f;u(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode); -d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),f=d.endPath(),l=e.contains(CKEDITOR.dtd.$list),g=f.contains(CKEDITOR.dtd.$list);a.mergeList=l&&g&&l.getParent().equals(g.getParent())&&!l.equals(g);a.mergeListItems=e.block&&f.block&&e.block.is(CKEDITOR.dtd.$listItem)&&f.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark= -d.createBookmark()},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),l=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var g=f.contains(CKEDITOR.dtd.$list),n=l.contains(CKEDITOR.dtd.$list);g.equals(n)||(n.moveChildren(g),n.remove())}a.mergeListItems&&(f=f.contains(CKEDITOR.dtd.$listItem),l=l.contains(CKEDITOR.dtd.$listItem),f.equals(l)||b(l,d,e));d.remove();e.remove()}}},block:{detectMerge:function(a, -b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);c.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),l=new CKEDITOR.dom.elementPath(e,c),f=f.block,l=l.block;f&&l&&!f.equals(l)&&b(l,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e= -[],f,l=new CKEDITOR.dom.walker(c),g=c.startPath().contains(d),n=c.endPath().contains(d),k={};l.guard=function(a,l){if(a.type==CKEDITOR.NODE_ELEMENT){var h="visited_"+(l?"out":"in");if(a.getCustomData(h))return;CKEDITOR.dom.element.setMarker(k,a,h,1)}if(l&&g&&a.equals(g))f=c.clone(),f.setEndAt(g,CKEDITOR.POSITION_BEFORE_END),e.push(f);else if(!l&&n&&a.equals(n))f=c.clone(),f.setStartAt(n,CKEDITOR.POSITION_AFTER_START),e.push(f);else{if(h=!l)h=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!g||b(a,g))&&(!n|| -b(a,n));h&&(f=c.clone(),f.selectNodeContents(a),e.push(f))}};l.lastForward();CKEDITOR.dom.element.clearAllMarkers(k);return e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c);return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e}; -c.checkForward();if(1f&&e&&e.intersectsNode(c.$)){var g=[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}]; -d.anchorNode==c.$&&d.anchorOffset>f&&(g[0].offset-=f);d.focusNode==c.$&&d.focusOffset>f&&(g[1].offset-=f)}}c.setText(h(c.getText(),1));g&&(c=a.getDocument().$,d=c.getSelection(),c=c.createRange(),c.setStart(g[0].node,g[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(g[1].node,g[1].offset))}}function h(a,b){return b?a.replace(y,function(a,b){return b?" ":""}):a.replace(z,"")}function p(a,b){var c=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+ -(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px")+'"\x3e'+(b||"\x26nbsp;")+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(c);var d=a.getSelection(1),e=a.createRange(),f=d.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(c,CKEDITOR.POSITION_AFTER_START);e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);d.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=c}function r(a){var b= -{37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];1==e.length&&f.collapsed&&(d=f[38>d?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function f(a){for(var b=0;b=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&& -d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+1,0,e));return!0}return!1};d.next()}}return a}var B="function"!=typeof window.getSelection,u=1,z=CKEDITOR.tools.repeat("​",7),y=new RegExp(z+"( )?","g"),m,x,J=CKEDITOR.dom.walker.invisible(1),w=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]); -return!1}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;(e=d.moveToClosestEditablePosition(b.selected,a))||(e=d.moveToClosestEditablePosition(b.selected,!a));e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();e||(d.moveToElementEditablePosition(c.editable()),c.getSelection().selectRanges([d]));c.fire("saveSnapshot");return!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a= -e.getSelection();a&&a.removeAllRanges()}var e=b.editor;e.on("contentDom",function(){function b(){v=new CKEDITOR.dom.selection(e.getSelection());v.lock()}function c(){l.removeListener("mouseup",c);q.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();"None"!=a.type&&b.parentElement().ownerDocument==f.$&&b.select()}var f=e.document,l=CKEDITOR.document,g=e.editable(),h=f.getBody(),q=f.getDocumentElement(),m=g.isInline(),p,v;CKEDITOR.env.gecko&&g.attachListener(g,"focus", -function(a){a.removeListener();0!==p&&(a=e.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$&&(a=e.createRange(),a.moveToElementEditStart(g),a.select())},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){p&&CKEDITOR.env.webkit&&(p=e._.previousActive&&e._.previousActive.equals(f.getActive()))&&null!=e._.previousScrollTop&&e._.previousScrollTop!=g.$.scrollTop&&(g.$.scrollTop=e._.previousScrollTop);e.unlockSelection(p);p=0},null,null,-1);g.attachListener(g, -"mousedown",function(){p=0});if(CKEDITOR.env.ie||m)B?g.attachListener(g,"beforedeactivate",b,null,null,-1):g.attachListener(e,"selectionCheck",b,null,null,-1),g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){e.lockSelection(v);p=1},null,null,-1),g.attachListener(g,"mousedown",function(){p=0});if(CKEDITOR.env.ie&&!m){var G;g.attachListener(g,"mousedown",function(a){2==a.data.$.button&&((a=e.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(G=e.window.getScrollPosition()))}); -g.attachListener(g,"mouseup",function(a){2==a.data.$.button&&G&&(e.document.$.documentElement.scrollLeft=G.x,e.document.$.documentElement.scrollTop=G.y);G=null});if("BackCompat"!=f.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var E,I;q.on("mousedown",function(a){function b(a){a=a.data.$;if(E){var c=h.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(d){}E.setEndPoint(0>I.compareEndPoints("StartToStart",c)?"EndToEnd":"StartToStart",c);E.select()}}function c(){q.removeListener("mousemove", -b);l.removeListener("mouseup",c);q.removeListener("mouseup",c);E.select()}a=a.data;if(a.getTarget().is("html")&&a.$.yCKEDITOR.env.version)q.on("mousedown",function(a){a.data.getTarget().is("html")&&(l.on("mouseup",c),q.on("mouseup",c))})}}g.attachListener(g,"selectionchange",a, -e);g.attachListener(g,"keyup",d,e);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){e.forceNextSelectionCheck();e.selectionChange(1)});if(m&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var K;g.attachListener(g,"mousedown",function(){K=1});g.attachListener(f.getDocumentElement(),"mouseup",function(){K&&d.call(e);K=0})}else g.attachListener(CKEDITOR.env.ie?g:f.getDocumentElement(),"mouseup",d,e);CKEDITOR.env.webkit&&g.attachListener(f,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:k(g)}}, -null,null,-1);g.attachListener(g,"keydown",r(e),null,null,-1)});e.on("setData",function(){e.unlockSelection();CKEDITOR.env.webkit&&c()});e.on("contentDomUnload",function(){e.unlockSelection()});if(CKEDITOR.env.ie9Compat)e.on("beforeDestroy",c,null,null,9);e.on("dataReady",function(){delete e._.fakeSelection;delete e._.hiddenSelectionContainer;e.selectionChange(1)});e.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=e.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&& -(b.remove(),CKEDITOR.env.gecko&&(a=e.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);e.on("key",function(a){if("wysiwyg"==e.mode){var b=e.getSelection();if(b.isFake){var c=w[a.data.keyCode];if(c)return c({editor:e,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),c=a.getCustomData("cke-fillingChar"); -c&&(c.getCustomData("ready")?k(a):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){k(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=h(a.data))},b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=h(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:d).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"== -this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath}; -CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var c=a instanceof CKEDITOR.dom.element; -this.rev=b?b.rev:u++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache),this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d|| -d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!this.root.equals(d)&&!this.root.contains(d))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement=null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var F={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:h, -_createFillingCharSequenceNode:g,FILLING_CHAR_SEQUENCE:z});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=B?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:B?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;"Text"==d&&(b=CKEDITOR.SELECTION_TEXT);"Control"==d&&(b=CKEDITOR.SELECTION_ELEMENT);c.createRange().parentElement()&& -(b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(1==c.rangeCount){var c=c.getRangeAt(0),d=c.startContainer;d==c.endContainer&&1==d.nodeType&&1==c.endOffset-c.startOffset&&F[d.childNodes[c.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=B?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()} -var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,l,g=b.duplicate(),h=0,k=e.length-1,v=-1,n,m;h<=k;)if(v=Math.floor((h+k)/2),f=e[v],g.moveToElementText(f),n=g.compareEndPoints("StartToStart",b),0n)h=v+1;else return{container:d,offset:a(f)};if(-1==v||v==e.length-1&&0>n){g.moveToElementText(d);g.setEndPoint("StartToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!g)return f= -e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};for(d=e.length;0]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g, -" ");g=g.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(g);b=e}else g?b=u(c?[a.getHtml()]:f(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(R))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=B(k.getHtml(),/\n$/,"")+"\n\n"+B(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e": -c.setHtml(d),k.remove())}else c&&x(b)}function f(a){var b=[];B(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"\x3c/pre\x3e"+c+"\x3cpre\x3e"}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function B(a,b,c){var d="",e="";a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function u(a,b){var c; -1f&&e&&e.intersectsNode(c.$)){var g=[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==c.$&&d.anchorOffset>f&&(g[0].offset-=f);d.focusNode==c.$&&d.focusOffset>f&&(g[1].offset-=f)}}c.setText(C(c.getText(),1));g&&(c=a.getDocument().$,d=c.getSelection(), +c=c.createRange(),c.setStart(g[0].node,g[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(g[1].node,g[1].offset))}}function C(a,b){return b?a.replace(y,function(a,b){return b?" ":""}):a.replace(K,"")}function w(a,b){var c=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px")+'"\x3e'+(b||"\x26nbsp;")+"\x3c/div\x3e",a.document);a.fire("lockSnapshot"); +a.editable().append(c);var d=a.getSelection(1),e=a.createRange(),f=d.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(c,CKEDITOR.POSITION_AFTER_START);e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);d.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=c}function A(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];1==e.length&&f.collapsed&&(d=f[38>d?"getPreviousEditableNode": +"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function E(a){for(var b=0;b=d.getLength()?p.setStartAfter(d):p.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(g?p.setEndAfter(e):p.setEndBefore(e));d=new CKEDITOR.dom.walker(p);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(p.endContainer)&CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+ +1,0,e));return!0}return!1};d.next()}}return a}var x="function"!=typeof window.getSelection,m=1,K=CKEDITOR.tools.repeat("​",7),y=new RegExp(K+"( )?","g"),H,l,u,I=CKEDITOR.dom.walker.invisible(1),J=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return!1}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;(e=d.moveToClosestEditablePosition(b.selected,a))||(e=d.moveToClosestEditablePosition(b.selected, +!a));e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();e||(d.moveToElementEditablePosition(c.editable()),c.getSelection().selectRanges([d]));c.fire("saveSnapshot");return!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=c.getSelection();a&&a.removeAllRanges()}var c=a.editor;c.on("contentDom",function(){function a(){q=new CKEDITOR.dom.selection(c.getSelection());q.lock()}function b(){p.removeListener("mouseup", +b);l.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,c=a.createRange();"None"!=a.type&&c.parentElement().ownerDocument==h.$&&c.select()}function d(a){if(CKEDITOR.env.ie){var b=(a=a.getRanges()[0])?a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("false"==a.getAttribute("contenteditable")||"true"==a.getAttribute("contenteditable"))},!0):null;return a&&"false"==b.getAttribute("contenteditable")&&b}}var h=c.document,p=CKEDITOR.document,k=c.editable(),t= +h.getBody(),l=h.getDocumentElement(),r=k.isInline(),z,q;CKEDITOR.env.gecko&&k.attachListener(k,"focus",function(a){a.removeListener();0!==z&&(a=c.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==k.$&&(a=c.createRange(),a.moveToElementEditStart(k),a.select())},null,null,-2);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){z&&CKEDITOR.env.webkit&&(z=c._.previousActive&&c._.previousActive.equals(h.getActive()))&&null!=c._.previousScrollTop&&c._.previousScrollTop!=k.$.scrollTop&& +(k.$.scrollTop=c._.previousScrollTop);c.unlockSelection(z);z=0},null,null,-1);k.attachListener(k,"mousedown",function(){z=0});if(CKEDITOR.env.ie||r)x?k.attachListener(k,"beforedeactivate",a,null,null,-1):k.attachListener(c,"selectionCheck",a,null,null,-1),k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){c.lockSelection(q);z=1},null,null,-1),k.attachListener(k,"mousedown",function(){z=0});if(CKEDITOR.env.ie&&!r){var n;k.attachListener(k,"mousedown",function(a){2==a.data.$.button&& +((a=c.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(n=c.window.getScrollPosition()))});k.attachListener(k,"mouseup",function(a){2==a.data.$.button&&n&&(c.document.$.documentElement.scrollLeft=n.x,c.document.$.documentElement.scrollTop=n.y);n=null});if("BackCompat"!=h.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var m,w;l.on("mousedown",function(a){function b(a){a=a.data.$;if(m){var c=t.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(d){}m.setEndPoint(0> +w.compareEndPoints("StartToStart",c)?"EndToEnd":"StartToStart",c);m.select()}}function c(){l.removeListener("mousemove",b);p.removeListener("mouseup",c);l.removeListener("mouseup",c);m.select()}a=a.data;if(a.getTarget().is("html")&&a.$.yCKEDITOR.env.version)l.on("mousedown",function(a){a.data.getTarget().is("html")&& +(p.on("mouseup",b),l.on("mouseup",b))})}}k.attachListener(k,"selectionchange",e,c);k.attachListener(k,"keyup",g,c);k.attachListener(k,"keydown",function(a){var b=this.getSelection(1);d(b)&&(b.selectElement(d(b)),a.data.preventDefault())},c);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){c.forceNextSelectionCheck();c.selectionChange(1)});if(r&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var u;k.attachListener(k,"mousedown",function(){u=1});k.attachListener(h.getDocumentElement(), +"mouseup",function(){u&&g.call(c);u=0})}else k.attachListener(CKEDITOR.env.ie?k:h.getDocumentElement(),"mouseup",g,c);CKEDITOR.env.webkit&&k.attachListener(h,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:k.hasFocus&&f(k)}},null,null,-1);k.attachListener(k,"keydown",A(c),null,null,-1)});c.on("setData",function(){c.unlockSelection();CKEDITOR.env.webkit&&b()});c.on("contentDomUnload",function(){c.unlockSelection()});if(CKEDITOR.env.ie9Compat)c.on("beforeDestroy", +b,null,null,9);c.on("dataReady",function(){delete c._.fakeSelection;delete c._.hiddenSelectionContainer;c.selectionChange(1)});c.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=c.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&(b.remove(),CKEDITOR.env.gecko&&(a=c.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);c.on("key",function(a){if("wysiwyg"==c.mode){var b=c.getSelection();if(b.isFake){var d= +J[a.data.keyCode];if(d)return d({editor:c,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),c=a.getCustomData("cke-fillingChar");c&&(c.getCustomData("ready")?(f(a),a.editor.fire("selectionCheck")):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){f(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=C(a.data))}, +b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=C(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?e:g).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE? +(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection(): +new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:m++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache), +this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!this.root.equals(d)&&!this.root.contains(d))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement= +null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var D={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:C,_createFillingCharSequenceNode:q,FILLING_CHAR_SEQUENCE:K});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel= +x?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:x?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;"Text"==d&&(b=CKEDITOR.SELECTION_TEXT);"Control"==d&&(b=CKEDITOR.SELECTION_ELEMENT);c.createRange().parentElement()&&(b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE; +else if(1==c.rangeCount){var c=c.getRangeAt(0),d=c.startContainer;d==c.endContainer&&1==d.nodeType&&1==c.endOffset-c.startOffset&&D[d.childNodes[c.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=x?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),k=0, +l=e.length-1,r=-1,q,m;k<=l;)if(r=Math.floor((k+l)/2),f=e[r],h.moveToElementText(f),q=h.compareEndPoints("StartToStart",b),0q)k=r+1;else return{container:d,offset:a(f)};if(-1==r||r==e.length-1&&0>q){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h)return f=e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};for(d=e.length;0]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g, +" ");g=g.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(g);b=e}else g?b=w(c?[a.getHtml()]:f(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(L))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=C(k.getHtml(),/\n$/,"")+"\n\n"+C(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e": +c.setHtml(d),k.remove())}else c&&m(b)}function f(a){var b=[];C(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"\x3c/pre\x3e"+c+"\x3cpre\x3e"}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function C(a,b,c){var d="",e="";a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function w(a,b){var c; +1=c?(g=e.createText(""),g.insertAfter(this)):(a=e.createText(""),a.insertAfter(g),a.remove()));return g},substring:function(a, d){return"number"!=typeof d?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,d)}}); -(function(){function a(a,c,d){var g=a.serializable,k=c[d?"endContainer":"startContainer"],h=d?"endOffset":"startOffset",p=g?c.document.getById(a.startNode):a.startNode;a=g?c.document.getById(a.endNode):a.endNode;k.equals(p.getPrevious())?(c.startOffset=c.startOffset-k.getLength()-a.getPrevious().getLength(),k=a.getNext()):k.equals(a.getPrevious())&&(c.startOffset-=k.getLength(),k=a.getNext());k.equals(p.getParent())&&c[h]++;k.equals(a.getParent())&&c[h]++;c[d?"endContainer":"startContainer"]=k;return c} -CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,d)};var d={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],g;return{getNextRange:function(k){g=void 0===g?0:g+1;var h=a[g];if(h&&1b?-1:1}),e=0,g;eCKEDITOR.env.version? +a.getById(h);b||(b=a.getHead().append("style"),b.setAttribute("id",h),b.setAttribute("type","text/css"));return b}function e(a,b,c){var d,e,g;if(CKEDITOR.env.webkit)for(b=b.split("}").slice(0,-1),e=0;eCKEDITOR.env.version? a[h].$.styleSheet.cssText+=g:a[h].$.innerHTML+=g}}var g={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,e){var g;a&&(a=a.toLowerCase(),b&&(g=this.icons[a+"-rtl"]), g||(g=this.icons[a]));a=c||g&&g.path||"";d=d||g&&g.offset;e=e||g&&g.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",g="";"function"==typeof c&&(d=c(this,"editor"),g= -c(this,"panel"));a=[[p,a]];e([b],d,a);e(h,g,a)}).call(this,a)}});var k="cke_ui_color",h=[],p=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);h.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[p,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); +c(this,"panel"));a=[[n,a]];e([b],d,a);e(k,g,a)}).call(this,a)}});var h="cke_ui_color",k=[],n=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);k.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[n,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); (function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var d=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!d||d!=b)}catch(c){CKEDITOR.env.hc=!1}a.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending)for(delete CKEDITOR._.pending,d=0;d]+data-cke-bookmark[^<]*?<\/span>/ig,"");d&&q(b,c)})}function r(){if("wysiwyg"==b.mode){var a=t("paste");b.getCommand("cut").setState(t("cut")); -b.getCommand("copy").setState(t("copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function t(a){if(x&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var c=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==c.length&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var m=CKEDITOR.plugins.clipboard,p=0,v=0,x=0;(function(){b.on("key",k);b.on("contentDom",a);b.on("selectionChange",function(b){x= -b.data.selection.getRanges()[0].checkReadOnly();r()});b.contextMenu&&b.contextMenu.addListener(function(b,a){x=a.getRanges()[0].checkReadOnly();return{cut:t("cut"),copy:t("copy"),paste:t("paste")}})})();(function(){function a(c,d,g,e,h){var k=b.lang.clipboard[d];b.addCommand(d,g);b.ui.addButton&&b.ui.addButton(c,{label:k,command:d,toolbar:"clipboard,"+e});b.addMenuItems&&b.addMenuItem(d,{label:k,command:d,group:"clipboard",order:h})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste", -"paste",e(),30,8)})();b.getClipboardData=function(a,c){function d(a){a.removeListener();a.cancel();c(a.data)}function g(a){a.removeListener();a.cancel();f=!0;c({type:k,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}function e(){this.customTitle=a&&a.title}var h=!1,k="auto",f=!1;c||(c=a,a=null);b.on("paste",d,null,null,0);b.on("beforePaste",function(a){a.removeListener();h=!0;k=a.data.type},null,null,1E3);!1===w()&&(b.removeListener("paste",d),h&&b.fire("pasteDialog", -e)?(b.on("pasteDialogCommit",g),b.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",g);setTimeout(function(){f||c(null)},10)})):c(null))}}function A(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(
<\/div>|
[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|)*$/gi)&&!b.match(/^(

([^<]|)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|)*$/gi))return"html"}else return"html"; -return"htmlifiedtext"}function B(b,a){function c(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}a=a.replace(/\s+/g," ").replace(/> +/gi,"\x3cbr\x3e");a=a.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1(
|)<\/div>)(?!$|(

(
|)<\/div>))/g,"\x3cbr\x3e").replace(/^(
(
|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"), -a.match(/
(
|)<\/div>/)&&(a="\x3cp\x3e"+a.replace(/(
(
|)<\/div>)+/g,function(a){return c(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),a=a.replace(/<\/div>
/g,"\x3cbr\x3e"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^

$/,"\x3cbr\x3e")),-1){2,}/g,function(a){return c(a.length/4)})+"\x3c/p\x3e"));return C(b,a)}function D(){function b(){var a= -{},b;for(b in CKEDITOR.dtd)"$"!=b.charAt(0)&&"div"!=b&&"span"!=b&&(a[b]=1);return a}var a={};return{get:function(c){return"plain-text"==c?a.plainText||(a.plainText=new CKEDITOR.filter("br")):"semantic-content"==c?((c=a.semanticContent)||(c=new CKEDITOR.filter,c.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),c=a.semanticContent=c),c):c?new CKEDITOR.filter(c):null}}}function y(b,a,c){a=CKEDITOR.htmlParser.fragment.fromHtml(a);var e=new CKEDITOR.htmlParser.basicWriter;c.applyTo(a,!0,!1, -b.activeEnterMode);a.writeHtml(e);return e.getHtml()}function C(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p>

)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e",a.length/7*2)}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return a}function E(b){b.data.preventDefault();b.data.$.dataTransfer.dropEffect="none"}function F(b){var a=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(a,c,d){c.select();q(b,{dataTransfer:d, -method:"drop"},1);d.sourceEditor.fire("saveSnapshot");d.sourceEditor.editable().extractHtmlFromRange(a);d.sourceEditor.getSelection().selectRanges([a]);d.sourceEditor.fire("saveSnapshot")}function e(d,c){d.select();q(b,{dataTransfer:c,method:"drop"},1);a.resetDragDataTransfer()}function f(a,d,c){var g={$:a.data.$,target:a.data.getTarget()};d&&(g.dragRange=d);c&&(g.dropRange=c);!1===b.fire(a.name,g)&&a.data.preventDefault()}function g(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()} -var d=b.editable(),h=CKEDITOR.plugins.clipboard.getDropTarget(b),n=b.ui.space("top"),w=b.ui.space("bottom");a.preventDefaultDropOnElement(n);a.preventDefaultDropOnElement(w);d.attachListener(h,"dragstart",f);d.attachListener(b,"dragstart",a.resetDragDataTransfer,a,null,1);d.attachListener(b,"dragstart",function(d){a.initDragDataTransfer(d,b)},null,null,2);d.attachListener(b,"dragstart",function(){var d=a.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(a.dragStartContainerChildCount= -d?g(d.startContainer):null,a.dragEndContainerChildCount=d?g(d.endContainer):null)},null,null,100);d.attachListener(h,"dragend",f);d.attachListener(b,"dragend",a.initDragDataTransfer,a,null,1);d.attachListener(b,"dragend",a.resetDragDataTransfer,a,null,100);d.attachListener(h,"dragover",function(a){var b=a.data.getTarget();b&&b.is&&b.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()}); -d.attachListener(h,"drop",function(d){if(!d.data.$.defaultPrevented){d.data.preventDefault();var c=d.data.getTarget();if(!c.isReadOnly()||c.type==CKEDITOR.NODE_ELEMENT&&c.is("html")){var c=a.getRangeAtDropPosition(d,b),g=a.dragRange;c&&f(d,g,c)}}},null,null,9999);d.attachListener(b,"drop",a.initDragDataTransfer,a,null,1);d.attachListener(b,"drop",function(d){if(d=d.data){var g=d.dropRange,h=d.dragRange,f=d.dataTransfer;f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){a.internalDrop(h, -g,f,b)},0):f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(h,g,f):e(g,f)}},null,null,9999)})}CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(b){var a,c=D();b.config.forcePasteAsPlainText?a="plain-text":b.config.pasteFilter?a=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(a="semantic-content");b.pasteFilter=c.get(a);z(b);F(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));if(CKEDITOR.env.gecko){var e=["image/png","image/jpeg", -"image/gif"],f;b.on("paste",function(a){var d=a.data,c=d.dataTransfer;if(!d.dataValue&&"paste"==d.method&&c&&1==c.getFilesCount()&&f!=c.id&&(c=c.getFile(0),-1!=CKEDITOR.tools.indexOf(e,c.type))){var n=new FileReader;n.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+n.result+'" /\x3e';b.fire("paste",a.data)},!1);n.addEventListener("abort",function(){b.fire("paste",a.data)},!1);n.addEventListener("error",function(){b.fire("paste",a.data)},!1);n.readAsDataURL(c);f=d.dataTransfer.id; -a.stop()}},null,null,1)}b.on("paste",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var d=a.data.dataTransfer,c=d.getData("text/html");if(c)a.data.dataValue=c,a.data.type="html";else if(c=d.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(c),a.data.type="text"}},null,null,1);b.on("paste",function(a){var b=a.data.dataValue,c=CKEDITOR.dtd.$block;-1 <\/span>/gi, -" "),"html"!=a.data.type&&(b=b.replace(/]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1/,"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var e,f,k=new CKEDITOR.dom.element("div");for(k.setHtml(b);1==k.getChildCount()&& -(e=k.getFirst())&&e.type==CKEDITOR.NODE_ELEMENT&&(e.hasClass("cke_editable")||e.hasClass("cke_contents"));)k=f=e;f&&(b=f.getHtml().replace(/
$/i,""))}CKEDITOR.env.ie?b=b.replace(/^ (?: |\r\n)?<(\w+)/g,function(b,d){return d.toLowerCase()in c?(a.data.preSniffing="html","\x3c"+d):b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)>


<\/div>$/,function(b,d){return d in c?(a.data.endsWithEOL=1,"\x3c/"+d+"\x3e"):b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)
$/,"$1"));a.data.dataValue=b},null, -null,3);b.on("paste",function(a){a=a.data;var d=a.type,e=a.dataValue,f,p=b.config.clipboard_defaultContentType||"html",k=a.dataTransfer.getTransferType(b);f="html"==d||"html"==a.preSniffing?"html":A(e);"htmlifiedtext"==f&&(e=B(b.config,e));"text"==d&&"html"==f?e=y(b,e,c.get("plain-text")):k==CKEDITOR.DATA_TRANSFER_EXTERNAL&&b.pasteFilter&&!a.dontFilter&&(e=y(b,e,b.pasteFilter));a.startsWithEOL&&(e='\x3cbr data-cke-eol\x3d"1"\x3e'+e);a.endsWithEOL&&(e+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"==d&& -(d="html"==f||"html"==p?"html":"text");a.type=d;a.dataValue=e;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie, -isFileApiSupported:!CKEDITOR.env.ie||9CKEDITOR.env.version||a.isInline()?a:b.document},fixSplitNodesAfterDrop:function(b,a,c,e){function f(b, -c,e){var f=b;f.type==CKEDITOR.NODE_TEXT&&(f=b.getParent());if(f.equals(c)&&e!=c.getChildCount())return b=a.startContainer.getChild(a.startOffset-1),c=a.startContainer.getChild(a.startOffset),b&&b.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(e=b.getLength(),b.setText(b.getText()+c.getText()),c.remove(),a.setStart(b,e),a.collapse(!0)),!0}var g=a.startContainer;"number"==typeof e&&"number"==typeof c&&g.type==CKEDITOR.NODE_ELEMENT&&(f(b.startContainer,g,c)||f(b.endContainer,g,e))},isDropRangeAffectedByDragRange:function(b, -a){var c=a.startContainer,e=a.endOffset;return b.endContainer.equals(c)&&b.endOffset<=e||b.startContainer.getParent().equals(c)&&b.startContainer.getIndex()CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,a,f.dragStartContainerChildCount,f.dragEndContainerChildCount); -(h=this.isDropRangeAffectedByDragRange(b,a))||(d=b.createBookmark(!1));f=a.clone().createBookmark(!1);h&&(d=b.createBookmark(!1));b=d.startNode;a=d.endNode;h=f.startNode;a&&b.getPosition(h)&CKEDITOR.POSITION_PRECEDING&&a.getPosition(h)&CKEDITOR.POSITION_FOLLOWING&&h.insertBefore(b);b=e.createRange();b.moveToBookmark(d);g.extractHtmlFromRange(b,1);a=e.createRange();a.moveToBookmark(f);q(e,{dataTransfer:c,method:"drop",range:a},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(b,a){var c= -b.data.$,e=c.clientX,f=c.clientY,g=a.getSelection(!0).getRanges()[0],d=a.createRange();if(b.data.testRange)return b.data.testRange;if(document.caretRangeFromPoint)c=a.document.$.caretRangeFromPoint(e,f),d.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),d.collapse(!0);else if(c.rangeParent)d.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),d.collapse(!0);else{if(CKEDITOR.env.ie&&8n&&!h;n++){if(!h)try{c.moveToPoint(e,f-n),h=!0}catch(p){}if(!h)try{c.moveToPoint(e,f+n),h=!0}catch(k){}}if(h){var u="cke-temp-"+(new Date).getTime();c.pasteHTML('\x3cspan id\x3d"'+u+'"\x3e​\x3c/span\x3e');var r=a.document.getById(u);d.moveToPosition(r,CKEDITOR.POSITION_BEFORE_START);r.remove()}else{var t=a.document.$.elementFromPoint(e,f),m=new CKEDITOR.dom.element(t),q;if(m.equals(a.editable())||"html"==m.getName())return g&&g.startContainer&& -!g.startContainer.equals(a.editable())?g:null;q=m.getClientRect();e/i,bodyRegExp:/([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this.id=this.getData(p);this.id||(this.id="Text"==p?"":"cke-"+CKEDITOR.tools.getUniqueId());if("Text"!=p)try{this.$.setData(p,this.id)}catch(c){}a&&(this.sourceEditor= -a,this.setData("text/html",a.getSelectedHtml(1)),"Text"==p||this.getData("text/plain")||this.setData("text/plain",a.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(b){b=this._.normalizeType(b);var a=this._.data[b];if(void 0===a||null===a||""===a)try{a=this.$.getData(b)}catch(c){}if(void 0===a||null===a||""===a)a="";"text/html"==b?(a=a.replace(this._.metaRegExp, -""),(b=this._.bodyRegExp.exec(a))&&b.length&&(a=b[1],a=a.replace(this._.fragmentRegExp,""))):"Text"==b&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==a.substring(0,7)&&(a="");return a},setData:function(b,a){b=this._.normalizeType(b);this._.data[b]=a;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==b||"Text"==b){"Text"==p&&"Text"==b&&(this.id=a);try{this.$.setData(b,a)}catch(c){}}},getTransferType:function(b){return this.sourceEditor?this.sourceEditor==b?CKEDITOR.DATA_TRANSFER_INTERNAL: -CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function b(b){b=a._.normalizeType(b);var c=a.getData(b);c&&(a._.data[b]=c)}if(this.$){var a=this,c,e;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;ca.order?-1:0>b.order?1:b.ordera||(this.notifications.splice(a,1),b.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var b=this.editor,a=b.config,c=new CKEDITOR.dom.element("div"); +c.addClass("cke_notifications_area");c.setAttribute("id","cke_notifications_area_"+b.name);c.setStyle("z-index",a.baseFloatZIndex-2);return c},_attachListeners:function(){var b=CKEDITOR.document.getWindow(),a=this.editor;b.on("scroll",this._uiBuffer.input);b.on("resize",this._uiBuffer.input);a.on("change",this._changeBuffer.input);a.on("floatingSpaceLayout",this._layout,this,null,20);a.on("blur",this._layout,this,null,20)},_removeListeners:function(){var b=CKEDITOR.document.getWindow(),a=this.editor; +b.removeListener("scroll",this._uiBuffer.input);b.removeListener("resize",this._uiBuffer.input);a.removeListener("change",this._changeBuffer.input);a.removeListener("floatingSpaceLayout",this._layout);a.removeListener("blur",this._layout)},_layout:function(){function b(){a.setStyle("left",k(n+d.width-f-h))}var a=this.element,c=this.editor,d=c.ui.contentsElement.getClientRect(),e=c.ui.contentsElement.getDocumentPosition(),c=c.ui.space("top"),g=c.getClientRect(),m=a.getClientRect(),l,f=this._notificationWidth, +h=this._notificationMargin;l=CKEDITOR.document.getWindow();var p=l.getScrollPosition(),q=l.getViewPaneSize(),r=CKEDITOR.document.getBody(),t=r.getDocumentPosition(),k=CKEDITOR.tools.cssLength;f&&h||(l=this.element.getChild(0),f=this._notificationWidth=l.getClientRect().width,h=this._notificationMargin=parseInt(l.getComputedStyle("margin-left"),10)+parseInt(l.getComputedStyle("margin-right"),10));c.isVisible()&&g.bottom>d.top&&g.bottomp.y?a.setStyles({position:"fixed",top:0}):a.setStyles({position:"absolute",top:k(e.y+d.height-m.height)});var n="fixed"==a.getStyle("position")?d.left:"static"!=r.getComputedStyle("position")?e.x-t.x:e.x;d.widthp.x+q.width?b():a.setStyle("left",k(n)):e.x+f+h>p.x+q.width?a.setStyle("left",k(n)):e.x+d.width/2+f/2+h>p.x+q.width?a.setStyle("left",k(n-e.x+p.x+q.width-f-h)):0>d.left+d.width-f-h?b():0>d.left+d.width/ +2-f/2?a.setStyle("left",k(n-e.x+p.x)):a.setStyle("left",k(n+d.width/2-f/2-h/2))}};CKEDITOR.plugins.notification=Notification;(function(){function q(b,a,c){a.type||(a.type="auto");if(c&&!1===b.fire("beforePaste",a)||!a.dataValue&&a.dataTransfer.isEmpty())return!1;a.dataValue||(a.dataValue="");if(CKEDITOR.env.gecko&&"drop"==a.method&&b.toolbox)b.once("afterPaste",function(){b.toolbox.focus()});return b.fire("paste",a)}function y(b){function a(){var a=b.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(a){b.readOnly&&"cut"==a.name||m.initPasteDataTransfer(a,b);a.data.preventDefault()};a.on("copy", +c);a.on("cut",c);a.on("cut",function(){b.readOnly||b.extractSelectedHtml()},null,null,999)}a.on(m.mainPasteEvent,function(b){"beforepaste"==m.mainPasteEvent&&n||t(b)});"beforepaste"==m.mainPasteEvent&&(a.on("paste",function(b){u||(f(),b.data.preventDefault(),t(b),e("paste"))}),a.on("contextmenu",g,null,null,0),a.on("beforepaste",function(b){!b.data||b.data.$.ctrlKey||b.data.$.shiftKey||g()},null,null,0));a.on("beforecut",function(){!n&&h(b)});var d;a.attachListener(CKEDITOR.env.ie?a:b.document.getDocumentElement(), +"mouseup",function(){d=setTimeout(function(){r()},0)});b.on("destroy",function(){clearTimeout(d)});a.on("keyup",r)}function c(a){return{type:a,canUndo:"cut"==a,startDisabled:!0,fakeKeystroke:"cut"==a?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&h();var a;var c=this.type;if(CKEDITOR.env.ie)a=e(c);else try{a=b.document.$.execCommand(c,!1,null)}catch(d){a=!1}a||b.showNotification(b.lang.clipboard[this.type+"Error"]);return a}}}function d(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+ +86,exec:function(b,a){function c(a,g){g="undefined"!==typeof g?g:!0;a?(a.method="paste",a.dataTransfer||(a.dataTransfer=m.initPasteDataTransfer()),q(b,a,g)):d&&b.showNotification(l,"info",b.config.clipboard_notificationDuration);b.fire("afterCommandExec",{name:"paste",command:e,returnValue:!!a})}a="undefined"!==typeof a&&null!==a?a:{};var e=this,d="undefined"!==typeof a.notification?a.notification:!0,g=a.type,h=CKEDITOR.tools.keystrokeToString(b.lang.common.keyboard,b.getCommandKeystroke(this)),l= +"string"===typeof d?d:b.lang.clipboard.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof a?a:a.dataValue;g?b._.nextPasteType=g:delete b._.nextPasteType;"string"===typeof h?c({dataValue:h}):b.getClipboardData(c)}}}function f(){u=1;setTimeout(function(){u=0},100)}function g(){n=1;setTimeout(function(){n=0},10)}function e(a){var c=b.document,d=c.getBody(),e=!1,g=function(){e=!0};d.on(a,g);7]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&q(b,c)})}function r(){if("wysiwyg"==b.mode){var a=p("paste");b.getCommand("cut").setState(p("cut"));b.getCommand("copy").setState(p("copy")); +b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function p(a){if(w&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var c=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==c.length&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var m=CKEDITOR.plugins.clipboard,n=0,u=0,w=0;(function(){b.on("key",l);b.on("contentDom",a);b.on("selectionChange",function(b){w=b.data.selection.getRanges()[0].checkReadOnly(); +r()});b.contextMenu&&b.contextMenu.addListener(function(b,a){w=a.getRanges()[0].checkReadOnly();return{cut:p("cut"),copy:p("copy"),paste:p("paste")}})})();(function(){function a(c,e,d,g,h){var l=b.lang.clipboard[e];b.addCommand(e,d);b.ui.addButton&&b.ui.addButton(c,{label:l,command:e,toolbar:"clipboard,"+g});b.addMenuItems&&b.addMenuItem(e,{label:l,command:e,group:"clipboard",order:h})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",d(),30,8)})();b.getClipboardData= +function(a,c){function e(b){b.removeListener();b.cancel();c(b.data)}c||(c=a,a=null);b.on("paste",e,null,null,0);!1===v()&&(b.removeListener("paste",e),c(null))}}function z(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(
<\/div>|
[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|)*$/gi)&&!b.match(/^(

([^<]|)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|)*$/gi))return"html"}else return"html"; +return"htmlifiedtext"}function A(b,a){function c(b){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(b/2))+(1==b%2?"\x3cbr\x3e":"")}a=a.replace(/\s+/g," ").replace(/> +/gi,"\x3cbr\x3e");a=a.replace(/<\/?[A-Z]+>/g,function(b){return b.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1(
|)<\/div>)(?!$|(

(
|)<\/div>))/g,"\x3cbr\x3e").replace(/^(
(
|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"), +a.match(/
(
|)<\/div>/)&&(a="\x3cp\x3e"+a.replace(/(
(
|)<\/div>)+/g,function(b){return c(b.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),a=a.replace(/<\/div>
/g,"\x3cbr\x3e"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^

$/,"\x3cbr\x3e")),-1){2,}/g,function(b){return c(b.length/4)})+"\x3c/p\x3e"));return B(b,a)}function C(){function b(){var b= +{},a;for(a in CKEDITOR.dtd)"$"!=a.charAt(0)&&"div"!=a&&"span"!=a&&(b[a]=1);return b}var a={};return{get:function(c){return"plain-text"==c?a.plainText||(a.plainText=new CKEDITOR.filter("br")):"semantic-content"==c?((c=a.semanticContent)||(c=new CKEDITOR.filter,c.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),c=a.semanticContent=c),c):c?new CKEDITOR.filter(c):null}}}function x(b,a,c){a=CKEDITOR.htmlParser.fragment.fromHtml(a);var d=new CKEDITOR.htmlParser.basicWriter;c.applyTo(a,!0,!1, +b.activeEnterMode);a.writeHtml(d);return d.getHtml()}function B(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p>

)+/g,function(b){return CKEDITOR.tools.repeat("\x3cbr\x3e",b.length/7*2)}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return a}function D(b){b.data.preventDefault();b.data.$.dataTransfer.dropEffect="none"}function E(b){var a=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(a,c,e){c.select();q(b,{dataTransfer:e, +method:"drop"},1);e.sourceEditor.fire("saveSnapshot");e.sourceEditor.editable().extractHtmlFromRange(a);e.sourceEditor.getSelection().selectRanges([a]);e.sourceEditor.fire("saveSnapshot")}function d(c,e){c.select();q(b,{dataTransfer:e,method:"drop"},1);a.resetDragDataTransfer()}function f(a,c,e){var g={$:a.data.$,target:a.data.getTarget()};c&&(g.dragRange=c);e&&(g.dropRange=e);!1===b.fire(a.name,g)&&a.data.preventDefault()}function g(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());return b.getChildCount()} +var e=b.editable(),h=CKEDITOR.plugins.clipboard.getDropTarget(b),k=b.ui.space("top"),v=b.ui.space("bottom");a.preventDefaultDropOnElement(k);a.preventDefaultDropOnElement(v);e.attachListener(h,"dragstart",f);e.attachListener(b,"dragstart",a.resetDragDataTransfer,a,null,1);e.attachListener(b,"dragstart",function(c){a.initDragDataTransfer(c,b)},null,null,2);e.attachListener(b,"dragstart",function(){var c=a.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(a.dragStartContainerChildCount= +c?g(c.startContainer):null,a.dragEndContainerChildCount=c?g(c.endContainer):null)},null,null,100);e.attachListener(h,"dragend",f);e.attachListener(b,"dragend",a.initDragDataTransfer,a,null,1);e.attachListener(b,"dragend",a.resetDragDataTransfer,a,null,100);e.attachListener(h,"dragover",function(b){if(CKEDITOR.env.edge)b.data.preventDefault();else{var a=b.data.getTarget();a&&a.is&&a.is("html")?b.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&b.data.$.dataTransfer.types.contains("Files")&& +b.data.preventDefault()}});e.attachListener(h,"drop",function(c){if(!c.data.$.defaultPrevented){c.data.preventDefault();var e=c.data.getTarget();if(!e.isReadOnly()||e.type==CKEDITOR.NODE_ELEMENT&&e.is("html")){var e=a.getRangeAtDropPosition(c,b),g=a.dragRange;e&&f(c,g,e)}}},null,null,9999);e.attachListener(b,"drop",a.initDragDataTransfer,a,null,1);e.attachListener(b,"drop",function(e){if(e=e.data){var g=e.dropRange,h=e.dragRange,f=e.dataTransfer;f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL? +setTimeout(function(){a.internalDrop(h,g,f,b)},0):f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(h,g,f):d(g,f)}},null,null,9999)})}CKEDITOR.plugins.add("clipboard",{requires:"notification",init:function(b){var a,c=C();b.config.forcePasteAsPlainText?a="plain-text":b.config.pasteFilter?a=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(a="semantic-content");b.pasteFilter=c.get(a);y(b);E(b);if(CKEDITOR.env.gecko){var d=["image/png","image/jpeg","image/gif"],f;b.on("paste", +function(a){var c=a.data,h=c.dataTransfer;if(!c.dataValue&&"paste"==c.method&&h&&1==h.getFilesCount()&&f!=h.id&&(h=h.getFile(0),-1!=CKEDITOR.tools.indexOf(d,h.type))){var k=new FileReader;k.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+k.result+'" /\x3e';b.fire("paste",a.data)},!1);k.addEventListener("abort",function(){b.fire("paste",a.data)},!1);k.addEventListener("error",function(){b.fire("paste",a.data)},!1);k.readAsDataURL(h);f=c.dataTransfer.id;a.stop()}},null,null,1)}b.on("paste", +function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=a.data.dataTransfer,d=c.getData("text/html");if(d)a.data.dataValue=d,a.data.type="html";else if(d=c.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(d),a.data.type="text"}},null,null,1);b.on("paste",function(b){var a=b.data.dataValue,c=CKEDITOR.dtd.$block;-1 <\/span>/gi, +" "),"html"!=b.data.type&&(a=a.replace(/]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1/,"")),a=a.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(a.match(/^<[^<]+cke_(editable|contents)/i)){var d,f,l=new CKEDITOR.dom.element("div");for(l.setHtml(a);1==l.getChildCount()&& +(d=l.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)l=f=d;f&&(a=f.getHtml().replace(/
$/i,""))}CKEDITOR.env.ie?a=a.replace(/^ (?: |\r\n)?<(\w+)/g,function(a,e){return e.toLowerCase()in c?(b.data.preSniffing="html","\x3c"+e):a}):CKEDITOR.env.webkit?a=a.replace(/<\/(\w+)>


<\/div>$/,function(a,e){return e in c?(b.data.endsWithEOL=1,"\x3c/"+e+"\x3e"):a}):CKEDITOR.env.gecko&&(a=a.replace(/(\s)
$/,"$1"));b.data.dataValue=a},null, +null,3);b.on("paste",function(a){a=a.data;var e=b._.nextPasteType||a.type,d=a.dataValue,f,n=b.config.clipboard_defaultContentType||"html",l=a.dataTransfer.getTransferType(b);f="html"==e||"html"==a.preSniffing?"html":z(d);delete b._.nextPasteType;"htmlifiedtext"==f&&(d=A(b.config,d));"text"==e&&"html"==f?d=x(b,d,c.get("plain-text")):l==CKEDITOR.DATA_TRANSFER_EXTERNAL&&b.pasteFilter&&!a.dontFilter&&(d=x(b,d,b.pasteFilter));a.startsWithEOL&&(d='\x3cbr data-cke-eol\x3d"1"\x3e'+d);a.endsWithEOL&&(d+='\x3cbr data-cke-eol\x3d"1"\x3e'); +"auto"==e&&(e="html"==f||"html"==n?"html":"text");a.type=e;a.dataValue=d;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,1E3)}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,isFileApiSupported:!CKEDITOR.env.ie||9CKEDITOR.env.version||a.isInline()?a:b.document},fixSplitNodesAfterDrop:function(b, +a,c,d){function f(b,c,d){var f=b;f.type==CKEDITOR.NODE_TEXT&&(f=b.getParent());if(f.equals(c)&&d!=c.getChildCount())return b=a.startContainer.getChild(a.startOffset-1),c=a.startContainer.getChild(a.startOffset),b&&b.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(d=b.getLength(),b.setText(b.getText()+c.getText()),c.remove(),a.setStart(b,d),a.collapse(!0)),!0}var g=a.startContainer;"number"==typeof d&&"number"==typeof c&&g.type==CKEDITOR.NODE_ELEMENT&&(f(b.startContainer,g,c)||f(b.endContainer, +g,d))},isDropRangeAffectedByDragRange:function(b,a){var c=a.startContainer,d=a.endOffset;return b.endContainer.equals(c)&&b.endOffset<=d||b.startContainer.getParent().equals(c)&&b.startContainer.getIndex()CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,a,f.dragStartContainerChildCount, +f.dragEndContainerChildCount);(h=this.isDropRangeAffectedByDragRange(b,a))||(e=b.createBookmark(!1));f=a.clone().createBookmark(!1);h&&(e=b.createBookmark(!1));b=e.startNode;a=e.endNode;h=f.startNode;a&&b.getPosition(h)&CKEDITOR.POSITION_PRECEDING&&a.getPosition(h)&CKEDITOR.POSITION_FOLLOWING&&h.insertBefore(b);b=d.createRange();b.moveToBookmark(e);g.extractHtmlFromRange(b,1);a=d.createRange();a.moveToBookmark(f);q(d,{dataTransfer:c,method:"drop",range:a},1);d.fire("unlockSnapshot")},getRangeAtDropPosition:function(b, +a){var c=b.data.$,d=c.clientX,f=c.clientY,g=a.getSelection(!0).getRanges()[0],e=a.createRange();if(b.data.testRange)return b.data.testRange;if(document.caretRangeFromPoint&&a.document.$.caretRangeFromPoint(d,f))c=a.document.$.caretRangeFromPoint(d,f),e.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),e.collapse(!0);else if(c.rangeParent)e.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),e.collapse(!0);else{if(CKEDITOR.env.ie&&8k&&!h;k++){if(!h)try{c.moveToPoint(d,f-k),h=!0}catch(n){}if(!h)try{c.moveToPoint(d,f+k),h=!0}catch(l){}}if(h){var t="cke-temp-"+(new Date).getTime();c.pasteHTML('\x3cspan id\x3d"'+t+'"\x3e​\x3c/span\x3e');var r=a.document.getById(t);e.moveToPosition(r,CKEDITOR.POSITION_BEFORE_START);r.remove()}else{var p=a.document.$.elementFromPoint(d,f),m=new CKEDITOR.dom.element(p),q;if(m.equals(a.editable())|| +"html"==m.getName())return g&&g.startContainer&&!g.startContainer.equals(a.editable())?g:null;q=m.getClientRect();d/i,bodyRegExp:/([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this.id=this.getData(n);this.id||(this.id="Text"==n?"":"cke-"+CKEDITOR.tools.getUniqueId()); +if("Text"!=n)try{this.$.setData(n,this.id)}catch(c){}a&&(this.sourceEditor=a,this.setData("text/html",a.getSelectedHtml(1)),"Text"==n||this.getData("text/plain")||this.setData("text/plain",a.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(b,a){b=this._.normalizeType(b);var c=this._.data[b],d;if(void 0===c||null===c||""===c)try{c=this.$.getData(b)}catch(f){}if(void 0=== +c||null===c||""===c)c="";"text/html"!=b||a?"Text"==b&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==c.substring(0,7)&&(c=""):(c=c.replace(this._.metaRegExp,""),(d=this._.bodyRegExp.exec(c))&&d.length&&(c=d[1],c=c.replace(this._.fragmentRegExp,"")));"string"===typeof c&&(d=c.indexOf("\x3c/html\x3e"),c=-1!==d?c.substring(0,d+7):c);return c},setData:function(b,a){b=this._.normalizeType(b);this._.data[b]=a;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==b||"Text"==b){"Text"==n&& +"Text"==b&&(this.id=a);try{this.$.setData(b,a)}catch(c){}}},getTransferType:function(b){return this.sourceEditor?this.sourceEditor==b?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function b(b){b=a._.normalizeType(b);var c=a.getData(b,!0);c&&(a._.data[b]=c)}if(this.$){var a=this,c,d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;cc?d+c:b.width>c?d-a.left:d-a.right+b.width): -lc?d-c:b.width>c?d-a.right+b.width:d-a.left);c=a.top;b.height-a.tope?n-e:b.height>e?n-a.bottom+b.height:n-a.top);CKEDITOR.env.ie&&(b=a=new CKEDITOR.dom.element(k.$.offsetParent),"html"==b.getName()&&(b=b.getDocument().getBody()),"rtl"==b.getComputedStyle("direction")&&(d=CKEDITOR.env.ie8Compat?d-2*k.getDocument().getDocumentElement().$.scrollLeft:d-(a.$.scrollWidth-a.$.clientWidth)));var a=k.getFirst(),f;(f=a.getCustomData("activePanel"))&&f.onHide&&f.onHide.call(this,1);a.setCustomData("activePanel", -this);k.setStyles({top:n+"px",left:d+"px"});k.setOpacity(1);g&&g()},this);m.isLoaded?a():m.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();p.element.focus();CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams; -this.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur(); -this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,f,h,g){if(this._.activeChild!=a||a._.panel._.offsetParentId!=c.getId())this.hideChild(),a.onHide= -CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,f,h,g),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances), -b;for(b in f){var c=f[b];a?c.destroy():c.element.hide()}a&&(f={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(e){function t(a,c,f,g,l){var m=new CKEDITOR.style(k["colorButton_"+c+"Style"]),n=CKEDITOR.tools.getNextId()+"_colorBox";l=l||{};e.ui.add(a,CKEDITOR.UI_PANELBUTTON,{label:f,title:f,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+g,allowedContent:m,requiredContent:m,contentTransformations:l.contentTransformations,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":h.panelTitle}},onBlock:function(a, -b){b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(x(a,c,n));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var d=b.keys,f="rtl"==e.lang.dir;d[f?37:39]="next";d[40]="next";d[9]="next";d[f?39:37]="prev";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d[32]="click"},refresh:function(){e.activeFilter.check(m)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=e.getSelection(),a=a&&a.getStartElement(),a=e.elementPath(a),b;if(a){a= -a.block||a.blockLimit||e.document.getBody();do b=a&&a.getComputedStyle("back"==c?"background-color":"color")||"transparent";while("back"==c&&"transparent"==b&&a&&(a=a.getParent()));b&&"transparent"!=b||(b="#ffffff");!1!==k.colorButton_enableAutomatic&&this._.panel._.iframe.getFrameDocument().getById(n).setStyle("background-color",b);return b}}})}function x(a,c,f){var g=[],l=k.colorButton_colors.split(","),m=k.colorButton_colorsPerRow||6,n=e.plugins.colordialog&&!1!==k.colorButton_enableMore,p=l.length+ -(n?2:1),b=CKEDITOR.tools.addFunction(function(b,c){function d(a){this.removeListener("ok",d);this.removeListener("cancel",d);"ok"==a.name&&f(this.getContentElement("picker","selectedColor").getValue(),c)}var f=arguments.callee;if("?"==b)e.openDialog("colordialog",function(){this.on("ok",d);this.on("cancel",d)});else{e.focus();a.hide();e.fire("saveSnapshot");e.removeStyle(new CKEDITOR.style(k["colorButton_"+c+"Style"],{color:"inherit"}));if(b){var g=k["colorButton_"+c+"Style"];g.childRule="back"== -c?function(a){return u(a)}:function(a){return!(a.is("a")||a.getElementsByTag("a").count())||u(a)};e.applyStyle(new CKEDITOR.style(g,{color:b}))}e.fire("saveSnapshot")}});!1!==k.colorButton_enableAutomatic&&g.push('\x3ca class\x3d"cke_colorauto" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"',h.auto,'" onclick\x3d"CKEDITOR.tools.callFunction(',b,",null,'",c,"');return false;\" href\x3d\"javascript:void('",h.auto,'\')" role\x3d"option" aria-posinset\x3d"1" aria-setsize\x3d"',p,'"\x3e\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e\x3ctr\x3e\x3ctd colspan\x3d"'+ -m+'" align\x3d"center"\x3e\x3cspan class\x3d"cke_colorbox" id\x3d"',f,'"\x3e\x3c/span\x3e',h.auto,"\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/a\x3e");g.push('\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e');for(f=0;fc?d+c:b.width>c?d-a.left:d-a.right+b.width): +mc?d-c:b.width>c?d-a.right+b.width:d-a.left);c=a.top;b.height-a.tope?p-e:b.height>e?p-a.bottom+b.height:p-a.top);CKEDITOR.env.ie&&(b=a=new CKEDITOR.dom.element(l.$.offsetParent),"html"==b.getName()&&(b=b.getDocument().getBody()),"rtl"==b.getComputedStyle("direction")&&(d=CKEDITOR.env.ie8Compat?d-2*l.getDocument().getDocumentElement().$.scrollLeft:d-(a.$.scrollWidth-a.$.clientWidth)));var a=l.getFirst(),f;(f=a.getCustomData("activePanel"))&&f.onHide&&f.onHide.call(this,1);a.setCustomData("activePanel", +this);l.setStyles({top:p+"px",left:d+"px"});l.setOpacity(1);g&&g()},this);n.isLoaded?a():n.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();k.element.focus();CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(function(){k.markFirstDisplayed?k.markFirstDisplayed():k._.markFirstDisplayed()},0):k.markFirstDisplayed?k.markFirstDisplayed(): +k._.markFirstDisplayed();this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a= +this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;this._.showBlockParams= +null;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,f,h,g){if(this._.activeChild!=a||a._.panel._.offsetParentId!=c.getId())this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,f,h,g),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+= +""},100)},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in f){var c=f[b];a?c.destroy():c.element.hide()}a&&(f={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(f){function t(a,e,g,h,m){var n=new CKEDITOR.style(l["colorButton_"+e+"Style"]),q=CKEDITOR.tools.getNextId()+"_colorBox",p;m=m||{};f.ui.add(a,CKEDITOR.UI_PANELBUTTON,{label:g,title:g,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+h,allowedContent:n,requiredContent:n,contentTransformations:m.contentTransformations,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":k.panelTitle}},onBlock:function(a, +b){p=b;b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(y(a,e,q));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var c=b.keys,d="rtl"==f.lang.dir;c[d?37:39]="next";c[40]="next";c[9]="next";c[d?39:37]="prev";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]="click"},refresh:function(){f.activeFilter.check(n)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=f.getSelection(),b=a&&a.getStartElement(),c=f.elementPath(b); +if(c){b=c.block||c.blockLimit||f.document.getBody();do c=b&&b.getComputedStyle("back"==e?"background-color":"color")||"transparent";while("back"==e&&"transparent"==c&&b&&(b=b.getParent()));c&&"transparent"!=c||(c="#ffffff");!1!==l.colorButton_enableAutomatic&&this._.panel._.iframe.getFrameDocument().getById(q).setStyle("background-color",c);if(b=a&&a.getRanges()[0]){for(var a=new CKEDITOR.dom.walker(b),d=b.collapsed?b.startContainer:a.next(),b="";d;){d.type===CKEDITOR.NODE_TEXT&&(d=d.getParent()); +d=u(d.getComputedStyle("back"==e?"background-color":"color"));b=b||d;if(b!==d){b="";break}d=a.next()}a=b;b=p._.getItems();for(d=0;dd.group?1:a.orderd.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"'; @@ -736,8 +773,8 @@ a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b (p=this.icon);this.command&&(f=e.getCommand(this.command),(f=e.getCommandKeystroke(f))&&(c=CKEDITOR.tools.keystrokeToString(e.lang.common.keyboard,f)));a={id:h,name:this.name,iconName:p,label:this.label,cls:this.className||"",state:l,hasPopup:u?"true":"false",disabled:g==CKEDITOR.TRISTATE_DISABLED,title:this.label+(c?" ("+c.display+")":""),ariaShortcut:c?e.lang.common.keyboardShortcut+" "+c.aria:"",href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn, clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(p,"rtl"==this.editor.lang.dir,p==this.icon?null:this.icon,this.iconOffset),shortcutHtml:c?n.output({shortcut:c.display}):"",arrowHtml:u?t.output({label:q}):"",role:this.role?this.role:"menuitem",ariaChecked:k};r.output(a,d)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){a=a.data;var c=CKEDITOR.env.webkit?f:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!c){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var c=this.editor, b=(new CKEDITOR.dom.elementPath(a.getTarget(),c.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);b&&"false"==b.getAttribute("contenteditable")&&c.getSelection().fake(b)}var b=a.getTarget().getDocument(),d=a.getTarget().getDocument().getDocumentElement(),c=!b.equals(CKEDITOR.document),b=b.getWindow().getScrollPosition(),g=c?a.$.clientX:a.$.pageX||b.x+a.$.clientX,h=c?a.$.clientY:a.$.pageY||b.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,h)},CKEDITOR.env.ie? -200:0,this)}},this);if(CKEDITOR.env.webkit){var f,d=function(){f=0};a.on("keydown",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",d);a.on("contextmenu",d)}},open:function(a,e,f,d){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,f,d)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),!1!==a.config.browserContextMenuOnCtrl)}); -a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){CKEDITOR.plugins.add("div",{requires:"dialog",init:function(a){if(!a.blockless){var c=a.lang.div,b="div(*)";CKEDITOR.dialog.isTabEnabled(a,"editdiv","advanced")&&(b+=";div[dir,id,lang,title]{*}");a.addCommand("creatediv",new CKEDITOR.dialogCommand("creatediv",{allowedContent:b,requiredContent:"div",contextSensitive:!0,contentTransformations:[["div: alignmentToStyle"]],refresh:function(a,c){this.setState("div"in(a.config.div_wrapTable?c.root:c.blockLimit).getDtd()?CKEDITOR.TRISTATE_OFF: +200:0,this)}},this);if(CKEDITOR.env.webkit){var f,d=function(){f=0};a.on("keydown",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",d);a.on("contextmenu",d)}},open:function(a,e,f,d){!1!==this.editor.config.enableContextMenu&&(this.editor.focus(),a=a||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(a,e,f,d))}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(), +!1!==a.config.browserContextMenuOnCtrl)});a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){CKEDITOR.plugins.add("div",{requires:"dialog",init:function(a){if(!a.blockless){var c=a.lang.div,b="div(*)";CKEDITOR.dialog.isTabEnabled(a,"editdiv","advanced")&&(b+=";div[dir,id,lang,title]{*}");a.addCommand("creatediv",new CKEDITOR.dialogCommand("creatediv",{allowedContent:b,requiredContent:"div",contextSensitive:!0,contentTransformations:[["div: alignmentToStyle"]],refresh:function(a,c){this.setState("div"in(a.config.div_wrapTable?c.root:c.blockLimit).getDtd()?CKEDITOR.TRISTATE_OFF: CKEDITOR.TRISTATE_DISABLED)}}));a.addCommand("editdiv",new CKEDITOR.dialogCommand("editdiv",{requiredContent:"div"}));a.addCommand("removediv",{requiredContent:"div",exec:function(a){function c(b){(b=CKEDITOR.plugins.div.getSurroundDiv(a,b))&&!b.data("cke-div-added")&&(f.push(b),b.data("cke-div-added"))}for(var b=a.getSelection(),g=b&&b.getRanges(),e,h=b.createBookmarks(),f=[],d=0;df[k-1].indent+1){g=f[k-1].indent+1-f[k].indent;for(h=f[k].indent;f[k]&&f[k].indent>=h;)f[k].indent+=g,k++;k--}var d=CKEDITOR.plugins.list.arrayToList(f,e,null,b.config.enterMode,m.root.getAttribute("dir")).listNode,a,p;c(!0);c();d.replace(m.root);b.fire("contentDomInvalidated")}function B(b,m){this.name=b;this.context=this.type=m;this.allowedContent= m+" li";this.requiredContent=m}function E(b,m,e,c){for(var f,g;f=b[c?"getLast":"getFirst"](J);)(g=f.getDirection(1))!==m.getDirection(1)&&f.setAttribute("dir",g),f.remove(),e?f[c?"insertBefore":"insertAfter"](e):m.append(f,c)}function F(b){function m(e){var c=b[e?"getPrevious":"getNext"](u);c&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(b.getName())&&(E(b,c,null,!e),b.remove(),b=c)}m();m(1)}function G(b){return b.type==CKEDITOR.NODE_ELEMENT&&(b.getName()in CKEDITOR.dtd.$block||b.getName()in CKEDITOR.dtd.$listItem)&& CKEDITOR.dtd[b.getName()]["#"]}function C(b,m,e){b.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var c=e.extractContents();m.trim(!1,!0);var f=m.createBookmark(),g=new CKEDITOR.dom.elementPath(m.startContainer),k=g.block,g=g.lastElement.getAscendant("li",1)||k,h=new CKEDITOR.dom.elementPath(e.startContainer),d=h.contains(CKEDITOR.dtd.$listItem),h=h.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():h&&(k=h.getPrevious(u))&&z(k)&&k.remove();(k=c.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&& @@ -858,34 +897,35 @@ CKEDITOR.UI_MENUBUTTON="menubutton";CKEDITOR.plugins.add("onchange",{init:functi function(a){"source"!=a.data.name&&!1!==a.data.command.canUndo&&b()});g&&(f=new g(function(){b()}),window.console&&window.console.log&&console.log("Detecting changes using MutationObservers"));a.on("contentDom",function(){if(f)var c=setInterval(function(){if(typeof a.document==="object"){f.observe(a.document.getBody().$,{attributes:true,childList:true,characterData:true});clearInterval(c)}},100);a.document.on("keydown",function(a){if(!a.data.$.ctrlKey&&!a.data.$.metaKey){a=a.data.$.keyCode;(a==8|| a==13||a==32||a>=46&&a<=90||a>=96&&a<=111||a>=186&&a<=222||a==229)&&b()}});a.document.on("drop",b);a.document.getBody().on("drop",b)});a.on("mode",function(){if(a.mode=="source"){var c=a.textarea||a._.editable;c.on("keydown",function(a){!a.data.$.ctrlKey&&!a.data.$.metaKey&&b()});c.on("drop",b);c.on("input",b);if(CKEDITOR.env.ie){c.on("cut",b);c.on("paste",b)}}})}});CKEDITOR.plugins.add("pastefromexcel",{requires:"clipboard",init:function(g){if(!CKEDITOR.env.ie){var h=function(b){b=this._.normalizeType(b);var a=this._.data[b];if(void 0===a||null===a||""===a)try{a=this.$.getData(b)}catch(g){}if(void 0===a||null===a||""===a)a="";if("text/html"==b){a=a.replace(this._.metaRegExp,"");if(-1!=a.search(//)||-1!=a.search(//)){var c=a,c=c.substring(c.indexOf("\x3chtml "),c.length),c=c.substring(0,c.lastIndexOf("\x3c/html\x3e")+ 7),a=document.createElement("iframe");a.style.display="none";document.body.appendChild(a);b=a.contentDocument||a.contentWindow.document;b.open();b.write(c);b.close();for(var d,f=b.styleSheets[b.styleSheets.length-1].cssRules,e=0;e|<\/font>)/, -e={dataValue:h};if(h&&(b||g.test(h))&&(!1!==a.fire("pasteFromWord",e)||b)){c.dontFilter=!0;var k=l(a,f,function(){if(k)a.fire("paste",c);else if(!a.config.pasteFromWordPromptCleanup||b||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(e.dataValue,a),a.fire("afterPasteFromWord",e),c.dataValue=e.dataValue;b=0});k&&d.cancel()}},null,null,3)}})})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire("paste",{type:"text",dataValue:b.dataValue,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire("afterCommandExec",{name:"pastetext",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(a){a.addCommand("pastetext",c);a.ui.addButton&&a.ui.addButton("PasteText",{label:a.lang.pastetext.button, -command:"pastetext",toolbar:"clipboard,40"});if(a.config.forcePasteAsPlainText)a.on("beforePaste",function(a){"html"!=a.data.type&&(a.data.type="text")});a.on("pasteState",function(b){a.getCommand("pastetext").setState(b.data)})}})})();CKEDITOR.plugins.add("scayt",{requires:"menubutton,dialog",tabToOpen:null,dialogName:"scaytDialog",onLoad:function(a){CKEDITOR.plugins.scayt.onLoadTimestamp=(new Date).getTime();"moono-lisa"==(CKEDITOR.skinName||a.config.skin)&&CKEDITOR.document.appendStyleSheet(this.path+"skins/"+CKEDITOR.skin.name+"/scayt.css")},init:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+"dialogs/options.js")); -this.addMenuItems(a);var b=a.lang.scayt,e=CKEDITOR.env;a.ui.add("Scayt",CKEDITOR.UI_MENUBUTTON,{label:b.text_title,title:a.plugins.wsc?a.lang.wsc.title:b.text_title,modes:{wysiwyg:!(e.ie&&(8>e.version||e.quirks))},toolbar:"spellchecker,20",refresh:function(){var b=a.ui.instances.Scayt.getState();a.scayt&&(b=d.state.scayt[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);a.fire("scaytButtonState",b)},onRender:function(){var b=this;a.on("scaytButtonState",function(a){void 0!==typeof a.data&&b.setState(a.data)})}, -onMenu:function(){var b=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[b&&d.state.scayt[a.name]?"btn_disable":"btn_enable"];b={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]|| -delete b.scaytOptions;a.config.scayt_uiTabs[1]||delete b.scaytLangs;a.config.scayt_uiTabs[2]||delete b.scaytDict;return b}});a.contextMenu&&a.addMenuItems&&(a.contextMenu.addListener(function(b,d){var h=a.scayt,k,e;h&&(e=h.getSelectionNode())&&(k=c.menuGenerator(a,e),h.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" .")));return k}),a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(b){return function(){var d=a.scayt;d&&d.hideBanner();return b.apply(this)}}))}, -addMenuItems:function(a){var c=this,d=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");for(var b=a.config.scayt_contextMenuItemsOrder.split("|"),e=0;ea.config.scayt_maxSuggestions)a.config.scayt_maxSuggestions=5;if(void 0===a.config.scayt_minWordLength||"number"!=typeof a.config.scayt_minWordLength||1>a.config.scayt_minWordLength)a.config.scayt_minWordLength=4;if(void 0===a.config.scayt_customDictionaryIds||"string"!==typeof a.config.scayt_customDictionaryIds)a.config.scayt_customDictionaryIds="";if(void 0===a.config.scayt_userDictionaryName||"string"!==typeof a.config.scayt_userDictionaryName)a.config.scayt_userDictionaryName=null;if("string"=== -typeof a.config.scayt_uiTabs&&3===a.config.scayt_uiTabs.split(",").length){var d=[],b=[];a.config.scayt_uiTabs=a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){1===Number(a)||0===Number(a)?(b.push(!0),d.push(Number(a))):b.push(!1)});null===CKEDITOR.tools.search(b,!1)?a.config.scayt_uiTabs=d:a.config.scayt_uiTabs=[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];"string"!=typeof a.config.scayt_serviceProtocol&&(a.config.scayt_serviceProtocol=null);"string"!=typeof a.config.scayt_serviceHost&& -(a.config.scayt_serviceHost=null);"string"!=typeof a.config.scayt_servicePort&&(a.config.scayt_servicePort=null);"string"!=typeof a.config.scayt_servicePath&&(a.config.scayt_servicePath=null);a.config.scayt_moreSuggestions||(a.config.scayt_moreSuggestions="on");"string"!==typeof a.config.scayt_customerId&&(a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2");"string"!==typeof a.config.scayt_srcUrl&&(c=document.location.protocol,c=-1!=c.search(/https?:/)? -c:"http:",a.config.scayt_srcUrl=c+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js");"boolean"!==typeof CKEDITOR.config.scayt_handleCheckDirty&&(CKEDITOR.config.scayt_handleCheckDirty=!0);"boolean"!==typeof CKEDITOR.config.scayt_handleUndoRedo&&(CKEDITOR.config.scayt_handleUndoRedo=!0);CKEDITOR.config.scayt_handleUndoRedo=CKEDITOR.plugins.undo?CKEDITOR.config.scayt_handleUndoRedo:!1;"boolean"!==typeof a.config.scayt_multiLanguageMode&&(a.config.scayt_multiLanguageMode=!1);"object"!== -typeof a.config.scayt_multiLanguageStyles&&(a.config.scayt_multiLanguageStyles={});a.config.scayt_ignoreAllCapsWords&&"boolean"!==typeof a.config.scayt_ignoreAllCapsWords&&(a.config.scayt_ignoreAllCapsWords=!1);a.config.scayt_ignoreDomainNames&&"boolean"!==typeof a.config.scayt_ignoreDomainNames&&(a.config.scayt_ignoreDomainNames=!1);a.config.scayt_ignoreWordsWithMixedCases&&"boolean"!==typeof a.config.scayt_ignoreWordsWithMixedCases&&(a.config.scayt_ignoreWordsWithMixedCases=!1);a.config.scayt_ignoreWordsWithNumbers&& -"boolean"!==typeof a.config.scayt_ignoreWordsWithNumbers&&(a.config.scayt_ignoreWordsWithNumbers=!1);if(a.config.scayt_disableOptionsStorage){var c=CKEDITOR.tools.isArray(a.config.scayt_disableOptionsStorage)?a.config.scayt_disableOptionsStorage:"string"===typeof a.config.scayt_disableOptionsStorage?[a.config.scayt_disableOptionsStorage]:void 0,e="all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers".split(" "),f=["lang","ignore-all-caps-words", -"ignore-domain-names","ignore-words-with-mixed-cases","ignore-words-with-numbers"],g=CKEDITOR.tools.search,h=CKEDITOR.tools.indexOf;a.config.scayt_disableOptionsStorage=function(a){for(var b=[],d=0;d|<\/font>)/,h=/e.version||e.quirks))},toolbar:"spellchecker,20",refresh:function(){var b=a.ui.instances.Scayt.getState();a.scayt&&(b=d.state.scayt[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);a.fire("scaytButtonState",b)},onRender:function(){var b=this;a.on("scaytButtonState", +function(a){void 0!==typeof a.data&&b.setState(a.data)})},onMenu:function(){var b=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[b&&d.state.scayt[a.name]?"btn_disable":"btn_enable"];var c={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF: +CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||delete c.scaytOptions;a.config.scayt_uiTabs[1]||delete c.scaytLangs;a.config.scayt_uiTabs[2]||delete c.scaytDict;b&&!CKEDITOR.plugins.scayt.isNewUdSupported(b)&&(delete c.scaytDict,a.config.scayt_uiTabs[2]=0,CKEDITOR.plugins.scayt.alarmCompatibilityMessage());return c}});a.contextMenu&&a.addMenuItems&&(a.contextMenu.addListener(function(b,d){var h=a.scayt,k,e;h&&(e=h.getSelectionNode())&&(k=c.menuGenerator(a,e),h.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" ."))); +return k}),a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(b){return function(){var d=a.scayt;d&&d.hideBanner();return b.apply(this)}}))},addMenuItems:function(a){var c=this,d=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");for(var b=a.config.scayt_contextMenuItemsOrder.split("|"),e=0;ea.config.scayt_maxSuggestions)a.config.scayt_maxSuggestions=5;if(void 0===a.config.scayt_minWordLength||"number"!= +typeof a.config.scayt_minWordLength||1>a.config.scayt_minWordLength)a.config.scayt_minWordLength=4;if(void 0===a.config.scayt_customDictionaryIds||"string"!==typeof a.config.scayt_customDictionaryIds)a.config.scayt_customDictionaryIds="";if(void 0===a.config.scayt_userDictionaryName||"string"!==typeof a.config.scayt_userDictionaryName)a.config.scayt_userDictionaryName=null;if("string"===typeof a.config.scayt_uiTabs&&3===a.config.scayt_uiTabs.split(",").length){var d=[],b=[];a.config.scayt_uiTabs= +a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){1===Number(a)||0===Number(a)?(b.push(!0),d.push(Number(a))):b.push(!1)});null===CKEDITOR.tools.search(b,!1)?a.config.scayt_uiTabs=d:a.config.scayt_uiTabs=[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];"string"!=typeof a.config.scayt_serviceProtocol&&(a.config.scayt_serviceProtocol=null);"string"!=typeof a.config.scayt_serviceHost&&(a.config.scayt_serviceHost=null);"string"!=typeof a.config.scayt_servicePort&&(a.config.scayt_servicePort= +null);"string"!=typeof a.config.scayt_servicePath&&(a.config.scayt_servicePath=null);a.config.scayt_moreSuggestions||(a.config.scayt_moreSuggestions="on");"string"!==typeof a.config.scayt_customerId&&(a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2");"string"!==typeof a.config.scayt_customPunctuation&&(a.config.scayt_customPunctuation="-");"string"!==typeof a.config.scayt_srcUrl&&(c=document.location.protocol,c=-1!=c.search(/https?:/)?c:"http:",a.config.scayt_srcUrl= +c+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js");"boolean"!==typeof CKEDITOR.config.scayt_handleCheckDirty&&(CKEDITOR.config.scayt_handleCheckDirty=!0);"boolean"!==typeof CKEDITOR.config.scayt_handleUndoRedo&&(CKEDITOR.config.scayt_handleUndoRedo=!0);CKEDITOR.config.scayt_handleUndoRedo=CKEDITOR.plugins.undo?CKEDITOR.config.scayt_handleUndoRedo:!1;"boolean"!==typeof a.config.scayt_multiLanguageMode&&(a.config.scayt_multiLanguageMode=!1);"object"!==typeof a.config.scayt_multiLanguageStyles&& +(a.config.scayt_multiLanguageStyles={});a.config.scayt_ignoreAllCapsWords&&"boolean"!==typeof a.config.scayt_ignoreAllCapsWords&&(a.config.scayt_ignoreAllCapsWords=!1);a.config.scayt_ignoreDomainNames&&"boolean"!==typeof a.config.scayt_ignoreDomainNames&&(a.config.scayt_ignoreDomainNames=!1);a.config.scayt_ignoreWordsWithMixedCases&&"boolean"!==typeof a.config.scayt_ignoreWordsWithMixedCases&&(a.config.scayt_ignoreWordsWithMixedCases=!1);a.config.scayt_ignoreWordsWithNumbers&&"boolean"!==typeof a.config.scayt_ignoreWordsWithNumbers&& +(a.config.scayt_ignoreWordsWithNumbers=!1);if(a.config.scayt_disableOptionsStorage){var c=CKEDITOR.tools.isArray(a.config.scayt_disableOptionsStorage)?a.config.scayt_disableOptionsStorage:"string"===typeof a.config.scayt_disableOptionsStorage?[a.config.scayt_disableOptionsStorage]:void 0,e="all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers".split(" "),f=["lang","ignore-all-caps-words","ignore-domain-names","ignore-words-with-mixed-cases", +"ignore-words-with-numbers"],g=CKEDITOR.tools.search,h=CKEDITOR.tools.indexOf;a.config.scayt_disableOptionsStorage=function(a){for(var b=[],d=0;d=parseInt(c)*Math.pow(10,d)}return c?Array(7).join(String.fromCharCode(8203)):String.fromCharCode(8203)}()}],onLoadTimestamp:"",state:{scayt:{},grayt:{}},warningCounter:0,suggestions:[],options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0}, -data_attribute_name:"data-scayt-word",misspelled_word_class:"scayt-misspell-word",problem_grammar_data_attribute:"data-grayt-phrase",problem_grammar_class:"gramm-problem"},backCompatibilityMap:{scayt_service_protocol:"scayt_serviceProtocol",scayt_service_host:"scayt_serviceHost",scayt_service_port:"scayt_servicePort",scayt_service_path:"scayt_servicePath",scayt_customerid:"scayt_customerId"},alarmCompatibilityMessage:function(){5>this.warningCounter&&(console.warn("Note: You are using latest version of SCAYT plug-in. It is recommended to upgrade WebSpellChecker.net application to version v4.8.3.Contact us by e-mail at support@webspellchecker.net."), -this.warningCounter+=1)},reloadMarkup:function(a){var c;a&&(c=a.getScaytLangList(),a.reloadMarkup?a.reloadMarkup():(this.alarmCompatibilityMessage(),c&&c.ltr&&c.rtl&&a.fire("startSpellCheck, startGrammarCheck")))},replaceOldOptionsNames:function(a){for(var c in a)c in this.backCompatibilityMap&&(a[this.backCompatibilityMap[c]]=a[c],delete a[c])},createScayt:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.loadScaytLibrary(a,function(a){function e(a){return new SCAYT.CKSCAYT(a,function(){},function(){})} -var f=a.window&&a.window.getFrame()||a.editable();if(f){f={lang:a.config.scayt_sLang,container:f.$,customDictionary:a.config.scayt_customDictionaryIds,userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,debug:a.config.scayt_debug,data_attribute_name:c.options.data_attribute_name,misspelled_word_class:c.options.misspelled_word_class,problem_grammar_data_attribute:c.options.problem_grammar_data_attribute,problem_grammar_class:c.options.problem_grammar_class, -"options-to-restore":a.config.scayt_disableOptionsStorage,focused:a.editable().hasFocus,ignoreElementsRegex:a.config.scayt_elementsToIgnore,minWordLength:a.config.scayt_minWordLength,multiLanguageMode:a.config.scayt_multiLanguageMode,multiLanguageStyles:a.config.scayt_multiLanguageStyles,graytAutoStartup:d.state.grayt[a.name],charsToObserve:d.charsToObserve};a.config.scayt_serviceProtocol&&(f.service_protocol=a.config.scayt_serviceProtocol);a.config.scayt_serviceHost&&(f.service_host=a.config.scayt_serviceHost); -a.config.scayt_servicePort&&(f.service_port=a.config.scayt_servicePort);a.config.scayt_servicePath&&(f.service_path=a.config.scayt_servicePath);"boolean"===typeof a.config.scayt_ignoreAllCapsWords&&(f["ignore-all-caps-words"]=a.config.scayt_ignoreAllCapsWords);"boolean"===typeof a.config.scayt_ignoreDomainNames&&(f["ignore-domain-names"]=a.config.scayt_ignoreDomainNames);"boolean"===typeof a.config.scayt_ignoreWordsWithMixedCases&&(f["ignore-words-with-mixed-cases"]=a.config.scayt_ignoreWordsWithMixedCases); -"boolean"===typeof a.config.scayt_ignoreWordsWithNumbers&&(f["ignore-words-with-numbers"]=a.config.scayt_ignoreWordsWithNumbers);var g;try{g=e(f)}catch(h){c.alarmCompatibilityMessage(),delete f.charsToObserve,g=e(f)}g.subscribe("suggestionListSend",function(a){for(var b={},d=[],c=0;cthis.warningCounter&&(console.warn("You are using the latest version of SCAYT plugin for CKEditor with the old application version. In order to have access to the newest features, it is recommended to upgrade the application version to latest one as well. Contact us for more details at support@webspellchecker.net."), +this.warningCounter+=1)},isNewUdSupported:function(a){return a.getUserDictionary?!0:!1},reloadMarkup:function(a){var c;a&&(c=a.getScaytLangList(),a.reloadMarkup?a.reloadMarkup():(this.alarmCompatibilityMessage(),c&&c.ltr&&c.rtl&&a.fire("startSpellCheck, startGrammarCheck")))},replaceOldOptionsNames:function(a){for(var c in a)c in this.backCompatibilityMap&&(a[this.backCompatibilityMap[c]]=a[c],delete a[c])},createScayt:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.loadScaytLibrary(a,function(a){function e(a){return new SCAYT.CKSCAYT(a, +function(){},function(){})}var f=a.window&&a.window.getFrame()||a.editable();if(f){f={lang:a.config.scayt_sLang,container:f.$,customDictionary:a.config.scayt_customDictionaryIds,userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,customPunctuation:a.config.scayt_customPunctuation,debug:a.config.scayt_debug,data_attribute_name:c.options.data_attribute_name,misspelled_word_class:c.options.misspelled_word_class,problem_grammar_data_attribute:c.options.problem_grammar_data_attribute, +problem_grammar_class:c.options.problem_grammar_class,"options-to-restore":a.config.scayt_disableOptionsStorage,focused:a.editable().hasFocus,ignoreElementsRegex:a.config.scayt_elementsToIgnore,ignoreGraytElementsRegex:a.config.grayt_elementsToIgnore,minWordLength:a.config.scayt_minWordLength,multiLanguageMode:a.config.scayt_multiLanguageMode,multiLanguageStyles:a.config.scayt_multiLanguageStyles,graytAutoStartup:d.state.grayt[a.name],charsToObserve:d.charsToObserve};a.config.scayt_serviceProtocol&& +(f.service_protocol=a.config.scayt_serviceProtocol);a.config.scayt_serviceHost&&(f.service_host=a.config.scayt_serviceHost);a.config.scayt_servicePort&&(f.service_port=a.config.scayt_servicePort);a.config.scayt_servicePath&&(f.service_path=a.config.scayt_servicePath);"boolean"===typeof a.config.scayt_ignoreAllCapsWords&&(f["ignore-all-caps-words"]=a.config.scayt_ignoreAllCapsWords);"boolean"===typeof a.config.scayt_ignoreDomainNames&&(f["ignore-domain-names"]=a.config.scayt_ignoreDomainNames);"boolean"=== +typeof a.config.scayt_ignoreWordsWithMixedCases&&(f["ignore-words-with-mixed-cases"]=a.config.scayt_ignoreWordsWithMixedCases);"boolean"===typeof a.config.scayt_ignoreWordsWithNumbers&&(f["ignore-words-with-numbers"]=a.config.scayt_ignoreWordsWithNumbers);var g;try{g=e(f)}catch(h){c.alarmCompatibilityMessage(),delete f.charsToObserve,g=e(f)}g.subscribe("suggestionListSend",function(a){for(var b={},d=[],c=0;c(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}be)&&(d=a,e=b)}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(b){return CKEDITOR.tools.extend(b||{},{contextSensitive:1,refresh:function(b,a){this.setState(a.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var c=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab? "table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(b){b.styles&&(b.styles.border&&b.styles.border.match(/solid/)&&(b.attributes.border=1),"collapse"==b.styles["border-collapse"]&&(b.attributes.cellspacing=0))}}]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",e({exec:function(b){var a= b.elementPath().contains("table",1);if(a){var d=a.getParent(),c=b.editable();1!=d.getChildCount()||d.is("td","th")||d.equals(c)||(a=d);b=b.createRange();b.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);a.remove();b.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:c.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:c.menu, -command:"tableProperties",group:"table",order:5},tabledelete:{label:c.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function t(e){function d(a){0b)b=a}return b}function m(e,d){for(var b=t(e),c=b[0].getAscendant("table"),a=v(b,1),b=v(b),a=d?a:b,f=CKEDITOR.tools.buildTableMap(c),c=[],b=[],g=f.length,h=0;hc.length)||(a=e.getCommonAncestor())&& -a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))return!1;var f;e=c[0];a=e.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(a),h=g.length,k=g[0].length,l=e.getParent().$.rowIndex,n=z(g,l,e);if(d){var r;try{var q=parseInt(e.getAttribute("rowspan"),10)||1;f=parseInt(e.getAttribute("colspan"),10)||1;r=g["up"==d?l-q:"down"==d?l+q:l]["left"==d?n-f:"right"==d?n+f:n]}catch(D){return!1}if(!r||e.$==r)return!1;c["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(r))}d=e.getDocument();var p=l, -q=r=0,u=!b&&new CKEDITOR.dom.documentFragment(d),w=0;for(d=0;d=k?e.removeAttribute("rowSpan"):e.$.rowSpan=r;r>=h?e.removeAttribute("colSpan"):e.$.colSpan=q;b=new CKEDITOR.dom.nodeList(a.$.rows);c=b.count();for(d=c-1;0<=d;d--)a=b.getItem(d),a.$.cells.length||(a.remove(),c++);return e}function A(e,d){var b=t(e);if(1h){c.insertBefore(new CKEDITOR.dom.element(n));break}else n=null;n||a.append(c)}else for(k=l=1,a=c.clone(),a.insertAfter(c),a.append(c=b.clone()),n=z(f,g),h=0;hb.indexOf("px")&&(b=b in d&&"none"!=a.getComputedStyle("border-style")?d[b]:0);return parseInt(b,10)}function A(a){var h=[],b=-1,d="rtl"==a.getComputedStyle("direction"),f;f=a.$.rows;for(var m=0,g,c,e,k=0,t=f.length;km&&(m=g,c=e);f=c;m=new CKEDITOR.dom.element(a.$.tBodies[0]); -g=m.getDocumentPosition();c=0;for(e=f.cells.length;cg.x+g.width))return g=null,k=n=0,c.removeListener("mouseup",f),e.removeListener("mousedown",d),e.removeListener("mousemove",m),c.getBody().setStyle("cursor", -"auto"),x?e.remove():e.hide(),0;a-=Math.round(e.$.offsetWidth/2);if(k){if(a==C||a==D)return 1;a=Math.max(a,C);a=Math.min(a,D);n=a-t}e.setStyle("left",l(a));return 1}}function v(a){var h=a.data.getTarget();if("mouseout"==a.name){if(!h.is("table"))return;for(var b=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);b&&b.$&&!b.equals(h)&&!b.is("body");)b=b.getParent();if(!b||b.equals(h))return}h.getAscendant("table",1).removeCustomData("_cke_table_pillars");a.removeListener()}var l= -CKEDITOR.tools.cssLength,x=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(a){a.on("contentDom",function(){var h,b=a.editable();b.attachListener(b.isInline()?b:a.document,"mousemove",function(d){d=d.data;var f=d.getTarget();if(f.type==CKEDITOR.NODE_ELEMENT){var b=d.getPageOffset().x;if(h&&h.move(b))z(d);else if(f.is("table")||f.getAscendant("tbody",1))if(f=f.getAscendant("table",1),a.editable().contains(f)){(d= -f.getCustomData("_cke_table_pillars"))||(f.setCustomData("_cke_table_pillars",d=A(f)),f.on("mouseout",v),f.on("mousedown",v));a:{for(var f=0,g=d.length;f=c.x&&b<=c.x+c.width){b=c;break a}}b=null}b&&(!h&&(h=new E(a)),h.attachTo(b))}}})})}})})();(function(){function D(a){function d(){for(var b=g(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||v(a),f=0;fa.order?-1:0>b.order?1:b.orderb)b=f}return b}function p(d,e){for(var b=G(d)?d:q(d),c=b[0].getAscendant("table"),f=w(b,1),b= +w(b),a=e?f:b,g=CKEDITOR.tools.buildTableMap(c),c=[],f=[],b=g.length,h=0;hc.length)||(f=d.getCommonAncestor())&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("table"))return!1;var a;d=c[0];f=d.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(f),h=g.length,k=g[0].length,l=d.getParent().$.rowIndex,r=y(g,l,d);if(e){var n;try{var C= +parseInt(d.getAttribute("rowspan"),10)||1;a=parseInt(d.getAttribute("colspan"),10)||1;n=g["up"==e?l-C:"down"==e?l+C:l]["left"==e?r-a:"right"==e?r+a:r]}catch(x){return!1}if(!n||d.$==n)return!1;c["up"==e||"left"==e?"unshift":"push"](new CKEDITOR.dom.element(n))}e=d.getDocument();var E=l,C=n=0,u=!b&&new CKEDITOR.dom.documentFragment(e),t=0;for(e=0;e=k?d.removeAttribute("rowSpan"):d.$.rowSpan=n;n>=h?d.removeAttribute("colSpan"):d.$.colSpan=C;b=new CKEDITOR.dom.nodeList(f.$.rows);c=b.count();for(e=c-1;0<=e;e--)f=b.getItem(e), +f.$.cells.length||(f.remove(),c++);return d}function A(d,e){var b=q(d);if(1h){c.insertBefore(new CKEDITOR.dom.element(r));break}else r=null;r||f.append(c)}else for(k=l=1, +f=c.clone(),f.insertAfter(c),f.append(c=b.clone()),r=y(a,g),h=0;hB);A++){m[p+A]||(m[p+A]=[]);for(var F=0;F=w)break}}return m};(function(){function x(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function q(a,g){var b=a.getComputedStyle("border-"+g+"-width"),k={thin:"0px",medium:"1px",thick:"2px"};0>b.indexOf("px")&&(b=b in k&&"none"!=a.getComputedStyle("border-style")?k[b]:0);return parseInt(b,10)}function z(a){var g=[],b=-1,k="rtl"==a.getComputedStyle("direction"),d;d=a.$.rows;for(var l=0,e,f,c,h=0,t=d.length;hl&&(l=e,f=c);d=f;e=new CKEDITOR.dom.element(a.$.tBodies[0]); +l=e.getDocumentPosition();e=e.$.offsetHeight;a.$.tHead&&(f=new CKEDITOR.dom.element(a.$.tHead),l=f.getDocumentPosition(),e+=f.$.offsetHeight);a.$.tFoot&&(e+=a.$.tFoot.offsetHeight);if(d)for(f=0,c=d.cells.length;fe.x+e.width))return e=null,h=n=0,f.removeListener("mouseup",d),c.removeListener("mousedown",k),c.removeListener("mousemove",l), +f.getBody().setStyle("cursor","auto"),w?c.remove():c.hide(),0;a-=Math.round(c.$.offsetWidth/2);if(h){if(a==C||a==D)return 1;a=Math.max(a,C);a=Math.min(a,D);n=a-t}c.setStyle("left",m(a));return 1}}function u(a){var g=a.data.getTarget();if("mouseout"==a.name){if(!g.is("table"))return;for(var b=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);b&&b.$&&!b.equals(g)&&!b.is("body");)b=b.getParent();if(!b||b.equals(g))return}g.getAscendant("table",1).removeCustomData("_cke_table_pillars"); +a.removeListener()}var m=CKEDITOR.tools.cssLength,w=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(a){a.on("contentDom",function(){var g,b=a.editable();b.attachListener(b.isInline()?b:a.document,"mousemove",function(b){b=b.data;var d=b.getTarget();if(d.type==CKEDITOR.NODE_ELEMENT){var l=b.getPageOffset().x;if(g&&g.move(l))y(b);else if(d.is("table")||d.getAscendant({thead:1,tbody:1,tfoot:1},1))if(d=d.getAscendant("table", +1),a.editable().contains(d)){(b=d.getCustomData("_cke_table_pillars"))||(d.setCustomData("_cke_table_pillars",b=z(d)),d.on("mouseout",u),d.on("mousedown",u));a:{for(var d=0,e=b.length;d=f.x&&l<=f.x+f.width){l=f;break a}}l=null}l&&(!g&&(g=new F(a)),g.attachTo(l))}}})})}})})();(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],n={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:"wysiwyg"==a.mode;d.onChange()}var d=a.undoManager=new e(a),l=d.editingHandler=new k(d),f=a.addCommand("undo",{exec:function(){d.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),h=a.addCommand("redo",{exec:function(){d.redo()&& (a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[g[0],"undo"],[g[1],"redo"],[g[2],"redo"]]);d.onChange=function(){f.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);h.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){d.save(a.data&&a.data.contentOnly)});a.on("contentDom",l.attachListeners,l);a.on("instanceReady",function(){a.fire("saveSnapshot")}); a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&d.save(!0)});a.on("mode",c);a.on("readOnly",c);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){d.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){d.currentImage&&d.update()});a.on("lockSnapshot",function(a){a=a.data;d.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot", d.unlock,d)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),d=this.strokesRecorded[c]+1;b=b||d>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(d=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[c]= @@ -984,26 +1012,7 @@ this.undoManager.keyGroupChanged(b))if(a.strokesRecorded[0]||a.strokesRecorded[1 a=a.data.getKey();var c=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);if(!(e.ieFunctionalKeysBug(a)&&this.lastKeydownImage&&this.lastKeydownImage.equalsContent(new f(b.editor,!0))))if(0b.version||b.quirks))};"undefined"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar, -click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}});(function(){function m(a){function f(a){var b=!1;g.attachListener(g,"keydown",function(){var d=c.getBody().getElementsByTag(a);if(!b){for(var e=0;ethis.$.offsetHeight){var d=b.createRange();d[33==c?"moveToElementEditStart":"moveToElementEditEnd"](this);d.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(c,"blur",function(){try{c.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(c,"touchend",function(){a.focus()});d=b.document.getElementsByTag("title").getItem(0);d.data("cke-title",d.getText());CKEDITOR.env.ie&&(b.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){"unloaded"== -this.status&&(this.status="ready");b.fire("contentDom");this._.isPendingFocus&&(b.focus(),this._.isPendingFocus=!1);setTimeout(function(){b.fire("dataReady")},0)},0,this)}function n(a){function f(){var c;a.editable().attachListener(a,"selectionChange",function(){var d=a.getSelection().getSelectedElement();d&&(c&&(c.detachEvent("onresizestart",b),c=null),d.$.attachEvent("onresizestart",b),c=d.$)})}function b(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var c=a.document.$;c.execCommand("enableObjectResizing", -!1,!a.config.disableObjectResizing);c.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(d){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&f(a)}function p(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var f=[],b;for(b in CKEDITOR.dtd.$removeEmpty)f.push("html.CSS1Compat "+b+"[contenteditable\x3dfalse]");a.push(f.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&& -(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}var l;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(f){function b(b){b&&b.removeListener(); -a.editable(new l(a,d.$.contentWindow.document.body));a.setData(a.getData(1),f)}var c="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",c=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(c)+"}())":"",d=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+c+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');d.setStyles({width:"100%",height:"100%"});d.addClass("cke_wysiwyg_frame").addClass("cke_reset"); -c=a.ui.space("contents");c.append(d);var e=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(e)d.on("load",b);var g=a.title,h=a.fire("ariaEditorHelpLabel",{}).label;g&&(CKEDITOR.env.ie&&h&&(g+=", "+h),d.setAttribute("title",g));if(h){var g=CKEDITOR.tools.getNextId(),k=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+h+"\x3c/span\x3e");c.append(k,1);d.setAttribute("aria-describedby",g)}a.on("beforeModeUnload",function(a){a.removeListener();k&&k.remove()}); -d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!e&&b();a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var f=this.config,b=f.contentsCss;CKEDITOR.tools.isArray(b)||(f.contentsCss=b?[b]:[]);f.contentsCss.push(a)};l=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(m,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")}, -base:CKEDITOR.editable,proto:{setData:function(a,f){var b=this.editor;if(f)this.setHtml(a),this.fixInitialSelection(),b.fire("dataReady");else{this._.isLoadingData=!0;b._.dataStore={id:1};var c=b.config,d=c.fullPage,e=c.docType,g=CKEDITOR.tools.buildStyleHtml(p()).replace(/