From 938f698b7ac0e56bce5e74251d7ce52771774eed Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 6 May 2021 18:39:59 +0200 Subject: [PATCH] Add webpush front-end support Signed-off-by: Thomas Citharel --- js/public/favicon.ico | Bin 4286 -> 15086 bytes .../icons/android-chrome-192x192 (copie).png | Bin 10249 -> 0 bytes .../img/icons/android-chrome-192x192.png | Bin 9416 -> 4370 bytes .../img/icons/android-chrome-512x512.png | Bin 29808 -> 10294 bytes .../icons/android-chrome-maskable-192x192.png | Bin 6401 -> 3735 bytes .../icons/android-chrome-maskable-512x512.png | Bin 23038 -> 11414 bytes .../img/icons/apple-touch-icon-120x120.png | Bin 3369 -> 2771 bytes .../img/icons/apple-touch-icon-152x152.png | Bin 4046 -> 3445 bytes .../img/icons/apple-touch-icon-180x180.png | Bin 4678 -> 4120 bytes .../img/icons/apple-touch-icon-60x60.png | Bin 1491 -> 1579 bytes .../img/icons/apple-touch-icon-76x76.png | Bin 1823 -> 1903 bytes js/public/img/icons/apple-touch-icon.png | Bin 4678 -> 4120 bytes js/public/img/icons/badge-128x128.png | Bin 0 -> 1668 bytes js/public/img/icons/favicon-16x16.png | Bin 799 -> 791 bytes js/public/img/icons/favicon-32x32.png | Bin 1271 -> 1015 bytes js/public/img/icons/favicon.svg | 1 + js/public/img/icons/icon-128x128.png | Bin 668 -> 0 bytes js/public/img/icons/icon-144x144.png | Bin 0 -> 4702 bytes js/public/img/icons/icon-168x168.png | Bin 0 -> 4471 bytes js/public/img/icons/icon-256x256.png | Bin 0 -> 6302 bytes js/public/img/icons/icon-384x384.png | Bin 668 -> 0 bytes js/public/img/icons/icon-48x48.png | Bin 0 -> 1794 bytes js/public/img/icons/icon-512x512.png | Bin 668 -> 0 bytes js/public/img/icons/icon-72x72.png | Bin 0 -> 2429 bytes js/public/img/icons/icon-96x96.png | Bin 668 -> 2847 bytes .../img/icons/msapplication-icon-144x144.png | Bin 1169 -> 3283 bytes js/public/img/icons/mstile-150x150.png | Bin 4282 -> 3442 bytes js/public/img/icons/safari-pinned-tab.svg | 4 +- js/src/graphql/config.ts | 15 +++ js/src/graphql/webPush.ts | 13 ++ js/src/registerServiceWorker.ts | 60 ++++----- js/src/service-worker.ts | 23 ++++ js/src/services/push-subscription.ts | 64 +++++++++ js/src/types/config.model.ts | 4 + js/src/types/push-notification.ts | 7 + js/src/views/Settings/Notifications.vue | 72 ++++++++++ js/tsconfig.json | 2 +- lib/graphql/resolvers/activity.ex | 21 +-- lib/graphql/resolvers/config.ex | 5 + lib/graphql/resolvers/push_subscription.ex | 24 +++- lib/graphql/schema.ex | 3 + lib/graphql/schema/config.ex | 6 + lib/graphql/schema/users/push_subscription.ex | 35 ++--- lib/mobilizon/users/push_subscription.ex | 38 ++---- lib/mobilizon/users/users.ex | 9 +- lib/service/activity/renderer/discussion.ex | 83 ++++++++++++ lib/service/activity/renderer/event.ex | 83 ++++++++++++ lib/service/activity/renderer/group.ex | 58 ++++++++ lib/service/activity/renderer/member.ex | 122 +++++++++++++++++ lib/service/activity/renderer/post.ex | 83 ++++++++++++ lib/service/activity/renderer/renderer.ex | 47 +++++++ lib/service/activity/renderer/resource.ex | 122 +++++++++++++++++ lib/service/activity/utils.ex | 30 +++++ lib/service/notifier/push.ex | 38 ++++-- priv/gettext/activity.pot | 124 ++++++++++-------- priv/gettext/ar/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ar/LC_MESSAGES/default.po | 16 +-- priv/gettext/be/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/be/LC_MESSAGES/default.po | 16 +-- priv/gettext/ca/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ca/LC_MESSAGES/default.po | 16 +-- priv/gettext/cs/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/cs/LC_MESSAGES/default.po | 16 +-- priv/gettext/de/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/de/LC_MESSAGES/default.po | 16 +-- priv/gettext/default.pot | 16 +-- priv/gettext/en/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/en/LC_MESSAGES/default.po | 16 +-- priv/gettext/es/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/es/LC_MESSAGES/default.po | 16 +-- priv/gettext/fi/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/fi/LC_MESSAGES/default.po | 16 +-- priv/gettext/fr/LC_MESSAGES/activity.po | 95 ++++++++------ priv/gettext/fr/LC_MESSAGES/default.po | 16 +-- priv/gettext/gl/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/gl/LC_MESSAGES/default.po | 16 +-- priv/gettext/hu/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/hu/LC_MESSAGES/default.po | 16 +-- priv/gettext/it/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/it/LC_MESSAGES/default.po | 16 +-- priv/gettext/ja/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ja/LC_MESSAGES/default.po | 16 +-- priv/gettext/nl/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/nl/LC_MESSAGES/default.po | 16 +-- priv/gettext/nn/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/nn/LC_MESSAGES/default.po | 16 +-- priv/gettext/oc/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/oc/LC_MESSAGES/default.po | 16 +-- priv/gettext/pl/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/pl/LC_MESSAGES/default.po | 16 +-- priv/gettext/pt/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/pt/LC_MESSAGES/default.po | 16 +-- priv/gettext/pt_BR/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/pt_BR/LC_MESSAGES/default.po | 16 +-- priv/gettext/ru/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ru/LC_MESSAGES/default.po | 16 +-- priv/gettext/sv/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/sv/LC_MESSAGES/default.po | 19 +-- ...6080303_create_user_push_subscriptions.exs | 4 +- 99 files changed, 2594 insertions(+), 1536 deletions(-) delete mode 100644 js/public/img/icons/android-chrome-192x192 (copie).png create mode 100644 js/public/img/icons/badge-128x128.png create mode 100644 js/public/img/icons/favicon.svg delete mode 100644 js/public/img/icons/icon-128x128.png create mode 100644 js/public/img/icons/icon-144x144.png create mode 100644 js/public/img/icons/icon-168x168.png create mode 100644 js/public/img/icons/icon-256x256.png delete mode 100644 js/public/img/icons/icon-384x384.png create mode 100644 js/public/img/icons/icon-48x48.png delete mode 100644 js/public/img/icons/icon-512x512.png create mode 100644 js/public/img/icons/icon-72x72.png create mode 100644 js/src/graphql/webPush.ts create mode 100644 js/src/services/push-subscription.ts create mode 100644 js/src/types/push-notification.ts create mode 100644 lib/service/activity/renderer/discussion.ex create mode 100644 lib/service/activity/renderer/event.ex create mode 100644 lib/service/activity/renderer/group.ex create mode 100644 lib/service/activity/renderer/member.ex create mode 100644 lib/service/activity/renderer/post.ex create mode 100644 lib/service/activity/renderer/renderer.ex create mode 100644 lib/service/activity/renderer/resource.ex create mode 100644 lib/service/activity/utils.ex diff --git a/js/public/favicon.ico b/js/public/favicon.ico index df36fcfb72584e00488330b560ebcf34a41c64c2..1b76c9c2ba1c7a813bac518a6bddddfc89b648c3 100644 GIT binary patch literal 15086 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 ZIi6+Wc;3{_L+*lEC%hi?=JyI`;C}@eHVyy) literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/js/public/img/icons/android-chrome-192x192 (copie).png b/js/public/img/icons/android-chrome-192x192 (copie).png deleted file mode 100644 index 52399911be96c7d859de45e05d40a63c92c41964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10249 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 b^@3oh5?Ob$6*B@f?ST|NsJ^d~HV*tB%&o!| diff --git a/js/public/img/icons/android-chrome-192x192.png b/js/public/img/icons/android-chrome-192x192.png index b02aa64d97167ad649e496908b35f14c603d9249..61ec17788e8a5593b1697a5f51aae135f9099ffd 100644 GIT binary patch literal 4370 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 X1If3KD5CFh8K9=5ednEmb@=}RU9=6h literal 29808 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 W*sU@;)3Gdoaafw#m{c2Gx&L3|tJ3ZO literal 6401 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�=%g8ig3 zTcRTMY5ik|4bYNt-CKQjlxlA-91_amJ7$c~)Af5#DhM46RN)>Sh&$3v@WO3xFWAF! z!G9W^8d+UnmnYq}tXYN=Yy>z9CGwW!Apqv*%6{n1YHQTg~C0e=l(^)EDC8qu~$L zVnnIW;)9(TX|W8pU~TwM`-XoD1+G`QbFl)xMa%vPJu+CAPt ze>&8jz8R(IoSQZExuOmcve+J{tTJWr&kD1s(Y0lY#atJI)cBt0xU#X8)!RWaJir|JIAp+9z$$4>uZ>g7r1z56pVo8?L`1T3 zVhn5s6{EmZ#l9Qn5%SU#QIA3w%Rt#7?LrO$RraM4n$yHjR06p*u1?AVmNBDH$X0b+ zsG^a9U>ELzK<162%TAI;+Jd@|q$?jlIN~DP9}lnvA=4}eM`E|iig^zg+jX*Z1V_C^ zId@E&I93fx8)8ld_ZX&Eez8)RFzQv<=|+lDTgZQEdm1N~1$uaK^Xep_*FxfRU$1lh zBp@$&k%4H!|KPDGm?HyfAOY|p4L}C`pT{)+O7c4eLMXg|sUqzw^(GH!_@~T>nRLUQ3?x7JXBob2QD*0%ZlX M?;2>7soOpMH$m6Jxc~qF literal 23038 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 diff --git a/js/public/img/icons/apple-touch-icon-120x120.png b/js/public/img/icons/apple-touch-icon-120x120.png index 1427cf62752646ad7217df0a61aa01fdef7475d1..0b79015fc742ef3f339f7fcd7371cf9bd3086991 100644 GIT binary patch delta 2764 zcmV;-3N!Vo8q*b!BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{HBgFsLH8R9M_#It1fLan6XmTB} z^Szxs(KYlKeP7Q&6YBeV9&q*FM@?Z2G=ccepCO>JiD_NMKoeMJ-qXv&NdMHrK>Mu2 z$(R@nG=J+H1MRa;6!PHf&uhs23Ipw%PM5(!|J8-uFEP-*>CARG=)QXlw9jfQg@f+B zgMZvFGtj>2%S<@v`&XHb_B|}LJPE8}*Y$Shb@-k|3gvrl1O4b98X0Jk$nfe{Aj~7^ z$YKVXM6IhKF-!N&U{09^CFmvvI^V=U?)E*&@r3e;0+zi4X}=Dgt>!x~@}9rOUf{zX zzUK~q^#uBAEozdpe6*i>1vN*aPv1nxbAQpPV$@cIPHjae3()89po5N}^_p4Dkb!2P znHXpWnu&pCpc&{uYq(MNpjOdY8F6h#)URdH9pzD2_>bRrM0Hh#ch@OK8X0J)`szb3 z6sta3VO&2q{#CQXq;+alPR(=Ds-5N-F3I93nr}IjW4K(ZeAFOkpvRZTB|pDKwSPS| z&Z6TqW04(K2_~+3srgc=a%iuNfgVHs4WX@hy7>+}jPLVGpJqF~Q9Iz0GtmDCFTGO* z+Ie=t5I?J>iMAiNsDi)$IDaW9@d7vprA+GliCY42}X`8aj1#I$cYKMt13J(mJ0^T zUd^>R#Ps<>L^I7B=lSI?t5wd}7!K1(n`&EhQT;6 z-<@gZi^Zz$TE!?AyqopZDX?o?votnd2Y*n`Z&6Jg(0%oxcqPI>tWSx*{b9uafBxO7 z@RBzyu+LvS#r}AYe1d@fY^@$f!S#-5&?WQHG__@nvJ+7GSx=32acIh$xSA<)T@%LRDZ1pMbP(a!T=fP zL#qt_4}JW-7=ZP7KrL9g%=+bw_!$#6Y(f61yB~rSnFG zVBy)r+Ax)p81y%V8i|2!&C>&FC_Qz8d9wWta;t%OlQ@>IlNjjcEF++j(pMiUVE4%E zct`Mfc(g$8PAAUnB$^!p7CW$;m^Ovjm99^Zl^E#iCB$xQihoT=?}~RrGA(%85(B*> zl^FCw&ORh)T4%)!;)v;kx1p}~lPAY8vEN2!m=+cE2iGeO52aQeYh@f*=J&QP5 zS|T~n+sRGGBBx#0c9v}NDjK$U5(8bCMhyCOyIt5+L*{hi&9F*xn<1cZH$Beb*&`(A zWr@V@9iFztK!3Y4hyxajp6eGbU>SUpl6H`%52Y5cz`B!qcPoUNz@r8^XCwywd9Ge! zpaETtDy8%Ghv7m^pr=j&_@>Wn)JhEWrBWr}K7ZXNSeEieMFb#wcZpheIxWzhmEnNI z|LFq37SzQO73t`B!g$&e1MS%(2ed68%oc1f`XWz9I)6HzFuiU^ipAN?>BR9u(E`B& zGr+rFc)}xeXwYppsDGQ-m44Oi@UbC!+#^1gOtl41j+8EF*y|Lxb_!6?PSjej`uUi9WnBUKc1L0{V*1!%6=`>tR8N}rH7Wvgj+bcg{OKa9(#*#NDMcdLLM zL)~=>?79GoJA;(ZV50uAP;0&purF;}6bEQW$Hu*uJUuHyyT2Hqdv`0Qm^g9VkM=?h zp!MBu;JRxSk_U~|l5GHhHfo*iBn?_W7OP-~xPLWgnnZvg2IwA;-Sm1O2eS?1<{t)J zGW_hDw2;?kokk9ODHG?V`(q$W?G+BD+cs$NE;puK!mIvW@(yaoRI`Tdv&jR za(%jAC)hooCn-;j!%vNVZYGH#6UC93^Wr1%|J6T&# literal 3369 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 ROru=^AazZ3N)e9H{|11FNXq~K diff --git a/js/public/img/icons/apple-touch-icon-152x152.png b/js/public/img/icons/apple-touch-icon-152x152.png index f24d454a2ecb8851bb893192b64ee09386d30e24..db0c5ac09f0090d32184f37c1bcbbe591899d06a 100644 GIT binary patch delta 3443 zcmV-(4UF>6AN3lLBYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H000JJOGiWi{{a60 z|De66lK=ncz980z3|_E@0=DcHS*2nd}9K?BYzS>N>4kZ`D6LQt)GOKZGylH13tV* zXm1s+9^jiY`1-*JQW|RBBs_okLHz#z@pO^S${(1GAX#gdL3s5<06uNk_=X?^$yCP+ z1^DCX;=fHskSrzKI4;n5_+RT0Btr!X&+btHDLgofAlYfRLFn$J1M=k~z9AGrGSYW5 zdw&)ZR31+^zuSZ$S$R6e0-@Un;r_G>opyauO9OaVF;34i0<(XIv^ij z(5GXxIh2yNFs zHR#F<&+hR@^D#p}8fpmPk1P@Ho)$V^d?>+=cHz!1{ILRlM+D~VNKapwde~gtE8IUL zJpN5+zbCZc@A>z6tMK%;&~~{8-r1e};RXCI9cIz_iU#xbe|uMhW%{L#kGhR7|`&33(0 z4deHh8fxYm<``Qm!V#p1x?UQ!D%qk{xx_%&Uol!IX)C^k(>Fl=UKv`J7GuFxBXrjh9EyqXI3lYOit-g>{T-7Ak7OweyC2ZRL5#1N3mBU zW4WvAq7dZ3YAIBiG!muQt6^r2EQAo``*gV^+NPH@#a_i*xd-Lp2=cG>aC7)L8z+5= zy~-G7fA)C@g8Z|HbDurd=6@>`d$lGdmMn7-YWjv& z5nHQV2DOuj{GbwnrCsm5vnc{W_UP5Npy|Wx6pd@vI`a}OO^ftrixl_DB3moMTPwou zmqngmqd1tW`$v++O4XlQJl@(VfdQ61$o-3Sv~21yICsxCJlYcW{(sQu4<%gLB_Pz5jwF-H}Q_b<1?~C(lwIH=V{b*2=h3vII$5G2DU+<88nVCejFs zCQ%q;4=>gFBS~GuD>IP47AfJKU{98T*8BXh zObd?>Tv{9LcOchIhK^>VV!8I}5Q-zj)FIFjqC7puzd%0wJOu9MQ0$JhI^~EMj#XwX z8;~u9Dqz4&uXg==Gv&mK_Ud4#5!$@Sl;KApH%~VM?Uk2cA%80e>MvH29s_)_>X~ML z0ohR-ILQf}jmR)4QmznisF*gy{-!q2FF@We4_7Kc#?q=>BBg?2c379OA9m7Q{pMw|_2B`vu5tnI@p6N~enG+D z=tT9Xp{dN{tbbxSV$uRh90AS%b@4B)RfzY7cgrGlu>BC1iSvG}ZjjeKoiIHttHY=v z-h_y$`!8yO9IzAu@`0khp(H?FDNz8sW1P_`s(_cuV5-h-%{L$;lAKnJ}O^yL*qh%9CFSb%W0~+6H%zx3#9Axb*XmGA7L-ZYn-SeTX z&F%FSh_^wm0`JAw&lcTA-z|nF_7$bX${D0kA3)Yv;N2_HN39ci(20EEIIAFUkh4ZY zqXDG5h@QQ$8X6NIpDD~;sFI-xmEKZ)`r!ZUVo0#c@<=5U0@Q&f%g_f2YG32H2AgwuB%SIAm7vmCfK1MTM9+rB)VJ@1$@aw zJLl!?WiR*0fFuVLsagC9U|!NM~(Oyzh_MLv*xrp!UU-W~+J|52lK{kC4j9JL1(;lOLS$On4=-fRY$ z<}*jwq#WFVhjnI*u*pBuoTw@ToPRY#MCZN{oaeVSgTWC=1|W}vQ(H4f*hLCS3-tkc zi5BpHq4f)pw>L%r&qoq}=kZoi{GAsy!GEJ+_q32tyR|XGFF+DUV1gaA2cqi96HtkB zq9GdC$i~??CKW>1+##@GDm0aw{01??0u6JZha=ZdVRJ(Z8<3|~s^NvJs9!1Gu{~&_ z-2vYBR{IgiCsoj+`ftNvlzobSu2RCAmq?ShL_rc2g5#OfhS)pkB{&f`c=34XUVmwR zqJ@<`nSneFKH*LG^xD}X1-vq4^GdbffqbP?;&o%VdIcP=>R+zl>*l zUn_iXlBgm*1{fUhP`b!@*IXk*W3mL*%BrJq9e;OahMBD;8G|I95`J4tZ_!mUvVGM3^qqBq`xok{ zRK~ODoXl&Uv9J3X!GGfpK#&9I=yHveS?-u)>~>4eXi@~}c^m(<=$sN9QTOKP zyWN2jG@2Aa_T@oIs+zrB?>v#G_DI!S(gjKMXiM1A305gkOdo2$UK%B3TS*$^+aonW zjSKV)U0E`mZp|>av#z}B^B{Y5XH&$A1O{Dm#&A1X5qaD`U?SfD$$!7Chy1Tq%2^}r z-a(k?a2#2tWs+(vbCA7yQybV)s9F$jqaI}M3xbpB@P}pEmo>q@Wf>m>*%xHLxgoNC zwlSG=s1y|VkzX>}!fj5EApNxo#li5 z!q4ZrpsYal@1t*OgKX}Vg`X={9$cc`J>O6}%UqEjvwli!d0Grn>6F;Aw3zLgW`eD0 zk?zcD)vb*Yq#bm-1LR==nSewgNCb&OkSGL+LXZd&g&DWJyAd#=eV2WGM#U>^s?tk}Xl9GWZ(% zHfSsv`<86=oBsU$@xIr4o$K89Irnot=RVK#`F!r@x}TVt7+eJNfB^uwXo%9Yp!l4> zH;9^Ivy0vZQ5>zO&P^Qvc%8<0c88Ag4s%0U+ysCy5desZ2Y?ewDCP$M1j+ya*#!Vp zDIb9N=e3!uQwA=$8X4#TfBs%Y?<+GX5qgZ_O?~=BDt3BCX`%Z%<^aI#XQ-!R88W?@ zZx_sNz}4p$Xyt9=Jzt&$3C-{bJ($gUo! zE(}d=3`1PirH-e8`%tmR?GpC?W#uN7x3Aw{KiD47B$LS}Mq^e-ziX1jlBl^-(#+Pu zwhJx{UTjz4H{*oM3}3~|Gi0TUbh8lMyQPcb?{$!nFrye=JZUSm-KSL1r=73huMvzt=UoH^X1z9Yf{nC=L<_uK7ZCH>5IW=eQO=4zwL$q zv@Q&p>2s%*;{*1Z4Z0|$rfC1o{bS)&Y=m83LVMGY=`2>bzM-ddN;LX(-FYL3*DuoP zn$pqP{3#3HpED+#E7Y%j!LQYve)Ai1{3v|r@Rn#D-r8>Qndrjqw+U!djgu>`(65#b z=BY%J4^-k$I+jM)9?E$RKGfv7sbX8hyR0$F>obiLzkl|M89s+MAIwrOp(##PjOC2% z8B`d35w58fweaJULE0rU&Cbp+X_v-ewP0wU1GzyhankizCf?FvX5dY8bEg9r^Mru<$&@`3H4dAP}lZL(CYs# z6ru{zn#(@a!`${*I&Bh~8d)*g8;1aZE!HM+Qbiz&{0rZ@Eyde;HXEE>nL6Y@rcDKR z_2hHPRP@>x4nl+A2N$0;cl$H?)lq3vy$Bp;+6ESD z{zQbkuGGddn&R^`&JW*pq@|+?wTvE5<+vYAv3kk*7wf?JETI`j&wuDuwWE4U(v;~6 z9^2a5PDbyHv>yqO+sIqz*i)7$Rjm&$XT4z7N*GrpOpu8eF{~nz4Yic_uiKTi&enP_ zX}-{)AqMM#z8UyrhsSOEL0_C0PY7cxG~4&iFAkm(6w_Eq7avsl7;&_ndAUvSKrCSH zrWIPtU_td*z|~1GiU^pCCa9*|hiDEE{0xB_gb7vce5edbSPIpW_J(AdfBL(vrpB6f4^?-UCMrqn8NC$}4PD%&)kROC zm%@TS39T$wk$#B~(PtA7DL%F1F&+WspuL&~X~*w%_t`(z8q#@4VPR#9DjQ%K!Jj*W zwGc?Qrn>y$$dCkfHtOV9j7&a}7#^?e=zmDd(FvfC(WlmDfyU zpYIdK*0Gf)0k|4fl@_;iaXV9Y<+(I-wt{3S^1<3bM=d@%f_2++sarZtOIhYP;$d7@9da%XgpG(=RcL$^PPYdNd zKd2lF7b?(R5vaESeaR(p+l2vLoECwiEjjrg#Kz=weyOt$t*rElrfR;3qz2ON7CtqF zMk*@xSxGQqlai9B0##JT>86TiAwFTE)3Ijh)bh(kk{$EsjM?=jCec(t#)z|H3kLV@ zh9sy!78hK?7b#}aoDF0AN~aH^W#*yj3>?Kcr??O9MW1dSOm{#Vx;4g;}7V0{OCr+(!Y$1?GevvP_Rai>EN@~tVoP^#`s)jH9yGFeB}ME}w^CJRy2)LMeqren$+_5c&wo?my!ek2 zQyU!vuD$sz-f*k?@Y!4}ekFvz7)E#RqmBdmT69>k3d_v}W0mHf{kd4<1hSnD{K}>4 z*J#l44yq-lAE(4G2eBo0AhW~n>{J%;Fk60b@ZKjnRkj9C_j$K2r; zr4S_>jg_#ON|M%?FWB(PW+li2UDFy!4$;sznqZK*ns?vY&`fzxP^SDm+0qfEW$~Ru zDZgEl`^p1Oh21R!!;S_M1;s~`tY2}0D)Dia4sB26*lky@H!}9CJ0&eC7ODS!VX2E! z2Dy`}czHJ_wyh z+~x#>(DM5s#KNg0wn@TutAvB3!GPwaqS@~2bcr;+vNIBv`^wkNCUkt4eZD3)ZkX|o z5tARlM)!g^zGf8!HHtt5GVNjB0dD1X#MI`)Qbe@;Enm2PZ0gtYBEHg7*Z4zJPl_z3 zc}&Zd^=D=!7j@b_1-=m?G)7&5QExa@$XrZ`E4vg1GG7s|&gTIc0zsAGvc7A1);x%Z z={LsNr}DSzI*W@HPv2hW>omXoHEYXiz!#ce=0f)*1dS(^?zxP{y75ow4=57npzGon zWEIyeH!B|duDuM+o6)YZV7jZ+*Jd_jD51bk_`I>a@%Y6I;q?GX+0;G8{z1YVFaEo) z`45>!1nILNdtTSa3R_R<8v<^L_TcJHbHT)B%aI<~xbm6sE5((}`^e*{M@LFG~su&ronz>Ps`u&lp|pKj_18V$U~n9g;s`LNP(7Z#=6lgkBz0Hsz3^y|XEJhp!zsGy zBHg`Sifk&N=fznm!#`iX8L=NtNY81F3zXxo`iK2Z1hY~g906cX$@8Di}`X68!Sr zl!K9)ag$O~)4YeU7XTMx_L6_p(Ow;tqirCEvi@*`08p@Pf7|r*=Y^*2k{mw?V>i&6 z>(9mxDm1-+O3Oc`S10i5^~t@gY(QAto=Atru|ne&;uL$2vQqJ${L}PIP-#e|`#m`M zAf+Upp$6$TY9YM-gsF6rpr8#rzSTCA-T+TQAb<_jPfJf(e-otYW{tgkPC8Y4CD`z` zLMva@+fYZyMG*wh!Rf`jpy`YDz3@@euQ)H!PM^mVMbFtkyINQui%{(s^BlF#?qz2K z+RoPMo@{|RI~9gg0`FrKyigP_{j8vW&N;avxdz_2IguRd=$t#+Mt#As^-(y1riFMJ z`K91M`(=iXBin8Kny)RZIR=y;+3gJyeyjQw@>=F9NE2}R1Xm~Z)s z&a&p*L;;iBzRuyG5s1%A?BC4A=~8!{-7JbtEO|aslCpytyiN8mVwuU%hu~KGg%r^o zo7J41XO={!gnjJ9`sEQYgCC;OjLj)9`JaRcjoVLgarF-Ps|X-du(jJ?0$>`SSBz=N zaioCQw^U3~h6sy79tCVYb8&P?2;b{hZ+^{B6$TJnyuOnpT%+KBU^yM$=cNC&FZ-_@ z-7kT0GMR}Uzg0}>Mujo@wix$27!Osq01t`-uF1$MNy^Ad%Bon(D5=WIs>&-#$jGY7 z$SCi2pZ~uJzJBgrcSHa41jE`;O4kh7gjw2REbauu`~&>%dii+3Froe)FfV_M8vuml zk@lECXlpUCZ>Ift!(|JAMu<_$jgei5-6(^Dh8?CCBmc>rMySaW);~G=r3c>w?V<0F cK^5JQ0?3d{m_4Kdj*tasYV;m8R*6oO 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�MrHbYR_buu=L>f*wO=Er8~{qfkYT+HoHag8)VqJoC-#@ zNT})4xRE%sP-B9?xmL5!2Y8VLa?yj@Y@r1C)6o~9GF9nWG!SI2VJ$>ejtUE%Qv&r_ zYLgZ0h3iIrw7{TyurC(g^$XT%PP5`FB3aFpP&fM-8!J#3I_ujG?;7(Xv5ni%BjYP4 z^+oydy=)_&bdxYJx`X%G5PFkUB%3h6RiOs^F?#ojsB%DbfhqzGhuv4)S1%vw@PDyE z3xWF{Y^0>+=Wg! z{>z@$rD6ej*V- z^$zKIOWOfdN4~7@ndhru01+3cxwD&_Muyja({*O;-5VnF(e$WDALNStE{1{F#ts+VR{o zSlQ*@U=Du8fgKW$lU~)O)b6FS?H1SSnKVIC=DOvbo8IUvM zVf+U4YxG%qLGd%ew7Jp8>@U`ew+A#Q=2oJHNH@_f!WadS20$KZEZ+BHAvU@FB zzRCYN5r+Z#g`C^hrH$yW7ABstwjvMM*CHGzY41bbo2zy$6E8DAOPn zUnHG?e7?u7pQ}Kqbu1jEd+=mcGea4aL6V4g(m*b7x}z|ijsjb3e|tf-3&^JK{=sWz z8sqIu9jy)#J}n}cXqtXmkb-NDVPcAKn=G9uX42zYvufu_OCr>xJ=oTNp8WA5wEqvM z{r~m8;7_C>U68iRr@|rd7UYhON#(-S_+Uf>s)hhPU{{exlxc&eD diff --git a/js/public/img/icons/apple-touch-icon-60x60.png b/js/public/img/icons/apple-touch-icon-60x60.png index cf10a5602e653bb126332934e2b7f34081c19a01..ebf8c0ee75315488831acb00b3007803f02bd0d4 100644 GIT binary patch delta 1563 zcmV+$2ITqE3#$x}BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H100IF}OjJcWI7~Y@ zOglMDJUL80I!r%0OhY_NLp)4KK1)eIOG-aWOh8LcK}%9YOH)HiRYXcxMM_^uN?}S$ zWlTwEPJc;hPDyG{No`R{a8gKdQ%G`CNOM$3bW})oRY-SMNO)FAd|5|*Sx0|bM}S*L zfm=s{Tt9K? zZ$hMSLZ)#-r*T54azUwbL8@~>t8_uFbwRIoK!31zK(l#2w0S?adOx^)KDm58x_v&o zem=Z@KD~ZEy?;Kwe?7i{J-~rI!GS%)f;_{6Jj8=M#e_V@ggnTFJjsST%ZED5h&#=Q zI?jnY&x$(GiaOAXI?;6$X?n=TREc&G^`=u=WrY!xYEB&V{{--Pcs51VkH2$hQ{;NR# zuT%cASpKtM{!+(ta$Cm!eoc_$B{?4cV&#C^vj zm%FjT11z&4?XisU5VLE7v1-j-|Dr4P3bnu^N_M0 zJy&)hR>9IL&}&?|6|oYQmV>r(2d2d=b;c_4&aNeong}>|ySB zWMi(l|1?uaEXJ{8;=X++*l5-3ckHs#CVo@q#yDzzW0Xo=H+rs_yWb;s(dkDlf4TW? z>HGP{=B4VUCY3jX(dq=MZaFie`cC4iD%h8qxi|0p1MlkB&3}>?02I2)6f(P N002ovPDHLkV1gfq`QiWo delta 1474 zcmV;z1wHz!4ATpcBYyw{XF*Lt006O%3;baP0000WV@Og>004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw0005hP)t-s|NsB|{{8&@{rvp>{r&x%*}Q|#tcB36 zgvhFYm6?8tmVSzseTkKdl%VJ7>$v03RK1K%x`#-Hc0*KVnt!9M{{H^={Q8K|uT8s$ zOs|ARXKX`LW>jNz*4o|H@8ev+kx7($Lsn;lj+*%S`kmRmO|^waa&SspY{JLQ=JoDr z#hOZ>eneVmZhVRG@$zWJnX}@|PrHasxrax7bVOBWtFycE`u2ItrAw)TL}6-PY<%M7 z=*a5YRlSW!i+^~Oo~Zl#`}+O-jnlGBv4llxZBt`&q^z~u@#kN`lS-F-Lsw@=S!(|O z|D)T%O}2(cb#dwU@NCAMOQL^7Txq!E&rrLGM}c+q`}ls%s7$PaL}P2s?A}+tj!BMr zLse#z)wWEtg+*;{-}C8W!j(#zeM4AhsNKa*x`$1-hJQzRa_#u@amb%brGP|UX};#u zQoM>tg?9J+`An{ZMP_W$?%`U$kV%nx{r>)#*Sbu!g+_31Ls4bp^z3HDm`a^~L|f2Vn zjgQl_V1L1sq};;l_wjDWox0@EQM`(P&Z*Aq-ebd-HmV8X00001VoOIv0Eh)0NB{r; z2XskIMF-&l69)?{x?>RQ0007+NklM;B#JYAnV|K?dhB~`2 zvAa8F&hF0rvr{-f1`~wK%gytOd(QLy{O;v>E`Jcc*MC$tDBBNQc6w7gG;MY3^s&9< zqqZCzoj$#kvx}>4=<4FE={Y$%@G6PDK6Z1La(T$OJmox-d!prmMec6;*vp&SKE8f} zcBOv+&jS3l4Z+XXhgW%f89a1g5Oi<|=Y)o7CSjp`9TE&16lnO3$-{9=5s@4n6|I>> zM}Ki}WCWIk%MCHbd`5I^97n|`Jogjg`6@0J!Czut?N(wE&yrI(IyLRNotDbMDakxf zN_@T5=^2R5%wnCLLpj-OvoaB!k#6LmG{cE-L2el5Zs( zTwDZPs4#j)m8H;S<^0s&`H9QRU`v(84}W+?CHA7KT9E0NP+f&lWrc~?qox+ob@lpM zsINnCZH>v7tDzAAO$N9L?ZyU^mQ>A%ZfX6ah1M1XH>*rzYHNq?Q0uU|1Gc^G4NEqi zz+K&l7P`BDJ8j;=)YA*y*Uz}W54N|5-mZZ`UO6IK;OISVW;F5yO( zSAMK4<6>#i5=^UWh+f}VNATLJMV4rD3)}S*+qAW5p{4B|+$(aWJKL6G+SUDmaJlbV zY-w-*FTB5JIi`a{1ABNN!jk;R0Dm9J#b7!<(X%JVqAby=?iWegcq-D;*|`p%pNYkE zamn`bLbN5t72_*~cudM`jlEV{VTo=u_{J(rw|CF>?$$a?_YcyCdn+xe9;J^eYcW0j zda~Nm-jkTO>An8Z`VE>Tm}DO!5_tds03~!qSaf7zbY(hYa%Ew3WdJfTF@HBLFflDL zIaDw=Ix#UiG&CzPF*-0X2^rg90000bbVXQnWMOn=I&E)cX=Zr6Cgx@G{a;ABePT>%h=S&#LUDT#0SfO cNT5nC0O}VJbn-$ql>h($07*qoM6N<$f~J7u5C8xG diff --git a/js/public/img/icons/apple-touch-icon-76x76.png b/js/public/img/icons/apple-touch-icon-76x76.png index c500769e3df9d6a6f1977ace8be4e63a8095e36a..5dba221ee9ab059bba3598b53e2cee71112676a5 100644 GIT binary patch delta 1889 zcmV-n2cGz!4(|?-BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{HxNkRz*r!MM_vkN?ArqTu4b?NlITyN?%Gz zW=%TStIfM}b>Lf?P&} zTt9H=Z$hJQLZ)#-sdGW9bV00i zL9KN_u697LcR;atK(ly1vw1(XdOx*#Kel^6w|hUhd_KB;KD>TCy?;HwfIY#1Ji&oI z!heE2#DhG=gFMBAJjR4O#)Le_g*(ZHJIaST%7;74hdRrMI?ahX&WSnCiaF1UI?;6$X?n=M_{H81XrY!xYEB&V{{--Jarz-xZ zEB>b}{--Ves4f1gJN~LX{;fy;txNu}R{pYG{hyF%b)(xss7Na{?@kt+rR(Z!T;UE|KG;{;mQBz)Boqy|LWQQ?co3P>i_iX z|Ml(v_wWDt^Z)wx|N8g;{Q3X>{{R2}|NsAjV;GbG0004EOGiZ501Zd30008oNkl|GQK_J)eRAb<7_SOF{chKd3PG@w94F^Y;(B2iRCLDPVUy(?nD zf)yJXLFg+8FN0KXWnObX7}EEu3&G#61=j1T~>Lgs=E5ggKG^SyY=Fu z<7a(&^N?Hi(&4Q7>%6k}kU6S2WjDSuvge$#dyLERic@x$q1_@ql7%PwyT5G2(n-s+j`*bu=*jm-5#rfns-EdLDUvN)9>Q_WJ8 z%2Is=*=lh>nJl-H;HG*OD1VVzg4t}hu;}RU?rdjDnF85vCfH?X>5rBvu?N%KOP87Y zGk?~J-`)Iv=mwg}vJ|A$htWRT9Q|~%Y$8HYY=1fW)2OmjYJ`rn;3PnkLZWOJT*GBw zSxb~fBC=6Twt*}r$^sF|6q6$$gK4r7tRx?!7!?DlOGvV8Jid)h!hd?nd>UC(ixy7_B%kYuq4%$Kq#uvn5T0f8_nivUX? z$&wJ5EM*J85=pXj1V%~OB)6N83t1KdeWff2EQ=&FAkef_jBFji3?!MwPj<}|_&AB5 zg|=%K$Ac&qQGchM*Dhu|bA7G-MPAd=^ z%DkF&4EoE+M_mqcJgr50GrFp5`gpJqu|}JI?Y3oGnZYPr!K{(jnwcxcrk}Oji*(En zBecv>GE&8eMkrPLj^fd8y`uTdI@R5LHqNYUay%a-?;3DM=~_&CdYG&$Px-W69O~K? zQs~J&z!u;2PgT1ZvxnE6bF2Kts004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw0006#P)t-s|NsB_{rma*`}z6$`TF|){{EQPxqHl} ze9WhO&8K?2p>>9kbbyX@fsVSt$Gzs$RlSW(x`$1-hDUjFLw{3dLsVvBaDV3L>y6X0 zO}mFnrh!CXX`7_2+VSRI!IMaac2#6_*4o|v|No)ez)Y`$MQ3b;kDK`U`sw!YY{r~P zlX^o|XG&Xa!pP0I)ltr zj!n6TM}2c%ZGU{?<>>qU{F2qSOR0fGVQQ3~sQvx@L||&(^66s2l}L(rQDJe>)!EV3 z+Nj;cOtFMTX>EUsm+tWK?D+C=$e&7=W`C~W$WFV6OtOVVY;LXJ$nW{| zb;+Vintel9XT#{%Q@o2tcX9aq`iRl5OQnEBU1`_v5-NPmZSq};(wuY^NVW$O3wZN{BRlzX}4&`FMY_51jL&8dIQsLt%(l-0N3^Xg;5 zmZ{#wPP&Kf`15kepugtS_x$;U&#cq#;ab0t{r>)$*Sh5N?PkQ7ui(k>`So_nqr~Xf zRK1Lf(y-X@VMnE>DiSQLvsKC00Cl4M??UK1szBL z000McNliru;Q}x8@f7Y*$Hheam>Jw&z6xfV{%xg zW~9l?lwD_xjc~xwK;kmZanHii3N>rIP@XkfR+bhxU@mc)U}KA$d^>i^y*NAo<&woMu z4Y(PPAFmVZS{xi#w+NPyh|!X6Ct>SisD<_)-%gU66L2e#79`~hS_sOxy%av(Cz7~mA zP$;P}g#{#-R=#Wuii(L=QYwL!mVXedxCl zs!9^9;_=BCRM+5uQ7w(e)RJd)O*ID#>gq|fhDOww#s(6szK#n9P0cvMZy{IG zghU&7D#V@+kYG>xxnuB*yx<3i{zhYl264&onH&~8e?g+Xe8reBuU?X1FP_VT!SDz< z2Com2y(XVWhUK!r;SGuQ*6E$oTN3PzgM1i_z9-s;st?3^KPsmM@R7XWdq0t5A^0e_ z1!JGde~CO^`CrE5$6%bi;D1Slj4NP4{)AL);-qJ_^qQQKVogmdWC2WnJz{;GR?vc( zZ%43{8AUOet&yK`grmKK%4VEG5Jek?0x0j%H) zzHCKF3s%=yY;9Fp4AwV9*2cQh7HDjWuuTo+G1%G`TH9MHuz05UK!H!UzREipM%FgH3eF*-CgD=;xSFfgxf(9{3`03~!qSaf7z zbY(hiZ)9m^c>ppnF@HBLFflDLIaDw=Ix#UiG&L(QF*-0X-ZN-u00012dQ@0+Qek%> zaB^>EX>4U6ba`-PAZc)PV*mhnoa6Eg2ys>@D9TUE%t_@^00ScnE@KN5BNI!L6ay0= zM1VBIWCJ6!R3OXP)X2ol#2my2%YaCrN-hBE7ZG&wLN%2D015yANkvXXu0mjf<*|N* diff --git a/js/public/img/icons/apple-touch-icon.png b/js/public/img/icons/apple-touch-icon.png index 03c0c5d5ec302ed7b0ee2c401df9427fb9d3c117..214d8df672e6e5904cb235f559a8da8c44add5ac 100644 GIT binary patch literal 4120 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 literal 4678 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

aZW9cb|x>1jZDoAu$NpeWiVk@{x{! zmmBmDgx|qNN?LyIrl9$qmj{KjZ8zpa=4edK3FuFS$KFl}bWPoO*Ax#Z1c2#3JAN(O zYhi>`%H9fSnLkAq|5vs>+?U*bdfMc6TmDu+QqnN9xgfZsG25($^;v7U1nBl9Q^o*i z)&?UaYZ=~7XZa75xPKB1s~MB1m<*dN08pqiy*q!)_Kc|;EZs3&nNdMQ5#LFu+J z?*($vO)$hkMOVc16f-ep;K@_~&Y6t?0t9I0(lBkZBfic|u)3pK$Xv=A@jUQnB2sC` zbI)L9m;VNkWOao}2c3b4_u4+bg zuf-@d1$?asdD1~mORQ02#!&1Xm#41*xz}wETNqKb;kueQ*~OpcAXTpJFYUYcKoA&Z z8Ke=2Vh~cu_uTb&6AH75L!k8zo~&wRsDLs^3YkD2!~;%u6sFrzV2A5(FQ|3}+0-K- zWX)W2yq%?^)iKhyMGPB5*DnWBaLqAHLJ47;r5nvkeq3u_?J{Xaf_}6I+xpLwKS7NC z|KYU%zup)8i85jc)^Yt*I0W8;+zHUI3V7@o;3DUYasdq>DFK%im4J)F?;|B-<=}8R z>HESGa5)KyCnGII|E+YX&h4Y+xCRvyX@oGhhG4 j58+{W$RJv~NLLKlV4)8v^7hU(R-4l(}$teLl` diff --git a/js/public/img/icons/badge-128x128.png b/js/public/img/icons/badge-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..41328edec474ee4f7cc1adf018c190fb8f6a3c17 GIT binary patch literal 1668 zcmZuyc~H}b63&50K+YiH2pEvFBoWdA1_9-)JV2DIV5U4G(A0)-MiWY!21FnT;zh&* zN<_}45Cev)96u9~!$@1XQqEuniZqaDA;?i0$3NfOncZ)9XTJGncV=hVCr^B?t8K0g z0)cdcj|W7kk@dl~G}Te;Lwv3VSo-m}ED*?S_k)8OpMf{jO*3j>EHyIiD=LkcnGB-Q zXxOu<#jiTR`PZNrwqmg~eRb|C^6xEmHa2g#79$r<`PI&2&Y0_9Bq6V<4=R4UOVB6l zNeBLr@OHnKcTO#;a`(J*AK!ogC-7a2} z3jG1P3OQQ6{PUz`x!&M{~?d>i&R?w_Hw8{%V~iiX}7-aRyC%~TY9#IEAx zc@Ue96s2W-eK03FjJ5w(+ttn{`(y9QnI$2X6aDeg@PsCRi%*dsQ`B{L!55<%8)9xL zT#u5}(gc&a-lhTE(!ZkJz~?>Nl;!>w5!c9keGLr8>zj- zko3NrC_{+E)zkS`0ZU-DH{Yph0jv+6%=LX$cww(rS<$S%#EGhFJBUkgPB+>rtzLMk zlLE#%r%;k4o~#$Z+3h1;kM2UMYD!o3zh2RkX)UR1ByHGOTjXO}_6IojQ`ozqz zR3!n+_RA)+&?K0`>(@nohwl2Q3G02n_rOcDLep8|du@?npFk2XDs^z3DCvBM2t?CN z=3bzl3;tUi+kBU(sX!<#75c;ierzR>A%451HI6V^iciUr1r?f(StQbXtP6w>btduB zKdhLQ>Cp!)3Kx(iZCaC6s(XoOee=Xe6RsR##sOhz*OV*AOuB$%s8Oi&QCe*GX($;< zMWmcO`qb;gz5%+EwxyFD5WLu-;4zss5T8qb?g}=6w(727Do2a$8tn}WZnxe@gz#`< zv-3v1-^-u6lPi+FY#Nbp0OwC?BD0t>lK)QmN8*`+REx_-Ra0S4uf^(2-%IBtLSpN( z!yc$SV!zT?Ry=lRt7(}Cc>}?Cm)3Lg3z&;umhQQ&se1~_q~JvGdW2AZ!O zJ~^Iw(5bP>?${unfu<0~oIXq_Xh)-_hdnOop2MgNuMN6_yWB=9S@QFl&gT-J%+mL~ z!t`lKDZC$EE!`=X208w;d_%2~ZZNs8(#dC&@r0XtR9JKRgN%!!mfKa^disIwXzEMv z+9dU2K#YWj9DG-|W*u=0xl0-4D?BN!dH*#G?wdPtBFMrcFE#{jupZ>u?{--QNCLoBwCoTL^{aF_#_>c%=G+fPw>01T_04 GEX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H z_@gcQq%HiWEdHk}{-`kitVsU3cK*GA{=bI)*SP=N!T;dP|LNNQ?&JUe|0LgMfdBvi z0b)x>L^43qOvnHL0CY)2K~xwS1;Gg-LID6k!FfkMvPRjmQw`a>|KZF801&YL`F;Ze zzBZc=AmH=w_Z14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>WRE8{w#)hawXn|-Xp4{E;v!=;4B^%-x&;Cm1 zP>^*#n_J!T^1SBMI!C4h-R53dN8`?ylD}d{L%(vZvUKT)~-CgWFQy3lt zIqW5#zOL*K8HL%o&D;R|TePl5?VWhq^wrj^qed%lKKkpp-FogeyEi+p zE?K8rW7E1fuEJ{5jaaAp0~aIt+keS?T)@vXM=*X}V#VGMCm1~v-+0wr{w3CJ-R8wG zS@XVpzqP-5Mf0H?y-zh=XVL>S6E;rKnDmrMQlmoKbK9p$evXN`oe{6g>lvi)-+#c) zb+Al&$zRqtWk1@VTt6MPmq9d7^!kmXZn8k{sFt`!l%ynwlArU1(iRB6fMfqu& zIjIUIl?AB^nFS@u3=9=>9)IHDC=AokIOTu(jOWuJ24-b$y<~1-Wnu5hBFw@HE)6D! wQ<#-EhbWxBaplC3Ge=~Ou%B-5Sm33{@Jd{;RG<|Mp00i_>zopr0DGh}-~a#s diff --git a/js/public/img/icons/favicon-32x32.png b/js/public/img/icons/favicon-32x32.png index 46ca04dee251a4fa85a2891a145fbe20cc619d96..0f07a6a04c4cc235d378bb85e3a530903ee9dd19 100644 GIT binary patch delta 994 zcmV<810DSL3HJw(BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H0E_M$HMqb>QQEr0%}EB>b}{;*j7v0DDJUH-Xq{<(Jk zy@CF~hyKW#{>`QS)3E;7y8qtA|K!sD@#z2e@&Eq(|Ns9Sq_BYi0004EOGiXelxch_ z0002@Nklnj1tB8l?CJgR!gNdfJGA=18jPunr{dMMQ!mkT*aYm=Dtx zU?L7G0EIB$1_)xn2iOVoT>w7@Jb=A0FIxh5gWeGIdxK=URV)J;qs)BNhsp@BVSv-9 zlUw#q%F^FiELetho$5|=?9#Rm=X1a3*|L43YDY5wQwP=FJ9+2a$^ZTCA4iPPz|Swx Qa{vGU07*qoM6N<$f~oq-EC2ui literal 1271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+0817m!EPlzi}fpbWjb7-1N zREF=ab|~82?p|H&9FPi<3Q0p2_nKbg9F`6d2a)0F5LviN5F-?-1uh6wgGU@;KHLFx zWcX}ub<4|h4hH*lce~e|TIa|N-yLo4RYl&*8eQTtJ=)5A);GJR=Xg%80{Y!&YpYvf zzSsOZP>Ahpcdsq>UfJl9kmb=;?z6GQH8a<1TD9-CHn-w}|NsA+Nb6JrgE+J#$S)X3 zGcfS;fdK35)2Be-Oetf?`zOY13)%G^e)6sPw@*;|%KXdcU#*P1v1-S;t21mOG>nAE-eH;@V%$t;WjcxYXwEUbR z3z>7z#DtTVO-oacoh9{_MQY8Ot-i}F{j^uD+E(t7w)x6MKX=vIp4w>b*IOPH6jixJ zZ#|uAv~yR1m9_1`d$&$jY?ogCnOnuicG8u{jt?HmM3~l)E(#;^5{P>Y|zRB0* zEz%!bA15~jCmrhl{dVr6;-~M#%Kx{>DI^zpsl1afdH67nWtqCYg=$*b#>z9DEt9H` z|+MWPFs%ZPNO+J zf0-lgZs?zWIq~q~#m;eY33n#>L}?XxEeV>+^y8e1Yo5XT(EXF-y$iEBhj zN@7W>RdP`(kYX@0Ff`XSFw`})3^6dbGBmU@HPtpSv@$SAK61eeMMG|WN@iLmZVf^+ zGrj>egja<`lmsP~D-;yvr)B1(DwI?fq$*?3oE!Zm>f=FR^A+ \ No newline at end of file diff --git a/js/public/img/icons/icon-128x128.png b/js/public/img/icons/icon-128x128.png deleted file mode 100644 index 8813cc5f93d4a01db47ec51a4899e21db1abc9f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 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 literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-168x168.png b/js/public/img/icons/icon-168x168.png new file mode 100644 index 0000000000000000000000000000000000000000..c28edb93b304d4f5882c736f7bf24637e199339a GIT binary patch literal 4471 zcmZvfXE+={x5vfmJ<;n*5S{3~_quvny@W_4tR5w-wrWI6(M3cML>F~M7oum?wW|eD zR*Pj>*ZbwYAMSnTIWzw`^X;79JTw1fGgCck3N{J?0s?9SeQk@|^~-;PjPQ2G2}-UL z5ZsCP(b6(A(9+`e5AgHy@qJ7{AdnfAsiNPf&N1NPV3ca5XlK@cUn{tQTWIZzwSZ=V znQ+stYrqb(w2!`pBL^`eHV&9-P0H-;#OX+^fdTZ7j~h(s7+$$pJh{8x3sFO^L@aj! zuEvEd$BQ89b0R$1h7{kgs_4RX=-jj=Vq*G@qf8lQFdQ!Dn4>eX-p0;}YlX|4*b#za zb>*KyeGib_MaZV0U$}k=o3{*Wfol?RV)|FZ!3&#mzxZI+%2HmQQYZZq?xnK>0nCjJ zrT0L0hZwEPBBOsjPB>xmZU%erM;tTjQY?;2B7A6g5_Ci~;t5!Tt;`Y z*n)>#o)JnFf09!KUy&uf05BssO^^Vw(3oC+CrMsCipf*vR5*?`%93llhd3Ouj9kRY zM-ep4T3?dL%M1A@SL;|8~FA@|p}54`Oc;y-amQy@R= zHc1*}V4_31NlZq|$(1adX?&X^aW~S_Cb;>}DCw%mCLo{;#vccH7W%{V*6*gL za0?Baclp7C)7wXc{KBht@+J6|>T~C=s_=B*6gP_!XAdVhTuK6COr=Z@ znCSoiqAL-%!r78aK}x3PZY+0l62b5$LH zOsl1QRb9Aezz?JB|LKxUE!Y3{VSSAb@AHXDYv1Qg`RoIWlp8}Uo;M;5jkZ`FH`J#0 zSZl{fve40%Pkp6Ee?} zaMV$;`{#gGCOkVbpzq>j{|@|JO|b(`>;8M3W#T7^nVmRLYER8z)9#=64l>vVQ7Nxb zbZO9t(LvPC5bag4)m-?^hl0g)D*RMbLj(Z;q<}>XJX__C^NZ4^5%EI#yt4~sWQ}y7 zym(3t0JXO8rck$j>ut^QGyGxx004r#{>_aXBB8yzlKhm!ITHm+WClq1J}E^5kJ z-=tFBC+9din85y8L7(5AoVACYk%h=3jPW1FJHvPB<<&YfsJbuiFDSi*R&>vA!A0J` zmFQLb!sl>GrF^z{mx2B7qh1$Yda);v8=i?t?B&YH{ZGizF!CyO$M-AAI5Hsktznm-f_2qk? zXx`ZZ!Gg|evaE{BmZX7`* zY;>>%c+q~xuqyOq6s&^8xVZnQK3MhR(K8zEE%!VOYnap4tP7ocpv31_YSCEwC)bGu3$D|Ws4LVvG0)`ow3v3yPi&)VJ5d_&QF7T)W& zHj{nzl4s>`qKR`t_Nx6p7m^?oT46J8EyS{b+sdz~z=nU1rO9@cBpWmx9wUDtwThs3 ze7}3=nYjxa!lK3O967XtE0; z8Xw;Ki+hz@1kEUc*NNqC6NMI%Y=9^q;%U7dfHq%P!y=tTjqTp-Zc@#fAHEqEU`Pu< zeGt++dJ&Ltd?u)gA{q0sV2nb5

@rkW)n970rTj{4oriCf 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 literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-256x256.png b/js/public/img/icons/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..473e081d74f8e3d79d505be8575f9749764d79d1 GIT binary patch literal 6302 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 N6~$)?6;I59{sVnYXdwUq literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-384x384.png b/js/public/img/icons/icon-384x384.png deleted file mode 100644 index 8813cc5f93d4a01db47ec51a4899e21db1abc9f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 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 literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-96x96.png b/js/public/img/icons/icon-96x96.png index 8813cc5f93d4a01db47ec51a4899e21db1abc9f2..1d00aebc4ee6caca00ef185e46c62ced6506dda3 100644 GIT binary patch literal 2847 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 R$20%{002ovPDHLkV1n`l|EmB1 delta 1160 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 UPfbkO!vFvP07*qoM6N<$g4knYaR2}S literal 4282 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 - - + \ No newline at end of file diff --git a/js/src/graphql/config.ts b/js/src/graphql/config.ts index ba02ad920..37c5649c8 100644 --- a/js/src/graphql/config.ts +++ b/js/src/graphql/config.ts @@ -84,6 +84,10 @@ export const CONFIG = gql` instanceFeeds { enabled } + webPush { + enabled + publicKey + } } } `; @@ -160,3 +164,14 @@ export const TIMEZONES = gql` } } `; + +export const WEB_PUSH = gql` + query { + config { + webPush { + enabled + publicKey + } + } + } +`; diff --git a/js/src/graphql/webPush.ts b/js/src/graphql/webPush.ts new file mode 100644 index 000000000..fd4b563cf --- /dev/null +++ b/js/src/graphql/webPush.ts @@ -0,0 +1,13 @@ +import gql from "graphql-tag"; + +export const REGISTER_PUSH_MUTATION = gql` + mutation RegisterPush($endpoint: String!, $auth: String!, $p256dh: String!) { + registerPush(endpoint: $endpoint, auth: $auth, p256dh: $p256dh) + } +`; + +export const UNREGISTER_PUSH_MUTATION = gql` + mutation UnRegisterPush($endpoint: String!) { + unregisterPush(endpoint: $endpoint) + } +`; diff --git a/js/src/registerServiceWorker.ts b/js/src/registerServiceWorker.ts index 1473a0afc..168a5cb5f 100644 --- a/js/src/registerServiceWorker.ts +++ b/js/src/registerServiceWorker.ts @@ -2,33 +2,33 @@ import { register } from "register-service-worker"; -if (process.env.NODE_ENV === "production") { - register(`${process.env.BASE_URL}service-worker.js`, { - ready() { - console.log( - "App is being served from cache by a service worker.\n" + - "For more details, visit https://goo.gl/AFskqB" - ); - }, - registered() { - console.log("Service worker has been registered."); - }, - cached() { - console.log("Content has been cached for offline use."); - }, - updatefound() { - console.log("New content is downloading."); - }, - updated() { - console.log("New content is available; please refresh."); - }, - offline() { - console.log( - "No internet connection found. App is running in offline mode." - ); - }, - error(error) { - console.error("Error during service worker registration:", error); - }, - }); -} +// if (process.env.NODE_ENV === "production") { +register(`${process.env.BASE_URL}service-worker.js`, { + ready() { + console.log( + "App is being served from cache by a service worker.\n" + + "For more details, visit https://goo.gl/AFskqB" + ); + }, + registered() { + console.log("Service worker has been registered."); + }, + cached() { + console.log("Content has been cached for offline use."); + }, + updatefound() { + console.log("New content is downloading."); + }, + updated() { + console.log("New content is available; please refresh."); + }, + offline() { + console.log( + "No internet connection found. App is running in offline mode." + ); + }, + error(error) { + console.error("Error during service worker registration:", error); + }, +}); +// } diff --git a/js/src/service-worker.ts b/js/src/service-worker.ts index ea958ccbe..826bc56a8 100644 --- a/js/src/service-worker.ts +++ b/js/src/service-worker.ts @@ -11,6 +11,7 @@ import { CacheableResponsePlugin } from "workbox-cacheable-response"; import { ExpirationPlugin } from "workbox-expiration"; import { precacheAndRoute } from "workbox-precaching"; +import { IPushNotification } from "./types/push-notification"; // Use with precache injection // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -75,3 +76,25 @@ registerRoute( ], }) ); + +self.addEventListener("push", async (event: any) => { + const payload = event.data.json() as IPushNotification; + console.log("received push", payload); + const options = { + title: payload.title, + body: payload.body, + icon: "/img/icons/android-chrome-512x512.png", + badge: "/img/icons/badge-128x128.png", + timestamp: new Date(payload.timestamp), + lang: payload.locale, + data: { + dateOfArrival: Date.now(), + }, + }; + + event.waitUntil( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + self.registration.showNotification(payload.title, options) + ); +}); diff --git a/js/src/services/push-subscription.ts b/js/src/services/push-subscription.ts new file mode 100644 index 000000000..d94a95c8c --- /dev/null +++ b/js/src/services/push-subscription.ts @@ -0,0 +1,64 @@ +import apolloProvider from "@/vue-apollo"; +import ApolloClient from "apollo-client"; +import { NormalizedCacheObject } from "apollo-cache-inmemory"; +import { WEB_PUSH } from "../graphql/config"; +import { IConfig } from "../types/config.model"; + +function urlBase64ToUint8Array(base64String: string): Uint8Array { + const padding = "=".repeat((4 - (base64String.length % 4)) % 4); + const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/"); + + const rawData = window.atob(base64); + const outputArray = new Uint8Array(rawData.length); + + for (let i = 0; i < rawData.length; ++i) { + outputArray[i] = rawData.charCodeAt(i); + } + return outputArray; +} + +export async function subscribeUserToPush(): Promise { + const client = apolloProvider.defaultClient as ApolloClient; + + const registration = await navigator.serviceWorker.ready; + const { data } = await client.mutate<{ config: IConfig }>({ + mutation: WEB_PUSH, + }); + + if (data?.config?.webPush?.enabled && data?.config?.webPush?.publicKey) { + const subscribeOptions = { + userVisibleOnly: true, + applicationServerKey: urlBase64ToUint8Array( + data?.config?.webPush?.publicKey + ), + }; + const pushSubscription = await registration.pushManager.subscribe( + subscribeOptions + ); + console.log( + "Received PushSubscription: ", + JSON.stringify(pushSubscription) + ); + return pushSubscription; + } + return null; +} + +export async function isSubscribed(): Promise { + const registration = await navigator.serviceWorker.ready; + return (await registration.pushManager.getSubscription()) !== null; +} + +export async function unsubscribeUserToPush(): Promise { + console.log("performing unsubscribeUserToPush"); + const registration = await navigator.serviceWorker.ready; + console.log("found registration", registration); + const subscription = await registration.pushManager.getSubscription(); + console.log("found subscription", subscription); + if (subscription && (await subscription?.unsubscribe()) === true) { + console.log("done unsubscription"); + return subscription?.endpoint; + } + console.log("went wrong"); + return undefined; +} diff --git a/js/src/types/config.model.ts b/js/src/types/config.model.ts index 86147207e..f135458fe 100644 --- a/js/src/types/config.model.ts +++ b/js/src/types/config.model.ts @@ -98,4 +98,8 @@ export interface IConfig { instanceFeeds: { enabled: boolean; }; + webPush: { + enabled: boolean; + publicKey: string; + }; } diff --git a/js/src/types/push-notification.ts b/js/src/types/push-notification.ts new file mode 100644 index 000000000..bfcaf652d --- /dev/null +++ b/js/src/types/push-notification.ts @@ -0,0 +1,7 @@ +export interface IPushNotification { + title: string; + body: string; + url: string; + timestamp: string; + locale: string; +} diff --git a/js/src/views/Settings/Notifications.vue b/js/src/views/Settings/Notifications.vue index e5250e227..93dfa7017 100644 --- a/js/src/views/Settings/Notifications.vue +++ b/js/src/views/Settings/Notifications.vue @@ -15,6 +15,19 @@
+
+

{{ $t("Participation notifications") }}

+
+ {{ + $t("Unsubscribe to WebPush") + }} + {{ $t("WebPush") }} + {{ $t("You can't use webpush in this browser.") }}

{{ $t("Participation notifications") }}

@@ -202,6 +215,14 @@ import { IUser } from "../../types/current-user.model"; import RouteName from "../../router/name"; import { IFeedToken } from "@/types/feedtoken.model"; import { CREATE_FEED_TOKEN, DELETE_FEED_TOKEN } from "@/graphql/feed_tokens"; +import { + subscribeUserToPush, + unsubscribeUserToPush, +} from "../../services/push-subscription"; +import { + REGISTER_PUSH_MUTATION, + UNREGISTER_PUSH_MUTATION, +} from "@/graphql/webPush"; @Component({ apollo: { @@ -235,6 +256,8 @@ export default class Notifications extends Vue { showCopiedTooltip = { ics: false, atom: false }; + subscribed = false; + mounted(): void { this.notificationPendingParticipationValues = { [INotificationPendingEnum.NONE]: this.$t("Do not receive any mail"), @@ -307,6 +330,55 @@ export default class Notifications extends Vue { this.feedTokens.push(newToken); } + async subscribeToWebPush(): Promise { + if (this.canShowWebPush()) { + const subscription = await subscribeUserToPush(); + if (subscription) { + const subscriptionJSON = subscription?.toJSON(); + console.log("subscription", subscriptionJSON); + const { data } = await this.$apollo.mutate({ + mutation: REGISTER_PUSH_MUTATION, + variables: { + endpoint: subscriptionJSON.endpoint, + auth: subscriptionJSON?.keys?.auth, + p256dh: subscriptionJSON?.keys?.p256dh, + }, + }); + this.subscribed = true; + console.log(data); + } + } else { + console.log("can't do webpush"); + } + } + + async unsubscribeToWebPush(): Promise { + const endpoint = await unsubscribeUserToPush(); + if (endpoint) { + const { data } = await this.$apollo.mutate({ + mutation: UNREGISTER_PUSH_MUTATION, + variables: { + endpoint, + }, + }); + console.log(data); + this.subscribed = false; + } + } + + canShowWebPush(): boolean { + return window.isSecureContext && !!navigator.serviceWorker; + } + + async created(): Promise { + this.subscribed = await this.isSubscribed(); + } + + private async isSubscribed(): Promise { + const registration = await navigator.serviceWorker.getRegistration(); + return (await registration?.pushManager.getSubscription()) !== null; + } + private async deleteFeedToken(token: string): Promise { await this.$apollo.mutate({ mutation: DELETE_FEED_TOKEN, diff --git a/js/tsconfig.json b/js/tsconfig.json index 05e246d1c..5380762de 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -18,7 +18,7 @@ "paths": { "@/*": ["src/*"] }, - "lib": ["esnext", "dom", "dom.iterable", "scripthost"] + "lib": ["esnext", "dom", "dom.iterable", "scripthost", "webworker"] }, "include": [ "src/**/*.ts", diff --git a/lib/graphql/resolvers/activity.ex b/lib/graphql/resolvers/activity.ex index 618ccb06e..7184fd573 100644 --- a/lib/graphql/resolvers/activity.ex +++ b/lib/graphql/resolvers/activity.ex @@ -5,9 +5,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do import Mobilizon.Users.Guards alias Mobilizon.{Activities, Actors, Users} - alias Mobilizon.Activities.Activity alias Mobilizon.Actors.Actor - alias Mobilizon.Service.Activity, as: ActivityService + alias Mobilizon.Service.Activity.Utils alias Mobilizon.Storage.Page alias Mobilizon.Users.User @@ -27,12 +26,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do limit ) - elements = - Enum.map(elements, fn %Activity{} = activity -> - activity - |> Map.update(:subject_params, %{}, &transform_params/1) - |> Map.put(:object, ActivityService.object(activity)) - end) + elements = Enum.map(elements, &Utils.transform_activity/1) {:ok, %Page{total: total, elements: elements}} else @@ -44,15 +38,4 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do def group_activity(_, _, _) do {:error, :unauthenticated} end - - @spec transform_params(map()) :: list() - defp transform_params(params) do - Enum.map(params, fn {key, value} -> %{key: key, value: transform_value(value)} end) - end - - defp transform_value(value) when is_list(value) do - Enum.join(value, ",") - end - - defp transform_value(value), do: value end diff --git a/lib/graphql/resolvers/config.ex b/lib/graphql/resolvers/config.ex index ad25b8bbd..170993bb9 100644 --- a/lib/graphql/resolvers/config.ex +++ b/lib/graphql/resolvers/config.ex @@ -143,6 +143,11 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do }, instance_feeds: %{ enabled: Config.get([:instance, :enable_instance_feeds]) + }, + web_push: %{ + enabled: !is_nil(Application.get_env(:web_push_encryption, :vapid_details)), + public_key: + get_in(Application.get_env(:web_push_encryption, :vapid_details), [:public_key]) } } end diff --git a/lib/graphql/resolvers/push_subscription.ex b/lib/graphql/resolvers/push_subscription.ex index f8b40a9ed..30be6482b 100644 --- a/lib/graphql/resolvers/push_subscription.ex +++ b/lib/graphql/resolvers/push_subscription.ex @@ -25,25 +25,39 @@ defmodule Mobilizon.GraphQL.Resolvers.PushSubscription do def register_push_subscription(_parent, args, %{ context: %{current_user: %User{id: user_id}} }) do - Users.create_push_subscription(Map.put(args, :user_id, user_id)) + case Users.create_push_subscription(Map.put(args, :user_id, user_id)) do + {:ok, %PushSubscription{}} -> + {:ok, "OK"} + + {:error, err} -> + require Logger + Logger.error(inspect(err)) + {:error, "Something went wrong"} + end end @spec unregister_push_subscription(map(), map(), map()) :: {:ok, PushSubscription.t()} | {:error, :unauthorized} | {:error, :not_found} - def unregister_push_subscription(_parent, %{id: push_subscription_id}, %{ + def unregister_push_subscription(_parent, %{endpoint: push_subscription_endpoint}, %{ context: %{current_user: %User{id: user_id}} }) do with %PushSubscription{user: %User{id: push_subscription_user_id}} = push_subscription <- - Users.get_push_subscription(push_subscription_id), + Users.get_push_subscription_by_endpoint(push_subscription_endpoint), {:user_owns_push_subscription, true} <- - {:user_owns_push_subscription, push_subscription_user_id == user_id} do - Users.delete_push_subscription(push_subscription) + {:user_owns_push_subscription, push_subscription_user_id == user_id}, + {:ok, %PushSubscription{}} <- Users.delete_push_subscription(push_subscription) do + {:ok, "OK"} else {:user_owns_push_subscription, false} -> {:error, :unauthorized} nil -> {:error, :not_found} + + {:error, err} -> + require Logger + Logger.error(inspect(err)) + {:error, "Something went wrong"} end end end diff --git a/lib/graphql/schema.ex b/lib/graphql/schema.ex index 39ea5b392..0c620b6ae 100644 --- a/lib/graphql/schema.ex +++ b/lib/graphql/schema.ex @@ -47,6 +47,7 @@ defmodule Mobilizon.GraphQL.Schema do import_types(Schema.ReportType) import_types(Schema.AdminType) import_types(Schema.StatisticsType) + import_types(Schema.Users.PushSubscription) @desc "A struct containing the id of the deleted object" object :deleted_object do @@ -155,6 +156,7 @@ defmodule Mobilizon.GraphQL.Schema do import_fields(:resource_queries) import_fields(:post_queries) import_fields(:statistics_queries) + # import_fields(:push_queries) end @desc """ @@ -179,6 +181,7 @@ defmodule Mobilizon.GraphQL.Schema do import_fields(:post_mutations) import_fields(:actor_mutations) import_fields(:follower_mutations) + import_fields(:push_mutations) end @desc """ diff --git a/lib/graphql/schema/config.ex b/lib/graphql/schema/config.ex index d33cca9f0..8e0ef2c1a 100644 --- a/lib/graphql/schema/config.ex +++ b/lib/graphql/schema/config.ex @@ -64,6 +64,7 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do field(:auth, :auth, description: "The instance auth methods") field(:instance_feeds, :instance_feeds, description: "The instance's feed settings") + field(:web_push, :web_push, description: "Web Push settings for the instance") end @desc """ @@ -301,6 +302,11 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do field(:enabled, :boolean, description: "Whether the instance-wide feeds are enabled") end + object :web_push do + field(:enabled, :boolean, description: "Whether the WebPush feature is enabled") + field(:public_key, :string, description: "The server's public WebPush VAPID key") + end + object :config_queries do @desc "Get the instance config" field :config, :config do diff --git a/lib/graphql/schema/users/push_subscription.ex b/lib/graphql/schema/users/push_subscription.ex index 43376b44f..9bf4c54a2 100644 --- a/lib/graphql/schema/users/push_subscription.ex +++ b/lib/graphql/schema/users/push_subscription.ex @@ -5,29 +5,32 @@ defmodule Mobilizon.GraphQL.Schema.Users.PushSubscription do use Absinthe.Schema.Notation alias Mobilizon.GraphQL.Resolvers.PushSubscription - @desc """ - An object representing the keys for a push subscription - """ - input_object :push_subscription_keys do - field(:p256dh, non_null(:string)) - field(:auth, non_null(:string)) - end + # object :push_subscription do + # field(:id, :id) + # end - object :push_queries do - field :list_push_subscriptions, :paginated_push_subscription_list do - resolve(&PushSubscription.list_user_push_subscriptions/3) - end - end + # @desc "A paginated list of subscriptions" + # object :paginated_push_subscription_list do + # field(:elements, list_of(:push_subscription), description: "A list of push subscriptions") + # field(:total, :integer, description: "The total number of push subscriptions in the list") + # end + + # object :push_queries do + # field :list_push_subscriptions, :paginated_push_subscription_list do + # resolve(&PushSubscription.list_user_push_subscriptions/3) + # end + # end object :push_mutations do - field :register_push_mutation, :string do + field :register_push, :string do arg(:endpoint, non_null(:string)) - arg(:keys, non_null(:push_subscription_keys)) + arg(:auth, non_null(:string)) + arg(:p256dh, non_null(:string)) resolve(&PushSubscription.register_push_subscription/3) end - field :unregister_push_mutation, :string do - arg(:id, non_null(:id)) + field :unregister_push, :string do + arg(:endpoint, non_null(:string)) resolve(&PushSubscription.unregister_push_subscription/3) end end diff --git a/lib/mobilizon/users/push_subscription.ex b/lib/mobilizon/users/push_subscription.ex index 0ea7fa777..2dc8c24ca 100644 --- a/lib/mobilizon/users/push_subscription.ex +++ b/lib/mobilizon/users/push_subscription.ex @@ -3,45 +3,29 @@ defmodule Mobilizon.Users.PushSubscription do alias Mobilizon.Users.User import Ecto.Changeset + @primary_key {:id, :binary_id, autogenerate: true} schema "user_push_subscriptions" do field(:digest, :string) belongs_to(:user, User) - - embeds_one :data, Data, on_replace: :delete do - field(:endpoint, :string) - - embeds_one :keys, Keys, on_replace: :delete do - field(:auth, :string) - field(:p256dh, :string) - end - end - + field(:endpoint, :string) + field(:auth, :string) + field(:p256dh, :string) timestamps() end @doc false def changeset(push_subscription, attrs) do push_subscription - |> cast(attrs, [:user_id]) - |> cast_embed(:data, with: &cast_data/2) - |> put_change(:digest, compute_digest(attrs.data)) - |> validate_required([:digest, :user_id, :data]) + |> cast(attrs, [:user_id, :endpoint, :auth, :p256dh]) + |> put_change(:digest, compute_digest(attrs)) + |> validate_required([:digest, :user_id, :endpoint, :auth, :p256dh]) + |> unique_constraint([:digest, :user_id], name: :user_push_subscriptions_user_id_digest_index) end - defp cast_data(schema, attrs) do - schema - |> cast(attrs, [:endpoint]) - |> cast_embed(:keys, with: &cast_keys/2) - |> validate_required([:endpoint, :keys]) - end + defp compute_digest(attrs) do + data = + Jason.encode!(%{endpoint: attrs.endpoint, keys: %{auth: attrs.auth, p256dh: attrs.p256dh}}) - defp cast_keys(schema, attrs) do - schema - |> cast(attrs, [:auth, :p256dh]) - |> validate_required([:auth, :p256dh]) - end - - defp compute_digest(data) do :sha256 |> :crypto.hash(data) |> Base.encode16() diff --git a/lib/mobilizon/users/users.ex b/lib/mobilizon/users/users.ex index 30e04f18d..b20166aef 100644 --- a/lib/mobilizon/users/users.ex +++ b/lib/mobilizon/users/users.ex @@ -413,17 +413,16 @@ defmodule Mobilizon.Users do def list_user_push_subscriptions(user_id, page \\ nil, limit \\ nil) do PushSubscription |> where([p], p.user_id == ^user_id) - |> preload([:user]) |> Page.build_page(page, limit) end @doc """ - Get a push subscription by their ID + Get a push subscription by their endpoint """ - @spec get_push_subscription(String.t() | integer()) :: PushSubscription.t() | nil - def get_push_subscription(push_subscription_id) do + @spec get_push_subscription_by_endpoint(String.t()) :: PushSubscription.t() | nil + def get_push_subscription_by_endpoint(endpoint) do PushSubscription - |> Repo.get(push_subscription_id) + |> Repo.get_by(endpoint: endpoint) |> Repo.preload([:user]) end diff --git a/lib/service/activity/renderer/discussion.ex b/lib/service/activity/renderer/discussion.ex new file mode 100644 index 000000000..f156d2faa --- /dev/null +++ b/lib/service/activity/renderer/discussion.ex @@ -0,0 +1,83 @@ +defmodule Mobilizon.Service.Activity.Renderer.Discussion do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :discussion_created -> + %{ + body: + dgettext("activity", "%{profile} created the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_replied -> + %{ + body: + dgettext("activity", "%{profile} replied to the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_renamed -> + %{ + body: + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_archived -> + %{ + body: + dgettext("activity", "%{profile} archived the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_deleted -> + %{ + body: + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: nil + } + end + end + + defp discussion_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/event.ex b/lib/service/activity/renderer/event.ex new file mode 100644 index 000000000..8f70c92d1 --- /dev/null +++ b/lib/service/activity/renderer/event.ex @@ -0,0 +1,83 @@ +defmodule Mobilizon.Service.Activity.Renderer.Event do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :event_created -> + %{ + body: + dgettext("activity", "The event %{event} was created by %{profile}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + + :event_updated -> + %{ + body: + dgettext("activity", "The event %{event} was updated by %{profile}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + + :event_deleted -> + %{ + body: + dgettext("activity", "The event %{event} was deleted by %{profile}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: nil + } + + :comment_posted -> + if activity.subject_params["comment_reply_to"] do + %{ + body: + dgettext("activity", "%{profile} replied to a comment on the event %{event}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} posted a comment on the event %{event}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + end + end + end + + defp event_url(activity) do + Routes.page_url( + Endpoint, + :event, + activity.subject_params["event_uuid"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["event_title"] +end diff --git a/lib/service/activity/renderer/group.ex b/lib/service/activity/renderer/group.ex new file mode 100644 index 000000000..cb0fa4554 --- /dev/null +++ b/lib/service/activity/renderer/group.ex @@ -0,0 +1,58 @@ +defmodule Mobilizon.Service.Activity.Renderer.Group do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :post_created -> + %{ + body: + dgettext("activity", "The post %{post} was created by %{profile}.", %{ + profile: profile(activity), + post: title(activity) + }), + url: post_url(activity) + } + + :post_updated -> + %{ + body: + dgettext("activity", "The post %{post} was updated by %{profile}.", %{ + profile: profile(activity), + post: title(activity) + }), + url: post_url(activity) + } + + :post_deleted -> + %{ + body: + dgettext("activity", "The post %{post} was deleted by %{profile}.", %{ + profile: profile(activity), + post: title(activity) + }), + url: post_url(activity) + } + end + end + + defp post_url(activity) do + Routes.page_url(Endpoint, :post, activity.subject_params["post_slug"]) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["post_title"] +end diff --git a/lib/service/activity/renderer/member.ex b/lib/service/activity/renderer/member.ex new file mode 100644 index 000000000..4e804229e --- /dev/null +++ b/lib/service/activity/renderer/member.ex @@ -0,0 +1,122 @@ +defmodule Mobilizon.Service.Activity.Renderer.Member do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :member_request -> + %{ + body: + dgettext("activity", "%{member} requested to join the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_invited -> + %{ + body: + dgettext("activity", "%{member} was invited by %{profile}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_accepted_invitation -> + %{ + body: + dgettext("activity", "%{member} accepted the invitation to join the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_rejected_invitation -> + %{ + body: + dgettext("activity", "%{member} rejected the invitation to join the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_joined -> + %{ + body: + dgettext("activity", "%{member} joined the group.", %{ + member: title(activity) + }), + url: member_url(activity) + } + + :member_added -> + %{ + body: + dgettext("activity", "%{profile} added the member %{member}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_updated -> + %{ + body: + dgettext("activity", "%{profile} updated the member %{member}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_removed -> + %{ + body: + dgettext("activity", "%{profile} excluded member %{member}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_quit -> + %{ + body: + dgettext("activity", "%{profile} quit the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + end + end + + defp member_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/post.ex b/lib/service/activity/renderer/post.ex new file mode 100644 index 000000000..6636f1280 --- /dev/null +++ b/lib/service/activity/renderer/post.ex @@ -0,0 +1,83 @@ +defmodule Mobilizon.Service.Activity.Renderer.Post do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :discussion_created -> + %{ + body: + dgettext("activity", "%{profile} created the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_replied -> + %{ + body: + dgettext("activity", "%{profile} replied to the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_renamed -> + %{ + body: + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_archived -> + %{ + body: + dgettext("activity", "%{profile} archived the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_deleted -> + %{ + body: + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: nil + } + end + end + + defp discussion_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/renderer.ex b/lib/service/activity/renderer/renderer.ex new file mode 100644 index 000000000..5a56edb52 --- /dev/null +++ b/lib/service/activity/renderer/renderer.ex @@ -0,0 +1,47 @@ +defmodule Mobilizon.Service.Activity.Renderer do + @moduledoc """ + Behavior for Activity renderers + """ + + alias Mobilizon.Config + alias Mobilizon.Activities.Activity + alias Mobilizon.Service.Activity.Renderer.{Discussion, Event, Group, Member, Post, Resource} + require Logger + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @type render :: %{body: String.t(), url: String.t()} + + @callback render(entity :: Activity.t(), Keyword.t()) :: render() + + @spec render(Activity.t()) :: render() + def render(%Activity{} = activity, options \\ []) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + res = + activity + |> do_render(options) + |> Map.put(:timestamp, DateTime.utc_now() |> DateTime.to_iso8601()) + |> Map.put(:locale, Keyword.get(options, :locale, "en")) + |> Map.put( + :title, + dgettext("activity", "Activity on %{instance}", %{instance: Config.instance_name()}) + ) + + Logger.debug("notification to be sent") + Logger.debug(inspect(res)) + res + end + + defp do_render(%Activity{type: type} = activity, options) do + case type do + :discussion -> Discussion.render(activity, options) + :event -> Event.render(activity, options) + :group -> Group.render(activity, options) + :member -> Member.render(activity, options) + :post -> Post.render(activity, options) + :resource -> Resource.render(activity, options) + _ -> nil + end + end +end diff --git a/lib/service/activity/renderer/resource.ex b/lib/service/activity/renderer/resource.ex new file mode 100644 index 000000000..5355d5278 --- /dev/null +++ b/lib/service/activity/renderer/resource.ex @@ -0,0 +1,122 @@ +defmodule Mobilizon.Service.Activity.Renderer.Resource do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :resource_created -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext("activity", "%{profile} created the folder %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} created the resource %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + end + + :resource_renamed -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext( + "activity", + "%{profile} renamed the folder from %{old_resource_title} to %{resource}.", + %{ + profile: profile(activity), + resource: title(activity), + old_resource_title: activity.subject_params["old_resource_title"] + } + ), + url: resource_url(activity) + } + else + %{ + body: + dgettext( + "activity", + "%{profile} renamed the resource from %{old_resource_title} to %{resource}.", + %{ + profile: profile(activity), + resource: title(activity), + old_resource_title: activity.subject_params["old_resource_title"] + } + ), + url: resource_url(activity) + } + end + + :resource_moved -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext("activity", "%{profile} moved the folder %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} moved the resource %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + end + + :resource_deleted -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext("activity", "%{profile} deleted the folder %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} deleted the resource %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + end + end + end + + defp resource_url(activity) do + Routes.page_url(Endpoint, :resource, activity.subject_params["resource_uuid"]) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["resource_title"] +end diff --git a/lib/service/activity/utils.ex b/lib/service/activity/utils.ex new file mode 100644 index 000000000..dcb26e2da --- /dev/null +++ b/lib/service/activity/utils.ex @@ -0,0 +1,30 @@ +defmodule Mobilizon.Service.Activity.Utils do + @moduledoc """ + Utils for activities + """ + + alias Mobilizon.Activities.Activity + alias Mobilizon.Service.Activity, as: ActivityService + + def transform_activity(%Activity{} = activity) do + activity + |> Map.update(:subject_params, %{}, &transform_params/1) + |> add_activity_object() + end + + @spec add_activity_object(Activity.t()) :: Activity.t() + def add_activity_object(%Activity{} = activity) do + Map.put(activity, :object, ActivityService.object(activity)) + end + + @spec transform_params(map()) :: list() + defp transform_params(params) do + Enum.map(params, fn {key, value} -> %{key: key, value: transform_value(value)} end) + end + + defp transform_value(value) when is_list(value) do + Enum.join(value, ",") + end + + defp transform_value(value), do: value +end diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex index e9b7c0b94..6043e0ebc 100644 --- a/lib/service/notifier/push.ex +++ b/lib/service/notifier/push.ex @@ -4,10 +4,11 @@ defmodule Mobilizon.Service.Notifier.Push do """ alias Mobilizon.Activities.Activity alias Mobilizon.{Config, Users} + alias Mobilizon.Service.Activity.{Renderer, Utils} alias Mobilizon.Service.Notifier alias Mobilizon.Service.Notifier.Push alias Mobilizon.Storage.Page - alias Mobilizon.Users.User + alias Mobilizon.Users.{PushSubscription, User} @behaviour Notifier @@ -17,26 +18,37 @@ defmodule Mobilizon.Service.Notifier.Push do end @impl Notifier - def send(%User{id: user_id} = _user, %Activity{} = activity, _opts) do + def send(user, activity, options \\ []) + + def send(%User{id: user_id, locale: locale} = _user, %Activity{} = activity, options) do + options = Keyword.put_new(options, :locale, locale) + %Page{elements: subscriptions} = Users.list_user_push_subscriptions(user_id, 1, 100) - Enum.each(subscriptions, &send_subscription(activity, &1)) + Enum.map(subscriptions, &send_subscription(activity, convert_subscription(&1), options)) end @impl Notifier - def send(%User{} = user, activities, opts) when is_list(activities) do - Enum.each(activities, &Push.send(user, &1, opts)) + def send(%User{} = user, activities, options) when is_list(activities) do + Enum.map(activities, &Push.send(user, &1, options)) end - defp payload(%Activity{subject: subject}) do - %{ - title: subject - } + defp send_subscription(activity, subscription, options) do + activity + |> payload(options) + |> WebPushEncryption.send_web_push(subscription) + end + + defp payload(%Activity{} = activity, options) do + activity + |> Utils.add_activity_object() + |> Renderer.render(options) |> Jason.encode!() end - defp send_subscription(activity, subscription) do - activity - |> payload() - |> WebPushEncryption.send_web_push(subscription) + defp convert_subscription(%PushSubscription{} = subscription) do + %{ + endpoint: subscription.endpoint, + keys: %{auth: subscription.auth, p256dh: subscription.p256dh} + } end end diff --git a/priv/gettext/activity.pot b/priv/gettext/activity.pot index bbfd28fc8..3dcd2c330 100644 --- a/priv/gettext/activity.pot +++ b/priv/gettext/activity.pot @@ -11,52 +11,54 @@ msgid "" msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -67,75 +69,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -148,73 +153,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -228,3 +233,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/activity.po b/priv/gettext/ar/LC_MESSAGES/activity.po index 35b2eb9e6..496fa0dd4 100644 --- a/priv/gettext/ar/LC_MESSAGES/activity.po +++ b/priv/gettext/ar/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=6\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -237,3 +242,8 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po index b3ecfb3e7..e27541f25 100644 --- a/priv/gettext/ar/LC_MESSAGES/default.po +++ b/priv/gettext/ar/LC_MESSAGES/default.po @@ -31,7 +31,7 @@ msgid "Activate my account" msgstr "تنشيط حسابي" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "أطلب مِن المجتمَع على Framacolibri" @@ -135,7 +135,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "تنبيه" @@ -744,7 +744,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -807,7 +807,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} هو خادم موبيليزون Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} هو خادم موبيليزون Mobilizon." @@ -891,7 +891,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "تعلّم المزيد عن Mobilizon." @@ -1059,7 +1059,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1385,7 +1385,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1437,6 +1437,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/activity.po b/priv/gettext/be/LC_MESSAGES/activity.po index 50607f40e..acf443d6d 100644 --- a/priv/gettext/be/LC_MESSAGES/activity.po +++ b/priv/gettext/be/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po index 7fbe8896b..8dfb26e9b 100644 --- a/priv/gettext/be/LC_MESSAGES/default.po +++ b/priv/gettext/be/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -132,7 +132,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -726,7 +726,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -783,7 +783,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -867,7 +867,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1035,7 +1035,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1361,7 +1361,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1413,6 +1413,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/activity.po b/priv/gettext/ca/LC_MESSAGES/activity.po index 2dc7bf606..f02a04104 100644 --- a/priv/gettext/ca/LC_MESSAGES/activity.po +++ b/priv/gettext/ca/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po index 18a7a9d9a..408cb5619 100644 --- a/priv/gettext/ca/LC_MESSAGES/default.po +++ b/priv/gettext/ca/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Activa el meu compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Pregunta a la comunitat a Framacolibri" @@ -142,7 +142,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Algú ha soŀlicitat a %{instance} una contrasenya nova." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Alerta" @@ -892,7 +892,7 @@ msgstr "" "confirma l'adreça de correu que has introduït:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Necessites ajuda? Alguna cosa no funciona?" @@ -954,7 +954,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} és un servidor de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} és un servidor de Mobilizon." @@ -1055,7 +1055,7 @@ msgstr "" "l'enllaç de dalt i clica al botó de participació." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Per aprendre més de Mobilizon." @@ -1231,7 +1231,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si no has fet tu aquest canvi, pots ignorar aquest missatge." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "No ho facis servir més que proves, sisplau." @@ -1610,7 +1610,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Ho sentim, s'ha produït un error al nostre costat." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Aquesta és una web de proves per provar la beta de Mobilizon." @@ -1662,6 +1662,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/activity.po b/priv/gettext/cs/LC_MESSAGES/activity.po index c1c413028..b1d9bc2f7 100644 --- a/priv/gettext/cs/LC_MESSAGES/activity.po +++ b/priv/gettext/cs/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po index be19692f6..78f4ae32e 100644 --- a/priv/gettext/cs/LC_MESSAGES/default.po +++ b/priv/gettext/cs/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -132,7 +132,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -726,7 +726,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -783,7 +783,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -867,7 +867,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1035,7 +1035,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1361,7 +1361,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1413,6 +1413,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/activity.po b/priv/gettext/de/LC_MESSAGES/activity.po index 83419e272..db677c96a 100644 --- a/priv/gettext/de/LC_MESSAGES/activity.po +++ b/priv/gettext/de/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 78ae91b9c..d684bdd38 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Activate my account" msgstr "Mein Konto aktivieren" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Richte deine Fragen an die Gemeinschaft auf Framacolibri" @@ -145,7 +145,7 @@ msgstr "" "Du hast ein neues Passwort für deinen Account auf %{instance} angefragt." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Warnung" @@ -922,7 +922,7 @@ msgstr "" "angegebene E-Mail Adresse:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Brauchst Du Hilfe? Funktioniert etwas nicht richtig?" @@ -986,7 +986,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} ist ein Mobilizon-Server." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} ist ein Mobilizon-Server." @@ -1088,7 +1088,7 @@ msgstr "" "auf die Veranstaltungs-Seite und klicke auf den Teilnahme-Button." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Lerne mehr über Mobilizon!" @@ -1273,7 +1273,7 @@ msgstr "" "diese Meldung." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Bitte verwenden Sie es nicht für reale Zwecke." @@ -1719,7 +1719,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Es tut uns leid, aber auf unserer Seite ist etwas schief gelaufen." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Dies ist eine Demo-Seite, um die Beta-Version von Mobilizon zu testen." @@ -1777,6 +1777,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 9f2091dad..71c75d69f 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -14,7 +14,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -118,7 +118,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -707,7 +707,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -762,7 +762,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -846,7 +846,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1014,7 +1014,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1340,7 +1340,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1392,6 +1392,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/activity.po b/priv/gettext/en/LC_MESSAGES/activity.po index 55bd8a9bd..5f762726a 100644 --- a/priv/gettext/en/LC_MESSAGES/activity.po +++ b/priv/gettext/en/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index c4cd02269..0b8675bcb 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -37,7 +37,7 @@ msgid "Activate my account" msgstr "Activate my account" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Ask the community on Framacolibri" @@ -141,7 +141,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "You requested a new password for your account on %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Warning" @@ -760,7 +760,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Need some help? Something not working properly?" @@ -815,7 +815,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is a Mobilizon server." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is a Mobilizon server." @@ -899,7 +899,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "If you need to cancel your participation, just access the event page through link above and click on the participation button." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Learn more about Mobilizon." @@ -1067,7 +1067,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Please do not use it in any real way" @@ -1393,7 +1393,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "This is a demonstration site to test the beta version of Mobilizon." @@ -1445,6 +1445,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/activity.po b/priv/gettext/es/LC_MESSAGES/activity.po index 3f423fc86..7aac461cc 100644 --- a/priv/gettext/es/LC_MESSAGES/activity.po +++ b/priv/gettext/es/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index c9fe5ec2a..f3aec70fc 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Activar mi cuenta" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Preguntar a la comunidad en framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Solicitó una nueva contraseña para su cuenta en %{instancia}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Advertencia" @@ -902,7 +902,7 @@ msgstr "" "Confirme la dirección de correo electrónico que proporcionó:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "¿Necesita ayuda? ¿Algo no está funcionando correctamente?" @@ -967,7 +967,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es un servidor de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instancia de Mobilizon." @@ -1067,7 +1067,7 @@ msgstr "" "mediante el enlace debajo y presiona el botón." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "¡Aprenda más sobre Mobilizon aquí!" @@ -1244,7 +1244,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si no activó el cambio usted mismo, ignore este mensaje." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Por favor no lo use de ninguna manera real." @@ -1676,7 +1676,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Lo sentimos, pero algo salió mal por nuestra parte." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Este es un sitio de demostración para probar Mobilizon." @@ -1733,6 +1733,6 @@ msgid "Public feed for %{instance}" msgstr "Flujo público para %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/activity.po b/priv/gettext/fi/LC_MESSAGES/activity.po index 435aa72dc..d11830241 100644 --- a/priv/gettext/fi/LC_MESSAGES/activity.po +++ b/priv/gettext/fi/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po index 590514893..79c31ef7a 100644 --- a/priv/gettext/fi/LC_MESSAGES/default.po +++ b/priv/gettext/fi/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Aktivoi tilini" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Kysy yhteisöltä Framacolibrissa" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Pyysit uutta salasanaa tilillesi palvelimella %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Varoitus" @@ -885,7 +885,7 @@ msgstr "" "sähköpostiosoite:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Tarvitsetko apua? Eikö kaikki toimi niin kuin pitäisi?" @@ -948,7 +948,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} on Mobilizon-palvelin." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} on Mobilizon-palvelin." @@ -1048,7 +1048,7 @@ msgstr "" "linkistä ja napsauta siellä osallistumispainiketta." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Lue lisää Mobilizonista." @@ -1224,7 +1224,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Jos et tehnyt vaihtoa itse, voit jättää tämän viestin huomiotta." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Älä käytä todellisiin tarkoituksiin." @@ -1651,7 +1651,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Pahoittelemme, tapahtui virhe palvelimen päässä." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Tällä kokeilusivustolla voit koekäyttää Mobilizonia." @@ -1703,6 +1703,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/activity.po b/priv/gettext/fr/LC_MESSAGES/activity.po index 36413eb3b..16a9d04b2 100644 --- a/priv/gettext/fr/LC_MESSAGES/activity.po +++ b/priv/gettext/fr/LC_MESSAGES/activity.po @@ -18,223 +18,232 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" -#, elixir-format +#: lib/service/activity/renderer/member.ex:43 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 #: lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "%{member} a accepté l'invitation à rejoindre le groupe." -#, elixir-format +#: lib/service/activity/renderer/member.ex:53 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 #: lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "%{member} a refusé l'invitation à rejoindre le groupe." -#, elixir-format +#: lib/service/activity/renderer/member.ex:23 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 #: lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "%{member} a demandé à rejoindre le groupe." -#, elixir-format +#: lib/service/activity/renderer/member.ex:33 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 #: lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "%{member} a été invité⋅e par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:72 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 #: lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "%{profile} a ajouté le ou la membre %{membre}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "%{profile} a archivé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "%{profile} a créé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:24 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "%{profile} a créé le dossier %{resource}." -#, elixir-format #: lib/web/templates/email/activity/_group_activity_item.html.eex:4 #: lib/web/templates/email/activity/_group_activity_item.text.eex:1 msgid "%{profile} created the group %{group}." msgstr "%{profile} a créé le groupe %{group}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:33 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "%{profile} a créé la resource %{resource}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "%{profile} a créé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:97 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "%{profile} a supprimé le dossier %{resource}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:106 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "%{profile} a supprimé la resource %{resource}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:92 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 #: lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "%{profile} a exclu le ou la membre %{membre}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:76 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "%{profile} a déplacé le dossier %{resource}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:85 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "%{profile} a déplacé la ressource %{resource}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:102 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 #: lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "%{profile} a quitté le groupe." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "%{profile} a renommé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:45 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "%{profile} a renommé le dossier %{old_resource_title} en %{resource}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:59 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "%{profile} a renommé la resource %{old_resource_title} en %{resource}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." msgstr "%{profile} a répondu à la discussion %{discussion}." -#, elixir-format #: lib/web/templates/email/activity/_group_activity_item.html.eex:19 #: lib/web/templates/email/activity/_group_activity_item.text.eex:7 msgid "%{profile} updated the group %{group}." msgstr "%{profile} a mis à jour le groupe %{group}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:82 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 #: lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "%{profile} a mis à jour le membre %{member}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:23 #: lib/web/templates/email/activity/_event_activity_item.html.eex:4 #: lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "L'événement %{event} a été créé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:43 #: lib/web/templates/email/activity/_event_activity_item.html.eex:34 #: lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "L'événement %{event} a été supprimé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:33 #: lib/web/templates/email/activity/_event_activity_item.html.eex:19 #: lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "L'événement %{event} a été mis à jour par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/group.ex:23 #: lib/web/templates/email/activity/_post_activity_item.html.eex:4 #: lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "Le billet %{post} a été créé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/group.ex:43 #: lib/web/templates/email/activity/_post_activity_item.html.eex:34 #: lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "Le billet %{post} a été supprimé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/group.ex:33 #: lib/web/templates/email/activity/_post_activity_item.html.eex:19 #: lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "Le billet %{post} a été mis à jour par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:63 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 #: lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "%{member} a rejoint le groupe." -#, elixir-format +#: lib/service/activity/renderer/event.ex:63 #: lib/web/templates/email/activity/_event_activity_item.html.eex:58 #: lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "%{profile} a posté un commentaire sur l'événement %{event}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:54 #: lib/web/templates/email/activity/_event_activity_item.html.eex:43 #: lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}." -#, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "Vous ne voulez pas recevoir de notifications d'activité ? Vous pouvez changer leur fréquence ou les désactiver dans vos préférences." -#, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "Voir une activité de plus" msgstr[1] "Voir %{count} activités de plus" -#, elixir-format #: lib/web/templates/email/email_direct_activity.html.eex:38 #: lib/web/templates/email/email_direct_activity.text.eex:4 msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "Il y a eu une activité !" msgstr[1] "Il y a eu de l'activité !" + +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "Activité sur %{instance}" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 998b12c14..0dc5883fa 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -36,7 +36,7 @@ msgid "Activate my account" msgstr "Activer mon compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Demander à la communauté sur Framacolibri" @@ -140,7 +140,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Vous avez demandé un nouveau mot de passe pour votre compte sur %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Attention" @@ -743,7 +743,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "Salut ! Vous venez de vous enregistrer pour rejoindre cet événement : « %{title} ». Merci de confirmer l'adresse email que vous avez fournie :" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Besoin d'aide ? Quelque chose ne fonctionne pas correctement ?" @@ -798,7 +798,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} est une instance Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} est une instance Mobilizon." @@ -882,7 +882,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "Si vous avez besoin d'annuler votre participation, il suffit d'accéder à la page de l'événement à partir du lien ci-dessus et de cliquer sur le bouton « Je participe »." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "En apprendre plus à propos de Mobilizon ici !" @@ -1050,7 +1050,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si vous n'êtes pas à l'origine de cette modification, merci d'ignorer ce message." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Veuillez ne pas l'utiliser pour un cas réel." @@ -1378,7 +1378,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Ceci est un site de démonstration permettant de tester Mobilizon." @@ -1430,6 +1430,6 @@ msgid "Public feed for %{instance}" msgstr "Flux public pour %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "Notification d'activité sur %{instance}" diff --git a/priv/gettext/gl/LC_MESSAGES/activity.po b/priv/gettext/gl/LC_MESSAGES/activity.po index 7087b827a..9dd50f7a1 100644 --- a/priv/gettext/gl/LC_MESSAGES/activity.po +++ b/priv/gettext/gl/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/gl/LC_MESSAGES/default.po b/priv/gettext/gl/LC_MESSAGES/default.po index 5e128063d..f65626fb5 100644 --- a/priv/gettext/gl/LC_MESSAGES/default.po +++ b/priv/gettext/gl/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Activar a miña conta" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Pregunta á comunidade en Framacolibri" @@ -143,7 +143,7 @@ msgstr "" "Solicitaches un novo contrasinal para a túa conta na instancia %{instance]." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Aviso" @@ -881,7 +881,7 @@ msgstr "" "confirma o email proporcionado:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Precisas axuda? Algo non funciona como agardabas?" @@ -945,7 +945,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} funciona grazas a Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} funciona grazas a Mobilizon." @@ -1045,7 +1045,7 @@ msgstr "" "da ligazón superior e preme no botón « Participar »." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Coñece máis acerca de Mobilizon!" @@ -1222,7 +1222,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Se non propiciaches ti o cambio, por favor ignora esta mensaxe." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Por favor, non o uses para eventos reais." @@ -1646,7 +1646,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Lamentámolo, pero algo está a fallar pola nosa parte." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Este é un sitio web de exemplo para probar Mobilizon." @@ -1701,6 +1701,6 @@ msgid "Public feed for %{instance}" msgstr "Fonte pública de %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/activity.po b/priv/gettext/hu/LC_MESSAGES/activity.po index 26ec68100..0762eb83c 100644 --- a/priv/gettext/hu/LC_MESSAGES/activity.po +++ b/priv/gettext/hu/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/default.po b/priv/gettext/hu/LC_MESSAGES/default.po index 61eaebfca..f615be09f 100644 --- a/priv/gettext/hu/LC_MESSAGES/default.po +++ b/priv/gettext/hu/LC_MESSAGES/default.po @@ -37,7 +37,7 @@ msgid "Activate my account" msgstr "Saját fiók aktiválása" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Kérdezze meg a közösséget a Framacolibrin" @@ -149,7 +149,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Új jelszót kért a(z) %{instance} példányon lévő fiókjához." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Figyelmeztetés" @@ -771,7 +771,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -826,7 +826,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -910,7 +910,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1080,7 +1080,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1406,7 +1406,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1458,6 +1458,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/activity.po b/priv/gettext/it/LC_MESSAGES/activity.po index 3fb8c46ad..4f7689880 100644 --- a/priv/gettext/it/LC_MESSAGES/activity.po +++ b/priv/gettext/it/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index a3ae0489f..7155537fa 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Attiva il mio account" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Chiedi alla comunità su Framacolibri" @@ -142,7 +142,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Hai richiesto una nuova password per il tuo account su %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Avviso" @@ -904,7 +904,7 @@ msgstr "" "Conferma l'indirizzo e-mail che hai fornito:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Bisogno di aiuto? Qualcosa non funziona correttamente?" @@ -970,7 +970,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "% {instance} è alimentata da Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} è alimentata da Mobilizon." @@ -1071,7 +1071,7 @@ msgstr "" "tramite il link in alto e fai clic sul pulsante «Partecipanti»." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Scopri di più su Mobilizon qui!" @@ -1253,7 +1253,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Se non hai attivato tu stesso la modifica, ignora questo messaggio." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr " Si prega di non utilizzarlo per scopi reali. " @@ -1691,7 +1691,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Siamo spiacenti, ma qualcosa è andato storto da parte nostra." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Questo è un sito di prova per testare Mobilizon." @@ -1746,6 +1746,6 @@ msgid "Public feed for %{instance}" msgstr "Feed pubblico per %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/activity.po b/priv/gettext/ja/LC_MESSAGES/activity.po index 698146a2f..f912b116c 100644 --- a/priv/gettext/ja/LC_MESSAGES/activity.po +++ b/priv/gettext/ja/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=1\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -227,3 +232,8 @@ msgstr[0] "" msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/default.po b/priv/gettext/ja/LC_MESSAGES/default.po index 37f18eb99..d6a974268 100644 --- a/priv/gettext/ja/LC_MESSAGES/default.po +++ b/priv/gettext/ja/LC_MESSAGES/default.po @@ -30,7 +30,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -134,7 +134,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -718,7 +718,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -771,7 +771,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -855,7 +855,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1023,7 +1023,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1349,7 +1349,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1401,6 +1401,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/activity.po b/priv/gettext/nl/LC_MESSAGES/activity.po index 53a1820c1..4145c0eb7 100644 --- a/priv/gettext/nl/LC_MESSAGES/activity.po +++ b/priv/gettext/nl/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/default.po b/priv/gettext/nl/LC_MESSAGES/default.po index 52563b8fd..3e80232f8 100644 --- a/priv/gettext/nl/LC_MESSAGES/default.po +++ b/priv/gettext/nl/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Activate my account" msgstr "Activeer mijn account" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Vragen aan de gemeenschap op Framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "U hebt een nieuw wachtwoord aangevraagd voor uw account op %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Waarschuwing" @@ -732,7 +732,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Hulp nodig? Werkt iets niet juist?" @@ -793,7 +793,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is een Mobilizonserver." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is een Mobilizonserver." @@ -879,7 +879,7 @@ msgstr "" "via de link hierboven, en klikt u op de deelnameknop." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Leer meer over Mobilizon." @@ -1047,7 +1047,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1374,7 +1374,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Dit is een demosite om de bètaversie van Mobilizon te testen." @@ -1426,6 +1426,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/activity.po b/priv/gettext/nn/LC_MESSAGES/activity.po index 1e15ffdee..d2e1ac971 100644 --- a/priv/gettext/nn/LC_MESSAGES/activity.po +++ b/priv/gettext/nn/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/default.po b/priv/gettext/nn/LC_MESSAGES/default.po index 1e172c4c1..a99e3368f 100644 --- a/priv/gettext/nn/LC_MESSAGES/default.po +++ b/priv/gettext/nn/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Ta i bruk kontoen min" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Spør brukarsamfunnet på Framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Du ba om eit nytt passord for brukarkontoen din på %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Åtvaring" @@ -877,7 +877,7 @@ msgstr "" "epostadressa du skreiv inn:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Treng du hjelp, eller er det noko som ikkje verkar slik du venta?" @@ -940,7 +940,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} er ein Mobilizon-nettstad." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} er ein Mobilizon-nettstad." @@ -1040,7 +1040,7 @@ msgstr "" "og klkka på «Deltek»-knappen." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Lær meir om Mobilizon her!" @@ -1217,7 +1217,7 @@ msgstr "" "Viss du ikkje endra dette sjølv, kan du trygt sjå bort frå denne meldinga." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Ikkje bruk det på ordentleg." @@ -1647,7 +1647,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Orsak, det skjedde noko feil hjå oss." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Dette er ei demoside for å prøva ut Mobilizon." @@ -1702,6 +1702,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/activity.po b/priv/gettext/oc/LC_MESSAGES/activity.po index d8e274939..3531e9da7 100644 --- a/priv/gettext/oc/LC_MESSAGES/activity.po +++ b/priv/gettext/oc/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/default.po b/priv/gettext/oc/LC_MESSAGES/default.po index 17aca0227..f4586201e 100644 --- a/priv/gettext/oc/LC_MESSAGES/default.po +++ b/priv/gettext/oc/LC_MESSAGES/default.po @@ -31,7 +31,7 @@ msgid "Activate my account" msgstr "Activar mon compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Demandatz a la comunautat sus Framacolibri" @@ -135,7 +135,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Avètz demandat un nòu senhal per vòstre compte sus %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Avertiment" @@ -800,7 +800,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Besonh d’ajuda ? Quicòm truca ?" @@ -865,7 +865,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instància Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instància Mobilizon." @@ -952,7 +952,7 @@ msgstr "" "participacion." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Ne saber mai tocant Mobilizon." @@ -1124,7 +1124,7 @@ msgstr "" "S’avètz pas demandat aquesta modificacion, mercés d’ignorar aqueste messatge." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Mercés de l’utilizar pas d’un biais real." @@ -1458,7 +1458,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1511,6 +1511,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/activity.po b/priv/gettext/pl/LC_MESSAGES/activity.po index d3a8d0868..7fca2979e 100644 --- a/priv/gettext/pl/LC_MESSAGES/activity.po +++ b/priv/gettext/pl/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/default.po b/priv/gettext/pl/LC_MESSAGES/default.po index d4e58838d..47528c548 100644 --- a/priv/gettext/pl/LC_MESSAGES/default.po +++ b/priv/gettext/pl/LC_MESSAGES/default.po @@ -34,7 +34,7 @@ msgid "Activate my account" msgstr "Aktywuj moje konto" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Zapytaj społeczność na Framacolibri" @@ -145,7 +145,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Poprosiłeś(-aś) o nowe hasło do swojego konta na %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Ostrzeżenie" @@ -795,7 +795,7 @@ msgstr "" "„%{title}”. Potwierdź wprowadzony adres e-mail:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Potrzebujesz pomocy? Coś nie działa prawidłowo?" @@ -864,7 +864,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} jest serwerem Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} jest serwerem Mobilizon." @@ -963,7 +963,7 @@ msgstr "" "używając powyższego przycisku i naciśnij przycisk zgłaszania udziału." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Dowiedz się więcej o Mobilizon." @@ -1133,7 +1133,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Nie używaj go do żadnych rzeczywistych celów" @@ -1475,7 +1475,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Przepraszamy, ale coś poszło nie tak po naszej stronie." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "To jest strona demonstracyjna pozwalająca na przetestowanie Mobilizon." @@ -1527,6 +1527,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/activity.po b/priv/gettext/pt/LC_MESSAGES/activity.po index 6b6ca9c20..2bf2bb1c9 100644 --- a/priv/gettext/pt/LC_MESSAGES/activity.po +++ b/priv/gettext/pt/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index 8d0196cf2..e1c79e08f 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -132,7 +132,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -721,7 +721,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -776,7 +776,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -860,7 +860,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1028,7 +1028,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1354,7 +1354,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1406,6 +1406,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/activity.po b/priv/gettext/pt_BR/LC_MESSAGES/activity.po index 104f0b400..6412a93a2 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/activity.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index ec5d2e98e..e880bd3a4 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Ativar a minha conta" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Perguntar à comunidade Framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Você solicitou uma nova senha para sua conta em %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Atenção" @@ -790,7 +790,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Precisa de ajuda? Algo não está funcionando bem?" @@ -851,7 +851,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} é um servidor Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} é um servidor Mobilizon." @@ -937,7 +937,7 @@ msgstr "" "evento através do link acima e clique no botão participação." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Aprenda mais sobre Mobilizon." @@ -1105,7 +1105,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Por favor não utilize este serviço em nenhum caso real" @@ -1466,7 +1466,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Este é um site de demonstração para testar a versão beta do Mobilizon." @@ -1518,6 +1518,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/activity.po b/priv/gettext/ru/LC_MESSAGES/activity.po index 5def29e57..acb893cd0 100644 --- a/priv/gettext/ru/LC_MESSAGES/activity.po +++ b/priv/gettext/ru/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index d1d915cbc..d9a414229 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Activate my account" msgstr "Активировать мою учётную запись" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Обратиться к сообществу на Framacolibri" @@ -144,7 +144,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Вы запросили новый пароль для своей учетной записи на %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Предупреждение" @@ -901,7 +901,7 @@ msgstr "" "указали:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Нужна помощь? Что-то не работает?" @@ -974,7 +974,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." @@ -1075,7 +1075,7 @@ msgstr "" "мероприятия по ссылке выше и нажмите кнопку « Я участвую »." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Узнайте больше о Mobilizon!" @@ -1253,7 +1253,7 @@ msgstr "" "сообщение." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Пожалуйста, используйте это только для тестовых целей." @@ -1687,7 +1687,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Сожалеем, но с нашей стороны что-то пошло не так." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Это демонстрационная площадка для тестирования Mobilizon." @@ -1743,6 +1743,6 @@ msgid "Public feed for %{instance}" msgstr "Публичная лента для %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/activity.po b/priv/gettext/sv/LC_MESSAGES/activity.po index 7d8883c90..627afa7b4 100644 --- a/priv/gettext/sv/LC_MESSAGES/activity.po +++ b/priv/gettext/sv/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index b6b41c6b5..b7ae50d63 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgstr "%{title} av %{creator}" msgid "Activate my account" msgstr "Aktivera mitt konto" -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 #, elixir-format msgid "Ask the community on Framacolibri" @@ -143,8 +143,8 @@ msgstr "Ny titel: %{title}" msgid "You requested a new password for your account on %{instance}." msgstr "Du har bett om ett nytt lösenord för ditt konto på %{instance}." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Varning" @@ -736,7 +736,8 @@ msgstr "" msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" -#: lib/web/templates/email/email.html.eex:114 +#, elixir-format +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 #, elixir-format msgid "Need help? Is something not working as expected?" @@ -797,8 +798,8 @@ msgstr[1] "" msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} är en Mobilizon-server." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} är en Mobilizon-server." @@ -884,7 +885,8 @@ msgstr "" "Om du behöver lämna återbud är det bara att gå till evenemangets sida, på " "länken ovan, och klicka på deltagande-knappen." -#: lib/web/templates/email/email.html.eex:143 +#, elixir-format +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 #, elixir-format msgid "Learn more about Mobilizon here!" @@ -1052,8 +1054,8 @@ msgstr "" msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1380,7 +1382,8 @@ msgstr "" msgid "We're sorry, but something went wrong on our end." msgstr "" -#: lib/web/templates/email/email.html.eex:88 +#, elixir-format +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 #, elixir-format msgid "This is a demonstration site to test Mobilizon." @@ -1434,6 +1437,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs b/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs index 6f790981c..56c6fe3eb 100644 --- a/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs +++ b/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs @@ -6,7 +6,9 @@ defmodule Mobilizon.Repo.Migrations.CreateUserPushSubscriptions do add(:id, :uuid, primary_key: true) add(:user_id, references(:users, on_delete: :nothing), null: false) add(:digest, :text, null: false) - add(:data, :map, null: false) + add(:endpoint, :string, null: false) + add(:auth, :string, null: false) + add(:p256dh, :string, null: false) timestamps() end