mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-09-05 05:35:08 +00:00
Merge branch 'Alinto:master' into master
This commit is contained in:
@@ -9,3 +9,19 @@
|
||||
"ACLs_title" = "Users folders ACLs management";
|
||||
/* Modules descriptions */
|
||||
"ACLs_description" = "<p>The Access Control Lists administration module allows to change the ACLs of each user's Calendars and Address books.</p><p>To modify the ACLs of a user's folder, type the name of the user in the search field at the top of the window and double-click on the desired folder.</p>";
|
||||
"Name or Email" = "Navn eller e-mail";
|
||||
"ACLs saved" = "ACLs gemt";
|
||||
/* Rights module: initial search message */
|
||||
"Start a search to edit the rights" = "Start en søgning for at redigere rettighederne";
|
||||
/* Rights module: Empty search result */
|
||||
"No matching user" = "Ingen matchende bruger";
|
||||
/* Rights module: no selection */
|
||||
"No resource selected" = "Ingen ressource valgt";
|
||||
"Add User" = "Tilføj bruger";
|
||||
"Subscribe User" = "Tilmeld bruger";
|
||||
"Rights" = "Rettigheder";
|
||||
"Search Users" = "Søg brugere";
|
||||
"users found" = "Brugere fundet";
|
||||
"No resource" = "Ingen ressource";
|
||||
"Any Authenticated User" = "Enhver godkendt bruger";
|
||||
"Public Access" = "Offentlig adgang";
|
||||
|
||||
@@ -9,3 +9,19 @@
|
||||
"ACLs_title" = "Håndtering av adgangsrettigheter for brukermapper";
|
||||
/* Modules descriptions */
|
||||
"ACLs_description" = "<p>Administrasjonsmodulen for adgangsrettigheter muliggjør endring av adgangsrettigheter for brukerens kalendre og adressebøker.</p><p>For å endre adgangsrettigheter for en bruker sin mappe, skriv brukernavnet i søkefeltet i toppen vinduet og dobbelklikk på den ønskede mappen.</p>";
|
||||
"Name or Email" = "Navn eller E-post";
|
||||
"ACLs saved" = "Adgangsrettigheter lagret ";
|
||||
/* Rights module: initial search message */
|
||||
"Start a search to edit the rights" = "Start et søk for å redigere rettighetene";
|
||||
/* Rights module: Empty search result */
|
||||
"No matching user" = "Ingen samsvarende bruker";
|
||||
/* Rights module: no selection */
|
||||
"No resource selected" = "Ingen ressurs er valgt";
|
||||
"Add User" = "Legg til bruker";
|
||||
"Subscribe User" = "Abonner bruker";
|
||||
"Rights" = "Rettigheter";
|
||||
"Search Users" = "Søk etter brukere";
|
||||
"users found" = "Brukere funnet ";
|
||||
"No resource" = "Ingen ressurs";
|
||||
"Any Authenticated User" = "Enhver autentisert bruker";
|
||||
"Public Access" = "Offentlig tilgang";
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
"Edit User Rights" = "Redigér brugerrettigheder";
|
||||
"Home" = "Hjem";
|
||||
"Calendar" = "Kalender";
|
||||
"Address Book" = "Adressebog";
|
||||
"Address Book" = "Adressebog";
|
||||
"Mail" = "Mail";
|
||||
"Preferences" = "Indstillinger";
|
||||
"Administration" = "Administration";
|
||||
"Disconnect" = "Afbryd";
|
||||
"Toggle Menu" = "Skift menu";
|
||||
"Right Administration" = "Rettighedsadministration";
|
||||
"Log Console (dev.)" = "Log konsol (dev.)";
|
||||
"User" = "Bruger";
|
||||
@@ -30,7 +31,7 @@
|
||||
"Sorry, the user rights can not be configured for that object." = "Beklager, brugerrettighederne kan ikke konfigureres for dette emne";
|
||||
"Any user with an account on this system will be able to access your mailbox \"%{0}\". Are you certain you trust them all?"
|
||||
= "Alle brugere med en konto på dette system vil få adgang til din mail \"%{0}\". Er du sikker på at du har tillid til dem alle?";
|
||||
"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?"
|
||||
"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?"
|
||||
= "Alle brugere med en konto på dette system vil få adgang til din kalender \"%{0}\". Er du sikker på at du har tillid til dem alle?";
|
||||
"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?"
|
||||
= "Potentielt alle på internettet vil være i stand til at få adgang til din kalender \"%{0}\", selv om de ikke har en konto på dette system. Er disse oplysninger egnet til det offentlige internet?";
|
||||
@@ -40,24 +41,28 @@
|
||||
= "Potentielt alle på internettet vil være i stand til at få adgang til din adressebog \"%{0}\", selv om de ikke har en konto på dette system. Er disse oplysninger egnet til det offentlige internet?";
|
||||
"Give Access" = "Giv adgang";
|
||||
"Keep Private" = "Forbliv privat";
|
||||
"Expand" = "Udvid";
|
||||
"Reduce" = "Reducer";
|
||||
|
||||
/* generic.js */
|
||||
"Unable to subscribe to that folder!"
|
||||
= "Det er ikke muligt at abonnere på denne mappe!";
|
||||
= "Det er ikke muligt at abonnere på denne mappe!";
|
||||
"You cannot subscribe to a folder that you own!"
|
||||
= "Du kan ikke abonnere på en mappe, som du ejer!";
|
||||
= "Du kan ikke abonnere på en mappe, som du ejer!";
|
||||
"Unable to unsubscribe from that folder!"
|
||||
= "Det er ikke muligt afmelde abonnementet på denne mappe!";
|
||||
= "Det er ikke muligt afmelde abonnementet på denne mappe!";
|
||||
"You cannot unsubscribe from a folder that you own!"
|
||||
= "Du kan ikke ophæve abonnementet på en mappe, som du ejer!";
|
||||
= "Du kan ikke ophæve abonnementet på en mappe, som du ejer!";
|
||||
"Unable to rename that folder!" = "Det er ikke muligt ikke omdøbe denne mappe!";
|
||||
"You have already subscribed to that folder!"
|
||||
= "Du abonnerer allerede på denne mappe!";
|
||||
= "Du abonnerer allerede på denne mappe!";
|
||||
"The user rights cannot be edited for this object!"
|
||||
= "Brugerrettighederne kan ikke redigeres for dette emne!";
|
||||
"A folder by that name already exists." = "En mappe med det navn findes allerede.";
|
||||
"You cannot create a list in a shared address book."
|
||||
"You cannot create a list in a shared address book."
|
||||
= "Du kan ikke oprette en liste i en delt adressebog.";
|
||||
"Warning" = "Advarsel";
|
||||
"Can't contact server" = "Der opstod en fejl under kontakt til serveren. Prøv igen senere.";
|
||||
"You are not allowed to access this module or this system. Please contact your system administrator."
|
||||
= "Du har ikke adgang til dette modul eller dette system. Kontakt venligst din systemadministrator.";
|
||||
"You don't have the required privileges to perform the operation."
|
||||
@@ -66,6 +71,26 @@
|
||||
"delegate is organizer" = "Den inviterede er arrangør. Angiv en anden.";
|
||||
"delegate is a participant" = "Den inviterede er allerede en deltager.";
|
||||
"delegate is a group" = "Den angivne adresse svarer til en gruppe. Du kan kun invitere en enkelt person.";
|
||||
|
||||
/* common buttons */
|
||||
"OK" = "OK";
|
||||
"Cancel" = "Annullér";
|
||||
"Yes" = "Ja";
|
||||
"No" = "Nej";
|
||||
|
||||
/* generic messages */
|
||||
"Error" = "Fejlmeddelelse";
|
||||
"Success" = "Succes";
|
||||
|
||||
/* confirmation dialog box */
|
||||
"Confirmation" = "Bekræftelse";
|
||||
|
||||
/* alarms */
|
||||
"Reminder" = "Påmindelse";
|
||||
"Start" = "Start";
|
||||
"Due Date" = "Forfaldsdato";
|
||||
"Location" = "Sted";
|
||||
"Snooze" = "Udsæt";
|
||||
"Snooze for " = "Udsæt i ";
|
||||
"5 minutes" = "5 minutter";
|
||||
"10 minutes" = "10 minutter";
|
||||
@@ -73,22 +98,16 @@
|
||||
"30 minutes" = "30 minutter";
|
||||
"45 minutes" = "45 minutter";
|
||||
"1 hour" = "1 time";
|
||||
/* common buttons */
|
||||
"OK" = "OK";
|
||||
"Cancel" = "Annullér";
|
||||
"Yes" = "Ja";
|
||||
"No" = "Nej";
|
||||
/* alarms */
|
||||
"Reminder" = "Påmindelse";
|
||||
"Start" = "Start";
|
||||
"Due Date" = "Forfaldsdato";
|
||||
"Location" = "Sted";
|
||||
/* Mail labels */
|
||||
"1 day" = "1 dag";
|
||||
|
||||
/* mail labels */
|
||||
"Important" = "Vigtigt";
|
||||
"Work" = "Arbejde";
|
||||
"Personal" = "Privat";
|
||||
"To Do" = "To Do";
|
||||
"Later" = "Senere";
|
||||
"Forwarded" = "Videresendt";
|
||||
"Return Receipt Sent" = "Modtagelseskvittering sendt";
|
||||
"a2_Sunday" = "Sø";
|
||||
"a2_Monday" = "Ma";
|
||||
"a2_Tuesday" = "Ti";
|
||||
@@ -96,3 +115,118 @@
|
||||
"a2_Thursday" = "To";
|
||||
"a2_Friday" = "Fr";
|
||||
"a2_Saturday" = "Lø";
|
||||
"Access Rights" = "Adgangsrettigheder";
|
||||
"Add User" = "Tilføj bruger";
|
||||
"Loading" = "Indlæser";
|
||||
"No such user." = "Bruger findes ikke.";
|
||||
"You cannot (un)subscribe to a folder that you own!" = "Du kan ikke ophæve abonnementet på en mappe, som du ejer!";
|
||||
|
||||
/* SMIME Certificate field */
|
||||
"S/MIME Certificate" = "S/MIME certifikat";
|
||||
"Subject Name" = "Emnenavn";
|
||||
"Issuer" = "Udsteder";
|
||||
"streetAddress" = "Gade";
|
||||
"stateOrProvinceName" = "Stat eller provins";
|
||||
"localityName" = "Lokalitet";
|
||||
"countryName" = "Land";
|
||||
"organizationName" = "Firma";
|
||||
"organizationalUnitName" = "Organisatorisk enhed";
|
||||
"commonName" = "Almindeligt navn";
|
||||
"surname" = "Efternavn";
|
||||
"givenName" = "Givet navn";
|
||||
"emailAddress" = "E-mailadresse";
|
||||
|
||||
|
||||
/* Authentication username */
|
||||
"Username" = "Brugernavn";
|
||||
|
||||
/* Authentication password */
|
||||
"Password" = "Adgangskode";
|
||||
|
||||
/* Authentication failed */
|
||||
"Wrong username or password." = "Forkert brugernavn eller adgangskode.";
|
||||
|
||||
/* Error message displayed bellow search field when the search string has less than the required number of characters */
|
||||
"Enter at least %{minimumSearchLength} characters" = "Indtast mindst %{minimumSearchLength} tegn";
|
||||
|
||||
/* Error message displayed when a file upload exceeds WOMaxUploadSize */
|
||||
"File size upload limit reached" = "Grænsen for upload af filstørrelse er nået";
|
||||
|
||||
/* Generic server error */
|
||||
"An error occured, please try again." = "Der opstod en fejl, prøv venligst igen.";
|
||||
|
||||
/* Open datepicker */
|
||||
"Open Calendar" = "Åben kalender";
|
||||
|
||||
/* Toggle visibility (ex: mail account in left navigation menu) */
|
||||
"Toggle visibility" = "Skift synlighed";
|
||||
|
||||
"Keyboard Shortcuts" = "Tastaturgenveje";
|
||||
|
||||
/* Aria label for avatar button to select and unselect an item */
|
||||
"Toggle item" = "Skift element";
|
||||
|
||||
/* Toggle multiple items at the same time (hotkeys cheatsheet) */
|
||||
"Toggle range of items" = "Skift udvalg af elementer";
|
||||
|
||||
/* Question mark shows list of hotkeys */
|
||||
"Show or hide this help" = "Vis eller skjul denne hjælp";
|
||||
|
||||
/* Space key */
|
||||
"key_space" = "Mellemrum";
|
||||
|
||||
/* Delete key */
|
||||
"key_delete" = "Slet";
|
||||
|
||||
/* 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" = "⌫";
|
||||
|
||||
/* Hotkey to start a search */
|
||||
"hotkey_search" = "s";
|
||||
|
||||
/* Hotkey description to select next list item */
|
||||
"View next item" = "Se næste element";
|
||||
|
||||
/* Hotkey description to select previous list item */
|
||||
"View previous item" = "Vis forrige element";
|
||||
|
||||
/* Hotkey description to add next list item to selection */
|
||||
"Add next item to selection" = "Tilføj næste element til valget";
|
||||
|
||||
/* Hotkey description to add previous list item to selection */
|
||||
"Add previous item to selection" = "Tilføj forrige element til valget";
|
||||
|
||||
/* Hotkey description to move backward in current view */
|
||||
"Move backward" = "Gå tilbage";
|
||||
|
||||
/* Hotkey description to move forward in current view */
|
||||
"Move forward" = "Gå frem";
|
||||
|
||||
/* Password Recovery */
|
||||
"passwordRecovery_Disabled" = "Deaktiver";
|
||||
"passwordRecovery_SecretQuestion" = "Hemmeligt spørgsmål";
|
||||
"passwordRecovery_SecretQuestion1" = "Hvad er navnet på dit første kæledyr?";
|
||||
"passwordRecovery_SecretQuestion2" = "Hvad var din første bil?";
|
||||
"passwordRecovery_SecretQuestion3" = "Hvad er din yndlings film?";
|
||||
"passwordRecovery_SecondaryEmail" = "Sekundær E-mail";
|
||||
|
||||
@@ -222,3 +222,11 @@
|
||||
|
||||
/* Hotkey description to move forward in current view */
|
||||
"Move forward" = "Move forward";
|
||||
|
||||
/* Password Recovery */
|
||||
"passwordRecovery_Disabled" = "Disabled";
|
||||
"passwordRecovery_SecretQuestion" = "Secret question";
|
||||
"passwordRecovery_SecretQuestion1" = "What is the name of your first pet ?";
|
||||
"passwordRecovery_SecretQuestion2" = "What was your first car ?";
|
||||
"passwordRecovery_SecretQuestion3" = "What is your favorite movie ?";
|
||||
"passwordRecovery_SecondaryEmail" = "Secondary E-mail";
|
||||
|
||||
@@ -222,3 +222,11 @@
|
||||
|
||||
/* Hotkey description to move forward in current view */
|
||||
"Move forward" = "Reculer";
|
||||
|
||||
/* Password Recovery */
|
||||
"passwordRecovery_Disabled" = "Désactivée";
|
||||
"passwordRecovery_SecretQuestion" = "Question secrète";
|
||||
"passwordRecovery_SecretQuestion1" = "Quel est le nom de votre premier animal de compagnie ?";
|
||||
"passwordRecovery_SecretQuestion2" = "Quelle était votre première voiture ?";
|
||||
"passwordRecovery_SecretQuestion3" = "Quel est votre film préféré ?";
|
||||
"passwordRecovery_SecondaryEmail" = "E-mail secondaire";
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"Edit User Rights" = "Endre brukerrettigheter";
|
||||
"Home" = "Hjem";
|
||||
"Calendar" = "Kalender";
|
||||
"Address Book" = "Adressebok";
|
||||
"Address Book" = "Adressebok";
|
||||
"Mail" = "E-post";
|
||||
"Preferences" = "Innstillinger";
|
||||
"Administration" = "Administrasjon";
|
||||
@@ -31,7 +31,7 @@
|
||||
"Sorry, the user rights can not be configured for that object." = "Beklager, brukerrettighetene kan ikke konfigureres for det objektet.";
|
||||
"Any user with an account on this system will be able to access your mailbox \"%{0}\". Are you certain you trust them all?"
|
||||
= "Hvilken som heldst bruker med konto på dette systemet vil kunne se mailboksen \"%{0}\". Er du sikker på at du stoler på alle sammen?";
|
||||
"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?"
|
||||
"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?"
|
||||
= "Hvilken som heldst bruker med konto på systemet vil kunne se kalenderen \"%{0}\". Er du sikker på at du stoler på alle sammen?";
|
||||
"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?"
|
||||
= "Potensielt kan hvem som helst på Internett se kalenderen \"%{0}\", selv om de ikke har konto på dette systemet. Er denne informasjonen passende for det åpne Internett?";
|
||||
@@ -41,22 +41,25 @@
|
||||
= "Potensielt kan hvem som helst på Internett vil kunne se adresseboken \"%{0}\", selv om de ikke har konto på systemet. Er denne informasjonen passende for det åpne Internett?";
|
||||
"Give Access" = "Gi tilgang";
|
||||
"Keep Private" = "Behold privat";
|
||||
"Expand" = "Utvid";
|
||||
"Reduce" = "Reduser";
|
||||
|
||||
/* generic.js */
|
||||
"Unable to subscribe to that folder!"
|
||||
= "Kan ikke abonnere på den mappen!";
|
||||
= "Kan ikke abonnere på den mappen!";
|
||||
"You cannot subscribe to a folder that you own!"
|
||||
= "Du kan ikke abonnere på en mappe som du selv eier!";
|
||||
= "Du kan ikke abonnere på en mappe som du selv eier!";
|
||||
"Unable to unsubscribe from that folder!"
|
||||
= "Du kan ikke avslutte abonnement på den mappen!";
|
||||
= "Du kan ikke avslutte abonnement på den mappen!";
|
||||
"You cannot unsubscribe from a folder that you own!"
|
||||
= "Du kan ikke avslutte abonnement på en mappe som du selv eier!";
|
||||
= "Du kan ikke avslutte abonnement på en mappe som du selv eier!";
|
||||
"Unable to rename that folder!" = "Kan ikke bytte navn på mappen!";
|
||||
"You have already subscribed to that folder!"
|
||||
= "Du abonnerer allerede på mappen!";
|
||||
= "Du abonnerer allerede på mappen!";
|
||||
"The user rights cannot be edited for this object!"
|
||||
= "Brukerrettighetene kan ikke endres for dette objektet!";
|
||||
"A folder by that name already exists." = "En mappe med det navnet finnes fra før.";
|
||||
"You cannot create a list in a shared address book."
|
||||
"You cannot create a list in a shared address book."
|
||||
= "Du kan ikke opprette en liste i en delt adressebok.";
|
||||
"Warning" = "Advarsel";
|
||||
"Can't contact server" = "Det oppstod en feil ved opprettelse av kontakt med serveren. Vennligst prøv igjen senere.";
|
||||
@@ -68,6 +71,26 @@
|
||||
"delegate is organizer" = "Delegaten er arrangør. Vennligst angi en annen delegat.";
|
||||
"delegate is a participant" = "Delegaten er allerede en deltaker.";
|
||||
"delegate is a group" = "Den angitte adressen er en gruppe. Du kan kun delegere til en unik person.";
|
||||
|
||||
/* common buttons */
|
||||
"OK" = "OK";
|
||||
"Cancel" = "Avbryt";
|
||||
"Yes" = "Ja";
|
||||
"No" = "Nei";
|
||||
|
||||
/* generic messages */
|
||||
"Error" = "Feil";
|
||||
"Success" = "Suksess";
|
||||
|
||||
/* confirmation dialog box */
|
||||
"Confirmation" = "Bekreftelse";
|
||||
|
||||
/* alarms */
|
||||
"Reminder" = "Påminnelse";
|
||||
"Start" = "Start";
|
||||
"Due Date" = "Forfallsdato";
|
||||
"Location" = "Sted";
|
||||
"Snooze" = "Slumre";
|
||||
"Snooze for " = "Slumre i";
|
||||
"5 minutes" = "5 minutter";
|
||||
"10 minutes" = "10 minutter";
|
||||
@@ -76,22 +99,15 @@
|
||||
"45 minutes" = "45 minutter";
|
||||
"1 hour" = "1 time";
|
||||
"1 day" = "1 dag";
|
||||
/* common buttons */
|
||||
"OK" = "OK";
|
||||
"Cancel" = "Avbryt";
|
||||
"Yes" = "Ja";
|
||||
"No" = "Nei";
|
||||
/* alarms */
|
||||
"Reminder" = "Påminnelse";
|
||||
"Start" = "Start";
|
||||
"Due Date" = "Forfallsdato";
|
||||
"Location" = "Sted";
|
||||
|
||||
/* mail labels */
|
||||
"Important" = "Viktig";
|
||||
"Work" = "Arbeid";
|
||||
"Personal" = "Personlig";
|
||||
"To Do" = "Gjøremål";
|
||||
"Later" = "Senere";
|
||||
"Forwarded" = "Videresendt";
|
||||
"Return Receipt Sent" = "Returkvittering sendt";
|
||||
"a2_Sunday" = "Sø";
|
||||
"a2_Monday" = "Ma";
|
||||
"a2_Tuesday" = "Ti";
|
||||
@@ -105,5 +121,112 @@
|
||||
"No such user." = "Ingen slik bruker";
|
||||
"You cannot (un)subscribe to a folder that you own!" = "Du kan ikke (av)abonnere på en mappe du selv eier!";
|
||||
|
||||
/* Error message display bellow search field when the search string has less than the required number of characters */
|
||||
"Enter at least %{minimumSearchLength} characters" = "Enter at least %{minimumSearchLength} characters";
|
||||
/* SMIME Certificate field */
|
||||
"S/MIME Certificate" = "S/MIME Sertifikat";
|
||||
"Subject Name" = "Emnenavn";
|
||||
"Issuer" = "Utsteder";
|
||||
"streetAddress" = "Gate";
|
||||
"stateOrProvinceName" = "Stat eller provins";
|
||||
"localityName" = "Lokalitet";
|
||||
"countryName" = "Land";
|
||||
"organizationName" = "Organisasjon";
|
||||
"organizationalUnitName" = "Organisasjonsenhet";
|
||||
"commonName" = "Vanlig navn";
|
||||
"surname" = "Etternavn";
|
||||
"givenName" = "Fornavn";
|
||||
"emailAddress" = "E-postadresse";
|
||||
|
||||
|
||||
/* Authentication username */
|
||||
"Username" = "Brukernavn";
|
||||
|
||||
/* Authentication password */
|
||||
"Password" = "Passord";
|
||||
|
||||
/* Authentication failed */
|
||||
"Wrong username or password." = "Feil brukernavn eller passord";
|
||||
|
||||
/* Error message displayed bellow search field when the search string has less than the required number of characters */
|
||||
"Enter at least %{minimumSearchLength} characters" = "Skriv minst %{minimumSearchLength} tegn";
|
||||
|
||||
/* Error message displayed when a file upload exceeds WOMaxUploadSize */
|
||||
"File size upload limit reached" = "Opplastningsgrense for filstørrelse er oppnådd ";
|
||||
|
||||
/* Generic server error */
|
||||
"An error occured, please try again." = "En feil har oppstått, vennligst prøv igjen. ";
|
||||
|
||||
/* Open datepicker */
|
||||
"Open Calendar" = "Åpne kalender ";
|
||||
|
||||
/* Toggle visibility (ex: mail account in left navigation menu) */
|
||||
"Toggle visibility" = "Slå på synlighet";
|
||||
|
||||
"Keyboard Shortcuts" = "Tastatursnarveier";
|
||||
|
||||
/* Aria label for avatar button to select and unselect an item */
|
||||
"Toggle item" = "Slå på elementet";
|
||||
|
||||
/* Toggle multiple items at the same time (hotkeys cheatsheet) */
|
||||
"Toggle range of items" = "Bytt utvalg av elementer";
|
||||
|
||||
/* Question mark shows list of hotkeys */
|
||||
"Show or hide this help" = "Vis eller skjul denne hjelpen";
|
||||
|
||||
/* Space key */
|
||||
"key_space" = "space";
|
||||
|
||||
/* Delete key */
|
||||
"key_delete" = "slett";
|
||||
|
||||
/* 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" = "⌫";
|
||||
|
||||
/* Hotkey to start a search */
|
||||
"hotkey_search" = "s";
|
||||
|
||||
/* Hotkey description to select next list item */
|
||||
"View next item" = "Se neste element";
|
||||
|
||||
/* Hotkey description to select previous list item */
|
||||
"View previous item" = "Vis forrige element";
|
||||
|
||||
/* Hotkey description to add next list item to selection */
|
||||
"Add next item to selection" = "Legg til neste element i utvalget";
|
||||
|
||||
/* Hotkey description to add previous list item to selection */
|
||||
"Add previous item to selection" = "Legg til forrige element i utvalget";
|
||||
|
||||
/* Hotkey description to move backward in current view */
|
||||
"Move backward" = "Gå tilbake";
|
||||
|
||||
/* Hotkey description to move forward in current view */
|
||||
"Move forward" = "Gå til neste";
|
||||
|
||||
/* Password Recovery */
|
||||
"passwordRecovery_Disabled" = "Frakoblet ";
|
||||
"passwordRecovery_SecretQuestion" = "Hemmelig spørsmål";
|
||||
"passwordRecovery_SecretQuestion1" = "Hva er navnet på ditt første kjæledyr? ";
|
||||
"passwordRecovery_SecretQuestion2" = "Hva var din første bil? ";
|
||||
"passwordRecovery_SecretQuestion3" = "Hva er din favorittfilm? ";
|
||||
"passwordRecovery_SecondaryEmail" = "Sekundær e-post";
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
= "Потенцијално би свако на интернету могао да приступи вашем адресару \"%{0}\", чак и ако немају налог на овом систему. Да ли је ова информација погодна за јавни интернет?";
|
||||
"Give Access" = "Додели приступ";
|
||||
"Keep Private" = "Задржи приватним";
|
||||
"Expand" = "Прошири";
|
||||
"Reduce" = "Умањи";
|
||||
|
||||
/* generic.js */
|
||||
"Unable to subscribe to that folder!"
|
||||
@@ -104,6 +106,7 @@
|
||||
"Personal" = "Лично";
|
||||
"To Do" = "Урадити";
|
||||
"Later" = "Касније";
|
||||
"Forwarded" = "Прослеђено";
|
||||
"Return Receipt Sent" = "Потврда о пријему послата";
|
||||
"a2_Sunday" = "Не";
|
||||
"a2_Monday" = "По";
|
||||
@@ -122,12 +125,18 @@
|
||||
"S/MIME Certificate" = "S/MIME Сертификат";
|
||||
"Subject Name" = "Име теме";
|
||||
"Issuer" = "Издавач";
|
||||
"streetAddress" = "Улица";
|
||||
"stateOrProvinceName" = "Држава или Провинција";
|
||||
"localityName" = "Локалитет";
|
||||
"countryName" = "Земља";
|
||||
"organizationName" = "Организација";
|
||||
"organizationalUnitName" = "Организациона јединица";
|
||||
"commonName" = "Опште име";
|
||||
"surname" = "Презиме";
|
||||
"givenName" = "Име";
|
||||
"emailAddress" = "Адреса епоште";
|
||||
|
||||
|
||||
/* Authentication username */
|
||||
"Username" = "Корисничко име";
|
||||
|
||||
@@ -213,3 +222,11 @@
|
||||
|
||||
/* Hotkey description to move forward in current view */
|
||||
"Move forward" = "Помери унапред";
|
||||
|
||||
/* Password Recovery */
|
||||
"passwordRecovery_Disabled" = "Disabled";
|
||||
"passwordRecovery_SecretQuestion" = "Secret question";
|
||||
"passwordRecovery_SecretQuestion1" = "What is the name of your first pet ?";
|
||||
"passwordRecovery_SecretQuestion2" = "What was your first car ?";
|
||||
"passwordRecovery_SecretQuestion3" = "What is your favorite movie ?";
|
||||
"passwordRecovery_SecondaryEmail" = "Secondary E-mail";
|
||||
|
||||
@@ -497,7 +497,7 @@
|
||||
return [[sd authenticationType] isEqualToString: @"cas"];
|
||||
}
|
||||
|
||||
- (BOOL) usesSAML2Authentication
|
||||
- (BOOL) usesSAML2Authenticationx
|
||||
{
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
@@ -511,7 +511,13 @@
|
||||
NSString *v;
|
||||
|
||||
/* The "identification" term is used in the human sense here. */
|
||||
v = [[context activeUser] cn];
|
||||
if ([[context activeUser] primaryIdentity]
|
||||
&& [[[context activeUser] primaryIdentity] objectForKey:@"fullName"]
|
||||
&& [[[[[context activeUser] primaryIdentity] objectForKey:@"fullName"] stringByReplacingOccurrencesOfString:@" " withString:@""] length] > 0) {
|
||||
v = [[[context activeUser] primaryIdentity] objectForKey:@"fullName"];
|
||||
} else {
|
||||
v = [[context activeUser] cn];
|
||||
}
|
||||
|
||||
return (v ? v : @"");
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
request = [context request];
|
||||
params = [[request contentAsString] objectFromJSONString];
|
||||
|
||||
name = [params objectForKey: @"name"];
|
||||
name = [[params objectForKey: @"name"] stringWithoutHTMLInjection: YES];
|
||||
nameInContainer = nil;
|
||||
|
||||
if ([name length] > 0)
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#import <SOGo/SOGoDomainDefaults.h>
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserManager.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
|
||||
#import <UI/SOGoUI/SOGoACLAdvisory.h>
|
||||
|
||||
@@ -258,12 +259,35 @@
|
||||
NSDictionary *currentUser, *jsonResponse;;
|
||||
NSEnumerator *usersList;
|
||||
NSString *currentUid;
|
||||
NSArray *o;
|
||||
NSArray *o, *reqPathArray;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
request = [[self context] request];
|
||||
response = [self responseWithStatus: 200];
|
||||
users = [[request contentAsString] objectFromJSONString];
|
||||
usersList = [users objectEnumerator];
|
||||
reqPathArray = [request requestHandlerPathArray];
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
|
||||
// Disable sharing
|
||||
if (NSNotFound != [reqPathArray indexOfObject: kDisableSharingMail]
|
||||
&& nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingMail]) {
|
||||
response = [self responseWithStatus: 403];
|
||||
return response;
|
||||
}
|
||||
if (NSNotFound != [reqPathArray indexOfObject: kDisableSharingContacts]
|
||||
&& nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingContacts]) {
|
||||
response = [self responseWithStatus: 403];
|
||||
return response;
|
||||
}
|
||||
if (NSNotFound != [reqPathArray indexOfObject: kDisableSharingCalendar]
|
||||
&& nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingCalendar]) {
|
||||
response = [self responseWithStatus: 403];
|
||||
return response;
|
||||
}
|
||||
|
||||
while ((currentUser = [usersList nextObject]))
|
||||
{
|
||||
|
||||
@@ -21,11 +21,15 @@
|
||||
"HomePhone" = "Fastnet nr.";
|
||||
"Lastname" = "Efternavn";
|
||||
"Location" = "Sted";
|
||||
"Add a category" = "Tilføj en kategori";
|
||||
"MobilePhone" = "Mobil tlf. nr.";
|
||||
"Name" = "Navn";
|
||||
"OfficePhone" = "Kontor tlf. nr.";
|
||||
"Organization" = "Firma";
|
||||
"Work Phone" = "Arbejde tlf. nr.";
|
||||
"Cell" = "Celle";
|
||||
"Pager" = "Personsøger";
|
||||
"Pref" = "Præf";
|
||||
"Phone" = "Telefon";
|
||||
"Phones" = "Telefoner";
|
||||
"Postal" = "Post";
|
||||
@@ -35,12 +39,120 @@
|
||||
"delete" = "Slet";
|
||||
"edit" = "Redigér";
|
||||
"invalidemailwarn" = "Den angivne e-mail er ugyldigt";
|
||||
"invaliddatewarn" = "Den angivne dato er ugyldig";
|
||||
"new" = "Ny";
|
||||
"Preferred Phone" = "Foretrukken tlf. nr.";
|
||||
"Move To" = "Flyt til";
|
||||
"Copy To" = "Kopiér til";
|
||||
"Add to" = "Tilføj til";
|
||||
"To" = "Til";
|
||||
"Carbon Copy (Cc)" = "Kopi (Cc)";
|
||||
"Blind Carbon Copy (Bcc)" = "(Bcc)";
|
||||
|
||||
/* Search scope: name fields */
|
||||
"name" = "Navn";
|
||||
|
||||
/* Search scope: name fields */
|
||||
"c_cn" = "Navn";
|
||||
|
||||
/* Search scope: secondary email field */
|
||||
"mozillanickname" = "Sekundær e-mail";
|
||||
|
||||
/* Search scope: screen name field */
|
||||
"nsaimid" = "Skærmnavn";
|
||||
|
||||
/* Search scope: mail fields */
|
||||
"mail" = "E-mail";
|
||||
|
||||
/* Search scope: mail fields */
|
||||
"c_mail" = "E-mail";
|
||||
|
||||
/* Search scope: telephone field */
|
||||
"telephonenumber" = "Telefon";
|
||||
|
||||
/* Search scope: telephone field */
|
||||
"homephone" = "Telefon";
|
||||
|
||||
/* Search scope: mobile field */
|
||||
"mobile" = "Mobil";
|
||||
|
||||
/* Search scope: fax field */
|
||||
"facsimiletelephonenumber" = "Fax";
|
||||
|
||||
/* Search scope: pager field */
|
||||
"pager" = "Personsøger";
|
||||
|
||||
/* Search scope: categories field */
|
||||
"c_categories" = "Kategorier";
|
||||
|
||||
/* Search scope: categories field */
|
||||
"vcardcategories" = "Kategorier";
|
||||
|
||||
/* Search scope: title field */
|
||||
"title" = "Titel";
|
||||
|
||||
/* Search scope: organization field */
|
||||
"c_o" = "Firma";
|
||||
|
||||
/* Search scope: organization field */
|
||||
"o" = "Firma";
|
||||
|
||||
/* Search scope: department field */
|
||||
"ou" = "Afdeling";
|
||||
|
||||
/* Search scope: city field */
|
||||
"l" = "By";
|
||||
|
||||
/* Search scope: country field */
|
||||
"c" = "Land";
|
||||
|
||||
/* Search scope: home address field */
|
||||
"mozillahomestreet" = "Hjemmeadresse";
|
||||
|
||||
/* Search scope: state/province field */
|
||||
"st" = "Stat / provins";
|
||||
|
||||
/* Search scope: home state/province field */
|
||||
"mozillahomestate" = "Hjemmestat / provins";
|
||||
|
||||
/* Search scope: zip/postal code field */
|
||||
"postalCode" = "Postnummer";
|
||||
|
||||
/* Search scope: home zip/postal code field */
|
||||
"mozillahomepostalcode" = "Postnummer";
|
||||
|
||||
/* Search scope: home country field */
|
||||
"mozillahomecountryname" = "Hjemland";
|
||||
|
||||
/* Search scope: home web page field */
|
||||
"mozillahomeurl" = "Forside";
|
||||
|
||||
/* Search scope: work web page field */
|
||||
"mozillaworkurl" = "Hjemmeside";
|
||||
|
||||
/* Search scope: note field */
|
||||
"description" = "Bemærk";
|
||||
|
||||
/* Subheader of empty addressbook */
|
||||
"No contact" = "Ingen kontakt";
|
||||
|
||||
/* Subheader of system addressbook */
|
||||
"Start a search to browse this address book" = "Start en søgning for at gennemse denne adressebog";
|
||||
|
||||
/* Number of contacts in addressbook; string is prefixed by number */
|
||||
"contacts" = "Kontaktpersoner";
|
||||
|
||||
/* No contact matching search criteria */
|
||||
"No matching contact" = "Kontakt ikke fundet";
|
||||
|
||||
/* Number of contacts matching search criteria; string is prefixed by number */
|
||||
"matching contacts" = "Fundne kontakter";
|
||||
|
||||
/* Number of selected contacts in list */
|
||||
"selected" = "Valgte";
|
||||
|
||||
/* Empty right pane */
|
||||
"No contact selected" = "Ingen kontakt valgt";
|
||||
|
||||
/* Tooltips */
|
||||
"Create a new address book card" = "Opret nyt kort til adressebog";
|
||||
"Create a new list" = "Opret en ny liste";
|
||||
@@ -57,6 +169,7 @@
|
||||
"Search in Addressbook" = "Søg i adressebog";
|
||||
"New Card" = "Nyt kort";
|
||||
"New List" = "Ny liste";
|
||||
"Edit" = "Redigér";
|
||||
"Properties" = "Egenskaber";
|
||||
"Sharing..." = "Deling ...";
|
||||
"Write" = "Skriv";
|
||||
@@ -80,15 +193,16 @@
|
||||
"Work" = "Arbejde";
|
||||
"Mobile" = "Mobil";
|
||||
"Pager" = "Personsøger";
|
||||
|
||||
/* categories */
|
||||
"contacts_category_labels" = "kollega, konkurrent, kunde, ven, familie, samarbejdspartner, udbyder, presse, VIP";
|
||||
"New category" = "Ny kategori";
|
||||
|
||||
/* adresses */
|
||||
"Title" = "Titel";
|
||||
"Service" = "Service";
|
||||
"Company" = "Firma";
|
||||
"Department" = "Afdeling";
|
||||
"Organization" = "Organisation";
|
||||
"City" = "By";
|
||||
"State_Province" = "Stat / provins";
|
||||
"ZIP_Postal Code" = "ZIP/Postnr.";
|
||||
@@ -107,22 +221,33 @@
|
||||
"New Addressbook..." = "Ny adressebog ...";
|
||||
"Subscribe to an Addressbook..." = "Abonnér på en adressebog ...";
|
||||
"Remove the selected Addressbook" = "Fjern den valgte adressebog";
|
||||
"Subscribe to a shared contact" = "Abonnér på en delt adressebog";
|
||||
"Search User" = "Søger bruger";
|
||||
"Name of the Address Book" = "Adressebogens navn";
|
||||
"Are you sure you want to delete the selected address book?"
|
||||
= "Er du sikker på du vil slette den valgte adressebog?";
|
||||
"Are you sure you want to delete the addressbook \"%{0}\"?"
|
||||
= "Er du sikker på du vil slette adressebogen \"%{0}\"?";
|
||||
"You cannot remove nor unsubscribe from a public addressbook."
|
||||
= "Du kan ikke fjerne eller afmelde dig fra en offentlig adressebog.";
|
||||
"You cannot remove nor unsubscribe from your personal addressbook."
|
||||
= "Du kan ikke fjerne eller afmelde din personlige adressebog.";
|
||||
"Are you sure you want to delete the selected contacts?"
|
||||
= "Er du sikker på du vil slette de valgte kontakter?";
|
||||
"Are you sure you want to delete the card of %{0}?" = "Er du sikker på du vil slette kortet på \"%{0}\"?";
|
||||
"You cannot delete the card of \"%{0}\"."
|
||||
= "Du kan ikke slette kortet fra \"% {0}\".";
|
||||
"Address Book Name" = "Adressebog navn";
|
||||
"You cannot subscribe to a folder that you own!"
|
||||
= "Du kan ikke abonnere på en mappe, som du ejer.";
|
||||
"Unable to subscribe to that folder!"
|
||||
= "Det er ikke muligt at abonnere på denne mappe.";
|
||||
|
||||
/* security */
|
||||
"Security" = "Sikkerhed";
|
||||
"Uninstall" = "afinstallér ";
|
||||
"Error reading the card certificate." = "Fejl ved læsning af kortcertifikatet.";
|
||||
"No certificate associated to card." = "Intet certifikat knyttet til kortet.";
|
||||
|
||||
/* acls */
|
||||
"Access rights to" = "Adgangsrettigheder til";
|
||||
"For user" = "For bruger";
|
||||
@@ -141,11 +266,15 @@
|
||||
"The selected contact has no email address."
|
||||
= "Den valgte kontaktperson har ingen e-mail-adresse.";
|
||||
"Please select a contact." = "Vælg venligst en kontaktperson";
|
||||
/* Error messages for move and copy */
|
||||
|
||||
/* Messages for move and copy */
|
||||
"%{0} card(s) copied" = "%{0} kort(ene) kopieret";
|
||||
"%{0} card(s) moved" = "%{0} kort(ene) flyttet";
|
||||
"SoAccessDeniedException" = "Du kan ikke skrive til denne adressebog.";
|
||||
"Forbidden" = "Du kan ikke skrive til denne adressebog.";
|
||||
"Invalid Contact" = "Den valgte kontaktperson findes ikke mere.";
|
||||
"Unknown Destination Folder" = "Den valgte adressebog eksisterer ikke længere.";
|
||||
|
||||
/* Lists */
|
||||
"List details" = "Liste detaljer";
|
||||
"List name" = "Liste navn";
|
||||
@@ -158,6 +287,8 @@
|
||||
"Export" = "Eksportér";
|
||||
"Export Address Book..." = "Eksportér adressebog ...";
|
||||
"View Raw Source" = "Vis kilde";
|
||||
|
||||
/* Import */
|
||||
"Import Cards" = "Importér kort";
|
||||
"Select a vCard or LDIF file." = "Vælg en vCard - eller LDIF-fil.";
|
||||
"Upload" = "Indlæs";
|
||||
@@ -167,3 +298,68 @@
|
||||
"No card was imported." = "Intet kort blev importeret.";
|
||||
"A total of %{0} cards were imported in the addressbook." = "I alt blev % {0} kort importeret i adressebogen.";
|
||||
"Reload" = "Genindlæs";
|
||||
|
||||
/* Properties window */
|
||||
"Address Book Name" = "Adressebog navn";
|
||||
"Links to this Address Book" = "Links til denne adressebog";
|
||||
"Authenticated User Access" = "Godkendt brugeradgang";
|
||||
"CardDAV URL" = "CardDAV URL";
|
||||
"Options" = "Indstillinger";
|
||||
"Rename" = "Omdøb";
|
||||
"Subscriptions" = "Abonnementer";
|
||||
"Global Addressbooks" = "Globale adressebøger";
|
||||
"Search" = "Søg";
|
||||
"Sort" = "Sortér";
|
||||
"Descending Order" = "Faldende rækkefølge";
|
||||
"Back" = "Tilbage";
|
||||
"Select All" = "Vælg alle";
|
||||
"Copy contacts" = "Kopier kontakter";
|
||||
"More messages options" = "Flere beskedmuligheder";
|
||||
"New Contact" = "Ny kontakt";
|
||||
"Close" = "Luk";
|
||||
"More contact options" = "Flere kontaktmuligheder";
|
||||
"Organization Unit" = "Organisationsenhed";
|
||||
"Add Organizational Unit" = "Tilføj organisationsenhed";
|
||||
"Type" = "Skriv";
|
||||
"Email Address" = "E-mailadresse";
|
||||
"New Email Address" = "Ny e-mailadresse";
|
||||
"New Phone Number" = "Nyt telefonnummer";
|
||||
"URL" = "URL";
|
||||
"New URL" = "Ny URL";
|
||||
"street" = "Gade";
|
||||
"street (continued)" = "Gade (fortsat)";
|
||||
"Postoffice" = "Postkontor";
|
||||
"Region" = "Område";
|
||||
"Postal Code" = "Postnummer";
|
||||
"New Address" = "Ny adresse";
|
||||
"Reset" = "Nustil";
|
||||
"Description" = "Beskrivelse";
|
||||
"Add Member" = "Tilføj medlem";
|
||||
"Subscribe" = "Abonnér";
|
||||
"Add Birthday" = "Tilføj fødselsdag";
|
||||
"Import" = "Importér";
|
||||
"More options" = "Flere indstillinger";
|
||||
"Role" = "Rolle";
|
||||
"Add Screen Name" = "Tilføj skærmnavn";
|
||||
"Custom 1" = "Tilpasset 1";
|
||||
"Custom 2" = "Tilpasset 2";
|
||||
"Custom 3" = "Tilpasset 3";
|
||||
"Custom 4" = "Tilpasset 4";
|
||||
"Custom Value" = "Brugerdefineret værdi";
|
||||
"New Custom Value" = "Ny brugerdefineret værdi";
|
||||
"Synchronization" = "Synkronisering";
|
||||
"Synchronize" = "Synkronisér";
|
||||
"Sucessfully subscribed to address book" = "Tilmeldte sig adressebogen";
|
||||
"A similar card already exists. Would you like to save it anyway?" = "Et lignende kort findes allerede. Vil du alligevel gemme den?";
|
||||
|
||||
/* Aria label for scope of search on contacts */
|
||||
"Search scope" = "Søgeomfang";
|
||||
|
||||
/* Aria label for avatar button to select and unselect a card */
|
||||
"Toggle item" = "Skift element";
|
||||
|
||||
/* Hotkey to create a new card */
|
||||
"key_create_card" = "c";
|
||||
|
||||
/* Hotkey to create a new list */
|
||||
"key_create_list" = "l";
|
||||
|
||||
@@ -21,11 +21,15 @@
|
||||
"HomePhone" = "Hjemmetelefon";
|
||||
"Lastname" = "Etternavn";
|
||||
"Location" = "Sted";
|
||||
"Add a category" = "Legg til kategori";
|
||||
"MobilePhone" = "Mobiltelefon";
|
||||
"Name" = "Navn";
|
||||
"OfficePhone" = "Kontortelefon";
|
||||
"Organization" = "Organisasjon";
|
||||
"Work Phone" = "Jobbtelefon";
|
||||
"Cell" = "Celle";
|
||||
"Pager" = "Personsøker";
|
||||
"Pref" = "Pref";
|
||||
"Phone" = "Telefon";
|
||||
"Phones" = "Telefoner";
|
||||
"Postal" = "Postadresse";
|
||||
@@ -40,6 +44,115 @@
|
||||
"Move To" = "Flytt til";
|
||||
"Copy To" = "Kopier til";
|
||||
"Add to" = "Legg til i";
|
||||
"To" = "Til";
|
||||
"Carbon Copy (Cc)" = "Kopi (cc)";
|
||||
"Blind Carbon Copy (Bcc)" = "Blindkopi (bcc)";
|
||||
|
||||
/* Search scope: name fields */
|
||||
"name" = "Navn";
|
||||
|
||||
/* Search scope: name fields */
|
||||
"c_cn" = "Navn";
|
||||
|
||||
/* Search scope: secondary email field */
|
||||
"mozillanickname" = "Sekundær e-post";
|
||||
|
||||
/* Search scope: screen name field */
|
||||
"nsaimid" = "Skjerm navn";
|
||||
|
||||
/* Search scope: mail fields */
|
||||
"mail" = "Post";
|
||||
|
||||
/* Search scope: mail fields */
|
||||
"c_mail" = "Post";
|
||||
|
||||
/* Search scope: telephone field */
|
||||
"telephonenumber" = "Telefon";
|
||||
|
||||
/* Search scope: telephone field */
|
||||
"homephone" = "Telefon";
|
||||
|
||||
/* Search scope: mobile field */
|
||||
"mobile" = "Mobil";
|
||||
|
||||
/* Search scope: fax field */
|
||||
"facsimiletelephonenumber" = "Fax";
|
||||
|
||||
/* Search scope: pager field */
|
||||
"pager" = "Personsøker";
|
||||
|
||||
/* Search scope: categories field */
|
||||
"c_categories" = "Kategorier";
|
||||
|
||||
/* Search scope: categories field */
|
||||
"vcardcategories" = "Kategorier";
|
||||
|
||||
/* Search scope: title field */
|
||||
"title" = "Tittel";
|
||||
|
||||
/* Search scope: organization field */
|
||||
"c_o" = "Organisasjon";
|
||||
|
||||
/* Search scope: organization field */
|
||||
"o" = "Organisasjon";
|
||||
|
||||
/* Search scope: department field */
|
||||
"ou" = "Avdeling";
|
||||
|
||||
/* Search scope: city field */
|
||||
"l" = "Poststed";
|
||||
|
||||
/* Search scope: country field */
|
||||
"c" = "Land";
|
||||
|
||||
/* Search scope: home address field */
|
||||
"mozillahomestreet" = "Hjemadresse";
|
||||
|
||||
/* Search scope: state/province field */
|
||||
"st" = "Stat/Provins";
|
||||
|
||||
/* Search scope: home state/province field */
|
||||
"mozillahomestate" = "Stat/Provins";
|
||||
|
||||
/* Search scope: zip/postal code field */
|
||||
"postalCode" = "Postnummer";
|
||||
|
||||
/* Search scope: home zip/postal code field */
|
||||
"mozillahomepostalcode" = "Postnummer";
|
||||
|
||||
/* Search scope: home country field */
|
||||
"mozillahomecountryname" = "Land";
|
||||
|
||||
/* Search scope: home web page field */
|
||||
"mozillahomeurl" = "Hjemmeside";
|
||||
|
||||
/* Search scope: work web page field */
|
||||
"mozillaworkurl" = "Nettside";
|
||||
|
||||
/* Search scope: note field */
|
||||
"description" = "Notat";
|
||||
|
||||
/* Subheader of empty addressbook */
|
||||
"No contact" = "Ingen kontakt";
|
||||
|
||||
/* Subheader of system addressbook */
|
||||
"Start a search to browse this address book" = "Start et søk for å bla gjennom adresseboken";
|
||||
|
||||
/* Number of contacts in addressbook; string is prefixed by number */
|
||||
"contacts" = "kontakter";
|
||||
|
||||
/* No contact matching search criteria */
|
||||
"No matching contact" = "Ingen treff på kontakt";
|
||||
|
||||
/* Number of contacts matching search criteria; string is prefixed by number */
|
||||
"matching contacts" = "Treff på kontakter";
|
||||
|
||||
/* Number of selected contacts in list */
|
||||
"selected" = "valgt";
|
||||
|
||||
/* Empty right pane */
|
||||
"No contact selected" = "Ingen valgte kontakter";
|
||||
|
||||
/* Tooltips */
|
||||
"Create a new address book card" = "Opprett et nytt adressekort";
|
||||
"Create a new list" = "Opprett en ny mailingliste";
|
||||
@@ -80,9 +193,11 @@
|
||||
"Work" = "Arbeid";
|
||||
"Mobile" = "Mobiltelefon";
|
||||
"Pager" = "Personsøker";
|
||||
|
||||
/* categories */
|
||||
"contacts_category_labels" = "Kollega, Konkurrent, Kunde, Venn, Familie, Forretningspartner, Leverandør, Presse, VIP";
|
||||
"New category" = "Ny kategori";
|
||||
|
||||
/* adresses */
|
||||
"Title" = "Tittel";
|
||||
"Service" = "Funksjon";
|
||||
@@ -106,21 +221,33 @@
|
||||
"New Addressbook..." = "Ny adressebok...";
|
||||
"Subscribe to an Addressbook..." = "Abonnér på en adressebok...";
|
||||
"Remove the selected Addressbook" = "Ta bort den markerte adresseboken";
|
||||
"Subscribe to a shared contact" = "Abonnér på en delt adressebok ";
|
||||
"Search User" = "Søk etter bruker";
|
||||
"Name of the Address Book" = "Navn på adressebok";
|
||||
"Are you sure you want to delete the selected address book?"
|
||||
= "Er du sikker på at du vil ta bort den markerte adresseboken?";
|
||||
"Are you sure you want to delete the addressbook \"%{0}\"?"
|
||||
= "Er du sikker på at du vil slette adressebok \"%{0}\"?";
|
||||
"You cannot remove nor unsubscribe from a public addressbook."
|
||||
= "Du kan ikke fjerne eller avbryte abonnement på en offentlig adressebok.";
|
||||
"You cannot remove nor unsubscribe from your personal addressbook."
|
||||
= "Du kan ikke fjerne eller avbryte abonnement på en personlig adressebok.";
|
||||
"Are you sure you want to delete the selected contacts?"
|
||||
= "Er du sikker på at du vil slette de markerte kontaktene?";
|
||||
"Are you sure you want to delete the card of %{0}?" = "Er du sikker på at du vil slette adressekort %{0}?";
|
||||
"You cannot delete the card of \"%{0}\"."
|
||||
= "Du kan ikke slette adressekortet \"%{0}\".";
|
||||
"You cannot subscribe to a folder that you own!"
|
||||
= "Du kan ikke abonnere på en mappe som du selv eier.";
|
||||
"Unable to subscribe to that folder!"
|
||||
= "Du kan ikke abonnere på mappen.";
|
||||
|
||||
/* security */
|
||||
"Security" = "Sikkerhet";
|
||||
"Uninstall" = "Avinstallere";
|
||||
"Error reading the card certificate." = "Feil ved lesing av kortsertifikatet.";
|
||||
"No certificate associated to card." = "Ingen sertifikat knyttet til kortet. ";
|
||||
|
||||
/* acls */
|
||||
"Access rights to" = "Tilgangsrettigheter til";
|
||||
"For user" = "For bruker";
|
||||
@@ -139,11 +266,15 @@
|
||||
"The selected contact has no email address."
|
||||
= "Den markerte kontakten har ingen e-postadresse.";
|
||||
"Please select a contact." = "Velg en kontakt.";
|
||||
/* Error messages for move and copy */
|
||||
|
||||
/* Messages for move and copy */
|
||||
"%{0} card(s) copied" = "%{0} kort kopiert";
|
||||
"%{0} card(s) moved" = "%{0} kort flyttet";
|
||||
"SoAccessDeniedException" = "Du kan ikke skrive i denne adresseboken.";
|
||||
"Forbidden" = "Du kan ikke skrive i denne adresseboken.";
|
||||
"Invalid Contact" = "Markert kontakt eksisterer ikke lengre.";
|
||||
"Unknown Destination Folder" = "Den markerte adresseboken eksisterer ikke lengre.";
|
||||
|
||||
/* Lists */
|
||||
"List details" = "Informasjon om mailinglisten";
|
||||
"List name" = "Navn på mailingliste";
|
||||
@@ -156,6 +287,8 @@
|
||||
"Export" = "Eksportere";
|
||||
"Export Address Book..." = "Eksportere Adressebok...";
|
||||
"View Raw Source" = "Vis råkilde";
|
||||
|
||||
/* Import */
|
||||
"Import Cards" = "Importere adressekort";
|
||||
"Select a vCard or LDIF file." = "Velg et vCard eller LDIF-fil.";
|
||||
"Upload" = "Last opp";
|
||||
@@ -165,8 +298,68 @@
|
||||
"No card was imported." = "Ingen adressekort ble importert.";
|
||||
"A total of %{0} cards were imported in the addressbook." = "Totalt %{0} av adressekortene ble importert til adresseboken.";
|
||||
"Reload" = "Last på nytt";
|
||||
|
||||
/* Properties window */
|
||||
"Address Book Name" = "Addressebok navn";
|
||||
"Links to this Address Book" = "Lenker til denne addresseboken";
|
||||
"Authenticated User Access" = "Autentisert brukertilgang";
|
||||
"CardDAV URL" = "CardDAV URL";
|
||||
"Options" = "Alternativer";
|
||||
"Rename" = "Endre navn";
|
||||
"Subscriptions" = "Abonnementer";
|
||||
"Global Addressbooks" = "Global adressebok";
|
||||
"Search" = "Søk";
|
||||
"Sort" = "Sorter";
|
||||
"Descending Order" = "Synkende rekkefølge";
|
||||
"Back" = "Tilbake";
|
||||
"Select All" = "Velg alle";
|
||||
"Copy contacts" = "Kopier kontakter ";
|
||||
"More messages options" = "Flere meldingsalternativer";
|
||||
"New Contact" = "Ny kontakt";
|
||||
"Close" = "Lukk";
|
||||
"More contact options" = "Flere kontaktalternativer";
|
||||
"Organization Unit" = "Organisasjonsenhet";
|
||||
"Add Organizational Unit" = "Legg til organisasjonsenhet";
|
||||
"Type" = "Skriv";
|
||||
"Email Address" = "E-postadresse";
|
||||
"New Email Address" = "Ny e-postadresse";
|
||||
"New Phone Number" = "Nytt telefonnummer";
|
||||
"URL" = "URL";
|
||||
"New URL" = "Ny URL";
|
||||
"street" = "gate";
|
||||
"street (continued)" = "gate (fortsettelse)";
|
||||
"Postoffice" = "Postkontor";
|
||||
"Region" = "Region";
|
||||
"Postal Code" = "Postnummer";
|
||||
"New Address" = "Ny adresse";
|
||||
"Reset" = "Tilbakestill";
|
||||
"Description" = "Beskrivelse";
|
||||
"Add Member" = "Legg til medlem";
|
||||
"Subscribe" = "Abonnér";
|
||||
"Add Birthday" = "Legg til fødselsdag";
|
||||
"Import" = "Importer";
|
||||
"More options" = "Flere alternativer";
|
||||
"Role" = "Rolle";
|
||||
"Add Screen Name" = "Legg til skjermnavn";
|
||||
"Custom 1" = "Valgfri 1";
|
||||
"Custom 2" = "Valgfri 2";
|
||||
"Custom 3" = "Valgfri 3";
|
||||
"Custom 4" = "Valgfri 4";
|
||||
"Custom Value" = "Egendefinert verdi ";
|
||||
"New Custom Value" = "Ny egendefinert verdi ";
|
||||
"Synchronization" = "Synkronisering";
|
||||
"Synchronize" = "Synkroniser";
|
||||
"Sucessfully subscribed to address book" = "Vellykket abonnert til adressebok ";
|
||||
"A similar card already exists. Would you like to save it anyway?" = "Et liknende kort finnes allerede. Vil du lagre likevel? ";
|
||||
|
||||
/* Aria label for scope of search on contacts */
|
||||
"Search scope" = "Søkeomfang ";
|
||||
|
||||
/* Aria label for avatar button to select and unselect a card */
|
||||
"Toggle item" = "Slå på elementet ";
|
||||
|
||||
/* Hotkey to create a new card */
|
||||
"key_create_card" = "c";
|
||||
|
||||
/* Hotkey to create a new list */
|
||||
"key_create_list" = "I";
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
"New Addressbook..." = "Нови адресар...";
|
||||
"Subscribe to an Addressbook..." = "Претплати се на Адресар...";
|
||||
"Remove the selected Addressbook" = "Уклони одабрани адресар";
|
||||
"Subscribe to a shared folder" = "Претплати се на дељени директоријум";
|
||||
"Subscribe to a shared contact" = "Претплати се на дељени адресар";
|
||||
"Search User" = "Потражи корисника";
|
||||
"Name of the Address Book" = "Име адресара";
|
||||
"Are you sure you want to delete the selected address book?"
|
||||
@@ -350,6 +350,7 @@
|
||||
"Synchronization" = "Синхронизација";
|
||||
"Synchronize" = "Синхронизуј";
|
||||
"Sucessfully subscribed to address book" = "Успешно претплаћен на адресар";
|
||||
"A similar card already exists. Would you like to save it anyway?" = "Слична картица већ постоји. Да ли свакако желиш да сачуваш ову картицу?";
|
||||
|
||||
/* Aria label for scope of search on contacts */
|
||||
"Search scope" = "Претражи опсег";
|
||||
|
||||
@@ -493,6 +493,20 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK;
|
||||
return [self responseWithStatus: 204];
|
||||
}
|
||||
|
||||
- (BOOL) isContactSharingEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
result = YES;
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if (nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingContacts]) {
|
||||
result = NO;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (id) defaultAction
|
||||
{
|
||||
// NSString *check;
|
||||
|
||||
@@ -12,6 +12,8 @@ publish_info_text = "Afsenderen informerer dig om vedlagte begivenheden.";
|
||||
cancel_info_text = "Din invitation eller hele begivenheden er aflyst.";
|
||||
request_info_no_attendee = "Foreslår et møde til deltagerne. Du modtager denne besked som en notifikation, du er ikke deltager";
|
||||
Appointment = "Aftale";
|
||||
"Status Update" = "Status opdatering";
|
||||
was = "var";
|
||||
|
||||
Organizer = "Arrangør";
|
||||
Time = "Tid";
|
||||
@@ -32,10 +34,16 @@ reply_info = "Dette er et svar på en begivenhed inviteret af dig.";
|
||||
"to" = "til";
|
||||
"Untitled" = "Ikke navngivet";
|
||||
"Size" = "Størrelse";
|
||||
"Digital signature is not valid" = "Digital signatur ikke er gyldig";
|
||||
"Message is signed" = "Beskeden er signeret";
|
||||
"Subject" = "Emne";
|
||||
"From" = "Fra";
|
||||
"Date" = "Dato";
|
||||
"To" = "Til";
|
||||
"Issuer" = "Udsteder";
|
||||
/* Tooltips */
|
||||
"View Attachment" = "Vis vedhæftet";
|
||||
"Save Attachment" = "Gem vedhæftede";
|
||||
"CC" = "CC";
|
||||
"Cancel" = "Anullér";
|
||||
"OK" = "OK";
|
||||
"Comment" = "Kommentar";
|
||||
"Description" = "Beskrivelse";
|
||||
|
||||
@@ -34,10 +34,16 @@ reply_info = "Dette er et svar på en invitasjon sendt av deg.";
|
||||
"to" = "til";
|
||||
"Untitled" = "Uten emne";
|
||||
"Size" = "Størrelse";
|
||||
"Digital signature is not valid" = "Digital signatur er ikke gyldig";
|
||||
"Message is signed" = "Meldingen er signert";
|
||||
"Subject" = "Emne";
|
||||
"From" = "Fra";
|
||||
"Date" = "Dato";
|
||||
"To" = "Til";
|
||||
"Issuer" = "Utsteder";
|
||||
/* Tooltips */
|
||||
"View Attachment" = "Vis vedlegg";
|
||||
"Save Attachment" = "Lagre vedlegg";
|
||||
"CC" = "CC";
|
||||
"Cancel" = "Avbryt";
|
||||
"OK" = "OK";
|
||||
"Comment" = "Kommentar";
|
||||
"Description" = "Beskrivelse";
|
||||
|
||||
@@ -46,3 +46,4 @@ reply_info = "Овај одговор на позивницу за догађа
|
||||
"Cancel" = "Откажи";
|
||||
"OK" = "У реду";
|
||||
"Comment" = "Коментар";
|
||||
"Description" = "Опис";
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
return [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[self className], @"type",
|
||||
type, @"contentType",
|
||||
[[self generateResponse] contentAsString], @"content",
|
||||
[[[self generateResponse] contentAsString] stringWithoutHTMLInjection: NO], @"content",
|
||||
[self filenameForDisplay], @"filename",
|
||||
[self preferredPathExtension], @"extension",
|
||||
[[self sizeFormatter] stringForObjectValue: [bodyInfo objectForKey: @"size"]], @"size",
|
||||
|
||||
@@ -3,16 +3,19 @@
|
||||
/* Icon's label */
|
||||
"Create" = "Opret";
|
||||
"Empty Trash" = "Tøm papirkurv";
|
||||
"Empty Junk Folder" = "Tøm uønsket mappe";
|
||||
"Delete" = "Slet";
|
||||
"Expunge" = "Slet";
|
||||
"Forward" = "Videresend";
|
||||
"Get Mail" = "Hent besked";
|
||||
"Junk" = "Uønsket post";
|
||||
"Not junk" = "Ikke uønsket";
|
||||
"Reply" = "Besvar";
|
||||
"Reply All" = "Besvar alle";
|
||||
"Print" = "Udskriv";
|
||||
"Stop" = "Stop";
|
||||
"Write" = "Skriv";
|
||||
"Search" = "Søg";
|
||||
"Send" = "Send";
|
||||
"Contacts" = "Kontakter";
|
||||
"Attach" = "Vedhæft";
|
||||
@@ -20,6 +23,7 @@
|
||||
"Options" = "Indstillinger";
|
||||
"Close" = "Luk";
|
||||
"Size" = "Størrelse";
|
||||
|
||||
/* Tooltips */
|
||||
"Send this message now" = "Send denne besked nu";
|
||||
"Select a recipient from an Address Book" = "Vælg en modtager fra en adressebog";
|
||||
@@ -32,31 +36,59 @@
|
||||
"Reply to sender and all recipients" = "Svar afsender og alle modtagere";
|
||||
"Forward selected message" = "Videresend valgte besked";
|
||||
"Delete selected message or folder" = "Slet valgte besked eller mappe";
|
||||
"Mark the selected messages as junk" = "Markér de valgte meddelelser som uønsket post";
|
||||
"Print this message" = "Udskriv denne besked";
|
||||
"Stop the current transfer" = "Stop den aktuelle overførsel";
|
||||
"Attachment" = "Vedhæftet";
|
||||
"Unread" = "Ulæst";
|
||||
"Flagged" = "Markeret";
|
||||
"Search multiple mailboxes" = "Søg i flere postkasser";
|
||||
|
||||
/* Main Frame */
|
||||
"Home" = "Hjem";
|
||||
"Home" = "Hjem";
|
||||
"Calendar" = "Kalender";
|
||||
"Addressbook" = "Adressebog";
|
||||
"Mail" = "Mail";
|
||||
"Right Administration" = "Højre administration";
|
||||
"Help" = "Hjælp";
|
||||
|
||||
/* Mail account main windows */
|
||||
"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Velkommen til Sogo Mailer. Brug mappernet til venstre for at gennemse dine mail-konti!";
|
||||
"Read messages" = "Læs beskeder";
|
||||
|
||||
/* Tooltip for fab button */
|
||||
"Write a new message" = "Skriv en ny besked";
|
||||
|
||||
/* Tooltip for fab button */
|
||||
"Write a message in new window" = "Skriv besked i nyt vindue";
|
||||
|
||||
"Share" = "Del";
|
||||
"Account" = "Konto";
|
||||
"Shared Account" = "Delt konto";
|
||||
|
||||
/* A mailbox is selected, but no message (only shown on large screens) */
|
||||
"No message selected" = "Ingen besked valgt";
|
||||
|
||||
/* No mailbox is selected (usually resulting from an IMAP connection problem) */
|
||||
"No mailbox selected" = "Ingen postkasse valgt";
|
||||
|
||||
"An error occured while communicating with the mail server" = "Der opstod en fejl under kommunikation med mailserveren";
|
||||
|
||||
/* Mailbox actions */
|
||||
|
||||
/* Compact Folder success message */
|
||||
"Folder compacted" = "Mappe komprimeret";
|
||||
|
||||
/* Empty Junk Folder success message */
|
||||
"Junk folder emptied" = "Uønsket mappe tømt";
|
||||
|
||||
/* Empty Trash success message */
|
||||
"Trash emptied" = "Papirkurven tømt";
|
||||
|
||||
/* acls */
|
||||
"Access rights to" = "Adgangsrettigheder til";
|
||||
"For user" = "For bruger";
|
||||
"Any Authenticated User" = "Alle godkendte brugere";
|
||||
"List and see this folder" = "Udvid og se denne mappe";
|
||||
"View this folder" = "Vis denne mappe";
|
||||
"Read mails from this folder" = "Læs beskeder fra denne mappe";
|
||||
"Mark mails read and unread" = "Markér beskeder som læst og ulæst";
|
||||
"Modify the flags of the mails in this folder" = "Redigér markeringerne af beskederne i denne mappe";
|
||||
@@ -66,10 +98,12 @@
|
||||
"Remove this folder" = "Fjern denne mappe";
|
||||
"Erase mails from this folder" = "Slet beskeder fra denne mappe";
|
||||
"Expunge this folder" = "Slet denne mappe";
|
||||
"Export This Folder" = "Eksportér denne mappe";
|
||||
"Modify the acl of this folder" = "Rediger ACL i denne mappe";
|
||||
"Saved Messages.zip" = "Gemte beskeder.zip";
|
||||
"Update" = "Opdatér";
|
||||
"Cancel" = "Annullér";
|
||||
|
||||
/* Mail edition */
|
||||
"From" = "Fra";
|
||||
"Subject" = "Emne";
|
||||
@@ -78,20 +112,28 @@
|
||||
"Bcc" = "Bcc";
|
||||
"Reply-To" = "Svar til";
|
||||
"Add address" = "Tilføj adresse";
|
||||
"Attachments" = "Vedhæftede filer";
|
||||
"Body" = "Krop";
|
||||
"Open" = "Åbn";
|
||||
"Select All" = "Vælg alle";
|
||||
"Select Message" = "Vælg besked";
|
||||
"Attach Web Page..." = "Vedhæft hjemmeside ...";
|
||||
"Attach File(s)..." = "Vedhæft fil(er) ...";
|
||||
"file" = "Fil";
|
||||
"files" = "Filer";
|
||||
"Save all" = "Gem alt";
|
||||
"to" = "Til";
|
||||
"cc" = "Cc";
|
||||
"bcc" = "Bcc";
|
||||
"Add a recipient" = "Tilføj en modtager";
|
||||
"Edit Draft..." = "Redigér kladde ...";
|
||||
"Load Images" = "Indlæs billeder";
|
||||
"Return Receipt" = "Kvittering";
|
||||
"Choose which identity to send this message from" = "Vælg hvilken identitet denne besked skal sendes fra";
|
||||
"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "Afsenderen af denne besked har bedt om at blive underrettet, når du læser denne besked. Vil du underrette afsenderen?";
|
||||
"Return Receipt (displayed) - %@"= "Kvittering (vist) - %@";
|
||||
"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." = "Dette er en kvittering for den besked, du har sendt til %@\n\nBemærk:. Denne kvittering anerkender kun, at budskabet blev vist på modtagerens computer. Der er ingen garanti for, at modtageren har læst eller forstået indholdet i beskeden.";
|
||||
"Security" = "Sikkerhed";
|
||||
"Sign" = "Tegn";
|
||||
"Encrypt" = "Kryptér";
|
||||
"Priority" = "Prioritet";
|
||||
"highest" = "Højeste";
|
||||
"high" = "Høj";
|
||||
@@ -101,12 +143,14 @@
|
||||
"This mail is being sent from an unsecure network!" = "Denne besked bliver sendt fra et usikkert netværk!";
|
||||
"Address Book" = "Adressebog";
|
||||
"Search For" = "Søg efter";
|
||||
|
||||
/* Popup "show" */
|
||||
"all" = "alle";
|
||||
"read" = "Læs";
|
||||
"unread" = "Ulæst";
|
||||
"deleted" = "Slettet";
|
||||
"flagged" = "Markerede";
|
||||
|
||||
/* MailListView */
|
||||
"Sender" = "Afsender";
|
||||
"Subject or Sender" = "Emne eller afsender";
|
||||
@@ -117,6 +161,7 @@
|
||||
"All" = "Alle";
|
||||
"No message" = "Ingen besked";
|
||||
"messages" = "Beskeder";
|
||||
"Yesterday" = "I går";
|
||||
"first" = "Første";
|
||||
"previous" = "Forrige";
|
||||
"next" = "Næste";
|
||||
@@ -126,22 +171,39 @@
|
||||
"Mark Unread" = "Marker som ulæst";
|
||||
"Mark Read" = "Mark som læst";
|
||||
"Untitled" = "Ikke navngivet";
|
||||
|
||||
/* Filter option in messages list */
|
||||
"Show unread messages only" = "Vis kun ulæste beskeder";
|
||||
|
||||
/* Filter option in messages list */
|
||||
"Show flagged messages only" = "Vis kun beskeder markeret med flag";
|
||||
|
||||
/* Aria label for icon of labels */
|
||||
"Filtered by label" = "Filtreret efter mærkat";
|
||||
|
||||
/* Tree */
|
||||
"SentFolderName" = "Sendte Beskeder";
|
||||
"TrashFolderName" = "Papirkurv";
|
||||
"InboxFolderName" = "Indbakke";
|
||||
"DraftsFolderName" = "Kladder";
|
||||
"JunkFolderName" = "Uønsket";
|
||||
"TemplatesFolderName" = "Skabeloner";
|
||||
"SieveFolderName" = "Filtre";
|
||||
"Folders" = "Mapper"; /* title line */
|
||||
|
||||
/* MailMoveToPopUp */
|
||||
"MoveTo" = "Flyt ...";
|
||||
|
||||
/* Address Popup menu */
|
||||
"Add to Address Book..." = "Tilføj til adressebog ...";
|
||||
"Successfully created card" = "Kortet er oprettet ";
|
||||
"Compose Mail To" = "Skriv mail til";
|
||||
"Create Filter From Message..." = "Opret filter fra besked ...";
|
||||
|
||||
/* Image Popup menu */
|
||||
"Save Image" = "Gem billede";
|
||||
"Save Attachment" = "Gem vedhæftede";
|
||||
|
||||
/* Mailbox popup menus */
|
||||
"Open in New Mail Window" = "Åben i nyt vindue";
|
||||
"Copy Folder Location" = "Kopier mappens lokation";
|
||||
@@ -158,10 +220,13 @@
|
||||
"Get Messages for Account" = "Hent beskeder til konto";
|
||||
"Properties..." = "Egenskaber ...";
|
||||
"Delegation..." = "Delegationen ...";
|
||||
|
||||
/* Use This Folder menu */
|
||||
"Sent Messages" = "Sendte beskeder";
|
||||
"Drafts" = "Kladder";
|
||||
"Deleted Messages" = "Slettede beskeder";
|
||||
"Junk Messages" = "Uønsket beskeder";
|
||||
|
||||
/* Message list popup menu */
|
||||
"Open Message In New Window" = "Åben besked i nyt vindue";
|
||||
"Reply to Sender Only" = "Svar kun afsenderen";
|
||||
@@ -174,12 +239,81 @@
|
||||
"Save As..." = "Gem som ...";
|
||||
"Print Preview" = "Se udskrift";
|
||||
"View Message Source" = "Se beskedens kilde";
|
||||
|
||||
/* Message view "more" menu: create an event from message */
|
||||
"Convert To Event" = "Konvertér til begivenhed";
|
||||
|
||||
/* Message view "more" menu: create a task from message */
|
||||
"Convert To Task" = "Konvertér til opgaver";
|
||||
|
||||
/* Message view "more" menu: download message as an eml file */
|
||||
"Download message" = "Download besked";
|
||||
|
||||
/* Message view "more" menu: download message as a zip archive */
|
||||
"Download message (zip)" = "Download besked (zip)";
|
||||
|
||||
/* Message view "more" menu: download all attachments as a zip archive */
|
||||
"Download all attachments" = "Download alle vedhæftede filer";
|
||||
|
||||
/* Filename prefix when downloading all attachments as a zip archive */
|
||||
"attachments" = "Vedhæftet filer";
|
||||
|
||||
"Print..." = "Udskriv ...";
|
||||
"Delete Message" = "Slet besked";
|
||||
"Delete Selected Messages" = "Slet valgte beskeder";
|
||||
"Mark the selected messages as junk" = "Markér de valgte meddelelser som uønsket post";
|
||||
"Mark the selected messages as not junk" = "Markér de valgte meddelelser som ikke uønsket post";
|
||||
|
||||
/* Text appended to the recipients list when there are too many recipients */
|
||||
"and %{0} more..." = "Og %{0} mere...";
|
||||
|
||||
/* Button label to hide extended list of recipients */
|
||||
"Hide" = "Skjul";
|
||||
|
||||
/* Number of selected messages in list */
|
||||
"selected" = "Valgte";
|
||||
|
||||
/* Date formatting from one time to another time */
|
||||
"to_time" = "Til";
|
||||
|
||||
/* Date formatting from one day to another day */
|
||||
"to_date" = "Til";
|
||||
|
||||
/* Encrypted message notification */
|
||||
"This message is encrypted" = "Denne besked er krypteret";
|
||||
|
||||
/* Encrypted message but no certificate */
|
||||
"This message can't be decrypted. Please make sure you have uploaded your S/MIME certificate from the mail preferences module." = "Denne besked kan ikke dekrypteres. Sørg for, at du har uploadet dit S/MIME-certifikat fra mail præferencemodulet.";
|
||||
|
||||
/* OpenSSL certificate error - unknown issuer */
|
||||
"certificate verify error" = "Kan ikke bekræfte beskedsignaturen";
|
||||
|
||||
/* OpenSSL certificate error - digest failure */
|
||||
"digest failure" = "Beskeden er blevet ændret";
|
||||
|
||||
/* OpenSSL reading error */
|
||||
"Error reading the certificate. Please install a new certificate." = "Fejl ved læsning af certifikatet. Installer venligst et nyt certifikat.";
|
||||
|
||||
/* Trying to access a non-existent certificate */
|
||||
"No certificate associated to account." = "Intet certifikat knyttet til kontoen.";
|
||||
|
||||
/* Invalid S/MIME signature */
|
||||
"Digital signature is not valid" = "Digital underskrift er ikke gyldig";
|
||||
|
||||
/* Valid S/MIME signature */
|
||||
"Message is signed" = "Beskeden er underskrevet";
|
||||
|
||||
/* Valid S/MIME signature but common name not found */
|
||||
"Message is signed but the certificate doesn't match the sender email address" = "Beskeden er underskrevet, men certifikatet matcher ikke afsenderens e-mailadresse";
|
||||
|
||||
/* Unknown error while validating message signature */
|
||||
"Digital signature is not valid" = "Digital underskrift er ikke gyldig";
|
||||
|
||||
"This Folder" = "Denne mappe";
|
||||
|
||||
/* Label popup menu */
|
||||
"None" = "Ingen";
|
||||
|
||||
/* Mark popup menu */
|
||||
"As Read" = "Som læst";
|
||||
"Thread As Read" = "Tråd som læst";
|
||||
@@ -189,15 +323,43 @@
|
||||
"As Junk" = "Som uønsket";
|
||||
"As Not Junk" = "Som Ikke uønsket";
|
||||
"Run Junk Mail Controls" = "Kør uønsket post kontroller";
|
||||
"Search messages in" = "Søg beskeder i";
|
||||
"Search" = "Søg";
|
||||
"Search subfolders" = "Søg i undermapper";
|
||||
"Match any of the following" = "Match enhver af følgende ";
|
||||
"Match all of the following" = "Match alle følgende";
|
||||
"contains" = "indeholder";
|
||||
"does not contain" = "indeholder ikke";
|
||||
"No matches found" = "Ingen match fundet";
|
||||
"results found" = "Resultater fundet";
|
||||
"result found" = "Resultat fundet";
|
||||
"Please specify at least one filter" = "Angiv venligst mindst ét filter";
|
||||
|
||||
/* Folder operations */
|
||||
"Name" = "Navn";
|
||||
"Enter the new name of your folder"
|
||||
= "Indtast det nye navn på din mappe";
|
||||
="Indtast det nye navn på din mappe";
|
||||
"Do you really want to move this folder into the trash ?"
|
||||
= "Er du sikker på, at du vil flytte denne mappe til papirkurven?";
|
||||
"Operation failed" = "Handlingen mislykkedes";
|
||||
"Quota" = "Kvote:";
|
||||
"quotasFormat" = "%{0}% used on %{1} MB";
|
||||
"messageQuotasFormat" = "%{0}% af %{1} msgs";
|
||||
"Unable to move/delete folder." = "Kan ikke flytte/slette mappe.";
|
||||
|
||||
/* Alternative operation when folder cannot be deleted */
|
||||
"The mailbox could not be moved to the trash folder. Would you like to delete it immediately?"
|
||||
= "Postkassen kunne ikke flyttes til papirkurven. Vil du slette den med det samme?";
|
||||
|
||||
/* Confirmation message when deleting multiple messages */
|
||||
"Are you sure you want to delete the selected messages?" = "Er du sikker på du vil slette de valgte beskeder?";
|
||||
|
||||
/* Notification on the number of messages successfuly copied */
|
||||
"%{0} message(s) copied" = "%{0} besked(er) kopieret ";
|
||||
|
||||
/* Notification on the number of messages successfuly movied */
|
||||
"%{0} message(s) moved" = "%{0} besked(er) flyttet";
|
||||
|
||||
"Please select a message." = "Vælg venligst en besked.";
|
||||
"Please select a message to print." = "Vælg en besked til udskrivning.";
|
||||
"Please select only one message to print." = "Vælg kun én besked til at udskrive.";
|
||||
@@ -217,16 +379,120 @@
|
||||
= "Det er umuligt at flytte en besked til dens egen mappe!";
|
||||
"Copying a message into its own folder is impossible!"
|
||||
= "Det er umuligt at kopiere en besked til dens egen mappe! ";
|
||||
|
||||
/* Message operations */
|
||||
"The messages could not be moved to the trash folder. Would you like to delete them immediately?"
|
||||
= "Beskederne kunne ikke flyttes til papirkurven. Vil du slette dem med det samme?";
|
||||
|
||||
/* Message editing */
|
||||
"Please specify a subject." = "Vælg venligst et emne.";
|
||||
"error_missingsubject" = "Emne mangler";
|
||||
"error_missingrecipients" = "Ingen modtagere angivet";
|
||||
"Send Anyway" = "Send alligevel";
|
||||
/* Message sending */
|
||||
"Error while saving the draft" = "Fejl under lagring af kladden";
|
||||
|
||||
/* Error when emptying trash */
|
||||
"Unable to empty the trash folder." = "Det er ikke muligt ikke at tømme papirkurven";
|
||||
|
||||
/* Error when emptying junk folder */
|
||||
"Unable to empty the junk folder." = "Kan ikke tømme uønsket mappe.";
|
||||
|
||||
/* Error when uploading a file attachment */
|
||||
"Error while uploading the file \"%{0}\":" = "Fejl under upload af filen \"%{0}\":";
|
||||
"There is an active file upload. Closing the window will interrupt it." = "Der er en aktiv filupload. Lukning af vinduet vil afbryde det.";
|
||||
"Message is too big" = "Besked er for stor";
|
||||
|
||||
/* Appears while sending the message */
|
||||
"Sending" = "Sender";
|
||||
|
||||
/* Appears when the message is successfuly sent */
|
||||
"Sent" = "Sendt";
|
||||
|
||||
"cannot send message: (smtp) all recipients discarded" = "Kan ikke sende besked: alle modtagere er ugyldige.";
|
||||
"cannot send message (smtp) - recipients discarded" = "Kan ikke sende besked. Følgende adresser er ugyldige";
|
||||
"cannot send message: (smtp) error when connecting" = "Kan ikke sende besked: Fejl ved oprettelse til SMTP-server.";
|
||||
"cannot sign email without certificate" = "Beskeden kan ikke underskrives, fordi der ikke er noget certifikat knyttet til e-mailkontoen.";
|
||||
"cannot sign message because the certificate can't be read" = "Beskeden kan ikke underskrives, fordi det certifikat, der er knyttet til mailkontoen, ikke kan læses.";
|
||||
"cannot sign message because the certificate doesn't include the specified sender address" = "Beskeden kan ikke underskrives, fordi afsenderadressen ikke er inkluderet i det certifikat, der er knyttet til e-mailkontoen.";
|
||||
|
||||
/* Contacts list in mail editor */
|
||||
"Email" = "Mail";
|
||||
"More mail options" = "Flere mailindstillinger";
|
||||
"Delegation" = "Delegation";
|
||||
"Add User" = "Tilføj bruger";
|
||||
"Add a tag" = "Tilføj et tag";
|
||||
"reply" = "Svar";
|
||||
"Edit" = "Redigér";
|
||||
"Yes" = "Ja";
|
||||
"No" = "Nej";
|
||||
"Location" = "Sted";
|
||||
"Rename" = "Omdøb";
|
||||
"Compact" = "Kompakt";
|
||||
"Export" = "Eksportér";
|
||||
"Set as Drafts" = "Indstil som kladder ";
|
||||
"Set as Sent" = "Indstil som sendt";
|
||||
"Set as Trash" = "Indstil som papirkurv";
|
||||
|
||||
/* Set the folder as the one holding the Templates */
|
||||
"Set as Templates" = "Indstil som skabeloner";
|
||||
|
||||
/* Set the folder as the one holding Junk mails */
|
||||
"Set as Junk" = "Indstil som uønsket";
|
||||
|
||||
"Sort" = "Sortér";
|
||||
"Order Received" = "Ordre modtaget";
|
||||
"Descending Order" = "Faldende rækkefølge";
|
||||
"Back" = "Tilbage";
|
||||
"Copy messages" = "Kopier beskeder";
|
||||
"More messages options" = "Flere beskedindstillinger";
|
||||
"Mark as Unread" = "Markér som ulæst";
|
||||
"Mark as Read" = "Markér som læst";
|
||||
"Closing Window ..." = "Lukker vindue ...";
|
||||
"Tried to send too many mails. Please wait." = "Forsøgte at sende for mange mails. Vent venligst.";
|
||||
"View Mail" = "Vis e-mail";
|
||||
"This message contains external images." = "Denne besked indeholder eksterne billeder.";
|
||||
"Expanded" = "Udvidet";
|
||||
"Add a Criteria" = "Tilføj et kriterie";
|
||||
"More search options" = "Flere søgeindstillinger";
|
||||
"Your email has been saved" = "Din e-mail er gemt";
|
||||
"Your email has been sent" = "Din e-mail er sendt";
|
||||
"Folder compacted" = "Mappe komprimeret";
|
||||
|
||||
"New draft" = "Ny kladde";
|
||||
"Create new draft with this template" = "Lav ny kladde med denne skabelon";
|
||||
|
||||
/* Advanced search */
|
||||
"Enter Subject" = "Vælg emne";
|
||||
"Enter From" = "Indtast fra";
|
||||
"Enter To" = "Indtast til";
|
||||
"Enter Cc" = "Indtast Cc";
|
||||
"Enter Body" = "Indtast brødtekst";
|
||||
"match" = "Match";
|
||||
"does not match" = "Matcher ikke";
|
||||
|
||||
/* Aria label for scope of search on messages */
|
||||
"Search scope" = "Søgeomfang";
|
||||
|
||||
/* Subscriptions Dialog */
|
||||
"Manage Subscriptions" = "Administrer abonnementer";
|
||||
|
||||
/* Label of filter input field in subscriptions dialog */
|
||||
"Filter" = "Filter";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
/* Icon's label */
|
||||
"Create" = "Opprett";
|
||||
"Empty Trash" = "Tøm papirkurven";
|
||||
"Empty Junk Folder" = "Tøm søppelmappe";
|
||||
"Delete" = "Slett";
|
||||
"Expunge" = "Slett";
|
||||
"Forward" = "Videresend";
|
||||
@@ -43,7 +44,7 @@
|
||||
"Search multiple mailboxes" = "Søk i flere postkasser";
|
||||
|
||||
/* Main Frame */
|
||||
"Home" = "Hjem";
|
||||
"Home" = "Hjem";
|
||||
"Calendar" = "Kalender";
|
||||
"Addressbook" = "Adressebok";
|
||||
"Mail" = "E-post";
|
||||
@@ -53,7 +54,13 @@
|
||||
/* Mail account main windows */
|
||||
"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Velkommen til SOGo Mailer. Bruk mappeviseren på venstre side for å se igjennom dine e-postkontoer!";
|
||||
"Read messages" = "Les meldinger";
|
||||
|
||||
/* Tooltip for fab button */
|
||||
"Write a new message" = "Skriv en ny melding";
|
||||
|
||||
/* Tooltip for fab button */
|
||||
"Write a message in new window" = "Skriv melding i nytt vindu";
|
||||
|
||||
"Share" = "Del";
|
||||
"Account" = "Konto";
|
||||
"Shared Account" = "Delt konto";
|
||||
@@ -64,11 +71,24 @@
|
||||
/* No mailbox is selected (usually resulting from an IMAP connection problem) */
|
||||
"No mailbox selected" = "Ingen valgt mailboks.";
|
||||
|
||||
"An error occured while communicating with the mail server" = "Det oppstod en feil under kommunikasjon med e-postserveren ";
|
||||
|
||||
/* Mailbox actions */
|
||||
|
||||
/* Compact Folder success message */
|
||||
"Folder compacted" = "Mappe komprimert";
|
||||
|
||||
/* Empty Junk Folder success message */
|
||||
"Junk folder emptied" = "Søppelmappen tømt ";
|
||||
|
||||
/* Empty Trash success message */
|
||||
"Trash emptied" = "Papirkurv tømt";
|
||||
|
||||
/* acls */
|
||||
"Access rights to" = "Tilgangsrettighet til";
|
||||
"For user" = "For bruker";
|
||||
"Any Authenticated User" = "Hvilken som heldst autentisert bruker";
|
||||
"List and see this folder" = "Vis og se i mappen";
|
||||
"Any Authenticated User" = "Hvilken som helst autentisert bruker";
|
||||
"View this folder" = "Vis denne mappen";
|
||||
"Read mails from this folder" = "Les meldinger fra denne mappen";
|
||||
"Mark mails read and unread" = "Markere meldinger, leste og uleste";
|
||||
"Modify the flags of the mails in this folder" = "Endre flagg til meldingene i denne mappen";
|
||||
@@ -90,11 +110,12 @@
|
||||
"To" = "Til";
|
||||
"Cc" = "Kopi";
|
||||
"Bcc" = "Blindkopi";
|
||||
"Reply-To" = "Svar-til";
|
||||
"Reply-To" = "Svar-til";
|
||||
"Add address" = "Legg til adresse";
|
||||
"Body" = "Kropp";
|
||||
"Body" = "Format";
|
||||
"Open" = "Åpne";
|
||||
"Select All" = "Velg alle";
|
||||
"Select Message" = "Velg melding ";
|
||||
"Attach Web Page..." = "Legg til nettside...";
|
||||
"file" = "fil";
|
||||
"files" = "filer";
|
||||
@@ -106,9 +127,13 @@
|
||||
"Edit Draft..." = "Rediger utkast...";
|
||||
"Load Images" = "Last inn bilder";
|
||||
"Return Receipt" = "Returkvittering";
|
||||
"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?";
|
||||
"Choose which identity to send this message from" = "Velg hvilken identitet du vil sende denne meldingen fra";
|
||||
"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "Avsenderen av denne meldingen har bedt om å bli varslet når du leser meldingen. Ønsker du å varsle avsenderen?";
|
||||
"Return Receipt (displayed) - %@"= "Returkvittering (vist) - %@";
|
||||
"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." = "Dette er en returkvittering for e-posten du sendte til %@.\n\nMerk: Denne returkvitteringen forteller bare at meldingen ble vist hos mottaker. Det er ingen garanti at mottaker har lest eller forstått innholdet i e-postmeldingen.";
|
||||
"Security" = "Sikkerhet";
|
||||
"Sign" = "Signer";
|
||||
"Encrypt" = "Kryptér";
|
||||
"Priority" = "Prioritet";
|
||||
"highest" = "Høyest";
|
||||
"high" = "Høy";
|
||||
@@ -147,12 +172,22 @@
|
||||
"Mark Read" = "Merk som lest";
|
||||
"Untitled" = "Uten emne";
|
||||
|
||||
/* Filter option in messages list */
|
||||
"Show unread messages only" = "Vis kun uleste meldinger ";
|
||||
|
||||
/* Filter option in messages list */
|
||||
"Show flagged messages only" = "Vis kun flaggede meldinger";
|
||||
|
||||
/* Aria label for icon of labels */
|
||||
"Filtered by label" = "Filtrert etter etikett ";
|
||||
|
||||
/* Tree */
|
||||
"SentFolderName" = "Sendt";
|
||||
"TrashFolderName" = "Søppel";
|
||||
"TrashFolderName" = "Papirkurv";
|
||||
"InboxFolderName" = "Innboks";
|
||||
"DraftsFolderName" = "Kladder";
|
||||
"JunkFolderName" = "Søppelpost";
|
||||
"TemplatesFolderName" = "Maler";
|
||||
"SieveFolderName" = "Filtre";
|
||||
"Folders" = "Mapper"; /* title line */
|
||||
|
||||
@@ -161,6 +196,7 @@
|
||||
|
||||
/* Address Popup menu */
|
||||
"Add to Address Book..." = "Legg til adressebok...";
|
||||
"Successfully created card" = "Kortet er opprettet";
|
||||
"Compose Mail To" = "Skriv e-post til";
|
||||
"Create Filter From Message..." = "Opprett filter fra en melding...";
|
||||
|
||||
@@ -205,10 +241,22 @@
|
||||
"View Message Source" = "Vis meldingskilde";
|
||||
|
||||
/* Message view "more" menu: create an event from message */
|
||||
"Convert To Event" = "Convert To Event";
|
||||
"Convert To Event" = "Konverter til hendelse";
|
||||
|
||||
/* Message view "more" menu: create a task from message */
|
||||
"Convert To Task" = "Convert To Task";
|
||||
"Convert To Task" = "Konverter til oppgave";
|
||||
|
||||
/* Message view "more" menu: download message as an eml file */
|
||||
"Download message" = "Last ned melding";
|
||||
|
||||
/* Message view "more" menu: download message as a zip archive */
|
||||
"Download message (zip)" = "Last ned melding (zip)";
|
||||
|
||||
/* Message view "more" menu: download all attachments as a zip archive */
|
||||
"Download all attachments" = "Last ned alle vedlegg ";
|
||||
|
||||
/* Filename prefix when downloading all attachments as a zip archive */
|
||||
"attachments" = "vedlegg";
|
||||
|
||||
"Print..." = "Skriv ut...";
|
||||
"Delete Message" = "Slett melding";
|
||||
@@ -217,14 +265,50 @@
|
||||
"Mark the selected messages as not junk" = "Marker de valgte meldingene som søppel.";
|
||||
|
||||
/* Text appended to the recipients list when there are too many recipients */
|
||||
"and %{0} more..." = "and %{0} more...";
|
||||
"and %{0} more..." = "og %{0} mer...";
|
||||
|
||||
/* Button label to hide extended list of recipients */
|
||||
"Hide" = "Hide";
|
||||
"Hide" = "Skjul";
|
||||
|
||||
/* Number of selected messages in list */
|
||||
"selected" = "valgt";
|
||||
|
||||
/* Date formatting from one time to another time */
|
||||
"to_time" = "til";
|
||||
|
||||
/* Date formatting from one day to another day */
|
||||
"to_date" = "til";
|
||||
|
||||
/* Encrypted message notification */
|
||||
"This message is encrypted" = "Denne meldingen er kryptert";
|
||||
|
||||
/* Encrypted message but no certificate */
|
||||
"This message can't be decrypted. Please make sure you have uploaded your S/MIME certificate from the mail preferences module." = "Denne meldingen kan ikke dekrypteres. Sørg for at du har lastet opp S/MIME-sertifikatet fra e-postpreferansemodulen. ";
|
||||
|
||||
/* OpenSSL certificate error - unknown issuer */
|
||||
"certificate verify error" = "Kan ikke bekrefte signatur ";
|
||||
|
||||
/* OpenSSL certificate error - digest failure */
|
||||
"digest failure" = "Meldingen er endret";
|
||||
|
||||
/* OpenSSL reading error */
|
||||
"Error reading the certificate. Please install a new certificate." = "Feil ved lesing av sertifikatet. Installér et nytt sertifikat. ";
|
||||
|
||||
/* Trying to access a non-existent certificate */
|
||||
"No certificate associated to account." = "Ingen sertifikat knyttet til kontoen. ";
|
||||
|
||||
/* Invalid S/MIME signature */
|
||||
"Digital signature is not valid" = "Digital signatur er ikke gyldig";
|
||||
|
||||
/* Valid S/MIME signature */
|
||||
"Message is signed" = "Meldingen er signert";
|
||||
|
||||
/* Valid S/MIME signature but common name not found */
|
||||
"Message is signed but the certificate doesn't match the sender email address" = "Meldingen er signert, men sertifikatet samsvarer ikke med avsenderens e-postadresse. ";
|
||||
|
||||
/* Unknown error while validating message signature */
|
||||
"Digital signature is not valid" = "Digital signatur er ikke gyldig";
|
||||
|
||||
"This Folder" = "Denne mappen";
|
||||
|
||||
/* Label popup menu */
|
||||
@@ -260,9 +344,21 @@
|
||||
"Operation failed" = "Operasjonen mislyktes";
|
||||
"Quota" = "Kvote:";
|
||||
"quotasFormat" = "%{0}% brukt av %{1} MB";
|
||||
"messageQuotasFormat" = "%{0}% av %{1} msgs";
|
||||
"Unable to move/delete folder." = "Kan ikke flytte/slette mappe.";
|
||||
|
||||
/* Alternative operation when folder cannot be deleted */
|
||||
"The mailbox could not be moved to the trash folder. Would you like to delete it immediately?"
|
||||
= "Postkassen kunne ikke flyttes til papirkurven. Vil du slette den umiddelbart? ";
|
||||
|
||||
/* Confirmation message when deleting multiple messages */
|
||||
"Are you sure you want to delete the selected messages?" = "Are you sure you want to delete the selected messages?";
|
||||
"Are you sure you want to delete the selected messages?" = "Er du sikker på at du vil slette de markerte meldingene?";
|
||||
|
||||
/* Notification on the number of messages successfuly copied */
|
||||
"%{0} message(s) copied" = "%{0} melding(er) kopiert";
|
||||
|
||||
/* Notification on the number of messages successfuly movied */
|
||||
"%{0} message(s) moved" = "%{0} melding(er) flyttet ";
|
||||
|
||||
"Please select a message." = "Vennligst markér en melding.";
|
||||
"Please select a message to print." = "Vennligst markér en melding som skal skrives ut.";
|
||||
@@ -289,19 +385,35 @@
|
||||
= "Meldingene kunne ikke flyttes til søppelmappen. Vil du slette dem umiddelbart?";
|
||||
|
||||
/* Message editing */
|
||||
"Please specify a subject." = "Velg et emne ";
|
||||
"error_missingsubject" = "Meldingen manger emne. Vil du likevel sende meldingen?";
|
||||
"error_missingrecipients" = "Vennligst spesifiser minst én mottaker.";
|
||||
"Send Anyway" = "Send likevel";
|
||||
"Error while saving the draft" = "Problem ved lagring av utkast";
|
||||
|
||||
/* Error when emptying trash */
|
||||
"Unable to empty the trash folder." = "Kan ikke tømme papirkurven. ";
|
||||
|
||||
/* Error when emptying junk folder */
|
||||
"Unable to empty the junk folder." = "Kan ikke tømme søppelmappen.";
|
||||
|
||||
/* Error when uploading a file attachment */
|
||||
"Error while uploading the file \"%{0}\":" = "Problem ved opplasting av fil \"%{0}\":";
|
||||
"There is an active file upload. Closing the window will interrupt it." = "Det er en aktiv fil opplasting. Lukk vinduet for å avbryte den.";
|
||||
"Message is too big" = "Meldingen er for stor";
|
||||
|
||||
/* Appears while sending the message */
|
||||
"Sending" = "Sender";
|
||||
|
||||
/* Appears when the message is successfuly sent */
|
||||
"Sent" = "Sendt";
|
||||
|
||||
/* Message sending */
|
||||
"cannot send message: (smtp) all recipients discarded" = "Kan ikke sende melding: alle mottakeradresser er ugyldige.";
|
||||
"cannot send message (smtp) - recipients discarded" = "Kan ikke sende melding. Følgende mottakeradresser er ugyldige";
|
||||
"cannot send message: (smtp) error when connecting" = "Kan ikke sende melding: tilkoblingsproblem med SMTP-tjener.";
|
||||
"cannot sign email without certificate" = "Meldingen kan ikke signeres fordi det ikke er noe sertifikat knyttet til e-postkontoen. ";
|
||||
"cannot sign message because the certificate can't be read" = "Meldingen kan ikke signeres fordi sertifikatet knyttet til e-postkontoen ikke kan leses. ";
|
||||
"cannot sign message because the certificate doesn't include the specified sender address" = "Meldingen kan ikke signeres fordi avsenderadressen ikke er inkludert i sertifikatet knyttet til e-postkontoen. ";
|
||||
|
||||
/* Contacts list in mail editor */
|
||||
"Email" = "E-post";
|
||||
@@ -321,15 +433,20 @@
|
||||
"Set as Sent" = "Sett som sendt";
|
||||
"Set as Trash" = "Sett som søppel";
|
||||
|
||||
/* Set the folder as the one holding the Templates */
|
||||
"Set as Templates" = "Angi som Maler";
|
||||
|
||||
/* Set the folder as the one holding Junk mails */
|
||||
"Set as Junk" = "Set as Junk";
|
||||
"Set as Junk" = "Sett som Søppelpost";
|
||||
|
||||
"Sort" = "Sorter";
|
||||
"Order Received" = "Ordre Mottatt ";
|
||||
"Descending Order" = "Synkende rekkefølge";
|
||||
"Back" = "Tilbake";
|
||||
"Copy messages" = "Kopier meldinger";
|
||||
"More messages options" = "Flere meldingsalternativer";
|
||||
"Mark as Unread" = "Marker som ulest";
|
||||
"Mark as Read" = "Merk som Lest";
|
||||
"Closing Window ..." = "Lukker vindu ...";
|
||||
"Tried to send too many mails. Please wait." = "Forsøkte å sende for mange eposter. Vennligst vent.";
|
||||
"View Mail" = "Vis epost";
|
||||
@@ -339,4 +456,43 @@
|
||||
"More search options" = "Flere søk alternativer";
|
||||
"Your email has been saved" = "Eposten din har blitt lagret";
|
||||
"Your email has been sent" = "Eposten din har blitt sendt";
|
||||
"Folder compacted" = "Mappe komprimert";
|
||||
"Folder compacted" = "Mappe komprimert";
|
||||
|
||||
"New draft" = "Nytt utkast";
|
||||
"Create new draft with this template" = "Lag nytt utkast med denne malen ";
|
||||
|
||||
/* Advanced search */
|
||||
"Enter Subject" = "Legg til Emne";
|
||||
"Enter From" = "Legg til Fra";
|
||||
"Enter To" = "Legg til Til";
|
||||
"Enter Cc" = "Legg til Cc";
|
||||
"Enter Body" = "Legg til Body";
|
||||
"match" = "treff";
|
||||
"does not match" = "samsvarer ikke ";
|
||||
|
||||
/* Aria label for scope of search on messages */
|
||||
"Search scope" = "Søk";
|
||||
|
||||
/* Subscriptions Dialog */
|
||||
"Manage Subscriptions" = "Administrer abonnementer ";
|
||||
|
||||
/* Label of filter input field in subscriptions dialog */
|
||||
"Filter" = "Filtrer";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
/* Icon's label */
|
||||
"Create" = "Креирај";
|
||||
"Empty Trash" = "Испразни канту";
|
||||
"Empty Junk Folder" = "Испразни фолдер Непожељно";
|
||||
"Delete" = "Обриши";
|
||||
"Expunge" = "Избриши";
|
||||
"Forward" = "Проследи";
|
||||
@@ -73,8 +74,13 @@
|
||||
"An error occured while communicating with the mail server" = "Десила се грешка приликом контактирања поштнског сервера";
|
||||
|
||||
/* Mailbox actions */
|
||||
|
||||
/* Compact Folder success message */
|
||||
"Folder compacted" = "Директоријум је сабијен";
|
||||
|
||||
/* Empty Junk Folder success message */
|
||||
"Junk folder emptied" = "Директоријум Непожељно је испражњен";
|
||||
|
||||
/* Empty Trash success message */
|
||||
"Trash emptied" = "Канта за отпатке је испражњена";
|
||||
|
||||
@@ -82,7 +88,7 @@
|
||||
"Access rights to" = "Права приступа у";
|
||||
"For user" = "За корисника";
|
||||
"Any Authenticated User" = "Било који аутентификовани корисник";
|
||||
"List and see this folder" = "Прикажи и погледај овај директоријум";
|
||||
"View this folder" = "Прегледај овај директоријум";
|
||||
"Read mails from this folder" = "Прочитај пошту из овог директоријума";
|
||||
"Mark mails read and unread" = "Означи пошту прочитаном или непрочитаном";
|
||||
"Modify the flags of the mails in this folder" = "Измени заставице поште у овом директоријуму";
|
||||
@@ -166,12 +172,22 @@
|
||||
"Mark Read" = "Обележи прочитано";
|
||||
"Untitled" = "Без наслова";
|
||||
|
||||
/* Filter option in messages list */
|
||||
"Show unread messages only" = "Прикажи само непрочитанеј поруке";
|
||||
|
||||
/* Filter option in messages list */
|
||||
"Show flagged messages only" = "Прикажи само поруке означене заставицом";
|
||||
|
||||
/* Aria label for icon of labels */
|
||||
"Filtered by label" = "Филтрирано по ознаци";
|
||||
|
||||
/* Tree */
|
||||
"SentFolderName" = "Послато";
|
||||
"TrashFolderName" = "Канта";
|
||||
"InboxFolderName" = "Примљене";
|
||||
"DraftsFolderName" = "Недовршене";
|
||||
"JunkFolderName" = "Непожељне";
|
||||
"TemplatesFolderName" = "Шаблони";
|
||||
"SieveFolderName" = "Филтери";
|
||||
"Folders" = "Директоријуми"; /* title line */
|
||||
|
||||
@@ -230,6 +246,12 @@
|
||||
/* Message view "more" menu: create a task from message */
|
||||
"Convert To Task" = "Претвори у задатак";
|
||||
|
||||
/* Message view "more" menu: download message as an eml file */
|
||||
"Download message" = "Преузми поруку";
|
||||
|
||||
/* Message view "more" menu: download message as a zip archive */
|
||||
"Download message (zip)" = "Преузми поруку (зип)";
|
||||
|
||||
/* Message view "more" menu: download all attachments as a zip archive */
|
||||
"Download all attachments" = "Преузми све прилоге";
|
||||
|
||||
@@ -251,6 +273,12 @@
|
||||
/* Number of selected messages in list */
|
||||
"selected" = "изабрано";
|
||||
|
||||
/* Date formatting from one time to another time */
|
||||
"to_time" = "за";
|
||||
|
||||
/* Date formatting from one day to another day */
|
||||
"to_date" = "за";
|
||||
|
||||
/* Encrypted message notification */
|
||||
"This message is encrypted" = "Порука је енкриптована";
|
||||
|
||||
@@ -269,12 +297,15 @@
|
||||
/* Trying to access a non-existent certificate */
|
||||
"No certificate associated to account." = "Нема сертификата повезаног са налогом.";
|
||||
|
||||
/* Invalid message signature */
|
||||
/* Invalid S/MIME signature */
|
||||
"Digital signature is not valid" = "Дигитални потпис није валидан";
|
||||
|
||||
/* Valid message signature */
|
||||
/* Valid S/MIME signature */
|
||||
"Message is signed" = "Порука је потписана";
|
||||
|
||||
/* Valid S/MIME signature but common name not found */
|
||||
"Message is signed but the certificate doesn't match the sender email address" = "Порука је потписана али сертификат се не поклапа са епошта адресом пошиљаоца";
|
||||
|
||||
/* Unknown error while validating message signature */
|
||||
"Digital signature is not valid" = "Дигитални потпис није валидан";
|
||||
|
||||
@@ -313,6 +344,7 @@
|
||||
"Operation failed" = "Операција није успела";
|
||||
"Quota" = "Квота:";
|
||||
"quotasFormat" = "%{0}% искоришћено од %{1} МБ";
|
||||
"messageQuotasFormat" = "%{0}% од %{1} порука";
|
||||
"Unable to move/delete folder." = "Не могу да преместим/обришем директоријум.";
|
||||
|
||||
/* Alternative operation when folder cannot be deleted */
|
||||
@@ -359,6 +391,12 @@
|
||||
"Send Anyway" = "Свеједно пошаљи";
|
||||
"Error while saving the draft" = "Грешка при чувању недовршене поруке";
|
||||
|
||||
/* Error when emptying trash */
|
||||
"Unable to empty the trash folder." = "Немогуће је испразнити директоријум Канта.";
|
||||
|
||||
/* Error when emptying junk folder */
|
||||
"Unable to empty the junk folder." = "Немогуће је испразнити директоријум Непожељно.";
|
||||
|
||||
/* Error when uploading a file attachment */
|
||||
"Error while uploading the file \"%{0}\":" = "Грешка при отпремаљу документа \"%{0}\":";
|
||||
"There is an active file upload. Closing the window will interrupt it." = "У току је отпремање документа. Ако затворите прозор прекинућете отпремање.";
|
||||
@@ -373,6 +411,9 @@
|
||||
"cannot send message: (smtp) all recipients discarded" = "Не могу послати поруку: ни један прималац није валидан.";
|
||||
"cannot send message (smtp) - recipients discarded" = "Не могу послати поруку. Следеће адресе нису валидне";
|
||||
"cannot send message: (smtp) error when connecting" = "Не могу послати поруку: грешка при повезивању на СМТП сервер.";
|
||||
"cannot sign email without certificate" = "Ова порука не може бити потписана јер не постоји сертификат који је асоциран са овим пошта налогом.";
|
||||
"cannot sign message because the certificate can't be read" = "Ова порука не може бити потписана јер сертификат који је асоциран са овим пошта налогом је нечитљив.";
|
||||
"cannot sign message because the certificate doesn't include the specified sender address" = "Ова порука не може бити потписана јер адреса пошиљаоца није укључена у сертификат асоциран са овим пошта налогом.";
|
||||
|
||||
/* Contacts list in mail editor */
|
||||
"Email" = "Епошта";
|
||||
@@ -392,6 +433,9 @@
|
||||
"Set as Sent" = "Постави као послато";
|
||||
"Set as Trash" = "Постави као канта";
|
||||
|
||||
/* Set the folder as the one holding the Templates */
|
||||
"Set as Templates" = "Подеси као Шаблоне";
|
||||
|
||||
/* Set the folder as the one holding Junk mails */
|
||||
"Set as Junk" = "Постави као непожељно";
|
||||
|
||||
@@ -414,6 +458,9 @@
|
||||
"Your email has been sent" = "Ваше еписмо је послато";
|
||||
"Folder compacted" = "Директоријум је сабијен";
|
||||
|
||||
"New draft" = "Нови нацрт";
|
||||
"Create new draft with this template" = "Креирај нови нацрт са овим шаблоном";
|
||||
|
||||
/* Advanced search */
|
||||
"Enter Subject" = "Унесите тему";
|
||||
"Enter From" = "Унесите Од кога";
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
request = [context request];
|
||||
params = [[request contentAsString] objectFromJSONString];
|
||||
folderName = [params objectForKey: @"name"];
|
||||
folderName = [[params objectForKey: @"name"] stringWithoutHTMLInjection: YES];
|
||||
if ([folderName length] > 0)
|
||||
{
|
||||
encodedFolderName = [folderName stringByEncodingImap4FolderName];
|
||||
@@ -142,7 +142,7 @@
|
||||
// Retrieve new folder name from JSON payload
|
||||
request = [context request];
|
||||
params = [[request contentAsString] objectFromJSONString];
|
||||
newFolderName = [params objectForKey: @"name"];
|
||||
newFolderName = [[params objectForKey: @"name"] stringWithoutHTMLInjection: YES];
|
||||
|
||||
if (!newFolderName || [newFolderName length] == 0)
|
||||
{
|
||||
|
||||
@@ -976,7 +976,7 @@
|
||||
[msg addObject: [NSNumber numberWithBool: [self isMessageFlagged]]];
|
||||
|
||||
// Subject
|
||||
[msg addObject: [self messageSubject]];
|
||||
[msg addObject: [[self messageSubject] stringWithoutHTMLInjection: YES]];
|
||||
|
||||
// From
|
||||
from = [[message objectForKey: @"envelope"] from];
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#import <SOGo/NSString+Utilities.h>
|
||||
#import <SOGo/NSDictionary+Utilities.h>
|
||||
#import <SOGo/SOGoDomainDefaults.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserFolder.h>
|
||||
#import <SOGo/SOGoUserSettings.h>
|
||||
@@ -582,6 +583,20 @@
|
||||
return _currentLabel;
|
||||
}
|
||||
|
||||
- (BOOL) isMailSharingEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
result = YES;
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if (nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingMail]) {
|
||||
result = NO;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end /* UIxMailMainFrame */
|
||||
|
||||
@interface UIxMailFolderTemplate : UIxComponent
|
||||
|
||||
@@ -347,7 +347,7 @@ static NSString *mailETag = nil;
|
||||
if ([self formattedDate])
|
||||
[data setObject: [self formattedDate] forKey: @"date"];
|
||||
if ([self messageSubject])
|
||||
[data setObject: [self messageSubject] forKey: @"subject"];
|
||||
[data setObject: [[self messageSubject] stringWithoutHTMLInjection: YES] forKey: @"subject"];
|
||||
if ((addresses = [addressFormatter dictionariesForArray: [co fromEnvelopeAddresses]]))
|
||||
[data setObject: addresses forKey: @"from"];
|
||||
if ((addresses = [addressFormatter dictionariesForArray: [co toEnvelopeAddresses]]))
|
||||
|
||||
@@ -6,11 +6,28 @@
|
||||
"Domain" = "Domæne";
|
||||
"Remember username" = "Husk brugernavn";
|
||||
"Connect" = "Tilslut";
|
||||
|
||||
/* Appears while authentication is in progress */
|
||||
"Authenticating" = "Godkendelse";
|
||||
|
||||
/* Appears when authentication succeeds */
|
||||
"Welcome" = "Velkommen";
|
||||
|
||||
"Authentication Failed" = "Godkendelse mislykkedes";
|
||||
"Wrong username or password." = "Forkert brugernavn eller adgangskode.";
|
||||
"Retry" = "Prøv igen";
|
||||
"Login failed due to unhandled error case:" = "Login mislykkedes på grund af denne fejl:";
|
||||
"cookiesNotEnabled" = "Du kan ikke logge ind fordi din browsers cookies er slået fra. Du skal aktivere cookies i din browsers indstillinger og derefter prøve igen.";
|
||||
"browserNotCompatible" = "Vi har registreret, at din browsers version ikke understøttes på denne hjemmeside. Vores anbefaling er at bruge Firefox. Klik på linket nedenfor for at downloade den nyeste version af denne browser.";
|
||||
"alternativeBrowsers" = "Alternativt kan du også bruge følgende kompatible browsere";
|
||||
"alternativeBrowserSafari" = "Alternativt kan du også bruge Safari.";
|
||||
|
||||
/* 2FA */
|
||||
"Verification Code" = "Bekræftelseskode";
|
||||
"Enter the 6-digit verification code from your TOTP application." = "Indtast den 6-cifrede bekræftelseskode fra din TOTP-applikation.";
|
||||
"You provided an invalid TOTP key." = "Du har angivet en ugyldig TOTP-nøgle.";
|
||||
"Two-factor authentication has been disabled. Visit the Preferences module to restore two-factor authentication and reconfigure your TOTP application." = "To-faktor-godkendelse er blevet deaktiveret. Gå til indstillinger for at gendanne to-faktor-godkendelse og genkonfigurere din TOTP-applikation";
|
||||
|
||||
"Download" = "Download";
|
||||
"Language" = "Sprog";
|
||||
"choose" = "Vælg ...";
|
||||
@@ -22,7 +39,6 @@
|
||||
"ChineseChina" = "简体中文";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Croatian" = "Hrvatski";
|
||||
"Croatian" = "Hrvatski";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -58,6 +74,7 @@
|
||||
"TurkishTurkey" = "Türkçe (Türkiye)";
|
||||
"Ukrainian" = "Українська";
|
||||
"Welsh" = "Cymraeg";
|
||||
|
||||
"About" = "Om";
|
||||
"AboutBox" = "Developed by Inverse, SOGo is a fully-featured groupware server with a focus on scalability and simplicity.<br/><br/>⏎ SOGo provides a rich AJAX-based Web interface and supports multiple native clients through the use of standard protocols such as CalDAV and CardDAV.<br/><br/>⏎ SOGo is distributed under the <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPL</a> version 2 or later and parts are distributed under the GNU LGPL version 2. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.<br/><br/>⏎ See <a href=\"http://www.sogo.nu/en/support/community.html\">this page</a> for various support options.";
|
||||
"Your account was locked due to too many failed attempts." = "Din konto er låst på grund af for mange mislykkede forsøg.";
|
||||
@@ -90,3 +107,22 @@
|
||||
"Confirmation" = "Bekræftelse";
|
||||
"Cancel" = "Annullér";
|
||||
"Please wait..." = "Vent venligst ...";
|
||||
"Close" = "Luk";
|
||||
"Missing search parameter" = "Manglende søgeparameter";
|
||||
"Missing type parameter" = "Manglende typeparameter";
|
||||
|
||||
/* Password Recovery */
|
||||
"Secondary e-mail" = "Sekundær e-mail";
|
||||
"Answer" = "Svar";
|
||||
"Password lost" = "Adgangskode mistet";
|
||||
"No password recovery method has been defined for this user" = "Der er ikke defineret nogen metode til gendannelse af adgangskoden for denne bruger";
|
||||
"Invalid secret question answer" = "Ugyldigt hemmeligt spørgsmålssvar";
|
||||
"Next" = "Næste";
|
||||
"Back" = "Tilbage";
|
||||
"Please enter a new password below" = "Venligst indtast en ny adgangskoden nedenfor";
|
||||
"A link will be sent to %{0}" = "Et link vil blive sendt til %{0}";
|
||||
"A password reset link has been sent, please check your recovery e-mail mailbox and click on the link" = "Et link til nulstilling af adgangskode er blevet sendt. Tjek venligst din indbakke på din gendannelses e-mail";
|
||||
"Invalid configuration for email password recovery" = "Ugyldig konfiguration til gendannelse af e-mail adgangskode";
|
||||
"Password recovery email in error" = "E-mail til gendannelse af adgangskode fejler";
|
||||
"Password reset" = "Adgangskode nulstilling";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Hej %{0},\nDer var en anmodning om ændring af din adgangskode!\n\nHvis du ikke har anmodet om denne ændret, kan du ignorerer denne e-mail.\n\nEllers, venligst klik på linket for at ændre din adgangskode: %{1}";
|
||||
@@ -113,3 +113,19 @@ See <a href=\"http://www.sogo.nu/en/support/community.html\">this page</a> for v
|
||||
"Close" = "Close";
|
||||
"Missing search parameter" = "Missing search parameter";
|
||||
"Missing type parameter" = "Missing type parameter";
|
||||
|
||||
/* Password Recovery */
|
||||
"Secondary e-mail" = "Secondary e-mail";
|
||||
"Answer" = "Answer";
|
||||
"Password lost" = "Password lost";
|
||||
"No password recovery method has been defined for this user" = "No password recovery method has been defined for this user";
|
||||
"Invalid secret question answer" = "Invalid secret question answer";
|
||||
"Next" = "Next";
|
||||
"Back" = "Back";
|
||||
"Please enter a new password below" = "Please enter a new password below";
|
||||
"A link will be sent to %{0}" = "A link will be sent to %{0}";
|
||||
"A password reset link has been sent, please check your recovery e-mail mailbox and click on the link" = "A password reset link has been sent, please check your recovery e-mail mailbox and click on the link";
|
||||
"Invalid configuration for email password recovery" = "Invalid configuration for email password recovery";
|
||||
"Password recovery email in error" = "Password recovery email in error";
|
||||
"Password reset" = "Password reset";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}";
|
||||
@@ -110,3 +110,19 @@
|
||||
"Close" = "Fermer";
|
||||
"Missing search parameter" = "Paramètre de recherche manquant";
|
||||
"Missing type parameter" = "Paramètre de type manquant";
|
||||
|
||||
/* Password Recovery */
|
||||
"Secondary e-mail" = "E-mail secondaire";
|
||||
"Answer" = "Réponse";
|
||||
"Password lost" = "Mot de passe perdu";
|
||||
"No password recovery method has been defined for this user" = "Aucune méthode de récupération de mot de passe n'a été définie pour cet utilisateur";
|
||||
"Invalid secret question answer" = "La réponse à la question secrète n'est pas valide";
|
||||
"Next" = "Suivant";
|
||||
"Back" = "Retour";
|
||||
"Please enter a new password below" = "Veuillez saisir un nouveau mot de passe ci-dessous";
|
||||
"A link will be sent to %{0}" = "Un lien va être envoyé à %{0}";
|
||||
"A password reset link has been sent, please check your recovery e-mail mailbox and click on the link" = "Un lien vous permettant de redéfinir votre mot de passe vous a été envoyé, veuillez vérifier votre boite e-mail de récupération";
|
||||
"Invalid configuration for email password recovery" = "Configuration invvalide pour la récupération de mot de passe par e-mail";
|
||||
"Password recovery email in error" = "Erreur lors de l'envoi de l'email de récupération";
|
||||
"Password reset" = "Réinitialisation de mot de passe";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Bonjour %{0},\nUne demande de changement de mot de passe a été initiée.\n\nSi vous n'êtes pas à l'origine de cet e-mail, n'en tenez pas compte.\n\nSi vous en êtes bien à l'origine, veuillez cliquer sur le lien ci-dessous pour modifier votre mot de passe: %{1}";
|
||||
@@ -6,11 +6,28 @@
|
||||
"Domain" = "Domene";
|
||||
"Remember username" = "Husk brukernavn";
|
||||
"Connect" = "Koble til";
|
||||
|
||||
/* Appears while authentication is in progress */
|
||||
"Authenticating" = "Autentiserer";
|
||||
|
||||
/* Appears when authentication succeeds */
|
||||
"Welcome" = "Velkommen";
|
||||
|
||||
"Authentication Failed" = "Autentisering feilet";
|
||||
"Wrong username or password." = "Feil brukernavn eller passord.";
|
||||
"Retry" = "Prøv på ny";
|
||||
"Login failed due to unhandled error case:" = "Pålogging feilet på grunn av ubehandlet feiltilfelle: ";
|
||||
"cookiesNotEnabled" = "Du kan ikke logge inn fordi nettleser ikke har aktivert infokapsler (cookies). Endre innstillinger i nettleseren din slik at infokapsler er tillatt.";
|
||||
"browserNotCompatible" = "Versjonen av nettleseren du anvender støttes ikke av denne webmailen. Vi anbefaler at du bruker Firefox. Klikk på lenken under for å laste ned den siste versjonen av Firefox.";
|
||||
"alternativeBrowsers" = "Alternativt kan du også forsøke følgende kompatible nettlesere";
|
||||
"alternativeBrowserSafari" = "Alternativt kan du også bruke Safari.";
|
||||
|
||||
/* 2FA */
|
||||
"Verification Code" = "Bekreftelsekode ";
|
||||
"Enter the 6-digit verification code from your TOTP application." = "Skriv inn den 6-sifrede bekreftelseskoden fra TOTP-applikasjonen. ";
|
||||
"You provided an invalid TOTP key." = "Du oppgav en ugyldig kode ";
|
||||
"Two-factor authentication has been disabled. Visit the Preferences module to restore two-factor authentication and reconfigure your TOTP application." = "To-faktor autentisering er deaktivert. Gå til Innstillinger for å gjenopprette to-faktor autentisering og konefigurér TOTP-applikasjonen. ";
|
||||
|
||||
"Download" = "Last ned";
|
||||
"Language" = "Språk";
|
||||
"choose" = "Velg ...";
|
||||
@@ -22,7 +39,6 @@
|
||||
"ChineseChina" = "简体中文";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Croatian" = "Hrvatski";
|
||||
"Croatian" = "Hrvatski";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -58,6 +74,7 @@
|
||||
"TurkishTurkey" = "Türkçe (Türkiye)";
|
||||
"Ukrainian" = "Українська";
|
||||
"Welsh" = "Cymraeg";
|
||||
|
||||
"About" = "Om";
|
||||
"AboutBox" = "Utviklet av Inverse, SOGo er en komplett gruppevaretjener med fokus på skalerbarhet og enkel bruk.<br/><br/>\nSOGo tilbyr ett rikt AJAX-basert webgrensesnitt, og støtter mange 3. parts klienter gjennom standardprotokoller som CalDAV og CardDAV.<br/><br/>\nSOGo er distribuert under <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPL</a> versjon 2 eller senere, og enkelte deler er distribuert under GNU LGPL versjon 2. Dette er fri programvare: du står fritt til å endre og videredistribuere den. Den kommer med ABSOLUTT INGEN GARANTI, i det omfang som er tillatt av anvendelig lov. Sjekk <a href=\"http://www.sogo.nu/en/support/community.html\">denne siden</a> for support-muligheter.";
|
||||
"Your account was locked due to too many failed attempts." = "Din konto har blitt låst på grunn av for mange mislykkede innlogginger.";
|
||||
@@ -90,3 +107,22 @@
|
||||
"Confirmation" = "Bekreftelse";
|
||||
"Cancel" = "Avbryt";
|
||||
"Please wait..." = "Vennligst vent...";
|
||||
"Close" = "Lukk";
|
||||
"Missing search parameter" = "Mangler søkeparameter ";
|
||||
"Missing type parameter" = "Mangler typeparameter";
|
||||
|
||||
/* Password Recovery */
|
||||
"Secondary e-mail" = "Sekundær e-post";
|
||||
"Answer" = "Svar";
|
||||
"Password lost" = "Passord tapt";
|
||||
"No password recovery method has been defined for this user" = "Ingen metode for tilbakestilling av passord er definert for denne brukeren";
|
||||
"Invalid secret question answer" = "Ugyldig svar på hemmelig spørsmål";
|
||||
"Next" = "Neste";
|
||||
"Back" = "Tilbake";
|
||||
"Please enter a new password below" = "Vennligst skriv nytt passord under";
|
||||
"A link will be sent to %{0}" = "En link vil bli sendt til %{0}";
|
||||
"A password reset link has been sent, please check your recovery e-mail mailbox and click on the link" = "Link for tilbakestilling av passord har blitt sendt. Sjekk din innboks og klikk på linken. ";
|
||||
"Invalid configuration for email password recovery" = "Ugyldig konfigurasjon for tilbakestilling av passord ";
|
||||
"Password recovery email in error" = "Feil med e-post for tilbakestilling av passord";
|
||||
"Password reset" = "Tilbakestill passord";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Hei %{0},\nDet har kommet en forespørsel om å endre ditt passord!\n\nHvis du ikke sendte denne forespørselen, kan du se bort i fra denne e-posten. \n\nDersom du har bedt om passordendring, vennligst klikk på linken for å endre ditt passord: %{1}";
|
||||
+248
-12
@@ -49,6 +49,8 @@
|
||||
#import <SOGo/SOGoUserManager.h>
|
||||
#import <SOGo/SOGoUserSettings.h>
|
||||
#import <SOGo/SOGoWebAuthenticator.h>
|
||||
#import <SOGo/SOGoEmptyAuthenticator.h>
|
||||
#import <SOGo/SOGoMailer.h>
|
||||
|
||||
#if defined(MFA_CONFIG)
|
||||
#include <liboath/oath.h>
|
||||
@@ -56,6 +58,8 @@
|
||||
|
||||
#import "SOGoRootPage.h"
|
||||
|
||||
static const NSString *kJwtKey = @"jwt";
|
||||
|
||||
@implementation SOGoRootPage
|
||||
|
||||
- (id) init
|
||||
@@ -626,6 +630,11 @@
|
||||
return ([[self loginDomains] count] > 0);
|
||||
}
|
||||
|
||||
- (BOOL) hasPasswordRecovery
|
||||
{
|
||||
return [[SOGoSystemDefaults sharedSystemDefaults] isPasswordRecoveryEnabled];
|
||||
}
|
||||
|
||||
- (void) setItem: (id) _item
|
||||
{
|
||||
ASSIGN (item, _item);
|
||||
@@ -671,7 +680,7 @@
|
||||
|
||||
- (WOResponse *) changePasswordAction
|
||||
{
|
||||
NSString *username, *domain, *password, *newPassword, *value;
|
||||
NSString *username, *domain, *password, *newPassword, *value, *token;
|
||||
WOCookie *authCookie, *xsrfCookie;
|
||||
NSDictionary *message;
|
||||
NSArray *creds;
|
||||
@@ -681,6 +690,7 @@
|
||||
SOGoWebAuthenticator *auth;
|
||||
WOResponse *response;
|
||||
WORequest *request;
|
||||
BOOL passwordRecovery;
|
||||
|
||||
request = [context request];
|
||||
message = [[request contentAsString] objectFromJSONString];
|
||||
@@ -689,6 +699,7 @@
|
||||
value = [[context request] cookieValueForKey: [auth cookieNameInContext: context]];
|
||||
creds = nil;
|
||||
username = nil;
|
||||
passwordRecovery = NO;
|
||||
|
||||
if (value)
|
||||
{
|
||||
@@ -711,6 +722,12 @@
|
||||
newPassword = [message objectForKey: @"newPassword"];
|
||||
// overwrite the value from the session to compare the actual input
|
||||
password = [message objectForKey: @"oldPassword"];
|
||||
// get session id for password recovery
|
||||
token = [message objectForKey: @"token"];
|
||||
// If no old password but sessionid set, this is password recovery mode
|
||||
if ((!password || password == [NSNull null]) && token) {
|
||||
passwordRecovery = YES;
|
||||
}
|
||||
|
||||
// Validate required parameters
|
||||
if (!username)
|
||||
@@ -718,7 +735,7 @@
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"Missing 'username' parameter"];
|
||||
}
|
||||
else if (!password)
|
||||
else if (!password && !passwordRecovery)
|
||||
{
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"Missing 'oldPassword' parameter"];
|
||||
@@ -737,6 +754,8 @@
|
||||
inDomain: domain
|
||||
oldPassword: password
|
||||
newPassword: newPassword
|
||||
passwordRecovery: passwordRecovery
|
||||
token: token
|
||||
perr: &error])
|
||||
{
|
||||
if (creds)
|
||||
@@ -754,17 +773,19 @@
|
||||
}
|
||||
|
||||
response = [self responseWith204];
|
||||
authCookie = [auth cookieWithUsername: username
|
||||
andPassword: newPassword
|
||||
inContext: context];
|
||||
[response addCookie: authCookie];
|
||||
if (!passwordRecovery) {
|
||||
authCookie = [auth cookieWithUsername: username
|
||||
andPassword: newPassword
|
||||
inContext: context];
|
||||
[response addCookie: authCookie];
|
||||
|
||||
// We update the XSRF protection cookie
|
||||
creds = [auth parseCredentials: [authCookie value]];
|
||||
xsrfCookie = [WOCookie cookieWithName: @"XSRF-TOKEN"
|
||||
value: [[SOGoSession valueForSessionKey: [creds lastObject]] asSHA1String]];
|
||||
[xsrfCookie setPath: [NSString stringWithFormat: @"/%@/", [request applicationName]]];
|
||||
[response addCookie: xsrfCookie];
|
||||
// We update the XSRF protection cookie
|
||||
creds = [auth parseCredentials: [authCookie value]];
|
||||
xsrfCookie = [WOCookie cookieWithName: @"XSRF-TOKEN"
|
||||
value: [[SOGoSession valueForSessionKey: [creds lastObject]] asSHA1String]];
|
||||
[xsrfCookie setPath: [NSString stringWithFormat: @"/%@/", [request applicationName]]];
|
||||
[response addCookie: xsrfCookie];
|
||||
}
|
||||
}
|
||||
else
|
||||
response = [self _responseWithLDAPPolicyError: error];
|
||||
@@ -773,6 +794,221 @@
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* This action get password recovery data for specified user (mode, secret question, recovery email)
|
||||
* @return Response
|
||||
*/
|
||||
- (WOResponse *) passwordRecoveryAction
|
||||
{
|
||||
NSString *username, *domain;
|
||||
NSDictionary *jsonData, *message;
|
||||
WORequest *request;
|
||||
SOGoUserManager *um;
|
||||
|
||||
username = nil;
|
||||
domain = nil;
|
||||
request = [context request];
|
||||
|
||||
message = [[request contentAsString] objectFromJSONString];
|
||||
username = [message objectForKey: @"userName"];
|
||||
domain = [message objectForKey: @"domain"];
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
|
||||
|
||||
jsonData = [um getPasswordRecoveryInfosForUsername: username domain: domain];
|
||||
return [self responseWithStatus: 200
|
||||
andJSONRepresentation: jsonData];
|
||||
}
|
||||
|
||||
/**
|
||||
* This action generates JWT token and send password recovery mail
|
||||
* Then the JWT token is passed and controlled to changePassword (when clicking on link)
|
||||
* @return Response
|
||||
*/
|
||||
- (WOResponse *) passwordRecoveryEmailAction
|
||||
{
|
||||
NSString *username, *domain, *mode, *uid, *mailDomain, *fromEmail, *toEmail, *jwtToken, *url, *mailContent;
|
||||
NSDictionary *message, *info;
|
||||
WORequest *request;
|
||||
SOGoUserManager *um;
|
||||
SOGoUserDefaults *userDefaults;
|
||||
WOResponse *response;
|
||||
SOGoDomainDefaults *dd;
|
||||
SOGoUser *ownerUser;
|
||||
SOGoMailer *mailer;
|
||||
NSException *e;
|
||||
|
||||
username = nil;
|
||||
domain = nil;
|
||||
request = [context request];
|
||||
message = [[request contentAsString] objectFromJSONString];
|
||||
username = [message objectForKey: @"userName"];
|
||||
domain = [message objectForKey: @"domain"];
|
||||
mailDomain = [message objectForKey: @"mailDomain"];
|
||||
mode = [message objectForKey: @"mode"];
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
jwtToken = [request formValueForKey:@"token"];
|
||||
|
||||
if (!mode && jwtToken) {
|
||||
response = [self _standardDefaultAction];
|
||||
} else if ([mode isEqualToString: SOGoPasswordRecoverySecondaryEmail]) {
|
||||
if (mailDomain && username) {
|
||||
// Email recovery
|
||||
|
||||
// Create email from
|
||||
fromEmail = [NSString stringWithFormat:@"noreply@%@", mailDomain];
|
||||
|
||||
// Get password recovery email
|
||||
info = [um contactInfosForUserWithUIDorEmail: username];
|
||||
uid = [info objectForKey: @"c_uid"];
|
||||
userDefaults = [SOGoUserDefaults defaultsForUser: uid
|
||||
inDomain: domain];
|
||||
toEmail = [userDefaults passwordRecoverySecondaryEmail];
|
||||
|
||||
if (toEmail) {
|
||||
// Generate token
|
||||
jwtToken = [um generateAndSavePasswordRecoveryTokenWithUid: uid username: username domain: domain];
|
||||
|
||||
// Send mail
|
||||
ownerUser = [SOGoUser userWithLogin: username];
|
||||
dd = [ownerUser domainDefaults];
|
||||
mailer = [SOGoMailer mailerWithDomainDefaults: dd];
|
||||
url = [NSString stringWithFormat:@"%@%@?token=%@"
|
||||
, [[request headers] objectForKey:@"origin"]
|
||||
, [request uri]
|
||||
, jwtToken];
|
||||
|
||||
mailContent = [NSString stringWithFormat: @"Subject: %@\n\n%@"
|
||||
, [self labelForKey: @"Password reset"]
|
||||
, [self labelForKey: @"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}"]];
|
||||
// Replace message placeholders
|
||||
mailContent = [mailContent stringByReplacingOccurrencesOfString: @"%{0}" withString: username];
|
||||
mailContent = [mailContent stringByReplacingOccurrencesOfString: @"%{1}" withString: url];
|
||||
e = [mailer sendMailData: [mailContent dataUsingEncoding: NSUTF8StringEncoding]
|
||||
toRecipients: [NSArray arrayWithObjects: toEmail, nil]
|
||||
sender: fromEmail
|
||||
withAuthenticator: [SOGoEmptyAuthenticator sharedSOGoEmptyAuthenticator]
|
||||
inContext: [self context]];
|
||||
|
||||
if (!e) {
|
||||
response = [self responseWithStatus: 200
|
||||
andJSONRepresentation: nil];
|
||||
} else {
|
||||
[self logWithFormat: @"Password recovery exception for user %@ : %@", uid, [e reason]];
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"Password recovery email in error"];
|
||||
}
|
||||
} else {
|
||||
[self logWithFormat: @"No recovery email found for password recovery for user %@", uid];
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"Invalid configuration for email password recovery"];
|
||||
}
|
||||
} else {
|
||||
[self logWithFormat: @"No user domain found for password recovery"];
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"Invalid configuration for email password recovery"];
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* This action check secret question answer and generates JWT token.
|
||||
* Then the JWT token is passed and controlled to changePassword
|
||||
* @return Response
|
||||
*/
|
||||
- (WOResponse *) passwordRecoveryCheckAction
|
||||
{
|
||||
NSString *username, *domain, *token, *mode;
|
||||
NSDictionary *message;
|
||||
WORequest *request;
|
||||
SOGoUserManager *um;
|
||||
WOResponse *response;
|
||||
|
||||
username = nil;
|
||||
domain = nil;
|
||||
request = [context request];
|
||||
message = [[request contentAsString] objectFromJSONString];
|
||||
username = [message objectForKey: @"userName"];
|
||||
domain = [message objectForKey: @"domain"];
|
||||
mode = [message objectForKey: @"mode"];
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
|
||||
if ([mode isEqualToString: SOGoPasswordRecoveryQuestion]) {
|
||||
// Secret question recovery
|
||||
token = [um getTokenAndCheckPasswordRecoveryDataForUsername: username domain: domain withData: message];
|
||||
if (!token) {
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"Invalid secret question answer"];
|
||||
} else {
|
||||
response = [self responseWithStatus: 200
|
||||
andJSONRepresentation: [NSDictionary dictionaryWithObject: token forKey: kJwtKey]];
|
||||
}
|
||||
} else {
|
||||
response = [self responseWithStatus: 403
|
||||
andJSONRepresentation: nil];
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if password recovery is enabled for user domain
|
||||
* @return Response
|
||||
*/
|
||||
- (WOResponse *) passwordRecoveryEnabledAction
|
||||
{
|
||||
NSString *username, *domain, *domainName;
|
||||
NSArray *usernameComponents, *passwordRecoveryDomains;
|
||||
NSDictionary *message, *result;
|
||||
WORequest *request;
|
||||
|
||||
username = nil;
|
||||
domain = nil;
|
||||
domainName = nil;
|
||||
result = nil;
|
||||
request = [context request];
|
||||
|
||||
message = [[request contentAsString] objectFromJSONString];
|
||||
username = [message objectForKey: @"userName"];
|
||||
domain = [message objectForKey: @"domain"];
|
||||
if ([[SOGoSystemDefaults sharedSystemDefaults]
|
||||
isPasswordRecoveryEnabled]) {
|
||||
// If no domain, try to retrieve domain from username
|
||||
if (nil != domain && domain != [NSNull null]) {
|
||||
domainName = domain;
|
||||
} else if (nil != username) {
|
||||
usernameComponents = [username componentsSeparatedByString:@"@"]; // Split on @ and take right part
|
||||
if (2 == [usernameComponents count]) {
|
||||
domainName = [[usernameComponents objectAtIndex: 1] lowercaseString];
|
||||
}
|
||||
}
|
||||
|
||||
if (domainName) {
|
||||
result = [NSDictionary dictionaryWithObject: domainName forKey: @"domain"];
|
||||
}
|
||||
}
|
||||
|
||||
passwordRecoveryDomains = [[SOGoSystemDefaults sharedSystemDefaults]
|
||||
passwordRecoveryDomains];
|
||||
if (![[SOGoSystemDefaults sharedSystemDefaults] isPasswordRecoveryEnabled]) {
|
||||
return [self responseWithStatus: 403
|
||||
andJSONRepresentation: nil];
|
||||
} else if (username && [NSNull null] != username &&
|
||||
domainName && passwordRecoveryDomains &&
|
||||
[passwordRecoveryDomains containsObject: domainName]) {
|
||||
return [self responseWithStatus: 200
|
||||
andJSONRepresentation: result];
|
||||
} else if (username && [NSNull null] != username && !passwordRecoveryDomains) {
|
||||
return [self responseWithStatus: 200
|
||||
andJSONRepresentation: result];
|
||||
} else {
|
||||
return [self responseWithStatus: 403
|
||||
andJSONRepresentation: nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL) isTotpEnabled
|
||||
{
|
||||
#if defined(MFA_CONFIG)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"Verification Code" = "Верификациони код";
|
||||
"Enter the 6-digit verification code from your TOTP application." = "Унесите 6-цифрени код из ваше Google Authenticator апликације.";
|
||||
"You provided an invalid TOTP key." = "Унели сте неисправан код.";
|
||||
"Two-factor authentication has been disabled. Visit the Preferences module to restore two-factor authentication and reconfigure your TOTP application." = "Двофакторска аутентификација је онемогућена. Посетите модул Пodešavawa да бисте вратили двофакторску аутентификацију и поново конфигурисали своју ТОТП апликацију.";
|
||||
|
||||
"Download" = "Преузимање";
|
||||
"Language" = "Језик";
|
||||
@@ -109,3 +110,19 @@
|
||||
"Close" = "Затвори";
|
||||
"Missing search parameter" = "Недостаје параметар претраге";
|
||||
"Missing type parameter" = "Недостаје тип параметра";
|
||||
|
||||
/* Password Recovery */
|
||||
"Secondary e-mail" = "Secondary e-mail";
|
||||
"Answer" = "Answer";
|
||||
"Password lost" = "Password lost";
|
||||
"No password recovery method has been defined for this user" = "No password recovery method has been defined for this user";
|
||||
"Invalid secret question answer" = "Invalid secret question answer";
|
||||
"Next" = "Next";
|
||||
"Back" = "Back";
|
||||
"Please enter a new password below" = "Please enter a new password below";
|
||||
"A link will be sent to %{0}" = "A link will be sent to %{0}";
|
||||
"A password reset link has been sent, please check your recovery e-mail mailbox and click on the link" = "A password reset link has been sent, please check your recovery e-mail mailbox and click on the link";
|
||||
"Invalid configuration for email password recovery" = "Invalid configuration for email password recovery";
|
||||
"Password recovery email in error" = "Password recovery email in error";
|
||||
"Password reset" = "Password reset";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}";
|
||||
@@ -173,6 +173,26 @@
|
||||
pageName = "SOGoRootPage";
|
||||
actionName = "changePassword";
|
||||
};
|
||||
passwordRecovery = {
|
||||
protectedBy = "<public>";
|
||||
pageName = "SOGoRootPage";
|
||||
actionName = "passwordRecovery";
|
||||
};
|
||||
passwordRecoveryEmail = {
|
||||
protectedBy = "<public>";
|
||||
pageName = "SOGoRootPage";
|
||||
actionName = "passwordRecoveryEmail";
|
||||
};
|
||||
passwordRecoveryCheck = {
|
||||
protectedBy = "<public>";
|
||||
pageName = "SOGoRootPage";
|
||||
actionName = "passwordRecoveryCheck";
|
||||
};
|
||||
passwordRecoveryEnabled = {
|
||||
protectedBy = "<public>";
|
||||
pageName = "SOGoRootPage";
|
||||
actionName = "passwordRecoveryEnabled";
|
||||
};
|
||||
loading = {
|
||||
protectedBy = "<public>";
|
||||
pageName = "UIxLoading";
|
||||
|
||||
@@ -1,6 +1,19 @@
|
||||
/* toolbar */
|
||||
"Save and Close" = "Gem og luk";
|
||||
"Close" = "Luk";
|
||||
"Preferences saved" = "Indstillinger gemt";
|
||||
|
||||
/* Unsaved changes confirmation dialog title */
|
||||
"Unsaved Changes" = "Ikke gemte ændringer";
|
||||
|
||||
/* Unsaved changes confirmation dialog text */
|
||||
"Do you want to save your changes made to the configuration?" = "Vil du gemme dine ændringer i konfigurationen?";
|
||||
|
||||
/* Unsaved changes confirmation dialog button */
|
||||
"Save" = "Gem";
|
||||
|
||||
/* Unsaved changes confirmation dialog button */
|
||||
"Don't Save" = "Gem ikke";
|
||||
|
||||
/* tabs */
|
||||
"General" = "Generelt";
|
||||
@@ -12,36 +25,68 @@
|
||||
"Forward" = "Videresend";
|
||||
"Password" = "Adgangskode";
|
||||
"Categories" = "Kategorier";
|
||||
"Appointments invitations" = "Invitationer til aftaler";
|
||||
"Name" = "Navn";
|
||||
"Color" = "Farve";
|
||||
"Add" = "Tilføj";
|
||||
"Delete" = "Slet";
|
||||
|
||||
/* contacts categories */
|
||||
"contacts_category_labels" = "Kollega, konkurrent, kunde, ven, familie, samarbejdspartner, udbyder, presse, VIP";
|
||||
|
||||
/* vacation (auto-reply) */
|
||||
"Enable vacation auto reply" = "Aktivér ferie autosvar";
|
||||
"Auto reply message" ="Automatisk beskedsvar";
|
||||
"Email addresses (separated by commas)" ="E-mail adresser (adskilt af kommaer)";
|
||||
"Enable custom auto reply subject" = "Aktiver tilpasset autosvar-emne";
|
||||
"Auto reply subject" = "Autosvar emne";
|
||||
"You can write ${subject} to insert the original subject" = "Du kan skrive ${subject} for at indsætte det originale emne";
|
||||
"Auto reply message" = "Automatisk beskedsvar";
|
||||
"Email addresses" = "E-mailadresser";
|
||||
"Add default email addresses" = "Tilføj standard e-mail-adresser";
|
||||
"Days between responses" ="Dage imellem svar";
|
||||
"Days between responses" = "Dage imellem svar";
|
||||
"Do not send responses to mailing lists" = "Send ikke svar til postlister";
|
||||
"Activation Constraints" = "Aktiveringsbegrænsninger";
|
||||
"Enable auto reply on" = "Aktiver autosvar til";
|
||||
"First day of vacation" = "Første feriedag";
|
||||
"Disable auto reply on" = "Deaktiver Autosvar til";
|
||||
"Last day of vacation" = "Sidste feriedag";
|
||||
"Enter date" = "Indtast dato";
|
||||
/* Enable auto reply at this time of the day */
|
||||
"Enable auto reply at" = "Aktiver autosvar kl.";
|
||||
"Enter time" = "Indtast tid";
|
||||
/* Disable auto reply at this time of the day */
|
||||
"Disable auto reply at" = "Deaktiver autosvar kl.";
|
||||
"Enable auto reply on these days" = "Aktiver autosvar for disse dage";
|
||||
"Always send vacation message response" = "Send altid feriebeskedsvar";
|
||||
"The vacation message is sent prior to apply your filters." = "Feriebeskeden sendes før anvendelse af dine filtre.";
|
||||
"Discard incoming mails during vacation" = "Kassér indgående mails under ferie";
|
||||
"The vacation message is sent but incoming messages are not delivered to your inbox." = "Feriebeskeden sendes, men indgående meddelelser leveres ikke til din indbakke.";
|
||||
"Please specify your message and your email addresses for which you want to enable auto reply."
|
||||
= "Angiv venligst din besked og de e-mail-adresser, som du vil aktivere autosvar for.";
|
||||
"Your vacation message must not end with a single dot on a line." = "Din ferie meddelelse må ikke slutte med et enkelt punktum på en linje.";
|
||||
"End date of your auto reply must be in the future."
|
||||
= "Sluttidspunkt for dit autosvar skal være i fremtiden.";
|
||||
|
||||
/* forward messages */
|
||||
"Forward incoming messages" = "Videresend indgående beskeder";
|
||||
"Always forward" = "Altid fremad";
|
||||
"Incoming messages are forwarded prior to apply your filters." = "Indgående beskeder videresendes, før du anvender dine filtre.";
|
||||
"Keep a copy" = "Behold en kopi";
|
||||
"Enter an email" = "Indtast din e-mail";
|
||||
"Add another email" = "Vælg endnu en e-mail";
|
||||
"Please specify an address to which you want to forward your messages."
|
||||
= "Angiv en adresse, som du ønsker at sende dine beskeder til.";
|
||||
"You are not allowed to forward your messages to an external email address." = "Du må ikke videresende dine beskeder til en ekstern e-mailadresse.";
|
||||
"You are not allowed to forward your messages to an internal email address." = "Du må ikke videresende dine beskeder til en intern e-mailadresse.";
|
||||
"You are not allowed to forward your messages to this domain:" = "Du må ikke videresende dine beskeder til dette domæne:";
|
||||
|
||||
/* d & t */
|
||||
"Current Time Zone" ="Aktuel tidszone";
|
||||
"Short Date Format" ="Kort dato format";
|
||||
"Long Date Format" ="Lang dato format";
|
||||
"Time Format" ="Tidsformat";
|
||||
"Time Zone" = "Tidszone";
|
||||
"Short Date Format" = "Kort dato format";
|
||||
"Long Date Format" = "Lang dato format";
|
||||
"Time Format" = "Tidsformat";
|
||||
"default" = "Standard";
|
||||
"Default Module" = "Standard modul";
|
||||
"Save" = "Gem";
|
||||
"shortDateFmt_0" = "%d-%b-%y";
|
||||
"shortDateFmt_1" = "%d-%m-%y";
|
||||
"shortDateFmt_2" = "%d/%m/%y";
|
||||
@@ -57,8 +102,10 @@
|
||||
"shortDateFmt_12" = "%Y-%m-%d";
|
||||
"shortDateFmt_13" = "%Y/%m/%d";
|
||||
"shortDateFmt_14" = "%Y.%m.%d";
|
||||
"shortDateFmt_15" = "";
|
||||
|
||||
"shortDateFmt_15" = "%d.%m.%Y";
|
||||
"shortDateFmt_16" = "%d.%m.%Y";
|
||||
"shortDateFmt_17" = "";
|
||||
|
||||
"longDateFmt_0" = "%A, %B %d, %Y";
|
||||
"longDateFmt_1" = "%B %d, %Y";
|
||||
"longDateFmt_2" = "%A, %d %B, %Y";
|
||||
@@ -75,48 +122,66 @@
|
||||
"timeFmt_2" = "";
|
||||
"timeFmt_3" = "";
|
||||
"timeFmt_4" = "";
|
||||
|
||||
/* Timezone autocompletion */
|
||||
"No matches found." = "Ingen match fundet";
|
||||
|
||||
/* calendar */
|
||||
"Week begins on" ="Uge start tidspunkt";
|
||||
"Day start time" ="Dag start tidspunkt";
|
||||
"Day end time" ="Dag slut tidspunkt";
|
||||
"Week begins on" = "Uge start tidspunkt";
|
||||
"Day start time" = "Dag start tidspunkt";
|
||||
"Day end time" = "Dag slut tidspunkt";
|
||||
"Day start time must be prior to day end time." = "Dagens start tidspunkt skal være før dagens slut tidspunkt.";
|
||||
"Week days to display" = "Ugedage at vise";
|
||||
"Show time as busy outside working hours" = "Vis tid som optaget uden for arbejdstiden";
|
||||
"First week of year" ="Første uge på året";
|
||||
"First week of year" = "Første uge på året";
|
||||
"Enable reminders for Calendar items" = "Aktivér påmindelser for kalenderemner";
|
||||
"Play a sound when a reminder comes due"
|
||||
= "Afspil en lyd, når en påmindelse aktiveres";
|
||||
"Default reminder" ="Standard påmindelse";
|
||||
"Play a sound when a reminder comes due" = "Afspil en lyd, når en påmindelse aktiveres";
|
||||
"Default reminder" = "Standard påmindelse";
|
||||
"firstWeekOfYear_January1" = "Starter den 1. januar";
|
||||
"firstWeekOfYear_First4DayWeek" = "Første 4-dages uge";
|
||||
"firstWeekOfYear_FirstFullWeek" = "Første hele uge";
|
||||
"Prevent from being invited to appointments" = "Undgå at blive inviteret til aftaler";
|
||||
"White list for appointment invitations" = "Hvid liste til aftaleinvitationer";
|
||||
"Contacts Names" = "Kontaktnavne";
|
||||
"Duplicate name" = "Dubletnavn";
|
||||
"Calendar categories must have unique names." = "Kalenderkategorier skal have unikke navne";
|
||||
|
||||
/* Default Calendar */
|
||||
"Default calendar" ="Standard kalender";
|
||||
"Default calendar" = "Standard kalender";
|
||||
"selectedCalendar" = "Valgte kalender";
|
||||
"personalCalendar" = "Personlig kalender";
|
||||
"firstCalendar" = "Første aktiveret kalender";
|
||||
"reminder_NONE" = "Ingen påmindelse";
|
||||
"reminder_5_MINUTES_BEFORE" = "5 minutter";
|
||||
"reminder_10_MINUTES_BEFORE" = "10 minutter";
|
||||
"reminder_15_MINUTES_BEFORE" = "15 minutter";
|
||||
"reminder_30_MINUTES_BEFORE" = "30 minutter";
|
||||
"reminder_45_MINUTES_BEFORE" = "45 minuter før";
|
||||
"reminder_1_HOUR_BEFORE" = "1 time";
|
||||
"reminder_2_HOURS_BEFORE" = "2 timer";
|
||||
"reminder_5_HOURS_BEFORE"= "5 timer";
|
||||
"reminder_15_HOURS_BEFORE"= "15 timer";
|
||||
"reminder_5_HOURS_BEFORE" = "5 timer";
|
||||
"reminder_15_HOURS_BEFORE" = "15 timer";
|
||||
"reminder_1_DAY_BEFORE" = "1 dag";
|
||||
"reminder_2_DAYS_BEFORE" = "2 dage";
|
||||
"reminder_1_WEEK_BEFORE" = "1 uge før";
|
||||
|
||||
/* Mailer */
|
||||
"Labels" = "Mærker";
|
||||
"Label" = "Mærke";
|
||||
"IMAP Label" = "IMAP mærke";
|
||||
"Invalid label" = "Brug ikke mellemrum, heller ikke ( ) { } % * \" \\";
|
||||
"Duplicate label" = "Dublér mærke";
|
||||
"IMAP labels must have unique names." = "IMAP mærker skal have unikke navne";
|
||||
"New label" = "Nyt mærke";
|
||||
"Show subscribed mailboxes only" = "Vis kun abonnerede postkasser";
|
||||
"Synchronize only default mail folders (EAS)" = "Synkroniser kun standard e-mailmapper (EAS)";
|
||||
"Fetch count of unseen messages for all mailboxes" = "Hent antallet af usete beskeder for alle postkasser";
|
||||
"Sort messages by threads" = "Sortér beskeder efter tråd";
|
||||
"Check for new mail" = "Tjek for ny post";
|
||||
"refreshview_manually" = "Manuelt";
|
||||
"refreshview_every_minute" = "Hvert minut";
|
||||
"refreshview_every_2_minutes" = "Hvert 2. minut";
|
||||
"refreshview_every_5_minutes" = "Hvert 5. minut";
|
||||
"refreshview_every_10_minutes" = "Hvert 10. minut";
|
||||
"refreshview_every_20_minutes" = "Hvert 20. minut";
|
||||
"refreshview_every_30_minutes" = "Hvert 30. minut";
|
||||
"refreshview_once_per_hour" = "Én gang i timen";
|
||||
"Always open mail composer" = "Åbn altid mail composer";
|
||||
"Inside current window" = "Inde i det aktuelle vindue";
|
||||
"In a popup window" = "I et popup-vindue";
|
||||
"When sending mail, add unknown recipients to my" = "Når du sender e-mail, skal du tilføje ukendte modtagere til min";
|
||||
"Address Book" = "Adressebog";
|
||||
"Forward messages" = "Videresend beskeder";
|
||||
"messageforward_inline" = "På linie";
|
||||
"messageforward_attached" = "Som vedhæftet fil";
|
||||
@@ -129,10 +194,29 @@
|
||||
"Compose messages in" = "Skriv beskeder i";
|
||||
"composemessagestype_html" = "HTML";
|
||||
"composemessagestype_text" = "Almindelig tekst";
|
||||
|
||||
/* Base font size for messages composed in HTML */
|
||||
"Default font size" = "Standard skriftstørrelse";
|
||||
|
||||
"Display remote inline images" = "Vis eksterne indlejrede billeder";
|
||||
"displayremoteinlineimages_never" = "Aldrig";
|
||||
"displayremoteinlineimages_always" = "Altid";
|
||||
"Auto save every" = "Gem automatisk hver";
|
||||
"minutes" = "minutter";
|
||||
"Automatically mark messages as read" = "Markér automatisk beskeder som læst";
|
||||
"Immediately on display" = "Straks udstillet";
|
||||
"After displaying for" = "Efter at have vist for";
|
||||
"seconds" = "sekunder";
|
||||
|
||||
/* Contact */
|
||||
"Personal Address Book" = "Personlig adressebog";
|
||||
"Collected Address Book" = "Samlet adressebog";
|
||||
"Contact categories must have unique names." = "Kontaktkategorier skal have unikke navne";
|
||||
|
||||
/* IMAP Accounts */
|
||||
"Settings" = "Indstillinger";
|
||||
"Security" = "Sikkerhed";
|
||||
"Mail Account" = "E-mail konto";
|
||||
"New Mail Account" = "Ny mail-konto";
|
||||
"Server Name" = "Server Navn";
|
||||
"Port" = "Port";
|
||||
@@ -143,32 +227,73 @@
|
||||
"Email" = "E-mail";
|
||||
"Reply To Email" = "Besvar på mail";
|
||||
"Signature" = "Signatur";
|
||||
"Identities" = "Identiteter";
|
||||
"Always use the default identity when replying to messages" = "Brug altid standardidentiteten, når du besvarer beskeder";
|
||||
"Default Identity" = "Standard identitet";
|
||||
"New Identity" = "Ny identitet";
|
||||
"(Click to create)" = "(Klik for at oprette)";
|
||||
"Please enter your signature below" = "Indsæt venligst din signatur nedenfor";
|
||||
"Please specify a valid sender address." = "Angiv venligst en gyldig afsenderadresse.";
|
||||
"Please specify a valid reply-to address." = "Angiv venligst en gyldig svar-til adresse.";
|
||||
"Specify a hostname other than the local host" = "Angiv et andet værtsnavn end den lokale vært";
|
||||
|
||||
"No certificate installed" = "Intet certifikat installeret";
|
||||
"The SSL certificate must use the PKCS#12 (PFX) format." = "SSL-certifikatet skal bruge formatet PKCS#12 (PFX).";
|
||||
"Uninstall" = "Afinstallér ";
|
||||
"Choose PKCS12 Certificate .." = "Vælg PKCS12-certifikat ..";
|
||||
"Certificate Import Password" = "Certifikat importadgangskode";
|
||||
"Upload" = "Indlæs";
|
||||
"When composing a message" = "Når du skriver en besked";
|
||||
"Digitally sign the message by default" = "Underskriv beskeden digitalt som standard";
|
||||
"Always try to encrypt the message" = "Forsøg altid at kryptere beskeden";
|
||||
"An error occurred while importing the certificate. Verify your password." = "Der opstod en fejl under import af certifikatet. Bekræft din adgangskode";
|
||||
|
||||
/* Additional Parameters */
|
||||
"Additional Parameters" = "Yderligere parametre";
|
||||
|
||||
/* password */
|
||||
"Current password" = "Nuværende adgangskode";
|
||||
"New password" = "Ny adgangskode";
|
||||
"Confirmation" = "Bekræftelse";
|
||||
"Change" = "Skift";
|
||||
"Passwords don't match" = "Adgangskoder stemmer ikke overens";
|
||||
"POLICY_MIN_LOWERCASE_LETTER" = "Minimum på %{0} små bogstaver";
|
||||
"POLICY_MIN_UPPERCASE_LETTER" = "Minimum på %{0} store bogstaver";
|
||||
"POLICY_MIN_DIGIT" = "Minimum på %{0} ciffer";
|
||||
"POLICY_MIN_SPECIAL_SYMBOLS" = "Minimum på %{0} specielle symboler";
|
||||
"POLICY_MIN_LENGTH" = "Minimumlængde på %{0} tegn";
|
||||
|
||||
|
||||
/* Event+task classifications */
|
||||
"Default events classification" ="Standard begivenhedsklassifikation";
|
||||
"Default tasks classification" ="Standard opgaveklassifikation";
|
||||
"Default events classification" = "Standard begivenhedsklassifikation";
|
||||
"Default tasks classification" = "Standard opgaveklassifikation";
|
||||
"PUBLIC_item" = "Offentlig";
|
||||
"CONFIDENTIAL_item" = "Fortrolig";
|
||||
"PRIVATE_item" = "Privat";
|
||||
|
||||
/* Event+task categories */
|
||||
"Calendar Category" = "Kalenderkategori";
|
||||
"Add Calendar Category" = "Tilføj kalenderkategori";
|
||||
"New category" = "Ny kategori";
|
||||
"Reset to defaults" = "Nulstil til standardindstillinger";
|
||||
"Remove Calendar Category" = "Fjern kalenderkategori";
|
||||
"Contact Category" = "Kontaktkategori";
|
||||
"Add Contact Category" = "Tilføj kontaktkategori";
|
||||
"Remove Contact Category" = "Fjern kontaktkategori";
|
||||
"category_none" = "Ingen";
|
||||
"calendar_category_labels" = "Jubilæum,fødselsdag,forretning,kald,kunder,konkurrence,Customer,foretrukne,opfølgning,gaver,helligdage,idéer,møde,problemer,diverse,personlig,projekter,offentlige helligdage,status,leverandører,rejser,ferie";
|
||||
|
||||
/* Default module */
|
||||
"Calendar" = "Kalender";
|
||||
"Contacts" = "Adressebog";
|
||||
"Mail" = "Mail";
|
||||
"Last" = "Sidst anvendt";
|
||||
"Default Module " = "Standard modul";
|
||||
"Language" ="Sprog";
|
||||
"SOGo Version" = "SOGo Version";
|
||||
|
||||
/* Confirmation asked when changing the language */
|
||||
"Save preferences and reload page now?" = "Vil du gemme ændringerne og genindlæse siden nu?";
|
||||
"Language" = "Sprog";
|
||||
"choose" = "Vælg ...";
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
@@ -178,7 +303,6 @@
|
||||
"ChineseChina" = "简体中文";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Croatian" = "Hrvatski";
|
||||
"Croatian" = "Hrvatski";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -199,17 +323,33 @@
|
||||
"Montenegrin" = "Crnogorski";
|
||||
"NorwegianBokmal" = "Norsk";
|
||||
"NorwegianNynorsk" = "Nynorsk";
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Polish" = "Polsk";
|
||||
"Portuguese" = "Portugisisk ";
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Romanian" = "Română";
|
||||
"Russian" = "Русский";
|
||||
"Serbian" = "Serbisk";
|
||||
"SerbianLatin" = "Serbisk latin";
|
||||
"Slovak" = "Slovensk";
|
||||
"Slovenian" = "Slovensk";
|
||||
"SpanishSpain" = "Spansk (Spanien)";
|
||||
"SpanishArgentina" = "Spansk (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
"TurkishTurkey" = "Türkçe (Türkiye)";
|
||||
"Ukrainian" = "Українська";
|
||||
"Welsh" = "Cymraeg";
|
||||
|
||||
"Refresh View" = "Opdater visning";
|
||||
"refreshview_manually" = "Manuelt";
|
||||
"refreshview_every_minute" = "Hvert minut";
|
||||
"refreshview_every_2_minutes" = "Hvert 2. minut";
|
||||
"refreshview_every_5_minutes" = "Hvert 5. minut";
|
||||
"refreshview_every_10_minutes" = "Hvert 10. minut";
|
||||
"refreshview_every_20_minutes" = "Hvert 20. minut";
|
||||
"refreshview_every_30_minutes" = "Hvert 30. minut";
|
||||
"refreshview_once_per_hour" = "Én gang i timen";
|
||||
"Enable Desktop Notifications" = "Aktiver skrivebordsnotifikationer";
|
||||
|
||||
/* Return receipts */
|
||||
"When I receive a request for a return receipt" = "Når jeg modtager en anmodning om en kvittering";
|
||||
"Never send a return receipt" = "Send aldrig en kvittering";
|
||||
@@ -220,13 +360,24 @@
|
||||
"Never send" = "Send aldrig";
|
||||
"Always send" = "Send altid";
|
||||
"Ask me" = "Spørg mig";
|
||||
|
||||
/* Filters - UIxPreferences */
|
||||
"Filters" = "Filtre";
|
||||
"Active" = "Aktiv";
|
||||
"Move Up" = "Flyt op";
|
||||
"Move Down" = "Flyt ned";
|
||||
"Connection error" = "Forbindelsesfejl";
|
||||
"Service temporarily unavailable" = "Servicen er midlertidigt ikke tilgængelig";
|
||||
|
||||
/* Aria label for filter enable checkbox */
|
||||
"Enable filter" = "Aktivér filter";
|
||||
|
||||
/* Filters - UIxFilterEditor */
|
||||
"Filter name" = "Filter navn";
|
||||
/* Button label */
|
||||
"Add a condition" = "Tilføj en betingelse";
|
||||
/* Button label */
|
||||
"Add an action" = "Tilføj en handling";
|
||||
"For incoming messages that" = "For indgående meddelelser, der";
|
||||
"match all of the following rules" = "match alle de følgende regler";
|
||||
"match any of the following rules" = "match enhver af følgende regler";
|
||||
@@ -240,12 +391,29 @@
|
||||
"To or Cc" = "Til eller Cc";
|
||||
"Size (Kb)" = "Størrelse (KB)";
|
||||
"Header" = "Header";
|
||||
"Body" = "Body";
|
||||
"Flag the message with" = "Markér beskeden med";
|
||||
|
||||
/* Select field label of "flag message" mail filter action */
|
||||
"Flag" = "Flag";
|
||||
|
||||
"Discard the message" = "Kassér beskeden";
|
||||
"File the message in" = "Gem beskeden i";
|
||||
|
||||
/* Select field label of "file message" mail filter action */
|
||||
"Mailbox" = "postkasse";
|
||||
|
||||
"Keep the message" = "Behold beskeden";
|
||||
"Forward the message to" = "Videresend beskeden til";
|
||||
|
||||
/* Input field label of "forward" mail filter action */
|
||||
"Email" = "E-mail";
|
||||
|
||||
"Send a reject message" = "Send en afvisningsbesked";
|
||||
|
||||
/* Input field label of "reject" mail filter action */
|
||||
"Message" = "Besked";
|
||||
|
||||
"Send a vacation message" = "Send en feriebesked";
|
||||
"Stop processing filter rules" = "Stop filter regler";
|
||||
"is under" = "er under";
|
||||
@@ -258,17 +426,16 @@
|
||||
"does not match" = "Matcher ikke";
|
||||
"matches regex" = "matcher regex";
|
||||
"does not match regex" = "matcher ikke regex";
|
||||
/* Placeholder for the value field of a condition */
|
||||
"Value" = "Værdi";
|
||||
"Seen" = "Set";
|
||||
"Deleted" = "Slettet";
|
||||
"Answered" = "Besvaret";
|
||||
"Flagged" = "Markeret";
|
||||
"Junk" = "Uønsket";
|
||||
"Not Junk" = "Ikke Uønsket";
|
||||
"Label 1" = "Mærkat 1";
|
||||
"Label 2" = "Mærkat 2";
|
||||
"Label 3" = "Mærkat 3";
|
||||
"Label 4" = "Mærkat 4";
|
||||
"Label 5" = "Mærkat 5";
|
||||
|
||||
/* Password policy */
|
||||
"The password was changed successfully." = "Adgangskoden er ændret.";
|
||||
"Password must not be empty." = "Adgangskode skal ikke.";
|
||||
"The passwords do not match. Please try again." = "Adgangskoderne stemmer ikke overens. Prøv venligst igen.";
|
||||
@@ -282,3 +449,52 @@
|
||||
"Unhandled error response" = "fejlreaktion";
|
||||
"Password change is not supported." = "Adgangskodeændring er ikke understøttet.";
|
||||
"Unhandled HTTP error code: %{0}" = "HTTP fejlkode:%{0}";
|
||||
"Cancel" = "Anullér";
|
||||
"Invitations" = "Invitationer";
|
||||
"Edit Filter" = "Redigér filter";
|
||||
"Delete Filter" = "Slet filter";
|
||||
"Create Filter" = "Opret filter";
|
||||
"Delete Label" = "Slet mærkning";
|
||||
"Create Label" = "Opret mærkning";
|
||||
"Accounts" = "Kontoer";
|
||||
"Edit Account" = "Rediger konto";
|
||||
"Delete Account" = "Slet konto";
|
||||
"Create Account" = "Opret konto";
|
||||
"Account Name" = "Konto navn";
|
||||
"SSL" = "SSL";
|
||||
"TLS" = "TLS";
|
||||
|
||||
/* Avatars */
|
||||
"Use Gravatar" = "Brug gravatar";
|
||||
"Alternate Avatar" = "Alternativ avatar";
|
||||
"none" = "Ingen";
|
||||
"identicon" = "Ident ikon";
|
||||
"monsterid" = "Uhyre";
|
||||
"wavatar" = "Wavatar";
|
||||
"retro" = "Retro";
|
||||
|
||||
/* Animation Level */
|
||||
"Animation Level" = "Animationsniveau";
|
||||
/* Normal Animation Mode */
|
||||
"animation_NORMAL" = "Normal";
|
||||
/* Limited Animation Mode */
|
||||
"animation_LIMITED" = "Begrænset";
|
||||
"animation_NONE" = "Ingen";
|
||||
|
||||
/* 2FA */
|
||||
"Enable two-factor authentication using a TOTP application" = "Aktiver to-faktor-godkendelse ved hjælp af en TOTP-applikation";
|
||||
"You must enter this key into your TOTP application." = "Du skal indtaste denne nøgle i din TOTP-applikation.";
|
||||
"If you do not and you log out you will not be able to login again." = "Hvis du ikke gør det, og du logger ud, vil du ikke kunne logge ind igen.";
|
||||
|
||||
/* External Sieve scripts */
|
||||
"An external Sieve script is active" = "Et eksternt Sieve-script er aktivt";
|
||||
"Sieve is a programming language that can be used for email filtering. If you let SOGo handle your filters, vacation and forward settings, your active script will be disabled." = "Sieve er et programmeringssprog, der kan bruges til e-mail-filtrering. Hvis du lader SOGo håndtere dine filtre, ferie- og videresendelsesindstillinger, vil dit aktive script blive deaktiveret.";
|
||||
"Let SOGo handle everything" = "Lad SOGo klare alt";
|
||||
|
||||
/* Password Recovery */
|
||||
"Password recovery mode" = "Gendan adgangskode";
|
||||
"Question" = "Spørgsmål";
|
||||
"Secondary e-mail" = "Sekundær e-mail";
|
||||
"Answer" = "Svar";
|
||||
"Password recovery" = "Gendan adgangskode";
|
||||
"Password change" = "Ændre adgangskode";
|
||||
|
||||
@@ -489,4 +489,12 @@
|
||||
/* External Sieve scripts */
|
||||
"An external Sieve script is active" = "An external Sieve script is active";
|
||||
"Sieve is a programming language that can be used for email filtering. If you let SOGo handle your filters, vacation and forward settings, your active script will be disabled." = "Sieve is a programming language that can be used for email filtering. If you let SOGo handle your filters, vacation and forward settings, your active script will be disabled.";
|
||||
"Let SOGo handle everything" = "Let SOGo handle everything";
|
||||
"Let SOGo handle everything" = "Let SOGo handle everything";
|
||||
|
||||
/* Password Recovery */
|
||||
"Password recovery mode" = "Password recovery";
|
||||
"Question" = "Question";
|
||||
"Secondary e-mail" = "Secondary e-mail";
|
||||
"Answer" = "Answer";
|
||||
"Password recovery" = "Password recovery";
|
||||
"Password change" = "Password change";
|
||||
|
||||
@@ -489,4 +489,12 @@
|
||||
/* External Sieve scripts */
|
||||
"An external Sieve script is active" = "Un script Sieve externe est actif";
|
||||
"Sieve is a programming language that can be used for email filtering. If you let SOGo handle your filters, vacation and forward settings, your active script will be disabled." = "Sieve est un langage de programmation qui peut être utilisé pour le filtrage des messages. Si vous laissez SOGo gérer vos filtres, votre message d'absence et vos paramètres de transfert, votre script actuel sera désactivé.";
|
||||
"Let SOGo handle everything" = "Laissez SOGo s'occuper de tout";
|
||||
"Let SOGo handle everything" = "Laissez SOGo s'occuper de tout";
|
||||
|
||||
/* Password Recovery */
|
||||
"Password recovery mode" = "Récupération de mot de passe";
|
||||
"Question" = "Question";
|
||||
"Secondary e-mail" = "E-mail secondaire";
|
||||
"Answer" = "Réponse";
|
||||
"Password recovery" = "Récupération de mot de passe";
|
||||
"Password change" = "Changement de mot de passe";
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
"Close" = "Avslutt";
|
||||
"Preferences saved" = "Preferanser lagret";
|
||||
|
||||
/* Unsaved changes confirmation dialog title */
|
||||
"Unsaved Changes" = "Endringer ikke lagret";
|
||||
|
||||
/* Unsaved changes confirmation dialog text */
|
||||
"Do you want to save your changes made to the configuration?" = "Vil du lagre endringene du har gjort i konfigurasjonen? ";
|
||||
|
||||
/* Unsaved changes confirmation dialog button */
|
||||
"Save" = "Lagre";
|
||||
|
||||
/* Unsaved changes confirmation dialog button */
|
||||
"Don't Save" = "Ikke lagre";
|
||||
|
||||
/* tabs */
|
||||
"General" = "Generelt";
|
||||
"Calendar Options" = "Kalenderinnstillinger";
|
||||
@@ -24,13 +36,30 @@
|
||||
|
||||
/* vacation (auto-reply) */
|
||||
"Enable vacation auto reply" = "Aktiver auto-svar ved fravær";
|
||||
"Enable custom auto reply subject" = "Aktiver tilpasset autosvaremne ";
|
||||
"Auto reply subject" = "Autosvar emne ";
|
||||
"You can write ${subject} to insert the original subject" = "Du kan skrive ${emne} for å sette inn det originale emnet ";
|
||||
"Auto reply message" = "Auto-svar melding";
|
||||
"Email addresses (separated by commas)" = "E-postadresser (separert med komma)";
|
||||
"Email addresses" = "E-postadresser";
|
||||
"Add default email addresses" = "Legg til standard e-postadresser";
|
||||
"Days between responses" = "Dager mellom svar";
|
||||
"Do not send responses to mailing lists" = "Ikke send svar til e-postlister";
|
||||
"Activation Constraints" = "Aktiveringsbegrensninger ";
|
||||
"Enable auto reply on" = "Aktiver automatisk svar på";
|
||||
"First day of vacation" = "Første feriedag";
|
||||
"Disable auto reply on" = "Skru av auto-svar";
|
||||
"Last day of vacation" = "Siste feriedag";
|
||||
"Enter date" = "Legg til dato";
|
||||
/* Enable auto reply at this time of the day */
|
||||
"Enable auto reply at" = "Aktiver automatisk svar kl";
|
||||
"Enter time" = "Legg til klokkeslett";
|
||||
/* Disable auto reply at this time of the day */
|
||||
"Disable auto reply at" = "Skru av autosvar kl. ";
|
||||
"Enable auto reply on these days" = "Aktiver automatisk svar for disse dagene";
|
||||
"Always send vacation message response" = "Alltid send ferie melding";
|
||||
"The vacation message is sent prior to apply your filters." = "Feriemeldingen sendes før du bruker filtrene dine. ";
|
||||
"Discard incoming mails during vacation" = "Kast innkommende e-post under ferie";
|
||||
"The vacation message is sent but incoming messages are not delivered to your inbox." = "Feriemeldingen sendes, men innkommende meldinger leveres ikke til innboksen din. ";
|
||||
"Please specify your message and your email addresses for which you want to enable auto reply."
|
||||
= "Skriv melding og angi din e-postadresse som du vil aktivere auto-svar for.";
|
||||
"Your vacation message must not end with a single dot on a line." = "Fraværsmeldingen kan ikke slutte med ett ensomt punktum på en linje.";
|
||||
@@ -39,14 +68,19 @@
|
||||
|
||||
/* forward messages */
|
||||
"Forward incoming messages" = "Videresend innkommende e-post";
|
||||
"Always forward" = "Alltid videresende";
|
||||
"Incoming messages are forwarded prior to apply your filters." = "Innkommende meldinger videresendes før du bruker filtrene dine. ";
|
||||
"Keep a copy" = "Behold en kopi";
|
||||
"Enter an email" = "Skriv inn en e-post";
|
||||
"Add another email" = "Legg til en e-post";
|
||||
"Please specify an address to which you want to forward your messages."
|
||||
= "Angi adressen du vil videresende dine meldinger til.";
|
||||
"You are not allowed to forward your messages to an external email address." = "Du har ikke lov til å videresende mail til en ekstern e-mail addresse.";
|
||||
"You are not allowed to forward your messages to an internal email address." = "Du har ikke love til å videresende mail til en ekstern e-mail addresse.";
|
||||
"You are not allowed to forward your messages to this domain:" = "Du har ikke lov til å videresende meldinger til dette domenet: ";
|
||||
|
||||
/* d & t */
|
||||
"Current Time Zone" = "Gjeldende tidssone";
|
||||
"Time Zone" = "Tidssone";
|
||||
"Short Date Format" = "Kort datoformat";
|
||||
"Long Date Format" = "Langt datoformat";
|
||||
"Time Format" = "Tidsformat";
|
||||
@@ -68,22 +102,36 @@
|
||||
"shortDateFmt_12" = "%Y-%m-%d";
|
||||
"shortDateFmt_13" = "%Y/%m/%d";
|
||||
"shortDateFmt_14" = "%Y.%m.%d";
|
||||
"shortDateFmt_15" = "";
|
||||
|
||||
"shortDateFmt_15" = "%d.%m.%Y";
|
||||
"shortDateFmt_16" = "%d.%m.%y";
|
||||
"shortDateFmt_17" = "";
|
||||
|
||||
"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." = "Ingen treff";
|
||||
|
||||
/* calendar */
|
||||
"Week begins on" = "Uken begynner med";
|
||||
"Day start time" = "Dagen begynner kl.";
|
||||
"Day end time" = "Dagen slutter kl.";
|
||||
"Day start time must be prior to day end time." = "Dagens starttid må være før dagens sluttid.";
|
||||
"Week days to display" = "Ukedager å vise ";
|
||||
"Show time as busy outside working hours" = "Vis tid som opptatt utenfor arbeidstid";
|
||||
"First week of year" = "Første uken i året";
|
||||
"Enable reminders for Calendar items" = "Aktivere påminnelser for kalenderelementer";
|
||||
@@ -95,6 +143,8 @@
|
||||
"Prevent from being invited to appointments" = "Hindre fra å bli invitert til avtaler";
|
||||
"White list for appointment invitations" = "Hviteliste for avtale invitasjoner";
|
||||
"Contacts Names" = "Kontakters navn";
|
||||
"Duplicate name" = "Duplikatnavn";
|
||||
"Calendar categories must have unique names." = "Kalenderkategorier må ha ulike navn.";
|
||||
|
||||
/* Default Calendar */
|
||||
"Default calendar" = "Standard kalender";
|
||||
@@ -118,8 +168,18 @@
|
||||
/* Mailer */
|
||||
"Labels" = "Merkelapper";
|
||||
"Label" = "Etikett";
|
||||
"IMAP Label" = "IMAP etikett ";
|
||||
"Invalid label" = "Ikke bruk mellomrom eller ( ) { } % * \" \\";
|
||||
"Duplicate label" = "Duplikatetikett ";
|
||||
"IMAP labels must have unique names." = "IMAP etiketter må ha ulike navn. ";
|
||||
"New label" = "Ny etikett ";
|
||||
"Show subscribed mailboxes only" = "Vis bare abonnerte postbokser";
|
||||
"Synchronize only default mail folders (EAS)" = "Synkroniser kun standard e-postmapper (EAS)";
|
||||
"Fetch count of unseen messages for all mailboxes" = "Hent alle usette meldinger for alle postbokser";
|
||||
"Sort messages by threads" = "Sorter meldinger etter tråder";
|
||||
"Always open mail composer" = "Alltid åpne postkomponist ";
|
||||
"Inside current window" = "Inne i gjeldende vindu";
|
||||
"In a popup window" = "I et pop-up vindu";
|
||||
"When sending mail, add unknown recipients to my" = "Ved sending av mail, legg til ukjente mottakere til min";
|
||||
"Address Book" = "Adressebok";
|
||||
"Forward messages" = "Videresend meldinger";
|
||||
@@ -134,17 +194,28 @@
|
||||
"Compose messages in" = "Opprett melding i";
|
||||
"composemessagestype_html" = "HTML";
|
||||
"composemessagestype_text" = "Ren text";
|
||||
|
||||
/* Base font size for messages composed in HTML */
|
||||
"Default font size" = "Standard skriftstørrelse ";
|
||||
|
||||
"Display remote inline images" = "Vis bilder lenket til fra andre nettsteder";
|
||||
"displayremoteinlineimages_never" = "Aldri";
|
||||
"displayremoteinlineimages_always" = "Alltid";
|
||||
"Auto save every" = "Lagre automatisk";
|
||||
"minutes" = "minutter";
|
||||
"Automatically mark messages as read" = "Merk meldinger som lest automatisk ";
|
||||
"Immediately on display" = "Umiddelbart utstilt ";
|
||||
"After displaying for" = "Etter å ha vist for ";
|
||||
"seconds" = "sekunder";
|
||||
|
||||
/* Contact */
|
||||
"Personal Address Book" = "Personlig addressebok";
|
||||
"Collected Address Book" = "Samlet addressebok";
|
||||
"Contact categories must have unique names." = "Kontaktkategorier må ha ulike navn. ";
|
||||
|
||||
/* IMAP Accounts */
|
||||
"Settings" = "Innstillinger ";
|
||||
"Security" = "Sikkerhet";
|
||||
"Mail Account" = "Epost konto";
|
||||
"New Mail Account" = "Ny e-postkonto";
|
||||
"Server Name" = "Servernavn";
|
||||
@@ -156,18 +227,42 @@
|
||||
"Email" = "E-post";
|
||||
"Reply To Email" = "Svar til e-post";
|
||||
"Signature" = "Signatur";
|
||||
"Identities" = "Identiteter ";
|
||||
"Always use the default identity when replying to messages" = "Bruk alltid standardidentiteten når du svarer på meldinger ";
|
||||
"Default Identity" = "Standard identitet";
|
||||
"New Identity" = "Ny identitet ";
|
||||
"(Click to create)" = "(Klikk for å opprette)";
|
||||
"Please enter your signature below" = "Vennligst fyll ut signatur under";
|
||||
"Please specify a valid sender address." = "Vennligst angi en gyldig avsenderadresse.";
|
||||
"Please specify a valid reply-to address." = "Vennligst angi en gyldig svar-til-adresse.";
|
||||
"Specify a hostname other than the local host" = "Angi et annet vertsnavn enn den lokale verten ";
|
||||
|
||||
"No certificate installed" = "Ingen sertifikat installert ";
|
||||
"The SSL certificate must use the PKCS#12 (PFX) format." = "SSL-sertifikatet må bruke formatet PKCS#12 (PFX).";
|
||||
"Uninstall" = "Avinstaller ";
|
||||
"Choose PKCS12 Certificate .." = "Velg PKCS12 sertifikat ..";
|
||||
"Certificate Import Password" = "Sertifikatpassord ";
|
||||
"Upload" = "Last opp ";
|
||||
"When composing a message" = "Når du skriver en melding";
|
||||
"Digitally sign the message by default" = "Signer meldingen digitalt som standard";
|
||||
"Always try to encrypt the message" = "Prøv alltid å kryptene meldingen";
|
||||
"An error occurred while importing the certificate. Verify your password." = "Det oppstod en feil under import av sertifikatet. Bekreft passordet ditt. ";
|
||||
|
||||
/* Additional Parameters */
|
||||
"Additional Parameters" = "Øvrige parametre";
|
||||
|
||||
/* password */
|
||||
"Current password" = "Nåværende passord";
|
||||
"New password" = "Nytt passord";
|
||||
"Confirmation" = "Bekreft";
|
||||
"Change" = "Endre";
|
||||
"Passwords don't match" = "Passordene er ikke like ";
|
||||
"POLICY_MIN_LOWERCASE_LETTER" = "Minst %{0} liten bokstav";
|
||||
"POLICY_MIN_UPPERCASE_LETTER" = "Minst %{0} stor bokstav";
|
||||
"POLICY_MIN_DIGIT" = "Minst %{0} tall ";
|
||||
"POLICY_MIN_SPECIAL_SYMBOLS" = "Minst %{0} spesialtegn ";
|
||||
"POLICY_MIN_LENGTH" = "Minimum %{0} karakterer ";
|
||||
|
||||
|
||||
/* Event+task classifications */
|
||||
"Default events classification" = "Standard hendelsesklassifikasjon";
|
||||
@@ -179,6 +274,8 @@
|
||||
/* Event+task categories */
|
||||
"Calendar Category" = "Kalender kategori";
|
||||
"Add Calendar Category" = "Legg til kalender kategori";
|
||||
"New category" = "Ny kategori ";
|
||||
"Reset to defaults" = "Tilbake til standardinnstillinger ";
|
||||
"Remove Calendar Category" = "Fjern kalender kategori";
|
||||
"Contact Category" = "Kontakt kategori";
|
||||
"Add Contact Category" = "Legg til kontakt kategori";
|
||||
@@ -221,7 +318,9 @@
|
||||
"Japanese" = "日本語";
|
||||
"Kazakh" = "Қазақ";
|
||||
"Latvian" = "Latviešu";
|
||||
"Lithuanian" = "Lietuvių";
|
||||
"Macedonian" = "Makedonsk";
|
||||
"Montenegrin" = "Crnogorski";
|
||||
"NorwegianBokmal" = "Norsk bokmål";
|
||||
"NorwegianNynorsk" = "Norsk nynorsk";
|
||||
"Polish" = "Polski";
|
||||
@@ -239,6 +338,7 @@
|
||||
"TurkishTurkey" = "Türkçe (Türkiye)";
|
||||
"Ukrainian" = "Українська";
|
||||
"Welsh" = "Cymraeg";
|
||||
|
||||
"Refresh View" = "Oppdater Visning";
|
||||
"refreshview_manually" = "Manuelt";
|
||||
"refreshview_every_minute" = "Hvert minutt";
|
||||
@@ -248,6 +348,7 @@
|
||||
"refreshview_every_20_minutes" = "Hvert 20. minutt";
|
||||
"refreshview_every_30_minutes" = "Hvert 30. minutt";
|
||||
"refreshview_once_per_hour" = "Hver time";
|
||||
"Enable Desktop Notifications" = "Aktiver skrivebordvarsler";
|
||||
|
||||
/* Return receipts */
|
||||
"When I receive a request for a return receipt" = "Når jeg mottar anmodning om en returkvittering";
|
||||
@@ -268,6 +369,9 @@
|
||||
"Connection error" = "Koblingsfeil";
|
||||
"Service temporarily unavailable" = "Tjeneste midlertidig utilgjengelig";
|
||||
|
||||
/* Aria label for filter enable checkbox */
|
||||
"Enable filter" = "Aktiver filter";
|
||||
|
||||
/* Filters - UIxFilterEditor */
|
||||
"Filter name" = "Filternavn";
|
||||
/* Button label */
|
||||
@@ -287,13 +391,29 @@
|
||||
"To or Cc" = "Til eller Kopi";
|
||||
"Size (Kb)" = "Størrelse (Kb)";
|
||||
"Header" = "Tittel";
|
||||
"Body" = "Kropp";
|
||||
"Body" = "Format";
|
||||
"Flag the message with" = "Flagg meldingen med";
|
||||
|
||||
/* Select field label of "flag message" mail filter action */
|
||||
"Flag" = "Flagg";
|
||||
|
||||
"Discard the message" = "Forkast meldingen";
|
||||
"File the message in" = "Fil meldingen i";
|
||||
|
||||
/* Select field label of "file message" mail filter action */
|
||||
"Mailbox" = "Postkasse";
|
||||
|
||||
"Keep the message" = "Behold meldingen";
|
||||
"Forward the message to" = "Videresend melding til";
|
||||
|
||||
/* Input field label of "forward" mail filter action */
|
||||
"Email" = "E-post";
|
||||
|
||||
"Send a reject message" = "Send en avvisningsmelding";
|
||||
|
||||
/* Input field label of "reject" mail filter action */
|
||||
"Message" = "Melding";
|
||||
|
||||
"Send a vacation message" = "Send en feriemelding";
|
||||
"Stop processing filter rules" = "Stopp prosessering av filterregler";
|
||||
"is under" = "er under";
|
||||
@@ -345,9 +465,36 @@
|
||||
"TLS" = "TLS";
|
||||
|
||||
/* Avatars */
|
||||
"Use Gravatar" = "Bruk gravatar";
|
||||
"Alternate Avatar" = "Alternativ Avatar";
|
||||
"none" = "Ingen";
|
||||
"identicon" = "Identitetsikon";
|
||||
"monsterid" = "Monster";
|
||||
"wavatar" = "Wavatar";
|
||||
"retro" = "Retro";
|
||||
|
||||
/* Animation Level */
|
||||
"Animation Level" = "Animasjons-nivå ";
|
||||
/* Normal Animation Mode */
|
||||
"animation_NORMAL" = "Normal";
|
||||
/* Limited Animation Mode */
|
||||
"animation_LIMITED" = "Begrenset";
|
||||
"animation_NONE" = "Ingen";
|
||||
|
||||
/* 2FA */
|
||||
"Enable two-factor authentication using a TOTP application" = "Aktiver to-faktor autentisering ved hjelp av en TOTP-applikasjon";
|
||||
"You must enter this key into your TOTP application." = "Du må angi denne nøkkelen i TOTP-applikasjonen. ";
|
||||
"If you do not and you log out you will not be able to login again." = "Hvis du ikke gjør dette, og logger ut igjen kan du ikke logge på. ";
|
||||
|
||||
/* External Sieve scripts */
|
||||
"An external Sieve script is active" = "Et ekstremt Sieve-skript er aktivt ";
|
||||
"Sieve is a programming language that can be used for email filtering. If you let SOGo handle your filters, vacation and forward settings, your active script will be disabled." = "Sieve er et programmeringsspråk som kan brukes til e-postfiltrering. Hvis du lar SOGo håndtere filtrene, ferie- og videresendingsinnstillingene dine, vil det aktive skriptet bli deaktivert. ";
|
||||
"Let SOGo handle everything" = "La SOGo håndtere alt. ";
|
||||
|
||||
/* Password Recovery */
|
||||
"Password recovery mode" = "Tilbakestille passord";
|
||||
"Question" = "Spørsmål";
|
||||
"Secondary e-mail" = "Sekundær e-post";
|
||||
"Answer" = "Svar";
|
||||
"Password recovery" = "Tilbakestille passord";
|
||||
"Password change" = "Passordendring";
|
||||
|
||||
@@ -44,11 +44,18 @@
|
||||
"Add default email addresses" = "Додај подразумевану адресу епоште";
|
||||
"Days between responses" = "Дани између одговора";
|
||||
"Do not send responses to mailing lists" = "Не одговарај на поштанске листе";
|
||||
"Activation Constraints" = "Активирање ограничења";
|
||||
"Enable auto reply on" = "Омогући аутоматски одговор ";
|
||||
"First day of vacation" = "Први дан одмора";
|
||||
"Disable auto reply on" = "Онемогући аутоматски одговор ";
|
||||
"Last day of vacation" = "Последњи дан одмора";
|
||||
"Enter date" = "Унесите датум";
|
||||
/* Enable auto reply at this time of the day */
|
||||
"Enable auto reply at" = "Омогући аутоматски одговор у";
|
||||
"Enter time" = "Унесите време";
|
||||
/* Disable auto reply at this time of the day */
|
||||
"Disable auto reply at" = "Онемогући аутоматски одговор у";
|
||||
"Enable auto reply on these days" = "Омогући аутоматски одговор овим данима";
|
||||
"Always send vacation message response" = "Увек пошаљи поруку аутоматског одговора за време одмора";
|
||||
"The vacation message is sent prior to apply your filters." = "Порука за одмор се шаље пре примене Ваших филтера.";
|
||||
"Discard incoming mails during vacation" = "Одбаците долазну пошту током одмора";
|
||||
@@ -61,6 +68,8 @@
|
||||
|
||||
/* forward messages */
|
||||
"Forward incoming messages" = "Проследите долазне поруке";
|
||||
"Always forward" = "Увек проследи";
|
||||
"Incoming messages are forwarded prior to apply your filters." = "Долазне поруке се прослеђују пре него што се примене Ваши филтери.";
|
||||
"Keep a copy" = "Задржите копију";
|
||||
"Enter an email" = "Унесите адресу ел. поште";
|
||||
"Add another email" = "Додајте адресу ел. поште";
|
||||
@@ -194,6 +203,10 @@
|
||||
"displayremoteinlineimages_always" = "Увек";
|
||||
"Auto save every" = "Аутоматски сачувај на сваких";
|
||||
"minutes" = "минута";
|
||||
"Automatically mark messages as read" = "Аутоматски обележи поруке као прочитане";
|
||||
"Immediately on display" = "Одмах прикажи";
|
||||
"After displaying for" = "После приказивања за";
|
||||
"seconds" = "секунде";
|
||||
|
||||
/* Contact */
|
||||
"Personal Address Book" = "Лични адресар";
|
||||
@@ -244,6 +257,12 @@
|
||||
"Confirmation" = "Потврда";
|
||||
"Change" = "Измени";
|
||||
"Passwords don't match" = "Лозинке се не подударају";
|
||||
"POLICY_MIN_LOWERCASE_LETTER" = "Минимум %{0} малих слова";
|
||||
"POLICY_MIN_UPPERCASE_LETTER" = "Минимум %{0} великих слова";
|
||||
"POLICY_MIN_DIGIT" = "Минимум %{0} бројева";
|
||||
"POLICY_MIN_SPECIAL_SYMBOLS" = "Минимум %{0} специјалних карактера";
|
||||
"POLICY_MIN_LENGTH" = "Минимална дужина је %{0} карактера";
|
||||
|
||||
|
||||
/* Event+task classifications */
|
||||
"Default events classification" = "Подразумевана класификација догађаја";
|
||||
@@ -470,4 +489,12 @@
|
||||
/* External Sieve scripts */
|
||||
"An external Sieve script is active" = "Екстерна Sieve скрипта је активна";
|
||||
"Sieve is a programming language that can be used for email filtering. If you let SOGo handle your filters, vacation and forward settings, your active script will be disabled." = "Sieve је програмски језик за филтрирање електронске поште. Уколико SOGo управља вашим филтерима, подешавањима одмора и прослеђивањем порука, ваша активна скрипта биће онемогућена-";
|
||||
"Let SOGo handle everything" = "Нека SOGo управља свиме";
|
||||
"Let SOGo handle everything" = "Нека SOGo управља свиме";
|
||||
|
||||
/* Password Recovery */
|
||||
"Password recovery mode" = "Password recovery";
|
||||
"Question" = "Question";
|
||||
"Secondary e-mail" = "Secondary e-mail";
|
||||
"Answer" = "Answer";
|
||||
"Password recovery" = "Password recovery";
|
||||
"Password change" = "Password change";
|
||||
|
||||
@@ -206,6 +206,18 @@ static SoProduct *preferencesProduct = nil;
|
||||
if (![[defaults source] objectForKey: @"SOGoCalendarDefaultReminder"])
|
||||
[[defaults source] setObject: [defaults calendarDefaultReminder] forKey: @"SOGoCalendarDefaultReminder"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoPasswordRecoveryMode"])
|
||||
[[defaults source] setObject: [defaults passwordRecoveryMode] forKey: @"SOGoPasswordRecoveryMode"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoPasswordRecoveryQuestion"])
|
||||
[[defaults source] setObject: [defaults passwordRecoveryQuestion] forKey: @"SOGoPasswordRecoveryQuestion"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoPasswordRecoveryQuestionAnswer"])
|
||||
[[defaults source] setObject: [defaults passwordRecoveryQuestionAnswer] forKey: @"SOGoPasswordRecoveryQuestionAnswer"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoPasswordRecoverySecondaryEmail"])
|
||||
[[defaults source] setObject: [defaults passwordRecoverySecondaryEmail] forKey: @"SOGoPasswordRecoverySecondaryEmail"];
|
||||
|
||||
// Populate default calendar categories, based on the user's preferred language
|
||||
if (![[defaults source] objectForKey: @"SOGoCalendarCategories"])
|
||||
{
|
||||
|
||||
@@ -1638,4 +1638,40 @@ static NSArray *reminderValues = nil;
|
||||
return results;
|
||||
}
|
||||
|
||||
// Password recovery
|
||||
|
||||
- (NSArray *) passwordRecoveryList
|
||||
{
|
||||
return [NSArray arrayWithObjects:
|
||||
SOGoPasswordRecoveryDisabled,
|
||||
SOGoPasswordRecoveryQuestion,
|
||||
SOGoPasswordRecoverySecondaryEmail,
|
||||
nil];
|
||||
}
|
||||
|
||||
- (NSArray *) passwordRecoveryQuestionList
|
||||
{
|
||||
return [NSArray arrayWithObjects:
|
||||
SOGoPasswordRecoveryQuestion1,
|
||||
SOGoPasswordRecoveryQuestion2,
|
||||
SOGoPasswordRecoveryQuestion3,
|
||||
nil];
|
||||
}
|
||||
|
||||
- (NSString *) itemPasswordRecoveryText
|
||||
{
|
||||
return [self commonLabelForKey: [NSString stringWithFormat: @"passwordRecovery_%@",
|
||||
item]];
|
||||
}
|
||||
|
||||
- (BOOL) shouldDisplayPasswordRecovery
|
||||
{
|
||||
return [[SOGoSystemDefaults sharedSystemDefaults] isPasswordRecoveryEnabled];
|
||||
}
|
||||
|
||||
- (BOOL) shouldDisplayPasswordSection
|
||||
{
|
||||
return [self shouldDisplayPasswordRecovery] || [self shouldDisplayPasswordChange];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -792,7 +792,12 @@ static SoProduct *commonProduct = nil;
|
||||
// needs to be created (or destroyed) during the session initialization
|
||||
if ([_actionName isEqualToString: @"connect"] ||
|
||||
[_actionName isEqualToString: @"changePassword"] ||
|
||||
[_actionName isEqualToString: @"logoff"])
|
||||
[_actionName isEqualToString: @"logoff"] ||
|
||||
[_actionName isEqualToString: @"passwordRecovery"] ||
|
||||
[_actionName isEqualToString: @"passwordRecoveryEmail"] ||
|
||||
[_actionName isEqualToString: @"passwordRecoveryCheck"] ||
|
||||
[_actionName isEqualToString: @"passwordRecoveryEnabled"]
|
||||
)
|
||||
{
|
||||
return [super performActionNamed: _actionName];
|
||||
}
|
||||
|
||||
@@ -4,33 +4,43 @@
|
||||
"Create a new event" = "Opret en ny begivenhed";
|
||||
"Create a new task" = "Opret en ny opgave";
|
||||
"Edit this event or task" = "Rediger denne begivenhed eller opgave";
|
||||
"Print the current calendar view" = "Udskriv den aktuelle kalendervisning";
|
||||
"Delete this event or task" = "Slet denne begivenhed eller opgave";
|
||||
"Go to today" = "Gå til i dag";
|
||||
"Switch to day view" = "Skift til dagsvisning";
|
||||
"Switch to week view" = "Skift til ugevisning";
|
||||
"Switch to month view" = "Skift til månedsvisning";
|
||||
"Switch to multi-columns day view" = "Skift til dagsvisning med flere kolonner";
|
||||
"Reload all calendars" = "Genindlæs alle kalendere";
|
||||
|
||||
/* Tabs */
|
||||
"Date" = "Dato";
|
||||
"Calendars" = "Kalendere";
|
||||
"No events for selected criteria" = "Ingen begivenheder for udvalgte kriterier";
|
||||
"No tasks for selected criteria" = "Ingen opgaver for udvalgte kriterier";
|
||||
|
||||
/* Day */
|
||||
"DayOfTheMonth" = "Dag i måneden";
|
||||
"dayLabelFormat" = "%m/%d/%Y";
|
||||
"today" = "I dag";
|
||||
"Previous Day" = "Forrige dag";
|
||||
"Next Day" = "Næste dag";
|
||||
|
||||
/* Week */
|
||||
"Week" = "Uge";
|
||||
"this week" = "Denne uge";
|
||||
"Week %d" = "Uge%d";
|
||||
"Previous Week" = "Forrige uge";
|
||||
"Next Week" = "Næste uge";
|
||||
|
||||
/* Month */
|
||||
"this month" = "Denne måned";
|
||||
"Previous Month" = "Forrige måned";
|
||||
"Next Month" = "Næste måned";
|
||||
|
||||
/* Year */
|
||||
"this year" = "I år";
|
||||
|
||||
/* Menu */
|
||||
"Calendar" = "Kalender";
|
||||
"Contacts" = "Kontakter";
|
||||
@@ -53,11 +63,20 @@
|
||||
"A total of %{0} events were imported in the calendar." = "I alt %{0} begivenheder blev importeret i kalenderen.";
|
||||
"Compose E-Mail to All Attendees" = "Skriv besked til alle deltagere";
|
||||
"Compose E-Mail to Undecided Attendees" = "Skriv besked til ikke ubestemte deltagere";
|
||||
|
||||
/* Relative dates */
|
||||
"Yesterday" = "I går";
|
||||
"Today" = "I dag";
|
||||
"Tomorrow" = "I morgen";
|
||||
"Last %@" = "Sidste %@";
|
||||
|
||||
/* Folders */
|
||||
"Personal calendar" = "Personlig kalender";
|
||||
|
||||
/* Misc */
|
||||
"OpenGroupware.org" = "OpenGroupware.org";
|
||||
"Forbidden" = "Forbudt";
|
||||
|
||||
/* acls */
|
||||
"Access rights to" = "Adgangsrettigheder til";
|
||||
"For user" = "For bruger";
|
||||
@@ -80,12 +99,15 @@
|
||||
= "Denne person kan oprette emner i min kalender.";
|
||||
"This person can erase objects from my calendar."
|
||||
= "Denne person kan slette emner fra min kalender.";
|
||||
|
||||
/* Button Titles */
|
||||
"Subscribe to a Calendar..." = "Abonnér på en kalender ...";
|
||||
"Remove the selected Calendar" = "Fjern den valgte kalender";
|
||||
"New calendar" = "Ny kalender";
|
||||
"Name of the Calendar" = "Navn på Kalender";
|
||||
"new" = "Ny";
|
||||
"printview" = "Udskriftsvisning";
|
||||
"Print view" = "Udskriftsvisning";
|
||||
"Print" = "Udskriv";
|
||||
"edit" = "Redigér";
|
||||
"delete" = "Slet";
|
||||
"proposal" = "Forslag";
|
||||
@@ -95,8 +117,11 @@
|
||||
"Attach" = "Vedhæft";
|
||||
"Update" = "Opdatér";
|
||||
"Cancel" = "Annullér";
|
||||
"Reset" = "Nustil";
|
||||
"Save" = "Gem";
|
||||
"show_rejected_apts" = "Vis afviste aftaler";
|
||||
"hide_rejected_apts" = "Skjul afviste aftaler";
|
||||
|
||||
/* Schedule */
|
||||
"Schedule" = "Planlæg";
|
||||
"No appointments found" = "Ingen fundne aftaler";
|
||||
@@ -109,6 +134,22 @@
|
||||
"more attendees" = "Flere deltagere";
|
||||
"Hide already accepted and rejected appointments" = "Skjul allerede accepterede og afviste aftaler";
|
||||
"Show already accepted and rejected appointments" = "Vis allerede accepterede og afviste aftaler";
|
||||
|
||||
/* Print view */
|
||||
"LIST" = "Liste";
|
||||
"Print Settings" = "Udskriftsindstillinger";
|
||||
"Title" = "Titel";
|
||||
"Layout" = "Opsætning";
|
||||
"What to Print" = "Hvad skal udskrives";
|
||||
"Options" = "Indstillinger";
|
||||
"Tasks with no due date" = "Opgaver uden forfaldsdato";
|
||||
"Display working hours only" = "Vis kun arbejdstimer";
|
||||
"Completed tasks" = "Udførte opgaver ";
|
||||
"Display events and tasks colors" = "Vis farvemarkeret begivenheder og opgaver ";
|
||||
"Borders" = "Grænser";
|
||||
"Backgrounds" = "Baggrunde";
|
||||
"Page Format" = "Sideformat";
|
||||
|
||||
/* Appointments */
|
||||
"Appointment viewer" = "Aftale viser";
|
||||
"Appointment editor" = "Aftale editor";
|
||||
@@ -117,12 +158,12 @@
|
||||
"Start" = "Start";
|
||||
"End" = "Slut";
|
||||
"Due Date" = "Forfaldsdato";
|
||||
"Title" = "Titel";
|
||||
"Name" = "Navn";
|
||||
"Email" = "E-mail";
|
||||
"Status" = "Status";
|
||||
"% complete" = "% Færdig";
|
||||
"Location" = "Sted";
|
||||
"Add a category" = "Tilføj en kategori";
|
||||
"Priority" = "Prioritet";
|
||||
"Privacy" = "Beskyttelse af personlige oplysninger";
|
||||
"Cycle" = "Cyklus";
|
||||
@@ -140,19 +181,25 @@
|
||||
"Reminder" = "Påmindelse";
|
||||
"General" = "Generelt";
|
||||
"Reply" = "Svar";
|
||||
"Created by" = "Oprettet af";
|
||||
"You are invited to participate" = "Du er inviteret til at deltage";
|
||||
"Target" = "Mål";
|
||||
"attributes" = "attributter";
|
||||
"attendees" = "deltagere";
|
||||
"delegated from" = "delegeret fra";
|
||||
|
||||
/* checkbox title */
|
||||
"is private" = "er privat";
|
||||
|
||||
/* classification */
|
||||
"Public" = "Offentlig";
|
||||
"Private" = "Privat";
|
||||
|
||||
/* text used in overviews and tooltips */
|
||||
"empty title" = "Tom titel";
|
||||
"private appointment" = "Privat aaftale";
|
||||
"Change..." = "Skift ...";
|
||||
|
||||
/* Appointments (participation state) */
|
||||
"partStat_NEEDS-ACTION" = "Jeg vil bekræfte senere";
|
||||
"partStat_ACCEPTED" = "Jeg vil deltage";
|
||||
@@ -160,10 +207,12 @@
|
||||
"partStat_TENTATIVE" = "Jeg vil måske deltage";
|
||||
"partStat_DELEGATED" = "Jeg uddelegerer";
|
||||
"partStat_OTHER" = "Andre";
|
||||
|
||||
/* Appointments (error messages) */
|
||||
"Conflicts found!" = "Konflikter fundet!";
|
||||
"Invalid iCal data!" = "Ugyldig iCal data!";
|
||||
"Could not create iCal data!" = "Kunne ikke oprette iCal data!";
|
||||
|
||||
/* Searching */
|
||||
"view_all" = "Alle";
|
||||
"view_today" = "I dag";
|
||||
@@ -171,23 +220,35 @@
|
||||
"view_next14" = "Næste 14 dage";
|
||||
"view_next31" = "Næste 31 dage";
|
||||
"view_thismonth" = "Denne måned";
|
||||
"view_thisyear" = "Dette år";
|
||||
"view_last7" = "Sidste 7 dage";
|
||||
"view_last14" = "Sidste 14 dage";
|
||||
"view_last31" = "Sidste 31 dage";
|
||||
"view_lastmonth" = "Sidste måned";
|
||||
"view_lastyear" = "Sidste år ";
|
||||
"view_future" = "Alle fremtidige begivenheder";
|
||||
"view_selectedday" = "Valgte dag";
|
||||
"view_not_started" = "Ikke påbegyndte opgaver";
|
||||
"view_overdue" = "Forfaldne opgaver";
|
||||
"view_incomplete" = "Ikke udførte opgaver";
|
||||
"View" = "Vis";
|
||||
"Title or Description" = "Titel eller Beskrivelse";
|
||||
"Title, category or location" = "Titel, kategori eller placering";
|
||||
"Entire content" = "Hele indholdet";
|
||||
"Search" = "Søg";
|
||||
"Search attendees" = "Søg deltagere";
|
||||
"Search resources" = "Søg ressourcer";
|
||||
"Search appointments" = "Søg aftaler";
|
||||
"All day Event" = "Heldags arrangement";
|
||||
"check for conflicts" = "Kontrollér for konflikter";
|
||||
"Browse URL" = "Gennemse URL";
|
||||
"URL" = "URL";
|
||||
"newAttendee" = "Tilføj deltager";
|
||||
|
||||
/* calendar modes */
|
||||
"Overview" = "Oversigt";
|
||||
"Chart" = "Top";
|
||||
"List" = "Liste";
|
||||
"Columns" = "Kolonner";
|
||||
|
||||
/* Priorities */
|
||||
"prio_0" = "Ikke specificeret";
|
||||
"prio_1" = "Høj";
|
||||
@@ -199,6 +260,7 @@
|
||||
"prio_7" = "Lav";
|
||||
"prio_8" = "Lav";
|
||||
"prio_9" = "Lav";
|
||||
|
||||
/* access classes (privacy) */
|
||||
"PUBLIC_vevent" = "Offentlig begivenhed";
|
||||
"CONFIDENTIAL_vevent" = "Hemmelig begivenhed";
|
||||
@@ -206,6 +268,7 @@
|
||||
"PUBLIC_vtodo" = "Offentlig opgave";
|
||||
"CONFIDENTIAL_vtodo" = "Hemmelig opgave";
|
||||
"PRIVATE_vtodo" = "Privat opgave";
|
||||
|
||||
/* status type */
|
||||
"status_" = "Ikke specificeret";
|
||||
"status_NOT-SPECIFIED" = "Ikke specificeret";
|
||||
@@ -215,6 +278,16 @@
|
||||
"status_NEEDS-ACTION" = "Kræver handling";
|
||||
"status_IN-PROCESS" = "I gang";
|
||||
"status_COMPLETED" = "Afsluttet den";
|
||||
|
||||
/* Priority level */
|
||||
"low" = "Lav";
|
||||
|
||||
/* Priority level */
|
||||
"normal" = "Normal";
|
||||
|
||||
/* Priority level */
|
||||
"high" = "Høj";
|
||||
|
||||
/* Cycles */
|
||||
"cycle_once" = "cycle_once";
|
||||
"cycle_daily" = "cycle_daily";
|
||||
@@ -229,6 +302,7 @@
|
||||
"Recurrence pattern" = "Gentagelsesmønster";
|
||||
"Range of recurrence" = "Gentagelsesinterval";
|
||||
"Daily" = "Dagligt";
|
||||
"Multi-Columns" = "Multikolonner";
|
||||
"Weekly" = "Ugentligt";
|
||||
"Monthly" = "Månedligt";
|
||||
"Yearly" = "Årligt";
|
||||
@@ -237,20 +311,30 @@
|
||||
"Week(s)" = "Uge(r)";
|
||||
"On" = "den";
|
||||
"Month(s)" = "Måned (er)";
|
||||
|
||||
/* [Event recurrence editor] Ex: _The_ first Sunday */
|
||||
"The" = "Den";
|
||||
"Recur on day(s)" = "Gentages på dag(e)";
|
||||
"Year(s)" = "År";
|
||||
|
||||
/* [Event recurrence editor] Ex: Every first Sunday _of_ April */
|
||||
"cycle_of" = "af";
|
||||
"No end date" = "Ingen slutdato";
|
||||
"Create" = "Opret";
|
||||
"appointment(s)" = "aftale(r)";
|
||||
"Repeat until" = "Gentag indtil";
|
||||
"End Repeat" = "Stop gentag";
|
||||
"Never" = "Aldrig";
|
||||
"After" = "Efter";
|
||||
"On Date" = "På dato";
|
||||
"times" = "Tiden";
|
||||
"First" = "Første";
|
||||
"Second" = "Anden";
|
||||
"Third" = "Tredje";
|
||||
"Fourth" = "Fjerde";
|
||||
"Fift" = "Femte";
|
||||
"Last" = "Sidste";
|
||||
|
||||
/* Appointment categories */
|
||||
"category_none" = "Ingen";
|
||||
"category_labels" = "Jubilæum, fødselsdag, forretning, kald, klienter, konkurrence, kunde, favoritter, opfølgning, gaver, helligdage, idéer, møde, problemer, diverse, personlig, projekter, offentlig helligdag, status, Leverandører, Rejser, Ferie";
|
||||
@@ -263,6 +347,7 @@
|
||||
"repeat_YEARLY" = "Årligt";
|
||||
"repeat_CUSTOM" = "Tilpasset ...";
|
||||
"reminder_NONE" = "Ingen påmindelse";
|
||||
"reminder_0" = "På tidspunktet for begivenheden";
|
||||
"reminder_5_MINUTES_BEFORE" = "5 minutter før";
|
||||
"reminder_10_MINUTES_BEFORE" = "10 minutter før";
|
||||
"reminder_15_MINUTES_BEFORE" = "15 minutter før";
|
||||
@@ -279,6 +364,7 @@
|
||||
"reminder_MINUTES" = "Minutter";
|
||||
"reminder_HOURS" = "Timer";
|
||||
"reminder_DAYS" = "Dage";
|
||||
"reminder_WEEKS" = "Uger";
|
||||
"reminder_BEFORE" = "Før";
|
||||
"reminder_AFTER" = "Efter";
|
||||
"reminder_START" = "Begivenheden starter";
|
||||
@@ -294,20 +380,40 @@
|
||||
"zoom_100" = "100%";
|
||||
"zoom_50" = "50%";
|
||||
"zoom_25" = "25%";
|
||||
|
||||
/* Arial label for reminder units */
|
||||
"Reminder units" = "Påmindelsesenheder";
|
||||
|
||||
/* Aria label for reminder time position (after or before) */
|
||||
"Reminder position" = "Påmindelsesposition";
|
||||
|
||||
/* Aria label for reminder relation with event (start or end) */
|
||||
"Reminder relation" = "Påmindelsesforhold";
|
||||
|
||||
/* transparency */
|
||||
"Show Time as Free" = "Vis tidspunkt som ledig";
|
||||
|
||||
/* email notifications */
|
||||
"Send Appointment Notifications" = "Send aftalenotifikationer";
|
||||
"From" = "Fra";
|
||||
"To" = "Til";
|
||||
|
||||
/* validation errors */
|
||||
validate_notitle = "Ingen titel er indtastet, vil du fortsætte?";
|
||||
validate_invalid_startdate = "Forkert startdato!";
|
||||
validate_invalid_enddate = "Forkert slutdato!";
|
||||
validate_endbeforestart = "Indtastet slutdato ligger før startdato.";
|
||||
validate_untilbeforeend = "Gentagelsen skal slutte efter den første forekomst.";
|
||||
|
||||
"Events" = "Opgaver";
|
||||
"Tasks" = "Opgaver";
|
||||
"Show completed tasks" = "Vis udførte opgaver";
|
||||
|
||||
/* tabs */
|
||||
"Task" = "Opgave";
|
||||
"Event" = "Begivenhed";
|
||||
"Recurrence" = "Gentagelse";
|
||||
|
||||
/* toolbar */
|
||||
"New Event" = "Ny begivenhed";
|
||||
"New Task" = "Ny opgave";
|
||||
@@ -318,7 +424,11 @@ validate_endbeforestart = "Indtastet slutdato ligger før startdato.";
|
||||
"Week View" = "Ugevisning";
|
||||
"Month View" = "Månedsvisning";
|
||||
"Reload" = "Opdatér";
|
||||
|
||||
/* Number of selected components in events or tasks list */
|
||||
"selected" = "Valgte";
|
||||
"eventPartStatModificationError" = "Din deltagelsesstatus kunne ikke ændres.";
|
||||
|
||||
/* menu */
|
||||
"New Event..." = "Ny begivenhed ...";
|
||||
"New Task..." = "Ny opgave ...";
|
||||
@@ -334,19 +444,53 @@ validate_endbeforestart = "Indtastet slutdato ligger før startdato.";
|
||||
= "Du kan ikke fjerne eller afmelde din personlige kalender.";
|
||||
"Are you sure you want to delete the calendar \"%{0}\"?"
|
||||
= "Er du sikker på du vil slette kalenderen \"%{0}\"?";
|
||||
/* Legend */
|
||||
"Are you sure you want to delete the selected components?"
|
||||
= "Er du sikker på, at du vil slette de valgte elementer?";
|
||||
|
||||
/* Participation role */
|
||||
"Role" = "Rolle";
|
||||
|
||||
/* Participant role: participation is required */
|
||||
"Participant" = "Deltager";
|
||||
|
||||
/* Participant role: participation is required */
|
||||
"req-participant" = "Deltager";
|
||||
|
||||
/* Participant role: participation is optional */
|
||||
"Optional Participant" = "Valgfri deltager";
|
||||
|
||||
/* Participant role: participation is optional */
|
||||
"opt-participant" = "Valgfri deltager";
|
||||
|
||||
/* Participant role: participant is copied for information purposes only */
|
||||
"Non Participant" = "Deltager ikke";
|
||||
|
||||
/* Participant role: participant is copied for information purposes only */
|
||||
"non-participant" = "Deltager ikke";
|
||||
|
||||
/* Participant role: participant is chair of the calendar entity */
|
||||
"Chair" = "Sæde";
|
||||
|
||||
/* Participant role: participant is chair of the calendar entity */
|
||||
"chair" = "Formand";
|
||||
|
||||
/* Participant status: needs action */
|
||||
"Needs action" = "Kræver handling";
|
||||
|
||||
/* Participant status: event accepted */
|
||||
"Accepted" = "Accepteret";
|
||||
|
||||
/* Participant status: event declined */
|
||||
"Declined" = "Afvist";
|
||||
|
||||
/* Participant status: tentatively accepted */
|
||||
"Tentative" = "Tentativ";
|
||||
|
||||
"Free" = "Ledig";
|
||||
"Busy" = "Optaget";
|
||||
"Maybe busy" = "Måske optaget";
|
||||
"No free-busy information" = "Ingen ledig/optaget information ";
|
||||
|
||||
/* FreeBusy panel buttons and labels */
|
||||
"Suggest time slot" = "Foreslå tidsinterval";
|
||||
"Zoom" = "Zoom";
|
||||
@@ -360,11 +504,18 @@ validate_endbeforestart = "Indtastet slutdato ligger før startdato.";
|
||||
"and" = "og";
|
||||
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"
|
||||
= "En tidskonflikt med en eller flere deltagere. \nBehold de aktuelle indstillinger alligevel?";
|
||||
/* apt list */
|
||||
"Would you like to remove them and send the invitation to the remaining attendees?"
|
||||
= "Vil du fjerne dem og sende invitationen til de resterende deltagere?";
|
||||
|
||||
/* events list */
|
||||
"Due" = "På grund";
|
||||
"(Private Event)" = "(Privat begivenhed)";
|
||||
vevent_class0 = "(Offentlig begivenhed)";
|
||||
vevent_class1 = "(Privat begivenhed)";
|
||||
vevent_class2 = "(Hemmelig begivenhed)";
|
||||
|
||||
/* tasks list */
|
||||
"Descending Order" = "Faldende rækkefølge";
|
||||
vtodo_class0 = "(Offentlig opgave)";
|
||||
vtodo_class1 = "(Privat opgave)";
|
||||
vtodo_class2 = "(Hemmelig opgave)";
|
||||
@@ -374,12 +525,17 @@ vtodo_class2 = "(Hemmelig opgave)";
|
||||
"editRepeatingItem" = "Det element, du redigerer, er et gentaget element. Ønsker du at redigere alle forekomster af det eller kun dette ene tilfælde?";
|
||||
"button_thisOccurrenceOnly" = "Kun denne forekomst";
|
||||
"button_allOccurrences" = "Alle forekomster";
|
||||
"Edit This Occurrence" = "Rediger denne begivenhed";
|
||||
"Edit All Occurrences" = "Rediger alle begivenheder";
|
||||
"Update This Occurrence" = "Opdater denne begivenhed";
|
||||
"Update All Occurrences" = "Opdater alle begivenheder";
|
||||
|
||||
/* Properties dialog */
|
||||
"Color" = "Farve";
|
||||
"Include in free-busy" = "Medtag i ledig-optaget";
|
||||
"Synchronization" = "Synkronisering";
|
||||
"Synchronize" = "Synkronisér";
|
||||
"Tag:" = "Mærke";
|
||||
"Tag" = "Mærke";
|
||||
"Display" = "Display";
|
||||
"Show alarms" = "Vis alarmer";
|
||||
"Show tasks" = "Vis opgaver";
|
||||
@@ -387,11 +543,23 @@ vtodo_class2 = "(Hemmelig opgave)";
|
||||
"Receive a mail when I modify my calendar" = "Modtag en mail, når jeg ændrer min kalender";
|
||||
"Receive a mail when someone else modifies my calendar" = "Modtag en mail, når andre ændrer min kalender";
|
||||
"When I modify my calendar, send a mail to" = "Når jeg ændrer min kalender, så send en mail til";
|
||||
"Email Address" = "Emailadresser";
|
||||
"Export" = "Eksportér";
|
||||
|
||||
|
||||
/* Show only the calendar for which the menu is displayed */
|
||||
"Show Only This Calendar" = "Vis kun denne kalender";
|
||||
|
||||
|
||||
/* Show all calendar (personal, subscriptions and web) */
|
||||
"Show All Calendars" = "Vis alle kalendere";
|
||||
|
||||
"Links to this Calendar" = "Links til denne kalender";
|
||||
"Authenticated User Access" = "Godkendt brugeradgang";
|
||||
"CalDAV URL" = "CalDAV URL";
|
||||
"WebDAV ICS URL" = "WebDAV ICS URL";
|
||||
"WebDAV XML URL" = "WebDAV XML URL";
|
||||
|
||||
/* Error messages */
|
||||
"dayFieldInvalid" = "Angiv venligst en numerisk værdi i feltet Dag(e) skal være større end eller lig med 1.";
|
||||
"weekFieldInvalid" = "Angiv venligst en numerisk værdi i feltet. Uge(r) skal være større end eller lig med 1.";
|
||||
@@ -408,15 +576,80 @@ vtodo_class2 = "(Hemmelig opgave)";
|
||||
"tagWasRemoved" = "Hvis du fjerner denne kalender fra synkronisering, skal du genindlæse data på din mobile enhed.\nFortsæt?";
|
||||
"DestinationCalendarError" = "Kilde og destination kalendere er de samme. Prøv at kopiere til en anden kalender.";
|
||||
"EventCopyError" = "Kopieringen mislykkedes. Prøv at kopiér til en anden kalender.";
|
||||
"Please select at least one calendar" = "Vælg venligst mindst en kalender";
|
||||
"Open Task..." = "Åbn opgave ...";
|
||||
"Mark Completed" = "Markér afsluttet";
|
||||
"Delete Task" = "Slet opgave";
|
||||
"Delete Event" = "Slet begivenhed";
|
||||
"Copy event to my calendar" = "Kopiér begivenhed til min kalender";
|
||||
"View Raw Source" = "Vis kilde";
|
||||
"Move To" = "Flyt til";
|
||||
"Copy To" = "Kopier til";
|
||||
"Subscriptions" = "Abonnementer";
|
||||
"Subscribe to a shared calendar" = "Abonnér på en delt kalender";
|
||||
"Subscribe to a web calendar..." = "Abonnér på en online kalender ...";
|
||||
"URL of the Calendar" = "Kalenderens URL";
|
||||
"Web Calendar" = "Online kalender";
|
||||
"Web Calendars" = "Online kalendere";
|
||||
"Reload on login" = "Genindlæs ved login";
|
||||
"Invalid number." = "Ugyldigt nummer.";
|
||||
"Please identify yourself to %{0}" = "Identificer dig selv til %{0}";
|
||||
"quantity" = "Antal";
|
||||
"Current view" = "Nuværende visning";
|
||||
"Selected events and tasks" = "Valgte begivenheder og opgaver";
|
||||
"Custom date range" = "Tilpasset datointerval";
|
||||
"Select starting date" = "Vælg startdato";
|
||||
"Select ending date" = "Vælg slutdato";
|
||||
"Delegated to" = "Uddelegeret til";
|
||||
"Keep sending me updates" = "Fortsæt med at sende mig opdateringer";
|
||||
"OK" = "OK";
|
||||
"Confidential" = "Hemmelig";
|
||||
"Enable" = "Aktivér";
|
||||
"Filter" = "Filter";
|
||||
"Sort" = "Sortér";
|
||||
"Back" = "Tilbage";
|
||||
"Day" = "Dag";
|
||||
"Month" = "Måned";
|
||||
"New Appointment" = "Ny aftale";
|
||||
"filters" = "Filtre";
|
||||
"Today" = "I dag";
|
||||
"More options" = "Flere indstillinger";
|
||||
"Delete This Occurrence" = "Slet denne begivenhed";
|
||||
"Delete All Occurrences" = "Slet alle begivenheder";
|
||||
"Add Recurrence Date" = "Tilføj gentagelsesdato";
|
||||
"Add From" = "Tilføj fra";
|
||||
"Add Due" = "Tilføj forfald";
|
||||
"Import" = "Importer";
|
||||
"Rename" = "Omdøb";
|
||||
"Import Calendar" = "Importer kalender";
|
||||
"Select an ICS file." = "Vælg en ICS fil";
|
||||
|
||||
/* Notification when user subscribes to a calendar */
|
||||
"Successfully subscribed to calendar" = "Tilmeldte sig kalenderen";
|
||||
|
||||
/* Aria label for color chip button to select and unselect an event or task */
|
||||
"Toggle item" = "Skift element";
|
||||
|
||||
/* Aria label for scope of search on events or tasks */
|
||||
"Search scope" = "Søgeomfang";
|
||||
|
||||
/* 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";
|
||||
@@ -12,29 +12,35 @@
|
||||
"Switch to month view" = "Endre til månedsvisning";
|
||||
"Switch to multi-columns day view" = "Bytt til multikolonne dags visning";
|
||||
"Reload all calendars" = "Last på nytt alle kalendre";
|
||||
|
||||
/* Tabs */
|
||||
"Date" = "Dato";
|
||||
"Calendars" = "Kalendere";
|
||||
"No events for selected criteria" = "Ingen ";
|
||||
"No tasks for selected criteria" = "Ingen oppgaver for det valgte kriteriet";
|
||||
|
||||
/* Day */
|
||||
"DayOfTheMonth" = "Dag i måneden";
|
||||
"dayLabelFormat" = "%Y-%m-%d";
|
||||
"today" = "Idag";
|
||||
"Previous Day" = "Forrige dag";
|
||||
"Next Day" = "Neste dag";
|
||||
|
||||
/* Week */
|
||||
"Week" = "Uke";
|
||||
"this week" = "denne uken";
|
||||
"Week %d" = "Uke %d";
|
||||
"Previous Week" = "Forrige uke";
|
||||
"Next Week" = "Neste uke";
|
||||
|
||||
/* Month */
|
||||
"this month" = "denne måneden";
|
||||
"Previous Month" = "Forrige måned";
|
||||
"Next Month" = "Neste måned";
|
||||
|
||||
/* Year */
|
||||
"this year" = "dette år";
|
||||
|
||||
/* Menu */
|
||||
"Calendar" = "Kalender";
|
||||
"Contacts" = "Kontakter";
|
||||
@@ -57,11 +63,20 @@
|
||||
"A total of %{0} events were imported in the calendar." = "Totalt %{0} hendelser ble importert til kalenderen.";
|
||||
"Compose E-Mail to All Attendees" = "Skriv en e-post til alle deltakere";
|
||||
"Compose E-Mail to Undecided Attendees" = "Skriv en e-post til alle deltakere som ikke har svart";
|
||||
|
||||
/* Relative dates */
|
||||
"Yesterday" = "I går";
|
||||
"Today" = "I dag";
|
||||
"Tomorrow" = "I morgen";
|
||||
"Last %@" = "Siste %@";
|
||||
|
||||
/* Folders */
|
||||
"Personal calendar" = "Personlig kalender";
|
||||
|
||||
/* Misc */
|
||||
"OpenGroupware.org" = "OpenGroupware.org";
|
||||
"Forbidden" = "Forbudt";
|
||||
|
||||
/* acls */
|
||||
"Access rights to" = "Tilgangsrettigheter til";
|
||||
"For user" = "For bruker";
|
||||
@@ -84,6 +99,7 @@
|
||||
= "Personen kan opprette objekter i min kalender.";
|
||||
"This person can erase objects from my calendar."
|
||||
= "Personen kan fjerne objekter i min kalender.";
|
||||
|
||||
/* Button Titles */
|
||||
"Subscribe to a Calendar..." = "Abonnere på en kalender...";
|
||||
"Remove the selected Calendar" = "Slett markert kalender";
|
||||
@@ -91,6 +107,7 @@
|
||||
"Name of the Calendar" = "Navn på kalenderen";
|
||||
"new" = "Ny";
|
||||
"Print view" = "Forhåndsvisning";
|
||||
"Print" = "Skriv ut";
|
||||
"edit" = "Endre";
|
||||
"delete" = "Slett";
|
||||
"proposal" = "Foreslå";
|
||||
@@ -104,6 +121,7 @@
|
||||
"Save" = "Lagre";
|
||||
"show_rejected_apts" = "Vis avbrutte møter";
|
||||
"hide_rejected_apts" = "Skjul avbrutte møter";
|
||||
|
||||
/* Schedule */
|
||||
"Schedule" = "Planlegg";
|
||||
"No appointments found" = "Ingen avtaler funnet";
|
||||
@@ -116,6 +134,7 @@
|
||||
"more attendees" = "Flere deltagere";
|
||||
"Hide already accepted and rejected appointments" = "Skjul allerede aksepterte og avviste avtaler";
|
||||
"Show already accepted and rejected appointments" = "Vis aksepterte og avviste avtaler";
|
||||
|
||||
/* Print view */
|
||||
"LIST" = "Liste";
|
||||
"Print Settings" = "Utskrift instillinger";
|
||||
@@ -129,6 +148,8 @@
|
||||
"Display events and tasks colors" = "Vis hendelsers og oppgavers farger";
|
||||
"Borders" = "Grenser";
|
||||
"Backgrounds" = "Bakgrunner";
|
||||
"Page Format" = "Sideformat";
|
||||
|
||||
/* Appointments */
|
||||
"Appointment viewer" = "Avtaleviser";
|
||||
"Appointment editor" = "Avtaleredigerer";
|
||||
@@ -166,15 +187,19 @@
|
||||
"attributes" = "attributter";
|
||||
"attendees" = "deltakere";
|
||||
"delegated from" = "delegert fra";
|
||||
|
||||
/* checkbox title */
|
||||
"is private" = "er privat";
|
||||
|
||||
/* classification */
|
||||
"Public" = "Felles";
|
||||
"Private" = "Privat";
|
||||
|
||||
/* text used in overviews and tooltips */
|
||||
"empty title" = "Ingen tittel";
|
||||
"private appointment" = "Privat møte";
|
||||
"Change..." = "Endre...";
|
||||
|
||||
/* Appointments (participation state) */
|
||||
"partStat_NEEDS-ACTION" = "Jeg vil bekrefte senere";
|
||||
"partStat_ACCEPTED" = "Jeg vil delta";
|
||||
@@ -182,10 +207,12 @@
|
||||
"partStat_TENTATIVE" = "Jeg kommer kanskje";
|
||||
"partStat_DELEGATED" = "Jeg delegerer";
|
||||
"partStat_OTHER" = "Annet";
|
||||
|
||||
/* Appointments (error messages) */
|
||||
"Conflicts found!" = "Konflikter funnet!";
|
||||
"Invalid iCal data!" = "Ugyldig iCal-data!";
|
||||
"Could not create iCal data!" = "Kunne ikke opprette iCal-data!";
|
||||
|
||||
/* Searching */
|
||||
"view_all" = "Alle";
|
||||
"view_today" = "I dag";
|
||||
@@ -193,6 +220,12 @@
|
||||
"view_next14" = "Neste 14 dager";
|
||||
"view_next31" = "Neste 31 dager";
|
||||
"view_thismonth" = "Denne måneden";
|
||||
"view_thisyear" = "I år";
|
||||
"view_last7" = "Siste 7 dager";
|
||||
"view_last14" = "Siste 14 dager";
|
||||
"view_last31" = "Siste 31 dager";
|
||||
"view_lastmonth" = "Forrige måned";
|
||||
"view_lastyear" = "i fjor";
|
||||
"view_future" = "Alle fremtidige hendelser";
|
||||
"view_selectedday" = "Valgt dag";
|
||||
"view_not_started" = "Oppgaver som ikke er startet";
|
||||
@@ -209,11 +242,13 @@
|
||||
"check for conflicts" = "Kontroller konflikter";
|
||||
"URL" = "URL";
|
||||
"newAttendee" = "Legg til deltakere";
|
||||
|
||||
/* calendar modes */
|
||||
"Overview" = "Oversikt";
|
||||
"Chart" = "Diagram";
|
||||
"List" = "Liste";
|
||||
"Columns" = "Kolonner";
|
||||
|
||||
/* Priorities */
|
||||
"prio_0" = "Ikke spesifisert";
|
||||
"prio_1" = "Høy";
|
||||
@@ -225,6 +260,7 @@
|
||||
"prio_7" = "Lav";
|
||||
"prio_8" = "Lav";
|
||||
"prio_9" = "Lav";
|
||||
|
||||
/* access classes (privacy) */
|
||||
"PUBLIC_vevent" = "Felles hendelse";
|
||||
"CONFIDENTIAL_vevent" = "Konfidensiell hendelse";
|
||||
@@ -232,6 +268,7 @@
|
||||
"PUBLIC_vtodo" = "Felles oppgave";
|
||||
"CONFIDENTIAL_vtodo" = "Konfidensiell oppgave";
|
||||
"PRIVATE_vtodo" = "Privat oppgave";
|
||||
|
||||
/* status type */
|
||||
"status_" = "Ikke angitt";
|
||||
"status_NOT-SPECIFIED" = "Ikke spesifisert";
|
||||
@@ -241,6 +278,16 @@
|
||||
"status_NEEDS-ACTION" = "Trenger handling";
|
||||
"status_IN-PROCESS" = "Pågående";
|
||||
"status_COMPLETED" = "Utført";
|
||||
|
||||
/* Priority level */
|
||||
"low" = "lav";
|
||||
|
||||
/* Priority level */
|
||||
"normal" = "normal";
|
||||
|
||||
/* Priority level */
|
||||
"high" = "høy";
|
||||
|
||||
/* Cycles */
|
||||
"cycle_once" = "en gang";
|
||||
"cycle_daily" = "hver dag";
|
||||
@@ -264,10 +311,12 @@
|
||||
"Week(s)" = "Uke(r)";
|
||||
"On" = "På";
|
||||
"Month(s)" = "Måned(er)";
|
||||
|
||||
/* [Event recurrence editor] Ex: _The_ first Sunday */
|
||||
"The" = " Den";
|
||||
"Recur on day(s)" = "Gjentas på dag(er)";
|
||||
"Year(s)" = "År";
|
||||
|
||||
/* [Event recurrence editor] Ex: Every first Sunday _of_ April */
|
||||
"cycle_of" = "av";
|
||||
"No end date" = "Ingen sluttdato";
|
||||
@@ -285,6 +334,7 @@
|
||||
"Fourth" = "Fjerde";
|
||||
"Fift" = "Femte";
|
||||
"Last" = "Siste";
|
||||
|
||||
/* Appointment categories */
|
||||
"category_none" = "Ingen";
|
||||
"category_labels" = "Arbeid,Diverse,Favoritter,Fødselsdager,Helgdager,Idéer,Konkurranser,Kunder,Ledighet,Leverandører,Oppfølging,Personlig,Presenter,Prosjekt,Møter,Reiser,Status,Telefonsamtaler,Ærend";
|
||||
@@ -297,6 +347,7 @@
|
||||
"repeat_YEARLY" = "Hvert år";
|
||||
"repeat_CUSTOM" = "Valgfri...";
|
||||
"reminder_NONE" = "Ingen påminnelse";
|
||||
"reminder_0" = "På tidspunktet for hendelsen";
|
||||
"reminder_5_MINUTES_BEFORE" = "5 minutter før";
|
||||
"reminder_10_MINUTES_BEFORE" = "10 minutter før";
|
||||
"reminder_15_MINUTES_BEFORE" = "15 minutter før";
|
||||
@@ -329,24 +380,40 @@
|
||||
"zoom_100" = "100%";
|
||||
"zoom_50" = "50%";
|
||||
"zoom_25" = "25%";
|
||||
|
||||
/* Arial label for reminder units */
|
||||
"Reminder units" = "Påminnelsesenheter";
|
||||
|
||||
/* Aria label for reminder time position (after or before) */
|
||||
"Reminder position" = "Påminnelsesposisjon ";
|
||||
|
||||
/* Aria label for reminder relation with event (start or end) */
|
||||
"Reminder relation" = "Påminnelsesforhold";
|
||||
|
||||
/* transparency */
|
||||
"Show Time as Free" = "Vis tid som ledig";
|
||||
|
||||
/* email notifications */
|
||||
"Send Appointment Notifications" = "Send avtale varslinger";
|
||||
"From" = "Fra";
|
||||
"To" = "Til";
|
||||
|
||||
/* validation errors */
|
||||
validate_notitle = "Ingen tittel er angitt, fortsette?";
|
||||
validate_invalid_startdate = "Feil startdato!";
|
||||
validate_invalid_enddate = "Feil sluttdato!";
|
||||
validate_endbeforestart = "Angitt sluttdato inntreffer før angitt startdato.";
|
||||
validate_untilbeforeend = "Gjentakelsen må avsluttes etter den første hendelsen";
|
||||
|
||||
"Events" = "Hendelser";
|
||||
"Tasks" = "Oppgaver";
|
||||
"Show completed tasks" = "Vis utførte oppgave";
|
||||
|
||||
/* tabs */
|
||||
"Task" = "Oppgave";
|
||||
"Event" = "Hendelse";
|
||||
"Recurrence" = "Regelmessighet";
|
||||
|
||||
/* toolbar */
|
||||
"New Event" = "Ny hendelse";
|
||||
"New Task" = "Ny oppgave";
|
||||
@@ -357,9 +424,11 @@ validate_endbeforestart = "Angitt sluttdato inntreffer før angitt startdato.
|
||||
"Week View" = "Ukesvisning";
|
||||
"Month View" = "Månedsvisning";
|
||||
"Reload" = "Last på nytt";
|
||||
|
||||
/* Number of selected components in events or tasks list */
|
||||
"selected" = "valgt";
|
||||
"eventPartStatModificationError" = "Din deltakerstatus kunne ikke endres.";
|
||||
|
||||
/* menu */
|
||||
"New Event..." = "Ny hendelse...";
|
||||
"New Task..." = "Ny oppgave...";
|
||||
@@ -375,19 +444,53 @@ validate_endbeforestart = "Angitt sluttdato inntreffer før angitt startdato.
|
||||
= "Du kan ikke slette eller avbryte abonnement på en personlig kalender.";
|
||||
"Are you sure you want to delete the calendar \"%{0}\"?"
|
||||
= "Er du sikker på at du vil slette kalenderen \"%{0}\"?";
|
||||
/* Legend */
|
||||
"Are you sure you want to delete the selected components?"
|
||||
= "Er du sikker på at du vil slette de markerte komponentene? ";
|
||||
|
||||
/* Participation role */
|
||||
"Role" = "Rolle";
|
||||
|
||||
/* Participant role: participation is required */
|
||||
"Participant" = "Deltakelse kreves";
|
||||
|
||||
/* Participant role: participation is required */
|
||||
"req-participant" = "Deltaker";
|
||||
|
||||
/* Participant role: participation is optional */
|
||||
"Optional Participant" = "Deltakelse valgfritt";
|
||||
|
||||
/* Participant role: participation is optional */
|
||||
"opt-participant" = "Valgfri deltaker ";
|
||||
|
||||
/* Participant role: participant is copied for information purposes only */
|
||||
"Non Participant" = "Ingen deltakelse";
|
||||
|
||||
/* Participant role: participant is copied for information purposes only */
|
||||
"non-participant" = "Ingen deltaker ";
|
||||
|
||||
/* Participant role: participant is chair of the calendar entity */
|
||||
"Chair" = "Stol";
|
||||
|
||||
/* Participant role: participant is chair of the calendar entity */
|
||||
"chair" = "Stol";
|
||||
|
||||
/* Participant status: needs action */
|
||||
"Needs action" = "Trenger handling";
|
||||
|
||||
/* Participant status: event accepted */
|
||||
"Accepted" = "Akseptert";
|
||||
|
||||
/* Participant status: event declined */
|
||||
"Declined" = "Avvist";
|
||||
|
||||
/* Participant status: tentatively accepted */
|
||||
"Tentative" = "Foreløpig";
|
||||
|
||||
"Free" = "Ledig";
|
||||
"Busy" = "Opptatt";
|
||||
"Maybe busy" = "Kanskje opptatt";
|
||||
"No free-busy information" = "Ingen ledig/opptatt-informasjon";
|
||||
|
||||
/* FreeBusy panel buttons and labels */
|
||||
"Suggest time slot" = "Foreslå tid";
|
||||
"Zoom" = "Forstørr";
|
||||
@@ -401,12 +504,16 @@ validate_endbeforestart = "Angitt sluttdato inntreffer før angitt startdato.
|
||||
"and" = "og";
|
||||
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"
|
||||
= "En tidskonflikt eksisterer med en eller flere deltakere.\nVil du likevel beholde de nåværende innstillingene?";
|
||||
"Would you like to remove them and send the invitation to the remaining attendees?"
|
||||
= "Vil du fjerne dem og sende invitasjonen til de gjenværende deltakerne? ";
|
||||
|
||||
/* events list */
|
||||
"Due" = "Frist";
|
||||
"(Private Event)" = "(Privat hendelse)";
|
||||
vevent_class0 = "(Offentlig hendelse)";
|
||||
vevent_class1 = "(Privat hendelse)";
|
||||
vevent_class2 = "(Konfidensiell hendelse)";
|
||||
|
||||
/* tasks list */
|
||||
"Descending Order" = "Synkende rekkefølge";
|
||||
vtodo_class0 = "(Offentlig oppgave)";
|
||||
@@ -422,6 +529,7 @@ vtodo_class2 = "(Konfidensiell oppgave)";
|
||||
"Edit All Occurrences" = "Rediger alle forekomster";
|
||||
"Update This Occurrence" = "Oppdater denne forekomsten";
|
||||
"Update All Occurrences" = "Oppdater alle forekomster";
|
||||
|
||||
/* Properties dialog */
|
||||
"Color" = "Farge";
|
||||
"Include in free-busy" = "Inkluder i fritt opptatt";
|
||||
@@ -438,17 +546,20 @@ vtodo_class2 = "(Konfidensiell oppgave)";
|
||||
"Email Address" = "Epost addresse";
|
||||
"Export" = "Eksporter";
|
||||
|
||||
/* Show only the calendar for which the menu is displayed */
|
||||
"Show Only This Calendar" = "Show Only This Calendar";
|
||||
|
||||
/* Show only the calendar for which the menu is displayed */
|
||||
"Show Only This Calendar" = "Vis kun denne kalenderen";
|
||||
|
||||
|
||||
/* Show all calendar (personal, subscriptions and web) */
|
||||
"Show All Calendars" = "Show All Calendars";
|
||||
"Show All Calendars" = "Vis alle kalendere";
|
||||
|
||||
"Links to this Calendar" = "Linker til denne kalenderen";
|
||||
"Authenticated User Access" = "Autentisert brukertilgang";
|
||||
"CalDAV URL" = "CalDAV URL";
|
||||
"WebDAV ICS URL" = "WebDAV ICS URL";
|
||||
"WebDAV XML URL" = "WebDAV XML URL";
|
||||
|
||||
/* Error messages */
|
||||
"dayFieldInvalid" = "Angi en numerisk verdi i dagsfeltet større enn eller lik 1.";
|
||||
"weekFieldInvalid" = "Angi en numerisk verdi i ukefeltet større enn eller lik 1.";
|
||||
@@ -472,8 +583,10 @@ vtodo_class2 = "(Konfidensiell oppgave)";
|
||||
"Delete Event" = "Slett hendelse";
|
||||
"Copy event to my calendar" = "Kopier hendelse til min kalender";
|
||||
"View Raw Source" = "Vis kilde";
|
||||
"Move To" = "Flytt til";
|
||||
"Copy To" = "Kopier til";
|
||||
"Subscriptions" = "Abonnementer";
|
||||
"Subscribe to a shared folder" = "Abonner på en delt mappe";
|
||||
"Subscribe to a shared calendar" = "Abonnere på en delt kalender";
|
||||
"Subscribe to a web calendar..." = "Abonnere på en internett-kalender...";
|
||||
"URL of the Calendar" = "URL til kalenderen";
|
||||
"Web Calendar" = "Internett-kalender";
|
||||
@@ -503,6 +616,7 @@ vtodo_class2 = "(Konfidensiell oppgave)";
|
||||
"More options" = "Flere alternativer";
|
||||
"Delete This Occurrence" = "Slett denne forekomsten";
|
||||
"Delete All Occurrences" = "Slett alle forekomster";
|
||||
"Add Recurrence Date" = "Legg til gjentaksdato ";
|
||||
"Add From" = "Legg til avsender";
|
||||
"Add Due" = "Legg til frist";
|
||||
"Import" = "Importer";
|
||||
@@ -517,4 +631,25 @@ vtodo_class2 = "(Konfidensiell oppgave)";
|
||||
"Toggle item" = "Toggle item";
|
||||
|
||||
/* Aria label for scope of search on events or tasks */
|
||||
"Search scope" = "Search scope";
|
||||
"Search scope" = "Search scope";
|
||||
|
||||
/* 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";
|
||||
@@ -221,6 +221,11 @@
|
||||
"view_next31" = "Наредних 31 дан";
|
||||
"view_thismonth" = "Овог месеца";
|
||||
"view_thisyear" = "Ове године";
|
||||
"view_last7" = "Последњих 7 дана";
|
||||
"view_last14" = "Последњих 14 дана";
|
||||
"view_last31" = "Последњих 31 дан";
|
||||
"view_lastmonth" = "Прошли месец";
|
||||
"view_lastyear" = "Прошле године";
|
||||
"view_future" = "Сви будући догађаји";
|
||||
"view_selectedday" = "Изабрани дан";
|
||||
"view_not_started" = "Нема започетих задатака";
|
||||
@@ -499,6 +504,8 @@ validate_untilbeforeend = "Понављање се мора завршити
|
||||
"and" = "и";
|
||||
"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?"
|
||||
= "Конфликт времена постоји са једним или више учесника.\nДа ли желите да задржите тренутна подешавања у сваком случају?";
|
||||
"Would you like to remove them and send the invitation to the remaining attendees?"
|
||||
= "Да ли желите да их уклоните и пошаљете позив преосталим учесницима?";
|
||||
|
||||
/* events list */
|
||||
"Due" = "Рок";
|
||||
@@ -579,7 +586,7 @@ vtodo_class2 = "(Поверљиви задатак)";
|
||||
"Move To" = "Премести у";
|
||||
"Copy To" = "Копирај у";
|
||||
"Subscriptions" = "Претплате";
|
||||
"Subscribe to a shared folder" = "Претплати се на дељени директоријум";
|
||||
"Subscribe to a shared calendar" = "Претплати се на дељени календар";
|
||||
"Subscribe to a web calendar..." = "Претплати се на веб календар...";
|
||||
"URL of the Calendar" = "Линк ка календару";
|
||||
"Web Calendar" = "Веб календар";
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserDefaults.h>
|
||||
#import <SOGo/SOGoUserSettings.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
|
||||
#import <Appointments/SOGoAppointmentFolders.h>
|
||||
|
||||
@@ -361,6 +362,20 @@
|
||||
return repeatFrequencies;
|
||||
}
|
||||
|
||||
- (BOOL) isCalendarSharingEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
result = YES;
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if (nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingCalendar]) {
|
||||
result = NO;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
/* Component Viewer, parent class of Appointment Viewer and Task Viewer */
|
||||
|
||||
@@ -182,7 +182,7 @@ _intValueFromHex (NSString *hexString)
|
||||
fActiveTasks = [folder activeTasks];
|
||||
|
||||
[calendar setObject: folderName forKey: @"id"];
|
||||
[calendar setObject: fDisplayName forKey: @"name"];
|
||||
[calendar setObject: [fDisplayName stringWithoutHTMLInjection: YES] forKey: @"name"];
|
||||
[calendar setObject: [folder calendarColor] forKey: @"color"];
|
||||
isActive = [NSNumber numberWithBool: [folder isActive]];
|
||||
[calendar setObject: isActive forKey: @"active"];
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
xmlns:label="OGo:label"
|
||||
xmlns:rsrc="OGo:url">
|
||||
|
||||
<div layout="column" class="layout-fill sg-reversible">
|
||||
|
||||
<md-card style="overflow: hidden">
|
||||
<md-toolbar>
|
||||
<div class="md-toolbar-tools">
|
||||
@@ -503,5 +503,4 @@
|
||||
</md-button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
</container>
|
||||
|
||||
@@ -109,12 +109,14 @@
|
||||
<var:string label:value="Export"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-menu-divider><!-- divider --></md-menu-divider>
|
||||
<md-menu-item>
|
||||
<md-button type="button" ng-click="app.share(folder)">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isContactSharingEnabled">
|
||||
<md-menu-divider><!-- divider --></md-menu-divider>
|
||||
<md-menu-item>
|
||||
<md-button type="button" ng-click="app.share(folder)">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
</md-menu-content>
|
||||
</md-menu>
|
||||
</md-list-item>
|
||||
|
||||
@@ -279,12 +279,14 @@
|
||||
<var:string label:value="Set as Templates"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-divider ng-show="::($menuCtrl.folder.type != 'additional')"><!-- divider --></md-divider>
|
||||
<md-menu-item ng-show="::($menuCtrl.folder.type != 'additional')">
|
||||
<md-button type="button" ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isMailSharingEnabled">
|
||||
<md-divider ng-show="::($menuCtrl.folder.type != 'additional')"><!-- divider --></md-divider>
|
||||
<md-menu-item ng-show="::($menuCtrl.folder.type != 'additional')">
|
||||
<md-button type="button" ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
</md-menu-content>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
@@ -41,72 +41,85 @@
|
||||
<var:if condition="hasLoginSuffix">
|
||||
<input type="hidden" ng-model="app.creds.loginSuffix" var:value="loginSuffix"/>
|
||||
</var:if>
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Username"/></label>
|
||||
<md-icon>person</md-icon>
|
||||
<input autocorrect="off" autocapitalize="off" type="text" ng-model="app.creds.username" ng-required="true"/>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Password"/></label>
|
||||
<md-icon>email</md-icon>
|
||||
<input type="password" ng-model="app.creds.password" ng-required="true"/>
|
||||
</md-input-container>
|
||||
|
||||
<!-- LANGUAGES SELECT -->
|
||||
<div layout="row" layout-align="start end">
|
||||
<md-icon>language</md-icon>
|
||||
<md-input-container class="md-flex">
|
||||
<label><var:string label:value="choose"/></label>
|
||||
<md-select ng-model="app.creds.language"
|
||||
var:placeholder="localizedLanguage"
|
||||
ng-change="app.changeLanguage($event)">
|
||||
<var:foreach list="languages" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="languageText"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
<div ng-if="!app.loginState">
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Username"/></label>
|
||||
<md-icon>person</md-icon>
|
||||
<input autocorrect="off" autocapitalize="off" type="text" ng-model="app.creds.username" ng-required="true" ng-change="app.usernameChanged()" ng-blur="app.retrievePasswordRecoveryEnabled()" />
|
||||
</md-input-container>
|
||||
</div>
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Password"/></label>
|
||||
<md-icon>email</md-icon>
|
||||
<input id="passwordField" type="password" ng-model="app.creds.password" ng-required="true"/>
|
||||
<md-icon id="password-visibility-icon" ng-click="app.changePasswordVisibility()">visibility</md-icon>
|
||||
</md-input-container>
|
||||
|
||||
|
||||
<!-- DOMAINS SELECT -->
|
||||
<var:if condition="hasLoginDomains">
|
||||
<!-- LANGUAGES SELECT -->
|
||||
<div layout="row" layout-align="start end">
|
||||
<md-icon>domain</md-icon>
|
||||
<md-icon>language</md-icon>
|
||||
<md-input-container class="md-flex">
|
||||
<md-select class="md-flex" ng-model="app.creds.domain" label:placeholder="choose">
|
||||
<var:foreach list="loginDomains" item="item">
|
||||
<label><var:string label:value="choose"/></label>
|
||||
<md-select ng-model="app.creds.language"
|
||||
var:placeholder="localizedLanguage"
|
||||
ng-change="app.changeLanguage($event)">
|
||||
<var:foreach list="languages" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="item"/>
|
||||
<var:string value="languageText"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</var:if>
|
||||
|
||||
<div layout="row" layout-align="center center">
|
||||
<md-switch class="md-accent md-hue-2"
|
||||
ng-model="app.creds.rememberLogin"
|
||||
label:arial-label="Remember username">
|
||||
<var:string label:value="Remember username"/>
|
||||
</md-switch>
|
||||
|
||||
<!-- DOMAINS SELECT -->
|
||||
<var:if condition="hasLoginDomains">
|
||||
<div layout="row" layout-align="start end">
|
||||
<md-icon>domain</md-icon>
|
||||
<md-input-container class="md-flex">
|
||||
<md-select class="md-flex" ng-model="app.creds.domain" label:placeholder="choose" ng-change="app.retrievePasswordRecoveryEnabled()">
|
||||
<var:foreach list="loginDomains" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="item"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</var:if>
|
||||
|
||||
<div layout="row" layout-align="center center">
|
||||
<md-switch class="md-accent md-hue-2"
|
||||
ng-model="app.creds.rememberLogin"
|
||||
label:arial-label="Remember username">
|
||||
<var:string label:value="Remember username"/>
|
||||
</md-switch>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Password recovery -->
|
||||
<div layout="row" layout-align="center center" ng-if="app.passwordRecovery.passwordRecoveryEnabled">
|
||||
<div ng-if="app.showLogin">
|
||||
<a href="#" ng-click="app.passwordRecoveryInfo()" sg-ripple-click="loginContent" class="password-lost-link"><var:string label:value="Password lost"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CONNECT BUTTON -->
|
||||
<div layout="row" layout-align="space-between center">
|
||||
<div layout="row" layout-align="space-between center" ng-if="!app.loginState">
|
||||
<md-button class="md-icon-button"
|
||||
label:aria-label="About"
|
||||
ng-click="app.showAbout()">
|
||||
<md-icon>info</md-icon>
|
||||
</md-button>
|
||||
<md-button class="md-fab md-accent md-hue-2" type="submit"
|
||||
label:aria-label="Connect"
|
||||
ng-if="!app.loginState"
|
||||
ng-disabled="loginForm.$invalid"
|
||||
sg-ripple-click="loginContent">
|
||||
<md-icon>arrow_forward</md-icon>
|
||||
</md-button>
|
||||
<div>
|
||||
<md-button class="md-fab md-accent md-hue-2" type="submit"
|
||||
label:aria-label="Connect"
|
||||
ng-if="!app.loginState"
|
||||
ng-disabled="loginForm.$invalid"
|
||||
sg-ripple-click="loginContent">
|
||||
<md-icon>arrow_forward</md-icon>
|
||||
</md-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<sg-ripple class="md-default-theme md-accent md-bg"
|
||||
@@ -181,16 +194,20 @@
|
||||
</div>
|
||||
</var:if>
|
||||
|
||||
<!-- Password policy: Password is expired -->
|
||||
<!-- Password policy: Password is expired / password recovery-->
|
||||
<div layout="column" layout-align="center center"
|
||||
ng-switch-when="passwordexpired">
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large">watch_later</md-icon>
|
||||
<div class="md-default-theme md-accent md-hue-1 md-fg md-padding">
|
||||
ng-switch-when="passwordchange">
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large" ng-if="!app.isInPasswordRecoveryMode()">watch_later</md-icon>
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large" ng-if="app.isInPasswordRecoveryMode()">vpn_key</md-icon>
|
||||
<div class="md-default-theme md-accent md-hue-1 md-fg md-padding" ng-if="!app.isInPasswordRecoveryMode()">
|
||||
<var:string label:value="Your password has expired, please enter a new one below"/>
|
||||
</div>
|
||||
<div class="md-default-theme md-accent md-hue-1 md-fg md-padding" ng-if="app.isInPasswordRecoveryMode()">
|
||||
<var:string label:value="Please enter a new password below"/>
|
||||
</div>
|
||||
<div flex="100">
|
||||
<div layout="row" layout-xs="column">
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<md-input-container class="md-block" flex="flex" ng-if="!app.isInPasswordRecoveryMode()">
|
||||
<label><var:string label:value="Current password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.oldPassword"/>
|
||||
@@ -239,6 +256,68 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Password recovery -->
|
||||
<var:if condition="hasPasswordRecovery">
|
||||
<div layout="column" layout-align="center center"
|
||||
ng-switch-when="passwordrecovery">
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large">vpn_key</md-icon>
|
||||
<div flex="100">
|
||||
<div layout="row" layout-xs="column" class="md-padding" layout-align="center center">
|
||||
<div ng-if="app.passwordRecovery.showLoader">
|
||||
<md-progress-circular class="md-hue-1"
|
||||
md-mode="indeterminate"
|
||||
md-diameter="32"><!-- password recovery progress --></md-progress-circular>
|
||||
</div>
|
||||
<div ng-if="'SecretQuestion' === app.passwordRecovery.passwordRecoveryMode">
|
||||
<div ng-if="!app.passwordRecovery.showLoader">
|
||||
{{ app.passwordRecovery.passwordRecoveryQuestion }}
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Answer"/></label>
|
||||
<input autocorrect="off" autocapitalize="off" type="text" ng-model="app.passwordRecovery.passwordRecoveryQuestionAnswer" />
|
||||
</md-input-container>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="'SecondaryEmail' === app.passwordRecovery.passwordRecoveryMode">
|
||||
<div ng-if="!app.passwordRecovery.showLoader">
|
||||
{{ app.passwordRecovery.passwordRecoverySecondaryEmailText }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="row" layout-align="end center" ng-if="!app.passwordRecovery.showLoader">
|
||||
<md-button ng-click="app.passwordRecoveryAbort()" type="button" >
|
||||
<var:string label:value="Back"/>
|
||||
</md-button>
|
||||
<div ng-if="'SecretQuestion' === app.passwordRecovery.passwordRecoveryMode">
|
||||
<md-button ng-click="app.passwordRecoveryCheck()" type="button" >
|
||||
<var:string label:value="Next"/>
|
||||
</md-button>
|
||||
</div>
|
||||
<div ng-if="'SecondaryEmail' === app.passwordRecovery.passwordRecoveryMode">
|
||||
<md-button ng-click="app.passwordRecoveryEmail()" type="button" >
|
||||
<var:string label:value="Next"/>
|
||||
</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" layout-align="center center"
|
||||
ng-switch-when="sendrecoverymail">
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large">local_shipping</md-icon>
|
||||
<div flex="100">
|
||||
<div layout="row" layout-xs="column" class="md-padding">
|
||||
<div ng-if="'SecondaryEmail' === app.passwordRecovery.passwordRecoveryMode">
|
||||
<var:string label:value="A password reset link has been sent, please check your recovery e-mail mailbox and click on the link"/>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="row" layout-align="end center">
|
||||
<md-button ng-click="app.passwordRecoveryAbort()" type="button" >
|
||||
<var:string label:value="Back"/>
|
||||
</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</var:if>
|
||||
|
||||
<!-- Logged in -->
|
||||
<div layout="column" layout-align="center center"
|
||||
ng-switch-when="logged">
|
||||
@@ -277,6 +356,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</md-content>
|
||||
|
||||
</main>
|
||||
|
||||
<script type="text/ng-template" id="aboutBox.html">
|
||||
|
||||
@@ -267,47 +267,88 @@
|
||||
</md-tab>
|
||||
|
||||
<!-- PASSWORD OPTIONS -->
|
||||
<var:if condition="shouldDisplayPasswordChange">
|
||||
<var:if condition="shouldDisplayPasswordSection">
|
||||
<md-tab id="generalPasswordView"
|
||||
aria-controls="generalPasswordView-content"
|
||||
label:label="Password">
|
||||
<md-content id="passwordView" class="md-padding">
|
||||
<div layout="row" layout-xs="column">
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="Current password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.oldPassword"/>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="New password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.newPassword"/>
|
||||
<div class="sg-hint">
|
||||
<ul class="sg-padded">
|
||||
<var:foreach list="passwordPolicy" item="item">
|
||||
<li><var:string value="item.label"/></li>
|
||||
</var:foreach>
|
||||
</ul>
|
||||
aria-controls="generalPasswordView-content"
|
||||
label:label="Password">
|
||||
<md-content id="passwordView" class="md-padding">
|
||||
<!-- Password recovery -->
|
||||
<var:if condition="shouldDisplayPasswordRecovery">
|
||||
<h5><var:string label:value="Password recovery"/></h5>
|
||||
<div layout="row" layout-align="start start">
|
||||
<md-input-container class="md-block md-input-has-value">
|
||||
<label><var:string label:value="Password recovery mode"/></label>
|
||||
<md-select ng-model="app.preferences.defaults.SOGoPasswordRecoveryMode">
|
||||
<var:foreach list="passwordRecoveryList" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="itemPasswordRecoveryText"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="Confirmation"/>
|
||||
</label>
|
||||
<input type="password" name="newPasswordConfirmation" sg-no-dirty-check="true" ng-model="app.passwords.newPasswordConfirmation"/>
|
||||
<div ng-messages="preferencesForm.newPasswordConfirmation.$error">
|
||||
<div ng-message="newPasswordMismatch"><var:string label:value="Passwords don't match"/></div>
|
||||
<div layout="row" layout-align="start start" ng-if="app.preferences.isItemSecretQuestion()">
|
||||
<md-input-container class="md-block md-input-has-value">
|
||||
<label><var:string label:value="Question"/></label>
|
||||
<md-select ng-model="app.preferences.defaults.SOGoPasswordRecoveryQuestion">
|
||||
<var:foreach list="passwordRecoveryQuestionList" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="itemPasswordRecoveryText"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Answer"/></label>
|
||||
<input autocorrect="off" autocapitalize="off" type="text" ng-model="app.preferences.defaults.SOGoPasswordRecoveryQuestionAnswer" ng-required="app.preferences.isItemSecretQuestion()"/>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</md-input-container>
|
||||
</div>
|
||||
<div layout="row" layout-align="end center">
|
||||
<md-button ng-click="app.changePassword()" type="button" ng-disabled="!app.canChangePassword(preferencesForm)">
|
||||
<var:string label:value="Change"/>
|
||||
</md-button>
|
||||
</div>
|
||||
<div layout="row" layout-align="start start" ng-if="app.preferences.isItemSecondaryEmail()">
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Secondary e-mail"/></label>
|
||||
<input autocorrect="off" autocapitalize="off" type="text" ng-model="app.preferences.defaults.SOGoPasswordRecoverySecondaryEmail" ng-required="app.preferences.isItemSecondaryEmail()" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$"/>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</var:if>
|
||||
<!-- Password change -->
|
||||
<var:if condition="shouldDisplayPasswordChange">
|
||||
<h5><var:string label:value="Password change"/></h5>
|
||||
<div layout="row" layout-xs="column">
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="Current password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.oldPassword"/>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="New password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.newPassword"/>
|
||||
<div class="sg-hint">
|
||||
<ul class="sg-padded">
|
||||
<var:foreach list="passwordPolicy" item="item">
|
||||
<li><var:string value="item.label"/></li>
|
||||
</var:foreach>
|
||||
</ul>
|
||||
</div>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="Confirmation"/>
|
||||
</label>
|
||||
<input type="password" name="newPasswordConfirmation" sg-no-dirty-check="true" ng-model="app.passwords.newPasswordConfirmation"/>
|
||||
<div ng-messages="preferencesForm.newPasswordConfirmation.$error">
|
||||
<div ng-message="newPasswordMismatch"><var:string label:value="Passwords don't match"/></div>
|
||||
</div>
|
||||
</md-input-container>
|
||||
</div>
|
||||
<div layout="row" layout-align="end center">
|
||||
<md-button ng-click="app.changePassword()" type="button" ng-disabled="!app.canChangePassword(preferencesForm)">
|
||||
<var:string label:value="Change"/>
|
||||
</md-button>
|
||||
</div>
|
||||
</var:if>
|
||||
</md-content>
|
||||
</md-tab>
|
||||
</var:if>
|
||||
|
||||
</md-tabs>
|
||||
</script>
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
</md-button>
|
||||
<md-button class="hide show-gt-sm" label:aria-label="Today"
|
||||
var:date="todayQueryParameters.day"
|
||||
ng-click="calendar.changeDate($event)"
|
||||
ng-click="calendar.changeDate($event, null, true)"
|
||||
md-no-ink="md-no-ink">
|
||||
<var:string label:value="Today"/>
|
||||
</md-button>
|
||||
|
||||
@@ -583,15 +583,17 @@
|
||||
<var:string label:value="Export"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-divider
|
||||
ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<!-- divider -->
|
||||
</md-divider>
|
||||
<md-menu-item ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<md-button ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isCalendarSharingEnabled">
|
||||
<md-divider
|
||||
ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<!-- divider -->
|
||||
</md-divider>
|
||||
<md-menu-item ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<md-button ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
</md-menu-content>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</md-button>
|
||||
<md-button class="hide show-gt-sm" label:aria-label="Today"
|
||||
var:date="todayQueryParameters.day"
|
||||
ng-click="calendar.changeDate($event)"
|
||||
ng-click="calendar.changeDate($event, null, true)"
|
||||
md-no-ink="md-no-ink">
|
||||
<var:string label:value="Today"/>
|
||||
</md-button>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</md-button>
|
||||
<md-button class="hide show-gt-sm" label:aria-label="Today"
|
||||
var:date="todayQueryParameters.day"
|
||||
ng-click="calendar.changeDate($event)"
|
||||
ng-click="calendar.changeDate($event, null, true)"
|
||||
md-no-ink="md-no-ink">
|
||||
<var:string label:value="Today"/>
|
||||
</md-button>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</md-button>
|
||||
<md-button class="hide show-gt-sm" label:aria-label="Today"
|
||||
var:date="todayQueryParameters.day"
|
||||
ng-click="calendar.changeDate($event)"
|
||||
ng-click="calendar.changeDate($event, null, true)"
|
||||
md-no-ink="md-no-ink">
|
||||
<var:string label:value="Today"/>
|
||||
</md-button>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"file":"Administration.services.js","sources":["Administration/Administration.service.js"],"names":["Administration","$factory","$q","$timeout","$log","Settings","Resource","User","angular","extend","$$resource","activeUser","$User","module","e","factory"],"mappings":"CAEA,wBAOE,SAASA,KASTA,EAAeC,SAAW,CAAC,KAAM,WAAY,OAAQ,aAAc,WAAY,OAAQ,SAASC,EAAIC,EAAUC,EAAMC,EAAUC,EAAUC,GAUtI,OATAC,QAAQC,OAAOT,EAAgB,CAC7BE,GAAIA,EACJC,SAAUA,EACVC,KAAMA,EACNM,WAAY,IAAIJ,EAASD,EAASM,WAAW,aAAcN,EAASM,cACpEA,WAAYN,EAASM,aACrBC,MAAOL,IAGF,IAAIP,IAIb,IACEQ,QAAQK,OAAO,yBAEjB,MAAMC,GACJN,QAAQK,OAAO,wBAAyB,CAAC,gBAI3CL,QAAQK,OAAO,yBACZE,QAAQ,iBAAkBf,EAAeC,UAvC9C"}
|
||||
{"version":3,"file":"Administration.services.js","sources":["Administration/Administration.service.js"],"names":["Administration","$factory","$q","$timeout","$log","Settings","Resource","User","angular","extend","$$resource","activeUser","$User","module","e","factory"],"mappings":"AAEA,CAAA,WACE,aAMA,SAASA,KASTA,EAAeC,SAAW,CAAC,KAAM,WAAY,OAAQ,aAAc,WAAY,OAAQ,SAASC,EAAIC,EAAUC,EAAMC,EAAUC,EAAUC,GAUtI,OATAC,QAAQC,OAAOT,EAAgB,CAC7BE,GAAIA,EACJC,SAAUA,EACVC,KAAMA,EACNM,WAAY,IAAIJ,EAASD,EAASM,WAAW,WAAW,EAAGN,EAASM,WAAW,CAAC,EAChFA,WAAYN,EAASM,WAAW,EAChCC,MAAOL,CACT,CAAC,EAEM,IAAIP,CACb,GAGA,IACEQ,QAAQK,OAAO,uBAAuB,CAIxC,CAFA,MAAMC,GACJN,QAAQK,OAAO,wBAAyB,CAAC,cAAc,CACzD,CAGAL,QAAQK,OAAO,uBAAuB,EACnCE,QAAQ,iBAAkBf,EAAeC,QAAQ,CAErD,EAAE"}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -20,6 +20,8 @@
|
||||
PolicyPasswordTooShort: 6,
|
||||
PolicyPasswordTooYoung: 7,
|
||||
PolicyPasswordInHistory: 8,
|
||||
PolicyPasswordRecoveryFailed: 9,
|
||||
PolicyPasswordRecoveryInvalidToken: 10,
|
||||
PolicyNoError: 65535
|
||||
})
|
||||
|
||||
@@ -168,7 +170,7 @@
|
||||
return d.promise;
|
||||
}, // login: function(data) { ...
|
||||
|
||||
changePassword: function(userName, domain, newPassword, oldPassword) {
|
||||
changePassword: function(userName, domain, newPassword, oldPassword, token) {
|
||||
var d = $q.defer(),
|
||||
xsrfCookie = $cookies.get('XSRF-TOKEN');
|
||||
|
||||
@@ -180,8 +182,12 @@
|
||||
headers: {
|
||||
'X-XSRF-TOKEN' : xsrfCookie
|
||||
},
|
||||
data: { userName: userName, newPassword: newPassword, oldPassword: oldPassword }
|
||||
data: { userName: userName, newPassword: newPassword, oldPassword: oldPassword, token: token }
|
||||
}).then(function() {
|
||||
// Clean cookies for reauthenticate
|
||||
$cookies.remove('XSRF-TOKEN', { path: '/SOGo/' });
|
||||
$cookies.remove('0xHIGHFLYxSOGo', { path: '/SOGo/' });
|
||||
|
||||
d.resolve({url: redirectUrl(userName, domain)});
|
||||
}, function(response) {
|
||||
var error,
|
||||
@@ -205,6 +211,8 @@
|
||||
error = l("Password change failed - Password is too young");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordInHistory) {
|
||||
error = l("Password change failed - Password is in history");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordRecoveryInvalidToken) {
|
||||
error = l("Invalid token. Could not change password");
|
||||
} else {
|
||||
error = l("Unhandled policy error: %{0}").formatted(perr);
|
||||
perr = passwordPolicyConfig.PolicyPasswordUnknown;
|
||||
@@ -215,6 +223,105 @@
|
||||
d.reject(error);
|
||||
});
|
||||
return d.promise;
|
||||
},
|
||||
|
||||
passwordRecovery: function (userName, domain) {
|
||||
var self = this;
|
||||
|
||||
var d = $q.defer(),
|
||||
xsrfCookie = $cookies.get('XSRF-TOKEN');
|
||||
|
||||
$cookies.remove('XSRF-TOKEN', { path: '/SOGo/' });
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/so/passwordRecovery',
|
||||
headers: {
|
||||
'X-XSRF-TOKEN': xsrfCookie
|
||||
},
|
||||
data: { userName: userName, domain: domain }
|
||||
}).then(function (response) {
|
||||
d.resolve(Object.assign(
|
||||
{ url: redirectUrl(userName, domain) },
|
||||
response.data,
|
||||
'SecretQuestion' === response.data.mode ? { secretQuestionLabel: l('passwordRecovery_' + response.data.secretQuestion) } : {},
|
||||
'SecondaryEmail' === response.data.mode ? { obfuscatedRecoveryEmail: response.data.obfuscatedSecondaryEmail } : {}
|
||||
));
|
||||
}, function () {
|
||||
// Restore the cookie
|
||||
$cookies.put('XSRF-TOKEN', xsrfCookie, { path: '/SOGo/' });
|
||||
d.reject(l("Unhandled policy error: %{0}").formatted(passwordPolicyConfig.PolicyPasswordRecoveryFailed));
|
||||
});
|
||||
return d.promise;
|
||||
},
|
||||
|
||||
|
||||
passwordRecoveryEmail: function (userName, domain, mode, mailDomain) {
|
||||
var self = this;
|
||||
|
||||
var d = $q.defer(),
|
||||
xsrfCookie = $cookies.get('XSRF-TOKEN');
|
||||
|
||||
$cookies.remove('XSRF-TOKEN', { path: '/SOGo/' });
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/so/passwordRecoveryEmail',
|
||||
headers: {
|
||||
'X-XSRF-TOKEN': xsrfCookie
|
||||
},
|
||||
data: { userName: userName, domain: domain, mode: mode, mailDomain: mailDomain }
|
||||
}).then(function (response) {
|
||||
d.resolve(response.data.jwt);
|
||||
}, function (response) {
|
||||
// Restore the cookie
|
||||
$cookies.put('XSRF-TOKEN', xsrfCookie, { path: '/SOGo/' });
|
||||
d.reject(l(response.data));
|
||||
});
|
||||
return d.promise;
|
||||
},
|
||||
|
||||
|
||||
passwordRecoveryCheck: function (userName, domain, mode, question, answer, mailDomain) {
|
||||
var self = this;
|
||||
|
||||
var d = $q.defer(),
|
||||
xsrfCookie = $cookies.get('XSRF-TOKEN');
|
||||
|
||||
$cookies.remove('XSRF-TOKEN', { path: '/SOGo/' });
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/so/passwordRecoveryCheck',
|
||||
headers: {
|
||||
'X-XSRF-TOKEN': xsrfCookie
|
||||
},
|
||||
data: { userName: userName, domain: domain, mode: mode, question: question, answer: answer, mailDomain: mailDomain }
|
||||
}).then(function (response) {
|
||||
d.resolve(response.data.jwt);
|
||||
}, function (response) {
|
||||
// Restore the cookie
|
||||
$cookies.put('XSRF-TOKEN', xsrfCookie, { path: '/SOGo/' });
|
||||
d.reject(l(response.data));
|
||||
});
|
||||
return d.promise;
|
||||
},
|
||||
|
||||
passwordRecoveryEnabled: function (userName, domain) {
|
||||
var self = this;
|
||||
|
||||
var d = $q.defer();
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/so/passwordRecoveryEnabled',
|
||||
data: { userName: userName, domain: domain }
|
||||
}).then(function (response) {
|
||||
d.resolve(response.data.domain);
|
||||
}, function () {
|
||||
d.reject();
|
||||
});
|
||||
return d.promise;
|
||||
}
|
||||
};
|
||||
return service;
|
||||
|
||||
@@ -20,14 +20,43 @@
|
||||
</md-dialog>
|
||||
|
||||
*/
|
||||
sgRippleClick.$inject = ['$log', '$timeout'];
|
||||
function sgRippleClick($log, $timeout) {
|
||||
sgRippleClick.$inject = ['$log', '$timeout', '$rootScope'];
|
||||
function sgRippleClick($log, $timeout, scope) {
|
||||
|
||||
function rippleEffect(element, coordinates, container, content) {
|
||||
// Show ripple
|
||||
angular.element(container).css({ 'overflow': 'hidden', 'position': 'relative' });
|
||||
angular.element(content).css({ top: container.scrollTop + 'px' });
|
||||
|
||||
element.css({
|
||||
'top': (coordinates.top - container.offsetTop + container.scrollTop) + 'px',
|
||||
'left': (coordinates.left - container.offsetLeft) + 'px',
|
||||
'height': '400vmin',
|
||||
'width': '400vmin'
|
||||
});
|
||||
|
||||
// Show ripple content
|
||||
content.classList.remove('ng-hide');
|
||||
}
|
||||
|
||||
scope.$on('sgRippleDo', function (e, containerName) {
|
||||
const container = document.getElementById(containerName);
|
||||
container.classList.remove('ng-hide');
|
||||
rippleEffect(
|
||||
angular.element(document.querySelector('sg-ripple'))
|
||||
, { left: (window.innerWidth / 2), top: (window.innerHeight / 2) }
|
||||
, container
|
||||
, document.querySelector('sg-ripple-content')
|
||||
);
|
||||
});
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
compile: compile
|
||||
};
|
||||
|
||||
|
||||
|
||||
function compile(tElement, tAttrs) {
|
||||
|
||||
return function postLink(scope, element, attr) {
|
||||
@@ -90,26 +119,16 @@
|
||||
}
|
||||
|
||||
if (content.classList.contains('ng-hide')) {
|
||||
// Show ripple
|
||||
angular.element(container).css({ 'overflow': 'hidden', 'position': 'relative' });
|
||||
angular.element(content).css({ top: container.scrollTop + 'px' });
|
||||
$timeout(function() {
|
||||
// Wait until next digest for CSS animation to work
|
||||
ripple.css({
|
||||
'top': (coordinates.top - container.offsetTop + container.scrollTop) + 'px',
|
||||
'left': (coordinates.left - container.offsetLeft) + 'px',
|
||||
'height': '400vmin',
|
||||
'width': '400vmin'
|
||||
});
|
||||
// Show ripple content
|
||||
content.classList.remove('ng-hide');
|
||||
rippleEffect(ripple, coordinates, container, content);
|
||||
});
|
||||
}
|
||||
else {
|
||||
// Hide ripple layer
|
||||
ripple.css({
|
||||
'top': (coordinates.top - container.offsetTop + container.scrollTop) + 'px',
|
||||
'left': (coordinates.left - container.offsetLeft) + 'px',
|
||||
'left': (coordinates.left - container.offsetLeft) + 'px',
|
||||
'height': '0px',
|
||||
'width': '0px'
|
||||
});
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* sgFocus - A service to set the focus on the element associated to a specific string
|
||||
* @memberof SOGo.Common
|
||||
* @param {string} name - the string identifier of the element
|
||||
* @see {@link SOGo.Common.sgRippleClick}
|
||||
* @ngInject
|
||||
*/
|
||||
sgRippleClick.$inject = ['$rootScope', '$timeout'];
|
||||
function sgRippleClick($rootScope, $timeout) {
|
||||
return function (containerName) {
|
||||
$timeout(function() {
|
||||
$rootScope.$broadcast('sgRippleDo', containerName);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
angular
|
||||
.module('SOGo.Common')
|
||||
.factory('sgRippleClick', sgRippleClick);
|
||||
})();
|
||||
@@ -137,10 +137,10 @@ String.prototype.formatted = function() {
|
||||
};
|
||||
|
||||
String.prototype.isValidEmail = function(strict) {
|
||||
var result = emailRE.test(this);
|
||||
var result = String.emailRE.test(this);
|
||||
|
||||
if (strict && result) {
|
||||
result = emailRE.exec(this)[0] == this;
|
||||
result = String.emailRE.exec(this)[0] == this;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){e.state("mail",{url:"/Mail",abstract:!0,views:{message:{template:"<ui-view/>"}},resolve:{stateAccounts:o}}).state("mail.account",{url:"/:accountId",abstract:!0,template:'<ui-view id="account"/>',resolve:{stateAccount:n}}).state("mail.account.mailbox",{url:"/:mailboxId",abstract:!0,template:'<ui-view id="mailbox"/>',resolve:{stateMailbox:r}}).state("mail.account.newMessage",{url:"/new",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateMessage:a}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:l}}).state("mail.account.mailbox.message.edit",{url:"/edit",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateContent:i}}).state("mail.account.mailbox.message.action",{url:"/{actionName:(?:compose|reply|replyall|forward)}",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}}}),t.otherwise("/Mail/0/new")}function o(e,t,o){var n=[];return e&&e.opener&&e.opener.mailAccounts?(e=o.$findAll(e.opener.mailAccounts),t.when(e)):o.$findAll().then(function(e){return angular.forEach(e,function(t,e){var o=t.$getMailboxes();0===e?n.push(o.then(function(e){return t})):n.push(t)}),t.all(n)})}function n(e,t,o,n,r){var a=null;return(a=(a=t.opener&&"$mailboxController"in t.opener&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==o.accountId?new n(t.opener.$mailboxController.account.$omit(!0)):a)||_.find(r,function(e){return e.id==o.accountId}))?e.when(a):e.reject("Account "+o.accountId+" doesn't exist")}function r(e,t,o,n,r,a,l){var i,s=null,c=a(n.mailboxId);return t.opener&&"$mailboxController"in t.opener&&"selectedFolder"in t.opener.$mailboxController&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==r.id&&t.opener.$mailboxController.selectedFolder.path==c&&(s=new l(r,t.opener.$mailboxController.selectedFolder.$omit(!0))),i=function(e){var t=_.find(e,function(e){return e.path==c});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=i(e.children))}),t},(s?e.when(s):r.$getMailboxes().then(function(e){e=i(e);return new l(r,e)})).then(function(e){return e.$topIndex=0,e.selectFolder(),e},function(){return e.reject("Mailbox "+c+" doesn't exist")})}function a(e,t){var o,e=e.search();return e&&(o=_.find(_.keys(e),function(e){return/^mailto:/i.test(e)})),t.$newMessage({mailto:o})}function l(e,t,o,n,r,a){var l;return window&&window.opener&&window.opener.$messageController&&window.opener.$messageController.message.uid==parseInt(o.messageId)?(l=new a(r.$account.id,r,window.opener.$messageController.message.$omit({privateAttributes:!0})),t.when(l)):(t={uid:o.messageId.toString()},(l=new a(r.$account.id,r,t)).$reload())}function i(e){return e.$editableContent()}function t(l,e,i){e.$on("$stateChangeError",function(e,t,o,n,r,a){i.error(a),l.close()}),e.$on("$routeChangeError",function(e,t,o,n){i.error(e,t,o,n)})}function s(e,t,o,n,r,a){var l=o.defer();n.show({hasBackdrop:!1,disableParentScroll:!1,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",onComplete:function(e,t){return l.resolve(t)},locals:{stateParent:t,stateAccount:r,stateMessage:a,onCompletePromise:function(){return l.promise}}}).finally(function(){e.close()})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t).controller("MessageEditorControllerPopup",s),e.$inject=["$stateProvider","$urlRouterProvider"],o.$inject=["$window","$q","Account"],n.$inject=["$q","$window","$stateParams","Account","stateAccounts"],r.$inject=["$q","$window","$state","$stateParams","stateAccount","decodeUriFilter","Mailbox"],a.$inject=["$urlService","stateAccount"],l.$inject=["encodeUriFilter","$q","$stateParams","$state","stateMailbox","Message"],i.$inject=["stateMessage"],t.$inject=["$window","$rootScope","$log"],s.$inject=["$window","$scope","$q","$mdDialog","stateAccount","stateMessage"]}();
|
||||
!function(){"use strict";function e(e,t){e.state("mail",{url:"/Mail",abstract:!0,views:{message:{template:"<ui-view/>"}},resolve:{stateAccounts:o}}).state("mail.account",{url:"/:accountId",abstract:!0,template:'<ui-view id="account"/>',resolve:{stateAccount:n}}).state("mail.account.mailbox",{url:"/:mailboxId",abstract:!0,template:'<ui-view id="mailbox"/>',resolve:{stateMailbox:r}}).state("mail.account.newMessage",{url:"/new",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateMessage:a}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:l}}).state("mail.account.mailbox.message.edit",{url:"/edit",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateContent:i}}).state("mail.account.mailbox.message.action",{url:"/{actionName:(?:compose|reply|replyall|forward)}",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}}}),t.otherwise("/Mail/0/new")}function o(e,t,o){var n=[];return e&&e.opener&&e.opener.mailAccounts?(e=o.$findAll(e.opener.mailAccounts),t.when(e)):o.$findAll().then(function(e){return angular.forEach(e,function(t,e){var o=t.$getMailboxes();n.push(0===e?o.then(function(e){return t}):t)}),t.all(n)})}function n(e,t,o,n,r){var a=null;return(a=(a=t.opener&&"$mailboxController"in t.opener&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==o.accountId?new n(t.opener.$mailboxController.account.$omit(!0)):a)||_.find(r,function(e){return e.id==o.accountId}))?e.when(a):e.reject("Account "+o.accountId+" doesn't exist")}function r(e,t,o,n,r,a,l){var i,s=null,c=a(n.mailboxId);return t.opener&&"$mailboxController"in t.opener&&"selectedFolder"in t.opener.$mailboxController&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==r.id&&t.opener.$mailboxController.selectedFolder.path==c&&(s=new l(r,t.opener.$mailboxController.selectedFolder.$omit(!0))),i=function(e){var t=_.find(e,function(e){return e.path==c});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=i(e.children))}),t},(s?e.when(s):r.$getMailboxes().then(function(e){e=i(e);return new l(r,e)})).then(function(e){return e.$topIndex=0,e.selectFolder(),e},function(){return e.reject("Mailbox "+c+" doesn't exist")})}function a(e,t){var o,e=e.search();return e&&(o=_.find(_.keys(e),function(e){return/^mailto:/i.test(e)})),t.$newMessage({mailto:o})}function l(e,t,o,n,r,a){var l;return window&&window.opener&&window.opener.$messageController&&window.opener.$messageController.message.uid==parseInt(o.messageId)?(l=new a(r.$account.id,r,window.opener.$messageController.message.$omit({privateAttributes:!0})),t.when(l)):(t={uid:o.messageId.toString()},(l=new a(r.$account.id,r,t)).$reload())}function i(e){return e.$editableContent()}function t(l,e,i){e.$on("$stateChangeError",function(e,t,o,n,r,a){i.error(a),l.close()}),e.$on("$routeChangeError",function(e,t,o,n){i.error(e,t,o,n)})}function s(e,t,o,n,r,a){var l=o.defer();n.show({hasBackdrop:!1,disableParentScroll:!1,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",onComplete:function(e,t){return l.resolve(t)},locals:{stateParent:t,stateAccount:r,stateMessage:a,onCompletePromise:function(){return l.promise}}}).finally(function(){e.close()})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t).controller("MessageEditorControllerPopup",s),e.$inject=["$stateProvider","$urlRouterProvider"],o.$inject=["$window","$q","Account"],n.$inject=["$q","$window","$stateParams","Account","stateAccounts"],r.$inject=["$q","$window","$state","$stateParams","stateAccount","decodeUriFilter","Mailbox"],a.$inject=["$urlService","stateAccount"],l.$inject=["encodeUriFilter","$q","$stateParams","$state","stateMailbox","Message"],i.$inject=["stateMessage"],t.$inject=["$window","$rootScope","$log"],s.$inject=["$window","$scope","$q","$mdDialog","stateAccount","stateMessage"]}();
|
||||
//# sourceMappingURL=Mailer.app.popup.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){if(e.state("mail",{url:"/Mail",views:{mailboxes:{templateUrl:"UIxMailMainFrame",controller:"MailboxesController",controllerAs:"app"}},resolve:{stateAccounts:a}}).state("mail.account",{url:"/:accountId",abstract:!0,views:{mailbox:{template:"<ui-view/>"}},resolve:{stateAccount:o}}).state("mail.account.virtualMailbox",{url:"/virtual",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:l}}).state("mail.account.virtualMailbox.message",{url:"/:mailboxId/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMailbox:n,stateMessages:i,stateMessage:c},onEnter:u,onExit:d}).state("mail.account.inbox",{url:"/inbox",onEnter:r}).state("mail.account.mailbox",{url:"/:mailboxId",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:s,stateMessages:i}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},params:{reload:{value:!1}},onEnter:u,onExit:d,resolve:{stateMessage:c}}),t.rules.otherwise("/Mail/0/inbox"),navigator&&navigator.registerProtocolHandler){e=window.location.origin+window.ApplicationBaseURL+"UIxMailPopupView#!/Mail/0/new?%s";try{navigator.registerProtocolHandler("mailto",e,"SOGo")}catch(e){}}}function a(e,t,a){var a=a.$findAll(e.mailAccounts),o=[];return angular.forEach(a,function(t,e){var a=t.$getMailboxes();0===e?o.push(a.then(function(e){return t})):o.push(t)}),t.all(o)}function o(t,e){return _.find(e,function(e){return e.id==t.accountId})}function s(e,t,a,o,r){var i,l=o(o(t.mailboxId)),n=function(e){var t=_.find(e,function(e){return e.path==l});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t};return r.selectedFolder&&!r.$virtualMode&&(r.selectedFolder.$isLoading=!0),a.$getMailboxes().then(function(e){if(i=n(e))return i.$topIndex=0,i.selectFolder(),i;$state.go("mail.account",{accountId:s.$account.id})})}function r(t,a,o){return t.injector().getAsync("stateAccount").then(function(e){return 0<e.$mailboxes.length?t.router.stateService.target("mail.account.mailbox",{accountId:e.id,mailboxId:a(e.$mailboxes[0].path)}):(o.selectedFolder=!1,t.router.stateService.target("mail"))})}function i(e,t,a,o){return a.$virtualMode?[]:o?(o.$unselectMessages(),o.$filter().catch(function(){return e.reject("Mailbox not found")})):e.reject("Mailbox doesn't exist")}function l(e,t){return t.$virtualMode?t.selectedFolder:e.reject("No virtual mailbox defined")}function n(e,t,a,o){var r=a(a(o.mailboxId));return t.$virtualMode?(t.selectedFolder.resetSelectedMessage(),_.find(t.selectedFolder.$mailboxes,function(e){return e.path==r})):e.reject("No virtual mailbox defined for message")}function c(e,t,a,o,r,i){var l=_.find(r.$messages,function(e){return e.uid==parseInt(a.messageId)});if(l&&l.$reload)return l.$reload({useCache:!a.reload,nocache:a.reload});o.go("mail.account.mailbox",{accountId:r.$account.id,mailboxId:t(r.path)})}function u(e,t){t.$selectedMessage=parseInt(e.messageId)}function d(e){delete e.$selectedMessage}function t(e,t,a,o,r){e.DebugEnabled||o.defaultErrorHandler(function(){}),t.onError({to:"mail.**"},function(e){"mail"!=e.to().name&&!e.ignored()&&e.error().message.indexOf("superseded")<0&&(a.error("transition error to "+e.to().name+": "+e.error().detail),r.selectedFolder=!1,o.go("mail"))})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],a.$inject=["$window","$q","Account"],o.$inject=["$stateParams","stateAccounts"],s.$inject=["$q","$stateParams","stateAccount","decodeUriFilter","Mailbox"],r.$inject=["$transition$","encodeUriFilter","Mailbox"],i.$inject=["$q","$state","Mailbox","stateMailbox"],l.$inject=["$q","Mailbox"],n.$inject=["$q","Mailbox","decodeUriFilter","$stateParams"],c.$inject=["Mailbox","encodeUriFilter","$stateParams","$state","stateMailbox","stateMessages"],u.$inject=["$stateParams","stateMailbox"],d.$inject=["stateMailbox"],t.$inject=["$window","$transitions","$log","$state","Mailbox"]}();
|
||||
!function(){"use strict";function e(e,t){if(e.state("mail",{url:"/Mail",views:{mailboxes:{templateUrl:"UIxMailMainFrame",controller:"MailboxesController",controllerAs:"app"}},resolve:{stateAccounts:a}}).state("mail.account",{url:"/:accountId",abstract:!0,views:{mailbox:{template:"<ui-view/>"}},resolve:{stateAccount:o}}).state("mail.account.virtualMailbox",{url:"/virtual",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:l}}).state("mail.account.virtualMailbox.message",{url:"/:mailboxId/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMailbox:n,stateMessages:i,stateMessage:c},onEnter:u,onExit:d}).state("mail.account.inbox",{url:"/inbox",onEnter:r}).state("mail.account.mailbox",{url:"/:mailboxId",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:s,stateMessages:i}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},params:{reload:{value:!1}},onEnter:u,onExit:d,resolve:{stateMessage:c}}),t.rules.otherwise("/Mail/0/inbox"),navigator&&navigator.registerProtocolHandler){e=window.location.origin+window.ApplicationBaseURL+"UIxMailPopupView#!/Mail/0/new?%s";try{navigator.registerProtocolHandler("mailto",e,"SOGo")}catch(e){}}}function a(e,t,a){var a=a.$findAll(e.mailAccounts),o=[];return angular.forEach(a,function(t,e){var a=t.$getMailboxes();o.push(0===e?a.then(function(e){return t}):t)}),t.all(o)}function o(t,e){return _.find(e,function(e){return e.id==t.accountId})}function s(e,t,a,o,r){var i,l=o(o(t.mailboxId)),n=function(e){var t=_.find(e,function(e){return e.path==l});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t};return r.selectedFolder&&!r.$virtualMode&&(r.selectedFolder.$isLoading=!0),a.$getMailboxes().then(function(e){if(i=n(e))return i.$topIndex=0,i.selectFolder(),i;$state.go("mail.account",{accountId:s.$account.id})})}function r(t,a,o){return t.injector().getAsync("stateAccount").then(function(e){return 0<e.$mailboxes.length?t.router.stateService.target("mail.account.mailbox",{accountId:e.id,mailboxId:a(e.$mailboxes[0].path)}):(o.selectedFolder=!1,t.router.stateService.target("mail"))})}function i(e,t,a,o){return a.$virtualMode?[]:o?(o.$unselectMessages(),o.$filter().catch(function(){return e.reject("Mailbox not found")})):e.reject("Mailbox doesn't exist")}function l(e,t){return t.$virtualMode?t.selectedFolder:e.reject("No virtual mailbox defined")}function n(e,t,a,o){var r=a(a(o.mailboxId));return t.$virtualMode?(t.selectedFolder.resetSelectedMessage(),_.find(t.selectedFolder.$mailboxes,function(e){return e.path==r})):e.reject("No virtual mailbox defined for message")}function c(e,t,a,o,r,i){var l=_.find(r.$messages,function(e){return e.uid==parseInt(a.messageId)});if(l&&l.$reload)return l.$reload({useCache:!a.reload,nocache:a.reload});o.go("mail.account.mailbox",{accountId:r.$account.id,mailboxId:t(r.path)})}function u(e,t){t.$selectedMessage=parseInt(e.messageId)}function d(e){delete e.$selectedMessage}function t(e,t,a,o,r){e.DebugEnabled||o.defaultErrorHandler(function(){}),t.onError({to:"mail.**"},function(e){"mail"!=e.to().name&&!e.ignored()&&e.error().message.indexOf("superseded")<0&&(a.error("transition error to "+e.to().name+": "+e.error().detail),r.selectedFolder=!1,o.go("mail"))})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],a.$inject=["$window","$q","Account"],o.$inject=["$stateParams","stateAccounts"],s.$inject=["$q","$stateParams","stateAccount","decodeUriFilter","Mailbox"],r.$inject=["$transition$","encodeUriFilter","Mailbox"],i.$inject=["$q","$state","Mailbox","stateMailbox"],l.$inject=["$q","Mailbox"],n.$inject=["$q","Mailbox","decodeUriFilter","$stateParams"],c.$inject=["Mailbox","encodeUriFilter","$stateParams","$state","stateMailbox","stateMessages"],u.$inject=["$stateParams","stateMailbox"],d.$inject=["stateMailbox"],t.$inject=["$window","$transitions","$log","$state","Mailbox"]}();
|
||||
//# sourceMappingURL=Mailer.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,19 +1,19 @@
|
||||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* JavaScript for MainUI (SOGoRootPage) */
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
angular.module('SOGo.MainUI', ['SOGo.Common', 'SOGo.Authentication']);
|
||||
const PASSWORD_RECOVERY_TIMER_MS = 2000;
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
LoginController.$inject = ['$scope', '$window', '$timeout', 'Dialog', '$mdDialog', 'Authentication', 'sgFocus'];
|
||||
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication, focus) {
|
||||
LoginController.$inject = ['$scope', '$window', '$timeout', 'Dialog', '$mdDialog', 'Authentication', 'sgFocus', 'sgRippleClick'];
|
||||
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication, focus, rippleDo) {
|
||||
var vm = this;
|
||||
|
||||
this.$onInit = function() {
|
||||
this.$onInit = function () {
|
||||
this.creds = {
|
||||
username: $window.cookieUsername,
|
||||
password: null,
|
||||
@@ -29,11 +29,56 @@
|
||||
this.verificationCodePattern = '\\d{6}';
|
||||
|
||||
// Password policy - change expired password
|
||||
this.passwords = { newPassword: null, newPasswordConfirmation: null, oldPassword: null };
|
||||
this.passwords = { newPassword: null, newPasswordConfirmation: null, oldPassword: null, visible: false };
|
||||
|
||||
// Password recovery
|
||||
this.passwordRecovery = {
|
||||
passwordRecoveryEnabled: false,
|
||||
passwordRecoveryQuestionKey: null,
|
||||
passwordRecoveryQuestion: null,
|
||||
passwordRecoveryMode: null,
|
||||
passwordRecoveryQuestionAnswer: null,
|
||||
passwordRecoveryToken: null,
|
||||
passwordRecoveryLinkTimer: null,
|
||||
passwordRecoverySecondaryEmailText: null,
|
||||
passwordRecoveryMailDomain: null,
|
||||
showLoader: false
|
||||
};
|
||||
|
||||
// Show login once everything is initialized
|
||||
this.showLogin = false;
|
||||
$timeout(function() { vm.showLogin = true; }, 100);
|
||||
$timeout(function () {
|
||||
vm.showLogin = true;
|
||||
|
||||
const queryString = window.location.search;
|
||||
const urlParams = new URLSearchParams(queryString);
|
||||
let token = urlParams.get('token');
|
||||
|
||||
if (0 < window.location.pathname.indexOf("passwordRecoveryEmail") && token) {
|
||||
token = token.replace(/\//g, ''); // remove trailing '/'
|
||||
const tokenArray = token.split(".");
|
||||
|
||||
// Retrieve info from token
|
||||
if (3 === tokenArray.length) {
|
||||
vm.passwordRecovery.passwordRecoveryToken = token;
|
||||
const info = JSON.parse(atob(tokenArray[1]));
|
||||
vm.creds.username = info.username;
|
||||
vm.creds.domain = info.domain;
|
||||
vm.passwordRecovery.passwordRecoveryToken = token;
|
||||
vm.passwordRecovery.passwordRecoveryMode = "SecondaryEmail";
|
||||
vm.passwordRecovery.passwordRecoveryEnabled = true;
|
||||
|
||||
vm.loginState = 'passwordchange';
|
||||
vm.showLogin = false;
|
||||
rippleDo('loginContent');
|
||||
}
|
||||
|
||||
} else {
|
||||
vm.retrievePasswordRecoveryEnabled();
|
||||
}
|
||||
}, 100);
|
||||
|
||||
|
||||
};
|
||||
|
||||
this.login = function() {
|
||||
@@ -98,7 +143,7 @@
|
||||
vm.errorMessage = l('Your password is going to expire in %{0} %{1}.', value, string);
|
||||
}
|
||||
else if (msg.passwordexpired) {
|
||||
vm.loginState = 'passwordexpired';
|
||||
vm.loginState = 'passwordchange';
|
||||
vm.url = msg.url;
|
||||
}
|
||||
|
||||
@@ -107,8 +152,14 @@
|
||||
};
|
||||
|
||||
this.restoreLogin = function() {
|
||||
vm.loginState = false;
|
||||
delete vm.creds.verificationCode;
|
||||
vm.showLogin = false;
|
||||
if ('SecretQuestion' === vm.passwordRecovery.passwordRecoveryMode) {
|
||||
rippleDo('loginContent');
|
||||
vm.passwordRecoveryInfo();
|
||||
} else {
|
||||
delete vm.creds.verificationCode;
|
||||
vm.passwordRecoveryAbort();
|
||||
}
|
||||
};
|
||||
|
||||
this.continueLogin = function() {
|
||||
@@ -138,6 +189,10 @@
|
||||
$window.location.href = ApplicationBaseURL + 'login?language=' + this.creds.language;
|
||||
};
|
||||
|
||||
this.hello = function (form) {
|
||||
return !true;
|
||||
}
|
||||
|
||||
this.canChangePassword = function(form) {
|
||||
if (this.passwords.newPasswordConfirmation && this.passwords.newPasswordConfirmation.length &&
|
||||
this.passwords.newPassword != this.passwords.newPasswordConfirmation) {
|
||||
@@ -150,14 +205,15 @@
|
||||
if (this.passwords.newPassword && this.passwords.newPassword.length > 0 &&
|
||||
this.passwords.newPasswordConfirmation && this.passwords.newPasswordConfirmation.length &&
|
||||
this.passwords.newPassword == this.passwords.newPasswordConfirmation &&
|
||||
this.passwords.oldPassword && this.passwords.oldPassword.length > 0)
|
||||
((this.isInPasswordRecoveryMode()) ||
|
||||
(!this.loginState && this.passwords.oldPassword && this.passwords.oldPassword.length > 0)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
this.changePassword = function() {
|
||||
Authentication.changePassword(this.creds.username, this.creds.domain, this.passwords.newPassword, this.passwords.oldPassword).then(function(data) {
|
||||
Authentication.changePassword(this.creds.username, this.creds.domain, this.passwords.newPassword, this.passwords.oldPassword, this.passwordRecovery.passwordRecoveryToken).then(function(data) {
|
||||
vm.loginState = 'message';
|
||||
vm.url = data.url;
|
||||
vm.errorMessage = l('The password was changed successfully.');
|
||||
@@ -167,6 +223,116 @@
|
||||
});
|
||||
};
|
||||
|
||||
this.passwordRecoveryInfo = function () {
|
||||
vm.loginState = 'passwordrecovery';
|
||||
vm.passwordRecovery.showLoader = true;
|
||||
Authentication.passwordRecovery(this.creds.username, this.creds.domain).then(function (data) {
|
||||
vm.passwordRecovery.passwordRecoveryMode = data.mode;
|
||||
if ('SecretQuestion' === data.mode) {
|
||||
vm.passwordRecovery.passwordRecoveryQuestion = data.secretQuestionLabel;
|
||||
vm.passwordRecovery.passwordRecoveryQuestionKey = data.secretQuestion;
|
||||
} else if ('SecondaryEmail' === data.mode) {
|
||||
vm.passwordRecovery.passwordRecoverySecondaryEmailText = l("A link will be sent to %{0}", data.obfuscatedRecoveryEmail);
|
||||
} else if ('Disabled' === data.mode) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = l('No password recovery method has been defined for this user');
|
||||
}
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
});
|
||||
};
|
||||
|
||||
this.passwordRecoveryEmail = function () {
|
||||
vm.passwordRecovery.showLoader = true;
|
||||
Authentication.passwordRecoveryEmail(this.creds.username, this.creds.domain
|
||||
, this.passwordRecovery.passwordRecoveryMode
|
||||
, this.passwordRecovery.passwordRecoveryMailDomain).then(function () {
|
||||
vm.loginState = 'sendrecoverymail';
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
});
|
||||
};
|
||||
|
||||
this.passwordRecoveryCheck = function () {
|
||||
vm.passwordRecovery.showLoader = true;
|
||||
Authentication.passwordRecoveryCheck(this.creds.username, this.creds.domain
|
||||
, this.passwordRecovery.passwordRecoveryMode
|
||||
, this.passwordRecovery.passwordRecoveryQuestionKey
|
||||
, this.passwordRecovery.passwordRecoveryQuestionAnswer
|
||||
, this.passwordRecovery.passwordRecoveryMailDomain).then(function (token) {
|
||||
if ("SecretQuestion" == vm.passwordRecovery.passwordRecoveryMode) {
|
||||
vm.passwordRecovery.passwordRecoveryToken = token;
|
||||
vm.loginState = 'passwordchange';
|
||||
} else if ("SecondaryEmail" == vm.passwordRecovery.passwordRecoveryMode) {
|
||||
vm.loginState = 'sendrecoverymail';
|
||||
}
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
});
|
||||
};
|
||||
|
||||
this.isInPasswordRecoveryMode = function () {
|
||||
return (("SecretQuestion" == this.passwordRecovery.passwordRecoveryMode ||
|
||||
"SecondaryEmail" == this.passwordRecovery.passwordRecoveryMode) &&
|
||||
this.passwordRecovery.passwordRecoveryToken) ? true : false;
|
||||
};
|
||||
|
||||
this.passwordRecoveryAbort = function () {
|
||||
this.passwords = { newPassword: null, newPasswordConfirmation: null, oldPassword: null };
|
||||
this.loginState = false;
|
||||
this.passwordRecovery.passwordRecoveryEnabled = false;
|
||||
this.passwordRecovery.passwordRecoveryQuestion = null;
|
||||
this.passwordRecovery.passwordRecoveryMode = null;
|
||||
this.passwordRecovery.passwordRecoveryQuestionAnswer = null;
|
||||
this.passwordRecovery.passwordRecoveryToken = null;
|
||||
this.passwordRecovery.passwordRecoverySecondaryEmailText = null;
|
||||
this.passwordRecovery.passwordRecoveryMailDomain = null;
|
||||
this.passwordRecovery.showLoader = false;
|
||||
$window.location.reload(true);
|
||||
};
|
||||
|
||||
this.usernameChanged = function () {
|
||||
if (this.passwordRecovery.passwordRecoveryLinkTimer) {
|
||||
clearTimeout(this.passwordRecovery.passwordRecoveryLinkTimer);
|
||||
}
|
||||
|
||||
this.passwordRecovery.passwordRecoveryLinkTimer = setTimeout(() => {
|
||||
vm.retrievePasswordRecoveryEnabled();
|
||||
this.passwordRecovery.passwordRecoveryLinkTimer = null;
|
||||
}, PASSWORD_RECOVERY_TIMER_MS);
|
||||
};
|
||||
|
||||
this.retrievePasswordRecoveryEnabled = function () {
|
||||
if (this.creds.username || this.creds.domain) {
|
||||
Authentication.passwordRecoveryEnabled(this.creds.username, this.creds.domain).then(function (mailDomain) {
|
||||
vm.passwordRecovery.passwordRecoveryMailDomain = mailDomain;
|
||||
vm.passwordRecovery.passwordRecoveryEnabled = true;
|
||||
}, function () {
|
||||
vm.passwordRecovery.passwordRecoveryEnabled = false;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
this.changePasswordVisibility = function () {
|
||||
this.passwords.visible = !this.passwords.visible;
|
||||
var field = document.getElementById("passwordField");
|
||||
if (this.passwords.visible) {
|
||||
field.type = "text";
|
||||
document.getElementById("password-visibility-icon").innerHTML = 'visibility_off';
|
||||
} else {
|
||||
field.type = "password";
|
||||
document.getElementById("password-visibility-icon").innerHTML = 'visibility';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
angular
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -393,6 +393,26 @@
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @function isItemSecretQuestion
|
||||
* @memberof Preferences.prototype
|
||||
* @desc Check if the customer pick the secret question for e-mail recovery
|
||||
* @returns true if secret question is selected
|
||||
*/
|
||||
Preferences.prototype.isItemSecretQuestion = function() {
|
||||
return "SecretQuestion" == this.defaults.SOGoPasswordRecoveryMode;
|
||||
};
|
||||
|
||||
/**
|
||||
* @function isItemSecondaryEmail
|
||||
* @memberof Preferences.prototype
|
||||
* @desc Check if the customer pick the email for password recovery
|
||||
* @returns true if email is selected
|
||||
*/
|
||||
Preferences.prototype.isItemSecondaryEmail = function () {
|
||||
return "SecondaryEmail" == this.defaults.SOGoPasswordRecoveryMode;
|
||||
};
|
||||
|
||||
/**
|
||||
* @function authorizeNotifications
|
||||
* @memberof Preferences.prototype
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
this.onDesktopNotificationsChange = function() {
|
||||
if (this.preferences.defaults.SOGoDesktopNotifications)
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js"],"names":["configure","$stateProvider","$urlServiceProvider","$mdThemingProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","calendarView","$stateParams","view","day","stateEventsBlocks","rules","when","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","then","_","forEach","id","calendar","name","calendarName","runBlock","$window","$log","$transitions","$location","$state","Preferences","DebugEnabled","defaultErrorHandler","onError","to","transition","ignored","error","detail","go","length","exec","settings","View","now","defaults","SOGoCalendarWeekdays","weekDays","weekDay","getDay","indexOf","addDays","replace","angular","module","config","run","$inject"],"mappings":"CAGA,wBAWE,SAASA,EAAUC,EAAgBC,EAAqBC,GACtDF,EACGG,MAAM,YAAa,CAClBC,IAAK,YACLC,MAAO,CACLC,UAAW,CACTC,YAAa,iBACbC,WAAY,sBACZC,aAAc,QAGlBC,QAAS,CACPC,eAAgBA,KAGnBR,MAAM,iBAAkB,CACvBC,IAAK,2DAGLC,MAAO,CACLO,aAAc,CACZL,YAAa,SAASM,GAKpB,OAAOA,EAAaC,KAAO,YAAcD,EAAaE,KAExDP,WAAY,qBACZC,aAAc,aAGlBC,QAAS,CACPM,kBAAmBA,KAIzBf,EAAoBgB,MAAMC,KAAK,gBAAiB,WAG9C,MAAO,kBADG,IAAIC,MACgBC,iBAEhCnB,EAAoBgB,MAAMC,KAAK,2BAA4B,WAGzD,MAAO,6BADG,IAAIC,MAC2BC,iBAE3CnB,EAAoBgB,MAAMC,KAAK,iBAAkB,WAG/C,MAAO,mBADG,IAAIC,MACiBC,iBAEjCnB,EAAoBgB,MAAMC,KAAK,kBAAmB,WAGhD,MAAO,oBADG,IAAIC,MACkBC,iBAKlCnB,EAAoBgB,MAAMI,UAAU,kBAOtC,SAASV,EAAeW,GACtB,OAAOA,EAASC,YAAcD,EAASE,SAASC,OAAOC,eAOzD,SAASV,EAAkBH,EAAcc,EAAWL,GAElD,OAAOK,EAAUC,qBAAqBf,EAAaC,KAAMD,EAAaE,IAAIc,UACvEC,KAAK,SAASzB,GAQb,OAPA0B,EAAEC,QAAQ3B,EAAO,SAASS,GACpBA,EAAKmB,KAGPnB,EAAKoB,SAAW,IAAIZ,EAAS,CAAEW,GAAInB,EAAKmB,GAAIE,KAAMrB,EAAKsB,kBAGpD/B,IAQb,SAASgC,EAASC,EAASC,EAAMC,EAAcC,EAAWC,EAAQC,GAYhE,GAXKL,EAAQM,cACXF,EAAOG,oBAAoB,cAG7BL,EAAaM,QAAQ,CAAEC,GAAI,gBAAkB,SAASC,GACxB,aAAxBA,EAAWD,KAAKZ,MACfa,EAAWC,YACdV,EAAKW,MAAM,uBAAyBF,EAAWD,KAAKZ,KAAO,KAAOa,EAAWE,QAAQC,QACrFT,EAAOU,GAAG,CAAEjD,MAAO,iBAGQ,IAA3BsC,EAAUrC,MAAMiD,OAAc,CAEhC,IAAIjD,EAAM,aACNU,EAAO,WAAWwC,KAAKX,EAAYY,SAASjC,SAASkC,MAMrDC,GAJFrD,GADEU,EACKA,EAAK,GAEL,OAEC,IAAIK,MACd,GAAIwB,EAAYe,SAASC,qBAGvB,IAFA,IAAIC,EAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDC,EAAUD,EAASH,EAAIK,UACpBnB,EAAYe,SAASC,qBAAqBI,QAAQF,GAAW,GAClEJ,EAAIO,QAAQ,GACZH,EAAUD,EAASH,EAAIK,UAG3B1D,GAAO,IAAMqD,EAAIrC,eACjBqB,EAAUwB,UAAU7D,IAAIA,IArI5B8D,QAAQC,OAAO,mBAAoB,CAAC,YAAa,YAAa,oBAAqB,aAAc,cAAe,qBAAsB,kBAAmB,gBAAiB,gBACvKC,OAAOrE,GACPsE,IAAIhC,GAKPtC,EAAUuE,QAAU,CAAC,iBAAkB,sBAAuB,sBAmE9D3D,EAAe2D,QAAU,CAAC,YAQ1BtD,EAAkBsD,QAAU,CAAC,eAAgB,YAAa,YAmB1DjC,EAASiC,QAAU,CAAC,UAAW,OAAQ,eAAgB,YAAa,SAAU,eAxGhF"}
|
||||
{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js"],"names":["configure","$stateProvider","$urlServiceProvider","$mdThemingProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","calendarView","$stateParams","view","day","stateEventsBlocks","rules","when","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","then","_","forEach","id","calendar","name","calendarName","runBlock","$window","$log","$transitions","$location","$state","Preferences","DebugEnabled","defaultErrorHandler","onError","to","transition","ignored","error","detail","go","length","exec","settings","View","now","defaults","SOGoCalendarWeekdays","weekDays","weekDay","getDay","indexOf","addDays","replace","angular","module","config","run","$inject"],"mappings":"AAGA,CAAA,WACE,aAUA,SAASA,EAAUC,EAAgBC,EAAqBC,GACtDF,EACGG,MAAM,YAAa,CAClBC,IAAK,YACLC,MAAO,CACLC,UAAW,CACTC,YAAa,iBACbC,WAAY,sBACZC,aAAc,KAChB,CACF,EACAC,QAAS,CACPC,eAAgBA,CAClB,CACF,CAAC,EACAR,MAAM,iBAAkB,CACvBC,IAAK,2DAGLC,MAAO,CACLO,aAAc,CACZL,YAAa,SAASM,GAKpB,OAAOA,EAAaC,KAAO,YAAcD,EAAaE,GACxD,EACAP,WAAY,qBACZC,aAAc,UAChB,CACF,EACAC,QAAS,CACPM,kBAAmBA,CACrB,CACF,CAAC,EAEHf,EAAoBgB,MAAMC,KAAK,gBAAiB,WAG9C,MAAO,kBADG,IAAIC,MACgBC,aAAa,CAC7C,CAAC,EACDnB,EAAoBgB,MAAMC,KAAK,2BAA4B,WAGzD,MAAO,6BADG,IAAIC,MAC2BC,aAAa,CACxD,CAAC,EACDnB,EAAoBgB,MAAMC,KAAK,iBAAkB,WAG/C,MAAO,mBADG,IAAIC,MACiBC,aAAa,CAC9C,CAAC,EACDnB,EAAoBgB,MAAMC,KAAK,kBAAmB,WAGhD,MAAO,oBADG,IAAIC,MACkBC,aAAa,CAC/C,CAAC,EAIDnB,EAAoBgB,MAAMI,UAAU,gBAAgB,CACtD,CAMA,SAASV,EAAeW,GACtB,OAAOA,EAASC,YAAcD,EAASE,SAASC,OAAOC,aAAa,CACtE,CAMA,SAASV,EAAkBH,EAAcc,EAAWL,GAElD,OAAOK,EAAUC,qBAAqBf,EAAaC,KAAMD,EAAaE,IAAIc,OAAO,CAAC,EAC/EC,KAAK,SAASzB,GAQb,OAPA0B,EAAEC,QAAQ3B,EAAO,SAASS,GACpBA,EAAKmB,KAGPnB,EAAKoB,SAAW,IAAIZ,EAAS,CAAEW,GAAInB,EAAKmB,GAAIE,KAAMrB,EAAKsB,YAAa,CAAC,EAEzE,CAAC,EACM/B,CACT,CAAC,CACL,CAMA,SAASgC,EAASC,EAASC,EAAMC,EAAcC,EAAWC,EAAQC,GAYhE,GAXKL,EAAQM,cACXF,EAAOG,oBAAoB,YAE1B,EACHL,EAAaM,QAAQ,CAAEC,GAAI,cAAe,EAAG,SAASC,GACxB,aAAxBA,EAAWD,GAAG,EAAEZ,MACfa,EAAWC,QAAQ,IACtBV,EAAKW,MAAM,uBAAyBF,EAAWD,GAAG,EAAEZ,KAAO,KAAOa,EAAWE,MAAM,EAAEC,MAAM,EAC3FT,EAAOU,GAAG,CAAEjD,MAAO,WAAY,CAAC,EAEpC,CAAC,EAC8B,IAA3BsC,EAAUrC,IAAI,EAAEiD,OAAc,CAEhC,IAAIjD,EAAM,aACNU,EAAO,WAAWwC,KAAKX,EAAYY,SAASjC,SAASkC,IAAI,EAMzDC,GAJFrD,GADEU,EACKA,EAAK,GAEL,OAEC,IAAIK,MACd,GAAIwB,EAAYe,SAASC,qBAGvB,IAFA,IAAIC,EAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDC,EAAUD,EAASH,EAAIK,OAAO,GAC3BnB,EAAYe,SAASC,qBAAqBI,QAAQF,CAAO,EAAI,GAClEJ,EAAIO,QAAQ,CAAC,EACbH,EAAUD,EAASH,EAAIK,OAAO,GAGlC1D,GAAO,IAAMqD,EAAIrC,aAAa,EAC9BqB,EAAUwB,QAAQ,EAAE7D,IAAIA,CAAG,CAC7B,CACF,CAvIA8D,QAAQC,OAAO,mBAAoB,CAAC,YAAa,YAAa,oBAAqB,aAAc,cAAe,qBAAsB,kBAAmB,gBAAiB,cAAc,EACrLC,OAAOrE,CAAS,EAChBsE,IAAIhC,CAAQ,EAKftC,EAAUuE,QAAU,CAAC,iBAAkB,sBAAuB,sBAmE9D3D,EAAe2D,QAAU,CAAC,YAQ1BtD,EAAkBsD,QAAU,CAAC,eAAgB,YAAa,YAmB1DjC,EAASiC,QAAU,CAAC,UAAW,OAAQ,eAAgB,YAAa,SAAU,cAoC/E,EAAE"}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -171,11 +171,15 @@
|
||||
};
|
||||
|
||||
// Change calendar's date
|
||||
this.changeDate = function($event, newDate) {
|
||||
this.changeDate = function($event, newDate, isToday = false) {
|
||||
var date = newDate? newDate.getDayString() : angular.element($event.currentTarget).attr('date');
|
||||
if (newDate)
|
||||
_formatDate(newDate);
|
||||
$state.go('calendars.view', { day: date });
|
||||
// Refresh calendar data if click on today
|
||||
if (isToday) {
|
||||
$rootScope.$emit('calendars:list');
|
||||
}
|
||||
// $state.transitionTo('calendars.view', { day: date });
|
||||
};
|
||||
|
||||
|
||||
@@ -279,9 +279,14 @@
|
||||
};
|
||||
|
||||
this.destinationCalendars = function () {
|
||||
if (this.component.isErasable)
|
||||
if (this.component.isNew)
|
||||
// New component, return all writable calendars
|
||||
return Calendar.$findAll(null, true);
|
||||
else if (this.component.isErasable)
|
||||
// Movable component, return all writable calendars including current one
|
||||
return Calendar.$findAll(null, true, this.component.pid);
|
||||
else
|
||||
// Component can't be moved
|
||||
return [Calendar.$get(this.component.pid)];
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"FileSaver.min.js","sources":["../../node_modules/file-saver/dist/FileSaver.js"],"names":["global","factory","define","amd","exports","FileSaver","this","_global","window","self","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","console","error","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","isMacOSWebView","navigator","test","userAgent","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","msSaveOrOpenBlob","autoBom","warn","type","Blob","String","fromCharCode","popup","title","body","innerText","reader","force","isSafari","HTMLElement","safari","isChromeIOS","FileReader","onloadend","result","replace","readAsDataURL","module"],"mappings":"CAAA,SAAWA,EAAQC,GACK,mBAAXC,QAAyBA,OAAOC,IACzCD,OAAO,GAAID,GACiB,oBAAZG,QAChBH,KAKAA,IACAD,EAAOK,UAHI,IAPf,CAYGC,KAAM,wBAcP,IAAIC,EAA4B,iBAAXC,QAAuBA,OAAOA,SAAWA,OAASA,OAAyB,iBAATC,MAAqBA,KAAKA,OAASA,KAAOA,KAAyB,iBAAXT,QAAuBA,OAAOA,SAAWA,OAASA,YAAS,EAsB1M,SAASU,EAASC,EAAKC,EAAMC,GAC3B,IAAIC,EAAM,IAAIC,eACdD,EAAIE,KAAK,MAAOL,GAChBG,EAAIG,aAAe,OAEnBH,EAAII,OAAS,WACXC,EAAOL,EAAIM,SAAUR,EAAMC,IAG7BC,EAAIO,QAAU,WACZC,QAAQC,MAAM,4BAGhBT,EAAIU,OAGN,SAASC,EAAYd,GACnB,IAAIG,EAAM,IAAIC,eAEdD,EAAIE,KAAK,OAAQL,GAAK,GAEtB,IACEG,EAAIU,OACJ,MAAOE,IAET,OAAqB,KAAdZ,EAAIa,QAAiBb,EAAIa,QAAU,IAI5C,SAASC,EAAMC,GACb,IACEA,EAAKC,cAAc,IAAIC,WAAW,UAClC,MAAOL,GACP,IAAIM,EAAMC,SAASC,YAAY,eAC/BF,EAAIG,eAAe,SAAS,GAAM,EAAM3B,OAAQ,EAAG,EAAG,EAAG,GAAI,IAAI,GAAO,GAAO,GAAO,EAAO,EAAG,MAChGqB,EAAKC,cAAcE,IAOvB,IAAII,EAAiB7B,EAAQ8B,WAAa,YAAYC,KAAKD,UAAUE,YAAc,cAAcD,KAAKD,UAAUE,aAAe,SAASD,KAAKD,UAAUE,WACnJpB,EAASZ,EAAQY,SACH,iBAAXX,QAAuBA,SAAWD,EAAU,aAGjD,aAAciC,kBAAkBC,YAAcL,EAAiB,SAAgBM,EAAM9B,EAAMC,GAC3F,IAAI8B,EAAMpC,EAAQoC,KAAOpC,EAAQqC,UAC7BC,EAAIZ,SAASa,cAAc,KAC/BlC,EAAOA,GAAQ8B,EAAK9B,MAAQ,WAC5BiC,EAAEnC,SAAWE,EACbiC,EAAEE,IAAM,WAIY,iBAATL,GAETG,EAAEG,KAAON,EAELG,EAAEI,SAAWC,SAASD,OACxBxB,EAAYoB,EAAEG,MAAQtC,EAASgC,EAAM9B,EAAMC,GAAQe,EAAMiB,EAAGA,EAAEM,OAAS,UAEvEvB,EAAMiB,KAIRA,EAAEG,KAAOL,EAAIS,gBAAgBV,GAC7BW,WAAW,WACTV,EAAIW,gBAAgBT,EAAEG,OACrB,KAEHK,WAAW,WACTzB,EAAMiB,IACL,KAGL,qBAAsBR,UAAY,SAAgBK,EAAM9B,EAAMC,GAG9D,IAIQgC,EANRjC,EAAOA,GAAQ8B,EAAK9B,MAAQ,WAER,iBAAT8B,EACLjB,EAAYiB,GACdhC,EAASgC,EAAM9B,EAAMC,KAEjBgC,EAAIZ,SAASa,cAAc,MAC7BE,KAAON,EACTG,EAAEM,OAAS,SACXE,WAAW,WACTzB,EAAMiB,MAIVR,UAAUkB,kBAhHDb,EAgHsBA,OA/Gb,KADH7B,EAgHsBA,GA/GNA,EAAO,CACtC2C,SAAS,GACgB,iBAAT3C,IAChBS,QAAQmC,KAAK,sDACb5C,EAAO,CACL2C,SAAU3C,IAKVA,EAAK2C,SAAW,6EAA6ElB,KAAKI,EAAKgB,MAClG,IAAIC,KAAK,CAACC,OAAOC,aAAa,OAASnB,GAAO,CACnDgB,KAAMhB,EAAKgB,OAIRhB,GA+FuC9B,IAG9C,SAAgB8B,EAAM9B,EAAMC,EAAMiD,GASlC,IANAA,EAAQA,GAAS9C,KAAK,GAAI,aAGxB8C,EAAM7B,SAAS8B,MAAQD,EAAM7B,SAAS+B,KAAKC,UAAY,kBAGrC,iBAATvB,EAAmB,OAAOhC,EAASgC,EAAM9B,EAAMC,GAC1D,IAQMqD,EAWAvB,EACAhC,EApBFwD,EAAsB,6BAAdzB,EAAKgB,KAEbU,EAAW,eAAe9B,KAAK/B,EAAQ8D,cAAgB9D,EAAQ+D,OAE/DC,EAAc,eAAejC,KAAKD,UAAUE,YAE3CgC,GAAeJ,GAASC,GAAYhC,IAAyC,oBAAfoC,aAE7DN,EAAS,IAAIM,YAEVC,UAAY,WACjB,IAAI9D,EAAMuD,EAAOQ,OACjB/D,EAAM4D,EAAc5D,EAAMA,EAAIgE,QAAQ,eAAgB,yBAClDb,EAAOA,EAAMZ,SAASF,KAAOrC,EAASuC,SAAWvC,EACrDmD,EAAQ,MAGVI,EAAOU,cAAclC,KAEjBC,EAAMpC,EAAQoC,KAAOpC,EAAQqC,UAC7BjC,EAAMgC,EAAIS,gBAAgBV,GAC1BoB,EAAOA,EAAMZ,SAAWvC,EAASuC,SAASF,KAAOrC,EACrDmD,EAAQ,KAERT,WAAW,WACTV,EAAIW,gBAAgB3C,IACnB,QAGPJ,EAAQY,OAASA,EAAOA,OAASA,EAEX,oBAAX0D,SACTA,OAAOzE,QAAUe"}
|
||||
{"version":3,"file":"FileSaver.min.js","sources":["../../node_modules/file-saver/dist/FileSaver.js"],"names":["global","factory","define","amd","exports","FileSaver","this","_global","window","self","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","console","error","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","isMacOSWebView","navigator","test","userAgent","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","msSaveOrOpenBlob","autoBom","warn","type","Blob","String","fromCharCode","popup","title","body","innerText","reader","force","isSafari","HTMLElement","safari","isChromeIOS","FileReader","onloadend","result","replace","readAsDataURL","module"],"mappings":"AAAA,CAAA,SAAWA,EAAQC,GACK,YAAlB,OAAOC,QAAyBA,OAAOC,IACzCD,OAAO,GAAID,CAAO,EACU,aAAnB,OAAOG,QAChBH,EAAQ,GAKRA,EAAQ,EACRD,EAAOK,UAHI,GAKd,EAAEC,KAAM,WACP,aAaA,IAAIC,EAA4B,UAAlB,OAAOC,QAAuBA,OAAOA,SAAWA,OAASA,OAAyB,UAAhB,OAAOC,MAAqBA,KAAKA,OAASA,KAAOA,KAAyB,UAAlB,OAAOT,QAAuBA,OAAOA,SAAWA,OAASA,OAAS,KAAA,EAsB1M,SAASU,EAASC,EAAKC,EAAMC,GAC3B,IAAIC,EAAM,IAAIC,eACdD,EAAIE,KAAK,MAAOL,CAAG,EACnBG,EAAIG,aAAe,OAEnBH,EAAII,OAAS,WACXC,EAAOL,EAAIM,SAAUR,EAAMC,CAAI,CACjC,EAEAC,EAAIO,QAAU,WACZC,QAAQC,MAAM,yBAAyB,CACzC,EAEAT,EAAIU,KAAK,CACX,CAEA,SAASC,EAAYd,GACnB,IAAIG,EAAM,IAAIC,eAEdD,EAAIE,KAAK,OAAQL,EAAK,CAAA,CAAK,EAE3B,IACEG,EAAIU,KAAK,CACE,CAAX,MAAOE,IAET,OAAqB,KAAdZ,EAAIa,QAAiBb,EAAIa,QAAU,GAC5C,CAGA,SAASC,EAAMC,GACb,IACEA,EAAKC,cAAc,IAAIC,WAAW,OAAO,CAAC,CAK5C,CAJE,MAAOL,GACP,IAAIM,EAAMC,SAASC,YAAY,aAAa,EAC5CF,EAAIG,eAAe,QAAS,CAAA,EAAM,CAAA,EAAM3B,OAAQ,EAAG,EAAG,EAAG,GAAI,GAAI,CAAA,EAAO,CAAA,EAAO,CAAA,EAAO,CAAA,EAAO,EAAG,IAAI,EACpGqB,EAAKC,cAAcE,CAAG,CACxB,CACF,CAKA,IAAII,EAAiB7B,EAAQ8B,WAAa,YAAYC,KAAKD,UAAUE,SAAS,GAAK,cAAcD,KAAKD,UAAUE,SAAS,GAAK,CAAC,SAASD,KAAKD,UAAUE,SAAS,EAC5JpB,EAASZ,EAAQY,SACH,UAAlB,OAAOX,QAAuBA,SAAWD,EAAU,aAGjD,aAAciC,kBAAkBC,WAAa,CAACL,EAAiB,SAAgBM,EAAM9B,EAAMC,GAC3F,IAAI8B,EAAMpC,EAAQoC,KAAOpC,EAAQqC,UAC7BC,EAAIZ,SAASa,cAAc,GAAG,EAClClC,EAAOA,GAAQ8B,EAAK9B,MAAQ,WAC5BiC,EAAEnC,SAAWE,EACbiC,EAAEE,IAAM,WAIY,UAAhB,OAAOL,GAETG,EAAEG,KAAON,EAELG,EAAEI,SAAWC,SAASD,OACxBxB,EAAYoB,EAAEG,IAAI,EAAItC,EAASgC,EAAM9B,EAAMC,CAAI,EAAIe,EAAMiB,EAAGA,EAAEM,OAAS,QAAQ,EAE/EvB,EAAMiB,CAAC,IAITA,EAAEG,KAAOL,EAAIS,gBAAgBV,CAAI,EACjCW,WAAW,WACTV,EAAIW,gBAAgBT,EAAEG,IAAI,CAC5B,EAAG,GAAG,EAENK,WAAW,WACTzB,EAAMiB,CAAC,CACT,EAAG,CAAC,EAER,EACE,qBAAsBR,UAAY,SAAgBK,EAAM9B,EAAMC,GAG9D,IAIQgC,EANRjC,EAAOA,GAAQ8B,EAAK9B,MAAQ,WAER,UAAhB,OAAO8B,EACLjB,EAAYiB,CAAI,EAClBhC,EAASgC,EAAM9B,EAAMC,CAAI,IAErBgC,EAAIZ,SAASa,cAAc,GAAG,GAChCE,KAAON,EACTG,EAAEM,OAAS,SACXE,WAAW,WACTzB,EAAMiB,CAAC,CACT,CAAC,GAGHR,UAAUkB,kBAhHDb,EAgHsBA,EA/Gb,KAAA,KADH7B,EAgHsBA,GA/GNA,EAAO,CACtC2C,QAAS,CAAA,CACX,EAA2B,UAAhB,OAAO3C,IAChBS,QAAQmC,KAAK,oDAAoD,EACjE5C,EAAO,CACL2C,QAAS,CAAC3C,CACZ,GAIEA,EAAK2C,SAAW,6EAA6ElB,KAAKI,EAAKgB,IAAI,EACtG,IAAIC,KAAK,CAACC,OAAOC,aAAa,KAAM,EAAGnB,GAAO,CACnDgB,KAAMhB,EAAKgB,IACb,CAAC,EAGIhB,GA+FuC9B,CAAI,CAEpD,EACE,SAAgB8B,EAAM9B,EAAMC,EAAMiD,GASlC,IANAA,EAAQA,GAAS9C,KAAK,GAAI,QAAQ,KAGhC8C,EAAM7B,SAAS8B,MAAQD,EAAM7B,SAAS+B,KAAKC,UAAY,kBAGrC,UAAhB,OAAOvB,EAAmB,OAAOhC,EAASgC,EAAM9B,EAAMC,CAAI,EAC9D,IAQMqD,EAWAvB,EACAhC,EApBFwD,EAAsB,6BAAdzB,EAAKgB,KAEbU,EAAW,eAAe9B,KAAK/B,EAAQ8D,WAAW,GAAK9D,EAAQ+D,OAE/DC,EAAc,eAAejC,KAAKD,UAAUE,SAAS,GAEpDgC,GAAeJ,GAASC,GAAYhC,IAAyC,aAAtB,OAAOoC,aAE7DN,EAAS,IAAIM,YAEVC,UAAY,WACjB,IAAI9D,EAAMuD,EAAOQ,OACjB/D,EAAM4D,EAAc5D,EAAMA,EAAIgE,QAAQ,eAAgB,uBAAuB,EACzEb,EAAOA,EAAMZ,SAASF,KAAOrC,EAASuC,SAAWvC,EACrDmD,EAAQ,IACV,EAEAI,EAAOU,cAAclC,CAAI,IAErBC,EAAMpC,EAAQoC,KAAOpC,EAAQqC,UAC7BjC,EAAMgC,EAAIS,gBAAgBV,CAAI,EAC9BoB,EAAOA,EAAMZ,SAAWvC,EAASuC,SAASF,KAAOrC,EACrDmD,EAAQ,KAERT,WAAW,WACTV,EAAIW,gBAAgB3C,CAAG,CACzB,EAAG,GAAG,EAEV,GACAJ,EAAQY,OAASA,EAAOA,OAASA,EAEX,aAAlB,OAAO0D,SACTA,OAAOzE,QAAUe,EAErB,CAAC"}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+89
-89
@@ -6135,95 +6135,95 @@ function InterimElementProvider() {
|
||||
(function(){
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name material.core.liveannouncer
|
||||
* @description
|
||||
* AngularJS Material Live Announcer to provide accessibility for Voice Readers.
|
||||
*/
|
||||
MdLiveAnnouncer.$inject = ["$timeout"];
|
||||
angular
|
||||
.module('material.core')
|
||||
.service('$mdLiveAnnouncer', MdLiveAnnouncer);
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $mdLiveAnnouncer
|
||||
* @module material.core.liveannouncer
|
||||
*
|
||||
* @description
|
||||
*
|
||||
* Service to announce messages to supported screenreaders.
|
||||
*
|
||||
* > The `$mdLiveAnnouncer` service is internally used for components to provide proper accessibility.
|
||||
*
|
||||
* <hljs lang="js">
|
||||
* module.controller('AppCtrl', function($mdLiveAnnouncer) {
|
||||
* // Basic announcement (Polite Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google');
|
||||
*
|
||||
* // Custom announcement (Assertive Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google', 'assertive');
|
||||
* });
|
||||
* </hljs>
|
||||
*
|
||||
*/
|
||||
function MdLiveAnnouncer($timeout) {
|
||||
/** @private @const @type {!angular.$timeout} */
|
||||
this._$timeout = $timeout;
|
||||
|
||||
/** @private @const @type {!HTMLElement} */
|
||||
this._liveElement = this._createLiveElement();
|
||||
|
||||
/** @private @const @type {!number} */
|
||||
this._announceTimeout = 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name $mdLiveAnnouncer#announce
|
||||
* @description Announces messages to supported screenreaders.
|
||||
* @param {string} message Message to be announced to the screenreader
|
||||
* @param {'off'|'polite'|'assertive'} politeness The politeness of the announcer element.
|
||||
*/
|
||||
MdLiveAnnouncer.prototype.announce = function(message, politeness) {
|
||||
if (!politeness) {
|
||||
politeness = 'polite';
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
self._liveElement.textContent = '';
|
||||
self._liveElement.setAttribute('aria-live', politeness);
|
||||
|
||||
// This 100ms timeout is necessary for some browser + screen-reader combinations:
|
||||
// - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
|
||||
// - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
|
||||
// second time without clearing and then using a non-zero delay.
|
||||
// (using JAWS 17 at time of this writing).
|
||||
self._$timeout(function() {
|
||||
self._liveElement.textContent = message;
|
||||
}, self._announceTimeout, false);
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a live announcer element, which listens for DOM changes and announces them
|
||||
* to the screenreaders.
|
||||
* @returns {!HTMLElement}
|
||||
* @private
|
||||
*/
|
||||
MdLiveAnnouncer.prototype._createLiveElement = function() {
|
||||
var liveEl = document.createElement('div');
|
||||
|
||||
liveEl.classList.add('md-visually-hidden');
|
||||
liveEl.setAttribute('role', 'status');
|
||||
liveEl.setAttribute('aria-atomic', 'true');
|
||||
liveEl.setAttribute('aria-live', 'polite');
|
||||
|
||||
document.body.appendChild(liveEl);
|
||||
|
||||
return liveEl;
|
||||
};
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name material.core.liveannouncer
|
||||
* @description
|
||||
* AngularJS Material Live Announcer to provide accessibility for Voice Readers.
|
||||
*/
|
||||
MdLiveAnnouncer.$inject = ["$timeout"];
|
||||
angular
|
||||
.module('material.core')
|
||||
.service('$mdLiveAnnouncer', MdLiveAnnouncer);
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $mdLiveAnnouncer
|
||||
* @module material.core.liveannouncer
|
||||
*
|
||||
* @description
|
||||
*
|
||||
* Service to announce messages to supported screenreaders.
|
||||
*
|
||||
* > The `$mdLiveAnnouncer` service is internally used for components to provide proper accessibility.
|
||||
*
|
||||
* <hljs lang="js">
|
||||
* module.controller('AppCtrl', function($mdLiveAnnouncer) {
|
||||
* // Basic announcement (Polite Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google');
|
||||
*
|
||||
* // Custom announcement (Assertive Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google', 'assertive');
|
||||
* });
|
||||
* </hljs>
|
||||
*
|
||||
*/
|
||||
function MdLiveAnnouncer($timeout) {
|
||||
/** @private @const @type {!angular.$timeout} */
|
||||
this._$timeout = $timeout;
|
||||
|
||||
/** @private @const @type {!HTMLElement} */
|
||||
this._liveElement = this._createLiveElement();
|
||||
|
||||
/** @private @const @type {!number} */
|
||||
this._announceTimeout = 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name $mdLiveAnnouncer#announce
|
||||
* @description Announces messages to supported screenreaders.
|
||||
* @param {string} message Message to be announced to the screenreader
|
||||
* @param {'off'|'polite'|'assertive'} politeness The politeness of the announcer element.
|
||||
*/
|
||||
MdLiveAnnouncer.prototype.announce = function(message, politeness) {
|
||||
if (!politeness) {
|
||||
politeness = 'polite';
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
self._liveElement.textContent = '';
|
||||
self._liveElement.setAttribute('aria-live', politeness);
|
||||
|
||||
// This 100ms timeout is necessary for some browser + screen-reader combinations:
|
||||
// - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
|
||||
// - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
|
||||
// second time without clearing and then using a non-zero delay.
|
||||
// (using JAWS 17 at time of this writing).
|
||||
self._$timeout(function() {
|
||||
self._liveElement.textContent = message;
|
||||
}, self._announceTimeout, false);
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a live announcer element, which listens for DOM changes and announces them
|
||||
* to the screenreaders.
|
||||
* @returns {!HTMLElement}
|
||||
* @private
|
||||
*/
|
||||
MdLiveAnnouncer.prototype._createLiveElement = function() {
|
||||
var liveEl = document.createElement('div');
|
||||
|
||||
liveEl.classList.add('md-visually-hidden');
|
||||
liveEl.setAttribute('role', 'status');
|
||||
liveEl.setAttribute('aria-atomic', 'true');
|
||||
liveEl.setAttribute('aria-live', 'polite');
|
||||
|
||||
document.body.appendChild(liveEl);
|
||||
|
||||
return liveEl;
|
||||
};
|
||||
|
||||
})();
|
||||
(function(){
|
||||
|
||||
+61
-57
@@ -2,7 +2,7 @@
|
||||
Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
||||
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
|
||||
*/
|
||||
(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"M6K9",version:"4.19.1",revision:"445cf24ebd",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;d<c.length;d++){var h=c[d].src.match(a);if(h){b=h[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+
|
||||
(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"M8SC",version:"4.20.0",revision:"cb4a59c665",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;d<c.length;d++){var h=c[d].src.match(a);if(h){b=h[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+
|
||||
b:location.href.match(/^[^\?]*\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return b}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);return a=this.appendTimestamp(a)},appendTimestamp:function(a){if(!this.timestamp||"/"===a.charAt(a.length-1)||/[&?]t=/.test(a))return a;var b=0<=a.indexOf("?")?"\x26":"?";return a+b+"t\x3d"+this.timestamp},
|
||||
domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),window.removeEventListener("load",a,!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),window.detachEvent("onload",a),b())}catch(c){}}function b(){for(var a;a=c.shift();)a()}var c=[];return function(b){function e(){try{document.documentElement.doScroll("left")}catch(b){setTimeout(e,1);return}a()}c.push(b);"complete"===document.readyState&&
|
||||
setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);b=!1;try{b=!window.frameElement}catch(d){}document.documentElement.doScroll&&b&&e()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=d.getUrl;d.getUrl=function(a){return b.call(d,a)||c.call(d,a)}}return d}());
|
||||
@@ -530,8 +530,8 @@ CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function
|
||||
else{var d=this,b=d.config.stylesCombo_stylesSet||d.config.stylesSet;if(!1===b)a(null);else if(b instanceof Array)d._.stylesDefinitions=b,a(b);else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){d._.stylesDefinitions=b[c];a(d._.stylesDefinitions)})}}}});
|
||||
(function(){if(window.Promise)CKEDITOR.tools.promise=Promise;else{var a=CKEDITOR.getUrl("vendor/promise.js");if("function"===typeof window.define&&window.define.amd&&"function"===typeof window.require)return window.require([a],function(a){CKEDITOR.tools.promise=a});CKEDITOR.scriptLoader.load(a,function(d){if(!d)return CKEDITOR.error("no-vendor-lib",{path:a});if("undefined"!==typeof window.ES6Promise)return CKEDITOR.tools.promise=ES6Promise})}})();
|
||||
(function(){function a(a,f,e){a.once("selectionCheck",function(a){if(!d){var c=a.data.getRanges()[0];e.equals(c)?a.cancel():f.equals(c)&&(b=!0)}},null,null,-1)}var d=!0,b=!1;CKEDITOR.dom.selection.setupEditorOptimization=function(a){a.on("selectionCheck",function(a){a.data&&!b&&a.data.optimizeInElementEnds();b=!1});a.on("contentDom",function(){var b=a.editable();b&&(b.attachListener(b,"keydown",function(a){this._.shiftPressed=a.data.$.shiftKey},this),b.attachListener(b,"keyup",function(a){this._.shiftPressed=
|
||||
a.data.$.shiftKey},this))})};CKEDITOR.dom.selection.prototype.optimizeInElementEnds=function(){var b=this.getRanges()[0],f=this.root.editor,e;if(this.root.editor._.shiftPressed||this.isFake||b.isCollapsed||b.startContainer.equals(b.endContainer))e=!1;else if(0===b.endOffset)e=!0;else{e=b.startContainer.type===CKEDITOR.NODE_TEXT;var k=b.endContainer.type===CKEDITOR.NODE_TEXT,h=e?b.startContainer.getLength():b.startContainer.getChildCount();e=b.startOffset===h||e^k}e&&(e=b.clone(),b.shrink(CKEDITOR.SHRINK_TEXT,
|
||||
!1,{skipBogus:!CKEDITOR.env.webkit}),d=!1,a(f,b,e),b.select(),d=!0)}})();
|
||||
a.data.$.shiftKey},this))})};CKEDITOR.dom.selection.prototype.optimizeInElementEnds=function(){var b=this.getRanges()[0],f=this.root.editor,e;if(this.root.editor._.shiftPressed||this.isFake||b.isCollapsed||b.startContainer.equals(b.endContainer)||(b.endContainer.is?b.endContainer.is("li"):b.endContainer.getParent().is&&b.endContainer.getParent().is("li")))e=!1;else if(0===b.endOffset)e=!0;else{e=b.startContainer.type===CKEDITOR.NODE_TEXT;var k=b.endContainer.type===CKEDITOR.NODE_TEXT,h=e?b.startContainer.getLength():
|
||||
b.startContainer.getChildCount();e=b.startOffset===h||e^k}e&&(e=b.clone(),b.shrink(CKEDITOR.SHRINK_TEXT,!1,{skipBogus:!CKEDITOR.env.webkit}),d=!1,a(f,b,e),b.select(),d=!0)}})();
|
||||
(function(){function a(a,c){if(b(a))a=Math.round(c*(parseFloat(a)/100));else if("string"===typeof a&&a.match(/^\d+$/gm)||"string"===typeof a&&a.match(/^\d+(?:deg)?$/gm))a=parseInt(a,10);return a}function d(a,c){b(a)?a=c*(parseFloat(a)/100):"string"===typeof a&&a.match(/^\d?\.\d+/gm)&&(a=parseFloat(a));return a}function b(a){return"string"===typeof a&&a.match(/^((\d*\.\d+)|(\d+))%{1}$/gm)}function c(a,b,c){return!isNaN(a)&&a>=b&&a<=c}function f(a){a=a.toString(16);return 1==a.length?"0"+a:a}CKEDITOR.tools.color=
|
||||
CKEDITOR.tools.createClass({$:function(a,b){this._.initialColorCode=a;this._.defaultValue=b;this._.parseInput(a)},proto:{getHex:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha);return this._.formatHexString(a[0],a[1],a[2])},getHexWithAlpha:function(){if(!this._.isValidColor)return this._.defaultValue;var a=Math.round(this._.alpha*CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE);return this._.formatHexString(this._.red,
|
||||
this._.green,this._.blue,a)},getRgb:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha);return this._.formatRgbString("rgb",a[0],a[1],a[2])},getRgba:function(){return this._.isValidColor?this._.formatRgbString("rgba",this._.red,this._.green,this._.blue,this._.alpha):this._.defaultValue},getHsl:function(){var a=0===this._.alpha||1===this._.alpha;if(!this._.isValidColor)return this._.defaultValue;this._.type===
|
||||
@@ -686,10 +686,10 @@ c.setStyle("overflow-y","hidden");var d=a.window.getViewPaneSize().height,b;n.ap
|
||||
200,p=a.config.autoGrow_maxHeight||Infinity,k=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:g,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var t={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},q;for(q in t)a.on(q,function(d){"wysiwyg"==d.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?l=null:(g(),k||g())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&
|
||||
(a.data.command.state==CKEDITOR.TRISTATE_ON?c.removeStyle("overflow-y"):g())});a.on("contentDom",m);m();a.config.autoGrow_onStartup&&a.editable().isVisible()&&a.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(a){if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)a.on("instanceReady",function(){a.editable().isInline()?a.ui.space("contents").setStyle("height","auto"):h(a)})}})})();CKEDITOR.plugins.add("base64image",{lang:"af ar bg bn bs ca cs cy da de el en en-au en-ca en-gb eo es et eu fa fi fo fr fr-ca gl gu he hi hr hu id is it ja ka km ko ku lt lv mk mn ms nb nl no pl pt pt-br ro ru si sk sl sq sr sr-latn sv th tr ug uk vi zh zh-cn".split(" "),requires:"dialog",icons:"base64image",hidpi:!0,init:function(a){a.ui.addButton("base64image",{label:a.lang.common.image,command:"base64imageDialog",toolbar:"insert"});CKEDITOR.dialog.add("base64imageDialog",this.path+"dialogs/base64image.js");
|
||||
a.addCommand("base64imageDialog",new CKEDITOR.dialogCommand("base64imageDialog",{allowedContent:"img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}",requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));a.on("doubleclick",function(b){b.data.element&&(!b.data.element.isReadOnly()&&"img"===b.data.element.getName())&&
|
||||
(b.data.dialog="base64imageDialog",a.getSelection().selectElement(b.data.element))});a.addMenuItem&&(a.addMenuGroup("base64imageGroup"),a.addMenuItem("base64imageItem",{label:a.lang.common.image,icon:this.path+"icons/base64image.png",command:"base64imageDialog",group:"base64imageGroup"}));a.contextMenu&&a.contextMenu.addListener(function(b){if(b&&b.getName()==="img"){a.getSelection().selectElement(b);return{base64imageItem:CKEDITOR.TRISTATE_ON}}return null})}});CKEDITOR.plugins.add("basicstyles",{init:function(c){var e=0,d=function(g,d,b,a){if(a){a=new CKEDITOR.style(a);var f=h[b];f.unshift(a);c.attachStyleStateChange(a,function(a){!c.readOnly&&c.getCommand(b).setState(a)});c.addCommand(b,new CKEDITOR.styleCommand(a,{contentForms:f}));c.ui.addButton&&c.ui.addButton(g,{isToggle:!0,label:d,command:b,toolbar:"basicstyles,"+(e+=10)})}},h={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==
|
||||
a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},b=c.config,a=c.lang.basicstyles;d("Bold",a.bold,"bold",b.coreStyles_bold);d("Italic",a.italic,"italic",b.coreStyles_italic);d("Underline",a.underline,"underline",b.coreStyles_underline);d("Strike",a.strike,"strike",b.coreStyles_strike);d("Subscript",a.subscript,
|
||||
"subscript",b.coreStyles_subscript);d("Superscript",a.superscript,"superscript",b.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};
|
||||
CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){function q(a,f,e,b){if(!a.isReadOnly()&&!a.equals(e.editable())){CKEDITOR.dom.element.setMarker(b,a,"bidi_processed",1);b=a;for(var c=e.editable();(b=b.getParent())&&!b.equals(c);)if(b.getCustomData("bidi_processed")){a.removeStyle("direction");a.removeAttribute("dir");return}b=e.config.useComputedState;(b?a.getComputedStyle("direction"):a.getStyle("direction")||a.hasAttribute("dir"))!=f&&(a.removeStyle("direction"),b?(a.removeAttribute("dir"),f!=a.getComputedStyle("direction")&&a.setAttribute("dir",
|
||||
(b.data.dialog="base64imageDialog",a.getSelection().selectElement(b.data.element))});a.addMenuItem&&(a.addMenuGroup("base64imageGroup"),a.addMenuItem("base64imageItem",{label:a.lang.common.image,icon:this.path+"icons/base64image.png",command:"base64imageDialog",group:"base64imageGroup"}));a.contextMenu&&a.contextMenu.addListener(function(b){if(b&&b.getName()==="img"){a.getSelection().selectElement(b);return{base64imageItem:CKEDITOR.TRISTATE_ON}}return null})}});CKEDITOR.plugins.add("basicstyles",{init:function(a){var f=0,d=function(h,d,c,b){if(b){b=new CKEDITOR.style(b);var g=e[c];g.unshift(b);a.attachStyleStateChange(b,function(b){!a.readOnly&&a.getCommand(c).setState(b)});a.addCommand(c,new CKEDITOR.styleCommand(b,{contentForms:g}));a.ui.addButton&&a.ui.addButton(h,{isToggle:!0,label:d,command:c,toolbar:"basicstyles,"+(f+=10)})}},e={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==
|
||||
a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},c=a.config,b=a.lang.basicstyles;d("Bold",b.bold,"bold",c.coreStyles_bold);d("Italic",b.italic,"italic",c.coreStyles_italic);d("Underline",b.underline,"underline",c.coreStyles_underline);d("Strike",b.strike,"strike",c.coreStyles_strike);d("Subscript",b.subscript,
|
||||
"subscript",c.coreStyles_subscript);d("Superscript",b.superscript,"superscript",c.coreStyles_superscript);a.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])},afterInit:function(a){if(a.config.coreStyles_toggleSubSup){var f=a.getCommand("subscript"),d=a.getCommand("superscript");if(f&&d)a.on("afterCommandExec",function(e){e=e.data.name;if("subscript"===e||"superscript"===e){var c="subscript"===e?d:f;("subscript"===e?f:d).state===CKEDITOR.TRISTATE_ON&&
|
||||
c.state===CKEDITOR.TRISTATE_ON&&(c.exec(a),a.fire("updateSnapshot"))}})}}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};CKEDITOR.config.coreStyles_superscript={element:"sup"};CKEDITOR.config.coreStyles_toggleSubSup=!1;(function(){function q(a,f,e,b){if(!a.isReadOnly()&&!a.equals(e.editable())){CKEDITOR.dom.element.setMarker(b,a,"bidi_processed",1);b=a;for(var c=e.editable();(b=b.getParent())&&!b.equals(c);)if(b.getCustomData("bidi_processed")){a.removeStyle("direction");a.removeAttribute("dir");return}b=e.config.useComputedState;(b?a.getComputedStyle("direction"):a.getStyle("direction")||a.hasAttribute("dir"))!=f&&(a.removeStyle("direction"),b?(a.removeAttribute("dir"),f!=a.getComputedStyle("direction")&&a.setAttribute("dir",
|
||||
f)):a.setAttribute("dir",f),e.forceNextSelectionCheck())}}function v(a,f,e){var b=a.getCommonAncestor(!1,!0);a=a.clone();a.enlarge(e==CKEDITOR.ENTER_BR?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(a.checkBoundaryOfElement(b,CKEDITOR.START)&&a.checkBoundaryOfElement(b,CKEDITOR.END)){for(var c;b&&b.type==CKEDITOR.NODE_ELEMENT&&(c=b.getParent())&&1==c.getChildCount()&&!(b.getName()in f);)b=c;return b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in f&&b}}function p(a){return{context:"p",
|
||||
allowedContent:{"h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td":{propertiesOnly:!0,attributes:"dir"}},requiredContent:"p[dir]",refresh:function(a,e){var b=a.config.useComputedState,c;if(!b){c=e.lastElement;for(var h=a.editable();c&&!(c.getName()in u||c.equals(h));){var d=c.getParent();if(!d)break;c=d}}c=c||e.block||e.blockLimit;c.equals(a.editable())&&(h=a.getSelection().getRanges()[0].getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&(c=h);c&&(b=b?c.getComputedStyle("direction"):c.getStyle("direction")||
|
||||
c.getAttribute("dir"),a.getCommand("bidirtl").setState("rtl"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF),a.getCommand("bidiltr").setState("ltr"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF));b=(e.block||e.blockLimit||a.editable()).getDirection(1);b!=(a._.selDir||a.lang.dir)&&(a._.selDir=b,a.fire("contentDirChanged",b))},exec:function(f){var e=f.getSelection(),b=f.config.enterMode,c=e.getRanges();if(c&&c.length){for(var h={},d=e.createBookmarks(),c=c.createIterator(),g,l=0;g=c.getNextRange(1);){var k=
|
||||
@@ -725,21 +725,21 @@ b);0>a||(this.notifications.splice(a,1),b.element.remove(),this.element.getChild
|
||||
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-g-h))}var a=this.element,c=this.editor,d=c.ui.contentsElement.getClientRect(),e=c.ui.contentsElement.getDocumentPosition(),f,l,u=a.getClientRect(),m,g=this._notificationWidth,h=this._notificationMargin;m=CKEDITOR.document.getWindow();var p=m.getScrollPosition(),t=m.getViewPaneSize(),q=CKEDITOR.document.getBody(),r=q.getDocumentPosition(),k=CKEDITOR.tools.cssLength;g&&h||(m=this.element.getChild(0),g=this._notificationWidth=m.getClientRect().width,h=this._notificationMargin=parseInt(m.getComputedStyle("margin-left"),
|
||||
10)+parseInt(m.getComputedStyle("margin-right"),10));c.toolbar&&(f=c.ui.space(c.config.toolbarLocation),l=f.getClientRect());f&&f.isVisible()&&l.bottom>d.top&&l.bottom<d.bottom-u.height?a.setStyles({position:"fixed",top:k(l.bottom)}):0<d.top?a.setStyles({position:"absolute",top:k(e.y)}):e.y+d.height-u.height>p.y?a.setStyles({position:"fixed",top:0}):a.setStyles({position:"absolute",top:k(e.y+d.height-u.height)});var n="fixed"==a.getStyle("position")?d.left:"static"!=q.getComputedStyle("position")?
|
||||
e.x-r.x:e.x;d.width<g+h?e.x+g+h>p.x+t.width?b():a.setStyle("left",k(n)):e.x+g+h>p.x+t.width?a.setStyle("left",k(n)):e.x+d.width/2+g/2+h>p.x+t.width?a.setStyle("left",k(n-e.x+p.x+t.width-g-h)):0>d.left+d.width-g-h?b():0>d.left+d.width/2-g/2?a.setStyle("left",k(n-e.x+p.x)):a.setStyle("left",k(n+d.width/2-g/2-h/2))}};CKEDITOR.plugins.notification=q})();(function(){function D(a){function d(){for(var b=f(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||v(a),n=0;n<e.length;n++){var g=e[n];if("/"!=g){"string"==typeof g&&(g=e[n]={name:g});var l,d=g.groups;if(d)for(var h=0;h<d.length;h++)l=d[h],(l=b[l])&&c(g,l);(l=b[g.name])&&c(g,l)}}return e}function f(){var b={},c,e,g;for(c in a.ui.items)e=a.ui.items[c],g=e.toolbar||"others",g=g.split(","),e=g[0],g=parseInt(g[1]||-1,10),b[e]||(b[e]=[]),b[e].push({name:c,order:g});for(e in b)b[e]=b[e].sort(function(b,
|
||||
a){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});return b}function c(c,e){if(e.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var d;d=e.shift();)d="string"==typeof d?d:d.name,b&&-1!=CKEDITOR.tools.indexOf(b,d)||(d=a.ui.create(d))&&a.addFeature(d)&&c.items.push(d)}}function h(b){var a=[],e,d,h;for(e=0;e<b.length;++e)d=b[e],h={},"/"==d?a.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),a.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)),
|
||||
h.name=d.name,a.push(h));return a}var b=a.config.removeButtons,b=b&&b.split(","),e=a.config.toolbar;"string"==typeof e&&(e=a.config["toolbar_"+e]);return a.toolbar=e?h(e):d()}function v(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list",
|
||||
"indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var z=function(){this.toolbars=[]};z.prototype.focus=function(){for(var a=0,d;d=this.toolbars[a++];)for(var f=0,c;c=d.items[f++];)if(c.focus){c.focus();return}};var E={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",
|
||||
{requires:"button",init:function(a){var d,f=function(c,h){var b,e="rtl"==a.lang.dir,k=a.config.toolbarGroupCycling,q=e?37:39,e=e?39:37,k=void 0===k||k;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==h?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],b.items.length)for(c=b.items[d?b.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)||(b=0);c&&c.focus();return!1;case q:b=c;do b=b.next,!b&&
|
||||
k&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():f(c,9);return!1;case 40:return c.button&&c.button.hasArrow?c.execute():f(c,40==h?q:e),!1;case e:case 38:b=c;do b=b.previous,!b&&k&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(d=1,f(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(),!1;case CKEDITOR.ALT+122:return a.execCommand("elementsPathFocus"),!1}return!0};a.on("uiSpace",function(c){if(c.data.space==a.config.toolbarLocation){c.removeListener();
|
||||
a.toolbox=new z;var d=CKEDITOR.tools.getNextId(),b=['\x3cspan id\x3d"',d,'" class\x3d"cke_voice_label"\x3e',a.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+a.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',d,'" onmousedown\x3d"return false;"\x3e'],d=!1!==a.config.toolbarStartupExpanded,e,k;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&b.push('\x3cspan class\x3d"cke_toolbox_main"'+(d?"\x3e":' style\x3d"display:none"\x3e'));
|
||||
for(var q=a.toolbox.toolbars,n=D(a),g=n.length,l=0;l<g;l++){var r,m=0,w,p=n[l],v="/"!==p&&("/"===n[l+1]||l==g-1),x;if(p)if(e&&(b.push("\x3c/span\x3e"),k=e=0),"/"===p)b.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{x=p.items||p;for(var y=0;y<x.length;y++){var t=x[y],A;if(t){var B=function(c){c=c.render(a,b);u=m.items.push(c)-1;0<u&&(c.previous=m.items[u-1],c.previous.next=c);c.toolbar=m;c.onkey=f};if(t.type==CKEDITOR.UI_SEPARATOR)k=e&&t;else{A=!1!==t.canGroup;if(!m){r=CKEDITOR.tools.getNextId();
|
||||
m={id:r,items:[]};w=p.name&&(a.lang.toolbar.toolbarGroups[p.name]||p.name);b.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(v?' cke_toolbar_last"':'"'),w?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');w&&b.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',w,"\x3c/span\x3e");b.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var u=q.push(m)-1;0<u&&(m.previous=q[u-1],m.previous.next=m)}A?e||(b.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),
|
||||
e=1):e&&(b.push("\x3c/span\x3e"),e=0);k&&(B(k),k=0);B(t)}}}e&&(b.push("\x3c/span\x3e"),k=e=0);m&&b.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}a.config.toolbarCanCollapse&&b.push("\x3c/span\x3e");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var C=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(C)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(b){var a=
|
||||
b.ui.space("toolbar_collapser"),c=a.getPrevious(),d=b.ui.space("contents"),e=c.getParent(),h=parseInt(d.$.style.height,10),g=e.$.offsetHeight,f=a.hasClass("cke_toolbox_collapser_min");f?(c.show(),a.removeClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarCollapse)):(c.hide(),a.addClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarExpand));a.getFirst().setText(f?"▲":"◀");d.setStyle("height",h-(e.$.offsetHeight-g)+"px");b.fire("resize",{outerHeight:b.container.$.offsetHeight,
|
||||
contentsHeight:d.$.offsetHeight,outerWidth:b.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");b.push('\x3ca title\x3d"'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id\x3d"'+a.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');d||b.push(" cke_toolbox_collapser_min");b.push('" onclick\x3d"CKEDITOR.tools.callFunction('+C+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',
|
||||
"\x3c/a\x3e")}b.push("\x3c/span\x3e");c.data.html+=b.join("")}});a.on("destroy",function(){if(this.toolbox){var a,d=0,b,e,f;for(a=this.toolbox.toolbars;d<a.length;d++)for(e=a[d].items,b=0;b<e.length;b++)f=e[b],f.clickFn&&CKEDITOR.tools.removeFunction(f.clickFn),f.keyDownFn&&CKEDITOR.tools.removeFunction(f.keyDownFn)}});a.on("uiReady",function(){var c=a.ui.space("toolbox");c&&a.focusManager.add(c,1)});a.addCommand("toolbarFocus",E);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,
|
||||
{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,d,f){var c=v(this.editor),h=0===d,b={name:a};if(f){if(f=CKEDITOR.tools.search(c,function(a){return a.name==f})){!f.groups&&(f.groups=[]);if(d&&(d=CKEDITOR.tools.indexOf(f.groups,d),0<=d)){f.groups.splice(d+1,0,a);return}h?f.groups.splice(0,0,a):f.groups.push(a);
|
||||
return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,a):"number"==typeof d?c.splice(d+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";CKEDITOR.config.toolbarLocation="top";(function(){function t(a,b,c){b.type||(b.type="auto");if(c&&!1===a.fire("beforePaste",b)||!b.dataValue&&b.dataTransfer.isEmpty())return!1;b.dataValue||(b.dataValue="");if(CKEDITOR.env.gecko&&"drop"==b.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus();a.focus()});return a.fire("paste",b)}function y(a){function b(){var b=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(b){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==b.name||n.initPasteDataTransfer(b,
|
||||
e.x-r.x:e.x;d.width<g+h?e.x+g+h>p.x+t.width?b():a.setStyle("left",k(n)):e.x+g+h>p.x+t.width?a.setStyle("left",k(n)):e.x+d.width/2+g/2+h>p.x+t.width?a.setStyle("left",k(n-e.x+p.x+t.width-g-h)):0>d.left+d.width-g-h?b():0>d.left+d.width/2-g/2?a.setStyle("left",k(n-e.x+p.x)):a.setStyle("left",k(n+d.width/2-g/2-h/2))}};CKEDITOR.plugins.notification=q})();(function(){function D(b){function d(){for(var a=f(),e=CKEDITOR.tools.clone(b.config.toolbarGroups)||v(b),n=0;n<e.length;n++){var g=e[n];if("/"!=g){"string"==typeof g&&(g=e[n]={name:g});var l,d=g.groups;if(d)for(var h=0;h<d.length;h++)l=d[h],(l=a[l])&&c(g,l);(l=a[g.name])&&c(g,l)}}return e}function f(){var a={},c,e,g;for(c in b.ui.items)e=b.ui.items[c],g=e.toolbar||"others",g=g.split(","),e=g[0],g=parseInt(g[1]||-1,10),a[e]||(a[e]=[]),a[e].push({name:c,order:g});for(e in a)a[e]=a[e].sort(function(a,
|
||||
b){return a.order==b.order?0:0>b.order?-1:0>a.order?1:a.order<b.order?-1:1});return a}function c(c,e){if(e.length){c.items?c.items.push(b.ui.create("-")):c.items=[];for(var d;d=e.shift();)d="string"==typeof d?d:d.name,a&&-1!=CKEDITOR.tools.indexOf(a,d)||(d=b.ui.create(d))&&b.addFeature(d)&&c.items.push(d)}}function h(a){var b=[],e,d,h;for(e=0;e<a.length;++e)d=a[e],h={},"/"==d?b.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),b.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)),
|
||||
h.name=d.name,b.push(h));return b}var a=function(a){return a&&"string"===typeof a?a.split(","):a}(b.config.removeButtons),e=b.config.toolbar;"string"==typeof e&&(e=b.config["toolbar_"+e]);return b.toolbar=e?h(e):d()}function v(b){return b._.toolbarGroups||(b._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},
|
||||
{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var z=function(){this.toolbars=[]};z.prototype.focus=function(){for(var b=0,d;d=this.toolbars[b++];)for(var f=0,c;c=d.items[f++];)if(c.focus){c.focus();return}};var E={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(b){b.toolbox&&(CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){b.toolbox.focus()},100):b.toolbox.focus())}};
|
||||
CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(b){var d,f=function(c,h){var a,e="rtl"==b.lang.dir,k=b.config.toolbarGroupCycling,q=e?37:39,e=e?39:37,k=void 0===k||k;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!a||!a.items.length;)if(a=9==h?(a?a.next:c.toolbar.next)||b.toolbox.toolbars[0]:(a?a.previous:c.toolbar.previous)||b.toolbox.toolbars[b.toolbox.toolbars.length-1],a.items.length)for(c=a.items[d?a.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)||(a=0);c&&c.focus();return!1;
|
||||
case q:a=c;do a=a.next,!a&&k&&(a=c.toolbar.items[0]);while(a&&!a.focus);a?a.focus():f(c,9);return!1;case 40:return c.button&&c.button.hasArrow?c.execute():f(c,40==h?q:e),!1;case e:case 38:a=c;do a=a.previous,!a&&k&&(a=c.toolbar.items[c.toolbar.items.length-1]);while(a&&!a.focus);a?a.focus():(d=1,f(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return b.focus(),!1;case 13:case 32:return c.execute(),!1;case CKEDITOR.ALT+122:return b.execCommand("elementsPathFocus"),!1}return!0};b.on("uiSpace",function(c){if(c.data.space==
|
||||
b.config.toolbarLocation){c.removeListener();b.toolbox=new z;var d=CKEDITOR.tools.getNextId(),a=['\x3cspan id\x3d"',d,'" class\x3d"cke_voice_label"\x3e',b.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+b.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',d,'" onmousedown\x3d"return false;"\x3e'],d=!1!==b.config.toolbarStartupExpanded,e,k;b.config.toolbarCanCollapse&&b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&a.push('\x3cspan class\x3d"cke_toolbox_main"'+
|
||||
(d?"\x3e":' style\x3d"display:none"\x3e'));for(var q=b.toolbox.toolbars,n=D(b),g=n.length,l=0;l<g;l++){var r,m=0,w,p=n[l],v="/"!==p&&("/"===n[l+1]||l==g-1),x;if(p)if(e&&(a.push("\x3c/span\x3e"),k=e=0),"/"===p)a.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{x=p.items||p;for(var y=0;y<x.length;y++){var t=x[y],A;if(t){var B=function(c){c=c.render(b,a);u=m.items.push(c)-1;0<u&&(c.previous=m.items[u-1],c.previous.next=c);c.toolbar=m;c.onkey=f};if(t.type==CKEDITOR.UI_SEPARATOR)k=e&&
|
||||
t;else{A=!1!==t.canGroup;if(!m){r=CKEDITOR.tools.getNextId();m={id:r,items:[]};w=p.name&&(b.lang.toolbar.toolbarGroups[p.name]||p.name);a.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(v?' cke_toolbar_last"':'"'),w?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');w&&a.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',w,"\x3c/span\x3e");a.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var u=q.push(m)-1;0<u&&(m.previous=q[u-1],m.previous.next=m)}A?
|
||||
e||(a.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),e=1):e&&(a.push("\x3c/span\x3e"),e=0);k&&(B(k),k=0);B(t)}}}e&&(a.push("\x3c/span\x3e"),k=e=0);m&&a.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}b.config.toolbarCanCollapse&&a.push("\x3c/span\x3e");if(b.config.toolbarCanCollapse&&b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var C=CKEDITOR.tools.addFunction(function(){b.execCommand("toolbarCollapse")});b.on("destroy",function(){CKEDITOR.tools.removeFunction(C)});
|
||||
b.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),c=b.getPrevious(),d=a.ui.space("contents"),e=c.getParent(),h=parseInt(d.$.style.height,10),g=e.$.offsetHeight,f=b.hasClass("cke_toolbox_collapser_min");f?(c.show(),b.removeClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(c.hide(),b.addClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarExpand));b.getFirst().setText(f?"▲":"◀");d.setStyle("height",
|
||||
h-(e.$.offsetHeight-g)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:d.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});b.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");a.push('\x3ca title\x3d"'+(d?b.lang.toolbar.toolbarCollapse:b.lang.toolbar.toolbarExpand)+'" id\x3d"'+b.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');d||a.push(" cke_toolbox_collapser_min");
|
||||
a.push('" onclick\x3d"CKEDITOR.tools.callFunction('+C+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',"\x3c/a\x3e")}a.push("\x3c/span\x3e");c.data.html+=a.join("")}});b.on("destroy",function(){if(this.toolbox){var b,d=0,a,e,f;for(b=this.toolbox.toolbars;d<b.length;d++)for(e=b[d].items,a=0;a<e.length;a++)f=e[a],f.clickFn&&CKEDITOR.tools.removeFunction(f.clickFn),f.keyDownFn&&CKEDITOR.tools.removeFunction(f.keyDownFn)}});b.on("uiReady",function(){var c=b.ui.space("toolbox");c&&b.focusManager.add(c,
|
||||
1)});b.addCommand("toolbarFocus",E);b.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");b.ui.add("-",CKEDITOR.UI_SEPARATOR,{});b.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(b,d){d.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(b,d,f){var c=v(this.editor),h=0===d,a={name:b};if(f){if(f=CKEDITOR.tools.search(c,function(a){return a.name==f})){!f.groups&&(f.groups=[]);if(d&&
|
||||
(d=CKEDITOR.tools.indexOf(f.groups,d),0<=d)){f.groups.splice(d+1,0,b);return}h?f.groups.splice(0,0,b):f.groups.push(b);return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,b):"number"==typeof d?c.splice(d+1,0,a):c.push(b)}})();CKEDITOR.UI_SEPARATOR="separator";CKEDITOR.config.toolbarLocation="top";(function(){function t(a,b,c){b.type||(b.type="auto");if(c&&!1===a.fire("beforePaste",b)||!b.dataValue&&b.dataTransfer.isEmpty())return!1;b.dataValue||(b.dataValue="");if(CKEDITOR.env.gecko&&"drop"==b.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus();a.focus()});return a.fire("paste",b)}function y(a){function b(){var b=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(b){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==b.name||n.initPasteDataTransfer(b,
|
||||
a),b.data.preventDefault())};b.on("copy",c);b.on("cut",c);b.on("cut",function(){a.readOnly||a.extractSelectedHtml()},null,null,999)}b.on(n.mainPasteEvent,function(a){"beforepaste"==n.mainPasteEvent&&u||m(a)});"beforepaste"==n.mainPasteEvent&&(b.on("paste",function(a){w||(g(),a.data.preventDefault(),m(a),e("paste"))}),b.on("contextmenu",f,null,null,0),b.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||f()},null,null,0));b.on("beforecut",function(){!u&&l(a)});var h;b.attachListener(CKEDITOR.env.ie?
|
||||
b:a.document.getDocumentElement(),"mouseup",function(){h=setTimeout(p,0)});a.on("destroy",function(){clearTimeout(h)});b.on("keyup",p)}function c(b){return{type:b,canUndo:"cut"==b,startDisabled:!0,fakeKeystroke:"cut"==b?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&l();var b;var c=this.type;if(CKEDITOR.env.ie)b=e(c);else try{b=a.document.$.execCommand(c,!1,null)}catch(h){b=!1}b||a.showNotification(a.lang.clipboard[this.type+"Error"]);return b}}}function d(){return{canUndo:!1,
|
||||
async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(a,b){function c(b,m){m="undefined"!==typeof m?m:!0;b?(b.method="paste",b.dataTransfer||(b.dataTransfer=n.initPasteDataTransfer()),t(a,b,m)):d&&!a._.forcePasteDialog&&a.showNotification(p,"info",a.config.clipboard_notificationDuration);a._.forcePasteDialog=!1;a.fire("afterCommandExec",{name:"paste",command:h,returnValue:!!b})}b="undefined"!==typeof b&&null!==b?b:{};var h=this,d="undefined"!==typeof b.notification?b.notification:!0,m=b.type,e=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,
|
||||
@@ -871,27 +871,28 @@ CKEDITOR.TRISTATE_DISABLED)}}));a.addCommand("editdiv",new CKEDITOR.dialogComman
|
||||
for(d=0;d<f.length;d++)f[d].remove(!0);b.selectBookmarks(h)}});a.ui.addButton&&a.ui.addButton("CreateDiv",{label:c.toolbar,command:"creatediv",toolbar:"blocks,50"});a.addMenuItems&&(a.addMenuItems({editdiv:{label:c.edit,command:"editdiv",group:"div",order:1},removediv:{label:c.remove,command:"removediv",group:"div",order:5}}),a.contextMenu&&a.contextMenu.addListener(function(b){return!b||b.isReadOnly()?null:CKEDITOR.plugins.div.getSurroundDiv(a)?{editdiv:CKEDITOR.TRISTATE_OFF,removediv:CKEDITOR.TRISTATE_OFF}:
|
||||
null}));CKEDITOR.dialog.add("creatediv",this.path+"dialogs/div.js");CKEDITOR.dialog.add("editdiv",this.path+"dialogs/div.js")}}});CKEDITOR.plugins.div={getSurroundDiv:function(a,c){var b=a.elementPath(c);return a.elementPath(b.blockLimit).contains(function(a){return a.is("div")&&!a.isReadOnly()},1)}}})();(function(){function b(a,b,d){this.editor=a;this.lastMatched=null;this.ignoreNext=!1;this.callback=b;this.ignoredKeys=[16,17,18,91,35,36,37,38,39,40,33,34];this._listeners=[];this.throttle=d||0;this._buffer=CKEDITOR.tools.throttle(this.throttle,function(a){(a=this.callback(a))?a.text!=this.lastMatched&&(this.lastMatched=a.text,this.fire("matched",a)):this.lastMatched&&this.unmatch()},this)}CKEDITOR.plugins.add("textwatcher",{});b.prototype={attach:function(){function a(){var a=c.editable();this._listeners.push(a.attachListener(a,
|
||||
"keyup",b,this))}function b(a){this.check(a)}function d(){this.unmatch()}var c=this.editor;this._listeners.push(c.on("contentDom",a,this));this._listeners.push(c.on("blur",d,this));this._listeners.push(c.on("beforeModeUnload",d,this));this._listeners.push(c.on("setData",d,this));this._listeners.push(c.on("afterCommandExec",d,this));c.editable()&&a.call(this);return this},check:function(a){this.ignoreNext?this.ignoreNext=!1:a&&"keyup"==a.name&&-1!=CKEDITOR.tools.array.indexOf(this.ignoredKeys,a.data.getKey())||
|
||||
(a=this.editor.getSelection())&&(a=a.getRanges()[0])&&this._buffer.input(a)},consumeNext:function(){this.ignoreNext=!0;return this},unmatch:function(){this.lastMatched=null;this.fire("unmatched");return this},destroy:function(){CKEDITOR.tools.array.forEach(this._listeners,function(a){a.removeListener()});this._listeners=[]}};CKEDITOR.event.implementOn(b.prototype);CKEDITOR.plugins.textWatcher=b})();(function(){function d(a,b){var c=a.config.autocomplete_commitKeystrokes||CKEDITOR.config.autocomplete_commitKeystrokes;this.editor=a;this.throttle=void 0!==b.throttle?b.throttle:20;this.view=this.getView();this.model=this.getModel(b.dataCallback);this.model.itemsLimit=b.itemsLimit;this.textWatcher=this.getTextWatcher(b.textTestCallback);this.commitKeystrokes=CKEDITOR.tools.array.isArray(c)?c.slice():[c];this._listeners=[];this.outputTemplate=void 0!==b.outputTemplate?new CKEDITOR.template(b.outputTemplate):
|
||||
null;b.itemTemplate&&(this.view.itemTemplate=new CKEDITOR.template(b.itemTemplate));if("ready"===this.editor.status)this.attach();else this.editor.on("instanceReady",function(){this.attach()},this);a.on("destroy",function(){this.destroy()},this)}function g(a){this.itemTemplate=new CKEDITOR.template('\x3cli data-id\x3d"{id}"\x3e{name}\x3c/li\x3e');this.editor=a}function f(a){this.dataCallback=a;this.isActive=!1;this.itemsLimit=0}function h(a){return CKEDITOR.tools.array.reduce(CKEDITOR.tools.object.keys(a),
|
||||
function(b,c){b[c]=CKEDITOR.tools.htmlEncode(a[c]);return b},{})}CKEDITOR.plugins.add("autocomplete",{requires:"textwatcher",onLoad:function(){CKEDITOR.document.appendStyleSheet(this.path+"skins/default.css")},isSupportedEnvironment:function(){return!CKEDITOR.env.ie||8<CKEDITOR.env.version}});d.prototype={attach:function(){var a=this.editor,b=CKEDITOR.document.getWindow(),c=a.editable(),k=c.isInline()?c:c.getDocument();CKEDITOR.env.iOS&&!c.isInline()&&(k=a.window.getFrame().getParent());this.view.append();
|
||||
this.view.attach();this.textWatcher.attach();this._listeners.push(this.textWatcher.on("matched",this.onTextMatched,this));this._listeners.push(this.textWatcher.on("unmatched",this.onTextUnmatched,this));this._listeners.push(this.model.on("change-data",this.modelChangeListener,this));this._listeners.push(this.model.on("change-selectedItemId",this.onSelectedItemId,this));this._listeners.push(this.view.on("change-selectedItemId",this.onSelectedItemId,this));this._listeners.push(this.view.on("click-item",
|
||||
this.onItemClick,this));this._listeners.push(this.model.on("change-isActive",this.updateAriaAttributesOnEditable,this));this._listeners.push(b.on("scroll",function(){this.viewRepositionListener()},this));this._listeners.push(k.on("scroll",function(){this.viewRepositionListener()},this));this._listeners.push(this.view.element.on("mousedown",function(a){a.data.preventDefault()},null,null,9999));c&&(this.registerPanelNavigation(),this.addAriaAttributesToEditable());a.on("contentDom",function(){this.registerPanelNavigation();
|
||||
this.addAriaAttributesToEditable()},this)},registerPanelNavigation:function(){var a=this.editor.editable();this._listeners.push(a.attachListener(a,"keydown",function(a){this.onKeyDown(a)},this,null,5))},addAriaAttributesToEditable:function(){var a=this.editor.editable(),b=this.view.element.getAttribute("id");a.isInline()&&(a.setAttribute("aria-controls",b),a.setAttribute("aria-activedescendant",""),a.setAttribute("aria-autocomplete","list"),a.setAttribute("aria-expanded","false"))},updateAriaAttributesOnEditable:function(a){var b=
|
||||
this.editor.editable();a=a.data;b&&b.isInline()&&(b.setAttribute("aria-expanded",a?"true":"false"),a||b.setAttribute("aria-activedescendant",""))},updateAriaActiveDescendantAttributeOnEditable:function(a){var b=this.editor.editable();b.isInline()&&b.setAttribute("aria-activedescendant",a)},removeAriaAttributesFromEditable:function(){var a=this.editor.editable();a&&a.isInline()&&(a.removeAttributes(["aria-controls","aria-expanded","aria-activedescendant"]),a.setAttribute("aria-autocomplete","none"))},
|
||||
close:function(){this.model.setActive(!1);this.view.close()},commit:function(a){if(this.model.isActive){this.close();if(null==a&&(a=this.model.selectedItemId,null==a))return;a=this.model.getItemById(a);var b=this.editor;b.fire("saveSnapshot");b.getSelection().selectRanges([this.model.range]);b.insertHtml(this.getHtmlToInsert(a),"text");b.fire("saveSnapshot")}},destroy:function(){CKEDITOR.tools.array.forEach(this._listeners,function(a){a.removeListener()});this._listeners=[];this.view.element&&this.view.element.remove();
|
||||
this.removeAriaAttributesFromEditable()},getHtmlToInsert:function(a){a=h(a);return this.outputTemplate?this.outputTemplate.output(a):a.name},getModel:function(a){var b=this;return new f(function(c,k){return a.call(this,CKEDITOR.tools.extend({autocomplete:b},c),k)})},getTextWatcher:function(a){return new CKEDITOR.plugins.textWatcher(this.editor,a,this.throttle)},getView:function(){return new g(this.editor)},open:function(){this.model.hasData()&&(this.model.setActive(!0),this.view.open(),this.model.selectFirst(),
|
||||
this.view.updatePosition(this.model.range))},viewRepositionListener:function(){this.model.isActive&&this.view.updatePosition(this.model.range)},modelChangeListener:function(a){this.model.hasData()?(this.view.updateItems(a.data),this.open()):this.close()},onItemClick:function(a){this.commit(a.data)},onKeyDown:function(a){if(this.model.isActive){var b=a.data.getKey(),c=!1;27==b?(this.close(),this.textWatcher.unmatch(),c=!0):40==b?(this.model.selectNext(),c=!0):38==b?(this.model.selectPrevious(),c=!0):
|
||||
-1!=CKEDITOR.tools.indexOf(this.commitKeystrokes,b)&&(this.commit(),this.textWatcher.unmatch(),c=!0);c&&(a.cancel(),a.data.preventDefault(),this.textWatcher.consumeNext())}},onSelectedItemId:function(a){a=a.data;var b=this.view.getItemById(a);this.model.setItem(a);this.view.selectItem(a);this.updateAriaActiveDescendantAttributeOnEditable(b.getAttribute("id"))},onTextMatched:function(a){this.model.setActive(!1);this.model.setQuery(a.data.text,a.data.range)},onTextUnmatched:function(){this.model.query=
|
||||
null;this.model.lastRequestId=null;this.close()}};g.prototype={append:function(){this.document=CKEDITOR.document;this.element=this.createElement();this.document.getBody().append(this.element)},appendItems:function(a){this.element.setHtml("");this.element.append(a)},attach:function(){this.element.on("click",function(a){(a=a.data.getTarget().getAscendant(this.isItemElement,!0))&&this.fire("click-item",a.data("id"))},this);this.element.on("mouseover",function(a){a=a.data.getTarget();this.element.contains(a)&&
|
||||
(a=a.getAscendant(function(a){return a.hasAttribute("data-id")},!0))&&(a=a.data("id"),this.fire("change-selectedItemId",a))},this)},close:function(){this.element.removeClass("cke_autocomplete_opened")},createElement:function(){var a=new CKEDITOR.dom.element("ul",this.document),b=CKEDITOR.tools.getNextId();a.setAttribute("id",b);a.addClass("cke_autocomplete_panel");a.setStyle("z-index",this.editor.config.baseFloatZIndex-3);a.setAttribute("role","listbox");return a},createItem:function(a){a=h(a);a=
|
||||
CKEDITOR.dom.element.createFromHtml(this.itemTemplate.output(a),this.document);var b=CKEDITOR.tools.getNextId();a.setAttribute("id",b);a.setAttribute("role","option");return a},getViewPosition:function(a){a=a.getClientRects();a=a[a.length-1];var b;b=this.editor.editable();b=b.isInline()?CKEDITOR.document.getWindow().getScrollPosition():b.getParent().getDocumentPosition(CKEDITOR.document);var c=CKEDITOR.document.getBody();"static"===c.getComputedStyle("position")&&(c=c.getParent());c=c.getDocumentPosition();
|
||||
b.x-=c.x;b.y-=c.y;return{top:a.top+b.y,bottom:a.top+a.height+b.y,left:a.left+b.x}},getItemById:function(a){return this.element.findOne('li[data-id\x3d"'+a+'"]')},isItemElement:function(a){return a.type==CKEDITOR.NODE_ELEMENT&&Boolean(a.data("id"))},open:function(){this.element.addClass("cke_autocomplete_opened")},selectItem:function(a){null!=this.selectedItemId&&this.getItemById(this.selectedItemId).removeClass("cke_autocomplete_selected");var b=this.getItemById(a);b.addClass("cke_autocomplete_selected");
|
||||
this.selectedItemId=a;this.scrollElementTo(b)},setPosition:function(a){var b=this.element.getWindow(),c=b.getViewPaneSize(),b=function(a){var b=a.editorViewportRect,c=a.caretRect,e=a.viewHeight,d=a.scrollPositionY,g=a.windowHeight;if(b.bottom<c.bottom)return Math.min(c.top,b.bottom)-e;a=c.top-b.top;var f=b.bottom-c.bottom,h=c.top-e<d;if(e>f&&e<a&&!h)return c.top-e;if(b.top>c.top)return Math.max(c.bottom,b.top);d=c.bottom+e>g+d;return e>f&&e<a||!d?Math.min(b.bottom,c.bottom):c.top-e}({editorViewportRect:function(a){var b=
|
||||
a.editable();return CKEDITOR.env.iOS&&!b.isInline()?a.window.getFrame().getParent().getClientRect(!0):b.isInline()?b.getClientRect(!0):a.window.getFrame().getClientRect(!0)}(this.editor),caretRect:a,viewHeight:this.element.getSize("height"),scrollPositionY:b.getScrollPosition().y,windowHeight:c.height});a=function(a){var b=a.leftPosition,c=a.viewWidth;a=a.windowWidth;return b+c>a?a-c:b}({leftPosition:a.left,viewWidth:this.element.getSize("width"),windowWidth:c.width});this.element.setStyles({left:a+
|
||||
"px",top:b+"px"})},scrollElementTo:function(a){a.scrollIntoParent(this.element)},updateItems:function(a){var b,c=new CKEDITOR.dom.documentFragment(this.document);for(b=0;b<a.length;++b)c.append(this.createItem(a[b]));this.appendItems(c);this.selectedItemId=null},updatePosition:function(a){this.setPosition(this.getViewPosition(a))}};CKEDITOR.event.implementOn(g.prototype);f.prototype={getIndexById:function(a){if(!this.hasData())return-1;for(var b=this.data,c=0,d=b.length;c<d;c++)if(b[c].id==a)return c;
|
||||
return-1},getItemById:function(a){a=this.getIndexById(a);return~a&&this.data[a]||null},hasData:function(){return Boolean(this.data&&this.data.length)},setItem:function(a){if(0>this.getIndexById(a))throw Error("Item with given id does not exist");this.selectedItemId=a},select:function(a){this.fire("change-selectedItemId",a)},selectFirst:function(){this.hasData()&&this.select(this.data[0].id)},selectLast:function(){this.hasData()&&this.select(this.data[this.data.length-1].id)},selectNext:function(){if(null==
|
||||
this.selectedItemId)this.selectFirst();else{var a=this.getIndexById(this.selectedItemId);0>a||a+1==this.data.length?this.selectFirst():this.select(this.data[a+1].id)}},selectPrevious:function(){if(null==this.selectedItemId)this.selectLast();else{var a=this.getIndexById(this.selectedItemId);0>=a?this.selectLast():this.select(this.data[a-1].id)}},setActive:function(a){this.isActive=a;this.fire("change-isActive",a)},setQuery:function(a,b){var c=this,d=CKEDITOR.tools.getNextId();this.lastRequestId=d;
|
||||
this.query=a;this.range=b;this.selectedItemId=this.data=null;this.dataCallback({query:a,range:b},function(a){d==c.lastRequestId&&(c.data=c.itemsLimit?a.slice(0,c.itemsLimit):a,c.fire("change-data",c.data))})}};CKEDITOR.event.implementOn(f.prototype);CKEDITOR.plugins.autocomplete=d;d.view=g;d.model=f;CKEDITOR.config.autocomplete_commitKeystrokes=[9,13]})();(function(){function h(b,d){for(var a=b.length,c=0,e=0;e<a;e+=1){var g=b[e];if(d>=c&&c+g.getText().length>=d)return{element:g,offset:d-c};c+=g.getText().length}return null}function m(b,d){for(var a=0;a<b.length;a++)if(d(b[a]))return a;return-1}CKEDITOR.plugins.add("textmatch",{});CKEDITOR.plugins.textMatch={};CKEDITOR.plugins.textMatch.match=function(b,d){var a=CKEDITOR.plugins.textMatch.getTextAndOffset(b),c=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,e=0;if(a)return 0==a.text.indexOf(c)&&(e=c.length,
|
||||
(a=this.editor.getSelection())&&(a=a.getRanges()[0])&&this._buffer.input(a)},consumeNext:function(){this.ignoreNext=!0;return this},unmatch:function(){this.lastMatched=null;this.fire("unmatched");return this},destroy:function(){CKEDITOR.tools.array.forEach(this._listeners,function(a){a.removeListener()});this._listeners=[]}};CKEDITOR.event.implementOn(b.prototype);CKEDITOR.plugins.textWatcher=b})();(function(){function d(a,b){var c=a.config.autocomplete_commitKeystrokes||CKEDITOR.config.autocomplete_commitKeystrokes;this.editor=a;this.throttle=void 0!==b.throttle?b.throttle:20;this.followingSpace=b.followingSpace;this.view=this.getView();this.model=this.getModel(b.dataCallback);this.model.itemsLimit=b.itemsLimit;this.textWatcher=this.getTextWatcher(b.textTestCallback);this.commitKeystrokes=CKEDITOR.tools.array.isArray(c)?c.slice():[c];this._listeners=[];this.outputTemplate=void 0!==b.outputTemplate?
|
||||
new CKEDITOR.template(b.outputTemplate):null;b.itemTemplate&&(this.view.itemTemplate=new CKEDITOR.template(b.itemTemplate));if("ready"===this.editor.status)this.attach();else this.editor.on("instanceReady",function(){this.attach()},this);a.on("destroy",function(){this.destroy()},this)}function g(a){this.itemTemplate=new CKEDITOR.template('\x3cli data-id\x3d"{id}"\x3e{name}\x3c/li\x3e');this.editor=a}function f(a){this.dataCallback=a;this.isActive=!1;this.itemsLimit=0}function h(a){return CKEDITOR.tools.array.reduce(CKEDITOR.tools.object.keys(a),
|
||||
function(b,c){b[c]=CKEDITOR.tools.htmlEncode(a[c]);return b},{})}function l(a){var b=a.getSelection().getRanges()[0].getNextNode(function(a){return Boolean(a.type==CKEDITOR.NODE_TEXT&&a.getText())});b&&b.getText().match(/^\s+/)&&(a=a.createRange(),a.setStart(b,0),a.setEnd(b,1),a.deleteContents())}CKEDITOR.plugins.add("autocomplete",{requires:"textwatcher",onLoad:function(){CKEDITOR.document.appendStyleSheet(this.path+"skins/default.css")},isSupportedEnvironment:function(){return!CKEDITOR.env.ie||
|
||||
8<CKEDITOR.env.version}});d.prototype={attach:function(){var a=this.editor,b=CKEDITOR.document.getWindow(),c=a.editable(),k=c.isInline()?c:c.getDocument();CKEDITOR.env.iOS&&!c.isInline()&&(k=a.window.getFrame().getParent());this.view.append();this.view.attach();this.textWatcher.attach();this._listeners.push(this.textWatcher.on("matched",this.onTextMatched,this));this._listeners.push(this.textWatcher.on("unmatched",this.onTextUnmatched,this));this._listeners.push(this.model.on("change-data",this.modelChangeListener,
|
||||
this));this._listeners.push(this.model.on("change-selectedItemId",this.onSelectedItemId,this));this._listeners.push(this.view.on("change-selectedItemId",this.onSelectedItemId,this));this._listeners.push(this.view.on("click-item",this.onItemClick,this));this._listeners.push(this.model.on("change-isActive",this.updateAriaAttributesOnEditable,this));this._listeners.push(b.on("scroll",function(){this.viewRepositionListener()},this));this._listeners.push(k.on("scroll",function(){this.viewRepositionListener()},
|
||||
this));this._listeners.push(this.view.element.on("mousedown",function(a){a.data.preventDefault()},null,null,9999));c&&(this.registerPanelNavigation(),this.addAriaAttributesToEditable());a.on("contentDom",function(){this.registerPanelNavigation();this.addAriaAttributesToEditable()},this)},registerPanelNavigation:function(){var a=this.editor.editable();this._listeners.push(a.attachListener(a,"keydown",function(a){this.onKeyDown(a)},this,null,5))},addAriaAttributesToEditable:function(){var a=this.editor.editable(),
|
||||
b=this.view.element.getAttribute("id");a.isInline()&&(a.setAttribute("aria-controls",b),a.setAttribute("aria-activedescendant",""),a.setAttribute("aria-autocomplete","list"),a.setAttribute("aria-expanded","false"))},updateAriaAttributesOnEditable:function(a){var b=this.editor.editable();a=a.data;b&&b.isInline()&&(b.setAttribute("aria-expanded",a?"true":"false"),a||b.setAttribute("aria-activedescendant",""))},updateAriaActiveDescendantAttributeOnEditable:function(a){var b=this.editor.editable();b.isInline()&&
|
||||
b.setAttribute("aria-activedescendant",a)},removeAriaAttributesFromEditable:function(){var a=this.editor.editable();a&&a.isInline()&&(a.removeAttributes(["aria-controls","aria-expanded","aria-activedescendant"]),a.setAttribute("aria-autocomplete","none"))},close:function(){this.model.setActive(!1);this.view.close()},commit:function(a){if(this.model.isActive){this.close();if(null==a&&(a=this.model.selectedItemId,null==a))return;var b=this.model.getItemById(a);a=this.editor;b=this.getHtmlToInsert(b);
|
||||
b+=this.followingSpace?"\x26nbsp;":"";a.fire("saveSnapshot");a.getSelection().selectRanges([this.model.range]);a.insertHtml(b,"text");this.followingSpace&&l(a);a.fire("saveSnapshot")}},destroy:function(){CKEDITOR.tools.array.forEach(this._listeners,function(a){a.removeListener()});this._listeners=[];this.view.element&&this.view.element.remove();this.removeAriaAttributesFromEditable()},getHtmlToInsert:function(a){a=h(a);return this.outputTemplate?this.outputTemplate.output(a):a.name},getModel:function(a){var b=
|
||||
this;return new f(function(c,k){return a.call(this,CKEDITOR.tools.extend({autocomplete:b},c),k)})},getTextWatcher:function(a){return new CKEDITOR.plugins.textWatcher(this.editor,a,this.throttle)},getView:function(){return new g(this.editor)},open:function(){this.model.hasData()&&(this.model.setActive(!0),this.view.open(),this.model.selectFirst(),this.view.updatePosition(this.model.range))},viewRepositionListener:function(){this.model.isActive&&this.view.updatePosition(this.model.range)},modelChangeListener:function(a){this.model.hasData()?
|
||||
(this.view.updateItems(a.data),this.open()):this.close()},onItemClick:function(a){this.commit(a.data)},onKeyDown:function(a){if(this.model.isActive){var b=a.data.getKey(),c=!1;27==b?(this.close(),this.textWatcher.unmatch(),c=!0):40==b?(this.model.selectNext(),c=!0):38==b?(this.model.selectPrevious(),c=!0):-1!=CKEDITOR.tools.indexOf(this.commitKeystrokes,b)&&(this.commit(),this.textWatcher.unmatch(),c=!0);c&&(a.cancel(),a.data.preventDefault(),this.textWatcher.consumeNext())}},onSelectedItemId:function(a){a=
|
||||
a.data;var b=this.view.getItemById(a);this.model.setItem(a);this.view.selectItem(a);this.updateAriaActiveDescendantAttributeOnEditable(b.getAttribute("id"))},onTextMatched:function(a){this.model.setActive(!1);this.model.setQuery(a.data.text,a.data.range)},onTextUnmatched:function(){this.model.query=null;this.model.lastRequestId=null;this.close()}};g.prototype={append:function(){this.document=CKEDITOR.document;this.element=this.createElement();this.document.getBody().append(this.element)},appendItems:function(a){this.element.setHtml("");
|
||||
this.element.append(a)},attach:function(){this.element.on("click",function(a){(a=a.data.getTarget().getAscendant(this.isItemElement,!0))&&this.fire("click-item",a.data("id"))},this);this.element.on("mouseover",function(a){a=a.data.getTarget();this.element.contains(a)&&(a=a.getAscendant(function(a){return a.hasAttribute("data-id")},!0))&&(a=a.data("id"),this.fire("change-selectedItemId",a))},this)},close:function(){this.element.removeClass("cke_autocomplete_opened")},createElement:function(){var a=
|
||||
new CKEDITOR.dom.element("ul",this.document),b=CKEDITOR.tools.getNextId();a.setAttribute("id",b);a.addClass("cke_autocomplete_panel");a.setStyle("z-index",this.editor.config.baseFloatZIndex-3);a.setAttribute("role","listbox");return a},createItem:function(a){a=h(a);a=CKEDITOR.dom.element.createFromHtml(this.itemTemplate.output(a),this.document);var b=CKEDITOR.tools.getNextId();a.setAttribute("id",b);a.setAttribute("role","option");return a},getViewPosition:function(a){a=a.getClientRects();a=a[a.length-
|
||||
1];var b;b=this.editor.editable();b=b.isInline()?CKEDITOR.document.getWindow().getScrollPosition():b.getParent().getDocumentPosition(CKEDITOR.document);var c=CKEDITOR.document.getBody();"static"===c.getComputedStyle("position")&&(c=c.getParent());c=c.getDocumentPosition();b.x-=c.x;b.y-=c.y;return{top:a.top+b.y,bottom:a.top+a.height+b.y,left:a.left+b.x}},getItemById:function(a){return this.element.findOne('li[data-id\x3d"'+a+'"]')},isItemElement:function(a){return a.type==CKEDITOR.NODE_ELEMENT&&Boolean(a.data("id"))},
|
||||
open:function(){this.element.addClass("cke_autocomplete_opened")},selectItem:function(a){null!=this.selectedItemId&&this.getItemById(this.selectedItemId).removeClass("cke_autocomplete_selected");var b=this.getItemById(a);b.addClass("cke_autocomplete_selected");this.selectedItemId=a;this.scrollElementTo(b)},setPosition:function(a){var b=this.element.getWindow(),c=b.getViewPaneSize(),b=function(a){var b=a.editorViewportRect,c=a.caretRect,e=a.viewHeight,d=a.scrollPositionY,g=a.windowHeight;if(b.bottom<
|
||||
c.bottom)return Math.min(c.top,b.bottom)-e;a=c.top-b.top;var f=b.bottom-c.bottom,h=c.top-e<d;if(e>f&&e<a&&!h)return c.top-e;if(b.top>c.top)return Math.max(c.bottom,b.top);d=c.bottom+e>g+d;return e>f&&e<a||!d?Math.min(b.bottom,c.bottom):c.top-e}({editorViewportRect:function(a){var b=a.editable();return CKEDITOR.env.iOS&&!b.isInline()?a.window.getFrame().getParent().getClientRect(!0):b.isInline()?b.getClientRect(!0):a.window.getFrame().getClientRect(!0)}(this.editor),caretRect:a,viewHeight:this.element.getSize("height"),
|
||||
scrollPositionY:b.getScrollPosition().y,windowHeight:c.height});a=function(a){var b=a.leftPosition,c=a.viewWidth;a=a.windowWidth;return b+c>a?a-c:b}({leftPosition:a.left,viewWidth:this.element.getSize("width"),windowWidth:c.width});this.element.setStyles({left:a+"px",top:b+"px"})},scrollElementTo:function(a){a.scrollIntoParent(this.element)},updateItems:function(a){var b,c=new CKEDITOR.dom.documentFragment(this.document);for(b=0;b<a.length;++b)c.append(this.createItem(a[b]));this.appendItems(c);this.selectedItemId=
|
||||
null},updatePosition:function(a){this.setPosition(this.getViewPosition(a))}};CKEDITOR.event.implementOn(g.prototype);f.prototype={getIndexById:function(a){if(!this.hasData())return-1;for(var b=this.data,c=0,d=b.length;c<d;c++)if(b[c].id==a)return c;return-1},getItemById:function(a){a=this.getIndexById(a);return~a&&this.data[a]||null},hasData:function(){return Boolean(this.data&&this.data.length)},setItem:function(a){if(0>this.getIndexById(a))throw Error("Item with given id does not exist");this.selectedItemId=
|
||||
a},select:function(a){this.fire("change-selectedItemId",a)},selectFirst:function(){this.hasData()&&this.select(this.data[0].id)},selectLast:function(){this.hasData()&&this.select(this.data[this.data.length-1].id)},selectNext:function(){if(null==this.selectedItemId)this.selectFirst();else{var a=this.getIndexById(this.selectedItemId);0>a||a+1==this.data.length?this.selectFirst():this.select(this.data[a+1].id)}},selectPrevious:function(){if(null==this.selectedItemId)this.selectLast();else{var a=this.getIndexById(this.selectedItemId);
|
||||
0>=a?this.selectLast():this.select(this.data[a-1].id)}},setActive:function(a){this.isActive=a;this.fire("change-isActive",a)},setQuery:function(a,b){var c=this,d=CKEDITOR.tools.getNextId();this.lastRequestId=d;this.query=a;this.range=b;this.selectedItemId=this.data=null;this.dataCallback({query:a,range:b},function(a){d==c.lastRequestId&&(c.data=c.itemsLimit?a.slice(0,c.itemsLimit):a,c.fire("change-data",c.data))})}};CKEDITOR.event.implementOn(f.prototype);CKEDITOR.plugins.autocomplete=d;d.view=g;
|
||||
d.model=f;CKEDITOR.config.autocomplete_commitKeystrokes=[9,13]})();(function(){function h(b,d){for(var a=b.length,c=0,e=0;e<a;e+=1){var g=b[e];if(d>=c&&c+g.getText().length>=d)return{element:g,offset:d-c};c+=g.getText().length}return null}function m(b,d){for(var a=0;a<b.length;a++)if(d(b[a]))return a;return-1}CKEDITOR.plugins.add("textmatch",{});CKEDITOR.plugins.textMatch={};CKEDITOR.plugins.textMatch.match=function(b,d){var a=CKEDITOR.plugins.textMatch.getTextAndOffset(b),c=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,e=0;if(a)return 0==a.text.indexOf(c)&&(e=c.length,
|
||||
a.text=a.text.replace(c,""),a.offset-=e),(c=d(a.text,a.offset))?{range:CKEDITOR.plugins.textMatch.getRangeInText(b,c.start,c.end+e),text:a.text.slice(c.start,c.end)}:null};CKEDITOR.plugins.textMatch.getTextAndOffset=function(b){if(!b.collapsed)return null;var d="",a=0,c=CKEDITOR.plugins.textMatch.getAdjacentTextNodes(b),e=!1,g,h=b.startContainer.type!=CKEDITOR.NODE_ELEMENT;g=h?m(c,function(a){return b.startContainer.equals(a)}):b.startOffset-(c[0]?c[0].getIndex():0);for(var k=c.length,f=0;f<k;f+=
|
||||
1){var l=c[f],d=d+l.getText();e||(h?f==g?(e=!0,a+=b.startOffset):a+=l.getText().length:(f==g&&(e=!0),0<f&&(a+=c[f-1].getText().length),k==g&&f+1==k&&(a+=l.getText().length)))}return{text:d,offset:a}};CKEDITOR.plugins.textMatch.getRangeInText=function(b,d,a){var c=new CKEDITOR.dom.range(b.root);b=CKEDITOR.plugins.textMatch.getAdjacentTextNodes(b);d=h(b,d);a=h(b,a);c.setStart(d.element,d.offset);c.setEnd(a.element,a.offset);return c};CKEDITOR.plugins.textMatch.getAdjacentTextNodes=function(b){if(!b.collapsed)return[];
|
||||
var d=[],a,c,e;b.startContainer.type!=CKEDITOR.NODE_ELEMENT?(a=b.startContainer.getParent().getChildren(),b=b.startContainer.getIndex()):(a=b.startContainer.getChildren(),b=b.startOffset);for(e=b;c=a.getItem(--e);)if(c.type==CKEDITOR.NODE_TEXT)d.unshift(c);else break;for(e=b;c=a.getItem(e++);)if(c.type==CKEDITOR.NODE_TEXT)d.push(c);else break;return d}})();(function(){CKEDITOR.plugins.add("xml",{});CKEDITOR.xml=function(c){var a=null;if("object"==typeof c)a=c;else if(c=(c||"").replace(/ /g," "),"ActiveXObject"in window){try{a=new ActiveXObject("MSXML2.DOMDocument")}catch(b){try{a=new ActiveXObject("Microsoft.XmlDom")}catch(d){}}a&&(a.async=!1,a.resolveExternals=!1,a.validateOnParse=!1,a.loadXML(c))}else window.DOMParser&&(a=(new DOMParser).parseFromString(c,"text/xml"));this.baseXml=a};CKEDITOR.xml.prototype={selectSingleNode:function(c,a){var b=
|
||||
@@ -920,8 +921,9 @@ a.getName()&&a.hasAttribute("data-cke-emoji-name")&&(this.elements.statusIcon.se
|
||||
this.blockElement.findOne('a[data-cke-emoji-group\x3d"'+e(a)+'"]');var d;a&&(d=this.getItemIndex(this.items,a),a.focus(!0),a.getAscendant("section").getFirst().scrollIntoView(!0),this.blockObject._.markItem(d))},getItemIndex:function(a,d){return f.indexOf(a.toArray(),function(a){return a.equals(d)})},loadSVGNavigationIcons:function(){if(this.editor.plugins.emoji.isSVGSupported()){var a=this.blockElement.getDocument();CKEDITOR.ajax.load(CKEDITOR.getUrl(this.plugin.path+"assets/iconsall.svg"),function(d){var c=
|
||||
new CKEDITOR.dom.element("div");c.addClass("cke_emoji-navigation_icons");c.setHtml(d);a.getBody().append(c)})}},addEmojiToGroups:function(){var a={};f.forEach(this.groups,function(d){a[d.name]=d.items},this);f.forEach(this.emojiList,function(d){a[d.group].push(d)},this)}}});CKEDITOR.plugins.add("emoji",{requires:"autocomplete,textmatch,ajax,panelbutton,floatpanel",icons:"emojipanel",hidpi:!0,isSupportedEnvironment:function(){return!CKEDITOR.env.ie||11<=CKEDITOR.env.version},beforeInit:function(){this.isSupportedEnvironment()&&
|
||||
!g&&(CKEDITOR.document.appendStyleSheet(this.path+"skins/default.css"),g=!0)},init:function(a){if(this.isSupportedEnvironment()){var d=CKEDITOR.tools.array;CKEDITOR.ajax.load(CKEDITOR.getUrl(a.config.emoji_emojiListUrl||"plugins/emoji/emoji.json"),function(c){function b(){a._.emoji.autocomplete=new CKEDITOR.plugins.autocomplete(a,{textTestCallback:e(),dataCallback:g,itemTemplate:'\x3cli data-id\x3d"{id}" class\x3d"cke_emoji-suggestion_item"\x3e\x3cspan\x3e{symbol}\x3c/span\x3e {name}\x3c/li\x3e',
|
||||
outputTemplate:"{symbol}"})}function e(){return function(a){return a.collapsed?CKEDITOR.plugins.textMatch.match(a,f):null}}function f(a,b){var c=a.slice(0,b),d=c.match(new RegExp("(?:\\s|^)(:\\S{"+l+"}\\S*)$"));return d?{start:c.lastIndexOf(d[1]),end:b}:null}function g(a,b){var c=a.query.substr(1).toLowerCase(),e=d.filter(h,function(a){return-1!==a.id.toLowerCase().indexOf(c)}).sort(function(a,b){var d=!a.id.substr(1).indexOf(c),e=!b.id.substr(1).indexOf(c);return d!=e?d?-1:1:a.id>b.id?1:-1}),e=d.map(e,
|
||||
k);b(e)}if(null!==c){void 0===a._.emoji&&(a._.emoji={});void 0===a._.emoji.list&&(a._.emoji.list=JSON.parse(c));var h=a._.emoji.list,l=void 0===a.config.emoji_minChars?2:a.config.emoji_minChars;if("ready"!==a.status)a.once("instanceReady",b);else b()}});a.addCommand("insertEmoji",{exec:function(a,b){a.insertHtml(b.emojiText)}});a.plugins.toolbar&&new h(a,this)}},isSVGSupported:function(){return!CKEDITOR.env.ie||CKEDITOR.env.edge}})})();(function(){function x(a,e,b){b=a.config.forceEnterMode||b;if("wysiwyg"==a.mode){e||(e=a.activeEnterMode);var l=a.elementPath();l&&!l.isContextFor("p")&&(e=CKEDITOR.ENTER_BR,b=1);a.fire("saveSnapshot");e==CKEDITOR.ENTER_BR?u(a,e,null,b):r(a,e,null,b);a.fire("saveSnapshot")}}function y(a){a=a.getSelection().getRanges(!0);for(var e=a.length-1;0<e;e--)a[e].deleteContents();return a[0]}function z(a){var e=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},
|
||||
outputTemplate:"{symbol}",followingSpace:a.config.emoji_followingSpace})}function e(){return function(a){return a.collapsed?CKEDITOR.plugins.textMatch.match(a,f):null}}function f(a,b){var c=a.slice(0,b),d=c.match(new RegExp("(?:\\s|^)(:\\S{"+l+"}\\S*)$"));return d?{start:c.lastIndexOf(d[1]),end:b}:null}function g(a,b){var c=a.query.substr(1).toLowerCase(),e=d.filter(h,function(a){return-1!==a.id.toLowerCase().indexOf(c)}).sort(function(a,b){var d=!a.id.substr(1).indexOf(c),e=!b.id.substr(1).indexOf(c);
|
||||
return d!=e?d?-1:1:a.id>b.id?1:-1}),e=d.map(e,k);b(e)}if(null!==c){void 0===a._.emoji&&(a._.emoji={});void 0===a._.emoji.list&&(a._.emoji.list=JSON.parse(c));var h=a._.emoji.list,l=void 0===a.config.emoji_minChars?2:a.config.emoji_minChars;if("ready"!==a.status)a.once("instanceReady",b);else b()}});a.addCommand("insertEmoji",{exec:function(a,b){a.insertHtml(b.emojiText)}});a.plugins.toolbar&&new h(a,this)}},isSVGSupported:function(){return!CKEDITOR.env.ie||CKEDITOR.env.edge}})})();
|
||||
CKEDITOR.config.emoji_followingSpace=!1;(function(){function x(a,e,b){b=a.config.forceEnterMode||b;if("wysiwyg"==a.mode){e||(e=a.activeEnterMode);var l=a.elementPath();l&&!l.isContextFor("p")&&(e=CKEDITOR.ENTER_BR,b=1);a.fire("saveSnapshot");e==CKEDITOR.ENTER_BR?u(a,e,null,b):r(a,e,null,b);a.fire("saveSnapshot")}}function y(a){a=a.getSelection().getRanges(!0);for(var e=a.length-1;0<e;e--)a[e].deleteContents();return a[0]}function z(a){var e=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},
|
||||
!0);if(a.root.equals(e))return a;e=new CKEDITOR.dom.range(e);e.moveToRange(a);return e}CKEDITOR.plugins.add("enterkey",{init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){x(a)}});a.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){x(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var A=CKEDITOR.dom.walker.whitespaces(),B=CKEDITOR.dom.walker.bookmark(),v,u,r,w;CKEDITOR.plugins.enterkey=
|
||||
{enterBlock:function(a,e,b,l){function n(a){var b;if(a===CKEDITOR.ENTER_BR||-1===CKEDITOR.tools.indexOf(["td","th"],p.lastElement.getName())||1!==p.lastElement.getChildCount())return!1;a=p.lastElement.getChild(0).clone(!0);(b=a.getBogus())&&b.remove();return a.getText().length?!1:!0}if(b=b||y(a)){b=z(b);var g=b.document,f=b.checkStartOfBlock(),k=b.checkEndOfBlock(),p=a.elementPath(b.startContainer),c=p.block,m=e==CKEDITOR.ENTER_DIV?"div":"p",d;if(c&&f&&k){f=c.getParent();if(f.is("li")&&1<f.getChildCount()){g=
|
||||
new CKEDITOR.dom.element("li");d=a.createRange();g.insertAfter(f);c.remove();d.setStart(g,0);a.getSelection().selectRanges([d]);return}if(c.is("li")||c.getParent().is("li")){c.is("li")||(c=c.getParent(),f=c.getParent());d=f.getParent();b=!c.hasPrevious();var h=!c.hasNext();l=a.getSelection();var m=l.createBookmarks(),t=c.getDirection(1),k=c.getAttribute("class"),q=c.getAttribute("style"),r=d.getDirection(1)!=t;a=a.enterMode!=CKEDITOR.ENTER_BR||r||q||k;if(d.is("li"))b||h?(b&&h&&f.remove(),c[h?"insertAfter":
|
||||
@@ -932,10 +934,10 @@ CKEDITOR.dtd.$removeEmpty[m.getName()]&&(m=m.clone(),d.moveChildren(m),d.append(
|
||||
CKEDITOR.dtd.$empty))},(h=d.next())&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?g.createElement("br"):g.createText(" ")).insertBefore(h)),c&&b.moveToElementEditStart(c);b.select();b.scrollIntoView()}}},enterBr:function(a,e,b,l){if(b=b||y(a)){var n=b.document,g=b.checkEndOfBlock(),f=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),k=f.block,p=k&&f.block.getName();l||"li"!=p?(!l&&g&&w.test(p)?(g=k.getDirection())?(n=n.createElement("div"),n.setAttribute("dir",
|
||||
g),n.insertAfter(k),b.setStart(n,0)):(n.createElement("br").insertAfter(k),CKEDITOR.env.gecko&&n.createText("").insertAfter(k),b.setStartAt(k.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==p&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?n.createText("\r"):n.createElement("br"),b.deleteContents(),b.insertNode(a),CKEDITOR.env.needsBrFiller?(n.createText("").insertAfter(a),g&&(k||f.blockLimit).appendBogus(),a.getNext().$.nodeValue="",b.setStartAt(a.getNext(),
|
||||
CKEDITOR.POSITION_AFTER_START)):b.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),b.collapse(!0),b.select(),b.scrollIntoView()):r(a,e,b,l)}}};v=CKEDITOR.plugins.enterkey;u=v.enterBr;r=v.enterBlock;w=/^h[1-6]$/})();(function(){function k(a,f){var g={},c=[],e={nbsp:" ",shy:"",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,b){var d=f?"\x26"+b+";":e[b];g[d]=f?e[b]:"\x26"+b+";";c.push(d);return""});a=a.replace(/,$/,"");if(!f&&a){a=a.split(",");var b=document.createElement("div"),d;b.innerHTML="\x26"+a.join(";\x26")+";";d=b.innerHTML;b=null;for(b=0;b<d.length;b++){var h=d.charAt(b);g[h]="\x26"+a[b]+";";c.push(h)}}g.regex=c.join(f?"|":"");return g}
|
||||
CKEDITOR.plugins.add("entities",{afterInit:function(a){function f(b){return h[b]}function g(a){return"force"!=c.entities_processNumerical&&b[a]?b[a]:"\x26#"+a.charCodeAt(0)+";"}var c=a.config;if(a=(a=a.dataProcessor)&&a.htmlFilter){var e=[];!1!==c.basicEntities&&e.push("nbsp,gt,lt,amp");c.entities&&(e.length&&e.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"),
|
||||
CKEDITOR.plugins.add("entities",{afterInit:function(a){function f(b){return h[b]}function g(a){return"force"!=c.entities_processNumerical&&b[a]?b[a]:"\x26#"+(CKEDITOR.env.ie?a.charCodeAt(0):a.codePointAt(0))+";"}var c=a.config;if(a=(a=a.dataProcessor)&&a.htmlFilter){var e=[];!1!==c.basicEntities&&e.push("nbsp,gt,lt,amp");c.entities&&(e.length&&e.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"),
|
||||
c.entities_latin&&e.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),c.entities_greek&&e.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"),
|
||||
c.entities_additional&&e.push(c.entities_additional));var b=k(e.join(",")),d=b.regex?"["+b.regex+"]":"a^";delete b.regex;c.entities&&c.entities_processNumerical&&(d="[^ -~]|"+d);var d=new RegExp(d,"g"),h=k("nbsp,gt,lt,amp,shy",!0),l=new RegExp(h.regex,"g");a.addRules({text:function(a){return a.replace(l,f).replace(d,g)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0;
|
||||
CKEDITOR.config.entities_additional="#39";(function(){function f(b,a){var c=k.exec(b),d=k.exec(a);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return a}function m(b){return{elements:{$:function(a){var c=a.attributes,c=c&&c["data-cke-realelement"],d=l(b,decodeURIComponent(c));if((c=(c=c&&new CKEDITOR.htmlParser.fragment.fromHtml(d))&&c.children[0])&&a.attributes["data-cke-resizable"]){var e=(new h(a)).rules;a=c.attributes;d=e.width;e=e.height;d&&(a.width=f(a.width,d));e&&(a.height=f(a.height,e))}return c}}}}
|
||||
c.entities_additional&&e.push(c.entities_additional));var b=k(e.join(",")),d=b.regex?"["+b.regex+"]":"a^";delete b.regex;c.entities&&c.entities_processNumerical&&(d="[^ -~]|"+d);var d=new RegExp(d,CKEDITOR.env.ie?"g":"gu"),h=k("nbsp,gt,lt,amp,shy",!0),l=new RegExp(h.regex,"g");a.addRules({text:function(a){return a.replace(l,f).replace(d,g)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;
|
||||
CKEDITOR.config.entities_greek=!0;CKEDITOR.config.entities_additional="#39";(function(){function f(b,a){var c=k.exec(b),d=k.exec(a);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return a}function m(b){return{elements:{$:function(a){var c=a.attributes,c=c&&c["data-cke-realelement"],d=l(b,decodeURIComponent(c));if((c=(c=c&&new CKEDITOR.htmlParser.fragment.fromHtml(d))&&c.children[0])&&a.attributes["data-cke-resizable"]){var e=(new h(a)).rules;a=c.attributes;d=e.width;e=e.height;d&&(a.width=f(a.width,d));e&&(a.height=f(a.height,e))}return c}}}}
|
||||
function l(b,a){var c=[],d=/^cke:/i,e=new CKEDITOR.htmlParser.filter({elements:{"^":function(a){d.test(a.name)&&(a.name=a.name.replace(d,""),c.push(a))},iframe:function(a){a.children=[]}}}),n=b.activeFilter,f=new CKEDITOR.htmlParser.basicWriter,g=CKEDITOR.htmlParser.fragment.fromHtml(a);e.applyTo(g);n.applyTo(g);CKEDITOR.tools.array.forEach(c,function(a){a.name="cke:"+a.name});g.writeHtml(f);return f.getHtml()}var h=CKEDITOR.htmlParser.cssStyle,g=CKEDITOR.tools.cssLength,k=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i;
|
||||
CKEDITOR.plugins.add("fakeobjects",{init:function(b){b.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")},afterInit:function(b){var a=b.dataProcessor;(a=a&&a.htmlFilter)&&a.addRules(m(b),{applyToAll:!0})}});CKEDITOR.editor.prototype.createFakeElement=function(b,a,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown;a={"class":a,"data-cke-realelement":encodeURIComponent(b.getOuterHtml()),"data-cke-real-node-type":b.type,alt:e,title:e,align:b.getAttribute("align")||""};CKEDITOR.env.hc||
|
||||
(a.src=CKEDITOR.tools.transparentImageData);c&&(a["data-cke-real-element-type"]=c);d&&(a["data-cke-resizable"]=d,c=new h,d=b.getAttribute("width"),b=b.getAttribute("height"),d&&(c.rules.width=g(d)),b&&(c.rules.height=g(b)),c.populate(a));return this.document.createElement("img",{attributes:a})};CKEDITOR.editor.prototype.createFakeParserElement=function(b,a,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter;b.writeHtml(f);f=f.getHtml();a={"class":a,"data-cke-realelement":encodeURIComponent(f),
|
||||
@@ -1149,15 +1151,17 @@ order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:"tablec
|
||||
tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:c.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:c.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:c.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:c.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,
|
||||
tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:c.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:c.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:c.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});d.contextMenu&&d.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,
|
||||
tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getCellColIndex:v,insertRow:r,insertColumn:u,getSelectedCells:q};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();
|
||||
CKEDITOR.tools.buildTableMap=function(q,r,B,v,w){q=q.$.rows;B=B||0;v="number"===typeof v?v:q.length-1;w="number"===typeof w?w:-1;var u=-1,y=[];for(r=r||0;r<=v;r++){u++;!y[u]&&(y[u]=[]);for(var t=-1,z=B;z<=(-1===w?q[r].cells.length-1:w);z++){var p=q[r].cells[z];if(!p)break;for(t++;y[u][t];)t++;for(var A=isNaN(p.colSpan)?1:p.colSpan,p=isNaN(p.rowSpan)?1:p.rowSpan,x=0;x<p&&!(r+x>v);x++){y[u+x]||(y[u+x]=[]);for(var C=0;C<A;C++)y[u+x][t+C]=q[r].cells[z]}t+=A-1;if(-1!==w&&t>=w)break}}return y};(function(){function z(b){return CKEDITOR.env.ie?b.$.clientWidth:parseInt(b.getComputedStyle("width"),10)}function t(b,c){var a=b.getComputedStyle("border-"+c+"-width"),l={thin:"0px",medium:"1px",thick:"2px"};0>a.indexOf("px")&&(a=a in l&&"none"!=b.getComputedStyle("border-style")?l[a]:0);return parseFloat(a)}function C(b){var c=[],a={},l="rtl"===b.getComputedStyle("direction"),e=CKEDITOR.tools.array.zip((new CKEDITOR.dom.nodeList(b.$.rows)).toArray(),CKEDITOR.tools.buildTableMap(b));CKEDITOR.tools.array.forEach(e,
|
||||
function(h){var f=h[0].$;h=h[1];var g=-1,d=0,e=null;f?(d=new CKEDITOR.dom.element(f),e={height:d.$.offsetHeight,position:d.getDocumentPosition()}):e=void 0;for(var f=CKEDITOR.env.ie&&!CKEDITOR.env.edge,n="collapse"===b.getComputedStyle("border-collapse"),d=e.height,e=e.position,m=0;m<h.length;m++){var k=new CKEDITOR.dom.element(h[m]),u=h[m+1]&&new CKEDITOR.dom.element(h[m+1]),p,v,q=k.getDocumentPosition().x,g=g+(k.$.colSpan||1);l?v=q+t(k,"left"):p=q+k.$.offsetWidth-t(k,"right");u?(q=u.getDocumentPosition().x,
|
||||
l?p=q+u.$.offsetWidth-t(u,"right"):v=q+t(u,"left")):(q=b.getDocumentPosition().x,l?p=q:v=q+b.$.offsetWidth);k=Math.max(v-p,3);f&&n&&(p-=k,k=Math.max(v-p,3));k={table:b,index:g,x:p,y:e.y,width:k,height:d,rtl:l};a[g]=a[g]||[];a[g].push(k);k.alignedPillars=a[g];c.push(k)}});return c}function B(b){(b.data||b).preventDefault()}function E(b){function c(){y=0;d.setOpacity(0);m&&a();var b=f.table;setTimeout(function(){b.removeCustomData("_cke_table_pillars")},0);g.removeListener("dragstart",B)}function a(){for(var d=
|
||||
f.rtl,l=d?p.length:u.length,a=0,e=0;e<l;e++){var g=u[e],h=p[e],c=f.table;CKEDITOR.tools.setTimeout(function(f,e,g,h,k,m){f&&f.setStyle("width",n(Math.max(e+m,1)));g&&g.setStyle("width",n(Math.max(h-m,1)));k&&c.setStyle("width",n(k+m*(d?-1:1)));++a==l&&b.fire("saveSnapshot")},0,this,[g,g&&z(g),h,h&&z(h),(!g||!h)&&z(c)+t(c,"left")+t(c,"right"),m])}}function l(l){B(l);b.fire("saveSnapshot");l=f.index;for(var a=CKEDITOR.tools.buildTableMap(f.table),c=[],k=[],n=Number.MAX_VALUE,t=n,x=f.rtl,D=0,C=a.length;D<
|
||||
C;D++){var r=a[D],w=r[l+(x?1:0)],r=r[l+(x?0:1)],w=w&&new CKEDITOR.dom.element(w),r=r&&new CKEDITOR.dom.element(r);w&&r&&w.equals(r)||(w&&(n=Math.min(n,z(w))),r&&(t=Math.min(t,z(r))),c.push(w),k.push(r))}u=c;p=k;v=f.x-n;q=f.x+t;d.setOpacity(.5);A=parseInt(d.getStyle("left"),10);m=0;y=1;d.on("mousemove",h);g.on("dragstart",B);g.on("mouseup",e,this)}function e(b){b.removeListener();c()}function h(b){k(b.data.getPageOffset().x)}var f,g,d,y,A,m,k,u,p,v,q;g=b.document;d=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10000"\x3e\x3c/div\x3e',
|
||||
g);b.on("destroy",function(){d.remove()});x||g.getDocumentElement().append(d);this.attachTo=function(b){var a,e,c;y||(x&&(g.getBody().append(d),m=0),f=b,a=f.alignedPillars[0],e=f.alignedPillars[f.alignedPillars.length-1],c=a.y,a=e.height+e.y-a.y,d.setStyles({width:n(b.width),height:n(a),left:n(b.x),top:n(c)}),x&&d.setOpacity(.25),d.on("mousedown",l,this),g.getBody().setStyle("cursor","col-resize"),d.show())};k=this.move=function(b,a){if(!f)return 0;if(!(y||b>=f.x&&b<=f.x+f.width&&a>=f.y&&a<=f.y+f.height))return f=
|
||||
null,y=m=0,g.removeListener("mouseup",e),d.removeListener("mousedown",l),d.removeListener("mousemove",h),g.getBody().setStyle("cursor","auto"),x?d.remove():d.hide(),0;var c=b-Math.round(d.$.offsetWidth/2);if(y){if(c==v||c==q)return 1;c=Math.max(c,v);c=Math.min(c,q);m=c-A}d.setStyle("left",n(c));return 1}}function A(b){var c=b.data.getTarget();if("mouseout"==b.name){if(!c.is("table"))return;for(var a=new CKEDITOR.dom.element(b.data.$.relatedTarget||b.data.$.toElement);a&&a.$&&!a.equals(c)&&!a.is("body");)a=
|
||||
a.getParent();if(!a||a.equals(c))return}c.getAscendant("table",1).removeCustomData("_cke_table_pillars");b.removeListener()}var n=CKEDITOR.tools.cssLength,x=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(b){b.on("contentDom",function(){var c,a=b.editable();a.attachListener(a.isInline()?a:b.document,"mousemove",function(a){a=a.data;var e=a.getTarget();if(e.type==CKEDITOR.NODE_ELEMENT){var h=a.getPageOffset().x,
|
||||
f=a.getPageOffset().y;if(c&&c.move(h,f))B(a);else if(e.is("table")||e.getAscendant({thead:1,tbody:1,tfoot:1},1))if(a=e.getAscendant("table",1),b.editable().contains(a)){(e=a.getCustomData("_cke_table_pillars"))||(a.setCustomData("_cke_table_pillars",e=C(a)),a.on("mouseout",A),a.on("mousedown",A));a:{a=e;for(var e=0,g=a.length;e<g;e++){var d=a[e];if(h>=d.x&&h<=d.x+d.width&&f>=d.y&&f<=d.y+d.height){h=d;break a}}h=null}h&&(!c&&(c=new E(b)),c.attachTo(h))}}})})}})})();(function(){function n(a,b){return CKEDITOR.tools.array.reduce(b,function(a,b){return b(a)},a)}var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],p={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"))},
|
||||
CKEDITOR.tools.buildTableMap=function(q,r,B,v,w){q=q.$.rows;B=B||0;v="number"===typeof v?v:q.length-1;w="number"===typeof w?w:-1;var u=-1,y=[];for(r=r||0;r<=v;r++){u++;!y[u]&&(y[u]=[]);for(var t=-1,z=B;z<=(-1===w?q[r].cells.length-1:w);z++){var p=q[r].cells[z];if(!p)break;for(t++;y[u][t];)t++;for(var A=isNaN(p.colSpan)?1:p.colSpan,p=isNaN(p.rowSpan)?1:p.rowSpan,x=0;x<p&&!(r+x>v);x++){y[u+x]||(y[u+x]=[]);for(var C=0;C<A;C++)y[u+x][t+C]=q[r].cells[z]}t+=A-1;if(-1!==w&&t>=w)break}}return y};
|
||||
CKEDITOR.config.tabletools_scopedHeaders=!1;(function(){function z(b){return CKEDITOR.env.ie?b.$.clientWidth:parseInt(b.getComputedStyle("width"),10)}function u(b,d){var a=b.getComputedStyle("border-"+d+"-width"),h={thin:"0px",medium:"1px",thick:"2px"};0>a.indexOf("px")&&(a=a in h&&"none"!=b.getComputedStyle("border-style")?h[a]:0);return parseFloat(a)}function C(b){var d=[],a={},h="rtl"===b.getComputedStyle("direction"),l=CKEDITOR.tools.array.zip((new CKEDITOR.dom.nodeList(b.$.rows)).toArray(),CKEDITOR.tools.buildTableMap(b));CKEDITOR.tools.array.forEach(l,
|
||||
function(e){var c=e[0].$;e=e[1];var l=-1,g=0,f=null;c?(g=new CKEDITOR.dom.element(c),f={height:g.$.offsetHeight,position:g.getDocumentPosition()}):f=void 0;for(var c=CKEDITOR.env.ie&&!CKEDITOR.env.edge,m="collapse"===b.getComputedStyle("border-collapse"),g=f.height,f=f.position,p=0;p<e.length;p++){var k=new CKEDITOR.dom.element(e[p]),v=e[p+1]&&new CKEDITOR.dom.element(e[p+1]),q,w,r=k.getDocumentPosition().x,l=l+(k.$.colSpan||1);h?w=r+u(k,"left"):q=r+k.$.offsetWidth-u(k,"right");v?(r=v.getDocumentPosition().x,
|
||||
h?q=r+v.$.offsetWidth-u(v,"right"):w=r+u(v,"left")):(r=b.getDocumentPosition().x,h?q=r:w=r+b.$.offsetWidth);k=Math.max(w-q,3);c&&m&&(q-=k,k=Math.max(w-q,3));k={table:b,index:l,x:q,y:f.y,width:k,height:g,rtl:h};a[l]=a[l]||[];a[l].push(k);k.alignedPillars=a[l];d.push(k)}});return d}function B(b){(b.data||b).preventDefault()}function E(b){function d(){f=0;g.setOpacity(0);p&&a();var b=c.table;setTimeout(function(){b.removeCustomData("_cke_table_pillars")},0);n.removeListener("dragstart",B)}function a(){for(var l=
|
||||
c.rtl,a=l?q.length:v.length,g=0,e=0;e<a;e++){var f=v[e],d=q[e],k=c.table;CKEDITOR.tools.setTimeout(function(c,e,f,d,n,h){c&&c.setStyle("width",m(Math.max(e+h,1)));f&&f.setStyle("width",m(Math.max(d-h,1)));n&&k.setStyle("width",m(n+h*(l?-1:1)));++g==a&&b.fire("saveSnapshot")},0,this,[f,f&&z(f),d,d&&z(d),(!f||!d)&&z(k)+u(k,"left")+u(k,"right"),p])}}function h(a){B(a);b.fire("saveSnapshot");a=c.index;for(var d=CKEDITOR.tools.buildTableMap(c.table),k=[],h=[],m=Number.MAX_VALUE,u=m,y=c.rtl,D=0,C=d.length;D<
|
||||
C;D++){var t=d[D],x=t[a+(y?1:0)],t=t[a+(y?0:1)],x=x&&new CKEDITOR.dom.element(x),t=t&&new CKEDITOR.dom.element(t);x&&t&&x.equals(t)||(x&&(m=Math.min(m,z(x))),t&&(u=Math.min(u,z(t))),k.push(x),h.push(t))}v=k;q=h;w=c.x-m;r=c.x+u;g.setOpacity(.5);A=parseInt(g.getStyle("left"),10);p=0;f=1;g.on("mousemove",e);n.on("dragstart",B);n.on("mouseup",l,this)}function l(c){c.removeListener();d()}function e(c){k(c.data.getPageOffset().x)}var c,n,g,f,A,p,k,v,q,w,r;n=b.document;g=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10000"\x3e\x3c/div\x3e',
|
||||
n);b.on("destroy",function(){g.remove()});y||n.getDocumentElement().append(g);this.attachTo=function(b){var a,l,e;f||(y&&(n.getBody().append(g),p=0),c=b,a=c.alignedPillars[0],l=c.alignedPillars[c.alignedPillars.length-1],e=a.y,a=l.height+l.y-a.y,g.setStyles({width:m(b.width),height:m(a),left:m(b.x),top:m(e)}),y&&g.setOpacity(.25),g.on("mousedown",h,this),n.getBody().setStyle("cursor","col-resize"),g.show())};k=this.move=function(a,b){if(!c)return 0;if(!(f||a>=c.x&&a<=c.x+c.width&&b>=c.y&&b<=c.y+c.height))return c=
|
||||
null,f=p=0,n.removeListener("mouseup",l),g.removeListener("mousedown",h),g.removeListener("mousemove",e),n.getBody().setStyle("cursor","auto"),y?g.remove():g.hide(),0;var d=a-Math.round(g.$.offsetWidth/2);if(f){if(d==w||d==r)return 1;d=Math.max(d,w);d=Math.min(d,r);p=d-A}g.setStyle("left",m(d));return 1}}function A(b){var d=b.data.getTarget();if("mouseout"==b.name){if(!d.is("table"))return;for(var a=new CKEDITOR.dom.element(b.data.$.relatedTarget||b.data.$.toElement);a&&a.$&&!a.equals(d)&&!a.is("body");)a=
|
||||
a.getParent();if(!a||a.equals(d))return}d.getAscendant("table",1).removeCustomData("_cke_table_pillars");b.removeListener()}var m=CKEDITOR.tools.cssLength,y=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(b){b.on("contentDom",function(){var d,a=b.editable(),h=a.isInline()?a:b.document;a.attachListener(h,"mousemove",function(a){a=a.data;var e=a.getTarget();if(e.type==CKEDITOR.NODE_ELEMENT){var c=a.getPageOffset().x,
|
||||
h=a.getPageOffset().y;if(d&&d.move(c,h))B(a);else if(e.is("table")||e.getAscendant({thead:1,tbody:1,tfoot:1},1))if(a=e.getAscendant("table",1),b.editable().contains(a)){(e=a.getCustomData("_cke_table_pillars"))||(a.setCustomData("_cke_table_pillars",e=C(a)),a.on("mouseout",A),a.on("mousedown",A));a:{a=e;for(var e=0,g=a.length;e<g;e++){var f=a[e];if(c>=f.x&&c<=f.x+f.width&&h>=f.y&&h<=f.y+f.height){c=f;break a}}c=null}c&&(!d&&(d=new E(b)),d.attachTo(c))}}});a.attachListener(h,"scroll",function(){var b=
|
||||
a.find("table").toArray();CKEDITOR.tools.array.forEach(b,CKEDITOR.tools.debounce(function(a){a.removeCustomData("_cke_table_pillars")},200))})})}})})();(function(){function n(a,b){return CKEDITOR.tools.array.reduce(b,function(a,b){return b(a)},a)}var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],p={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._filterRules=[];this.editor=a;this.reset();CKEDITOR.env.ie&&this.addFilterRule(function(a){return a.replace(/\s+data-cke-expando=".*?"/g,"")})};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user