diff options
110 files changed, 447 insertions, 235 deletions
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index eb117a2ab9a..983b0af6d93 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - php-versions: ['7.4', '8.0', '8.1'] + php-versions: ['7.4', '8.0', '8.1', '8.2'] name: php${{ matrix.php-versions }} lint steps: - name: Checkout diff --git a/apps/dav/l10n/bg.js b/apps/dav/l10n/bg.js index e9fba5286ba..f4842a46d30 100644 --- a/apps/dav/l10n/bg.js +++ b/apps/dav/l10n/bg.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} с група {group}", "You unshared calendar {calendar} from group {group}" : "Отказахте споделянето на календара {calendar} от група {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} отказа споделяне с календар {calendar} от група {group}", + "Untitled event" : "Събитие без заглавие", "{actor} created event {event} in calendar {calendar}" : "{actor} създаде събитие {event} в календар {calendar}", "You created event {event} in calendar {calendar}" : "Създадохте събитие {event} в календар {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} изтри събитие {event} от календар {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Дата:", "Where:" : "Къде:", "Description:" : "Описание:", - "Untitled event" : "Събитие без заглавие", "_%n year_::_%n years_" : ["%n години","%d години"], "_%n month_::_%n months_" : ["%n месеци","%n месеци"], "_%n day_::_%n days_" : ["%n дни","%n дни"], diff --git a/apps/dav/l10n/bg.json b/apps/dav/l10n/bg.json index cfb4220cb5d..3a6ffd3e5fe 100644 --- a/apps/dav/l10n/bg.json +++ b/apps/dav/l10n/bg.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} с група {group}", "You unshared calendar {calendar} from group {group}" : "Отказахте споделянето на календара {calendar} от група {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} отказа споделяне с календар {calendar} от група {group}", + "Untitled event" : "Събитие без заглавие", "{actor} created event {event} in calendar {calendar}" : "{actor} създаде събитие {event} в календар {calendar}", "You created event {event} in calendar {calendar}" : "Създадохте събитие {event} в календар {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} изтри събитие {event} от календар {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Дата:", "Where:" : "Къде:", "Description:" : "Описание:", - "Untitled event" : "Събитие без заглавие", "_%n year_::_%n years_" : ["%n години","%d години"], "_%n month_::_%n months_" : ["%n месеци","%n месеци"], "_%n day_::_%n days_" : ["%n дни","%n дни"], diff --git a/apps/dav/l10n/ca.js b/apps/dav/l10n/ca.js index 34b52ab1c9e..63d0d35c797 100644 --- a/apps/dav/l10n/ca.js +++ b/apps/dav/l10n/ca.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} ha compartit el calendari {calendar} amb el grup {group}", "You unshared calendar {calendar} from group {group}" : "Heu desactivat el calendari {calendar} del grup {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} calendari no publicat {calendar} del grup {grup}", + "Untitled event" : "Esdeveniment sense títol", "{actor} created event {event} in calendar {calendar}" : "{actor} ha creat l'esdeveniment {event} al calendari {calendar}", "You created event {event} in calendar {calendar}" : "Heu creat l'esdeveniment {event} al calendari {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ha suprimit l'esdeveniment {esdeveniment} del calendari {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "On:", "Description:" : "Descripció:", - "Untitled event" : "Esdeveniment sense títol", "_%n year_::_%n years_" : ["%n any","%n anys"], "_%n month_::_%n months_" : ["%n mes","%n mesos"], "_%n day_::_%n days_" : ["%n dia","%n dies"], diff --git a/apps/dav/l10n/ca.json b/apps/dav/l10n/ca.json index 7635d06b1cc..0952b65181b 100644 --- a/apps/dav/l10n/ca.json +++ b/apps/dav/l10n/ca.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} ha compartit el calendari {calendar} amb el grup {group}", "You unshared calendar {calendar} from group {group}" : "Heu desactivat el calendari {calendar} del grup {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} calendari no publicat {calendar} del grup {grup}", + "Untitled event" : "Esdeveniment sense títol", "{actor} created event {event} in calendar {calendar}" : "{actor} ha creat l'esdeveniment {event} al calendari {calendar}", "You created event {event} in calendar {calendar}" : "Heu creat l'esdeveniment {event} al calendari {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ha suprimit l'esdeveniment {esdeveniment} del calendari {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Data:", "Where:" : "On:", "Description:" : "Descripció:", - "Untitled event" : "Esdeveniment sense títol", "_%n year_::_%n years_" : ["%n any","%n anys"], "_%n month_::_%n months_" : ["%n mes","%n mesos"], "_%n day_::_%n days_" : ["%n dia","%n dies"], diff --git a/apps/dav/l10n/cs.js b/apps/dav/l10n/cs.js index 6a8bdea52e8..5dfc5bcd147 100644 --- a/apps/dav/l10n/cs.js +++ b/apps/dav/l10n/cs.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}", "You unshared calendar {calendar} from group {group}" : "Zrušili jste sdílení kalendáře {calendar} skupině {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}", + "Untitled event" : "Událost bez názvu", "{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}", "You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořili událost {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Datum:", "Where:" : "Kde:", "Description:" : "Popis:", - "Untitled event" : "Událost bez názvu", "_%n year_::_%n years_" : ["%n rok","%n roky","%n let","%n roky"], "_%n month_::_%n months_" : ["%n měsíc","%n měsíce","%n měsíců","%n měsíce"], "_%n day_::_%n days_" : ["%n den","%n dny","%n dnů","%n dny"], diff --git a/apps/dav/l10n/cs.json b/apps/dav/l10n/cs.json index 05ed95c0abd..12df93f770d 100644 --- a/apps/dav/l10n/cs.json +++ b/apps/dav/l10n/cs.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}", "You unshared calendar {calendar} from group {group}" : "Zrušili jste sdílení kalendáře {calendar} skupině {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}", + "Untitled event" : "Událost bez názvu", "{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}", "You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořili událost {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}", @@ -52,7 +53,6 @@ "Date:" : "Datum:", "Where:" : "Kde:", "Description:" : "Popis:", - "Untitled event" : "Událost bez názvu", "_%n year_::_%n years_" : ["%n rok","%n roky","%n let","%n roky"], "_%n month_::_%n months_" : ["%n měsíc","%n měsíce","%n měsíců","%n měsíce"], "_%n day_::_%n days_" : ["%n den","%n dny","%n dnů","%n dny"], diff --git a/apps/dav/l10n/da.js b/apps/dav/l10n/da.js index 2fecf5fe6d8..ec7ca67b4c7 100644 --- a/apps/dav/l10n/da.js +++ b/apps/dav/l10n/da.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppen {group}", "You unshared calendar {calendar} from group {group}" : "Du fjernede delingen af {calendar} fra gruppen {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} fjernede deling af kalenderen {calendar} fra gruppen {group}", + "Untitled event" : "Unavngiven begivenhed", "{actor} created event {event} in calendar {calendar}" : "{actor} oprettede begivenheden {event} i kalenderen {calendar}", "You created event {event} in calendar {calendar}" : "Du oprettede begivenheden {event} i kalenderen {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} slettede begivenheden {event} fra kalenderen {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Dato:", "Where:" : "Hvor:", "Description:" : "Beskrivelse:", - "Untitled event" : "Unavngiven begivenhed", "_%n year_::_%n years_" : ["%n år","%n år"], "_%n month_::_%n months_" : ["%n måned","%n måneder"], "_%n day_::_%n days_" : ["%n dag","%n dage"], diff --git a/apps/dav/l10n/da.json b/apps/dav/l10n/da.json index 1a70d847ccc..56cbfd455cd 100644 --- a/apps/dav/l10n/da.json +++ b/apps/dav/l10n/da.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppen {group}", "You unshared calendar {calendar} from group {group}" : "Du fjernede delingen af {calendar} fra gruppen {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} fjernede deling af kalenderen {calendar} fra gruppen {group}", + "Untitled event" : "Unavngiven begivenhed", "{actor} created event {event} in calendar {calendar}" : "{actor} oprettede begivenheden {event} i kalenderen {calendar}", "You created event {event} in calendar {calendar}" : "Du oprettede begivenheden {event} i kalenderen {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} slettede begivenheden {event} fra kalenderen {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Dato:", "Where:" : "Hvor:", "Description:" : "Beskrivelse:", - "Untitled event" : "Unavngiven begivenhed", "_%n year_::_%n years_" : ["%n år","%n år"], "_%n month_::_%n months_" : ["%n måned","%n måneder"], "_%n day_::_%n days_" : ["%n dag","%n dage"], diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js index 3a2898785cf..76c3f3ece67 100644 --- a/apps/dav/l10n/de.js +++ b/apps/dav/l10n/de.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} teilt den Kalender {calendar} mit der Gruppe {group}", "You unshared calendar {calendar} from group {group}" : "Du teilst den Kalender {calendar} nicht mehr mit der Gruppe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} teilt den Kalender {calendar} nicht mehr mit der Gruppe {group}", + "Untitled event" : "Termin ohne Titel", "{actor} created event {event} in calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} erstellt", "You created event {event} in calendar {calendar}" : "Du hast den Termin {event} im Kalender {calendar} erstellt", "{actor} deleted event {event} from calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} gelöscht", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Datum:", "Where:" : "Wo:", "Description:" : "Beschreibung:", - "Untitled event" : "Termin ohne Titel", "_%n year_::_%n years_" : ["%n Jahr","%n Jahre"], "_%n month_::_%n months_" : ["%n Monat","%n Monate"], "_%n day_::_%n days_" : ["%n Tag","%n Tage"], diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json index a02efad8b27..34ccefe668b 100644 --- a/apps/dav/l10n/de.json +++ b/apps/dav/l10n/de.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} teilt den Kalender {calendar} mit der Gruppe {group}", "You unshared calendar {calendar} from group {group}" : "Du teilst den Kalender {calendar} nicht mehr mit der Gruppe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} teilt den Kalender {calendar} nicht mehr mit der Gruppe {group}", + "Untitled event" : "Termin ohne Titel", "{actor} created event {event} in calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} erstellt", "You created event {event} in calendar {calendar}" : "Du hast den Termin {event} im Kalender {calendar} erstellt", "{actor} deleted event {event} from calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} gelöscht", @@ -52,7 +53,6 @@ "Date:" : "Datum:", "Where:" : "Wo:", "Description:" : "Beschreibung:", - "Untitled event" : "Termin ohne Titel", "_%n year_::_%n years_" : ["%n Jahr","%n Jahre"], "_%n month_::_%n months_" : ["%n Monat","%n Monate"], "_%n day_::_%n days_" : ["%n Tag","%n Tage"], diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js index b906c0e5465..3c230ad7d00 100644 --- a/apps/dav/l10n/de_DE.js +++ b/apps/dav/l10n/de_DE.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} teilt den Kalender {calendar} mit der Gruppe {group}", "You unshared calendar {calendar} from group {group}" : "Sie teilen den Kalender {calendar} nicht mehr mit der Gruppe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} teilt den Kalender {calendar} nicht mehr mit der Gruppe {group}", + "Untitled event" : "Termin ohne Titel", "{actor} created event {event} in calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} erstellt", "You created event {event} in calendar {calendar}" : "Sie haben den Termin {event} im Kalender {calendar} erstellt", "{actor} deleted event {event} from calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} gelöscht", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Datum:", "Where:" : "Wo:", "Description:" : "Beschreibung:", - "Untitled event" : "Termin ohne Titel", "_%n year_::_%n years_" : ["%n Jahr","%n Jahre"], "_%n month_::_%n months_" : ["%n Monat","%n Monate"], "_%n day_::_%n days_" : ["%n Tag","%n Tage"], diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json index 3a3510e6c82..9921f64e22b 100644 --- a/apps/dav/l10n/de_DE.json +++ b/apps/dav/l10n/de_DE.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} teilt den Kalender {calendar} mit der Gruppe {group}", "You unshared calendar {calendar} from group {group}" : "Sie teilen den Kalender {calendar} nicht mehr mit der Gruppe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} teilt den Kalender {calendar} nicht mehr mit der Gruppe {group}", + "Untitled event" : "Termin ohne Titel", "{actor} created event {event} in calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} erstellt", "You created event {event} in calendar {calendar}" : "Sie haben den Termin {event} im Kalender {calendar} erstellt", "{actor} deleted event {event} from calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} gelöscht", @@ -52,7 +53,6 @@ "Date:" : "Datum:", "Where:" : "Wo:", "Description:" : "Beschreibung:", - "Untitled event" : "Termin ohne Titel", "_%n year_::_%n years_" : ["%n Jahr","%n Jahre"], "_%n month_::_%n months_" : ["%n Monat","%n Monate"], "_%n day_::_%n days_" : ["%n Tag","%n Tage"], diff --git a/apps/dav/l10n/el.js b/apps/dav/l10n/el.js index 84f5dcf04f3..e9a8c403943 100644 --- a/apps/dav/l10n/el.js +++ b/apps/dav/l10n/el.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "Ο {actor} διαμοιράστηκε το ημερολόγιο {calendar} με την ομάδα {group}", "You unshared calendar {calendar} from group {group}" : "Σταματήσατε τον διαμοιρασμό του ημερολογίου {calendar} από την ομάδα {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} σταμάτησε το διαμοιρασμένο ημερολόγιο {calendar} από την ομάδα {group}", + "Untitled event" : "Συμβάν χωρίς τίτλο", "{actor} created event {event} in calendar {calendar}" : "Ο {actor} δημιούργησε το γεγονός {event} στο ημερολόγιο {calendar}", "You created event {event} in calendar {calendar}" : "Δημιουργήσατε το γεγονός {event} στο ημερολόγιο {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "Ο {actor} διέγραψε το γεγονός {event} από το ημερολόγιο {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Ημερομηνία:", "Where:" : "Που:", "Description:" : "Περιγραφή:", - "Untitled event" : "Συμβάν χωρίς τίτλο", "_%n year_::_%n years_" : ["%n χρόνος/χρονιά","%n χρόνια"], "_%n month_::_%n months_" : ["%n μήνας","%d μήνες"], "_%n day_::_%n days_" : ["%n ημέρα","%n ημέρες"], diff --git a/apps/dav/l10n/el.json b/apps/dav/l10n/el.json index 523c7d7ef08..79151b2d754 100644 --- a/apps/dav/l10n/el.json +++ b/apps/dav/l10n/el.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "Ο {actor} διαμοιράστηκε το ημερολόγιο {calendar} με την ομάδα {group}", "You unshared calendar {calendar} from group {group}" : "Σταματήσατε τον διαμοιρασμό του ημερολογίου {calendar} από την ομάδα {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} σταμάτησε το διαμοιρασμένο ημερολόγιο {calendar} από την ομάδα {group}", + "Untitled event" : "Συμβάν χωρίς τίτλο", "{actor} created event {event} in calendar {calendar}" : "Ο {actor} δημιούργησε το γεγονός {event} στο ημερολόγιο {calendar}", "You created event {event} in calendar {calendar}" : "Δημιουργήσατε το γεγονός {event} στο ημερολόγιο {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "Ο {actor} διέγραψε το γεγονός {event} από το ημερολόγιο {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Ημερομηνία:", "Where:" : "Που:", "Description:" : "Περιγραφή:", - "Untitled event" : "Συμβάν χωρίς τίτλο", "_%n year_::_%n years_" : ["%n χρόνος/χρονιά","%n χρόνια"], "_%n month_::_%n months_" : ["%n μήνας","%d μήνες"], "_%n day_::_%n days_" : ["%n ημέρα","%n ημέρες"], diff --git a/apps/dav/l10n/eo.js b/apps/dav/l10n/eo.js index f17ea331a7f..63861008c39 100644 --- a/apps/dav/l10n/eo.js +++ b/apps/dav/l10n/eo.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} kunhavigis kalendaron {calendar} kun grupo {group}", "You unshared calendar {calendar} from group {group}" : "Vi malkunhavigis kalendaron {calendar} kun grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} malkunhavigis kalendaron {calendar} kun grupo {group}", + "Untitled event" : "Sentitola okazaĵo", "{actor} created event {event} in calendar {calendar}" : "{actor} kreis okazaĵon {event} en kalendaro {calendar}", "You created event {event} in calendar {calendar}" : "Vi kreis okazaĵon {event} en kalendaro {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} forigis okazaĵon {event} en kalendaro {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Dato:", "Where:" : "Kie:", "Description:" : "Priskribo:", - "Untitled event" : "Sentitola okazaĵo", "_%n year_::_%n years_" : ["%n jaro","%n jaroj"], "_%n month_::_%n months_" : ["%n monato","%n monatoj"], "_%n day_::_%n days_" : ["%n tago","%n tagoj"], diff --git a/apps/dav/l10n/eo.json b/apps/dav/l10n/eo.json index 3f616e499b4..2eb6017f344 100644 --- a/apps/dav/l10n/eo.json +++ b/apps/dav/l10n/eo.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} kunhavigis kalendaron {calendar} kun grupo {group}", "You unshared calendar {calendar} from group {group}" : "Vi malkunhavigis kalendaron {calendar} kun grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} malkunhavigis kalendaron {calendar} kun grupo {group}", + "Untitled event" : "Sentitola okazaĵo", "{actor} created event {event} in calendar {calendar}" : "{actor} kreis okazaĵon {event} en kalendaro {calendar}", "You created event {event} in calendar {calendar}" : "Vi kreis okazaĵon {event} en kalendaro {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} forigis okazaĵon {event} en kalendaro {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Dato:", "Where:" : "Kie:", "Description:" : "Priskribo:", - "Untitled event" : "Sentitola okazaĵo", "_%n year_::_%n years_" : ["%n jaro","%n jaroj"], "_%n month_::_%n months_" : ["%n monato","%n monatoj"], "_%n day_::_%n days_" : ["%n tago","%n tagoj"], diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js index e93c0e67bff..24da94a67c3 100644 --- a/apps/dav/l10n/es.js +++ b/apps/dav/l10n/es.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}", "You unshared calendar {calendar} from group {group}" : "Usted dejó de compartir el calendario {calendar} del grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendario {calendar} del grupo {group}", + "Untitled event" : "Evento sin título", "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}", "You created event {event} in calendar {calendar}" : "Usted creó el evento {event} en el calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eliminó el evento {event} del calendario {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Fecha:", "Where:" : "Dónde:", "Description:" : "Descripción:", - "Untitled event" : "Evento sin título", "_%n year_::_%n years_" : ["%n año","%n años","%n años"], "_%n month_::_%n months_" : ["%n mes","%n meses","%n meses"], "_%n day_::_%n days_" : ["%n día","%n días","%n días"], diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json index 8f2f405541e..ee52759714c 100644 --- a/apps/dav/l10n/es.json +++ b/apps/dav/l10n/es.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}", "You unshared calendar {calendar} from group {group}" : "Usted dejó de compartir el calendario {calendar} del grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendario {calendar} del grupo {group}", + "Untitled event" : "Evento sin título", "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}", "You created event {event} in calendar {calendar}" : "Usted creó el evento {event} en el calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eliminó el evento {event} del calendario {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Fecha:", "Where:" : "Dónde:", "Description:" : "Descripción:", - "Untitled event" : "Evento sin título", "_%n year_::_%n years_" : ["%n año","%n años","%n años"], "_%n month_::_%n months_" : ["%n mes","%n meses","%n meses"], "_%n day_::_%n days_" : ["%n día","%n días","%n días"], diff --git a/apps/dav/l10n/eu.js b/apps/dav/l10n/eu.js index eac34f15430..d9e0da425a1 100644 --- a/apps/dav/l10n/eu.js +++ b/apps/dav/l10n/eu.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} {group} taldearekin {calendar} egutegia partekatu du", "You unshared calendar {calendar} from group {group}" : "{group} taldearekin {calendar} egutegia partekatzeari utzi dio.", "{actor} unshared calendar {calendar} from group {group}" : "{actor}-rk {group} taldearekin {calendar} egutegia partekatzeari utzi dio.", + "Untitled event" : "Izenik gabeko gertaera", "{actor} created event {event} in calendar {calendar}" : "{actor} erabiltzaileak {event} gertaera sortu du {calendar} egutegian.", "You created event {event} in calendar {calendar}" : "{calendar} egutegian {event} gertaera sortu duzu", "{actor} deleted event {event} from calendar {calendar}" : "{actor} erabiltzaileak {event} gertaera ezabatu du {calendar} egutegitik", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Non:", "Description:" : "Deskribapena:", - "Untitled event" : "Izenik gabeko gertaera", "_%n year_::_%n years_" : ["Urte %n","%n urte"], "_%n month_::_%n months_" : ["Hilabete %n","%n hilabete"], "_%n day_::_%n days_" : ["Egun %n","%n egun"], @@ -109,9 +109,22 @@ OC.L10N.register( "You updated contact {card} in address book {addressbook}" : "Eguneratu duzu {card} kontaktua {addressbook} helbide-liburuan", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>kontaktu</strong> edo <strong>helbide-liburu</strong>bat aldatu da", "File is not updatable: %1$s" : "Fitxategia ez da eguneragarria: %1$s", + "Could not write to final file, canceled by hook" : "Ezin izan da azken fitxategian idatzi, kakoaren bidez bertan behera utzi da", "Could not write file contents" : "Ezin izan dira fitxategiaren edukiak idatzi", "_%n byte_::_%n bytes_" : ["Byte %n","%n byte"], + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Errore bat gertatu da fitxategia helburuko kokapenera kopiatzean (kopiatua: %1$s, espero den fitxategiaren tamaina: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "%1$sfitxategi-tamaina espero zen baina irakurri (Nextcloud bezerotik) eta idatzita (Nextcloud biltegian) %2$s. Bidaltzailearen aldean sareko arazo bat izan daiteke edo zerbitzariaren biltegian idazteko arazo bat izan daiteke.", + "Could not rename part file to final file, canceled by hook" : "Ezin izan da zati-fitxategiaren izena aldatu azken fitxategira, kakoaren bidez bertan behera utzi da", + "Could not rename part file to final file" : "Ezin izan da zatiaren fitxategia azken fitxategira aldatu", + "Failed to check file size: %1$s" : "Ezin izan da egiaztatu fitxategiaren tamaina:%1$s", "Could not open file" : "Ezin izan da fitxategia ireki", + "Encryption not ready: %1$s" : "Enkriptatzea ez dago prest:%1$s", + "Failed to open file: %1$s" : "Ezin izan da fitxategia ireki:%1$s", + "Failed to unlink: %1$s" : "Ezin izan da deskonektatu:%1$s", + "Invalid chunk name" : "Zati izen baliogabea", + "Could not rename part file assembled from chunks" : "Ezin izan da zati-fitxategiaren izena aldatu zenbait zatiz osatuta dagoelako", + "Failed to write file contents: %1$s" : "Ezin izan dira fitxategiaren edukiak idatzi:%1$s", + "File not found: %1$s" : "Ez da fitxategirik aurkitu:%1$s", "System is in maintenance mode." : "Sistema mantentze moduan dago.", "Upgrade needed" : "Bertsio-berritzea beharrezkoa", "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Zure %s HTTPS erabiltzeko konfiguratu behar da CalDAV eta CardDAV erabiltzeko iOS eta macOSrekin.", @@ -123,6 +136,8 @@ OC.L10N.register( "Completed on %s" : "%s-an osatua", "Due on %s by %s" : "%s-(e)tik %s-(e)an epemuga", "Due on %s" : "%s-(e)an epemuga", + "Migrated calendar (%1$s)" : "Migratutako egutegia (%1$s)", + "Calendars including events, details and attendees" : "Egutegiak, ekitaldiak, xehetasunak eta parte-hartzaileak barne ditu", "Contacts and groups" : "Kontaktuak eta taldeak", "WebDAV" : "WebDAV", "WebDAV endpoint" : "WebDAV amaiera-puntua", @@ -141,6 +156,9 @@ OC.L10N.register( "Saturday" : "Larunbata", "Sunday" : "Igandea", "Save" : "Gorde", + "Failed to load availability" : "Ezin izan da kargatu erabilgarritasuna", + "Saved availability" : "Gordetako erabilgarritasuna", + "Failed to save availability" : "Ezin izan da gorde erabilgarritasuna", "Calendar server" : "Egutegi-zerbitzaria", "Send invitations to attendees" : "Gonbidatutakoei gonbidapenak bidali", "Automatically generate a birthday calendar" : "Automatikoki sortu urtebetetzeen egutegia", @@ -148,6 +166,8 @@ OC.L10N.register( "Hence they will not be available immediately after enabling but will show up after some time." : "Beraz ez dira gaitu ostean agertuko baina denbora pasa ahala agertuko dira.", "Send notifications for events" : "Bidali jakinarazpenak gertaerentzako", "Notifications are sent via background jobs, so these must occur often enough." : "Jakinarazpenak atzealdeko lanen bidez bidaliko dira, beraz sarri gertatu behar dira.", + "Send reminder notifications to calendar sharees as well" : "Bidali abisuaren jakinarazpenak egutegi partekatzeetara ere", + "Reminders are always sent to organizers and attendees." : "Abisuak beti bidaltzen zaizkie antolatzaileei eta bertaratutakoei.", "Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instalatu ezazu {calendarappstoreopen}Egutegi aplikazioa{linkclose} ere, edo {calendardocopen}konektatu zure ordenagailua eta mugikorra sinkronizatzeko ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Mesedez egiaztatu {emailopen}posta elektroniko zerbitzaria{linkclose} ondo konfiguratuta dagoela.", diff --git a/apps/dav/l10n/eu.json b/apps/dav/l10n/eu.json index 481a7740006..bda903e0899 100644 --- a/apps/dav/l10n/eu.json +++ b/apps/dav/l10n/eu.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} {group} taldearekin {calendar} egutegia partekatu du", "You unshared calendar {calendar} from group {group}" : "{group} taldearekin {calendar} egutegia partekatzeari utzi dio.", "{actor} unshared calendar {calendar} from group {group}" : "{actor}-rk {group} taldearekin {calendar} egutegia partekatzeari utzi dio.", + "Untitled event" : "Izenik gabeko gertaera", "{actor} created event {event} in calendar {calendar}" : "{actor} erabiltzaileak {event} gertaera sortu du {calendar} egutegian.", "You created event {event} in calendar {calendar}" : "{calendar} egutegian {event} gertaera sortu duzu", "{actor} deleted event {event} from calendar {calendar}" : "{actor} erabiltzaileak {event} gertaera ezabatu du {calendar} egutegitik", @@ -52,7 +53,6 @@ "Date:" : "Data:", "Where:" : "Non:", "Description:" : "Deskribapena:", - "Untitled event" : "Izenik gabeko gertaera", "_%n year_::_%n years_" : ["Urte %n","%n urte"], "_%n month_::_%n months_" : ["Hilabete %n","%n hilabete"], "_%n day_::_%n days_" : ["Egun %n","%n egun"], @@ -107,9 +107,22 @@ "You updated contact {card} in address book {addressbook}" : "Eguneratu duzu {card} kontaktua {addressbook} helbide-liburuan", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>kontaktu</strong> edo <strong>helbide-liburu</strong>bat aldatu da", "File is not updatable: %1$s" : "Fitxategia ez da eguneragarria: %1$s", + "Could not write to final file, canceled by hook" : "Ezin izan da azken fitxategian idatzi, kakoaren bidez bertan behera utzi da", "Could not write file contents" : "Ezin izan dira fitxategiaren edukiak idatzi", "_%n byte_::_%n bytes_" : ["Byte %n","%n byte"], + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Errore bat gertatu da fitxategia helburuko kokapenera kopiatzean (kopiatua: %1$s, espero den fitxategiaren tamaina: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "%1$sfitxategi-tamaina espero zen baina irakurri (Nextcloud bezerotik) eta idatzita (Nextcloud biltegian) %2$s. Bidaltzailearen aldean sareko arazo bat izan daiteke edo zerbitzariaren biltegian idazteko arazo bat izan daiteke.", + "Could not rename part file to final file, canceled by hook" : "Ezin izan da zati-fitxategiaren izena aldatu azken fitxategira, kakoaren bidez bertan behera utzi da", + "Could not rename part file to final file" : "Ezin izan da zatiaren fitxategia azken fitxategira aldatu", + "Failed to check file size: %1$s" : "Ezin izan da egiaztatu fitxategiaren tamaina:%1$s", "Could not open file" : "Ezin izan da fitxategia ireki", + "Encryption not ready: %1$s" : "Enkriptatzea ez dago prest:%1$s", + "Failed to open file: %1$s" : "Ezin izan da fitxategia ireki:%1$s", + "Failed to unlink: %1$s" : "Ezin izan da deskonektatu:%1$s", + "Invalid chunk name" : "Zati izen baliogabea", + "Could not rename part file assembled from chunks" : "Ezin izan da zati-fitxategiaren izena aldatu zenbait zatiz osatuta dagoelako", + "Failed to write file contents: %1$s" : "Ezin izan dira fitxategiaren edukiak idatzi:%1$s", + "File not found: %1$s" : "Ez da fitxategirik aurkitu:%1$s", "System is in maintenance mode." : "Sistema mantentze moduan dago.", "Upgrade needed" : "Bertsio-berritzea beharrezkoa", "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Zure %s HTTPS erabiltzeko konfiguratu behar da CalDAV eta CardDAV erabiltzeko iOS eta macOSrekin.", @@ -121,6 +134,8 @@ "Completed on %s" : "%s-an osatua", "Due on %s by %s" : "%s-(e)tik %s-(e)an epemuga", "Due on %s" : "%s-(e)an epemuga", + "Migrated calendar (%1$s)" : "Migratutako egutegia (%1$s)", + "Calendars including events, details and attendees" : "Egutegiak, ekitaldiak, xehetasunak eta parte-hartzaileak barne ditu", "Contacts and groups" : "Kontaktuak eta taldeak", "WebDAV" : "WebDAV", "WebDAV endpoint" : "WebDAV amaiera-puntua", @@ -139,6 +154,9 @@ "Saturday" : "Larunbata", "Sunday" : "Igandea", "Save" : "Gorde", + "Failed to load availability" : "Ezin izan da kargatu erabilgarritasuna", + "Saved availability" : "Gordetako erabilgarritasuna", + "Failed to save availability" : "Ezin izan da gorde erabilgarritasuna", "Calendar server" : "Egutegi-zerbitzaria", "Send invitations to attendees" : "Gonbidatutakoei gonbidapenak bidali", "Automatically generate a birthday calendar" : "Automatikoki sortu urtebetetzeen egutegia", @@ -146,6 +164,8 @@ "Hence they will not be available immediately after enabling but will show up after some time." : "Beraz ez dira gaitu ostean agertuko baina denbora pasa ahala agertuko dira.", "Send notifications for events" : "Bidali jakinarazpenak gertaerentzako", "Notifications are sent via background jobs, so these must occur often enough." : "Jakinarazpenak atzealdeko lanen bidez bidaliko dira, beraz sarri gertatu behar dira.", + "Send reminder notifications to calendar sharees as well" : "Bidali abisuaren jakinarazpenak egutegi partekatzeetara ere", + "Reminders are always sent to organizers and attendees." : "Abisuak beti bidaltzen zaizkie antolatzaileei eta bertaratutakoei.", "Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instalatu ezazu {calendarappstoreopen}Egutegi aplikazioa{linkclose} ere, edo {calendardocopen}konektatu zure ordenagailua eta mugikorra sinkronizatzeko ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Mesedez egiaztatu {emailopen}posta elektroniko zerbitzaria{linkclose} ondo konfiguratuta dagoela.", diff --git a/apps/dav/l10n/fi.js b/apps/dav/l10n/fi.js index c40748c2141..07a8eb95b8d 100644 --- a/apps/dav/l10n/fi.js +++ b/apps/dav/l10n/fi.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} jakoi kalenterin {calendar} ryhmälle {group}", "You unshared calendar {calendar} from group {group}" : "Lopetit kalenterin {calendar} jakamisen ryhmälle {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} lopetti kalenterin {calendar} jakamisen ryhmälle {group}", + "Untitled event" : "Nimetön tapahtuma", "{actor} created event {event} in calendar {calendar}" : "{actor} loi tapahtuman {event} kalenteriin {calendar}", "You created event {event} in calendar {calendar}" : "Loit tapahtuman {event} kalenteriin {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} poisti tapahtuman {event} kalenterista {calendar}", @@ -52,7 +53,6 @@ OC.L10N.register( "Date:" : "Päiväys:", "Where:" : "Missä:", "Description:" : "Kuvaus:", - "Untitled event" : "Nimetön tapahtuma", "_%n year_::_%n years_" : ["%n vuosi","%n vuotta"], "_%n month_::_%n months_" : ["%n kuukausi","%n kuukautta"], "_%n day_::_%n days_" : ["%n päivä","%n päivää"], diff --git a/apps/dav/l10n/fi.json b/apps/dav/l10n/fi.json index 47e7fd9a9e6..5398895b76f 100644 --- a/apps/dav/l10n/fi.json +++ b/apps/dav/l10n/fi.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} jakoi kalenterin {calendar} ryhmälle {group}", "You unshared calendar {calendar} from group {group}" : "Lopetit kalenterin {calendar} jakamisen ryhmälle {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} lopetti kalenterin {calendar} jakamisen ryhmälle {group}", + "Untitled event" : "Nimetön tapahtuma", "{actor} created event {event} in calendar {calendar}" : "{actor} loi tapahtuman {event} kalenteriin {calendar}", "You created event {event} in calendar {calendar}" : "Loit tapahtuman {event} kalenteriin {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} poisti tapahtuman {event} kalenterista {calendar}", @@ -50,7 +51,6 @@ "Date:" : "Päiväys:", "Where:" : "Missä:", "Description:" : "Kuvaus:", - "Untitled event" : "Nimetön tapahtuma", "_%n year_::_%n years_" : ["%n vuosi","%n vuotta"], "_%n month_::_%n months_" : ["%n kuukausi","%n kuukautta"], "_%n day_::_%n days_" : ["%n päivä","%n päivää"], diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js index 149ede544cf..3d9caf69ef0 100644 --- a/apps/dav/l10n/fr.js +++ b/apps/dav/l10n/fr.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} a partagé l'agenda {calendar} avec le groupe {group}", "You unshared calendar {calendar} from group {group}" : "Vous avez cessé de partager l'agenda {calendar} avec le groupe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} a cessé de partager l'agenda {calendar} avec le groupe {group}", + "Untitled event" : "Événement sans titre", "{actor} created event {event} in calendar {calendar}" : "{actor} a créé l'évènement {event} dans l'agenda {calendar}", "You created event {event} in calendar {calendar}" : "Vous avez créé l'évènement {event} dans l'agenda {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} a supprimé l'évènement {event} de l'agenda {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Date:", "Where:" : "Où :", "Description:" : "Description :", - "Untitled event" : "Événement sans titre", "_%n year_::_%n years_" : ["%n an","%n ans","%n ans"], "_%n month_::_%n months_" : ["%n mois","%n mois","%n mois"], "_%n day_::_%n days_" : ["%n jour","%n jours","%n jours"], diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json index 4ac5caf0a73..7134ea75384 100644 --- a/apps/dav/l10n/fr.json +++ b/apps/dav/l10n/fr.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} a partagé l'agenda {calendar} avec le groupe {group}", "You unshared calendar {calendar} from group {group}" : "Vous avez cessé de partager l'agenda {calendar} avec le groupe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} a cessé de partager l'agenda {calendar} avec le groupe {group}", + "Untitled event" : "Événement sans titre", "{actor} created event {event} in calendar {calendar}" : "{actor} a créé l'évènement {event} dans l'agenda {calendar}", "You created event {event} in calendar {calendar}" : "Vous avez créé l'évènement {event} dans l'agenda {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} a supprimé l'évènement {event} de l'agenda {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Date:", "Where:" : "Où :", "Description:" : "Description :", - "Untitled event" : "Événement sans titre", "_%n year_::_%n years_" : ["%n an","%n ans","%n ans"], "_%n month_::_%n months_" : ["%n mois","%n mois","%n mois"], "_%n day_::_%n days_" : ["%n jour","%n jours","%n jours"], diff --git a/apps/dav/l10n/gl.js b/apps/dav/l10n/gl.js index 0d823cd2031..cdc03edca59 100644 --- a/apps/dav/l10n/gl.js +++ b/apps/dav/l10n/gl.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} compartiu o calendario {calendar} co grupo {group}", "You unshared calendar {calendar} from group {group}" : "Vostede deixou de compartir o calendario {calendar} do grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} deixou de compartir o calendario {calendar} do grupo {group}", + "Untitled event" : "Evento sen título", "{actor} created event {event} in calendar {calendar}" : "{actor} creou o evento {event} no calendario {calendar}", "You created event {event} in calendar {calendar}" : "Vostede creou o evento {event} no calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eliminou o evento {event} do calendario {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Onde:", "Description:" : "Descrición:", - "Untitled event" : "Evento sen título", "_%n year_::_%n years_" : ["%n ano","%n anos"], "_%n month_::_%n months_" : ["%n mes","%n meses"], "_%n day_::_%n days_" : ["%n día","%n días"], diff --git a/apps/dav/l10n/gl.json b/apps/dav/l10n/gl.json index 168bc295599..f00a9f4e7ae 100644 --- a/apps/dav/l10n/gl.json +++ b/apps/dav/l10n/gl.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartiu o calendario {calendar} co grupo {group}", "You unshared calendar {calendar} from group {group}" : "Vostede deixou de compartir o calendario {calendar} do grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} deixou de compartir o calendario {calendar} do grupo {group}", + "Untitled event" : "Evento sen título", "{actor} created event {event} in calendar {calendar}" : "{actor} creou o evento {event} no calendario {calendar}", "You created event {event} in calendar {calendar}" : "Vostede creou o evento {event} no calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eliminou o evento {event} do calendario {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Data:", "Where:" : "Onde:", "Description:" : "Descrición:", - "Untitled event" : "Evento sen título", "_%n year_::_%n years_" : ["%n ano","%n anos"], "_%n month_::_%n months_" : ["%n mes","%n meses"], "_%n day_::_%n days_" : ["%n día","%n días"], diff --git a/apps/dav/l10n/he.js b/apps/dav/l10n/he.js index 0d336501956..1e15402036f 100644 --- a/apps/dav/l10n/he.js +++ b/apps/dav/l10n/he.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "לוח השנה {calendar} שותף עם הקבוצה {group} על ידי {actor}", "You unshared calendar {calendar} from group {group}" : "הפסקת את שיתוף לוח השנה {calendar} עם הקבוצה {group}", "{actor} unshared calendar {calendar} from group {group}" : "השיתוף של לוח השנה {calendar} עם {group} הופסק על ידי {actor}", + "Untitled event" : "אירוע ללא כותרת", "{actor} created event {event} in calendar {calendar}" : "האירוע {event} נוצר בלוח השנה {calendar} על ידי {actor}", "You created event {event} in calendar {calendar}" : "יצרת אירוע {event} בלוח השנה {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "האירוע {event} נמחק מלוח השנה {calendar} על ידי {actor}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "תאריך:", "Where:" : "איפה:", "Description:" : "תיאור:", - "Untitled event" : "אירוע ללא כותרת", "_%n year_::_%n years_" : ["שנה","שנתיים","%n שנים","%n שנים"], "_%n month_::_%n months_" : ["חודש","חודשיים","%n חודשים","%n חודשים"], "_%n day_::_%n days_" : ["יום","יומיים","%n ימים","%n ימים"], diff --git a/apps/dav/l10n/he.json b/apps/dav/l10n/he.json index b6625202618..f344047fa78 100644 --- a/apps/dav/l10n/he.json +++ b/apps/dav/l10n/he.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "לוח השנה {calendar} שותף עם הקבוצה {group} על ידי {actor}", "You unshared calendar {calendar} from group {group}" : "הפסקת את שיתוף לוח השנה {calendar} עם הקבוצה {group}", "{actor} unshared calendar {calendar} from group {group}" : "השיתוף של לוח השנה {calendar} עם {group} הופסק על ידי {actor}", + "Untitled event" : "אירוע ללא כותרת", "{actor} created event {event} in calendar {calendar}" : "האירוע {event} נוצר בלוח השנה {calendar} על ידי {actor}", "You created event {event} in calendar {calendar}" : "יצרת אירוע {event} בלוח השנה {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "האירוע {event} נמחק מלוח השנה {calendar} על ידי {actor}", @@ -47,7 +48,6 @@ "Date:" : "תאריך:", "Where:" : "איפה:", "Description:" : "תיאור:", - "Untitled event" : "אירוע ללא כותרת", "_%n year_::_%n years_" : ["שנה","שנתיים","%n שנים","%n שנים"], "_%n month_::_%n months_" : ["חודש","חודשיים","%n חודשים","%n חודשים"], "_%n day_::_%n days_" : ["יום","יומיים","%n ימים","%n ימים"], diff --git a/apps/dav/l10n/hr.js b/apps/dav/l10n/hr.js index 047ce219120..fcb376918ff 100644 --- a/apps/dav/l10n/hr.js +++ b/apps/dav/l10n/hr.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} dijeli kalendar {calendar} s grupom {group}", "You unshared calendar {calendar} from group {group}" : "Više ne dijelite kalendar {calendar} s grupom {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} više ne dijeli kalendar {calendar} s grupom {group}", + "Untitled event" : "Događaj bez naslova", "{actor} created event {event} in calendar {calendar}" : "{actor} je stvorio događaj {event} u kalendaru {calendar}", "You created event {event} in calendar {calendar}" : "Stvorili ste događaj {event} u kalendaru {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} je izbrisao događaj {event} iz kalendara {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Datum:", "Where:" : "Gdje:", "Description:" : "Opis:", - "Untitled event" : "Događaj bez naslova", "_%n year_::_%n years_" : ["%n godina","%n godina","%n godina"], "_%n month_::_%n months_" : ["%n mjesec","%n mjeseci","%n mjeseci"], "_%n day_::_%n days_" : ["%n dan","%n dana","%n dana"], diff --git a/apps/dav/l10n/hr.json b/apps/dav/l10n/hr.json index d717a37a4a6..0956dcb6afb 100644 --- a/apps/dav/l10n/hr.json +++ b/apps/dav/l10n/hr.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} dijeli kalendar {calendar} s grupom {group}", "You unshared calendar {calendar} from group {group}" : "Više ne dijelite kalendar {calendar} s grupom {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} više ne dijeli kalendar {calendar} s grupom {group}", + "Untitled event" : "Događaj bez naslova", "{actor} created event {event} in calendar {calendar}" : "{actor} je stvorio događaj {event} u kalendaru {calendar}", "You created event {event} in calendar {calendar}" : "Stvorili ste događaj {event} u kalendaru {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} je izbrisao događaj {event} iz kalendara {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Datum:", "Where:" : "Gdje:", "Description:" : "Opis:", - "Untitled event" : "Događaj bez naslova", "_%n year_::_%n years_" : ["%n godina","%n godina","%n godina"], "_%n month_::_%n months_" : ["%n mjesec","%n mjeseci","%n mjeseci"], "_%n day_::_%n days_" : ["%n dan","%n dana","%n dana"], diff --git a/apps/dav/l10n/hu.js b/apps/dav/l10n/hu.js index 8ed50e1dbc3..6ef5eeebe67 100644 --- a/apps/dav/l10n/hu.js +++ b/apps/dav/l10n/hu.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} megosztotta a(z) {calendar} naptárt a következő csoporttal: {group}", "You unshared calendar {calendar} from group {group}" : "Visszavonta a(z) {calendar} naptár magosztását a következő csoporttól: {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} visszavonta a(z) {calendar} naptár megosztását a következő csoporttól: {group}", + "Untitled event" : "Névtelen esemény", "{actor} created event {event} in calendar {calendar}" : "{actor} létrehozta a(z) {event} eseményt a következő naptárban: {calendar}", "You created event {event} in calendar {calendar}" : "Létrehozta a(z) {event} eseményt a következő naptárban: {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} törölte a(z) {event} eseményt a következő naptárból: {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Dátum:", "Where:" : "Hol:", "Description:" : "Leírás:", - "Untitled event" : "Névtelen esemény", "_%n year_::_%n years_" : ["%n év","%n év"], "_%n month_::_%n months_" : ["%n hónap","%n hónap"], "_%n day_::_%n days_" : ["%n nap","%n nap"], @@ -156,6 +156,9 @@ OC.L10N.register( "Saturday" : "Szombat", "Sunday" : "Vasárnap", "Save" : "Mentés", + "Failed to load availability" : "Az elérhetőség betöltése sikertelen", + "Saved availability" : "Elérhetőség mentve", + "Failed to save availability" : "Az elérhetőség mentése sikertelen", "Calendar server" : "Naptárkiszolgáló", "Send invitations to attendees" : "Meghívó küldése a résztvevőknek", "Automatically generate a birthday calendar" : "Születésnapokat tartalmazó naptár automatikus létrehozása", diff --git a/apps/dav/l10n/hu.json b/apps/dav/l10n/hu.json index 4eb239a2502..b6907f61630 100644 --- a/apps/dav/l10n/hu.json +++ b/apps/dav/l10n/hu.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} megosztotta a(z) {calendar} naptárt a következő csoporttal: {group}", "You unshared calendar {calendar} from group {group}" : "Visszavonta a(z) {calendar} naptár magosztását a következő csoporttól: {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} visszavonta a(z) {calendar} naptár megosztását a következő csoporttól: {group}", + "Untitled event" : "Névtelen esemény", "{actor} created event {event} in calendar {calendar}" : "{actor} létrehozta a(z) {event} eseményt a következő naptárban: {calendar}", "You created event {event} in calendar {calendar}" : "Létrehozta a(z) {event} eseményt a következő naptárban: {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} törölte a(z) {event} eseményt a következő naptárból: {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Dátum:", "Where:" : "Hol:", "Description:" : "Leírás:", - "Untitled event" : "Névtelen esemény", "_%n year_::_%n years_" : ["%n év","%n év"], "_%n month_::_%n months_" : ["%n hónap","%n hónap"], "_%n day_::_%n days_" : ["%n nap","%n nap"], @@ -154,6 +154,9 @@ "Saturday" : "Szombat", "Sunday" : "Vasárnap", "Save" : "Mentés", + "Failed to load availability" : "Az elérhetőség betöltése sikertelen", + "Saved availability" : "Elérhetőség mentve", + "Failed to save availability" : "Az elérhetőség mentése sikertelen", "Calendar server" : "Naptárkiszolgáló", "Send invitations to attendees" : "Meghívó küldése a résztvevőknek", "Automatically generate a birthday calendar" : "Születésnapokat tartalmazó naptár automatikus létrehozása", diff --git a/apps/dav/l10n/is.js b/apps/dav/l10n/is.js index 2032bb7d5b3..6e03824ae14 100644 --- a/apps/dav/l10n/is.js +++ b/apps/dav/l10n/is.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} deildi dagatalinu {calendar} með hópnum {group}", "You unshared calendar {calendar} from group {group}" : "Þú tókst af deilingu á dagatalinu {calendar} frá hópnum {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} tók af deilingu á dagatalinu {calendar} frá hópnum {group}", + "Untitled event" : "Ónefndur atburður", "{actor} created event {event} in calendar {calendar}" : "{actor} bjó til atburðinn {event} í dagatalinu {calendar}", "You created event {event} in calendar {calendar}" : "Þú bjóst til atburðinn {event} í dagatalinu {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eyddi atburðinum {event} úr dagatalinu {calendar}", @@ -48,7 +49,6 @@ OC.L10N.register( "Date:" : "Dagsetning:", "Where:" : "Hvar:", "Description:" : "Lýsing:", - "Untitled event" : "Ónefndur atburður", "_%n year_::_%n years_" : ["%n ár","%n ár"], "_%n month_::_%n months_" : ["%n mánuður","%n mánuðir"], "_%n day_::_%n days_" : ["%n dagur","%n dagar"], diff --git a/apps/dav/l10n/is.json b/apps/dav/l10n/is.json index d17d83e207e..d7b6bda37f6 100644 --- a/apps/dav/l10n/is.json +++ b/apps/dav/l10n/is.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} deildi dagatalinu {calendar} með hópnum {group}", "You unshared calendar {calendar} from group {group}" : "Þú tókst af deilingu á dagatalinu {calendar} frá hópnum {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} tók af deilingu á dagatalinu {calendar} frá hópnum {group}", + "Untitled event" : "Ónefndur atburður", "{actor} created event {event} in calendar {calendar}" : "{actor} bjó til atburðinn {event} í dagatalinu {calendar}", "You created event {event} in calendar {calendar}" : "Þú bjóst til atburðinn {event} í dagatalinu {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eyddi atburðinum {event} úr dagatalinu {calendar}", @@ -46,7 +47,6 @@ "Date:" : "Dagsetning:", "Where:" : "Hvar:", "Description:" : "Lýsing:", - "Untitled event" : "Ónefndur atburður", "_%n year_::_%n years_" : ["%n ár","%n ár"], "_%n month_::_%n months_" : ["%n mánuður","%n mánuðir"], "_%n day_::_%n days_" : ["%n dagur","%n dagar"], diff --git a/apps/dav/l10n/it.js b/apps/dav/l10n/it.js index b972ae02bff..1d90a506fe8 100644 --- a/apps/dav/l10n/it.js +++ b/apps/dav/l10n/it.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} ha condiviso il calendario {calendar} con il gruppo {group}", "You unshared calendar {calendar} from group {group}" : "Hai rimosso la condivisione del calendario {calendar} con il gruppo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} ha rimosso la condivisione del calendario {calendar} con il gruppo {group}", + "Untitled event" : "Evento senza titolo", "{actor} created event {event} in calendar {calendar}" : "{actor} ha creato l'evento {event} nel calendario {calendar}", "You created event {event} in calendar {calendar}" : "Hai creato l'evento {event} nel calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ha eliminato l'evento {event} dal calendario {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Dove:", "Description:" : "Descrizione:", - "Untitled event" : "Evento senza titolo", "_%n year_::_%n years_" : ["%n anno","%n anni","%n anni"], "_%n month_::_%n months_" : ["%n mese","%n mesi","%n mesi"], "_%n day_::_%n days_" : ["%n giorno","%n giorni","%n giorni"], diff --git a/apps/dav/l10n/it.json b/apps/dav/l10n/it.json index f7572c7b649..5bbdb84d88f 100644 --- a/apps/dav/l10n/it.json +++ b/apps/dav/l10n/it.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} ha condiviso il calendario {calendar} con il gruppo {group}", "You unshared calendar {calendar} from group {group}" : "Hai rimosso la condivisione del calendario {calendar} con il gruppo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} ha rimosso la condivisione del calendario {calendar} con il gruppo {group}", + "Untitled event" : "Evento senza titolo", "{actor} created event {event} in calendar {calendar}" : "{actor} ha creato l'evento {event} nel calendario {calendar}", "You created event {event} in calendar {calendar}" : "Hai creato l'evento {event} nel calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ha eliminato l'evento {event} dal calendario {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Data:", "Where:" : "Dove:", "Description:" : "Descrizione:", - "Untitled event" : "Evento senza titolo", "_%n year_::_%n years_" : ["%n anno","%n anni","%n anni"], "_%n month_::_%n months_" : ["%n mese","%n mesi","%n mesi"], "_%n day_::_%n days_" : ["%n giorno","%n giorni","%n giorni"], diff --git a/apps/dav/l10n/ja.js b/apps/dav/l10n/ja.js index 1415a38c9c9..07c1086f404 100644 --- a/apps/dav/l10n/ja.js +++ b/apps/dav/l10n/ja.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : " {actor}がカレンダー{calendar} を グループ{group} と共有しました", "You unshared calendar {calendar} from group {group}" : "グループ{group}からカレンダー{calendar}の共有を解除しました", "{actor} unshared calendar {calendar} from group {group}" : "{actor}がグループ{group}からカレンダー{calendar}の共有を解除しました", + "Untitled event" : "無題のイベント", "{actor} created event {event} in calendar {calendar}" : "{actor}はカレンダー {calendar} のイベント{event}を作成しました", "You created event {event} in calendar {calendar}" : "カレンダー {calendar} のイベント{event}を作成しました", "{actor} deleted event {event} from calendar {calendar}" : "{actor}はカレンダー {calendar} のイベント{event}を削除しました", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "日付:", "Where:" : "場所:", "Description:" : "説明:", - "Untitled event" : "無題のイベント", "_%n year_::_%n years_" : ["%n年"], "_%n month_::_%n months_" : ["%nヶ月"], "_%n day_::_%n days_" : ["%n日"], diff --git a/apps/dav/l10n/ja.json b/apps/dav/l10n/ja.json index 46b1babf468..46748402cd9 100644 --- a/apps/dav/l10n/ja.json +++ b/apps/dav/l10n/ja.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : " {actor}がカレンダー{calendar} を グループ{group} と共有しました", "You unshared calendar {calendar} from group {group}" : "グループ{group}からカレンダー{calendar}の共有を解除しました", "{actor} unshared calendar {calendar} from group {group}" : "{actor}がグループ{group}からカレンダー{calendar}の共有を解除しました", + "Untitled event" : "無題のイベント", "{actor} created event {event} in calendar {calendar}" : "{actor}はカレンダー {calendar} のイベント{event}を作成しました", "You created event {event} in calendar {calendar}" : "カレンダー {calendar} のイベント{event}を作成しました", "{actor} deleted event {event} from calendar {calendar}" : "{actor}はカレンダー {calendar} のイベント{event}を削除しました", @@ -52,7 +53,6 @@ "Date:" : "日付:", "Where:" : "場所:", "Description:" : "説明:", - "Untitled event" : "無題のイベント", "_%n year_::_%n years_" : ["%n年"], "_%n month_::_%n months_" : ["%nヶ月"], "_%n day_::_%n days_" : ["%n日"], diff --git a/apps/dav/l10n/ko.js b/apps/dav/l10n/ko.js index 1b8d00636d1..9bb56bd1782 100644 --- a/apps/dav/l10n/ko.js +++ b/apps/dav/l10n/ko.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유함", "You unshared calendar {calendar} from group {group}" : "달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", "{actor} unshared calendar {calendar} from group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", + "Untitled event" : "제목없는 이벤트", "{actor} created event {event} in calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에 생성함", "You created event {event} in calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에 생성함", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에서 삭제함", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "날짜:", "Where:" : "장소:", "Description:" : "설명:", - "Untitled event" : "제목없는 이벤트", "_%n year_::_%n years_" : ["%n년"], "_%n month_::_%n months_" : ["%d개월"], "_%n day_::_%n days_" : ["%n일"], diff --git a/apps/dav/l10n/ko.json b/apps/dav/l10n/ko.json index 149394220c7..e4ee28abcbc 100644 --- a/apps/dav/l10n/ko.json +++ b/apps/dav/l10n/ko.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유함", "You unshared calendar {calendar} from group {group}" : "달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", "{actor} unshared calendar {calendar} from group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", + "Untitled event" : "제목없는 이벤트", "{actor} created event {event} in calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에 생성함", "You created event {event} in calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에 생성함", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에서 삭제함", @@ -52,7 +53,6 @@ "Date:" : "날짜:", "Where:" : "장소:", "Description:" : "설명:", - "Untitled event" : "제목없는 이벤트", "_%n year_::_%n years_" : ["%n년"], "_%n month_::_%n months_" : ["%d개월"], "_%n day_::_%n days_" : ["%n일"], diff --git a/apps/dav/l10n/lt_LT.js b/apps/dav/l10n/lt_LT.js index 759cf679524..1b060dbd492 100644 --- a/apps/dav/l10n/lt_LT.js +++ b/apps/dav/l10n/lt_LT.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} pradėjo bendrinti kalendorių {calendar} su grupe {group}", "You unshared calendar {calendar} from group {group}" : "Jūs nustojote bendrinti kalendorių {calendar} su grupe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} nustojo bendrinti kalendorių {calendar} su grupe {group}", + "Untitled event" : "Įvykis be pavadinimo", "{actor} created event {event} in calendar {calendar}" : "{actor} kalendoriuje {calendar} sukūrė įvykį {event}", "You created event {event} in calendar {calendar}" : "Jūs kalendoriuje {calendar} sukūrėte įvykį {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ištrynė įvykį {event} iš kalendoriaus {calendar}", @@ -53,7 +54,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Kur:", "Description:" : "Aprašas:", - "Untitled event" : "Įvykis be pavadinimo", "_%n year_::_%n years_" : ["%n metai","%n metai","%n metų","%n metai"], "_%n month_::_%n months_" : ["%n mėnesis","%n mėnesiai","%n mėnesių","%n mėnesis"], "_%n day_::_%n days_" : ["%n diena","%n dienos","%n dienų","%n diena"], diff --git a/apps/dav/l10n/lt_LT.json b/apps/dav/l10n/lt_LT.json index 6803eecef9d..0b6d8f25c1c 100644 --- a/apps/dav/l10n/lt_LT.json +++ b/apps/dav/l10n/lt_LT.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} pradėjo bendrinti kalendorių {calendar} su grupe {group}", "You unshared calendar {calendar} from group {group}" : "Jūs nustojote bendrinti kalendorių {calendar} su grupe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} nustojo bendrinti kalendorių {calendar} su grupe {group}", + "Untitled event" : "Įvykis be pavadinimo", "{actor} created event {event} in calendar {calendar}" : "{actor} kalendoriuje {calendar} sukūrė įvykį {event}", "You created event {event} in calendar {calendar}" : "Jūs kalendoriuje {calendar} sukūrėte įvykį {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} ištrynė įvykį {event} iš kalendoriaus {calendar}", @@ -51,7 +52,6 @@ "Date:" : "Data:", "Where:" : "Kur:", "Description:" : "Aprašas:", - "Untitled event" : "Įvykis be pavadinimo", "_%n year_::_%n years_" : ["%n metai","%n metai","%n metų","%n metai"], "_%n month_::_%n months_" : ["%n mėnesis","%n mėnesiai","%n mėnesių","%n mėnesis"], "_%n day_::_%n days_" : ["%n diena","%n dienos","%n dienų","%n diena"], diff --git a/apps/dav/l10n/mk.js b/apps/dav/l10n/mk.js index 95b8683df38..d7f9310f519 100644 --- a/apps/dav/l10n/mk.js +++ b/apps/dav/l10n/mk.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} со група {group}", "You unshared calendar {calendar} from group {group}" : "Отстранивте споделување на календар {calendar} од група {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} отстрани споделување на календар {calendar} од група {group}", + "Untitled event" : "Неименуван настан", "{actor} created event {event} in calendar {calendar}" : "{actor} креираше настан {event} во календар {calendar}", "You created event {event} in calendar {calendar}" : "Креиравте настан {event} во календар {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} избриша настан {event} од календар {calendar}", @@ -52,7 +53,6 @@ OC.L10N.register( "Date:" : "Датум:", "Where:" : "Каде: ", "Description:" : "Опис:", - "Untitled event" : "Неименуван настан", "_%n year_::_%n years_" : ["една година","%n години"], "_%n month_::_%n months_" : ["еден месец","%n месеци"], "_%n day_::_%n days_" : ["еден ден","%n дена"], diff --git a/apps/dav/l10n/mk.json b/apps/dav/l10n/mk.json index a858e30132b..f37a3724984 100644 --- a/apps/dav/l10n/mk.json +++ b/apps/dav/l10n/mk.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} со група {group}", "You unshared calendar {calendar} from group {group}" : "Отстранивте споделување на календар {calendar} од група {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} отстрани споделување на календар {calendar} од група {group}", + "Untitled event" : "Неименуван настан", "{actor} created event {event} in calendar {calendar}" : "{actor} креираше настан {event} во календар {calendar}", "You created event {event} in calendar {calendar}" : "Креиравте настан {event} во календар {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} избриша настан {event} од календар {calendar}", @@ -50,7 +51,6 @@ "Date:" : "Датум:", "Where:" : "Каде: ", "Description:" : "Опис:", - "Untitled event" : "Неименуван настан", "_%n year_::_%n years_" : ["една година","%n години"], "_%n month_::_%n months_" : ["еден месец","%n месеци"], "_%n day_::_%n days_" : ["еден ден","%n дена"], diff --git a/apps/dav/l10n/nb.js b/apps/dav/l10n/nb.js index 83b6a368d30..b2169406345 100644 --- a/apps/dav/l10n/nb.js +++ b/apps/dav/l10n/nb.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppe {group}", "You unshared calendar {calendar} from group {group}" : "Du opphevde deling av kalenderen {calendar} med gruppe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} opphevde deling av kalenderen {calendar} med gruppe {group}", + "Untitled event" : "Hendelse uten tittel", "{actor} created event {event} in calendar {calendar}" : "{actor} opprettet en hendelse {event} i kalenderen {calendar}", "You created event {event} in calendar {calendar}" : "Du opprettet en hendelse {event} i kalenderen {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} slettet hendelsen {event} fra kalenderen {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Dato:", "Where:" : "Hvor:", "Description:" : "Beskrivelse:", - "Untitled event" : "Hendelse uten tittel", "_%n year_::_%n years_" : ["%n år","%n år"], "_%n month_::_%n months_" : ["%n måned","%n måneder"], "_%n day_::_%n days_" : ["%n dag","%n dager"], diff --git a/apps/dav/l10n/nb.json b/apps/dav/l10n/nb.json index 2d18c5b28c6..9998d2be238 100644 --- a/apps/dav/l10n/nb.json +++ b/apps/dav/l10n/nb.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppe {group}", "You unshared calendar {calendar} from group {group}" : "Du opphevde deling av kalenderen {calendar} med gruppe {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} opphevde deling av kalenderen {calendar} med gruppe {group}", + "Untitled event" : "Hendelse uten tittel", "{actor} created event {event} in calendar {calendar}" : "{actor} opprettet en hendelse {event} i kalenderen {calendar}", "You created event {event} in calendar {calendar}" : "Du opprettet en hendelse {event} i kalenderen {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} slettet hendelsen {event} fra kalenderen {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Dato:", "Where:" : "Hvor:", "Description:" : "Beskrivelse:", - "Untitled event" : "Hendelse uten tittel", "_%n year_::_%n years_" : ["%n år","%n år"], "_%n month_::_%n months_" : ["%n måned","%n måneder"], "_%n day_::_%n days_" : ["%n dag","%n dager"], diff --git a/apps/dav/l10n/nl.js b/apps/dav/l10n/nl.js index 8d4f56ae2b2..1b4962315b0 100644 --- a/apps/dav/l10n/nl.js +++ b/apps/dav/l10n/nl.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} deelde agenda {calendar} met groep {group}", "You unshared calendar {calendar} from group {group}" : "Je stopte het delen van agenda {calendar} van groep {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} stopte het delen van agenda {calendar} met groep {group}", + "Untitled event" : "Afspraken zonder naam", "{actor} created event {event} in calendar {calendar}" : "{actor} creëerde afspraak {event} in agenda {calendar}", "You created event {event} in calendar {calendar}" : "Je creëerde afspraak {event} in agenda {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} verwijderde afspraak {event} uit agenda {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Datum", "Where:" : "Waar:", "Description:" : "Omschrijving:", - "Untitled event" : "Afspraken zonder naam", "_%n year_::_%n years_" : ["%n jaar","%n jaar"], "_%n month_::_%n months_" : ["%n maand","%n maanden"], "_%n day_::_%n days_" : ["%n dag","%n dagen"], diff --git a/apps/dav/l10n/nl.json b/apps/dav/l10n/nl.json index c4651d31984..49a1822d156 100644 --- a/apps/dav/l10n/nl.json +++ b/apps/dav/l10n/nl.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} deelde agenda {calendar} met groep {group}", "You unshared calendar {calendar} from group {group}" : "Je stopte het delen van agenda {calendar} van groep {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} stopte het delen van agenda {calendar} met groep {group}", + "Untitled event" : "Afspraken zonder naam", "{actor} created event {event} in calendar {calendar}" : "{actor} creëerde afspraak {event} in agenda {calendar}", "You created event {event} in calendar {calendar}" : "Je creëerde afspraak {event} in agenda {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} verwijderde afspraak {event} uit agenda {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Datum", "Where:" : "Waar:", "Description:" : "Omschrijving:", - "Untitled event" : "Afspraken zonder naam", "_%n year_::_%n years_" : ["%n jaar","%n jaar"], "_%n month_::_%n months_" : ["%n maand","%n maanden"], "_%n day_::_%n days_" : ["%n dag","%n dagen"], diff --git a/apps/dav/l10n/pl.js b/apps/dav/l10n/pl.js index 9fdf7171906..a66f5a394da 100644 --- a/apps/dav/l10n/pl.js +++ b/apps/dav/l10n/pl.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} udostępnił kalendarz {calendar} dla grupy {group}", "You unshared calendar {calendar} from group {group}" : "Zakończyłeś udostępnianie kalendarza {calendar} dla grupy {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} zakończył udostępnianie kalendarza {calendar} dla grupy {group} .", + "Untitled event" : "Wydarzenie bez tytułu", "{actor} created event {event} in calendar {calendar}" : "{actor} utworzył wydarzenie {event} w kalendarzu {calendar}", "You created event {event} in calendar {calendar}" : "Utworzyłeś wydarzenie {event} w kalendarzu {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} usunął wydarzenie {event} z kalendarza {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Gdzie:", "Description:" : "Opis:", - "Untitled event" : "Wydarzenie bez tytułu", "_%n year_::_%n years_" : ["%n rok","%n lata","%n lat","%n lat"], "_%n month_::_%n months_" : ["%n miesiąc","%n miesiące","%n miesięcy","%n miesięcy"], "_%n day_::_%n days_" : ["%n dzień","%n dni","%n dni","%n dni"], diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json index 5315c3b36ed..c6096000fad 100644 --- a/apps/dav/l10n/pl.json +++ b/apps/dav/l10n/pl.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} udostępnił kalendarz {calendar} dla grupy {group}", "You unshared calendar {calendar} from group {group}" : "Zakończyłeś udostępnianie kalendarza {calendar} dla grupy {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} zakończył udostępnianie kalendarza {calendar} dla grupy {group} .", + "Untitled event" : "Wydarzenie bez tytułu", "{actor} created event {event} in calendar {calendar}" : "{actor} utworzył wydarzenie {event} w kalendarzu {calendar}", "You created event {event} in calendar {calendar}" : "Utworzyłeś wydarzenie {event} w kalendarzu {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} usunął wydarzenie {event} z kalendarza {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Data:", "Where:" : "Gdzie:", "Description:" : "Opis:", - "Untitled event" : "Wydarzenie bez tytułu", "_%n year_::_%n years_" : ["%n rok","%n lata","%n lat","%n lat"], "_%n month_::_%n months_" : ["%n miesiąc","%n miesiące","%n miesięcy","%n miesięcy"], "_%n day_::_%n days_" : ["%n dzień","%n dni","%n dni","%n dni"], diff --git a/apps/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js index 6326761bdd4..57d665cc064 100644 --- a/apps/dav/l10n/pt_BR.js +++ b/apps/dav/l10n/pt_BR.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} compartilhou o calendário {calendar} com o grupo {group}", "You unshared calendar {calendar} from group {group}" : "Você descompartilhou o calendário {calendar} do grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} descompartilhou o calendário {calendar} do grupo {group}", + "Untitled event" : "Evento sem título", "{actor} created event {event} in calendar {calendar}" : "{actor} criou o evento {event} no calendário {calendar}", "You created event {event} in calendar {calendar}" : "Você criou o evento {event} no calendário {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} excluiu o evento {event} do calendário {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Onde:", "Description:" : "Descrição:", - "Untitled event" : "Evento sem título", "_%n year_::_%n years_" : ["%n ano","%n anos","%n anos"], "_%n month_::_%n months_" : ["%n mês","%n meses","%n meses"], "_%n day_::_%n days_" : ["%n dia","%n dias","%n dias"], diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json index 0d3ec95709f..8cf7a50ab24 100644 --- a/apps/dav/l10n/pt_BR.json +++ b/apps/dav/l10n/pt_BR.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartilhou o calendário {calendar} com o grupo {group}", "You unshared calendar {calendar} from group {group}" : "Você descompartilhou o calendário {calendar} do grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} descompartilhou o calendário {calendar} do grupo {group}", + "Untitled event" : "Evento sem título", "{actor} created event {event} in calendar {calendar}" : "{actor} criou o evento {event} no calendário {calendar}", "You created event {event} in calendar {calendar}" : "Você criou o evento {event} no calendário {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} excluiu o evento {event} do calendário {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Data:", "Where:" : "Onde:", "Description:" : "Descrição:", - "Untitled event" : "Evento sem título", "_%n year_::_%n years_" : ["%n ano","%n anos","%n anos"], "_%n month_::_%n months_" : ["%n mês","%n meses","%n meses"], "_%n day_::_%n days_" : ["%n dia","%n dias","%n dias"], diff --git a/apps/dav/l10n/ru.js b/apps/dav/l10n/ru.js index 9f61a676680..08915d20998 100644 --- a/apps/dav/l10n/ru.js +++ b/apps/dav/l10n/ru.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} предоставил(а) группе {group} общий доступ к календарю «{calendar}»", "You unshared calendar {calendar} from group {group}" : "Вы закрыли группе {group} общий доступ к календарю «{calendar}»", "{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл(а) группе {group} общий доступ к календарю «{calendar}»", + "Untitled event" : "Событие без названия", "{actor} created event {event} in calendar {calendar}" : "{actor} создал(а) событие «{event}» в календаре «{calendar}»", "You created event {event} in calendar {calendar}" : "Вы создали событие «{event}» в календаре «{calendar}»", "{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил(а) событие «{event}» из календаря «{calendar}»", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Дата:", "Where:" : "Где:", "Description:" : "Описание:", - "Untitled event" : "Событие без названия", "_%n year_::_%n years_" : ["%n год","%n года","%n лет","%n лет"], "_%n month_::_%n months_" : ["%n месяц","%n месяца","%n месяцев","%n месяцев"], "_%n day_::_%n days_" : ["%n день","%n дня","%n дней","%n дней"], diff --git a/apps/dav/l10n/ru.json b/apps/dav/l10n/ru.json index 76b46d546a1..9d528534424 100644 --- a/apps/dav/l10n/ru.json +++ b/apps/dav/l10n/ru.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} предоставил(а) группе {group} общий доступ к календарю «{calendar}»", "You unshared calendar {calendar} from group {group}" : "Вы закрыли группе {group} общий доступ к календарю «{calendar}»", "{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл(а) группе {group} общий доступ к календарю «{calendar}»", + "Untitled event" : "Событие без названия", "{actor} created event {event} in calendar {calendar}" : "{actor} создал(а) событие «{event}» в календаре «{calendar}»", "You created event {event} in calendar {calendar}" : "Вы создали событие «{event}» в календаре «{calendar}»", "{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил(а) событие «{event}» из календаря «{calendar}»", @@ -52,7 +53,6 @@ "Date:" : "Дата:", "Where:" : "Где:", "Description:" : "Описание:", - "Untitled event" : "Событие без названия", "_%n year_::_%n years_" : ["%n год","%n года","%n лет","%n лет"], "_%n month_::_%n months_" : ["%n месяц","%n месяца","%n месяцев","%n месяцев"], "_%n day_::_%n days_" : ["%n день","%n дня","%n дней","%n дней"], diff --git a/apps/dav/l10n/sc.js b/apps/dav/l10n/sc.js index 897f96f71d9..caeaa8654aa 100644 --- a/apps/dav/l10n/sc.js +++ b/apps/dav/l10n/sc.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} at cumpartzidu su calendàriu {calendar} cun su grupu {group}", "You unshared calendar {calendar} from group {group}" : "As annulladu su calendàriu {calendar} cun su grupu {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} at annulladu sa cumpartzidura de su calendàriu {calendar} cun su grupu {group}", + "Untitled event" : "Eventu sena tìtulu ", "{actor} created event {event} in calendar {calendar}" : "{actor} at creadu s'eventu {event} in su calendàriu {calendar}", "You created event {event} in calendar {calendar}" : "As creadu un'eventu {event} in su calendàriu {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} at cantzelladu s'eventu {event} dae su calendàriu {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Data:", "Where:" : "Ue:", "Description:" : "Descritzione:", - "Untitled event" : "Eventu sena tìtulu ", "_%n year_::_%n years_" : ["%n annu","%n annos"], "_%n month_::_%n months_" : ["%n meses","%n meses"], "_%n day_::_%n days_" : ["%n die","%n days"], diff --git a/apps/dav/l10n/sc.json b/apps/dav/l10n/sc.json index 0dd83ab8392..77c14b27fa2 100644 --- a/apps/dav/l10n/sc.json +++ b/apps/dav/l10n/sc.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} at cumpartzidu su calendàriu {calendar} cun su grupu {group}", "You unshared calendar {calendar} from group {group}" : "As annulladu su calendàriu {calendar} cun su grupu {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} at annulladu sa cumpartzidura de su calendàriu {calendar} cun su grupu {group}", + "Untitled event" : "Eventu sena tìtulu ", "{actor} created event {event} in calendar {calendar}" : "{actor} at creadu s'eventu {event} in su calendàriu {calendar}", "You created event {event} in calendar {calendar}" : "As creadu un'eventu {event} in su calendàriu {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} at cantzelladu s'eventu {event} dae su calendàriu {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Data:", "Where:" : "Ue:", "Description:" : "Descritzione:", - "Untitled event" : "Eventu sena tìtulu ", "_%n year_::_%n years_" : ["%n annu","%n annos"], "_%n month_::_%n months_" : ["%n meses","%n meses"], "_%n day_::_%n days_" : ["%n die","%n days"], diff --git a/apps/dav/l10n/sk.js b/apps/dav/l10n/sk.js index d6d1908c05d..7b1a92c26bb 100644 --- a/apps/dav/l10n/sk.js +++ b/apps/dav/l10n/sk.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} vyzdieľal kalendár {calendar} so skupinou {group}", "You unshared calendar {calendar} from group {group}" : "Zrušili ste zdieľanie kalendára {calendar} so skupinou {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} zrušil zdieľanie kalendára {calendar} so skupinou {group}", + "Untitled event" : "Udalosť bez názvu", "{actor} created event {event} in calendar {calendar}" : "{actor} vytvoril udalosť {event} v kalendári {calendar}", "You created event {event} in calendar {calendar}" : "Vytvorili ste udalosť {event} v kalendári {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} zmazal udalosť {event} from z kalendára {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Dátum:", "Where:" : "Kde:", "Description:" : "Popis:", - "Untitled event" : "Udalosť bez názvu", "_%n year_::_%n years_" : ["%n rokov","%n rokov","%n rokov","%n rokov"], "_%n month_::_%n months_" : ["%n mesiac","%n mesiace","%n mesiacov","%n mesiacov"], "_%n day_::_%n days_" : ["%n deň","%n dni","%n dní","%n dní"], diff --git a/apps/dav/l10n/sk.json b/apps/dav/l10n/sk.json index f7c11d213f3..fc9ffea27ad 100644 --- a/apps/dav/l10n/sk.json +++ b/apps/dav/l10n/sk.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} vyzdieľal kalendár {calendar} so skupinou {group}", "You unshared calendar {calendar} from group {group}" : "Zrušili ste zdieľanie kalendára {calendar} so skupinou {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} zrušil zdieľanie kalendára {calendar} so skupinou {group}", + "Untitled event" : "Udalosť bez názvu", "{actor} created event {event} in calendar {calendar}" : "{actor} vytvoril udalosť {event} v kalendári {calendar}", "You created event {event} in calendar {calendar}" : "Vytvorili ste udalosť {event} v kalendári {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} zmazal udalosť {event} from z kalendára {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Dátum:", "Where:" : "Kde:", "Description:" : "Popis:", - "Untitled event" : "Udalosť bez názvu", "_%n year_::_%n years_" : ["%n rokov","%n rokov","%n rokov","%n rokov"], "_%n month_::_%n months_" : ["%n mesiac","%n mesiace","%n mesiacov","%n mesiacov"], "_%n day_::_%n days_" : ["%n deň","%n dni","%n dní","%n dní"], diff --git a/apps/dav/l10n/sl.js b/apps/dav/l10n/sl.js index 7c1f367a468..2758b9eab04 100644 --- a/apps/dav/l10n/sl.js +++ b/apps/dav/l10n/sl.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} omogoči souporabo koledarja {calendar} s skupino {group}", "You unshared calendar {calendar} from group {group}" : "Onemogočite souporabo koledarja {calendar} s skupino {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} onemogoči souporabo koledarja {calendar} s skupino {group}", + "Untitled event" : "Neimenovan dogodek¨", "{actor} created event {event} in calendar {calendar}" : "{actor} ustvari dogodek {event} v koledarju {calendar}", "You created event {event} in calendar {calendar}" : "Ustvarite dogodek {event} v koledarju {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} izbriše dogodek {event} iz koledarja {calendar}", @@ -50,7 +51,6 @@ OC.L10N.register( "Date:" : "Datum:", "Where:" : "Kje:", "Description:" : "Opis:", - "Untitled event" : "Neimenovan dogodek¨", "_%n year_::_%n years_" : ["%n leto","%n leti","%n leta","%n let"], "_%n month_::_%n months_" : ["%n mesec","%n meseca","%n meseci","%n mesecev"], "_%n day_::_%n days_" : ["%n dan","%n dneva","%n dni","%n dni"], diff --git a/apps/dav/l10n/sl.json b/apps/dav/l10n/sl.json index 8703fddc54a..591db863702 100644 --- a/apps/dav/l10n/sl.json +++ b/apps/dav/l10n/sl.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} omogoči souporabo koledarja {calendar} s skupino {group}", "You unshared calendar {calendar} from group {group}" : "Onemogočite souporabo koledarja {calendar} s skupino {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} onemogoči souporabo koledarja {calendar} s skupino {group}", + "Untitled event" : "Neimenovan dogodek¨", "{actor} created event {event} in calendar {calendar}" : "{actor} ustvari dogodek {event} v koledarju {calendar}", "You created event {event} in calendar {calendar}" : "Ustvarite dogodek {event} v koledarju {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} izbriše dogodek {event} iz koledarja {calendar}", @@ -48,7 +49,6 @@ "Date:" : "Datum:", "Where:" : "Kje:", "Description:" : "Opis:", - "Untitled event" : "Neimenovan dogodek¨", "_%n year_::_%n years_" : ["%n leto","%n leti","%n leta","%n let"], "_%n month_::_%n months_" : ["%n mesec","%n meseca","%n meseci","%n mesecev"], "_%n day_::_%n days_" : ["%n dan","%n dneva","%n dni","%n dni"], diff --git a/apps/dav/l10n/sr.js b/apps/dav/l10n/sr.js index b1f8a03574c..4412a3999bf 100644 --- a/apps/dav/l10n/sr.js +++ b/apps/dav/l10n/sr.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} подели календар {calendar} са групом {group}", "You unshared calendar {calendar} from group {group}" : "Укинули сте дељење календара {calendar} са групом {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} укину дељење календара {calendar} са групом {group}", + "Untitled event" : "Неименовани догађај", "{actor} created event {event} in calendar {calendar}" : "{actor} је направио догађај {event} у календару {calendar}", "You created event {event} in calendar {calendar}" : "Креирали сте догађај {event} у календару {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} је обрисао догађај {event} из календара {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Датум:", "Where:" : "Место:", "Description:" : "Опис:", - "Untitled event" : "Неименовани догађај", "_%n year_::_%n years_" : ["%n година","%n године","%n година"], "_%n month_::_%n months_" : ["%n месец","%n месеца","%n месеци"], "_%n day_::_%n days_" : ["%n дан","%n дана","%n дана"], diff --git a/apps/dav/l10n/sr.json b/apps/dav/l10n/sr.json index 19749cf34da..b0d59d93232 100644 --- a/apps/dav/l10n/sr.json +++ b/apps/dav/l10n/sr.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} подели календар {calendar} са групом {group}", "You unshared calendar {calendar} from group {group}" : "Укинули сте дељење календара {calendar} са групом {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} укину дељење календара {calendar} са групом {group}", + "Untitled event" : "Неименовани догађај", "{actor} created event {event} in calendar {calendar}" : "{actor} је направио догађај {event} у календару {calendar}", "You created event {event} in calendar {calendar}" : "Креирали сте догађај {event} у календару {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} је обрисао догађај {event} из календара {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Датум:", "Where:" : "Место:", "Description:" : "Опис:", - "Untitled event" : "Неименовани догађај", "_%n year_::_%n years_" : ["%n година","%n године","%n година"], "_%n month_::_%n months_" : ["%n месец","%n месеца","%n месеци"], "_%n day_::_%n days_" : ["%n дан","%n дана","%n дана"], diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js index 89ec7716a2e..6508c8fc33b 100644 --- a/apps/dav/l10n/sv.js +++ b/apps/dav/l10n/sv.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}", "You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}", + "Untitled event" : "Namnlös händelse", "{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}", "You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} tog bort händelse {event} från kalender {calendar}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Datum:", "Where:" : "Var:", "Description:" : "Beskrivning:", - "Untitled event" : "Namnlös händelse", "_%n year_::_%n years_" : ["%n år","%n år"], "_%n month_::_%n months_" : ["%n månad","%n månader"], "_%n day_::_%n days_" : ["%n dag","%n dagar"], diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json index 1458687f6ee..8040b5f3f34 100644 --- a/apps/dav/l10n/sv.json +++ b/apps/dav/l10n/sv.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}", "You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}", + "Untitled event" : "Namnlös händelse", "{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}", "You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} tog bort händelse {event} från kalender {calendar}", @@ -52,7 +53,6 @@ "Date:" : "Datum:", "Where:" : "Var:", "Description:" : "Beskrivning:", - "Untitled event" : "Namnlös händelse", "_%n year_::_%n years_" : ["%n år","%n år"], "_%n month_::_%n months_" : ["%n månad","%n månader"], "_%n day_::_%n days_" : ["%n dag","%n dagar"], diff --git a/apps/dav/l10n/tr.js b/apps/dav/l10n/tr.js index 6389a90b5e9..bd11fb3dada 100644 --- a/apps/dav/l10n/tr.js +++ b/apps/dav/l10n/tr.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor}, {calendar} takvimini {group} grubu ile paylaştı", "You unshared calendar {calendar} from group {group}" : "{calendar} takviminin {group} grubu ile paylaşımını kaldırdınız", "{actor} unshared calendar {calendar} from group {group}" : "{actor}, {calendar} takviminin {group} grubu ile paylaşımını kaldırdı", + "Untitled event" : "Adsız etkinlik", "{actor} created event {event} in calendar {calendar}" : "{actor}, {calendar} takvimine {event} etkinliğini ekledi", "You created event {event} in calendar {calendar}" : "{calendar} takvimine {event} etkinliğini eklediniz", "{actor} deleted event {event} from calendar {calendar}" : "{actor}, {calendar} takviminden {event} etkinliğini sildi", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "Tarih:", "Where:" : "Yer:", "Description:" : "Açıklama:", - "Untitled event" : "Adsız etkinlik", "_%n year_::_%n years_" : ["%n yıl","%n yıl"], "_%n month_::_%n months_" : ["%n ay","%n ay"], "_%n day_::_%n days_" : ["%n gün","%n gün"], diff --git a/apps/dav/l10n/tr.json b/apps/dav/l10n/tr.json index 1f2d1561812..5767d918f7a 100644 --- a/apps/dav/l10n/tr.json +++ b/apps/dav/l10n/tr.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor}, {calendar} takvimini {group} grubu ile paylaştı", "You unshared calendar {calendar} from group {group}" : "{calendar} takviminin {group} grubu ile paylaşımını kaldırdınız", "{actor} unshared calendar {calendar} from group {group}" : "{actor}, {calendar} takviminin {group} grubu ile paylaşımını kaldırdı", + "Untitled event" : "Adsız etkinlik", "{actor} created event {event} in calendar {calendar}" : "{actor}, {calendar} takvimine {event} etkinliğini ekledi", "You created event {event} in calendar {calendar}" : "{calendar} takvimine {event} etkinliğini eklediniz", "{actor} deleted event {event} from calendar {calendar}" : "{actor}, {calendar} takviminden {event} etkinliğini sildi", @@ -52,7 +53,6 @@ "Date:" : "Tarih:", "Where:" : "Yer:", "Description:" : "Açıklama:", - "Untitled event" : "Adsız etkinlik", "_%n year_::_%n years_" : ["%n yıl","%n yıl"], "_%n month_::_%n months_" : ["%n ay","%n ay"], "_%n day_::_%n days_" : ["%n gün","%n gün"], diff --git a/apps/dav/l10n/uk.js b/apps/dav/l10n/uk.js index 1f4e0a085be..22de431e2e0 100644 --- a/apps/dav/l10n/uk.js +++ b/apps/dav/l10n/uk.js @@ -23,6 +23,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} поширив календар {calendar} з групою {group}", "You unshared calendar {calendar} from group {group}" : "Ви припинили поширення календаря {calendar} з групою {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} припинив поширення календаря {calendar} з групою {group}", + "Untitled event" : "Подія без назви", "{actor} created event {event} in calendar {calendar}" : "{actor} створив подію {event} у календарі {calendar}", "You created event {event} in calendar {calendar}" : "Ви створили подію {event} у календарі {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} вилучив подію {event} з календаря {calendar}", @@ -49,7 +50,6 @@ OC.L10N.register( "Date:" : "Дата:", "Where:" : "Місце:", "Description:" : "Опис:", - "Untitled event" : "Подія без назви", "_%n year_::_%n years_" : ["%n рік","%n років","%n років","%n роки "], "_%n month_::_%n months_" : ["%n місяць","%n місяців","%n місяців","%n місяці"], "_%n day_::_%n days_" : ["%n день","%n днів","%n днів","%n дні"], diff --git a/apps/dav/l10n/uk.json b/apps/dav/l10n/uk.json index 177d7e8f2b0..f1ec48b299b 100644 --- a/apps/dav/l10n/uk.json +++ b/apps/dav/l10n/uk.json @@ -21,6 +21,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} поширив календар {calendar} з групою {group}", "You unshared calendar {calendar} from group {group}" : "Ви припинили поширення календаря {calendar} з групою {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} припинив поширення календаря {calendar} з групою {group}", + "Untitled event" : "Подія без назви", "{actor} created event {event} in calendar {calendar}" : "{actor} створив подію {event} у календарі {calendar}", "You created event {event} in calendar {calendar}" : "Ви створили подію {event} у календарі {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} вилучив подію {event} з календаря {calendar}", @@ -47,7 +48,6 @@ "Date:" : "Дата:", "Where:" : "Місце:", "Description:" : "Опис:", - "Untitled event" : "Подія без назви", "_%n year_::_%n years_" : ["%n рік","%n років","%n років","%n роки "], "_%n month_::_%n months_" : ["%n місяць","%n місяців","%n місяців","%n місяці"], "_%n day_::_%n days_" : ["%n день","%n днів","%n днів","%n дні"], diff --git a/apps/dav/l10n/zh_CN.js b/apps/dav/l10n/zh_CN.js index 64dea9f2d17..f661cd87bf9 100644 --- a/apps/dav/l10n/zh_CN.js +++ b/apps/dav/l10n/zh_CN.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} 通过组 {group} 共享了日历 {calendar}", "You unshared calendar {calendar} from group {group}" : "群组 {group} 取消了你共享的日历 {calendar}", "{actor} unshared calendar {calendar} from group {group}" : "群组 {group} 取消了 {actor} 共享的日历 {calendar}", + "Untitled event" : "未命名事件", "{actor} created event {event} in calendar {calendar}" : "{actor} 在日历 {calendar} 中创建了事件 {event}", "You created event {event} in calendar {calendar}" : "您在日历 {calendar} 中创建了事件 {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 在日历 {calendar} 中删除了事件 {event}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "日期:", "Where:" : "地点:", "Description:" : "描述:", - "Untitled event" : "未命名事件", "_%n year_::_%n years_" : ["%n 年"], "_%n month_::_%n months_" : ["%n 月"], "_%n day_::_%n days_" : ["%n 天"], diff --git a/apps/dav/l10n/zh_CN.json b/apps/dav/l10n/zh_CN.json index 44f361cbedc..77ddaaf5f58 100644 --- a/apps/dav/l10n/zh_CN.json +++ b/apps/dav/l10n/zh_CN.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} 通过组 {group} 共享了日历 {calendar}", "You unshared calendar {calendar} from group {group}" : "群组 {group} 取消了你共享的日历 {calendar}", "{actor} unshared calendar {calendar} from group {group}" : "群组 {group} 取消了 {actor} 共享的日历 {calendar}", + "Untitled event" : "未命名事件", "{actor} created event {event} in calendar {calendar}" : "{actor} 在日历 {calendar} 中创建了事件 {event}", "You created event {event} in calendar {calendar}" : "您在日历 {calendar} 中创建了事件 {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 在日历 {calendar} 中删除了事件 {event}", @@ -52,7 +53,6 @@ "Date:" : "日期:", "Where:" : "地点:", "Description:" : "描述:", - "Untitled event" : "未命名事件", "_%n year_::_%n years_" : ["%n 年"], "_%n month_::_%n months_" : ["%n 月"], "_%n day_::_%n days_" : ["%n 天"], diff --git a/apps/dav/l10n/zh_HK.js b/apps/dav/l10n/zh_HK.js index b7656743fcf..abc214c3cdf 100644 --- a/apps/dav/l10n/zh_HK.js +++ b/apps/dav/l10n/zh_HK.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} 與群組 {group} 分享了日曆 {calendar}", "You unshared calendar {calendar} from group {group}" : "您已停止與群組 {group} 分享日曆 {calendar}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} 從 {group} 群組中取消了分享日曆 {calendar}", + "Untitled event" : "無標題活動", "{actor} created event {event} in calendar {calendar}" : "{actor} 新增了日曆 {calendar} 中的活動 {event}", "You created event {event} in calendar {calendar}" : "您新增了日曆 {calendar} 中的活動 {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 從日曆 {calendar} 中刪除了活動 {event}", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "日期:", "Where:" : "地點:", "Description:" : "描述:", - "Untitled event" : "無標題活動", "_%n year_::_%n years_" : ["%n 年"], "_%n month_::_%n months_" : ["%n 月"], "_%n day_::_%n days_" : ["%n 天"], diff --git a/apps/dav/l10n/zh_HK.json b/apps/dav/l10n/zh_HK.json index 3cae11cedf0..8ca935a748a 100644 --- a/apps/dav/l10n/zh_HK.json +++ b/apps/dav/l10n/zh_HK.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} 與群組 {group} 分享了日曆 {calendar}", "You unshared calendar {calendar} from group {group}" : "您已停止與群組 {group} 分享日曆 {calendar}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} 從 {group} 群組中取消了分享日曆 {calendar}", + "Untitled event" : "無標題活動", "{actor} created event {event} in calendar {calendar}" : "{actor} 新增了日曆 {calendar} 中的活動 {event}", "You created event {event} in calendar {calendar}" : "您新增了日曆 {calendar} 中的活動 {event}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 從日曆 {calendar} 中刪除了活動 {event}", @@ -52,7 +53,6 @@ "Date:" : "日期:", "Where:" : "地點:", "Description:" : "描述:", - "Untitled event" : "無標題活動", "_%n year_::_%n years_" : ["%n 年"], "_%n month_::_%n months_" : ["%n 月"], "_%n day_::_%n days_" : ["%n 天"], diff --git a/apps/dav/l10n/zh_TW.js b/apps/dav/l10n/zh_TW.js index 909673e3a15..d822b523b26 100644 --- a/apps/dav/l10n/zh_TW.js +++ b/apps/dav/l10n/zh_TW.js @@ -25,6 +25,7 @@ OC.L10N.register( "{actor} shared calendar {calendar} with group {group}" : "{actor} 與群組 {group} 分享了日曆 {calendar}", "You unshared calendar {calendar} from group {group}" : "您已停止與群組 {group} 分享日曆 {calendar}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} 已停止與群組 {group} 分享日曆 {calendar}", + "Untitled event" : "未命名活動", "{actor} created event {event} in calendar {calendar}" : "{actor} 在日曆 {calendar} 中建立了 {event} 活動", "You created event {event} in calendar {calendar}" : "您在日曆 {calendar} 中建立了 {event} 活動", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 在日曆 {calendar} 中刪除了 {event} 活動", @@ -54,7 +55,6 @@ OC.L10N.register( "Date:" : "日期:", "Where:" : "地點:", "Description:" : "描述:", - "Untitled event" : "未命名活動", "_%n year_::_%n years_" : ["%n年"], "_%n month_::_%n months_" : ["%n月"], "_%n day_::_%n days_" : ["%n天"], diff --git a/apps/dav/l10n/zh_TW.json b/apps/dav/l10n/zh_TW.json index a134ffb53c4..a0786132472 100644 --- a/apps/dav/l10n/zh_TW.json +++ b/apps/dav/l10n/zh_TW.json @@ -23,6 +23,7 @@ "{actor} shared calendar {calendar} with group {group}" : "{actor} 與群組 {group} 分享了日曆 {calendar}", "You unshared calendar {calendar} from group {group}" : "您已停止與群組 {group} 分享日曆 {calendar}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} 已停止與群組 {group} 分享日曆 {calendar}", + "Untitled event" : "未命名活動", "{actor} created event {event} in calendar {calendar}" : "{actor} 在日曆 {calendar} 中建立了 {event} 活動", "You created event {event} in calendar {calendar}" : "您在日曆 {calendar} 中建立了 {event} 活動", "{actor} deleted event {event} from calendar {calendar}" : "{actor} 在日曆 {calendar} 中刪除了 {event} 活動", @@ -52,7 +53,6 @@ "Date:" : "日期:", "Where:" : "地點:", "Description:" : "描述:", - "Untitled event" : "未命名活動", "_%n year_::_%n years_" : ["%n年"], "_%n month_::_%n months_" : ["%n月"], "_%n day_::_%n days_" : ["%n天"], diff --git a/apps/encryption/tests/Controller/SettingsControllerTest.php b/apps/encryption/tests/Controller/SettingsControllerTest.php index 0576b442f02..219e2c6ae0f 100644 --- a/apps/encryption/tests/Controller/SettingsControllerTest.php +++ b/apps/encryption/tests/Controller/SettingsControllerTest.php @@ -192,15 +192,16 @@ class SettingsControllerTest extends TestCase { ->method('get')->with('loginname')->willReturn('testUser'); $this->userManagerMock - ->expects($this->at(0)) - ->method('checkPassword') - ->with('testUserUid', 'new') - ->willReturn(false); - $this->userManagerMock - ->expects($this->at(1)) + ->expects($this->exactly(2)) ->method('checkPassword') - ->with('testUser', 'new') - ->willReturn(true); + ->withConsecutive( + ['testUserUid', 'new'], + ['testUser', 'new'], + ) + ->willReturnOnConsecutiveCalls( + false, + true, + ); diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php index e5c10dd67e8..126dbec680e 100644 --- a/apps/encryption/tests/Crypto/EncryptAllTest.php +++ b/apps/encryption/tests/Crypto/EncryptAllTest.php @@ -166,9 +166,9 @@ class EncryptAllTest extends TestCase { ->getMock(); $this->util->expects($this->any())->method('isMasterKeyEnabled')->willReturn(false); - $encryptAll->expects($this->at(0))->method('createKeyPairs')->with(); - $encryptAll->expects($this->at(1))->method('outputPasswords')->with(); - $encryptAll->expects($this->at(2))->method('encryptAllUsersFiles')->with(); + $encryptAll->expects($this->once())->method('createKeyPairs')->with(); + $encryptAll->expects($this->once())->method('outputPasswords')->with(); + $encryptAll->expects($this->once())->method('encryptAllUsersFiles')->with(); $encryptAll->encryptAll($this->inputInterface, $this->outputInterface); } @@ -196,7 +196,7 @@ class EncryptAllTest extends TestCase { $this->util->expects($this->any())->method('isMasterKeyEnabled')->willReturn(true); $encryptAll->expects($this->never())->method('createKeyPairs'); $this->keyManager->expects($this->once())->method('validateMasterKey'); - $encryptAll->expects($this->at(0))->method('encryptAllUsersFiles')->with(); + $encryptAll->expects($this->once())->method('encryptAllUsersFiles')->with(); $encryptAll->expects($this->never())->method('outputPasswords'); $encryptAll->encryptAll($this->inputInterface, $this->outputInterface); @@ -277,8 +277,11 @@ class EncryptAllTest extends TestCase { $this->invokePrivate($encryptAll, 'output', [$this->outputInterface]); $this->invokePrivate($encryptAll, 'userPasswords', [['user1' => 'pwd1', 'user2' => 'pwd2']]); - $encryptAll->expects($this->at(0))->method('encryptUsersFiles')->with('user1'); - $encryptAll->expects($this->at(1))->method('encryptUsersFiles')->with('user2'); + $encryptAll->expects($this->exactly(2))->method('encryptUsersFiles') + ->withConsecutive( + ['user1'], + ['user2'], + ); $this->invokePrivate($encryptAll, 'encryptAllUsersFiles'); } @@ -305,16 +308,15 @@ class EncryptAllTest extends TestCase { $this->util->expects($this->any())->method('isMasterKeyEnabled')->willReturn(false); - $this->view->expects($this->at(0))->method('getDirectoryContent') - ->with('/user1/files')->willReturn( + $this->view->expects($this->exactly(2))->method('getDirectoryContent') + ->withConsecutive( + ['/user1/files'], + ['/user1/files/foo'], + )->willReturnOnConsecutiveCalls( [ ['name' => 'foo', 'type' => 'dir'], ['name' => 'bar', 'type' => 'file'], - ] - ); - - $this->view->expects($this->at(3))->method('getDirectoryContent') - ->with('/user1/files/foo')->willReturn( + ], [ ['name' => 'subfile', 'type' => 'file'] ] @@ -330,8 +332,11 @@ class EncryptAllTest extends TestCase { } ); - $encryptAll->expects($this->at(1))->method('encryptFile')->with('/user1/files/bar'); - $encryptAll->expects($this->at(2))->method('encryptFile')->with('/user1/files/foo/subfile'); + $encryptAll->expects($this->exactly(2))->method('encryptFile') + ->withConsecutive( + ['/user1/files/bar'], + ['/user1/files/foo/subfile'], + ); $this->outputInterface->expects($this->any()) ->method('getFormatter') diff --git a/apps/encryption/tests/KeyManagerTest.php b/apps/encryption/tests/KeyManagerTest.php index 882080c9eab..c08f8b576d9 100644 --- a/apps/encryption/tests/KeyManagerTest.php +++ b/apps/encryption/tests/KeyManagerTest.php @@ -287,8 +287,11 @@ class KeyManagerTest extends TestCase { $this->utilMock->expects($this->once())->method('isMasterKeyEnabled') ->willReturn($useMasterKey); - $this->sessionMock->expects($this->at(0))->method('setStatus') - ->with(Session::INIT_EXECUTED); + $this->sessionMock->expects($this->exactly(2))->method('setStatus') + ->withConsecutive( + [Session::INIT_EXECUTED], + [Session::INIT_SUCCESSFUL], + ); $instance->expects($this->any())->method('getMasterKeyId')->willReturn('masterKeyId'); $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword'); @@ -404,15 +407,16 @@ class KeyManagerTest extends TestCase { $this->invokePrivate($this->instance, 'masterKeyId', ['masterKeyId']); - $this->keyStorageMock->expects($this->at(0)) - ->method('getFileKey') - ->with($path, 'fileKey', 'OC_DEFAULT_MODULE') - ->willReturn(true); - - $this->keyStorageMock->expects($this->at(1)) + $this->keyStorageMock->expects($this->exactly(2)) ->method('getFileKey') - ->with($path, $expectedUid . '.shareKey', 'OC_DEFAULT_MODULE') - ->willReturn(true); + ->withConsecutive( + [$path, 'fileKey', 'OC_DEFAULT_MODULE'], + [$path, $expectedUid . '.shareKey', 'OC_DEFAULT_MODULE'], + ) + ->willReturnOnConsecutiveCalls( + true, + true, + ); $this->utilMock->expects($this->any())->method('isMasterKeyEnabled') ->willReturn($isMasterKeyEnabled); diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index 2539247b561..6f1d72f9115 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -56,6 +56,7 @@ use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent as ResourcesLoadAdditionalScriptsEvent; use OCP\EventDispatcher\IEventDispatcher; use OCP\Federation\ICloudIdManager; use OCP\Files\Config\IMountProviderCollection; @@ -131,11 +132,11 @@ class Application extends App implements IBootstrap { $dispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, LegacyBeforeTemplateRenderedListener::class); $dispatcher->addServiceListener(LoadSidebar::class, LoadSidebarListener::class); $dispatcher->addServiceListener(ShareCreatedEvent::class, ShareInteractionListener::class); - $dispatcher->addListener('\OCP\Collaboration\Resources::loadAdditionalScripts', function () { - \OCP\Util::addScript('files_sharing', 'collaboration'); - }); $dispatcher->addServiceListener(ShareCreatedEvent::class, UserShareAcceptanceListener::class); $dispatcher->addServiceListener(UserAddedEvent::class, UserAddedToGroupListener::class); + $dispatcher->addListener(ResourcesLoadAdditionalScriptsEvent::class, function () { + \OCP\Util::addScript('files_sharing', 'collaboration'); + }); // notifications api to accept incoming user shares $oldDispatcher->addListener('OCP\Share::postShare', function (GenericEvent $event) { diff --git a/apps/files_sharing/list.php b/apps/files_sharing/list.php index edcfdc180a6..a4667ad17ad 100644 --- a/apps/files_sharing/list.php +++ b/apps/files_sharing/list.php @@ -26,13 +26,15 @@ use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Files\Event\LoadSidebar; use OCA\Viewer\Event\LoadViewer; -use OCP\EventDispatcher\GenericEvent; +use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent as ResourcesLoadAdditionalScriptsEvent; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IConfig; +use OCP\IUserSession; +use OCP\Server; -$config = \OC::$server->getConfig(); -$userSession = \OC::$server->getUserSession(); -$legacyEventDispatcher = \OC::$server->getEventDispatcher(); -/** @var \OCP\EventDispatcher\IEventDispatcher $eventDispatcher */ -$eventDispatcher = \OC::$server->get(OCP\EventDispatcher\IEventDispatcher::class); +$config = Server::get(IConfig::class); +$userSession = Server::get(IUserSession::class); +$eventDispatcher = Server::get(IEventDispatcher::class); $showgridview = $config->getUserValue($userSession->getUser()->getUID(), 'files', 'show_grid', false); @@ -42,7 +44,7 @@ $tmpl = new OCP\Template('files_sharing', 'list', ''); $tmpl->assign('showgridview', $showgridview); // fire script events -$legacyEventDispatcher->dispatch('\OCP\Collaboration\Resources::loadAdditionalScripts', new GenericEvent()); +$eventDispatcher->dispatchTyped(new ResourcesLoadAdditionalScriptsEvent()); $eventDispatcher->dispatchTyped(new LoadAdditionalScriptsEvent()); $eventDispatcher->dispatchTyped(new LoadSidebar()); diff --git a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php index 55f719b8f88..cc7fcabe5ac 100644 --- a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php +++ b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php @@ -186,19 +186,15 @@ class CleanupRemoteStoragesTest extends TestCase { ->disableOriginalConstructor() ->getMock(); - // - // parent folder, `files`, ´test` and `welcome.txt` => 4 elements - $at = 0; - $output - ->expects($this->at($at++)) - ->method('writeln') - ->with('5 remote storage(s) need(s) to be checked'); $output - ->expects($this->at($at++)) + ->expects($this->any()) ->method('writeln') - ->with('5 remote share(s) exist'); + ->withConsecutive( + ['5 remote storage(s) need(s) to be checked'], + ['5 remote share(s) exist'], + ); $this->cloudIdManager ->expects($this->any()) diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php index 04d2a08b4e6..781372b889e 100644 --- a/apps/files_sharing/tests/Controller/ShareControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php @@ -263,10 +263,17 @@ class ShareControllerTest extends \Test\TestCase { $this->session->method('exists')->with('public_link_authenticated')->willReturn(true); $this->session->method('get')->with('public_link_authenticated')->willReturn('42'); - $this->urlGenerator->expects($this->at(0)) + $this->urlGenerator->expects($this->exactly(3)) ->method('linkToRouteAbsolute') - ->with('files_sharing.sharecontroller.downloadShare', ['token' => 'token', 'filename' => $filename]) - ->willReturn('downloadURL'); + ->withConsecutive( + ['files_sharing.sharecontroller.downloadShare', ['token' => 'token', 'filename' => $filename]], + ['files_sharing.sharecontroller.showShare', ['token' => 'token']], + ['files_sharing.PublicPreview.getPreview', ['token' => 'token', 'x' => 200, 'y' => 200, 'file' => '/'.$filename]], + )->willReturnOnConsecutiveCalls( + 'downloadURL', + 'shareUrl', + 'previewImage', + ); $this->previewManager->method('isMimeSupported')->with('text/plain')->willReturn(true); @@ -343,8 +350,8 @@ class ShareControllerTest extends \Test\TestCase { 'hideFileList' => false, 'shareOwner' => 'ownerDisplay', 'disclaimer' => 'My disclaimer text', - 'shareUrl' => null, - 'previewImage' => null, + 'shareUrl' => 'shareUrl', + 'previewImage' => 'previewImage', 'previewURL' => 'downloadURL', 'note' => $note, 'hideDownload' => false, @@ -414,10 +421,17 @@ class ShareControllerTest extends \Test\TestCase { $this->session->method('exists')->with('public_link_authenticated')->willReturn(true); $this->session->method('get')->with('public_link_authenticated')->willReturn('42'); - $this->urlGenerator->expects($this->at(0)) + $this->urlGenerator->expects($this->exactly(3)) ->method('linkToRouteAbsolute') - ->with('files_sharing.sharecontroller.downloadShare', ['token' => 'token', 'filename' => $filename]) - ->willReturn('downloadURL'); + ->withConsecutive( + ['files_sharing.sharecontroller.downloadShare', ['token' => 'token', 'filename' => $filename]], + ['files_sharing.sharecontroller.showShare', ['token' => 'token']], + ['files_sharing.PublicPreview.getPreview', ['token' => 'token', 'x' => 200, 'y' => 200, 'file' => '/'.$filename]], + )->willReturnOnConsecutiveCalls( + 'downloadURL', + 'shareUrl', + 'previewImage', + ); $this->previewManager->method('isMimeSupported')->with('text/plain')->willReturn(true); @@ -494,8 +508,8 @@ class ShareControllerTest extends \Test\TestCase { 'hideFileList' => false, 'shareOwner' => '', 'disclaimer' => 'My disclaimer text', - 'shareUrl' => null, - 'previewImage' => null, + 'shareUrl' => 'shareUrl', + 'previewImage' => 'previewImage', 'previewURL' => 'downloadURL', 'note' => $note, 'hideDownload' => false, @@ -569,10 +583,17 @@ class ShareControllerTest extends \Test\TestCase { // Even if downloads are disabled the "downloadURL" parameter is // provided to the template, as it is needed to preview audio and GIF // files. - $this->urlGenerator->expects($this->at(0)) + $this->urlGenerator->expects($this->exactly(3)) ->method('linkToRouteAbsolute') - ->with('files_sharing.sharecontroller.downloadShare', ['token' => 'token', 'filename' => $filename]) - ->willReturn('downloadURL'); + ->withConsecutive( + ['files_sharing.sharecontroller.downloadShare', ['token' => 'token', 'filename' => $filename]], + ['files_sharing.sharecontroller.showShare', ['token' => 'token']], + ['files_sharing.PublicPreview.getPreview', ['token' => 'token', 'x' => 200, 'y' => 200, 'file' => '/'.$filename]], + )->willReturnOnConsecutiveCalls( + 'downloadURL', + 'shareUrl', + 'previewImage', + ); $this->previewManager->method('isMimeSupported')->with('text/plain')->willReturn(true); @@ -645,8 +666,8 @@ class ShareControllerTest extends \Test\TestCase { 'hideFileList' => false, 'shareOwner' => 'ownerDisplay', 'disclaimer' => 'My disclaimer text', - 'shareUrl' => null, - 'previewImage' => null, + 'shareUrl' => 'shareUrl', + 'previewImage' => 'previewImage', 'previewURL' => 'downloadURL', 'note' => $note, 'hideDownload' => true, diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php index 307b630970f..0b35e08da2d 100644 --- a/apps/files_sharing/tests/External/ManagerTest.php +++ b/apps/files_sharing/tests/External/ManagerTest.php @@ -231,8 +231,14 @@ class ManagerTest extends TestCase { if ($isGroup) { $this->manager->expects($this->never())->method('tryOCMEndPoint'); } else { - $this->manager->expects($this->at(0))->method('tryOCMEndPoint')->with('http://localhost', 'token1', '2342', 'accept')->willReturn(false); - $this->manager->expects($this->at(1))->method('tryOCMEndPoint')->with('http://localhost', 'token3', '2342', 'decline')->willReturn(false); + $this->manager->expects($this->any())->method('tryOCMEndPoint') + ->withConsecutive( + ['http://localhost', 'token1', '2342', 'accept'], + ['http://localhost', 'token3', '2342', 'decline'], + )->willReturnOnConsecutiveCalls( + false, + false, + ); } // Add a share for "user" @@ -375,12 +381,12 @@ class ManagerTest extends TestCase { ->disableOriginalConstructor()->getMock(); $client2 = $this->getMockBuilder('OCP\Http\Client\IClient') ->disableOriginalConstructor()->getMock(); - $this->clientService->expects($this->at(0)) - ->method('newClient') - ->willReturn($client1); - $this->clientService->expects($this->at(1)) + $this->clientService->expects($this->exactly(2)) ->method('newClient') - ->willReturn($client2); + ->willReturnOnConsecutiveCalls( + $client1, + $client2, + ); $response = $this->createMock(IResponse::class); $response->method('getBody') ->willReturn(json_encode([ @@ -656,7 +662,7 @@ class ManagerTest extends TestCase { $user2Shares = $manager2->getOpenShares(); $this->assertCount(2, $user2Shares); - $this->manager->expects($this->at(0))->method('tryOCMEndPoint')->with('http://localhost', 'token1', '2342', 'decline')->willReturn([]); + $this->manager->expects($this->once())->method('tryOCMEndPoint')->with('http://localhost', 'token1', '2342', 'decline')->willReturn([]); $this->manager->removeUserShares($this->uid); $user1Shares = $this->manager->getOpenShares(); diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php index 00ae847eaac..53bea929def 100644 --- a/apps/files_sharing/tests/MountProviderTest.php +++ b/apps/files_sharing/tests/MountProviderTest.php @@ -141,26 +141,21 @@ class MountProviderTest extends \Test\TestCase { $this->user->expects($this->any()) ->method('getUID') ->willReturn('user1'); - $this->shareManager->expects($this->at(0)) + $this->shareManager->expects($this->exactly(5)) ->method('getSharedWith') - ->with('user1', IShare::TYPE_USER) - ->willReturn($userShares); - $this->shareManager->expects($this->at(1)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_GROUP, null, -1) - ->willReturn($groupShares); - $this->shareManager->expects($this->at(2)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_CIRCLE, null, -1) - ->willReturn($circleShares); - $this->shareManager->expects($this->at(3)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_ROOM, null, -1) - ->willReturn($roomShares); - $this->shareManager->expects($this->at(4)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_DECK, null, -1) - ->willReturn($deckShares); + ->withConsecutive( + ['user1', IShare::TYPE_USER], + ['user1', IShare::TYPE_GROUP, null, -1], + ['user1', IShare::TYPE_CIRCLE, null, -1], + ['user1', IShare::TYPE_ROOM, null, -1], + ['user1', IShare::TYPE_DECK, null, -1], + )->willReturnOnConsecutiveCalls( + $userShares, + $groupShares, + $circleShares, + $roomShares, + $deckShares, + ); $this->shareManager->expects($this->any()) ->method('newShare') ->willReturnCallback(function () use ($rootFolder, $userManager) { @@ -362,26 +357,21 @@ class MountProviderTest extends \Test\TestCase { $circleShares = []; $roomShares = []; $deckShares = []; - $this->shareManager->expects($this->at(0)) + $this->shareManager->expects($this->exactly(5)) ->method('getSharedWith') - ->with('user1', IShare::TYPE_USER) - ->willReturn($userShares); - $this->shareManager->expects($this->at(1)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_GROUP, null, -1) - ->willReturn($groupShares); - $this->shareManager->expects($this->at(2)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_CIRCLE, null, -1) - ->willReturn($circleShares); - $this->shareManager->expects($this->at(3)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_ROOM, null, -1) - ->willReturn($roomShares); - $this->shareManager->expects($this->at(4)) - ->method('getSharedWith') - ->with('user1', IShare::TYPE_DECK, null, -1) - ->willReturn($deckShares); + ->withConsecutive( + ['user1', IShare::TYPE_USER], + ['user1', IShare::TYPE_GROUP, null, -1], + ['user1', IShare::TYPE_CIRCLE, null, -1], + ['user1', IShare::TYPE_ROOM, null, -1], + ['user1', IShare::TYPE_DECK, null, -1], + )->willReturnOnConsecutiveCalls( + $userShares, + $groupShares, + $circleShares, + $roomShares, + $deckShares, + ); $this->shareManager->expects($this->any()) ->method('newShare') ->willReturnCallback(function () use ($rootFolder, $userManager) { diff --git a/apps/settings/l10n/eu.js b/apps/settings/l10n/eu.js index b854647952a..819f5d59b2e 100644 --- a/apps/settings/l10n/eu.js +++ b/apps/settings/l10n/eu.js @@ -258,6 +258,7 @@ OC.L10N.register( "Change scope level of {accountProperty}" : "Aldatu {accountProperty}-ren esparru-maila", "Unable to update federation scope of the primary {accountProperty}" : "Ezin da eguneratu lehen mailako {accountProperty}-ren federazio-esparrua", "Unable to update federation scope of additional {accountProperty}" : "Ezin da eguneratu {accountProperty} gehigarriaren federazio-esparrua", + "Add additional email" : "Gehitu e-posta gehigarria", "Add" : "Gehitu", "You do not have permissions to see the details of this user" : "Ez duzu baimenik erabiltzaile honen xehetasunak ikusteko", "Add new password" : "Gehitu pasahitz berria", diff --git a/apps/settings/l10n/eu.json b/apps/settings/l10n/eu.json index 47566de89f3..91696673c18 100644 --- a/apps/settings/l10n/eu.json +++ b/apps/settings/l10n/eu.json @@ -256,6 +256,7 @@ "Change scope level of {accountProperty}" : "Aldatu {accountProperty}-ren esparru-maila", "Unable to update federation scope of the primary {accountProperty}" : "Ezin da eguneratu lehen mailako {accountProperty}-ren federazio-esparrua", "Unable to update federation scope of additional {accountProperty}" : "Ezin da eguneratu {accountProperty} gehigarriaren federazio-esparrua", + "Add additional email" : "Gehitu e-posta gehigarria", "Add" : "Gehitu", "You do not have permissions to see the details of this user" : "Ez duzu baimenik erabiltzaile honen xehetasunak ikusteko", "Add new password" : "Gehitu pasahitz berria", diff --git a/apps/settings/l10n/hu.js b/apps/settings/l10n/hu.js index 3224b35679f..3ccc4d3378d 100644 --- a/apps/settings/l10n/hu.js +++ b/apps/settings/l10n/hu.js @@ -230,11 +230,18 @@ OC.L10N.register( "Copied!" : "Másolva!", "Copy" : "Másolás", "Could not copy app password. Please copy it manually." : "Nem lehet az alkalmazásjelszót másolni. Másolja át kézileg.", + "Last job execution ran {time}. Something seems wrong." : "Utolsó feladatfuttatás:%s. Valami nincs rendben.", + "Last job ran {relativeTime}." : "Utolsó feladatfuttatás: {relativeTime}.", "Background job didn’t run yet!" : "A háttérfeladat még nem futott le!", + "AJAX" : "AJAX", "Execute one task with each page loaded. Use case: Single user instance." : "Egy feladat végrehajtása minden egyes oldalbetöltésnél. Használati eset: egyfelhasználós példány", + "Webcron" : "Webcron", "cron.php is registered at a webcron service to call cron.php every 5 minutes over HTTP. Use case: Very small instance (1–5 users depending on the usage)." : "A cron.php egy webcron szolgáltatásnál van regisztrálva, hogy 5 percenkenként meghívja a cron.php-t. Használati eset: Nagyon kis példány (1-5 felhasználó, használattól függően).", + "Cron (Recommended)" : "Cron (ajánlott)", "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Ennek futtatásához a PHP POSIX kiterjesztés szükséges. A részletekért lásd a {linkstart}PHP dokumentációt{linkend}.", "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "A rendszer cron szolgáltatásának használata a cron.php fájl 5 percenként meghívásához. Az összes példány esetén ez javasolt.", + "The cron.php needs to be executed by the system user \"{user}\"." : "A cron.php-t „{user}” rendszerfelhasználónak kell végrehajtania.", + "Unable to update background job mode" : "A háttérfeladat módja nem frissíthető", "Profile" : "Profil", "Enable or disable profile by default for new users." : "A profil alapértelmezett engedélyezése vagy letiltása az új felhasználók számára.", "Enable" : "Engedélyezés", @@ -342,6 +349,7 @@ OC.L10N.register( "Updates" : "Frissítések", "App bundles" : "Alkalmazáscsomagok", "Featured apps" : "Kiemelt alkalmazások", + "For the server to work properly, it" : "A kiszolgáló helyes működéséhez fontos, hogy", "Details" : "Részletek", "Changelog" : "Változásnapló", "by {author}\n{license}" : "szerző: {author}\n{license}", diff --git a/apps/settings/l10n/hu.json b/apps/settings/l10n/hu.json index 37e5956b3d1..b8b315f4c6d 100644 --- a/apps/settings/l10n/hu.json +++ b/apps/settings/l10n/hu.json @@ -228,11 +228,18 @@ "Copied!" : "Másolva!", "Copy" : "Másolás", "Could not copy app password. Please copy it manually." : "Nem lehet az alkalmazásjelszót másolni. Másolja át kézileg.", + "Last job execution ran {time}. Something seems wrong." : "Utolsó feladatfuttatás:%s. Valami nincs rendben.", + "Last job ran {relativeTime}." : "Utolsó feladatfuttatás: {relativeTime}.", "Background job didn’t run yet!" : "A háttérfeladat még nem futott le!", + "AJAX" : "AJAX", "Execute one task with each page loaded. Use case: Single user instance." : "Egy feladat végrehajtása minden egyes oldalbetöltésnél. Használati eset: egyfelhasználós példány", + "Webcron" : "Webcron", "cron.php is registered at a webcron service to call cron.php every 5 minutes over HTTP. Use case: Very small instance (1–5 users depending on the usage)." : "A cron.php egy webcron szolgáltatásnál van regisztrálva, hogy 5 percenkenként meghívja a cron.php-t. Használati eset: Nagyon kis példány (1-5 felhasználó, használattól függően).", + "Cron (Recommended)" : "Cron (ajánlott)", "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Ennek futtatásához a PHP POSIX kiterjesztés szükséges. A részletekért lásd a {linkstart}PHP dokumentációt{linkend}.", "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "A rendszer cron szolgáltatásának használata a cron.php fájl 5 percenként meghívásához. Az összes példány esetén ez javasolt.", + "The cron.php needs to be executed by the system user \"{user}\"." : "A cron.php-t „{user}” rendszerfelhasználónak kell végrehajtania.", + "Unable to update background job mode" : "A háttérfeladat módja nem frissíthető", "Profile" : "Profil", "Enable or disable profile by default for new users." : "A profil alapértelmezett engedélyezése vagy letiltása az új felhasználók számára.", "Enable" : "Engedélyezés", @@ -340,6 +347,7 @@ "Updates" : "Frissítések", "App bundles" : "Alkalmazáscsomagok", "Featured apps" : "Kiemelt alkalmazások", + "For the server to work properly, it" : "A kiszolgáló helyes működéséhez fontos, hogy", "Details" : "Részletek", "Changelog" : "Változásnapló", "by {author}\n{license}" : "szerző: {author}\n{license}", diff --git a/apps/settings/l10n/it.js b/apps/settings/l10n/it.js index 7db3af3e977..d8fcec3dca4 100644 --- a/apps/settings/l10n/it.js +++ b/apps/settings/l10n/it.js @@ -57,6 +57,7 @@ OC.L10N.register( "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", "Couldn't update app." : "Impossibile aggiornate l'applicazione.", "Wrong password" : "Password errata", + "Unable to change personal password" : "Impossibile cambiare la password personale", "Saved" : "Salvato", "No user supplied" : "Non è stato fornito alcun utente", "Authentication error" : "Errore di autenticazione", @@ -67,6 +68,9 @@ OC.L10N.register( "Federated Cloud Sharing" : "Condivisione cloud federata", "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL sta utilizzando una versione di %1$s datata (%2$s). Aggiorna il tuo sistema operativo o funzionalità come %3$s non funzioneranno correttamente.", "Could not determine if TLS version of cURL is outdated or not because an error happened during the HTTPS request against https://nextcloud.com. Please check the nextcloud log file for more details." : "Impossibile determinare se la versione TLS di cURL è obsoleta o meno perché si è verificato un errore durante la richiesta HTTPS su https://nextcloud.com. Controlla il file di registro di nextcloud per maggiori dettagli.", + "The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "Il modulo PHP OPcache non è caricato. Per prestazioni migliori consigliamo di caricarlo nella tua installazione di PHP.", + "OPcache is disabled. For better performance, it is recommended to apply <code>opcache.enable=1</code> to your PHP configuration." : "OPcache non è attivo. Per prestazioni migliori, consigliamo di applicare <code>opcache.enable=1</code> nella tua configurazione di PHP.", + "OPcache is configured to remove code comments. With OPcache enabled, <code>opcache.save_comments=1</code> must be set for Nextcloud to function." : "OPcache è configurato per rimuovere i commenti di codice. Con OPcache attivato, <code>opcache.save_comments=1</code> deve essere impostato affinché Nextcloud funzioni.", "Invalid SMTP password." : "Password SMTP non valida.", "Email setting test" : "Prova impostazioni email", "Well done, %s!" : "Ben fatto, %s!", @@ -130,6 +134,8 @@ OC.L10N.register( "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Sono presenti alcuni certificati SSL importati dagli utenti, che non vengono più utilizzati con Nextcloud 21. Possono essere importati dalla riga di comando tramite il comando \"occ security:certificates:import\". I loro percorsi all'interno della cartella dei dati sono mostrati di seguito.", "Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Trovati UUID di utenti o gruppi LDAP non validi. Controlla le tue impostazioni \"Sovrascrivi rilevazione UUID\" nella sezione Esperto della configurazione LDAP ed usa \"occ ldap:update-uuid\" per aggiornarle.", "The old server-side-encryption format is enabled. We recommend disabling this." : "Il vecchio formato di cifratura lato server è abilitato. Ti consigliamo di disabilitarlo.", + "Profile information" : "Informazioni del profilo", + "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Immagine del profilo, nome e cognome, email, numero di telefono, indirizzo, sito web, Twitter, organizzazione, ruolo, titolo, biografia e se il tuo profilo è attivo o meno", "Nextcloud settings" : "Impostazioni di Nextcloud", "Administration privileges" : "Privilegi di amministratore", "Here you can decide which group can access certain sections of the administration settings." : "Qui puoi decidere quali gruppi possono accedere ad alcune sezioni delle impostazioni di amministrazione.", @@ -172,6 +178,7 @@ OC.L10N.register( "Disable all" : "Disabilita tutto", "Enable all" : "Abilita tutto", "_%n app has an update available_::_%n apps have an update available_" : ["%n applicazione ha un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile"], + "_Update_::_Update all_" : ["Aggiorna","Aggiorna","Aggiorna tutto"], "Marked for remote wipe" : "Marcato come cancellazione remota", "Device settings" : "Impostazioni dei dispositivi", "Allow filesystem access" : "Consenti accesso al filesystem", @@ -215,10 +222,21 @@ OC.L10N.register( "Copied!" : "Copiato!", "Copy" : "Copia", "Could not copy app password. Please copy it manually." : "Impossibile copiare la password dell'applicazione. Copiala a mano.", + "Last job execution ran {time}. Something seems wrong." : "Ultima esecuzione di cron: {time}. Potrebbe esserci un problema.", + "Last job ran {relativeTime}." : "Ultima esecuzione: {relativeTime}.", "Background job didn’t run yet!" : "Operazione in background non ancora eseguita!", + "AJAX" : "AJAX", + "Execute one task with each page loaded. Use case: Single user instance." : "Esegui un'attività con ogni pagina caricata. Caso d'uso: istanza per utente singolo.", + "Webcron" : "Webcron", + "cron.php is registered at a webcron service to call cron.php every 5 minutes over HTTP. Use case: Very small instance (1–5 users depending on the usage)." : "cron.php è registrato in un servizio webcron per invocare cron.php ogni 5 minuti via HTTP. Caso d'uso: istanza molto piccola (1–5 utenti a seconda dell'utilizzo).", + "Cron (Recommended)" : "Cron (Consigliato)", "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Per eseguirlo, hai bisogno dell'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per ulteriori dettagli.", + "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 5 minuti. Consigliato per tutte le istanze.", + "The cron.php needs to be executed by the system user \"{user}\"." : "Il cron.php deve essere eseguito dall'utente di sistema \"{user}\".", "Profile" : "Profilo", + "Enable or disable profile by default for new users." : "Attiva o disattiva il profilo in modo predefinito per i nuovo utenti.", "Enable" : "Abilita", + "Unable to update profile default setting" : "Impossibile aggiornare l'impostazione predefinita del profilo", "Rename group" : "Rinomina gruppo", "Remove group" : "Rimuovi gruppo", "You are about to remove the group {group}. The users will NOT be deleted." : "Stai per rimuovere il gruppo {group}. Gli utenti NON saranno eliminati.", @@ -263,6 +281,7 @@ OC.L10N.register( "Change scope level of {accountProperty}" : "Cambia livello di ambito di {accountProperty}", "Unable to update federation scope of the primary {accountProperty}" : "Impossibile aggiornare l'ambito federativo del {accountProperty} primario", "Unable to update federation scope of additional {accountProperty}" : "Impossibile aggiornare l'ambito federativo del {accountProperty} aggiuntivo", + "Add additional email" : "Aggiungi email aggiuntiva", "Add" : "Aggiungi", "You do not have permissions to see the details of this user" : "Non hai i permessi per vedere i dettagli di questo utente", "Add new password" : "Aggiungi nuova password", @@ -426,6 +445,7 @@ OC.L10N.register( "Allow public uploads" : "Consenti caricamenti pubblici", "Always ask for a password" : "Chiedi sempre una password", "Enforce password protection" : "Imponi la protezione con password", + "Exclude groups from password requirements:" : "Escludi gruppi dai requisiti della password:", "Set default expiration date" : "Imposta data di scadenza predefinita", "Exclude groups from creating link shares:" : "Escludi gruppi dalla creazione dei collegamenti di condivisione:", "Allow resharing" : "Consenti la ri-condivisione", diff --git a/apps/settings/l10n/it.json b/apps/settings/l10n/it.json index 9c365493503..d6a552908ce 100644 --- a/apps/settings/l10n/it.json +++ b/apps/settings/l10n/it.json @@ -55,6 +55,7 @@ "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", "Couldn't update app." : "Impossibile aggiornate l'applicazione.", "Wrong password" : "Password errata", + "Unable to change personal password" : "Impossibile cambiare la password personale", "Saved" : "Salvato", "No user supplied" : "Non è stato fornito alcun utente", "Authentication error" : "Errore di autenticazione", @@ -65,6 +66,9 @@ "Federated Cloud Sharing" : "Condivisione cloud federata", "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL sta utilizzando una versione di %1$s datata (%2$s). Aggiorna il tuo sistema operativo o funzionalità come %3$s non funzioneranno correttamente.", "Could not determine if TLS version of cURL is outdated or not because an error happened during the HTTPS request against https://nextcloud.com. Please check the nextcloud log file for more details." : "Impossibile determinare se la versione TLS di cURL è obsoleta o meno perché si è verificato un errore durante la richiesta HTTPS su https://nextcloud.com. Controlla il file di registro di nextcloud per maggiori dettagli.", + "The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "Il modulo PHP OPcache non è caricato. Per prestazioni migliori consigliamo di caricarlo nella tua installazione di PHP.", + "OPcache is disabled. For better performance, it is recommended to apply <code>opcache.enable=1</code> to your PHP configuration." : "OPcache non è attivo. Per prestazioni migliori, consigliamo di applicare <code>opcache.enable=1</code> nella tua configurazione di PHP.", + "OPcache is configured to remove code comments. With OPcache enabled, <code>opcache.save_comments=1</code> must be set for Nextcloud to function." : "OPcache è configurato per rimuovere i commenti di codice. Con OPcache attivato, <code>opcache.save_comments=1</code> deve essere impostato affinché Nextcloud funzioni.", "Invalid SMTP password." : "Password SMTP non valida.", "Email setting test" : "Prova impostazioni email", "Well done, %s!" : "Ben fatto, %s!", @@ -128,6 +132,8 @@ "There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Sono presenti alcuni certificati SSL importati dagli utenti, che non vengono più utilizzati con Nextcloud 21. Possono essere importati dalla riga di comando tramite il comando \"occ security:certificates:import\". I loro percorsi all'interno della cartella dei dati sono mostrati di seguito.", "Invalid UUIDs of LDAP users or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Trovati UUID di utenti o gruppi LDAP non validi. Controlla le tue impostazioni \"Sovrascrivi rilevazione UUID\" nella sezione Esperto della configurazione LDAP ed usa \"occ ldap:update-uuid\" per aggiornarle.", "The old server-side-encryption format is enabled. We recommend disabling this." : "Il vecchio formato di cifratura lato server è abilitato. Ti consigliamo di disabilitarlo.", + "Profile information" : "Informazioni del profilo", + "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Immagine del profilo, nome e cognome, email, numero di telefono, indirizzo, sito web, Twitter, organizzazione, ruolo, titolo, biografia e se il tuo profilo è attivo o meno", "Nextcloud settings" : "Impostazioni di Nextcloud", "Administration privileges" : "Privilegi di amministratore", "Here you can decide which group can access certain sections of the administration settings." : "Qui puoi decidere quali gruppi possono accedere ad alcune sezioni delle impostazioni di amministrazione.", @@ -170,6 +176,7 @@ "Disable all" : "Disabilita tutto", "Enable all" : "Abilita tutto", "_%n app has an update available_::_%n apps have an update available_" : ["%n applicazione ha un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile"], + "_Update_::_Update all_" : ["Aggiorna","Aggiorna","Aggiorna tutto"], "Marked for remote wipe" : "Marcato come cancellazione remota", "Device settings" : "Impostazioni dei dispositivi", "Allow filesystem access" : "Consenti accesso al filesystem", @@ -213,10 +220,21 @@ "Copied!" : "Copiato!", "Copy" : "Copia", "Could not copy app password. Please copy it manually." : "Impossibile copiare la password dell'applicazione. Copiala a mano.", + "Last job execution ran {time}. Something seems wrong." : "Ultima esecuzione di cron: {time}. Potrebbe esserci un problema.", + "Last job ran {relativeTime}." : "Ultima esecuzione: {relativeTime}.", "Background job didn’t run yet!" : "Operazione in background non ancora eseguita!", + "AJAX" : "AJAX", + "Execute one task with each page loaded. Use case: Single user instance." : "Esegui un'attività con ogni pagina caricata. Caso d'uso: istanza per utente singolo.", + "Webcron" : "Webcron", + "cron.php is registered at a webcron service to call cron.php every 5 minutes over HTTP. Use case: Very small instance (1–5 users depending on the usage)." : "cron.php è registrato in un servizio webcron per invocare cron.php ogni 5 minuti via HTTP. Caso d'uso: istanza molto piccola (1–5 utenti a seconda dell'utilizzo).", + "Cron (Recommended)" : "Cron (Consigliato)", "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Per eseguirlo, hai bisogno dell'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per ulteriori dettagli.", + "Use system cron service to call the cron.php file every 5 minutes. Recommended for all instances." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 5 minuti. Consigliato per tutte le istanze.", + "The cron.php needs to be executed by the system user \"{user}\"." : "Il cron.php deve essere eseguito dall'utente di sistema \"{user}\".", "Profile" : "Profilo", + "Enable or disable profile by default for new users." : "Attiva o disattiva il profilo in modo predefinito per i nuovo utenti.", "Enable" : "Abilita", + "Unable to update profile default setting" : "Impossibile aggiornare l'impostazione predefinita del profilo", "Rename group" : "Rinomina gruppo", "Remove group" : "Rimuovi gruppo", "You are about to remove the group {group}. The users will NOT be deleted." : "Stai per rimuovere il gruppo {group}. Gli utenti NON saranno eliminati.", @@ -261,6 +279,7 @@ "Change scope level of {accountProperty}" : "Cambia livello di ambito di {accountProperty}", "Unable to update federation scope of the primary {accountProperty}" : "Impossibile aggiornare l'ambito federativo del {accountProperty} primario", "Unable to update federation scope of additional {accountProperty}" : "Impossibile aggiornare l'ambito federativo del {accountProperty} aggiuntivo", + "Add additional email" : "Aggiungi email aggiuntiva", "Add" : "Aggiungi", "You do not have permissions to see the details of this user" : "Non hai i permessi per vedere i dettagli di questo utente", "Add new password" : "Aggiungi nuova password", @@ -424,6 +443,7 @@ "Allow public uploads" : "Consenti caricamenti pubblici", "Always ask for a password" : "Chiedi sempre una password", "Enforce password protection" : "Imponi la protezione con password", + "Exclude groups from password requirements:" : "Escludi gruppi dai requisiti della password:", "Set default expiration date" : "Imposta data di scadenza predefinita", "Exclude groups from creating link shares:" : "Escludi gruppi dalla creazione dei collegamenti di condivisione:", "Allow resharing" : "Consenti la ri-condivisione", diff --git a/apps/settings/l10n/zh_HK.js b/apps/settings/l10n/zh_HK.js index 7a0ce7cc0fb..ed4c1d9632c 100644 --- a/apps/settings/l10n/zh_HK.js +++ b/apps/settings/l10n/zh_HK.js @@ -349,7 +349,7 @@ OC.L10N.register( "Updates" : "更新", "App bundles" : "應用程式套裝", "Featured apps" : "精選應用程式", - "For the server to work properly, it" : "為使伺服器正常工作,正確配置後台作業非常重要。推薦設置 Cron。有關詳細信息,請參閱文檔。", + "For the server to work properly, it" : "為了讓伺服器正常運作,正確配置後台作業非常重要。推薦設置 Cron。有關詳細信息,請參閱文檔。", "Details" : "詳細資訊", "Changelog" : "軟件更新紀錄", "by {author}\n{license}" : "作者為 {author}\n{license}", diff --git a/apps/settings/l10n/zh_HK.json b/apps/settings/l10n/zh_HK.json index 88bf302ae57..704ec86452c 100644 --- a/apps/settings/l10n/zh_HK.json +++ b/apps/settings/l10n/zh_HK.json @@ -347,7 +347,7 @@ "Updates" : "更新", "App bundles" : "應用程式套裝", "Featured apps" : "精選應用程式", - "For the server to work properly, it" : "為使伺服器正常工作,正確配置後台作業非常重要。推薦設置 Cron。有關詳細信息,請參閱文檔。", + "For the server to work properly, it" : "為了讓伺服器正常運作,正確配置後台作業非常重要。推薦設置 Cron。有關詳細信息,請參閱文檔。", "Details" : "詳細資訊", "Changelog" : "軟件更新紀錄", "by {author}\n{license}" : "作者為 {author}\n{license}", diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index 2638df027ca..b5ba983e671 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -180,6 +180,7 @@ OC.L10N.register( "\"$home\" Placeholder Field" : "\"$home\" Champ Placeholder", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home dans la configuration du stockage externe sera remplacé avec la valeur de l'attribut spécifié", "Internal Username" : "Nom d'utilisateur interne", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [a-zA-Z0-9_.@-]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi partie des URLs distantes, pour tous les services DAV par exemple. Avec ce paramètre, le comportement par défaut peut être écrasé. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés). Laissez-le vide pour utiliser le comportement par défaut", "Internal Username Attribute:" : "Nom d'utilisateur interne :", "Override UUID detection" : "Passer outre la détection des UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.", diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index dd2c6230788..8507d7993be 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -178,6 +178,7 @@ "\"$home\" Placeholder Field" : "\"$home\" Champ Placeholder", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home dans la configuration du stockage externe sera remplacé avec la valeur de l'attribut spécifié", "Internal Username" : "Nom d'utilisateur interne", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [a-zA-Z0-9_.@-]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi partie des URLs distantes, pour tous les services DAV par exemple. Avec ce paramètre, le comportement par défaut peut être écrasé. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés). Laissez-le vide pour utiliser le comportement par défaut", "Internal Username Attribute:" : "Nom d'utilisateur interne :", "Override UUID detection" : "Passer outre la détection des UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.", diff --git a/apps/user_status/lib/Listener/UserLiveStatusListener.php b/apps/user_status/lib/Listener/UserLiveStatusListener.php index c015e684142..3e05efa7118 100644 --- a/apps/user_status/lib/Listener/UserLiveStatusListener.php +++ b/apps/user_status/lib/Listener/UserLiveStatusListener.php @@ -43,11 +43,14 @@ use OCP\UserStatus\IUserStatus; */ class UserLiveStatusListener implements IEventListener { private UserStatusMapper $mapper; + private StatusService $statusService; private ITimeFactory $timeFactory; public function __construct(UserStatusMapper $mapper, + StatusService $statusService, ITimeFactory $timeFactory) { $this->mapper = $mapper; + $this->statusService = $statusService; $this->timeFactory = $timeFactory; } @@ -62,7 +65,7 @@ class UserLiveStatusListener implements IEventListener { $user = $event->getUser(); try { - $userStatus = $this->mapper->findByUserId($user->getUID()); + $userStatus = $this->statusService->findByUserId($user->getUID()); } catch (DoesNotExistException $ex) { $userStatus = new UserStatus(); $userStatus->setUserId($user->getUID()); diff --git a/apps/user_status/lib/Service/StatusService.php b/apps/user_status/lib/Service/StatusService.php index e038570fc00..9bf448d9de8 100644 --- a/apps/user_status/lib/Service/StatusService.php +++ b/apps/user_status/lib/Service/StatusService.php @@ -38,7 +38,6 @@ use OCP\AppFramework\Utility\ITimeFactory; use OCP\DB\Exception; use OCP\IConfig; use OCP\IEmojiHelper; -use OCP\IUser; use OCP\UserStatus\IUserStatus; /** diff --git a/apps/user_status/src/components/SetStatusModal.vue b/apps/user_status/src/components/SetStatusModal.vue index df6858ca6ff..0c95128c8d2 100644 --- a/apps/user_status/src/components/SetStatusModal.vue +++ b/apps/user_status/src/components/SetStatusModal.vue @@ -55,14 +55,14 @@ <ClearAtSelect :clear-at="clearAt" @select-clear-at="setClearAt" /> <div class="status-buttons"> - <ButtonVue wide="true" + <ButtonVue :wide="true" type="tertiary" :text="$t('user_status', 'Clear status message')" :disabled="isSavingStatus" @click="clearStatus"> {{ $t('user_status', 'Clear status message') }} </ButtonVue> - <ButtonVue wide="true" + <ButtonVue :wide="true" type="primary" :text="$t('user_status', 'Set status message')" :disabled="isSavingStatus" diff --git a/apps/user_status/src/store/userStatus.js b/apps/user_status/src/store/userStatus.js index c54fbe5040b..6d8b5bd1e1f 100644 --- a/apps/user_status/src/store/userStatus.js +++ b/apps/user_status/src/store/userStatus.js @@ -130,12 +130,23 @@ const mutations = { */ loadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) { state.status = status - state.statusIsUserDefined = statusIsUserDefined state.message = message state.icon = icon - state.clearAt = clearAt - state.messageIsPredefined = messageIsPredefined - state.messageId = messageId + + // Don't overwrite certain values if the refreshing comes in via short updates + // E.g. from talk participant list which only has the status, message and icon + if (typeof statusIsUserDefined !== 'undefined') { + state.statusIsUserDefined = statusIsUserDefined + } + if (typeof clearAt !== 'undefined') { + state.clearAt = clearAt + } + if (typeof messageIsPredefined !== 'undefined') { + state.messageIsPredefined = messageIsPredefined + } + if (typeof messageId !== 'undefined') { + state.messageId = messageId + } }, } diff --git a/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php b/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php index 2e815073b5a..b2d446d912e 100644 --- a/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php +++ b/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php @@ -30,6 +30,7 @@ use OCA\UserStatus\Db\UserStatus; use OCA\UserStatus\Db\UserStatusMapper; use OCA\UserStatus\Listener\UserDeletedListener; use OCA\UserStatus\Listener\UserLiveStatusListener; +use OCA\UserStatus\Service\StatusService; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Utility\ITimeFactory; use OCP\EventDispatcher\GenericEvent; @@ -41,7 +42,8 @@ class UserLiveStatusListenerTest extends TestCase { /** @var UserStatusMapper|\PHPUnit\Framework\MockObject\MockObject */ private $mapper; - + /** @var StatusService|\PHPUnit\Framework\MockObject\MockObject */ + private $statusService; /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */ private $timeFactory; @@ -52,8 +54,9 @@ class UserLiveStatusListenerTest extends TestCase { parent::setUp(); $this->mapper = $this->createMock(UserStatusMapper::class); + $this->statusService = $this->createMock(StatusService::class); $this->timeFactory = $this->createMock(ITimeFactory::class); - $this->listener = new UserLiveStatusListener($this->mapper, $this->timeFactory); + $this->listener = new UserLiveStatusListener($this->mapper, $this->statusService, $this->timeFactory); } /** @@ -85,12 +88,12 @@ class UserLiveStatusListenerTest extends TestCase { $userStatus->setStatusTimestamp($previousTimestamp); $userStatus->setIsUserDefined($previousIsUserDefined); - $this->mapper->expects($this->once()) + $this->statusService->expects($this->once()) ->method('findByUserId') ->with($userId) ->willReturn($userStatus); } else { - $this->mapper->expects($this->once()) + $this->statusService->expects($this->once()) ->method('findByUserId') ->with($userId) ->willThrowException(new DoesNotExistException('')); diff --git a/dist/user-status-modal-8299.js b/dist/user-status-modal-8299.js index 6364bb792bf..7e32de81ca3 100644 --- a/dist/user-status-modal-8299.js +++ b/dist/user-status-modal-8299.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8299],{90094:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},91899:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},10045:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},28935:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,'.predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:" - "}',"",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},21279:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]),t.Z=i},39913:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".set-status-modal[data-v-0b6e52c0]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-0b6e52c0]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-0b6e52c0]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-0b6e52c0]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-0b6e52c0]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-0b6e52c0]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-0b6e52c0]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AAqPA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},21516:function(n,t,e){e.r(t),e.d(t,{default:function(){return rn}});var s=e(26932),a=e(64056),r=e.n(a),i=e(47450),l=e.n(i),o=e(1412),u=e.n(o),c=e(9944),d=e(84387),A=e(80351),p=e.n(A),m=e(64039),f=function(n){if(null===n)return(0,c.translate)("user_status","Don't clear");if("end-of"===n.type)switch(n.time){case"day":return(0,c.translate)("user_status","Today");case"week":return(0,c.translate)("user_status","This week");default:return null}if("period"===n.type)return p().duration(1e3*n.time).humanize();if("_time"===n.type){var t=p()((0,m.n)()),e=p()(n.time,"X");return p().duration(t.diff(e)).humanize()}return null},C={name:"PredefinedStatus",filters:{clearAtFilter:f},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select:function(){this.$emit("select")}}},g=e(93379),b=e.n(g),_=e(7795),v=e.n(_),h=e(90569),x=e.n(h),y=e(3565),S=e.n(y),k=e(19216),w=e.n(k),$=e(44589),Z=e.n($),P=e(28935),B={};B.styleTagTransform=Z(),B.setAttributes=S(),B.insert=x().bind(null,"head"),B.domAPI=v(),B.insertStyleElement=w(),b()(P.Z,B),P.Z&&P.Z.locals&&P.Z.locals;var I=e(51900),O=(0,I.Z)(C,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.select.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.select.apply(null,arguments)}],click:n.select}},[e("span",{staticClass:"predefined-status__icon"},[n._v("\n\t\t"+n._s(n.icon)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__message"},[n._v("\n\t\t"+n._s(n.message)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[n._v("\n\t\t"+n._s(n._f("clearAtFilter")(n.clearAt))+"\n\t")])])}),[],!1,null,"5e390d16",null);function E(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(n);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,s)}return e}function D(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?E(Object(e),!0).forEach((function(t){M(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):E(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}function M(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var j={name:"PredefinedStatusesList",components:{PredefinedStatus:O.exports},computed:D(D({},(0,e(20629).rn)({predefinedStatuses:function(n){return n.predefinedStatuses.predefinedStatuses}})),{},{hasLoaded:function(){return this.predefinedStatuses.length>0}}),mounted:function(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus:function(n){this.$emit("select-status",n)}}},T=e(21279),q={};q.styleTagTransform=Z(),q.setAttributes=S(),q.insert=x().bind(null,"head"),q.domAPI=v(),q.insertStyleElement=w(),b()(T.Z,q),T.Z&&T.Z.locals&&T.Z.locals;var G=(0,I.Z)(j,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},n._l(n.predefinedStatuses,(function(t){return e("PredefinedStatus",{key:t.id,attrs:{"message-id":t.id,icon:t.icon,message:t.message,"clear-at":t.clearAt},on:{select:function(e){return n.selectStatus(t)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"fddcc16e",null).exports,R={name:"CustomMessageInput",props:{message:{type:String,required:!0,default:function(){return""}},disabled:{type:Boolean,default:!1}},methods:{focus:function(){this.$refs.input.focus()},change:function(n){this.$emit("change",n.target.value)},submit:function(n){this.$emit("submit",n.target.value)}}},F=e(91899),z={};z.styleTagTransform=Z(),z.setAttributes=S(),z.insert=x().bind(null,"head"),z.domAPI=v(),z.insertStyleElement=w(),b()(F.Z,z),F.Z&&F.Z.locals&&F.Z.locals;var U=(0,I.Z)(R,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("form",{staticClass:"custom-input__form",on:{submit:function(n){n.preventDefault()}}},[e("input",{ref:"input",attrs:{maxlength:"80",disabled:n.disabled,placeholder:n.$t("user_status","What is your status?"),type:"text"},domProps:{value:n.message},on:{change:n.change,keyup:[n.change,function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)}],paste:n.change}})])}),[],!1,null,"df270a88",null),W=U.exports,L=e(7811),Y={name:"ClearAtSelect",components:{Multiselect:e.n(L)()},props:{clearAt:{type:Object,default:null}},data:function(){return{options:[{label:(0,c.translate)("user_status","Don't clear"),clearAt:null},{label:(0,c.translate)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,c.translate)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,c.translate)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,c.translate)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,c.translate)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}},computed:{option:function(){return{clearAt:this.clearAt,label:f(this.clearAt)}}},methods:{select:function(n){n&&this.$emit("select-clear-at",n.clearAt)}}},V=e(90094),Q={};Q.styleTagTransform=Z(),Q.setAttributes=S(),Q.insert=x().bind(null,"head"),Q.domAPI=v(),Q.insertStyleElement=w(),b()(V.Z,Q),V.Z&&V.Z.locals&&V.Z.locals;var X=(0,I.Z)(Y,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"clear-at-select"},[e("span",{staticClass:"clear-at-select__label"},[n._v("\n\t\t"+n._s(n.$t("user_status","Clear status message after"))+"\n\t")]),n._v(" "),e("Multiselect",{attrs:{label:"label",value:n.option,options:n.options,"open-direction":"top"},on:{select:n.select}})],1)}),[],!1,null,"6dde9a43",null).exports,H={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id:function(){return"user-status-online-status-".concat(this.type)}},methods:{onChange:function(){this.$emit("select",this.type)}}},J=e(10045),K={};K.styleTagTransform=Z(),K.setAttributes=S(),K.insert=x().bind(null,"head"),K.domAPI=v(),K.insertStyleElement=w(),b()(J.Z,K),J.Z&&J.Z.locals&&J.Z.locals;var N=(0,I.Z)(H,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:n.id,type:"radio",name:"user-status-online"},domProps:{checked:n.checked},on:{change:n.onChange}}),n._v(" "),e("label",{staticClass:"user-status-online-select__label",class:n.icon,attrs:{for:n.id}},[n._v("\n\t\t"+n._s(n.label)+"\n\t\t"),e("em",{staticClass:"user-status-online-select__subline"},[n._v(n._s(n.subline))])])])}),[],!1,null,"d5c541dc",null).exports;function nn(n,t,e,s,a,r,i){try{var l=n[r](i),o=l.value}catch(n){return void e(n)}l.done?t(o):Promise.resolve(o).then(s,a)}function tn(n){return function(){var t=this,e=arguments;return new Promise((function(s,a){var r=n.apply(t,e);function i(n){nn(r,s,a,i,l,"next",n)}function l(n){nn(r,s,a,i,l,"throw",n)}i(void 0)}))}}var en={name:"SetStatusModal",components:{ClearAtSelect:X,CustomMessageInput:W,EmojiPicker:r(),Modal:l(),OnlineStatusSelect:N,PredefinedStatusesList:G,ButtonVue:u()},mixins:[d.Z],data:function(){return{clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,c.translate)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,c.translate)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,c.translate)("user_status","Do not disturb"),subline:(0,c.translate)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,c.translate)("user_status","Invisible"),subline:(0,c.translate)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}},computed:{visibleIcon:function(){return this.icon||"😀"}},mounted:function(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal:function(){this.$emit("close")},setIcon:function(n){var t=this;this.messageId=null,this.icon=n,this.$nextTick((function(){t.$refs.customMessageInput.focus()}))},setMessage:function(n){this.messageId=null,this.message=n},setClearAt:function(n){this.clearAt=n},selectPredefinedMessage:function(n){this.messageId=n.id,this.clearAt=n.clearAt,this.icon=n.icon,this.message=n.message},saveStatus:function(){var n=this;return tn(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.isSavingStatus){t.next=2;break}return t.abrupt("return");case 2:if(t.prev=2,n.isSavingStatus=!0,void 0===n.messageId||null===n.messageId){t.next=9;break}return t.next=7,n.$store.dispatch("setPredefinedMessage",{messageId:n.messageId,clearAt:n.clearAt});case 7:t.next=11;break;case 9:return t.next=11,n.$store.dispatch("setCustomMessage",{message:n.message,icon:n.icon,clearAt:n.clearAt});case 11:t.next=19;break;case 13:return t.prev=13,t.t0=t.catch(2),(0,s.x2)(n.$t("user_status","There was an error saving the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 19:n.isSavingStatus=!1,n.closeModal();case 21:case"end":return t.stop()}}),t,null,[[2,13]])})))()},clearStatus:function(){var n=this;return tn(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,n.isSavingStatus=!0,t.next=4,n.$store.dispatch("clearMessage");case 4:t.next=12;break;case 6:return t.prev=6,t.t0=t.catch(0),(0,s.x2)(n.$t("user_status","There was an error clearing the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 12:n.isSavingStatus=!1,n.closeModal();case 14:case"end":return t.stop()}}),t,null,[[0,6]])})))()}}},sn=e(39913),an={};an.styleTagTransform=Z(),an.setAttributes=S(),an.insert=x().bind(null,"head"),an.domAPI=v(),an.insertStyleElement=w(),b()(sn.Z,an),sn.Z&&sn.Z.locals&&sn.Z.locals;var rn=(0,I.Z)(en,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("Modal",{attrs:{size:"normal",title:n.$t("user_status","Set status")},on:{close:n.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Online status")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__online-status"},n._l(n.statuses,(function(t){return e("OnlineStatusSelect",n._b({key:t.type,attrs:{checked:t.type===n.statusType},on:{select:n.changeStatus}},"OnlineStatusSelect",t,!1))})),1),n._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Status message")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("EmojiPicker",{on:{select:n.setIcon}},[e("button",{staticClass:"custom-input__emoji-button"},[n._v("\n\t\t\t\t\t"+n._s(n.visibleIcon)+"\n\t\t\t\t")])]),n._v(" "),e("CustomMessageInput",{ref:"customMessageInput",attrs:{message:n.message},on:{change:n.setMessage,submit:n.saveStatus}})],1),n._v(" "),e("PredefinedStatusesList",{on:{"select-status":n.selectPredefinedMessage}}),n._v(" "),e("ClearAtSelect",{attrs:{"clear-at":n.clearAt},on:{"select-clear-at":n.setClearAt}}),n._v(" "),e("div",{staticClass:"status-buttons"},[e("ButtonVue",{attrs:{wide:"true",type:"tertiary",text:n.$t("user_status","Clear status message"),disabled:n.isSavingStatus},on:{click:n.clearStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Clear status message"))+"\n\t\t\t")]),n._v(" "),e("ButtonVue",{attrs:{wide:"true",type:"primary",text:n.$t("user_status","Set status message"),disabled:n.isSavingStatus},on:{click:n.saveStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Set status message"))+"\n\t\t\t")])],1)],1)])}),[],!1,null,"0b6e52c0",null).exports}}]); -//# sourceMappingURL=user-status-modal-8299.js.map?v=3f331fd4343acdf15116
\ No newline at end of file +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8299],{90094:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},91899:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},10045:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},28935:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,'.predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:" - "}',"",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},21279:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]),t.Z=i},96721:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".set-status-modal[data-v-061d37d0]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-061d37d0]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-061d37d0]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-061d37d0]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-061d37d0]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-061d37d0]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-061d37d0]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AAqPA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},37323:function(n,t,e){e.r(t),e.d(t,{default:function(){return rn}});var s=e(26932),a=e(64056),r=e.n(a),i=e(47450),l=e.n(i),o=e(1412),u=e.n(o),c=e(9944),d=e(84387),A=e(80351),p=e.n(A),m=e(64039),f=function(n){if(null===n)return(0,c.translate)("user_status","Don't clear");if("end-of"===n.type)switch(n.time){case"day":return(0,c.translate)("user_status","Today");case"week":return(0,c.translate)("user_status","This week");default:return null}if("period"===n.type)return p().duration(1e3*n.time).humanize();if("_time"===n.type){var t=p()((0,m.n)()),e=p()(n.time,"X");return p().duration(t.diff(e)).humanize()}return null},C={name:"PredefinedStatus",filters:{clearAtFilter:f},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select:function(){this.$emit("select")}}},g=e(93379),_=e.n(g),b=e(7795),v=e.n(b),h=e(90569),x=e.n(h),y=e(3565),S=e.n(y),k=e(19216),w=e.n(k),$=e(44589),Z=e.n($),P=e(28935),B={};B.styleTagTransform=Z(),B.setAttributes=S(),B.insert=x().bind(null,"head"),B.domAPI=v(),B.insertStyleElement=w(),_()(P.Z,B),P.Z&&P.Z.locals&&P.Z.locals;var I=e(51900),O=(0,I.Z)(C,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.select.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.select.apply(null,arguments)}],click:n.select}},[e("span",{staticClass:"predefined-status__icon"},[n._v("\n\t\t"+n._s(n.icon)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__message"},[n._v("\n\t\t"+n._s(n.message)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[n._v("\n\t\t"+n._s(n._f("clearAtFilter")(n.clearAt))+"\n\t")])])}),[],!1,null,"5e390d16",null);function E(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(n);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,s)}return e}function D(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?E(Object(e),!0).forEach((function(t){M(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):E(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}function M(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var j={name:"PredefinedStatusesList",components:{PredefinedStatus:O.exports},computed:D(D({},(0,e(20629).rn)({predefinedStatuses:function(n){return n.predefinedStatuses.predefinedStatuses}})),{},{hasLoaded:function(){return this.predefinedStatuses.length>0}}),mounted:function(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus:function(n){this.$emit("select-status",n)}}},T=e(21279),q={};q.styleTagTransform=Z(),q.setAttributes=S(),q.insert=x().bind(null,"head"),q.domAPI=v(),q.insertStyleElement=w(),_()(T.Z,q),T.Z&&T.Z.locals&&T.Z.locals;var G=(0,I.Z)(j,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},n._l(n.predefinedStatuses,(function(t){return e("PredefinedStatus",{key:t.id,attrs:{"message-id":t.id,icon:t.icon,message:t.message,"clear-at":t.clearAt},on:{select:function(e){return n.selectStatus(t)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"fddcc16e",null).exports,R={name:"CustomMessageInput",props:{message:{type:String,required:!0,default:function(){return""}},disabled:{type:Boolean,default:!1}},methods:{focus:function(){this.$refs.input.focus()},change:function(n){this.$emit("change",n.target.value)},submit:function(n){this.$emit("submit",n.target.value)}}},F=e(91899),z={};z.styleTagTransform=Z(),z.setAttributes=S(),z.insert=x().bind(null,"head"),z.domAPI=v(),z.insertStyleElement=w(),_()(F.Z,z),F.Z&&F.Z.locals&&F.Z.locals;var U=(0,I.Z)(R,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("form",{staticClass:"custom-input__form",on:{submit:function(n){n.preventDefault()}}},[e("input",{ref:"input",attrs:{maxlength:"80",disabled:n.disabled,placeholder:n.$t("user_status","What is your status?"),type:"text"},domProps:{value:n.message},on:{change:n.change,keyup:[n.change,function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)}],paste:n.change}})])}),[],!1,null,"df270a88",null),W=U.exports,L=e(7811),Y={name:"ClearAtSelect",components:{Multiselect:e.n(L)()},props:{clearAt:{type:Object,default:null}},data:function(){return{options:[{label:(0,c.translate)("user_status","Don't clear"),clearAt:null},{label:(0,c.translate)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,c.translate)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,c.translate)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,c.translate)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,c.translate)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}},computed:{option:function(){return{clearAt:this.clearAt,label:f(this.clearAt)}}},methods:{select:function(n){n&&this.$emit("select-clear-at",n.clearAt)}}},V=e(90094),Q={};Q.styleTagTransform=Z(),Q.setAttributes=S(),Q.insert=x().bind(null,"head"),Q.domAPI=v(),Q.insertStyleElement=w(),_()(V.Z,Q),V.Z&&V.Z.locals&&V.Z.locals;var X=(0,I.Z)(Y,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"clear-at-select"},[e("span",{staticClass:"clear-at-select__label"},[n._v("\n\t\t"+n._s(n.$t("user_status","Clear status message after"))+"\n\t")]),n._v(" "),e("Multiselect",{attrs:{label:"label",value:n.option,options:n.options,"open-direction":"top"},on:{select:n.select}})],1)}),[],!1,null,"6dde9a43",null).exports,H={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id:function(){return"user-status-online-status-".concat(this.type)}},methods:{onChange:function(){this.$emit("select",this.type)}}},J=e(10045),K={};K.styleTagTransform=Z(),K.setAttributes=S(),K.insert=x().bind(null,"head"),K.domAPI=v(),K.insertStyleElement=w(),_()(J.Z,K),J.Z&&J.Z.locals&&J.Z.locals;var N=(0,I.Z)(H,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:n.id,type:"radio",name:"user-status-online"},domProps:{checked:n.checked},on:{change:n.onChange}}),n._v(" "),e("label",{staticClass:"user-status-online-select__label",class:n.icon,attrs:{for:n.id}},[n._v("\n\t\t"+n._s(n.label)+"\n\t\t"),e("em",{staticClass:"user-status-online-select__subline"},[n._v(n._s(n.subline))])])])}),[],!1,null,"d5c541dc",null).exports;function nn(n,t,e,s,a,r,i){try{var l=n[r](i),o=l.value}catch(n){return void e(n)}l.done?t(o):Promise.resolve(o).then(s,a)}function tn(n){return function(){var t=this,e=arguments;return new Promise((function(s,a){var r=n.apply(t,e);function i(n){nn(r,s,a,i,l,"next",n)}function l(n){nn(r,s,a,i,l,"throw",n)}i(void 0)}))}}var en={name:"SetStatusModal",components:{ClearAtSelect:X,CustomMessageInput:W,EmojiPicker:r(),Modal:l(),OnlineStatusSelect:N,PredefinedStatusesList:G,ButtonVue:u()},mixins:[d.Z],data:function(){return{clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,c.translate)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,c.translate)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,c.translate)("user_status","Do not disturb"),subline:(0,c.translate)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,c.translate)("user_status","Invisible"),subline:(0,c.translate)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}},computed:{visibleIcon:function(){return this.icon||"😀"}},mounted:function(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal:function(){this.$emit("close")},setIcon:function(n){var t=this;this.messageId=null,this.icon=n,this.$nextTick((function(){t.$refs.customMessageInput.focus()}))},setMessage:function(n){this.messageId=null,this.message=n},setClearAt:function(n){this.clearAt=n},selectPredefinedMessage:function(n){this.messageId=n.id,this.clearAt=n.clearAt,this.icon=n.icon,this.message=n.message},saveStatus:function(){var n=this;return tn(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.isSavingStatus){t.next=2;break}return t.abrupt("return");case 2:if(t.prev=2,n.isSavingStatus=!0,void 0===n.messageId||null===n.messageId){t.next=9;break}return t.next=7,n.$store.dispatch("setPredefinedMessage",{messageId:n.messageId,clearAt:n.clearAt});case 7:t.next=11;break;case 9:return t.next=11,n.$store.dispatch("setCustomMessage",{message:n.message,icon:n.icon,clearAt:n.clearAt});case 11:t.next=19;break;case 13:return t.prev=13,t.t0=t.catch(2),(0,s.x2)(n.$t("user_status","There was an error saving the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 19:n.isSavingStatus=!1,n.closeModal();case 21:case"end":return t.stop()}}),t,null,[[2,13]])})))()},clearStatus:function(){var n=this;return tn(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,n.isSavingStatus=!0,t.next=4,n.$store.dispatch("clearMessage");case 4:t.next=12;break;case 6:return t.prev=6,t.t0=t.catch(0),(0,s.x2)(n.$t("user_status","There was an error clearing the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 12:n.isSavingStatus=!1,n.closeModal();case 14:case"end":return t.stop()}}),t,null,[[0,6]])})))()}}},sn=e(96721),an={};an.styleTagTransform=Z(),an.setAttributes=S(),an.insert=x().bind(null,"head"),an.domAPI=v(),an.insertStyleElement=w(),_()(sn.Z,an),sn.Z&&sn.Z.locals&&sn.Z.locals;var rn=(0,I.Z)(en,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("Modal",{attrs:{size:"normal",title:n.$t("user_status","Set status")},on:{close:n.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Online status")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__online-status"},n._l(n.statuses,(function(t){return e("OnlineStatusSelect",n._b({key:t.type,attrs:{checked:t.type===n.statusType},on:{select:n.changeStatus}},"OnlineStatusSelect",t,!1))})),1),n._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Status message")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("EmojiPicker",{on:{select:n.setIcon}},[e("button",{staticClass:"custom-input__emoji-button"},[n._v("\n\t\t\t\t\t"+n._s(n.visibleIcon)+"\n\t\t\t\t")])]),n._v(" "),e("CustomMessageInput",{ref:"customMessageInput",attrs:{message:n.message},on:{change:n.setMessage,submit:n.saveStatus}})],1),n._v(" "),e("PredefinedStatusesList",{on:{"select-status":n.selectPredefinedMessage}}),n._v(" "),e("ClearAtSelect",{attrs:{"clear-at":n.clearAt},on:{"select-clear-at":n.setClearAt}}),n._v(" "),e("div",{staticClass:"status-buttons"},[e("ButtonVue",{attrs:{wide:!0,type:"tertiary",text:n.$t("user_status","Clear status message"),disabled:n.isSavingStatus},on:{click:n.clearStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Clear status message"))+"\n\t\t\t")]),n._v(" "),e("ButtonVue",{attrs:{wide:!0,type:"primary",text:n.$t("user_status","Set status message"),disabled:n.isSavingStatus},on:{click:n.saveStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Set status message"))+"\n\t\t\t")])],1)],1)])}),[],!1,null,"061d37d0",null).exports}}]); +//# sourceMappingURL=user-status-modal-8299.js.map?v=b2f975dbe50f5e918a41
\ No newline at end of file diff --git a/dist/user-status-modal-8299.js.map b/dist/user-status-modal-8299.js.map index 246b25ebc14..a734492f291 100644 --- a/dist/user-status-modal-8299.js.map +++ b/dist/user-status-modal-8299.js.map @@ -1 +1 @@ -{"version":3,"file":"user-status-modal-8299.js?v=3f331fd4343acdf15116","mappings":"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","sources":["webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=0b6e52c0&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=0b6e52c0&scoped=true&","webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?d634","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?159c","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?e807","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?944d","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?79a1","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?87a5","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?3451","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?b1cd","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?54ea","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?1ac6","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fa3","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fb2"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.custom-input__form {\\n\\tflex-grow: 1;\\n\\n\\tinput {\\n\\t\\twidth: 100%;\\n\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:\\\" - \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' - ';\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".set-status-modal[data-v-0b6e52c0]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-0b6e52c0]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-0b6e52c0]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-0b6e52c0]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-0b6e52c0]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-0b6e52c0]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-0b6e52c0]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AAqPA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.set-status-modal {\\n\\tpadding: 8px 20px 20px 20px;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\t// Space between the two sections\\n\\t\\tmargin-bottom: 40px;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\n\\t\\t.custom-input__emoji-button {\\n\\t\\t\\tflex-basis: 40px;\\n\\t\\t\\tflex-grow: 0;\\n\\t\\t\\twidth: 40px;\\n\\t\\t\\theight: 34px;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tborder-right: none;\\n\\t\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\t\\t}\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 3px;\\n\\t\\tpadding-left:0;\\n\\t\\tgap: 3px;\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('EmojiPicker',{on:{\"select\":_vm.setIcon}},[_c('button',{staticClass:\"custom-input__emoji-button\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"select-status\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"select-clear-at\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('ButtonVue',{attrs:{\"wide\":\"true\",\"type\":\"tertiary\",\"text\":_vm.$t('user_status', 'Clear status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('ButtonVue',{attrs:{\"wide\":\"true\",\"type\":\"primary\",\"text\":_vm.$t('user_status', 'Set status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<div class=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e390d16\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus v-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div v-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fddcc16e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<form class=\"custom-input__form\"\n\t\t@submit.prevent>\n\t\t<input ref=\"input\"\n\t\t\tmaxlength=\"80\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"message\"\n\t\t\t@change=\"change\"\n\t\t\t@keyup=\"change\"\n\t\t\t@paste=\"change\"\n\t\t\t@keyup.enter=\"submit\">\n\t</form>\n</template>\n\n<script>\nexport default {\n\tname: 'CustomMessageInput',\n\tprops: {\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tchange(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tsubmit(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"df270a88\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{staticClass:\"custom-input__form\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('input',{ref:\"input\",attrs:{\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.change,\"keyup\":[_vm.change,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)}],\"paste\":_vm.change}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"clear-at-select\">\n\t\t<span class=\"clear-at-select__label\">\n\t\t\t{{ $t('user_status', 'Clear status message after') }}\n\t\t</span>\n\t\t<Multiselect label=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6dde9a43\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"clear-at-select\"},[_c('span',{staticClass:\"clear-at-select__label\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<div class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" :class=\"icon\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5c541dc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",class:_vm.icon,attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Modal size=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Online status') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Status message') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<EmojiPicker @select=\"setIcon\">\n\t\t\t\t\t<button class=\"custom-input__emoji-button\">\n\t\t\t\t\t\t{{ visibleIcon }}\n\t\t\t\t\t</button>\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<CustomMessageInput ref=\"customMessageInput\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList @select-status=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect :clear-at=\"clearAt\"\n\t\t\t\t@select-clear-at=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<ButtonVue wide=\"true\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Clear status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</ButtonVue>\n\t\t\t\t<ButtonVue wide=\"true\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Set status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</ButtonVue>\n\t\t\t</div>\n\t\t</div>\n\t</Modal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\nimport ButtonVue from '@nextcloud/vue/dist/Components/Button'\nimport { getAllStatusOptions } from '../services/statusOptionsService'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin'\nimport PredefinedStatusesList from './PredefinedStatusesList'\nimport CustomMessageInput from './CustomMessageInput'\nimport ClearAtSelect from './ClearAtSelect'\nimport OnlineStatusSelect from './OnlineStatusSelect'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tEmojiPicker,\n\t\tModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t\tButtonVue,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=0b6e52c0&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=0b6e52c0&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=0b6e52c0&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=0b6e52c0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b6e52c0\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","select","apply","arguments","_v","_s","icon","message","_f","_l","status","selectStatus","preventDefault","ref","disabled","$t","domProps","change","submit","label","option","checked","onChange","class","subline","closeModal","_b","statusType","changeStatus","setIcon","visibleIcon","setMessage","saveStatus","selectPredefinedMessage","setClearAt","isSavingStatus","clearStatus"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"user-status-modal-8299.js?v=b2f975dbe50f5e918a41","mappings":"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","sources":["webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=061d37d0&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=061d37d0&scoped=true&","webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?d634","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?159c","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?e807","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?944d","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?79a1","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?87a5","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?3451","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?b1cd","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?54ea","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?1ac6","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?7b8f","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fb2"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.custom-input__form {\\n\\tflex-grow: 1;\\n\\n\\tinput {\\n\\t\\twidth: 100%;\\n\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:\\\" - \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' - ';\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".set-status-modal[data-v-061d37d0]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-061d37d0]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-061d37d0]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-061d37d0]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-061d37d0]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-061d37d0]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-061d37d0]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AAqPA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.set-status-modal {\\n\\tpadding: 8px 20px 20px 20px;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\t// Space between the two sections\\n\\t\\tmargin-bottom: 40px;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\n\\t\\t.custom-input__emoji-button {\\n\\t\\t\\tflex-basis: 40px;\\n\\t\\t\\tflex-grow: 0;\\n\\t\\t\\twidth: 40px;\\n\\t\\t\\theight: 34px;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tborder-right: none;\\n\\t\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\t\\t}\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 3px;\\n\\t\\tpadding-left:0;\\n\\t\\tgap: 3px;\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('EmojiPicker',{on:{\"select\":_vm.setIcon}},[_c('button',{staticClass:\"custom-input__emoji-button\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"select-status\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"select-clear-at\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('ButtonVue',{attrs:{\"wide\":true,\"type\":\"tertiary\",\"text\":_vm.$t('user_status', 'Clear status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('ButtonVue',{attrs:{\"wide\":true,\"type\":\"primary\",\"text\":_vm.$t('user_status', 'Set status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<div class=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e390d16\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus v-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div v-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fddcc16e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<form class=\"custom-input__form\"\n\t\t@submit.prevent>\n\t\t<input ref=\"input\"\n\t\t\tmaxlength=\"80\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"message\"\n\t\t\t@change=\"change\"\n\t\t\t@keyup=\"change\"\n\t\t\t@paste=\"change\"\n\t\t\t@keyup.enter=\"submit\">\n\t</form>\n</template>\n\n<script>\nexport default {\n\tname: 'CustomMessageInput',\n\tprops: {\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tchange(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tsubmit(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"df270a88\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{staticClass:\"custom-input__form\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('input',{ref:\"input\",attrs:{\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.change,\"keyup\":[_vm.change,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)}],\"paste\":_vm.change}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"clear-at-select\">\n\t\t<span class=\"clear-at-select__label\">\n\t\t\t{{ $t('user_status', 'Clear status message after') }}\n\t\t</span>\n\t\t<Multiselect label=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6dde9a43\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"clear-at-select\"},[_c('span',{staticClass:\"clear-at-select__label\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<div class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" :class=\"icon\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5c541dc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",class:_vm.icon,attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Modal size=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Online status') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Status message') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<EmojiPicker @select=\"setIcon\">\n\t\t\t\t\t<button class=\"custom-input__emoji-button\">\n\t\t\t\t\t\t{{ visibleIcon }}\n\t\t\t\t\t</button>\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<CustomMessageInput ref=\"customMessageInput\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList @select-status=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect :clear-at=\"clearAt\"\n\t\t\t\t@select-clear-at=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<ButtonVue :wide=\"true\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Clear status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</ButtonVue>\n\t\t\t\t<ButtonVue :wide=\"true\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Set status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</ButtonVue>\n\t\t\t</div>\n\t\t</div>\n\t</Modal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\nimport ButtonVue from '@nextcloud/vue/dist/Components/Button'\nimport { getAllStatusOptions } from '../services/statusOptionsService'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin'\nimport PredefinedStatusesList from './PredefinedStatusesList'\nimport CustomMessageInput from './CustomMessageInput'\nimport ClearAtSelect from './ClearAtSelect'\nimport OnlineStatusSelect from './OnlineStatusSelect'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tEmojiPicker,\n\t\tModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t\tButtonVue,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=061d37d0&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=061d37d0&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=061d37d0&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=061d37d0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"061d37d0\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","select","apply","arguments","_v","_s","icon","message","_f","_l","status","selectStatus","preventDefault","ref","disabled","$t","domProps","change","submit","label","option","checked","onChange","class","subline","closeModal","_b","statusType","changeStatus","setIcon","visibleIcon","setMessage","saveStatus","selectPredefinedMessage","setClearAt","isSavingStatus","clearStatus"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/user_status-menu.js b/dist/user_status-menu.js index fef6d7d75b0..338dc9fb57f 100644 --- a/dist/user_status-menu.js +++ b/dist/user_status-menu.js @@ -1,3 +1,3 @@ /*! For license information please see user_status-menu.js.LICENSE.txt */ -!function(){var e,n,r,s={93365:function(t,e,n){var r={"./af":36026,"./af.js":36026,"./ar":28093,"./ar-dz":41943,"./ar-dz.js":41943,"./ar-kw":23969,"./ar-kw.js":23969,"./ar-ly":40594,"./ar-ly.js":40594,"./ar-ma":18369,"./ar-ma.js":18369,"./ar-sa":32579,"./ar-sa.js":32579,"./ar-tn":76442,"./ar-tn.js":76442,"./ar.js":28093,"./az":86425,"./az.js":86425,"./be":22004,"./be.js":22004,"./bg":42982,"./bg.js":42982,"./bm":21067,"./bm.js":21067,"./bn":8366,"./bn-bd":63837,"./bn-bd.js":63837,"./bn.js":8366,"./bo":95040,"./bo.js":95040,"./br":521,"./br.js":521,"./bs":83242,"./bs.js":83242,"./ca":73046,"./ca.js":73046,"./cs":25794,"./cs.js":25794,"./cv":28231,"./cv.js":28231,"./cy":10927,"./cy.js":10927,"./da":42832,"./da.js":42832,"./de":29415,"./de-at":3331,"./de-at.js":3331,"./de-ch":45524,"./de-ch.js":45524,"./de.js":29415,"./dv":44700,"./dv.js":44700,"./el":88752,"./el.js":88752,"./en-au":90444,"./en-au.js":90444,"./en-ca":65959,"./en-ca.js":65959,"./en-gb":62762,"./en-gb.js":62762,"./en-ie":40909,"./en-ie.js":40909,"./en-il":79909,"./en-il.js":79909,"./en-in":87942,"./en-in.js":87942,"./en-nz":75200,"./en-nz.js":75200,"./en-sg":21415,"./en-sg.js":21415,"./eo":27447,"./eo.js":27447,"./es":86756,"./es-do":47049,"./es-do.js":47049,"./es-mx":15915,"./es-mx.js":15915,"./es-us":57133,"./es-us.js":57133,"./es.js":86756,"./et":72182,"./et.js":72182,"./eu":14419,"./eu.js":14419,"./fa":2916,"./fa.js":2916,"./fi":49964,"./fi.js":49964,"./fil":16448,"./fil.js":16448,"./fo":26094,"./fo.js":26094,"./fr":35833,"./fr-ca":56994,"./fr-ca.js":56994,"./fr-ch":2740,"./fr-ch.js":2740,"./fr.js":35833,"./fy":69542,"./fy.js":69542,"./ga":93264,"./ga.js":93264,"./gd":77457,"./gd.js":77457,"./gl":83043,"./gl.js":83043,"./gom-deva":24034,"./gom-deva.js":24034,"./gom-latn":28379,"./gom-latn.js":28379,"./gu":406,"./gu.js":406,"./he":73219,"./he.js":73219,"./hi":99834,"./hi.js":99834,"./hr":28754,"./hr.js":28754,"./hu":93945,"./hu.js":93945,"./hy-am":81319,"./hy-am.js":81319,"./id":24875,"./id.js":24875,"./is":23724,"./is.js":23724,"./it":79906,"./it-ch":34303,"./it-ch.js":34303,"./it.js":79906,"./ja":77105,"./ja.js":77105,"./jv":15026,"./jv.js":15026,"./ka":67416,"./ka.js":67416,"./kk":79734,"./kk.js":79734,"./km":60757,"./km.js":60757,"./kn":58369,"./kn.js":58369,"./ko":77687,"./ko.js":77687,"./ku":95544,"./ku.js":95544,"./ky":85431,"./ky.js":85431,"./lb":13613,"./lb.js":13613,"./lo":34252,"./lo.js":34252,"./lt":84619,"./lt.js":84619,"./lv":93760,"./lv.js":93760,"./me":93393,"./me.js":93393,"./mi":12369,"./mi.js":12369,"./mk":48664,"./mk.js":48664,"./ml":23099,"./ml.js":23099,"./mn":98539,"./mn.js":98539,"./mr":778,"./mr.js":778,"./ms":39970,"./ms-my":82625,"./ms-my.js":82625,"./ms.js":39970,"./mt":15714,"./mt.js":15714,"./my":53055,"./my.js":53055,"./nb":73945,"./nb.js":73945,"./ne":63645,"./ne.js":63645,"./nl":4829,"./nl-be":12823,"./nl-be.js":12823,"./nl.js":4829,"./nn":23756,"./nn.js":23756,"./oc-lnc":41228,"./oc-lnc.js":41228,"./pa-in":97877,"./pa-in.js":97877,"./pl":53066,"./pl.js":53066,"./pt":28677,"./pt-br":81592,"./pt-br.js":81592,"./pt.js":28677,"./ro":32722,"./ro.js":32722,"./ru":59138,"./ru.js":59138,"./sd":32568,"./sd.js":32568,"./se":49753,"./se.js":49753,"./si":58024,"./si.js":58024,"./sk":31058,"./sk.js":31058,"./sl":43452,"./sl.js":43452,"./sq":2795,"./sq.js":2795,"./sr":26976,"./sr-cyrl":38819,"./sr-cyrl.js":38819,"./sr.js":26976,"./ss":7467,"./ss.js":7467,"./sv":42787,"./sv.js":42787,"./sw":80298,"./sw.js":80298,"./ta":57532,"./ta.js":57532,"./te":76076,"./te.js":76076,"./tet":40452,"./tet.js":40452,"./tg":64794,"./tg.js":64794,"./th":48245,"./th.js":48245,"./tk":8870,"./tk.js":8870,"./tl-ph":36056,"./tl-ph.js":36056,"./tlh":15249,"./tlh.js":15249,"./tr":22053,"./tr.js":22053,"./tzl":39871,"./tzl.js":39871,"./tzm":39574,"./tzm-latn":19210,"./tzm-latn.js":19210,"./tzm.js":39574,"./ug-cn":91532,"./ug-cn.js":91532,"./uk":11432,"./uk.js":11432,"./ur":88523,"./ur.js":88523,"./uz":54958,"./uz-latn":68735,"./uz-latn.js":68735,"./uz.js":54958,"./vi":83398,"./vi.js":83398,"./x-pseudo":56665,"./x-pseudo.js":56665,"./yo":11642,"./yo.js":11642,"./zh-cn":5462,"./zh-cn.js":5462,"./zh-hk":92530,"./zh-hk.js":92530,"./zh-mo":41650,"./zh-mo.js":41650,"./zh-tw":97333,"./zh-tw.js":97333};function s(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}s.keys=function(){return Object.keys(r)},s.resolve=a,t.exports=s,s.id=93365},75176:function(e,n,r){"use strict";var s=r(20144),a=r(22200),o=r(79753),i=r(16453),u=r(74854),c=r(20296),l=r.n(c),d=r(4820);function m(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var p=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateUrl)("/apps/user_status/heartbeat"),t.next=3,d.default.put(n,{status:e?"away":"online"});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){m(a,r,s,o,i,"next",t)}function i(t){m(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),f=r(84387);function v(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var h=(0,i.loadState)("user_status","profileEnabled",!1).profileEnabled,g={name:"UserStatus",components:{SetStatusModal:function(){return Promise.all([r.e(7874),r.e(8299)]).then(r.bind(r,21516))}},mixins:[f.Z],props:{inline:{type:Boolean,default:!1}},data:function(){return{displayName:(0,a.getCurrentUser)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:h,setAwayTimeout:null}},computed:{profilePageLink:function(){return this.profileEnabled?(0,o.generateUrl)("/u/{userId}",{userId:(0,a.getCurrentUser)().uid}):null}},mounted:function(){var t=this;(0,u.subscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.subscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=function(){t.isAway=!0},this.mouseMoveListener=l()((function(){var e=t.isAway;t.isAway=!1,clearTimeout(t.setAwayTimeout),setTimeout(t.setAwayTimeout,12e4),e&&t._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,u.subscribe)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy:function(){(0,u.unsubscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.unsubscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,u.unsubscribe)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate:function(t){this.displayName=t},handleProfileEnabledUpdate:function(t){this.profileEnabled=t},loadProfilePage:function(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal:function(){this.isModalOpen=!0},closeModal:function(){this.isModalOpen=!1},_backgroundHeartbeat:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,p(e.isAway);case 3:if(null==(n=t.sent)||!n.userId){t.next=8;break}e.$store.dispatch("setStatusFromHeartbeat",n),t.next=10;break;case 8:return t.next=10,e.$store.dispatch("reFetchStatusFromServer");case 10:t.next=15;break;case 12:t.prev=12,t.t0=t.catch(0),console.debug("Failed sending heartbeat, got: "+(null===(r=t.t0.response)||void 0===r?void 0:r.status));case 15:case"end":return t.stop()}}),t,null,[[0,12]])})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){v(a,r,s,o,i,"next",t)}function i(t){v(a,r,s,o,i,"throw",t)}o(void 0)}))})()},handleUserStatusUpdated:function(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},A=g,b=r(93379),j=r.n(b),y=r(7795),C=r.n(y),w=r(90569),x=r.n(w),_=r(3565),k=r.n(_),S=r(19216),P=r.n(S),O=r(44589),I=r.n(O),U=r(90460),D={};D.styleTagTransform=I(),D.setAttributes=k(),D.insert=x().bind(null,"head"),D.domAPI=C(),D.insertStyleElement=P(),j()(U.Z,D),U.Z&&U.Z.locals&&U.Z.locals;var M=(0,r(51900).Z)(A,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",[n("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():n("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[n("div",{staticClass:"user-status-menu-item__header-content"},[n("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?n("div",{staticClass:"icon-loading-small"}):n("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?n("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),n(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[n("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?n("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"24d48be7",null),E=M.exports,R=r(20629);function T(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var z=function(){var t,e=(t=regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){T(a,r,s,o,i,"next",t)}function i(t){T(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(){return e.apply(this,arguments)}}();function B(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,s=function(){};return{s:s,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,i=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){i=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(i)throw a}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function $(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var N={loadAllPredefinedStatuses:function(t){return(e=regeneratorRuntime.mark((function e(){var n,r,s,a,o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.state,r=t.commit,!(n.predefinedStatuses.length>0)){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,z();case 5:s=e.sent,a=B(s);try{for(a.s();!(o=a.n()).done;)i=o.value,r("addPredefinedStatus",i)}catch(t){a.e(t)}finally{a.f()}case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function o(t){$(a,r,s,o,i,"next",t)}function i(t){$(a,r,s,o,i,"throw",t)}o(void 0)}))})();var e}},L={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:N};function q(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function Z(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){q(a,r,s,o,i,"next",t)}function i(t){q(a,r,s,o,i,"throw",t)}o(void 0)}))}}var H=function(){var t=Z(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),G=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/status"),t.next=3,d.default.put(n,{statusType:e});case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Q=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=s.length>1&&void 0!==s[1]?s[1]:null,r=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json"),t.next=4,d.default.put(r,{messageId:e,clearAt:n});case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),W=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s,a=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:null,r=a.length>2&&void 0!==a[2]?a[2]:null,s=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json"),t.next=5,d.default.put(s,{message:e,statusIcon:n,clearAt:r});case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),J=function(){var t=Z(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json"),t.next=3,d.default.delete(e);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),K=r(64039),V=r(80351),X=r.n(V),Y=function(t){if(null===t)return null;var e=(0,K.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(X()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null};function tt(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function et(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){tt(a,r,s,o,i,"next",t)}function i(t){tt(a,r,s,o,i,"throw",t)}o(void 0)}))}}var nt={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(t,e){var n=e.statusType;t.status=n,t.statusIsUserDefined=!0},setPredefinedMessage:function(t,e){var n=e.messageId,r=e.clearAt,s=e.message,a=e.icon;t.messageId=n,t.messageIsPredefined=!0,t.message=s,t.icon=a,t.clearAt=r},setCustomMessage:function(t,e){var n=e.message,r=e.icon,s=e.clearAt;t.messageId=null,t.messageIsPredefined=!1,t.message=n,t.icon=r,t.clearAt=s},clearMessage:function(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer:function(t,e){var n=e.status,r=e.statusIsUserDefined,s=e.message,a=e.icon,o=e.clearAt,i=e.messageIsPredefined,u=e.messageId;t.status=n,t.statusIsUserDefined=r,t.message=s,t.icon=a,t.clearAt=o,t.messageIsPredefined=i,t.messageId=u}},getters:{},actions:{setStatus:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.statusType,n.next=4,G(i);case 4:s("setStatus",{statusType:i}),(0,u.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 6:case"end":return n.stop()}}),n)})))()},setStatusFromObject:function(t,e){return et(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=t.commit,t.state,r("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d,m,p,f;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.rootState,i=t.state,c=e.messageId,l=e.clearAt,d=Y(l),n.next=5,Q(c,d);case 5:m=o.predefinedStatuses.predefinedStatuses.find((function(t){return t.id===c})),p=m.message,f=m.icon,s("setPredefinedMessage",{messageId:c,clearAt:d,message:p,icon:f}),(0,u.emit)("user_status:status.updated",{status:i.status,message:i.message,icon:i.icon,clearAt:i.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.message,c=e.icon,l=e.clearAt,d=Y(l),n.next=5,W(i,c,d);case 5:s("setCustomMessage",{message:i,icon:c,clearAt:d}),(0,u.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(t){return et(regeneratorRuntime.mark((function e(){var n,r,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.commit,s=t.state,e.next=3,J();case 3:r("clearMessage"),(0,u.emit)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:null===(n=(0,a.getCurrentUser)())||void 0===n?void 0:n.uid});case 5:case"end":return e.stop()}}),e)})))()},reFetchStatusFromServer:function(t){return et(regeneratorRuntime.mark((function e(){var n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.commit,e.next=3,H();case 3:r=e.sent,n("loadStatusFromServer",r);case 5:case"end":return e.stop()}}),e)})))()},setStatusFromHeartbeat:function(t,e){return et(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,t.commit)("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(t){(0,t.commit)("loadStatusFromServer",(0,i.loadState)("user_status","status"))}}};s.default.use(R.ZP);var rt=new R.yh({modules:{predefinedStatuses:L,userStatus:nt},strict:!0}),st=r(28017),at=r.n(st);r.nc=btoa((0,a.getRequestToken)()),s.default.prototype.t=t,s.default.prototype.$t=t;var ot=document.getElementById("avatardiv-menu"),it=(0,i.loadState)("user_status","status"),ut={preloadedUserStatus:{message:it.message,icon:it.icon,status:it.status},user:ot.dataset.user,displayName:ot.dataset.displayname,url:ot.dataset.avatar,disableMenu:!0,disableTooltip:!0};new(s.default.extend(at()))({propsData:ut}).$mount("#avatardiv-menu"),new s.default({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(t){return t(E)},store:rt}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(t){return new(s.default.extend(E))({propsData:{inline:!0},store:rt}).$mount(t)}))}))},84387:function(t,e,n){"use strict";var r=n(20629),s=n(26932);function a(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){u(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function u(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.Z={computed:i(i({},(0,r.rn)({statusType:function(t){return t.userStatus.status},statusIsUserDefined:function(t){return t.userStatus.statusIsUserDefined},customIcon:function(t){return t.userStatus.icon},customMessage:function(t){return t.userStatus.message}})),{},{visibleMessage:function(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon:function(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}}),methods:{changeStatus:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,n.$store.dispatch("setStatus",{statusType:t});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),(0,s.x2)(n.$t("user_status","There was an error saving the new status")),console.debug(e.t0);case 9:case"end":return e.stop()}}),e,null,[[0,5]])})),function(){var t=this,n=arguments;return new Promise((function(r,s){var o=e.apply(t,n);function i(t){a(o,r,s,i,u,"next",t)}function u(t){a(o,r,s,i,u,"throw",t)}i(void 0)}))})()}}}},64039:function(t,e,n){"use strict";n.d(e,{n:function(){return r}});var r=function(){return new Date}},90460:function(t,e,n){"use strict";var r=n(87537),s=n.n(r),a=n(23645),o=n.n(a)()(s());o.push([t.id,".user-status-menu-item__header[data-v-24d48be7]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-24d48be7]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-24d48be7]{cursor:default !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-24d48be7]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-24d48be7]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-24d48be7]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-24d48be7]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-24d48be7]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-24d48be7]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:active,.user-status-menu-item__toggle--inline[data-v-24d48be7]:hover,.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-24d48be7]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]),e.Z=o}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=s,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},e=[],o.O=function(t,n,r,s){if(!n){var a=1/0;for(l=0;l<e.length;l++){n=e[l][0],r=e[l][1],s=e[l][2];for(var i=!0,u=0;u<n.length;u++)(!1&s||a>=s)&&Object.keys(o.O).every((function(t){return o.O[t](n[u])}))?n.splice(u--,1):(i=!1,s<a&&(a=s));if(i){e.splice(l--,1);var c=r();void 0!==c&&(t=c)}}return t}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[n,r,s]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce((function(e,n){return o.f[n](t,e),e}),[]))},o.u=function(t){return"user-status-modal-"+t+".js?v=3f331fd4343acdf15116"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n={},r="nextcloud:",o.l=function(t,e,s,a){if(n[t])n[t].push(e);else{var i,u;if(void 0!==s)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+s){i=d;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,o.nc&&i.setAttribute("nonce",o.nc),i.setAttribute("data-webpack",r+s),i.src=t),n[t]=[e];var m=function(e,r){i.onerror=i.onload=null,clearTimeout(p);var s=n[t];if(delete n[t],i.parentNode&&i.parentNode.removeChild(i),s&&s.forEach((function(t){return t(r)})),e)return e(r)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=m.bind(null,i.onerror),i.onload=m.bind(null,i.onload),u&&document.head.appendChild(i)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=2613,function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b=document.baseURI||self.location.href;var t={2613:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var s=new Promise((function(n,s){r=t[e]=[n,s]}));n.push(r[2]=s);var a=o.p+o.u(e),i=new Error;o.l(a,(function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,r[1](i)}}),"chunk-"+e,e)}},o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,s,a=n[0],i=n[1],u=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(r in i)o.o(i,r)&&(o.m[r]=i[r]);if(u)var l=u(o)}for(e&&e(n);c<a.length;c++)s=a[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}();var i=o.O(void 0,[7874],(function(){return o(75176)}));i=o.O(i)}(); -//# sourceMappingURL=user_status-menu.js.map?v=254715d31618ef74e539
\ No newline at end of file +!function(){var e,n,r,s={93365:function(t,e,n){var r={"./af":36026,"./af.js":36026,"./ar":28093,"./ar-dz":41943,"./ar-dz.js":41943,"./ar-kw":23969,"./ar-kw.js":23969,"./ar-ly":40594,"./ar-ly.js":40594,"./ar-ma":18369,"./ar-ma.js":18369,"./ar-sa":32579,"./ar-sa.js":32579,"./ar-tn":76442,"./ar-tn.js":76442,"./ar.js":28093,"./az":86425,"./az.js":86425,"./be":22004,"./be.js":22004,"./bg":42982,"./bg.js":42982,"./bm":21067,"./bm.js":21067,"./bn":8366,"./bn-bd":63837,"./bn-bd.js":63837,"./bn.js":8366,"./bo":95040,"./bo.js":95040,"./br":521,"./br.js":521,"./bs":83242,"./bs.js":83242,"./ca":73046,"./ca.js":73046,"./cs":25794,"./cs.js":25794,"./cv":28231,"./cv.js":28231,"./cy":10927,"./cy.js":10927,"./da":42832,"./da.js":42832,"./de":29415,"./de-at":3331,"./de-at.js":3331,"./de-ch":45524,"./de-ch.js":45524,"./de.js":29415,"./dv":44700,"./dv.js":44700,"./el":88752,"./el.js":88752,"./en-au":90444,"./en-au.js":90444,"./en-ca":65959,"./en-ca.js":65959,"./en-gb":62762,"./en-gb.js":62762,"./en-ie":40909,"./en-ie.js":40909,"./en-il":79909,"./en-il.js":79909,"./en-in":87942,"./en-in.js":87942,"./en-nz":75200,"./en-nz.js":75200,"./en-sg":21415,"./en-sg.js":21415,"./eo":27447,"./eo.js":27447,"./es":86756,"./es-do":47049,"./es-do.js":47049,"./es-mx":15915,"./es-mx.js":15915,"./es-us":57133,"./es-us.js":57133,"./es.js":86756,"./et":72182,"./et.js":72182,"./eu":14419,"./eu.js":14419,"./fa":2916,"./fa.js":2916,"./fi":49964,"./fi.js":49964,"./fil":16448,"./fil.js":16448,"./fo":26094,"./fo.js":26094,"./fr":35833,"./fr-ca":56994,"./fr-ca.js":56994,"./fr-ch":2740,"./fr-ch.js":2740,"./fr.js":35833,"./fy":69542,"./fy.js":69542,"./ga":93264,"./ga.js":93264,"./gd":77457,"./gd.js":77457,"./gl":83043,"./gl.js":83043,"./gom-deva":24034,"./gom-deva.js":24034,"./gom-latn":28379,"./gom-latn.js":28379,"./gu":406,"./gu.js":406,"./he":73219,"./he.js":73219,"./hi":99834,"./hi.js":99834,"./hr":28754,"./hr.js":28754,"./hu":93945,"./hu.js":93945,"./hy-am":81319,"./hy-am.js":81319,"./id":24875,"./id.js":24875,"./is":23724,"./is.js":23724,"./it":79906,"./it-ch":34303,"./it-ch.js":34303,"./it.js":79906,"./ja":77105,"./ja.js":77105,"./jv":15026,"./jv.js":15026,"./ka":67416,"./ka.js":67416,"./kk":79734,"./kk.js":79734,"./km":60757,"./km.js":60757,"./kn":58369,"./kn.js":58369,"./ko":77687,"./ko.js":77687,"./ku":95544,"./ku.js":95544,"./ky":85431,"./ky.js":85431,"./lb":13613,"./lb.js":13613,"./lo":34252,"./lo.js":34252,"./lt":84619,"./lt.js":84619,"./lv":93760,"./lv.js":93760,"./me":93393,"./me.js":93393,"./mi":12369,"./mi.js":12369,"./mk":48664,"./mk.js":48664,"./ml":23099,"./ml.js":23099,"./mn":98539,"./mn.js":98539,"./mr":778,"./mr.js":778,"./ms":39970,"./ms-my":82625,"./ms-my.js":82625,"./ms.js":39970,"./mt":15714,"./mt.js":15714,"./my":53055,"./my.js":53055,"./nb":73945,"./nb.js":73945,"./ne":63645,"./ne.js":63645,"./nl":4829,"./nl-be":12823,"./nl-be.js":12823,"./nl.js":4829,"./nn":23756,"./nn.js":23756,"./oc-lnc":41228,"./oc-lnc.js":41228,"./pa-in":97877,"./pa-in.js":97877,"./pl":53066,"./pl.js":53066,"./pt":28677,"./pt-br":81592,"./pt-br.js":81592,"./pt.js":28677,"./ro":32722,"./ro.js":32722,"./ru":59138,"./ru.js":59138,"./sd":32568,"./sd.js":32568,"./se":49753,"./se.js":49753,"./si":58024,"./si.js":58024,"./sk":31058,"./sk.js":31058,"./sl":43452,"./sl.js":43452,"./sq":2795,"./sq.js":2795,"./sr":26976,"./sr-cyrl":38819,"./sr-cyrl.js":38819,"./sr.js":26976,"./ss":7467,"./ss.js":7467,"./sv":42787,"./sv.js":42787,"./sw":80298,"./sw.js":80298,"./ta":57532,"./ta.js":57532,"./te":76076,"./te.js":76076,"./tet":40452,"./tet.js":40452,"./tg":64794,"./tg.js":64794,"./th":48245,"./th.js":48245,"./tk":8870,"./tk.js":8870,"./tl-ph":36056,"./tl-ph.js":36056,"./tlh":15249,"./tlh.js":15249,"./tr":22053,"./tr.js":22053,"./tzl":39871,"./tzl.js":39871,"./tzm":39574,"./tzm-latn":19210,"./tzm-latn.js":19210,"./tzm.js":39574,"./ug-cn":91532,"./ug-cn.js":91532,"./uk":11432,"./uk.js":11432,"./ur":88523,"./ur.js":88523,"./uz":54958,"./uz-latn":68735,"./uz-latn.js":68735,"./uz.js":54958,"./vi":83398,"./vi.js":83398,"./x-pseudo":56665,"./x-pseudo.js":56665,"./yo":11642,"./yo.js":11642,"./zh-cn":5462,"./zh-cn.js":5462,"./zh-hk":92530,"./zh-hk.js":92530,"./zh-mo":41650,"./zh-mo.js":41650,"./zh-tw":97333,"./zh-tw.js":97333};function s(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}s.keys=function(){return Object.keys(r)},s.resolve=a,t.exports=s,s.id=93365},75176:function(e,n,r){"use strict";var s=r(20144),a=r(22200),o=r(79753),i=r(16453),u=r(74854),c=r(20296),l=r.n(c),d=r(4820);function m(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var p=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateUrl)("/apps/user_status/heartbeat"),t.next=3,d.default.put(n,{status:e?"away":"online"});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){m(a,r,s,o,i,"next",t)}function i(t){m(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),f=r(84387);function v(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var h=(0,i.loadState)("user_status","profileEnabled",!1).profileEnabled,g={name:"UserStatus",components:{SetStatusModal:function(){return Promise.all([r.e(7874),r.e(8299)]).then(r.bind(r,37323))}},mixins:[f.Z],props:{inline:{type:Boolean,default:!1}},data:function(){return{displayName:(0,a.getCurrentUser)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:h,setAwayTimeout:null}},computed:{profilePageLink:function(){return this.profileEnabled?(0,o.generateUrl)("/u/{userId}",{userId:(0,a.getCurrentUser)().uid}):null}},mounted:function(){var t=this;(0,u.subscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.subscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=function(){t.isAway=!0},this.mouseMoveListener=l()((function(){var e=t.isAway;t.isAway=!1,clearTimeout(t.setAwayTimeout),setTimeout(t.setAwayTimeout,12e4),e&&t._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,u.subscribe)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy:function(){(0,u.unsubscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.unsubscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,u.unsubscribe)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate:function(t){this.displayName=t},handleProfileEnabledUpdate:function(t){this.profileEnabled=t},loadProfilePage:function(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal:function(){this.isModalOpen=!0},closeModal:function(){this.isModalOpen=!1},_backgroundHeartbeat:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,p(e.isAway);case 3:if(null==(n=t.sent)||!n.userId){t.next=8;break}e.$store.dispatch("setStatusFromHeartbeat",n),t.next=10;break;case 8:return t.next=10,e.$store.dispatch("reFetchStatusFromServer");case 10:t.next=15;break;case 12:t.prev=12,t.t0=t.catch(0),console.debug("Failed sending heartbeat, got: "+(null===(r=t.t0.response)||void 0===r?void 0:r.status));case 15:case"end":return t.stop()}}),t,null,[[0,12]])})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){v(a,r,s,o,i,"next",t)}function i(t){v(a,r,s,o,i,"throw",t)}o(void 0)}))})()},handleUserStatusUpdated:function(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},A=g,b=r(93379),j=r.n(b),y=r(7795),C=r.n(y),w=r(90569),x=r.n(w),_=r(3565),k=r.n(_),S=r(19216),P=r.n(S),O=r(44589),I=r.n(O),U=r(90460),D={};D.styleTagTransform=I(),D.setAttributes=k(),D.insert=x().bind(null,"head"),D.domAPI=C(),D.insertStyleElement=P(),j()(U.Z,D),U.Z&&U.Z.locals&&U.Z.locals;var M=(0,r(51900).Z)(A,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",[n("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():n("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[n("div",{staticClass:"user-status-menu-item__header-content"},[n("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?n("div",{staticClass:"icon-loading-small"}):n("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?n("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),n(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[n("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?n("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"24d48be7",null),E=M.exports,R=r(20629);function T(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var z=function(){var t,e=(t=regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){T(a,r,s,o,i,"next",t)}function i(t){T(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(){return e.apply(this,arguments)}}();function B(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,s=function(){};return{s:s,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,i=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){i=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(i)throw a}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function $(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var N={loadAllPredefinedStatuses:function(t){return(e=regeneratorRuntime.mark((function e(){var n,r,s,a,o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.state,r=t.commit,!(n.predefinedStatuses.length>0)){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,z();case 5:s=e.sent,a=B(s);try{for(a.s();!(o=a.n()).done;)i=o.value,r("addPredefinedStatus",i)}catch(t){a.e(t)}finally{a.f()}case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function o(t){$(a,r,s,o,i,"next",t)}function i(t){$(a,r,s,o,i,"throw",t)}o(void 0)}))})();var e}},L={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:N};function q(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function Z(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){q(a,r,s,o,i,"next",t)}function i(t){q(a,r,s,o,i,"throw",t)}o(void 0)}))}}var H=function(){var t=Z(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),G=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/status"),t.next=3,d.default.put(n,{statusType:e});case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Q=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=s.length>1&&void 0!==s[1]?s[1]:null,r=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json"),t.next=4,d.default.put(r,{messageId:e,clearAt:n});case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),W=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s,a=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:null,r=a.length>2&&void 0!==a[2]?a[2]:null,s=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json"),t.next=5,d.default.put(s,{message:e,statusIcon:n,clearAt:r});case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),J=function(){var t=Z(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json"),t.next=3,d.default.delete(e);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),K=r(64039),V=r(80351),X=r.n(V),Y=function(t){if(null===t)return null;var e=(0,K.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(X()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null};function tt(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function et(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){tt(a,r,s,o,i,"next",t)}function i(t){tt(a,r,s,o,i,"throw",t)}o(void 0)}))}}var nt={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(t,e){var n=e.statusType;t.status=n,t.statusIsUserDefined=!0},setPredefinedMessage:function(t,e){var n=e.messageId,r=e.clearAt,s=e.message,a=e.icon;t.messageId=n,t.messageIsPredefined=!0,t.message=s,t.icon=a,t.clearAt=r},setCustomMessage:function(t,e){var n=e.message,r=e.icon,s=e.clearAt;t.messageId=null,t.messageIsPredefined=!1,t.message=n,t.icon=r,t.clearAt=s},clearMessage:function(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer:function(t,e){var n=e.status,r=e.statusIsUserDefined,s=e.message,a=e.icon,o=e.clearAt,i=e.messageIsPredefined,u=e.messageId;t.status=n,t.message=s,t.icon=a,void 0!==r&&(t.statusIsUserDefined=r),void 0!==o&&(t.clearAt=o),void 0!==i&&(t.messageIsPredefined=i),void 0!==u&&(t.messageId=u)}},getters:{},actions:{setStatus:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.statusType,n.next=4,G(i);case 4:s("setStatus",{statusType:i}),(0,u.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 6:case"end":return n.stop()}}),n)})))()},setStatusFromObject:function(t,e){return et(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=t.commit,t.state,r("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d,m,p,f;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.rootState,i=t.state,c=e.messageId,l=e.clearAt,d=Y(l),n.next=5,Q(c,d);case 5:m=o.predefinedStatuses.predefinedStatuses.find((function(t){return t.id===c})),p=m.message,f=m.icon,s("setPredefinedMessage",{messageId:c,clearAt:d,message:p,icon:f}),(0,u.emit)("user_status:status.updated",{status:i.status,message:i.message,icon:i.icon,clearAt:i.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.message,c=e.icon,l=e.clearAt,d=Y(l),n.next=5,W(i,c,d);case 5:s("setCustomMessage",{message:i,icon:c,clearAt:d}),(0,u.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(t){return et(regeneratorRuntime.mark((function e(){var n,r,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.commit,s=t.state,e.next=3,J();case 3:r("clearMessage"),(0,u.emit)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:null===(n=(0,a.getCurrentUser)())||void 0===n?void 0:n.uid});case 5:case"end":return e.stop()}}),e)})))()},reFetchStatusFromServer:function(t){return et(regeneratorRuntime.mark((function e(){var n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.commit,e.next=3,H();case 3:r=e.sent,n("loadStatusFromServer",r);case 5:case"end":return e.stop()}}),e)})))()},setStatusFromHeartbeat:function(t,e){return et(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,t.commit)("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(t){(0,t.commit)("loadStatusFromServer",(0,i.loadState)("user_status","status"))}}};s.default.use(R.ZP);var rt=new R.yh({modules:{predefinedStatuses:L,userStatus:nt},strict:!0}),st=r(28017),at=r.n(st);r.nc=btoa((0,a.getRequestToken)()),s.default.prototype.t=t,s.default.prototype.$t=t;var ot=document.getElementById("avatardiv-menu"),it=(0,i.loadState)("user_status","status"),ut={preloadedUserStatus:{message:it.message,icon:it.icon,status:it.status},user:ot.dataset.user,displayName:ot.dataset.displayname,url:ot.dataset.avatar,disableMenu:!0,disableTooltip:!0};new(s.default.extend(at()))({propsData:ut}).$mount("#avatardiv-menu"),new s.default({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(t){return t(E)},store:rt}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(t){return new(s.default.extend(E))({propsData:{inline:!0},store:rt}).$mount(t)}))}))},84387:function(t,e,n){"use strict";var r=n(20629),s=n(26932);function a(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){u(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function u(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.Z={computed:i(i({},(0,r.rn)({statusType:function(t){return t.userStatus.status},statusIsUserDefined:function(t){return t.userStatus.statusIsUserDefined},customIcon:function(t){return t.userStatus.icon},customMessage:function(t){return t.userStatus.message}})),{},{visibleMessage:function(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon:function(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}}),methods:{changeStatus:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,n.$store.dispatch("setStatus",{statusType:t});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),(0,s.x2)(n.$t("user_status","There was an error saving the new status")),console.debug(e.t0);case 9:case"end":return e.stop()}}),e,null,[[0,5]])})),function(){var t=this,n=arguments;return new Promise((function(r,s){var o=e.apply(t,n);function i(t){a(o,r,s,i,u,"next",t)}function u(t){a(o,r,s,i,u,"throw",t)}i(void 0)}))})()}}}},64039:function(t,e,n){"use strict";n.d(e,{n:function(){return r}});var r=function(){return new Date}},90460:function(t,e,n){"use strict";var r=n(87537),s=n.n(r),a=n(23645),o=n.n(a)()(s());o.push([t.id,".user-status-menu-item__header[data-v-24d48be7]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-24d48be7]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-24d48be7]{cursor:default !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-24d48be7]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-24d48be7]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-24d48be7]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-24d48be7]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-24d48be7]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-24d48be7]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:active,.user-status-menu-item__toggle--inline[data-v-24d48be7]:hover,.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-24d48be7]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]),e.Z=o}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=s,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},e=[],o.O=function(t,n,r,s){if(!n){var a=1/0;for(l=0;l<e.length;l++){n=e[l][0],r=e[l][1],s=e[l][2];for(var i=!0,u=0;u<n.length;u++)(!1&s||a>=s)&&Object.keys(o.O).every((function(t){return o.O[t](n[u])}))?n.splice(u--,1):(i=!1,s<a&&(a=s));if(i){e.splice(l--,1);var c=r();void 0!==c&&(t=c)}}return t}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[n,r,s]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce((function(e,n){return o.f[n](t,e),e}),[]))},o.u=function(t){return"user-status-modal-"+t+".js?v=b2f975dbe50f5e918a41"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n={},r="nextcloud:",o.l=function(t,e,s,a){if(n[t])n[t].push(e);else{var i,u;if(void 0!==s)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+s){i=d;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,o.nc&&i.setAttribute("nonce",o.nc),i.setAttribute("data-webpack",r+s),i.src=t),n[t]=[e];var m=function(e,r){i.onerror=i.onload=null,clearTimeout(p);var s=n[t];if(delete n[t],i.parentNode&&i.parentNode.removeChild(i),s&&s.forEach((function(t){return t(r)})),e)return e(r)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=m.bind(null,i.onerror),i.onload=m.bind(null,i.onload),u&&document.head.appendChild(i)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=2613,function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b=document.baseURI||self.location.href;var t={2613:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var s=new Promise((function(n,s){r=t[e]=[n,s]}));n.push(r[2]=s);var a=o.p+o.u(e),i=new Error;o.l(a,(function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,r[1](i)}}),"chunk-"+e,e)}},o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,s,a=n[0],i=n[1],u=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(r in i)o.o(i,r)&&(o.m[r]=i[r]);if(u)var l=u(o)}for(e&&e(n);c<a.length;c++)s=a[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}();var i=o.O(void 0,[7874],(function(){return o(75176)}));i=o.O(i)}(); +//# sourceMappingURL=user_status-menu.js.map?v=e3d97a74be3f3c1f2a49
\ No newline at end of file diff --git a/dist/user_status-menu.js.map b/dist/user_status-menu.js.map index c3704b389e4..66bb39832f7 100644 --- a/dist/user_status-menu.js.map +++ b/dist/user_status-menu.js.map @@ -1 +1 @@ -{"version":3,"file":"user_status-menu.js?v=254715d31618ef74e539","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/@nextcloud/moment/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?6585","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=template&id=24d48be7&scoped=true&","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var map = {\n\t\"./af\": 36026,\n\t\"./af.js\": 36026,\n\t\"./ar\": 28093,\n\t\"./ar-dz\": 41943,\n\t\"./ar-dz.js\": 41943,\n\t\"./ar-kw\": 23969,\n\t\"./ar-kw.js\": 23969,\n\t\"./ar-ly\": 40594,\n\t\"./ar-ly.js\": 40594,\n\t\"./ar-ma\": 18369,\n\t\"./ar-ma.js\": 18369,\n\t\"./ar-sa\": 32579,\n\t\"./ar-sa.js\": 32579,\n\t\"./ar-tn\": 76442,\n\t\"./ar-tn.js\": 76442,\n\t\"./ar.js\": 28093,\n\t\"./az\": 86425,\n\t\"./az.js\": 86425,\n\t\"./be\": 22004,\n\t\"./be.js\": 22004,\n\t\"./bg\": 42982,\n\t\"./bg.js\": 42982,\n\t\"./bm\": 21067,\n\t\"./bm.js\": 21067,\n\t\"./bn\": 8366,\n\t\"./bn-bd\": 63837,\n\t\"./bn-bd.js\": 63837,\n\t\"./bn.js\": 8366,\n\t\"./bo\": 95040,\n\t\"./bo.js\": 95040,\n\t\"./br\": 521,\n\t\"./br.js\": 521,\n\t\"./bs\": 83242,\n\t\"./bs.js\": 83242,\n\t\"./ca\": 73046,\n\t\"./ca.js\": 73046,\n\t\"./cs\": 25794,\n\t\"./cs.js\": 25794,\n\t\"./cv\": 28231,\n\t\"./cv.js\": 28231,\n\t\"./cy\": 10927,\n\t\"./cy.js\": 10927,\n\t\"./da\": 42832,\n\t\"./da.js\": 42832,\n\t\"./de\": 29415,\n\t\"./de-at\": 3331,\n\t\"./de-at.js\": 3331,\n\t\"./de-ch\": 45524,\n\t\"./de-ch.js\": 45524,\n\t\"./de.js\": 29415,\n\t\"./dv\": 44700,\n\t\"./dv.js\": 44700,\n\t\"./el\": 88752,\n\t\"./el.js\": 88752,\n\t\"./en-au\": 90444,\n\t\"./en-au.js\": 90444,\n\t\"./en-ca\": 65959,\n\t\"./en-ca.js\": 65959,\n\t\"./en-gb\": 62762,\n\t\"./en-gb.js\": 62762,\n\t\"./en-ie\": 40909,\n\t\"./en-ie.js\": 40909,\n\t\"./en-il\": 79909,\n\t\"./en-il.js\": 79909,\n\t\"./en-in\": 87942,\n\t\"./en-in.js\": 87942,\n\t\"./en-nz\": 75200,\n\t\"./en-nz.js\": 75200,\n\t\"./en-sg\": 21415,\n\t\"./en-sg.js\": 21415,\n\t\"./eo\": 27447,\n\t\"./eo.js\": 27447,\n\t\"./es\": 86756,\n\t\"./es-do\": 47049,\n\t\"./es-do.js\": 47049,\n\t\"./es-mx\": 15915,\n\t\"./es-mx.js\": 15915,\n\t\"./es-us\": 57133,\n\t\"./es-us.js\": 57133,\n\t\"./es.js\": 86756,\n\t\"./et\": 72182,\n\t\"./et.js\": 72182,\n\t\"./eu\": 14419,\n\t\"./eu.js\": 14419,\n\t\"./fa\": 2916,\n\t\"./fa.js\": 2916,\n\t\"./fi\": 49964,\n\t\"./fi.js\": 49964,\n\t\"./fil\": 16448,\n\t\"./fil.js\": 16448,\n\t\"./fo\": 26094,\n\t\"./fo.js\": 26094,\n\t\"./fr\": 35833,\n\t\"./fr-ca\": 56994,\n\t\"./fr-ca.js\": 56994,\n\t\"./fr-ch\": 2740,\n\t\"./fr-ch.js\": 2740,\n\t\"./fr.js\": 35833,\n\t\"./fy\": 69542,\n\t\"./fy.js\": 69542,\n\t\"./ga\": 93264,\n\t\"./ga.js\": 93264,\n\t\"./gd\": 77457,\n\t\"./gd.js\": 77457,\n\t\"./gl\": 83043,\n\t\"./gl.js\": 83043,\n\t\"./gom-deva\": 24034,\n\t\"./gom-deva.js\": 24034,\n\t\"./gom-latn\": 28379,\n\t\"./gom-latn.js\": 28379,\n\t\"./gu\": 406,\n\t\"./gu.js\": 406,\n\t\"./he\": 73219,\n\t\"./he.js\": 73219,\n\t\"./hi\": 99834,\n\t\"./hi.js\": 99834,\n\t\"./hr\": 28754,\n\t\"./hr.js\": 28754,\n\t\"./hu\": 93945,\n\t\"./hu.js\": 93945,\n\t\"./hy-am\": 81319,\n\t\"./hy-am.js\": 81319,\n\t\"./id\": 24875,\n\t\"./id.js\": 24875,\n\t\"./is\": 23724,\n\t\"./is.js\": 23724,\n\t\"./it\": 79906,\n\t\"./it-ch\": 34303,\n\t\"./it-ch.js\": 34303,\n\t\"./it.js\": 79906,\n\t\"./ja\": 77105,\n\t\"./ja.js\": 77105,\n\t\"./jv\": 15026,\n\t\"./jv.js\": 15026,\n\t\"./ka\": 67416,\n\t\"./ka.js\": 67416,\n\t\"./kk\": 79734,\n\t\"./kk.js\": 79734,\n\t\"./km\": 60757,\n\t\"./km.js\": 60757,\n\t\"./kn\": 58369,\n\t\"./kn.js\": 58369,\n\t\"./ko\": 77687,\n\t\"./ko.js\": 77687,\n\t\"./ku\": 95544,\n\t\"./ku.js\": 95544,\n\t\"./ky\": 85431,\n\t\"./ky.js\": 85431,\n\t\"./lb\": 13613,\n\t\"./lb.js\": 13613,\n\t\"./lo\": 34252,\n\t\"./lo.js\": 34252,\n\t\"./lt\": 84619,\n\t\"./lt.js\": 84619,\n\t\"./lv\": 93760,\n\t\"./lv.js\": 93760,\n\t\"./me\": 93393,\n\t\"./me.js\": 93393,\n\t\"./mi\": 12369,\n\t\"./mi.js\": 12369,\n\t\"./mk\": 48664,\n\t\"./mk.js\": 48664,\n\t\"./ml\": 23099,\n\t\"./ml.js\": 23099,\n\t\"./mn\": 98539,\n\t\"./mn.js\": 98539,\n\t\"./mr\": 778,\n\t\"./mr.js\": 778,\n\t\"./ms\": 39970,\n\t\"./ms-my\": 82625,\n\t\"./ms-my.js\": 82625,\n\t\"./ms.js\": 39970,\n\t\"./mt\": 15714,\n\t\"./mt.js\": 15714,\n\t\"./my\": 53055,\n\t\"./my.js\": 53055,\n\t\"./nb\": 73945,\n\t\"./nb.js\": 73945,\n\t\"./ne\": 63645,\n\t\"./ne.js\": 63645,\n\t\"./nl\": 4829,\n\t\"./nl-be\": 12823,\n\t\"./nl-be.js\": 12823,\n\t\"./nl.js\": 4829,\n\t\"./nn\": 23756,\n\t\"./nn.js\": 23756,\n\t\"./oc-lnc\": 41228,\n\t\"./oc-lnc.js\": 41228,\n\t\"./pa-in\": 97877,\n\t\"./pa-in.js\": 97877,\n\t\"./pl\": 53066,\n\t\"./pl.js\": 53066,\n\t\"./pt\": 28677,\n\t\"./pt-br\": 81592,\n\t\"./pt-br.js\": 81592,\n\t\"./pt.js\": 28677,\n\t\"./ro\": 32722,\n\t\"./ro.js\": 32722,\n\t\"./ru\": 59138,\n\t\"./ru.js\": 59138,\n\t\"./sd\": 32568,\n\t\"./sd.js\": 32568,\n\t\"./se\": 49753,\n\t\"./se.js\": 49753,\n\t\"./si\": 58024,\n\t\"./si.js\": 58024,\n\t\"./sk\": 31058,\n\t\"./sk.js\": 31058,\n\t\"./sl\": 43452,\n\t\"./sl.js\": 43452,\n\t\"./sq\": 2795,\n\t\"./sq.js\": 2795,\n\t\"./sr\": 26976,\n\t\"./sr-cyrl\": 38819,\n\t\"./sr-cyrl.js\": 38819,\n\t\"./sr.js\": 26976,\n\t\"./ss\": 7467,\n\t\"./ss.js\": 7467,\n\t\"./sv\": 42787,\n\t\"./sv.js\": 42787,\n\t\"./sw\": 80298,\n\t\"./sw.js\": 80298,\n\t\"./ta\": 57532,\n\t\"./ta.js\": 57532,\n\t\"./te\": 76076,\n\t\"./te.js\": 76076,\n\t\"./tet\": 40452,\n\t\"./tet.js\": 40452,\n\t\"./tg\": 64794,\n\t\"./tg.js\": 64794,\n\t\"./th\": 48245,\n\t\"./th.js\": 48245,\n\t\"./tk\": 8870,\n\t\"./tk.js\": 8870,\n\t\"./tl-ph\": 36056,\n\t\"./tl-ph.js\": 36056,\n\t\"./tlh\": 15249,\n\t\"./tlh.js\": 15249,\n\t\"./tr\": 22053,\n\t\"./tr.js\": 22053,\n\t\"./tzl\": 39871,\n\t\"./tzl.js\": 39871,\n\t\"./tzm\": 39574,\n\t\"./tzm-latn\": 19210,\n\t\"./tzm-latn.js\": 19210,\n\t\"./tzm.js\": 39574,\n\t\"./ug-cn\": 91532,\n\t\"./ug-cn.js\": 91532,\n\t\"./uk\": 11432,\n\t\"./uk.js\": 11432,\n\t\"./ur\": 88523,\n\t\"./ur.js\": 88523,\n\t\"./uz\": 54958,\n\t\"./uz-latn\": 68735,\n\t\"./uz-latn.js\": 68735,\n\t\"./uz.js\": 54958,\n\t\"./vi\": 83398,\n\t\"./vi.js\": 83398,\n\t\"./x-pseudo\": 56665,\n\t\"./x-pseudo.js\": 56665,\n\t\"./yo\": 11642,\n\t\"./yo.js\": 11642,\n\t\"./zh-cn\": 5462,\n\t\"./zh-cn.js\": 5462,\n\t\"./zh-hk\": 92530,\n\t\"./zh-hk.js\": 92530,\n\t\"./zh-mo\": 41650,\n\t\"./zh-mo.js\": 41650,\n\t\"./zh-tw\": 97333,\n\t\"./zh-tw.js\": 97333\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 93365;","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateUrl('/apps/user_status/heartbeat')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li>\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a v-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal v-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=24d48be7&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24d48be7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t\tstate.messageIsPredefined = messageIsPredefined\n\t\tstate.messageId = messageId\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\nimport { loadState } from '@nextcloud/initial-state'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst userStatusData = loadState('user_status', 'status')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: userStatusData.message,\n\t\ticon: userStatusData.icon,\n\t\tstatus: userStatusData.status,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\turl: avatarDiv.dataset.avatar,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst AvatarInMenu = Vue.extend(Avatar)\nnew AvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-menu-item__header[data-v-24d48be7]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-24d48be7]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-24d48be7]{cursor:default !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-24d48be7]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-24d48be7]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-24d48be7]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-24d48be7]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-24d48be7]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-24d48be7]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:active,.user-status-menu-item__toggle--inline[data-v-24d48be7]:hover,.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-24d48be7]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:focus-visible {\\n\\t\\t\\tpadding: 6px 8px 1px 8px !important;\\n\\t\\t\\tmargin: 2px !important;\\n\\t\\t}\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-background-translucent);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"3f331fd4343acdf15116\" + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2613;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2613: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(75176); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","sendHeartbeat","isAway","url","generateUrl","HttpClient","status","response","data","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","inline","_e","attrs","profilePageLink","on","loadProfilePage","_v","_s","displayName","loadingProfilePage","t","tag","class","$event","preventDefault","stopPropagation","openModal","apply","arguments","statusIcon","visibleMessage","closeModal","fetchAllPredefinedStatuses","generateOcsUrl","ocs","actions","loadAllPredefinedStatuses","state","commit","predefinedStatuses","length","statuses","mutations","addPredefinedStatus","push","getters","fetchCurrentStatus","setStatus","statusType","setPredefinedMessage","messageId","clearAt","setCustomMessage","message","clearMessage","getTimestampForClearAt","date","dateFactory","type","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","icon","messageIsPredefined","loadStatusFromServer","emit","userId","getCurrentUser","uid","setStatusFromObject","rootState","resolvedClearAt","find","reFetchStatusFromServer","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","Vue","Vuex","Store","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","avatarDiv","document","getElementById","userStatusData","propsData","preloadedUserStatus","user","dataset","displayname","avatar","disableMenu","disableTooltip","Avatar","$mount","el","name","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","computed","mapState","customIcon","customMessage","$t","methods","changeStatus","$store","dispatch","showError","console","debug","Date","___CSS_LOADER_EXPORT___","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"user_status-menu.js?v=e3d97a74be3f3c1f2a49","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/@nextcloud/moment/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?6585","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=template&id=24d48be7&scoped=true&","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var map = {\n\t\"./af\": 36026,\n\t\"./af.js\": 36026,\n\t\"./ar\": 28093,\n\t\"./ar-dz\": 41943,\n\t\"./ar-dz.js\": 41943,\n\t\"./ar-kw\": 23969,\n\t\"./ar-kw.js\": 23969,\n\t\"./ar-ly\": 40594,\n\t\"./ar-ly.js\": 40594,\n\t\"./ar-ma\": 18369,\n\t\"./ar-ma.js\": 18369,\n\t\"./ar-sa\": 32579,\n\t\"./ar-sa.js\": 32579,\n\t\"./ar-tn\": 76442,\n\t\"./ar-tn.js\": 76442,\n\t\"./ar.js\": 28093,\n\t\"./az\": 86425,\n\t\"./az.js\": 86425,\n\t\"./be\": 22004,\n\t\"./be.js\": 22004,\n\t\"./bg\": 42982,\n\t\"./bg.js\": 42982,\n\t\"./bm\": 21067,\n\t\"./bm.js\": 21067,\n\t\"./bn\": 8366,\n\t\"./bn-bd\": 63837,\n\t\"./bn-bd.js\": 63837,\n\t\"./bn.js\": 8366,\n\t\"./bo\": 95040,\n\t\"./bo.js\": 95040,\n\t\"./br\": 521,\n\t\"./br.js\": 521,\n\t\"./bs\": 83242,\n\t\"./bs.js\": 83242,\n\t\"./ca\": 73046,\n\t\"./ca.js\": 73046,\n\t\"./cs\": 25794,\n\t\"./cs.js\": 25794,\n\t\"./cv\": 28231,\n\t\"./cv.js\": 28231,\n\t\"./cy\": 10927,\n\t\"./cy.js\": 10927,\n\t\"./da\": 42832,\n\t\"./da.js\": 42832,\n\t\"./de\": 29415,\n\t\"./de-at\": 3331,\n\t\"./de-at.js\": 3331,\n\t\"./de-ch\": 45524,\n\t\"./de-ch.js\": 45524,\n\t\"./de.js\": 29415,\n\t\"./dv\": 44700,\n\t\"./dv.js\": 44700,\n\t\"./el\": 88752,\n\t\"./el.js\": 88752,\n\t\"./en-au\": 90444,\n\t\"./en-au.js\": 90444,\n\t\"./en-ca\": 65959,\n\t\"./en-ca.js\": 65959,\n\t\"./en-gb\": 62762,\n\t\"./en-gb.js\": 62762,\n\t\"./en-ie\": 40909,\n\t\"./en-ie.js\": 40909,\n\t\"./en-il\": 79909,\n\t\"./en-il.js\": 79909,\n\t\"./en-in\": 87942,\n\t\"./en-in.js\": 87942,\n\t\"./en-nz\": 75200,\n\t\"./en-nz.js\": 75200,\n\t\"./en-sg\": 21415,\n\t\"./en-sg.js\": 21415,\n\t\"./eo\": 27447,\n\t\"./eo.js\": 27447,\n\t\"./es\": 86756,\n\t\"./es-do\": 47049,\n\t\"./es-do.js\": 47049,\n\t\"./es-mx\": 15915,\n\t\"./es-mx.js\": 15915,\n\t\"./es-us\": 57133,\n\t\"./es-us.js\": 57133,\n\t\"./es.js\": 86756,\n\t\"./et\": 72182,\n\t\"./et.js\": 72182,\n\t\"./eu\": 14419,\n\t\"./eu.js\": 14419,\n\t\"./fa\": 2916,\n\t\"./fa.js\": 2916,\n\t\"./fi\": 49964,\n\t\"./fi.js\": 49964,\n\t\"./fil\": 16448,\n\t\"./fil.js\": 16448,\n\t\"./fo\": 26094,\n\t\"./fo.js\": 26094,\n\t\"./fr\": 35833,\n\t\"./fr-ca\": 56994,\n\t\"./fr-ca.js\": 56994,\n\t\"./fr-ch\": 2740,\n\t\"./fr-ch.js\": 2740,\n\t\"./fr.js\": 35833,\n\t\"./fy\": 69542,\n\t\"./fy.js\": 69542,\n\t\"./ga\": 93264,\n\t\"./ga.js\": 93264,\n\t\"./gd\": 77457,\n\t\"./gd.js\": 77457,\n\t\"./gl\": 83043,\n\t\"./gl.js\": 83043,\n\t\"./gom-deva\": 24034,\n\t\"./gom-deva.js\": 24034,\n\t\"./gom-latn\": 28379,\n\t\"./gom-latn.js\": 28379,\n\t\"./gu\": 406,\n\t\"./gu.js\": 406,\n\t\"./he\": 73219,\n\t\"./he.js\": 73219,\n\t\"./hi\": 99834,\n\t\"./hi.js\": 99834,\n\t\"./hr\": 28754,\n\t\"./hr.js\": 28754,\n\t\"./hu\": 93945,\n\t\"./hu.js\": 93945,\n\t\"./hy-am\": 81319,\n\t\"./hy-am.js\": 81319,\n\t\"./id\": 24875,\n\t\"./id.js\": 24875,\n\t\"./is\": 23724,\n\t\"./is.js\": 23724,\n\t\"./it\": 79906,\n\t\"./it-ch\": 34303,\n\t\"./it-ch.js\": 34303,\n\t\"./it.js\": 79906,\n\t\"./ja\": 77105,\n\t\"./ja.js\": 77105,\n\t\"./jv\": 15026,\n\t\"./jv.js\": 15026,\n\t\"./ka\": 67416,\n\t\"./ka.js\": 67416,\n\t\"./kk\": 79734,\n\t\"./kk.js\": 79734,\n\t\"./km\": 60757,\n\t\"./km.js\": 60757,\n\t\"./kn\": 58369,\n\t\"./kn.js\": 58369,\n\t\"./ko\": 77687,\n\t\"./ko.js\": 77687,\n\t\"./ku\": 95544,\n\t\"./ku.js\": 95544,\n\t\"./ky\": 85431,\n\t\"./ky.js\": 85431,\n\t\"./lb\": 13613,\n\t\"./lb.js\": 13613,\n\t\"./lo\": 34252,\n\t\"./lo.js\": 34252,\n\t\"./lt\": 84619,\n\t\"./lt.js\": 84619,\n\t\"./lv\": 93760,\n\t\"./lv.js\": 93760,\n\t\"./me\": 93393,\n\t\"./me.js\": 93393,\n\t\"./mi\": 12369,\n\t\"./mi.js\": 12369,\n\t\"./mk\": 48664,\n\t\"./mk.js\": 48664,\n\t\"./ml\": 23099,\n\t\"./ml.js\": 23099,\n\t\"./mn\": 98539,\n\t\"./mn.js\": 98539,\n\t\"./mr\": 778,\n\t\"./mr.js\": 778,\n\t\"./ms\": 39970,\n\t\"./ms-my\": 82625,\n\t\"./ms-my.js\": 82625,\n\t\"./ms.js\": 39970,\n\t\"./mt\": 15714,\n\t\"./mt.js\": 15714,\n\t\"./my\": 53055,\n\t\"./my.js\": 53055,\n\t\"./nb\": 73945,\n\t\"./nb.js\": 73945,\n\t\"./ne\": 63645,\n\t\"./ne.js\": 63645,\n\t\"./nl\": 4829,\n\t\"./nl-be\": 12823,\n\t\"./nl-be.js\": 12823,\n\t\"./nl.js\": 4829,\n\t\"./nn\": 23756,\n\t\"./nn.js\": 23756,\n\t\"./oc-lnc\": 41228,\n\t\"./oc-lnc.js\": 41228,\n\t\"./pa-in\": 97877,\n\t\"./pa-in.js\": 97877,\n\t\"./pl\": 53066,\n\t\"./pl.js\": 53066,\n\t\"./pt\": 28677,\n\t\"./pt-br\": 81592,\n\t\"./pt-br.js\": 81592,\n\t\"./pt.js\": 28677,\n\t\"./ro\": 32722,\n\t\"./ro.js\": 32722,\n\t\"./ru\": 59138,\n\t\"./ru.js\": 59138,\n\t\"./sd\": 32568,\n\t\"./sd.js\": 32568,\n\t\"./se\": 49753,\n\t\"./se.js\": 49753,\n\t\"./si\": 58024,\n\t\"./si.js\": 58024,\n\t\"./sk\": 31058,\n\t\"./sk.js\": 31058,\n\t\"./sl\": 43452,\n\t\"./sl.js\": 43452,\n\t\"./sq\": 2795,\n\t\"./sq.js\": 2795,\n\t\"./sr\": 26976,\n\t\"./sr-cyrl\": 38819,\n\t\"./sr-cyrl.js\": 38819,\n\t\"./sr.js\": 26976,\n\t\"./ss\": 7467,\n\t\"./ss.js\": 7467,\n\t\"./sv\": 42787,\n\t\"./sv.js\": 42787,\n\t\"./sw\": 80298,\n\t\"./sw.js\": 80298,\n\t\"./ta\": 57532,\n\t\"./ta.js\": 57532,\n\t\"./te\": 76076,\n\t\"./te.js\": 76076,\n\t\"./tet\": 40452,\n\t\"./tet.js\": 40452,\n\t\"./tg\": 64794,\n\t\"./tg.js\": 64794,\n\t\"./th\": 48245,\n\t\"./th.js\": 48245,\n\t\"./tk\": 8870,\n\t\"./tk.js\": 8870,\n\t\"./tl-ph\": 36056,\n\t\"./tl-ph.js\": 36056,\n\t\"./tlh\": 15249,\n\t\"./tlh.js\": 15249,\n\t\"./tr\": 22053,\n\t\"./tr.js\": 22053,\n\t\"./tzl\": 39871,\n\t\"./tzl.js\": 39871,\n\t\"./tzm\": 39574,\n\t\"./tzm-latn\": 19210,\n\t\"./tzm-latn.js\": 19210,\n\t\"./tzm.js\": 39574,\n\t\"./ug-cn\": 91532,\n\t\"./ug-cn.js\": 91532,\n\t\"./uk\": 11432,\n\t\"./uk.js\": 11432,\n\t\"./ur\": 88523,\n\t\"./ur.js\": 88523,\n\t\"./uz\": 54958,\n\t\"./uz-latn\": 68735,\n\t\"./uz-latn.js\": 68735,\n\t\"./uz.js\": 54958,\n\t\"./vi\": 83398,\n\t\"./vi.js\": 83398,\n\t\"./x-pseudo\": 56665,\n\t\"./x-pseudo.js\": 56665,\n\t\"./yo\": 11642,\n\t\"./yo.js\": 11642,\n\t\"./zh-cn\": 5462,\n\t\"./zh-cn.js\": 5462,\n\t\"./zh-hk\": 92530,\n\t\"./zh-hk.js\": 92530,\n\t\"./zh-mo\": 41650,\n\t\"./zh-mo.js\": 41650,\n\t\"./zh-tw\": 97333,\n\t\"./zh-tw.js\": 97333\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 93365;","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateUrl('/apps/user_status/heartbeat')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li>\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a v-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal v-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=24d48be7&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=24d48be7&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24d48be7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\nimport { loadState } from '@nextcloud/initial-state'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst userStatusData = loadState('user_status', 'status')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: userStatusData.message,\n\t\ticon: userStatusData.icon,\n\t\tstatus: userStatusData.status,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\turl: avatarDiv.dataset.avatar,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst AvatarInMenu = Vue.extend(Avatar)\nnew AvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-menu-item__header[data-v-24d48be7]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-24d48be7]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-24d48be7]{cursor:default !important}.user-status-menu-item__header[data-v-24d48be7]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-24d48be7]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-24d48be7]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-24d48be7]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-24d48be7]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-24d48be7]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-24d48be7]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:active,.user-status-menu-item__toggle--inline[data-v-24d48be7]:hover,.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-24d48be7]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-24d48be7]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:focus-visible {\\n\\t\\t\\tpadding: 6px 8px 1px 8px !important;\\n\\t\\t\\tmargin: 2px !important;\\n\\t\\t}\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-background-translucent);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"b2f975dbe50f5e918a41\" + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2613;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2613: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(75176); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","sendHeartbeat","isAway","url","generateUrl","HttpClient","status","response","data","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","inline","_e","attrs","profilePageLink","on","loadProfilePage","_v","_s","displayName","loadingProfilePage","t","tag","class","$event","preventDefault","stopPropagation","openModal","apply","arguments","statusIcon","visibleMessage","closeModal","fetchAllPredefinedStatuses","generateOcsUrl","ocs","actions","loadAllPredefinedStatuses","state","commit","predefinedStatuses","length","statuses","mutations","addPredefinedStatus","push","getters","fetchCurrentStatus","setStatus","statusType","setPredefinedMessage","messageId","clearAt","setCustomMessage","message","clearMessage","getTimestampForClearAt","date","dateFactory","type","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","icon","messageIsPredefined","loadStatusFromServer","emit","userId","getCurrentUser","uid","setStatusFromObject","rootState","resolvedClearAt","find","reFetchStatusFromServer","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","Vue","Vuex","Store","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","avatarDiv","document","getElementById","userStatusData","propsData","preloadedUserStatus","user","dataset","displayname","avatar","disableMenu","disableTooltip","Avatar","$mount","el","name","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","computed","mapState","customIcon","customMessage","$t","methods","changeStatus","$store","dispatch","showError","console","debug","Date","___CSS_LOADER_EXPORT___","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/base.php b/lib/base.php index f6a3331a798..82dcd5965aa 100644 --- a/lib/base.php +++ b/lib/base.php @@ -62,9 +62,11 @@ * */ +use OC\EventDispatcher\SymfonyAdapter; use OCP\EventDispatcher\IEventDispatcher; use OCP\Group\Events\UserRemovedEvent; use OCP\ILogger; +use OCP\Server; use OCP\Share; use OC\Encryption\HookManager; use OC\Files\Filesystem; @@ -888,7 +890,7 @@ class OC { } private static function registerResourceCollectionHooks() { - \OC\Collaboration\Resources\Listener::register(\OC::$server->getEventDispatcher()); + \OC\Collaboration\Resources\Listener::register(Server::get(SymfonyAdapter::class), Server::get(IEventDispatcher::class)); } /** diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index d4e2cbe7c8e..ae80dc78b03 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -148,6 +148,7 @@ return array( 'OCP\\Collaboration\\Resources\\IProvider' => $baseDir . '/lib/public/Collaboration/Resources/IProvider.php', 'OCP\\Collaboration\\Resources\\IProviderManager' => $baseDir . '/lib/public/Collaboration/Resources/IProviderManager.php', 'OCP\\Collaboration\\Resources\\IResource' => $baseDir . '/lib/public/Collaboration/Resources/IResource.php', + 'OCP\\Collaboration\\Resources\\LoadAdditionalScriptsEvent' => $baseDir . '/lib/public/Collaboration/Resources/LoadAdditionalScriptsEvent.php', 'OCP\\Collaboration\\Resources\\ResourceException' => $baseDir . '/lib/public/Collaboration/Resources/ResourceException.php', 'OCP\\Command\\IBus' => $baseDir . '/lib/public/Command/IBus.php', 'OCP\\Command\\ICommand' => $baseDir . '/lib/public/Command/ICommand.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index d1997b2b785..327c44a739c 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -177,6 +177,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OCP\\Collaboration\\Resources\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/IProvider.php', 'OCP\\Collaboration\\Resources\\IProviderManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/IProviderManager.php', 'OCP\\Collaboration\\Resources\\IResource' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/IResource.php', + 'OCP\\Collaboration\\Resources\\LoadAdditionalScriptsEvent' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/LoadAdditionalScriptsEvent.php', 'OCP\\Collaboration\\Resources\\ResourceException' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/ResourceException.php', 'OCP\\Command\\IBus' => __DIR__ . '/../../..' . '/lib/public/Command/IBus.php', 'OCP\\Command\\ICommand' => __DIR__ . '/../../..' . '/lib/public/Command/ICommand.php', diff --git a/lib/private/Collaboration/Resources/Listener.php b/lib/private/Collaboration/Resources/Listener.php index ba012b4ca44..b9f1e72cbfa 100644 --- a/lib/private/Collaboration/Resources/Listener.php +++ b/lib/private/Collaboration/Resources/Listener.php @@ -26,14 +26,16 @@ declare(strict_types=1); */ namespace OC\Collaboration\Resources; +use OC\EventDispatcher\SymfonyAdapter; use OCP\Collaboration\Resources\IManager; +use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent; +use OCP\EventDispatcher\IEventDispatcher; use OCP\IGroup; use OCP\IUser; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\GenericEvent; class Listener { - public static function register(EventDispatcherInterface $dispatcher): void { + public static function register(SymfonyAdapter $symfonyDispatcher, IEventDispatcher $eventDispatcher): void { $listener = function (GenericEvent $event) { /** @var IUser $user */ $user = $event->getArgument('user'); @@ -42,10 +44,10 @@ class Listener { $resourceManager->invalidateAccessCacheForUser($user); }; - $dispatcher->addListener(IGroup::class . '::postAddUser', $listener); - $dispatcher->addListener(IGroup::class . '::postRemoveUser', $listener); + $symfonyDispatcher->addListener(IGroup::class . '::postAddUser', $listener); + $symfonyDispatcher->addListener(IGroup::class . '::postRemoveUser', $listener); - $dispatcher->addListener(IUser::class . '::postDelete', function (GenericEvent $event) { + $symfonyDispatcher->addListener(IUser::class . '::postDelete', function (GenericEvent $event) { /** @var IUser $user */ $user = $event->getSubject(); /** @var IManager $resourceManager */ @@ -54,7 +56,7 @@ class Listener { $resourceManager->invalidateAccessCacheForUser($user); }); - $dispatcher->addListener(IGroup::class . '::preDelete', function (GenericEvent $event) { + $symfonyDispatcher->addListener(IGroup::class . '::preDelete', function (GenericEvent $event) { /** @var IGroup $group */ $group = $event->getSubject(); /** @var IManager $resourceManager */ @@ -64,5 +66,24 @@ class Listener { $resourceManager->invalidateAccessCacheForUser($user); } }); + + // Stay backward compatible with the legacy event for now + $fallbackEventRunning = false; + $symfonyDispatcher->addListener('\OCP\Collaboration\Resources::loadAdditionalScripts', function () use ($eventDispatcher, &$fallbackEventRunning) { + if ($fallbackEventRunning) { + return; + } + $fallbackEventRunning = true; + $eventDispatcher->dispatchTyped(new LoadAdditionalScriptsEvent()); + $fallbackEventRunning = false; + }); + $eventDispatcher->addListener(LoadAdditionalScriptsEvent::class, static function () use ($symfonyDispatcher, &$fallbackEventRunning) { + if ($fallbackEventRunning) { + return; + } + $fallbackEventRunning = true; + $symfonyDispatcher->dispatch('\OCP\Collaboration\Resources::loadAdditionalScripts'); + $fallbackEventRunning = false; + }); } } diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php index 3988eb8eaa5..a212d639084 100644 --- a/lib/private/legacy/OC_Image.php +++ b/lib/private/legacy/OC_Image.php @@ -103,10 +103,8 @@ class OC_Image implements \OCP\IImage { * @return bool */ public function valid() { - if (is_resource($this->resource)) { - return true; - } - if (is_object($this->resource) && get_class($this->resource) === \GdImage::class) { + if ((is_resource($this->resource) && get_resource_type($this->resource) === 'gd') || + (is_object($this->resource) && get_class($this->resource) === \GdImage::class)) { return true; } @@ -486,7 +484,7 @@ class OC_Image implements \OCP\IImage { */ public function fixOrientation() { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $o = $this->getOrientation(); @@ -994,7 +992,7 @@ class OC_Image implements \OCP\IImage { */ public function resize($maxSize) { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $result = $this->resizeNew($maxSize); @@ -1009,7 +1007,7 @@ class OC_Image implements \OCP\IImage { */ private function resizeNew($maxSize) { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $widthOrig = imagesx($this->resource); @@ -1034,7 +1032,7 @@ class OC_Image implements \OCP\IImage { */ public function preciseResize(int $width, int $height): bool { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $result = $this->preciseResizeNew($width, $height); @@ -1055,14 +1053,14 @@ class OC_Image implements \OCP\IImage { return false; } if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $widthOrig = imagesx($this->resource); $heightOrig = imagesy($this->resource); $process = imagecreatetruecolor($width, $height); if ($process === false) { - $this->logger->error(__METHOD__ . '(): Error creating true color image', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): Error creating true color image', ['app' => 'core']); return false; } @@ -1075,7 +1073,7 @@ class OC_Image implements \OCP\IImage { $res = imagecopyresampled($process, $this->resource, 0, 0, 0, 0, $width, $height, $widthOrig, $heightOrig); if ($res === false) { - $this->logger->error(__METHOD__ . '(): Error re-sampling process image', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): Error re-sampling process image', ['app' => 'core']); imagedestroy($process); return false; } @@ -1090,7 +1088,7 @@ class OC_Image implements \OCP\IImage { */ public function centerCrop($size = 0) { if (!$this->valid()) { - $this->logger->error('OC_Image->centerCrop, No image loaded', ['app' => 'core']); + $this->logger->debug('OC_Image->centerCrop, No image loaded', ['app' => 'core']); return false; } $widthOrig = imagesx($this->resource); @@ -1117,7 +1115,7 @@ class OC_Image implements \OCP\IImage { } $process = imagecreatetruecolor($targetWidth, $targetHeight); if ($process === false) { - $this->logger->error('OC_Image->centerCrop, Error creating true color image', ['app' => 'core']); + $this->logger->debug('OC_Image->centerCrop, Error creating true color image', ['app' => 'core']); return false; } @@ -1130,7 +1128,7 @@ class OC_Image implements \OCP\IImage { imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height); if ($process === false) { - $this->logger->error('OC_Image->centerCrop, Error re-sampling process image ' . $width . 'x' . $height, ['app' => 'core']); + $this->logger->debug('OC_Image->centerCrop, Error re-sampling process image ' . $width . 'x' . $height, ['app' => 'core']); return false; } imagedestroy($this->resource); @@ -1149,7 +1147,7 @@ class OC_Image implements \OCP\IImage { */ public function crop(int $x, int $y, int $w, int $h): bool { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $result = $this->cropNew($x, $y, $w, $h); @@ -1169,12 +1167,12 @@ class OC_Image implements \OCP\IImage { */ public function cropNew(int $x, int $y, int $w, int $h) { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $process = imagecreatetruecolor($w, $h); if ($process === false) { - $this->logger->error(__METHOD__ . '(): Error creating true color image', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): Error creating true color image', ['app' => 'core']); return false; } @@ -1187,7 +1185,7 @@ class OC_Image implements \OCP\IImage { imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $w, $h, $w, $h); if ($process === false) { - $this->logger->error(__METHOD__ . '(): Error re-sampling process image ' . $w . 'x' . $h, ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): Error re-sampling process image ' . $w . 'x' . $h, ['app' => 'core']); return false; } return $process; @@ -1204,7 +1202,7 @@ class OC_Image implements \OCP\IImage { */ public function fitIn($maxWidth, $maxHeight) { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $widthOrig = imagesx($this->resource); @@ -1227,7 +1225,7 @@ class OC_Image implements \OCP\IImage { */ public function scaleDownToFit($maxWidth, $maxHeight) { if (!$this->valid()) { - $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); + $this->logger->debug(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; } $widthOrig = imagesx($this->resource); diff --git a/lib/private/legacy/OC_User.php b/lib/private/legacy/OC_User.php index bc47359dafc..b7547be5e82 100644 --- a/lib/private/legacy/OC_User.php +++ b/lib/private/legacy/OC_User.php @@ -179,6 +179,7 @@ class OC_User { $userSession->setLoginName($uid); $request = OC::$server->getRequest(); $userSession->createSessionToken($request, $uid, $uid); + $userSession->createRememberMeToken($userSession->getUser()); // setup the filesystem OC_Util::setupFS($uid); // first call the post_login hooks, the login-process needs to be diff --git a/lib/public/Collaboration/Resources/LoadAdditionalScriptsEvent.php b/lib/public/Collaboration/Resources/LoadAdditionalScriptsEvent.php new file mode 100644 index 00000000000..2f1dc5a0a00 --- /dev/null +++ b/lib/public/Collaboration/Resources/LoadAdditionalScriptsEvent.php @@ -0,0 +1,40 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\Collaboration\Resources; + +use OCP\EventDispatcher\Event; + +/** + * This event is used by apps to register their own frontend scripts for integrating + * projects in their app. Apps also need to dispatch the event in order to load + * scripts during page load + * + * @see https://docs.nextcloud.com/server/latest/developer_manual/digging_deeper/projects.html + * @since 25.0.0 + */ +class LoadAdditionalScriptsEvent extends Event { +} |