Compare commits

...

811 commits

Author SHA1 Message Date
Simon Vieille 8de56f4190 lint 2022-07-30 19:08:50 +02:00
Simon Vieille 464f415164
update dev docker-compose file 2022-07-30 19:08:29 +02:00
Simon Vieille 03aff94d62
update dev commands 2022-07-30 19:07:53 +02:00
Simon Vieille 0713032d29 add makefile init-dev task
add makefile start-dev task
2022-07-30 18:22:16 +02:00
Thomas Citharel c2f7fbc78f Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1253
2022-06-07 21:16:07 +00:00
Jiri Podhorecky 5e6dc16335 Translated using Weblate (Czech)
Currently translated at 100.0% (210 of 210 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2022-06-07 20:17:54 +02:00
Jiri Podhorecky aa107f4a89 Translated using Weblate (Czech)
Currently translated at 100.0% (355 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-06-07 20:17:54 +02:00
Thomas Citharel 0a9ff32443 Merge branch 'main' into 'main'
add owncast to event meta data

See merge request framasoft/mobilizon!1252
2022-06-07 14:09:25 +00:00
allilengyi f8efcc1d63 added owncast monochrome logo 2022-06-07 15:38:23 +02:00
Thomas Citharel 337adf83b2 Merge branch 'issue-1120' into 'main'
Fixing #1120 - search by eventCategory

Closes #1120

See merge request framasoft/mobilizon!1251
2022-06-06 13:17:50 +00:00
Thomas Citharel fa7a10bd13 Merge branch 'issue-1119' into 'main'
Fix "Uncaught TypeError: localStorage is null" when localStorage is not available

Closes #1119

See merge request framasoft/mobilizon!1250
2022-06-06 12:37:27 +00:00
Thomas Citharel 212931b8a0 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1249
2022-06-06 12:14:29 +00:00
allilengyi 86fbcaff40 fixed title of owncast meta data 2022-06-02 23:14:02 +02:00
allilengyi 324cf3e5e2 add owncast to event meta data 2022-06-02 22:14:34 +02:00
paficaf430 4917185b82 Translated using Weblate (Swedish)
Currently translated at 26.1% (55 of 210 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/sv/
2022-06-01 09:35:35 +02:00
paficaf430 d7e2e82ea6 Translated using Weblate (Swedish)
Currently translated at 31.5% (112 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/sv/
2022-06-01 09:35:34 +02:00
paficaf430 958e7d5264 Translated using Weblate (Swedish)
Currently translated at 46.4% (619 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/sv/
2022-06-01 09:35:33 +02:00
Jiri Podhorecky c01a4fdc6f Translated using Weblate (Czech)
Currently translated at 99.7% (354 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-06-01 09:35:32 +02:00
Jiri Podhorecky 018f3f35d6 Translated using Weblate (Czech)
Currently translated at 99.7% (354 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-05-31 23:18:48 +02:00
Lucas Cimon 18d4b73d91
Fixing #1120 - search by eventCategory 2022-05-30 12:30:38 +02:00
Lucas Cimon 494e791a99
Fix "Uncaught TypeError: localStorage is null" when localStorage is not available 2022-05-30 12:20:24 +02:00
Norwin 06bc5fc4c3 Translated using Weblate (German)
Currently translated at 100.0% (1332 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-05-27 22:28:10 +02:00
Thebigal Wisi 2a052fddd6 Translated using Weblate (German)
Currently translated at 100.0% (1332 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-05-27 22:28:10 +02:00
Thomas Frenzel 9f34d1c538 Translated using Weblate (German)
Currently translated at 100.0% (1332 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-05-27 22:28:10 +02:00
Thomas Citharel 4e7284b486 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1247
2022-05-23 13:32:31 +00:00
Jiri Podhorecky 4728a7358c Translated using Weblate (Czech)
Currently translated at 100.0% (1332 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2022-05-23 15:23:35 +02:00
Thomas Citharel 44789189d7 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1246
2022-05-19 16:40:59 +00:00
Kerstin 59147af19b Translated using Weblate (German)
Currently translated at 96.3% (342 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-05-19 14:37:13 +02:00
Kerstin 7a1b886f09 Translated using Weblate (German)
Currently translated at 100.0% (1332 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-05-19 14:37:13 +02:00
Thomas Citharel c6cc85e51e Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1245
2022-05-19 06:43:29 +00:00
josé m 5299e10afe Translated using Weblate (Galician)
Currently translated at 79.4% (1058 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gl/
2022-05-18 23:53:39 +02:00
Thomas Citharel 829628b25f Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1244
2022-05-18 06:49:06 +00:00
DignifiedSilence 9e1c8b475e Translated using Weblate (Japanese)
Currently translated at 5.6% (20 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/ja/
2022-05-18 02:59:41 +02:00
Thomas Frenzel cf182c2aed Translated using Weblate (German)
Currently translated at 98.2% (1309 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-05-18 02:59:41 +02:00
Thomas Citharel 00424d64c9
Fix tags not being escaped in CHANGELOG.md
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-16 13:23:09 +02:00
Thomas Citharel 98229e8165
Release 2.1.0
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-16 12:12:53 +02:00
Thomas Citharel 5c39fd2852
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-16 12:12:23 +02:00
Thomas Citharel 6ea060291c Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1243
2022-05-13 08:53:22 +00:00
DignifiedSilence f82e96a5fe Translated using Weblate (Japanese)
Currently translated at 46.0% (614 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/ja/
2022-05-12 22:19:08 +02:00
Thomas Citharel 79a51e5237
Release 2.1.0-rc.6
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-11 12:23:35 +02:00
Thomas Citharel f86b82f0d5 Merge branch 'cleanup-fetch-person' into 'main'
Remove unused Profile.vue component

See merge request framasoft/mobilizon!1242
2022-05-11 10:23:01 +00:00
Thomas Citharel 63e56b5b24
Remove unused Profile.vue component
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-11 12:05:01 +02:00
setop 57d4abae68
this fragment is never used and put pressure on the DB 2022-05-11 12:04:46 +02:00
Thomas Citharel 2b852c622e Merge branch 'deps' into 'main'
Update deps

See merge request framasoft/mobilizon!1241
2022-05-11 09:58:55 +00:00
Thomas Citharel 4213e1f1ec
Send activity recap emails outside of the transaction
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-11 11:24:20 +02:00
Thomas Citharel c05243f839
Add more logging to send_activity_recap_worker
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-11 09:47:18 +02:00
Thomas Citharel ab622cb424
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-11 09:24:27 +02:00
Thomas Citharel 90980bc2c5 Merge branch 'fix-clicking-on-map' into 'main'
Fix clicking on map crashing

See merge request framasoft/mobilizon!1239
2022-05-10 16:57:28 +00:00
Thomas Citharel ef26f1a684
Fix clicking on map crashing
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-10 15:31:36 +02:00
Thomas Citharel 18ceeb450a Merge branch 'notification-fixes' into 'main'
Notification fixes

Closes #1077

See merge request framasoft/mobilizon!1238
2022-05-10 12:14:35 +00:00
Thomas Citharel 123eee675a
Fix links to group page in group membership emails and participation
card

Closes #1077

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-10 13:41:02 +02:00
Thomas Citharel 46236dbe1d
Fix group notification of new event being sent multiple times
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-10 13:15:12 +02:00
Thomas Citharel 1eb111f52f
Make sure activity notification recaps can't be sent multiple times
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-10 13:15:11 +02:00
Thomas Citharel 3fea2d0395
Allow is_delay_ok_since_last_notification_sent? to have the delay as
param

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-10 13:15:11 +02:00
Thomas Citharel 44b2ca26bd Merge branch 'fixes' into 'main'
Add a CLI command to delete actors

See merge request framasoft/mobilizon!1237
2022-05-09 16:57:27 +00:00
Thomas Citharel 5bc63185fd
Add a CLI command to delete actors
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-09 18:27:51 +02:00
Thomas Citharel 071185204e
Fix a comment
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-09 18:27:29 +02:00
Thomas Citharel 5bc9245dce
Make sure prompt show the correct message and not just "Continue?" in
mix mode

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-09 18:27:05 +02:00
Thomas Citharel 4fc5554142 Merge branch 'henrif/1096-add-desc-to-add-rep' into 'main'
Add description field to address representation

Closes #1096

See merge request framasoft/mobilizon!1234
2022-05-09 07:36:27 +00:00
Thomas Citharel f07d6d63de Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1235
2022-05-09 07:33:40 +00:00
Berto Te f6cd91ad1f Translated using Weblate (Spanish)
Currently translated at 100.0% (210 of 210 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/es/
2022-05-07 19:02:06 +02:00
Henri Febleux 5b4e6ed473 Add description field to address representation
Fixes: #1096
2022-05-07 18:28:32 +02:00
Thomas Citharel 9be4ed84da Merge branch 'fixes' into 'main'
Various fixes

Closes #1068

See merge request framasoft/mobilizon!1233
2022-05-06 18:48:32 +00:00
Thomas Citharel 7a6a013d93
Make sure users can't create profiles or groups with non-valid patterns
Closes #1068

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 20:01:05 +02:00
Thomas Citharel 3b8b150d48
Make sure activity recipient can't be nil
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 17:51:54 +02:00
Thomas Citharel 888d2ef4b8
Expose correct relay address in federation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 17:21:11 +02:00
Thomas Citharel 3982977121
Allow to get Mastodon instance relays
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 16:59:28 +02:00
Thomas Citharel aff1959030
Only prevent following non-Mobilizon instances, but allow being followed
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 16:40:32 +02:00
Thomas Citharel 0b49021f8b
Fix admin notification e-mails from instance follow for Mastodon
instances

Show an appropriate name in the body of the mail

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 16:36:04 +02:00
Thomas Citharel f58d6829da
Bump version to 2.1.0-rc.5
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 14:56:38 +02:00
Thomas Citharel d3bc76afbf
Add changelog for 2.1.0-rc.5
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 14:56:19 +02:00
Thomas Citharel 578bd99be2
Format CHANGELOG.md
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 14:56:19 +02:00
Thomas Citharel c9ebd76cc9 Merge branch 'fixes' into 'main'
CI changes

See merge request framasoft/mobilizon!1232
2022-05-06 12:52:36 +00:00
Thomas Citharel 05724476aa
Remove unused addRelay mutation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 14:23:16 +02:00
Thomas Citharel 6eb2b6d31a
Better display of the errors when adding an instance
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 14:23:16 +02:00
Thomas Citharel cd3d0c5fc4
Add a proper error message when adding an instance that doesn't respond
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 14:23:16 +02:00
Thomas Citharel 6a937d6ede
Remove refresh instance triggers
There are not needed anymore, instances are always refreshed when adding
a new one, and we refresh periodically

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 12:52:39 +02:00
Thomas Citharel 2651f4cf40
Remove OS-specific packages from UPGRADE.md
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 12:42:16 +02:00
Thomas Citharel 8549a16ade
Only build on Debian Buster
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-06 12:41:34 +02:00
Thomas Citharel 3fcb44642a Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1231
2022-05-05 17:28:42 +00:00
Berto Te 41dfc2bc1c Translated using Weblate (Spanish)
Currently translated at 100.0% (355 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-05-05 19:05:53 +02:00
Thomas Citharel a84ec21aba Merge branch 'fix-db-trigger' into 'main'
Only trigger refresh_instances when the actor being changed is a relay

Closes #1103

See merge request framasoft/mobilizon!1230
2022-05-05 10:50:46 +00:00
Thomas Citharel 61e6200b02
Only trigger refresh_instances when the actor being changed is a relay
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-05 12:19:53 +02:00
Thomas Citharel b1205b6912 Merge branch 'revert-d85f708c' into 'main'
Revert "Merge branch 'external-events' into 'main'"

See merge request framasoft/mobilizon!1228
2022-05-04 07:02:44 +00:00
Thomas Citharel 26cf892758 Revert "Merge branch 'external-events' into 'main'"
This reverts merge request !1223
2022-05-04 07:02:16 +00:00
Thomas Citharel d85f708c37 Merge branch 'external-events' into 'main'
Add option to link an external registration provider for events

See merge request framasoft/mobilizon!1223
2022-05-04 07:01:53 +00:00
Thomas Citharel a400499a57 Merge branch 'db-fixes' into 'main'
Add appropriate timeouts for Repo.transactions

See merge request framasoft/mobilizon!1227
2022-05-04 06:58:17 +00:00
Thomas Citharel 87214b038f
Add appropriate timeouts for Repo.transactions
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-04 08:21:15 +02:00
Thomas Citharel 90158f1112 Merge branch 'fixes' into 'main'
Remove unused indirect dependency

See merge request framasoft/mobilizon!1226
2022-05-03 14:23:32 +00:00
Luca Eichler 75502e2a4b
Add option to link an external registration provider for events 2022-05-03 15:33:32 +02:00
Thomas Citharel ec849b1488
Release 2.1.0-rc.4
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 15:15:52 +02:00
Thomas Citharel 1e9a7c2cbb
Upgrade deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 15:12:56 +02:00
Thomas Citharel 63a23748ac
Improve test coverage
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 12:58:07 +02:00
Thomas Citharel 999a33c7c3
Typespec fixes and refactoring
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 12:23:09 +02:00
Thomas Citharel f6a17d8b3a
Improve a guard
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 11:41:17 +02:00
Thomas Citharel a18c4daf4c
Avoid using actor id from config cache
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 11:40:16 +02:00
Thomas Citharel c0d8b2d39a
Remove unused indirect dependency
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-03 11:30:06 +02:00
Thomas Citharel b3e7f23604 Merge branch 'cas-fies' into 'main'
CAS Auth Fixes

See merge request framasoft/mobilizon!1225
2022-05-02 13:15:08 +00:00
Thomas Citharel 20542d3b68
Show provider name instead of ID in auth error message
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 14:40:17 +02:00
Thomas Citharel 1299b3baf1
CAS Auth Fixes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 14:40:17 +02:00
Thomas Citharel d7887ccb83 Merge branch 'fixes' into 'main'
Various fixes

See merge request framasoft/mobilizon!1224
2022-05-02 11:52:57 +00:00
Thomas Citharel 62248b2f81
Add Überauth CAS Strategy
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 13:15:15 +02:00
Thomas Citharel ada22e24ef
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 13:15:14 +02:00
Thomas Citharel bf7ebfd989
Test refreshing instances does not update self relay actor
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 13:15:14 +02:00
Thomas Citharel a4cc566ee7
Fix some typespecs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 12:08:00 +02:00
Thomas Citharel cd61a98f4d
Use Github version of WebPushEncryption
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 12:07:39 +02:00
Thomas Citharel 926dd01272
Send push notification into own task
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 12:07:21 +02:00
Thomas Citharel d87261a6fb
Fix lint after merge
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-05-02 09:04:57 +02:00
Thomas Citharel 93805dca11 Merge branch 'setop-main-patch-92671' into 'main'
include ongoing events in search

Closes #729

See merge request framasoft/mobilizon!1171
2022-05-02 06:48:16 +00:00
setop f071f70d1f include ongoing events in search 2022-05-02 06:48:15 +00:00
Thomas Citharel 6596e2d6bd Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1222
2022-05-01 20:25:46 +00:00
אנטולי מהגבעות האדומות 7e71399065 Translated using Weblate (Hebrew)
Currently translated at 25.4% (339 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/he/
2022-05-01 21:00:48 +02:00
Thomas Citharel d2ebe86c9f Merge branch 'auth-modernize' into 'main'
Various 3rd-party auth providers improvements

Closes #506 et #989

See merge request framasoft/mobilizon!1221
2022-04-28 10:35:23 +00:00
Thomas Citharel c91e8f6bf3
Fix being an administrator when using 3rd-party auth provider
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-28 11:59:24 +02:00
Thomas Citharel f997f573ba
Use a session for state parameter in Ueberauth callback controller
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-28 11:59:24 +02:00
Thomas Citharel 82255b46eb
Use upstream dependencies for Ueberauth providers
Allows to work properly with state_param

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-28 11:41:28 +02:00
Thomas Citharel 9ab0768684 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1220
2022-04-28 07:34:01 +00:00
GunChleoc 303a6f8bd8 Translated using Weblate (Gaelic)
Currently translated at 99.7% (1329 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2022-04-28 04:48:56 +02:00
Thomas Citharel da80fa6235 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1219
2022-04-27 13:20:06 +00:00
GunChleoc 2aedf3027e Translated using Weblate (Gaelic)
Currently translated at 3.3% (12 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/gd/
2022-04-27 14:10:50 +02:00
GunChleoc d308752f25 Translated using Weblate (Gaelic)
Currently translated at 99.7% (1329 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2022-04-27 14:10:50 +02:00
Thomas Citharel ead459d79b Merge branch 'release-2.1.0-rc.3' into 'main'
Release 2.1.0-rc.3

See merge request framasoft/mobilizon!1218
2022-04-24 16:51:07 +00:00
Thomas Citharel 1323c20162
Release 2.1.0-rc.3
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-24 18:33:09 +02:00
Thomas Citharel 33e26466a6
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-24 18:33:09 +02:00
Thomas Citharel 4b8cfffede Merge branch 'fix-following-instances' into 'main'
Add missing "relay@" part of federated address to follow

See merge request framasoft/mobilizon!1217
2022-04-24 16:32:36 +00:00
Thomas Citharel ce6a25048c
Add missing "relay@" part of federated address to follow
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-24 17:52:46 +02:00
Thomas Citharel 030a149a61 Merge branch 'fixes' into 'main'
Improve actor cards integration

See merge request framasoft/mobilizon!1216
2022-04-22 10:38:42 +00:00
Thomas Citharel e4a22bdb83
Fix latest group not refreshing in admin section
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-22 12:04:05 +02:00
Thomas Citharel 3ce8c142b8
Improve actor cards integration
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-22 12:00:47 +02:00
Thomas Citharel 3ff9ee59cc Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1215
2022-04-22 07:35:13 +00:00
Berto Te 76eeceecbd Translated using Weblate (Spanish)
Currently translated at 100.0% (1332 of 1332 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2022-04-22 01:34:12 +02:00
Thomas Citharel e26364f973 Merge branch 'hashtag-fixes' into 'main'
Exclude tags with more than 40 characters from being extracted.

Closes #939 et #562

See merge request framasoft/mobilizon!1214
2022-04-21 16:07:54 +00:00
Thomas Citharel 279badb2bf
Refactor Mobilizon.Federation.ActivityPub.Types.Events tags handling
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 17:31:47 +02:00
Thomas Citharel d05eb96ac6
Remove attribute type="text/css" from <style> tags
Closes #939

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 17:13:21 +02:00
Thomas Citharel 2749491467
Fix invalid HTML (<div> inside <label>)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 17:13:21 +02:00
Thomas Citharel f23f438763
Add test for the hashtag special cases
- Test that same hashtags with different casing are taken only once into
  account
- Test that too long hashtags are not extracted from description

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 17:13:21 +02:00
Thomas Citharel 7b3ce8d812
Avoid duplicate tags with different casing
Closes #562

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 17:13:21 +02:00
Thomas Citharel ca860273a0
Exclude tags with more than 40 characters from being extracted.
They are still in the HTML produced

Closes #562

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 17:13:20 +02:00
Thomas Citharel 95062df343 Merge branch 'enhancements' into 'main'
Various enhancements

Closes #1085

See merge request framasoft/mobilizon!1213
2022-04-21 11:06:56 +00:00
Thomas Citharel adfe7b2af2
Fix text overflow on group card description
Closes #1085

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 11:54:30 +02:00
Thomas Citharel e36f8f53ab
Hide address blocks when address has no real data
Closes #1085

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 11:54:20 +02:00
Thomas Citharel dc75a9beb3
[Front-end] Address model refactoring
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 11:43:41 +02:00
Thomas Citharel 0c49ddc65b
Add "Accept-Language" header to sentry request metadata
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 10:33:42 +02:00
Thomas Citharel 74cece5796
Preload user.activity_settings to as it's being used after
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-21 10:21:05 +02:00
Thomas Citharel 99dacb6038
Release 2.1.0-rc.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 20:17:23 +02:00
Thomas Citharel 04ec8fe2d3 Merge branch 'fixes' into 'main'
Update schema.graphql file

Closes #1088

See merge request framasoft/mobilizon!1212
2022-04-20 17:55:03 +00:00
Thomas Citharel b79f918d51
Correct a @moduledoc
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 19:15:33 +02:00
Thomas Citharel 0bc7864cb3
Hide the whole metadata block if group has no description
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 19:15:06 +02:00
Thomas Citharel 3f32b3409f
Increase task timeout in Refresher to 60 seconds
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 18:47:31 +02:00
Thomas Citharel 74eeaccdc6
Allow webfinger to be fetched over http (not https) in dev mode
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 18:38:03 +02:00
Thomas Citharel 7c8de2b87f
Fix rejecting instance follow
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 18:35:38 +02:00
Thomas Citharel f6ac72f08d
Allow instance to have non-standard ports
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 18:35:18 +02:00
Thomas Citharel 19052ba48b
Improve reactions when approving/rejecting an instance follow
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 18:30:16 +02:00
Thomas Citharel 10b92705e8
Improve instance admin view for mobile
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:12 +02:00
Thomas Citharel 46c0693829
Allow to reject instance following
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:12 +02:00
Thomas Citharel 993f4a7dcb
Update snapshots after front-end changes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:12 +02:00
Thomas Citharel 79872b47df
Make sure we can call displayName with eventually undefined actor
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:11 +02:00
Thomas Citharel c216172d44
Fix pagination of group events
Closes #1088

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:11 +02:00
Thomas Citharel 409439a916
Make sure we can't refresh the local instance
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:11 +02:00
Thomas Citharel 28f5cdd03a
Handle webfinger JSON data being invalid format
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:10 +02:00
Thomas Citharel 0ebb797740
Directly delete an object if the actor is itself
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:10 +02:00
Thomas Citharel 00f4c0b02c
Make sure remote Update activities can't affect local actors other than
Groups

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:10 +02:00
Thomas Citharel 4b869a6015
Make some functions private in Mobilizon.Federation.ActivityPub.Utils
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:09 +02:00
Thomas Citharel df8721670a
Add a comment about why we don't sign object fetches when refetching actor keys
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:09 +02:00
Thomas Citharel 11bde88a02
Add pagination to the instances list
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:09 +02:00
Thomas Citharel 69b88c9238
Upgrade deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:08 +02:00
Thomas Citharel 15418bfb8d
Fix an issue in the french translation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:08 +02:00
Thomas Citharel 852be15a3e
Eventually fetch actors in mentions
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:08 +02:00
Thomas Citharel 14545fd983
Add proper fallback for when a TZ isn't registered
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 16:18:08 +02:00
Thomas Citharel f5791d1413
Debug log mentions in text to be processed
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:15 +02:00
Thomas Citharel eebcd48447
Improve IdentityPicker
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:15 +02:00
Thomas Citharel 48f1d3efc6
Hide side of report modal on low width screens
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:15 +02:00
Thomas Citharel 62f4f2bd24
Improve JoinGroupWithAccount component
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:15 +02:00
Thomas Citharel 5bbb9713d4
Various group and posts improvements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:15 +02:00
Thomas Citharel 74e8dd1eb2
Fix Telegram Logo being replaced with Mastodon logo in ShareGroupModal
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:15 +02:00
Thomas Citharel 54afbd395f
Change URL to Mastodon Share Manager
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:14 +02:00
Thomas Citharel 7275a530a2
Improve ActorInline component
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:14 +02:00
Thomas Citharel 4ee1efd4b9
Avoid assuming we're on Debian-based in release build
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:14 +02:00
Thomas Citharel 48d17c122d
Fix an issue with no default timezone
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:14 +02:00
Thomas Citharel d7aa432cca
Fix receiving Flag activities on federated events
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:03:14 +02:00
Thomas Citharel 24331d75b0
Update schema.graphql file
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-20 09:02:59 +02:00
Thomas Citharel b1a4f1b581 Merge branch 'fixes' into 'main'
Various fixes

See merge request framasoft/mobilizon!1211
2022-04-18 14:23:11 +00:00
Thomas Citharel f389b060c8
Release 2.1.0-rc.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-18 15:01:32 +02:00
Thomas Citharel a731a96b58
Remove HEX_MIRROR uses
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-18 15:01:32 +02:00
Thomas Citharel 0b04980332
Remove Koena Connect button
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-18 15:01:32 +02:00
Thomas Citharel 2eac639200
Fix front-end post creation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-18 14:47:44 +02:00
Thomas Citharel 83f2880dd9
Fix some typespecs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-18 14:47:44 +02:00
Thomas Citharel 714e9216c1
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-18 14:17:04 +02:00
Thomas Citharel cc8a115974
[CI] Fix docker buildpack image name
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-09 22:03:30 +02:00
Thomas Citharel 75f549170d Merge branch '2.1.0-beta.3' into 'main'
Add fedora and alpine release builds

See merge request framasoft/mobilizon!1210
2022-04-09 15:49:03 +00:00
Thomas Citharel 7d5581bf73
Release 2.1.0-beta.3
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-09 17:48:03 +02:00
Thomas Citharel 2917eea50f
Add fedora and alpine release builds
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-09 17:46:48 +02:00
Thomas Citharel 086aa0df8b
Release 2.1.0-beta.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-08 14:08:34 +02:00
Thomas Citharel c49200f82b Merge branch 'test-build-multiple-os' into 'main'
Test multi-os building

Closes #1081

See merge request framasoft/mobilizon!1209
2022-04-08 11:27:35 +00:00
Thomas Citharel e8c4382901
Test multi-os building
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-08 12:37:36 +02:00
Thomas Citharel c5edc1a0c3
Add a section in UPGRADE.md for 2.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-08 09:00:40 +02:00
Thomas Citharel 58c05d57f2 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1208
2022-04-07 21:38:10 +00:00
Berto Te 55071c71cb Translated using Weblate (Spanish)
Currently translated at 100.0% (1323 of 1323 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2022-04-07 22:11:19 +02:00
Thomas Citharel 64efd47cdc Merge branch 'clean-docs' into 'main'
Reorganize docs

See merge request framasoft/mobilizon!1207
2022-04-07 17:27:37 +00:00
Thomas Citharel 7a18d0b2bb
Fix ex_docs warnings
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 18:51:10 +02:00
Thomas Citharel 698f78ee9a
Reorganize docs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 18:51:10 +02:00
Thomas Citharel 5bb1247f37
Put env directly when building docker images
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 14:46:34 +02:00
Thomas Citharel d01bbcad98
Use JSDeliver mirror when building Docker images as well
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 13:59:15 +02:00
Thomas Citharel d11929d231
Release 2.1.0-beta.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 12:19:45 +02:00
Thomas Citharel 837aec4de7
Update CHANGELOG for 2.1.0-beta.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 12:19:02 +02:00
Thomas Citharel f788839665 Merge branch 'setop/mobilizon-fix-search-perf' into 'main'
Add spatial indexes on address table

Closes #1047

See merge request framasoft/mobilizon!1206
2022-04-07 10:01:45 +00:00
Thomas Citharel de8231858a
Use JSDeliver mirror
Until https://github.com/hexpm/hexpm/issues/1130 is solved or understood

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 11:20:52 +02:00
Thomas Citharel 70cb96dc96
Add spatial indexes on address table
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 10:51:31 +02:00
setop febb68e702
add haversine dependency 2022-04-07 10:51:30 +02:00
setop 38579d9dc2
add search box to filter addresses quickly 2022-04-07 10:51:30 +02:00
Thomas Citharel 4f92add78d
Format LiveView templates after adding the LiveView formatter plugin
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 10:33:11 +02:00
Thomas Citharel bde831299d
Add LiveView plugin to formatter
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 10:31:44 +02:00
Thomas Citharel c77b979a97
Upgrade Phoenix LiveView
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-07 10:31:29 +02:00
Thomas Citharel d45c8b194b Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1205
2022-04-06 21:22:19 +00:00
Berto Te c9427a77f2 Translated using Weblate (Spanish)
Currently translated at 100.0% (355 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-04-06 20:31:55 +02:00
Thomas Citharel ca6db74a73 Merge branch 'analytics' into 'main'
Provide analytics on Front-end

Closes #690

See merge request framasoft/mobilizon!1200
2022-04-06 18:31:49 +00:00
Thomas Citharel 257050eabc
Pin ex_cldr version until ex_cldr_dates_times is updated
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:11 +02:00
Thomas Citharel 68c24e2425
Update tests Dockerfile
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:11 +02:00
Thomas Citharel 822a16fc53
Update Postgis image used in tests
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:10 +02:00
Thomas Citharel e2682c570d
Only display locality in event card address section and truncate
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:10 +02:00
Thomas Citharel 8b3278b60f
Fix display of contacts on event view
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:10 +02:00
Thomas Citharel 0abb9a13e5
Various group events improvements
Adds a button to show pasts events of a group if no upcoming events are
displayed
q
Closes #690

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:10 +02:00
Thomas Citharel 927d2296eb
Improve event metadata links display
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:09 +02:00
Thomas Citharel 2ed69f9484
Actor card improvements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:09 +02:00
Thomas Citharel 999f2f8e14
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:09 +02:00
Thomas Citharel e3adc0684f
Make FrontEndAnalytics provide CSP configuration
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 19:56:09 +02:00
Thomas Citharel da2254089c
Make sure suspended actors are not in the AP cache anymore
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 16:54:00 +02:00
Thomas Citharel 501e0d12e4
Properly fallback to MEETING category if category is not in the
allowlist

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 14:42:01 +02:00
Thomas Citharel 2978ae5d1e
Fix some warnings in js unit tests
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 14:25:38 +02:00
Thomas Citharel bcf936d103
Set initial analytics configuration
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 14:25:38 +02:00
Thomas Citharel 3f538ccf95
Avoid NavigationDuplicated error after Login
Only redirect on mounted if already logged-in

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 14:25:38 +02:00
Thomas Citharel 709d26735b
Provide analytics on Front-end
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 12:31:46 +02:00
Thomas Citharel c1a59f5536
Use better default for SMTP mailer
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-06 10:24:14 +02:00
Thomas Citharel 990a442c87 Merge branch 'update-translations' into 'main'
Remove unused variable

See merge request framasoft/mobilizon!1204
2022-04-05 12:13:55 +00:00
Thomas Citharel 46c38fad28
Update translations
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-05 14:13:20 +02:00
Thomas Citharel cb1e41d90d
Remove unused variable
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-05 14:10:21 +02:00
Thomas Citharel e1009f76e9 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1202
2022-04-05 12:08:39 +00:00
Norwin 505e45d87d Translated using Weblate (German)
Currently translated at 99.8% (1309 of 1311 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-04-05 13:21:30 +02:00
Norwin 24cd0a23a5 Translated using Weblate (German)
Currently translated at 96.6% (342 of 354 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-04-05 13:21:30 +02:00
Norwin 4cde0c058e Translated using Weblate (German)
Currently translated at 99.8% (1309 of 1311 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-04-05 13:21:30 +02:00
Thomas Citharel 4b9a38b2a7 Merge branch 'email-spam' into 'main'
Move mailer from Bamboo to Swoosh

Closes #491

See merge request framasoft/mobilizon!1203
2022-04-05 11:21:24 +00:00
Thomas Citharel e49a8e3905
Fix issue in function signature
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-05 12:38:03 +02:00
Thomas Citharel 8ebcba998b
Upgrade erlang version
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-05 12:38:02 +02:00
Thomas Citharel e841fb6fbb
Move mailer from Bamboo to Swoosh
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-05 12:38:02 +02:00
Thomas Citharel 8e16c64989 Merge branch 'redirect-after-login' into 'main'
Fix redirection after login

Closes #1067

See merge request framasoft/mobilizon!1201
2022-04-04 14:30:48 +00:00
Thomas Citharel ee69ce1972 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1198
2022-04-04 14:27:52 +00:00
Norwin e30af9adbe Translated using Weblate (German)
Currently translated at 99.7% (1308 of 1311 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-04-04 16:27:26 +02:00
Jiri Podhorecky cd0d74f832 Translated using Weblate (Czech)
Currently translated at 100.0% (209 of 209 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2022-04-04 16:27:26 +02:00
Jiri Podhorecky a5e9ab3273 Translated using Weblate (Czech)
Currently translated at 100.0% (354 of 354 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-04-04 16:27:26 +02:00
Jiri Podhorecky 29ad4dbddf Translated using Weblate (Czech)
Currently translated at 99.9% (1310 of 1311 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2022-04-04 16:27:26 +02:00
Marco Ciampa 5e8bec0263 Translated using Weblate (Italian)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/it/
2022-04-04 16:27:26 +02:00
Marco Ciampa b769738f08 Translated using Weblate (Italian)
Currently translated at 86.7% (307 of 354 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/it/
2022-04-04 16:27:26 +02:00
Berto Te f38f3acf9b Translated using Weblate (Spanish)
Currently translated at 100.0% (355 of 355 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-04-04 16:27:26 +02:00
Thomas Citharel 0fac23cc4b Merge branch 'fixes' into 'main'
Various fixes

Closes #997

See merge request framasoft/mobilizon!1199
2022-04-04 14:27:16 +00:00
Thomas Citharel 05648fc1f4
Fix redirection after login
Closes #1067

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:57:44 +02:00
Thomas Citharel e5ccdccbc7
Allow to get a group by it's ID
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:17 +02:00
Thomas Citharel 84a5c6f893
Directly load the group in OrganizerPickerWrapper if we have the group ID
Fixes #997

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:17 +02:00
Thomas Citharel a2bb0c0a4d
Debounce contact filter
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:17 +02:00
Thomas Citharel 59c39efb80
Redesign organizer picker with tailwind
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:17 +02:00
Thomas Citharel 4e3eb33d01
Don't offer to confirm already confirmed user
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:16 +02:00
Thomas Citharel 7fcaa4a151
[GraphQL] Allow to get group by ID in person memberships
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:16 +02:00
Thomas Citharel d2864a22d9
Allow to exclude stale actors from group search (one week without refreshment)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-04 15:42:16 +02:00
Thomas Citharel 2e1c284565 Merge branch 'fixes' into 'main'
Make sure every relation of actor is loaded when operating on it

Closes #1049, #1016 et #996

See merge request framasoft/mobilizon!1196
2022-04-01 13:42:33 +00:00
Thomas Citharel 7c770dd59c Merge branch 'allilengyi/mobilizon-issue912' into 'main'
Set default event visibility from group privacy setting

Closes #912

See merge request framasoft/mobilizon!1197
2022-04-01 13:13:23 +00:00
Thomas Citharel 2bdce8b2fc
Handle address is invalid while rendering event preview
Closes #996

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-01 15:01:57 +02:00
allilengyi a407a56051
Set default event visibility from group privacy setting
Closes #912
2022-04-01 14:41:29 +02:00
Thomas Citharel a99d66b68f
Fix group deletion caused by foreign keys issue with comments &
discussions

Closes #1016

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-01 12:09:23 +02:00
Thomas Citharel 7e7eed290f
Handle errors when loading group pictures
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-01 12:08:53 +02:00
Thomas Citharel c0ef41cb71
Fix accessing explore page without config
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-01 10:04:22 +02:00
Thomas Citharel b1ac997f8a
Make sure every relation of actor is loaded when operating on it
Closes #1049

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-04-01 10:03:43 +02:00
Thomas Citharel 9b7cd5831a
Add g++ to the Docker image
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 16:08:53 +02:00
Thomas Citharel 34432f9521 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1194
2022-03-31 10:52:05 +00:00
Berto Te 44bc441f1b Translated using Weblate (Spanish)
Currently translated at 100.0% (354 of 354 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-03-31 12:21:04 +02:00
Berto Te d4ce53646d Translated using Weblate (Spanish)
Currently translated at 100.0% (1311 of 1311 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2022-03-31 12:21:04 +02:00
Thomas Citharel b8d40a90ab Merge branch 'sentry-feedback-fixes' into 'main'
Various issues reported by sentry

See merge request framasoft/mobilizon!1195
2022-03-31 10:20:59 +00:00
Thomas Citharel 1578fd093b
Update sobelow ignores
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:38:33 +02:00
Thomas Citharel 1109ca1bc5
Use a specific version of dind
Follow-up to 7a82fed92a

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:23 +02:00
Thomas Citharel 458ab8ef3f
Add a missing french translation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:23 +02:00
Thomas Citharel 3f4d007f0e
Only focus focusable HTMLElements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:22 +02:00
Thomas Citharel de5a5345b6
Don't return error 500 when issue with media proxy
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:22 +02:00
Thomas Citharel a49bda5e4c
Handle error from converting from AP to note when having error with
actor

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:22 +02:00
Thomas Citharel c56b898379
Fix incoming Accept activities from participations we don't already have
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:22 +02:00
Thomas Citharel 4c9065ce68
Resource fixes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 11:24:22 +02:00
Thomas Citharel 9ab95efb08
Fix an email template and rename a translated string
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 10:49:15 +02:00
Thomas Citharel dd97565dd5
Give extra content to Sentry when creating a signature
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 10:49:15 +02:00
Thomas Citharel 4a8064f24f
Move Sentry request context to new module and load it everytime
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 10:49:15 +02:00
Thomas Citharel 3c8a2a1313
Add details of object in exception when AP object as no
actor/attributedTo

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-31 10:49:15 +02:00
Thomas Citharel bd64e19af4
Move a logging warning for HTTP issue to an info
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-29 11:51:07 +02:00
Thomas Citharel 9ddcd6dff6
Make sure timezone as an UTC fallback in case it's nil
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-29 11:51:07 +02:00
Thomas Citharel 0bc931fef0 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1192
2022-03-29 08:44:16 +00:00
Norwin 5bbf288053 Translated using Weblate (German)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/de/
2022-03-29 10:09:52 +02:00
Thebigal Wisi fc2a2ddef5 Translated using Weblate (German)
Currently translated at 100.0% (324 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-03-29 10:09:52 +02:00
Norwin 2158017994 Translated using Weblate (German)
Currently translated at 100.0% (324 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-03-29 10:09:51 +02:00
fluxx f0627cbc31 Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
Thorsten Panknin 1ff003f917 Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
Thebigal Wisi aefb2e2dee Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
tunda 3d6971b08c Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
Norwin 7ab055af70 Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
Thebigal Wisi f181ee9158 Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
Norwin 436baa148f Translated using Weblate (German)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-03-29 10:09:51 +02:00
Kira Sinn d6ec612393 Translated using Weblate (German)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/de/
2022-03-29 10:09:51 +02:00
Thomas Citharel bccbfb1624 Merge branch 'categories' into 'main'
Categories

Closes #1056

See merge request framasoft/mobilizon!1193
2022-03-29 08:09:44 +00:00
Thomas Citharel 3a3d14fddc
Add CHANGELOG entry for 2.1.0
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-29 09:29:15 +02:00
Thomas Citharel 4983f2d695
Fix tests after category changes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-29 09:29:15 +02:00
Thomas Citharel 368911b58e
Allow to register custom categories
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-28 20:02:43 +02:00
Thomas Citharel f5bdedf789
Introduce event categories
Closes #1056

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-28 17:42:59 +02:00
Thomas Citharel 91ed13d5c2
Fix first-day-of-week prop in event edition
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-28 13:56:37 +02:00
Thomas Citharel 85f8450a85
Debounce tag input autocomplete
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-28 11:22:40 +02:00
Thomas Citharel b47e46cef5
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-28 10:48:40 +02:00
Thomas Citharel 7a82fed92a
Use specific version of Docker dind
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-28 10:43:06 +02:00
Thomas Citharel 771348e6e0 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1191
2022-03-26 18:17:11 +00:00
Berto Te 49bacc4ea1 Translated using Weblate (Spanish)
Currently translated at 100.0% (209 of 209 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/es/
2022-03-26 09:51:47 +01:00
Thomas Citharel 786987c969 Merge branch 'truncate-description-in-group-card' into 'main'
Show only 3 lines of description on group card

Closes #1021

See merge request framasoft/mobilizon!1190
2022-03-24 16:24:42 +00:00
Thomas Citharel e50f3b1967
Follow-up to 969cfc78be
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:43:36 +01:00
Thomas Citharel e528984a3a
Show error messages contextually when creating a group
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:43:36 +01:00
Thomas Citharel befc9aa86e
Update translations after adding translatable string
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:43:36 +01:00
Thomas Citharel cd3c316881
Return a proper error directly when a group name conflicts
And translate the error

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:39:44 +01:00
Thomas Citharel 93425108c5
Allow GraphQL Error handler return custom Mobilizon.GraphQL.Error
directly

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:39:44 +01:00
Thomas Citharel 45ce7d52b0
Attribute errors with field property to the correct property
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:39:44 +01:00
Thomas Citharel 3c294b33a8
Provide group creation changeset errors as well to absinthe
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:39:44 +01:00
Thomas Citharel 1b0f59937d
Show only 3 lines of description on group card
Closes #1021

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 16:39:43 +01:00
Thomas Citharel f33a9bf2ae Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1189
2022-03-24 14:30:06 +00:00
Thomas Citharel 355173fd6f Translated using Weblate (French (France) (fr_FR))
Currently translated at 99.9% (1307 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/fr_FR/
2022-03-24 14:57:05 +01:00
Marco Ciampa 73098498b1 Translated using Weblate (Italian)
Currently translated at 94.1% (305 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/it/
2022-03-24 14:57:05 +01:00
Thomas Citharel 884a69aef9 Merge branch 'expose-memberCount-in-ap' into 'main'
Expose member count in AP data

Closes #1057

See merge request framasoft/mobilizon!1188
2022-03-24 13:57:00 +00:00
Thomas Citharel a71c51a174
Expose member count in AP data
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 14:19:24 +01:00
Thomas Citharel b4eb6e9893 Merge branch 'cler-feed-cache' into 'main'
Clear all ics/feed caches when modifying events/posts/actors

Closes #1059

See merge request framasoft/mobilizon!1187
2022-03-24 12:27:18 +00:00
Thomas Citharel 019d694d2a
Clear all ics/feed caches when modifying events/posts/actors
Closes #1059

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 12:51:23 +01:00
Thomas Citharel 117052fb91 Merge branch 'fixes' into 'main'
Various fixes

Closes #1069

See merge request framasoft/mobilizon!1186
2022-03-24 09:43:16 +00:00
Thomas Citharel 35fb06c345
Pass the date to getTimezoneOffset() so that the DST is accounted for
See https://github.com/marnusw/date-fns-tz#gettimezoneoffset

Closes #1069

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 10:01:04 +01:00
Thomas Citharel 72ed766f26
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 09:45:54 +01:00
Thomas Citharel 63356b5994
Fix wrong prop initialization
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-24 09:43:59 +01:00
Thomas Citharel c30944dede Merge branch 'upgrade-deps' into 'main'
Upgrade dependencies

See merge request framasoft/mobilizon!1184
2022-03-23 15:51:15 +00:00
Thomas Citharel 9daf031928
Remove the oc locale
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 16:10:15 +01:00
Thomas Citharel 91f2b2bd6d
Format GraphQL block in test
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 15:22:56 +01:00
Thomas Citharel e4467ec4ad
Fix timeouts in tests by removing async: true for DB tests
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 15:22:14 +01:00
Thomas Citharel 969cfc78be
Upgrade buildx version in CI
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 14:51:26 +01:00
Thomas Citharel 9d3cd05e33
Fix embed of actor card
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 12:35:27 +01:00
Thomas Citharel e7ce24966b
Fix loading list of languages after ex_cldr update
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 12:35:27 +01:00
Thomas Citharel ed4a55b4b6
Add fallbackRootWithEmptyString when languages have empty strings
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 12:35:26 +01:00
Thomas Citharel f5e6e51817
Fix invalid GraphQL request for event creation/update
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 12:35:26 +01:00
Thomas Citharel a461674f9d
Make GraphQL parameters strict following Absinthe 1.7 validating
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 12:35:26 +01:00
Thomas Citharel 3d50f2d90d
Update pattern matching for Oban.drain_queue following update
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-23 12:35:26 +01:00
Thomas Citharel 4c5cb34b5b Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1185
2022-03-22 11:48:48 +00:00
jim@killock.org.uk f50b2b51b8 Translated using Weblate (Welsh)
Currently translated at 15.7% (206 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cy/
2022-03-22 12:15:00 +01:00
Thomas Citharel 7067173a5a
Refactor to avoid calling Mobilizon.Cldr.known_locale_name with a string
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-21 17:50:38 +01:00
Thomas Citharel 3dd0b60606
Fix duplicate field in schema
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-21 16:55:01 +01:00
Thomas Citharel 4b7498c67e
Migrations after Oban 2.11
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-21 16:55:01 +01:00
Thomas Citharel edbe6ee21a
Upgrade dependencies
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-21 16:55:01 +01:00
Thomas Citharel 27b7138c58 Merge branch 'allow-xml-accept-header' into 'main'
Thunderbird 91+ seems to send Accept: XML when doing any query

Closes #1019

See merge request framasoft/mobilizon!1183
2022-03-21 12:42:35 +00:00
Thomas Citharel f043ec32d1
Thunderbird 91+ seems to send Accept: XML when doing any query
We only accept ICS, so it didn't work.

Closes #1019

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-03-21 12:46:56 +01:00
Thomas Citharel 0fe6d54eb3 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1182
2022-03-21 11:00:56 +00:00
Marco Ciampa 74694a423b Translated using Weblate (Italian)
Currently translated at 80.5% (1053 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/it/
2022-03-21 10:36:45 +01:00
Eivind Ødegård 9804743747 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 100.0% (324 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/nn/
2022-03-17 21:28:16 +01:00
Philip Bernhart 67d791c925 Translated using Weblate (Esperanto)
Currently translated at 2.5% (34 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/eo/
2022-03-10 07:24:03 +01:00
Kenneth Aalberg 0ee35c3505 Translated using Weblate (Norwegian Bokmål)
Currently translated at 4.9% (16 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/nb_NO/
2022-03-07 16:08:07 +01:00
Amanda Graven 53dd1935e0 Translated using Weblate (Danish)
Currently translated at 16.3% (214 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/da/
2022-03-07 16:08:07 +01:00
Kenneth Aalberg f9249ebce2 Added translation using Weblate (Norwegian Bokmål) 2022-03-06 23:54:31 +01:00
Amanda Graven c72c1f4080 Translated using Weblate (Danish)
Currently translated at 16.2% (213 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/da/
2022-03-04 15:02:01 +01:00
Amanda Graven b5804d517f Translated using Weblate (Danish)
Currently translated at 3.1% (41 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/da/
2022-03-04 09:41:27 +01:00
Amanda Graven 83ecdc0142 Added translation using Weblate (Danish) 2022-03-04 08:05:17 +01:00
Thomas Citharel 532949526f Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1181
2022-02-24 14:14:45 +00:00
Thebigal Wisi 3233a7e258 Translated using Weblate (German)
Currently translated at 100.0% (324 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-02-24 13:36:24 +01:00
Thebigal Wisi a32b6dd03e Translated using Weblate (German)
Currently translated at 99.6% (1304 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-02-24 13:36:24 +01:00
Thomas Citharel b81326b7fb Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1179
2022-02-18 09:03:08 +00:00
Mark 215306e08a Translated using Weblate (Dutch)
Currently translated at 74.6% (976 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-02-18 10:02:17 +01:00
Thomas Citharel a165b654f1 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1178
2022-02-17 08:10:56 +00:00
Eivind Ødegård cb06f2cd6c Translated using Weblate (Norwegian Nynorsk)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/nn/
2022-02-17 01:07:15 +01:00
Eivind Ødegård 684e77d54b Translated using Weblate (Norwegian Nynorsk)
Currently translated at 100.0% (1308 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nn/
2022-02-17 01:07:14 +01:00
Thomas Citharel 073f8dfebf Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1177
2022-02-15 14:43:03 +00:00
Thebigal Wisi 67fdefbf3c Translated using Weblate (German)
Currently translated at 100.0% (324 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-02-15 15:42:07 +01:00
Thomas Citharel 283282f834 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1176
2022-02-15 08:15:07 +00:00
Mark f01eba136f Translated using Weblate (Dutch)
Currently translated at 73.7% (964 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-02-15 05:13:24 +01:00
Thomas Citharel 7afa2d129b Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1175
2022-02-14 13:25:20 +00:00
Mark 7dad52f2e2 Translated using Weblate (Dutch)
Currently translated at 68.1% (892 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-02-14 14:24:47 +01:00
Thomas Citharel 4e218746a8 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1174
2022-02-11 08:00:38 +00:00
Jiri Podhorecky 4669430b05 Translated using Weblate (Czech)
Currently translated at 100.0% (324 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-02-11 06:38:04 +01:00
Jiri Podhorecky e09f25a304 Translated using Weblate (Czech)
Currently translated at 99.9% (1307 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2022-02-11 06:38:04 +01:00
אנטולי מהגבעות האדומות 1a5679970b Translated using Weblate (Hebrew)
Currently translated at 23.3% (306 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/he/
2022-02-10 20:20:18 +01:00
Thomas Citharel 6c17906eaf Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1173
2022-02-10 08:45:03 +00:00
אנטולי מהגבעות האדומות 79d804a331 Translated using Weblate (Hebrew)
Currently translated at 19.1% (251 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/he/
2022-02-09 19:28:12 +01:00
אנטולי מהגבעות האדומות 99abdb007c Added translation using Weblate (Hebrew) 2022-02-09 12:07:53 +01:00
Thomas Citharel a0c5ddbc2e Merge branch 'expose-needed-ap-data-for-search' into 'main'
Expose isOnline through AP

Closes #1044

See merge request framasoft/mobilizon!1172
2022-02-08 15:34:48 +00:00
Thomas Citharel 11ac2dcceb
Expose remainingAttendeeCapacity and participantCount through AP
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-02-08 15:41:42 +01:00
Thomas Citharel 87b37a4153
Expose isOnline through AP
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-02-08 15:27:17 +01:00
Thomas Citharel b012be0541 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1169
2022-02-01 08:02:54 +00:00
deadmorose 494c173001 Translated using Weblate (Russian)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/ru/
2022-01-28 13:48:03 +01:00
deadmorose 95be4d0436 Translated using Weblate (Russian)
Currently translated at 100.0% (208 of 208 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/ru/
2022-01-28 13:48:03 +01:00
Jiri Podhorecky 8cca22abc4 Translated using Weblate (Czech)
Currently translated at 100.0% (208 of 208 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2022-01-28 01:12:47 +01:00
Jiri Podhorecky 7d8060ab71 Translated using Weblate (Czech)
Currently translated at 99.6% (323 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-01-28 01:12:47 +01:00
Jiri Podhorecky d8c307eef4 Translated using Weblate (Czech)
Currently translated at 99.9% (1307 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2022-01-28 01:12:46 +01:00
Jiri Podhorecky 3917f616a9 Translated using Weblate (Czech)
Currently translated at 99.3% (322 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2022-01-27 23:05:49 +01:00
Jiri Podhorecky be10044186 Translated using Weblate (Czech)
Currently translated at 98.0% (1282 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2022-01-27 23:05:49 +01:00
Thomas Citharel 99b2e9b9e7 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1168
2022-01-27 21:36:03 +00:00
Mark e796e4dcb7 Translated using Weblate (Dutch)
Currently translated at 63.5% (831 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-01-27 18:34:06 +01:00
Thomas Citharel ba931ec55b Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1167
2022-01-27 11:57:06 +00:00
Mark 541e9b515f Translated using Weblate (Dutch)
Currently translated at 58.4% (765 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-01-27 12:55:55 +01:00
Thomas Citharel fddc818572 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1166
2022-01-27 07:39:55 +00:00
GunChleoc 7a83eac12a Translated using Weblate (Gaelic)
Currently translated at 99.7% (1305 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2022-01-26 23:51:53 +01:00
Thomas Citharel 89f22d785f Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1165
2022-01-25 15:17:50 +00:00
Mark 81fcfd68b4 Translated using Weblate (Dutch)
Currently translated at 56.4% (739 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-01-25 14:39:38 +01:00
Thomas Citharel 3df2102f78 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1164
2022-01-25 09:08:51 +00:00
Novel Martin Harianto 9888c01a9e Translated using Weblate (Indonesian)
Currently translated at 55.9% (732 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/id/
2022-01-25 00:18:56 +01:00
Al Wisi 981f94296e Translated using Weblate (German)
Currently translated at 99.6% (1304 of 1308 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-01-25 00:18:55 +01:00
Thomas Citharel 425420439b Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1163
2022-01-24 15:50:01 +00:00
Weblate 3b606cddb8 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/
2022-01-24 16:13:39 +01:00
Thomas Citharel d1fb2e2f32 Merge branch 'remove-Text-when-instance-is-closed-to-registrations' into 'main'
remove Text when instance is closed to registrations

Closes #918

See merge request framasoft/mobilizon!1161
2022-01-24 15:13:32 +00:00
setop ed2c5aaeca remove Text when instance is closed to registrations 2022-01-24 15:13:31 +00:00
Thomas Citharel 749746b8b5 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1160
2022-01-24 15:07:09 +00:00
Al Wisi b55328ec30 Translated using Weblate (German)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/de/
2022-01-24 13:23:47 +01:00
Al Wisi 4e41fc584a Translated using Weblate (German)
Currently translated at 98.5% (205 of 208 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/de/
2022-01-24 13:23:47 +01:00
Al Wisi feb5e039ae Translated using Weblate (German)
Currently translated at 99.6% (323 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-01-24 13:23:47 +01:00
Al Wisi da85c20112 Translated using Weblate (German)
Currently translated at 99.6% (1305 of 1309 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-01-24 13:23:47 +01:00
Jiri Podhorecky 3ee68bb2ed Translated using Weblate (Czech)
Currently translated at 96.5% (1264 of 1309 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2022-01-24 13:23:47 +01:00
Al Wisi f5fae3cf95 Translated using Weblate (German)
Currently translated at 92.1% (70 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/de/
2022-01-24 13:23:47 +01:00
Al Wisi 7a71306ebc Translated using Weblate (German)
Currently translated at 96.6% (201 of 208 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/de/
2022-01-24 13:23:47 +01:00
Al Wisi 9ed953a3ed Translated using Weblate (German)
Currently translated at 87.3% (283 of 324 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/de/
2022-01-24 13:23:47 +01:00
Al Wisi aa49b221fe Translated using Weblate (German)
Currently translated at 99.5% (1303 of 1309 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-01-24 13:23:47 +01:00
Thomas Citharel 97eb25340c Merge branch 'setop-main-patch-01351' into 'main'
add requirements for export

See merge request framasoft/mobilizon!1162
2022-01-24 12:23:37 +00:00
setop e401050ca6 add requirements for export 2022-01-24 12:01:47 +00:00
Thomas Citharel 83b07fa348 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1159
2022-01-20 12:22:08 +00:00
Berto Te 99ce4942fb Translated using Weblate (Spanish)
Currently translated at 100.0% (326 of 326 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-01-20 12:28:14 +01:00
Thomas Citharel 10ca260fc5 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1158
2022-01-19 08:00:18 +00:00
Berto Te ce672a4aeb Translated using Weblate (Spanish)
Currently translated at 99.0% (323 of 326 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-01-19 06:44:17 +01:00
Thomas Citharel 1be3ab1b55 Merge branch 'ci-show-credo-diff' into 'main'
Show credo diff in CI

See merge request framasoft/mobilizon!1157
2022-01-18 13:32:06 +00:00
Thomas Citharel b70ed5a76e
Show credo diff in CI
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 14:17:48 +01:00
Thomas Citharel 880c4fdf6b Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1156
2022-01-18 12:55:29 +00:00
Berto Te 1968c87a69 Translated using Weblate (Spanish)
Currently translated at 100.0% (208 of 208 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/es/
2022-01-18 13:35:21 +01:00
Berto Te 26e110fd03 Translated using Weblate (Spanish)
Currently translated at 100.0% (320 of 320 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2022-01-18 13:35:21 +01:00
Berto Te 3dcd9d1b2c Translated using Weblate (Spanish)
Currently translated at 100.0% (1309 of 1309 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2022-01-18 13:35:20 +01:00
Thomas Citharel 769d164159 Merge branch 'fix-link-to-instance-on-follow' into 'main'
Fix link on instance follow email

Closes #1008

See merge request framasoft/mobilizon!1155
2022-01-18 12:35:09 +00:00
Thomas Citharel fe05a2563d
Remove duplicate entries in sv gettext translation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 12:53:01 +01:00
Thomas Citharel 2134e7b152
Improve rich media parsers
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 12:52:45 +01:00
Thomas Citharel a66f19cc5d
Fix fetching details from Twitter
Due to 429 error. Details: e6dc2ca5f2

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 12:52:01 +01:00
Thomas Citharel c57d192abe
Fix actor auto-complete
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 12:51:37 +01:00
Thomas Citharel fbe5a8d0c4
Detect and convert html body in the correct charset before parsing it
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 12:47:45 +01:00
Thomas Citharel c8735e5837
Fix parsing links with hashtag characters
Closes #1008

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-18 12:46:33 +01:00
Thomas Citharel bda18a2150
Disable follow of non-instances for now
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 17:50:00 +01:00
Thomas Citharel 2a629759fa
Fix link on instance follow email
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 17:45:12 +01:00
Thomas Citharel bba76c7ab6 Merge branch 'update-deps' into 'main'
Deps update

See merge request framasoft/mobilizon!1154
2022-01-17 16:02:41 +00:00
Thomas Citharel 5b639f10f8
Update front-end deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 17:02:01 +01:00
Thomas Citharel 24ddb6e2bf
Bump ueberauth version because of a CRSF security issue
ueberauth_discord is dropped because it's abandonned

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 16:50:58 +01:00
Thomas Citharel e8e3d9ef1c Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1153
2022-01-17 15:44:25 +00:00
Thomas Citharel b9fba5650d Translated using Weblate (Swedish)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/sv/
2022-01-17 16:44:00 +01:00
Weblate 4f6bc0cd7a Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/
2022-01-17 16:42:17 +01:00
Anonymous 175d3d49e0 Translated using Weblate (Croatian)
Currently translated at 75.2% (950 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2022-01-17 16:42:15 +01:00
Anonymous 648c4d28e4 Translated using Weblate (Welsh)
Currently translated at 16.2% (205 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cy/
2022-01-17 16:42:15 +01:00
Anonymous 9f07e48be4 Translated using Weblate (Indonesian)
Currently translated at 57.0% (720 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/id/
2022-01-17 16:42:15 +01:00
Anonymous 2d5df1d5f1 Translated using Weblate (Persian)
Currently translated at 12.8% (162 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/fa/
2022-01-17 16:42:14 +01:00
Anonymous 9cc0419417 Translated using Weblate (Gaelic)
Currently translated at 99.2% (1253 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2022-01-17 16:42:14 +01:00
Anonymous 0adbfc60cb Translated using Weblate (Chinese (Traditional))
Currently translated at 0.8% (11 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/zh_Hant/
2022-01-17 16:42:14 +01:00
Anonymous 7d404433fc Translated using Weblate (Slovenian)
Currently translated at 77.8% (982 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/sl/
2022-01-17 16:42:14 +01:00
Anonymous b726970448 Translated using Weblate (Bengali)
Currently translated at 2.3% (30 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/bn/
2022-01-17 16:42:14 +01:00
Anonymous 91e17b37e5 Translated using Weblate (Kabyle)
Currently translated at 14.2% (180 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/kab/
2022-01-17 16:42:14 +01:00
Anonymous 82cac08642 Translated using Weblate (Basque)
Currently translated at 2.2% (29 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/eu/
2022-01-17 16:42:14 +01:00
Anonymous 1fa44dea70 Translated using Weblate (Hungarian)
Currently translated at 99.4% (1255 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hu/
2022-01-17 16:42:14 +01:00
Anonymous 3d14b72eee Translated using Weblate (Kannada)
Currently translated at 0.5% (7 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/kn/
2022-01-17 16:42:14 +01:00
Anonymous 8bfca857fc Translated using Weblate (Norwegian Nynorsk)
Currently translated at 95.1% (1201 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nn/
2022-01-17 16:42:14 +01:00
Anonymous 7f60fe2faa Translated using Weblate (Esperanto)
Currently translated at 1.8% (23 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/eo/
2022-01-17 16:42:14 +01:00
Anonymous a5b0f26f46 Translated using Weblate (Galician)
Currently translated at 83.9% (1059 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gl/
2022-01-17 16:42:14 +01:00
Anonymous 6bcccc91b9 Translated using Weblate (Portuguese (Brazil))
Currently translated at 61.8% (781 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/pt_BR/
2022-01-17 16:42:14 +01:00
Anonymous c351587783 Translated using Weblate (Belarusian)
Currently translated at 15.2% (192 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/be/
2022-01-17 16:42:14 +01:00
Anonymous 50a54e0610 Translated using Weblate (Finnish)
Currently translated at 89.3% (1128 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/fi/
2022-01-17 16:42:14 +01:00
Anonymous cd08c0db4f Translated using Weblate (Catalan)
Currently translated at 82.8% (1046 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/ca/
2022-01-17 16:42:14 +01:00
Anonymous e713f28fe6 Translated using Weblate (Arabic)
Currently translated at 22.8% (288 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/ar/
2022-01-17 16:42:14 +01:00
Anonymous 9e928cf9c5 Translated using Weblate (Swedish)
Currently translated at 37.5% (474 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/sv/
2022-01-17 16:42:14 +01:00
Anonymous 86b488a07d Translated using Weblate (Russian)
Currently translated at 95.1% (1201 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/ru/
2022-01-17 16:42:14 +01:00
Anonymous 93bb3b89be Translated using Weblate (Portuguese)
Currently translated at 4.9% (63 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/pt/
2022-01-17 16:42:14 +01:00
Anonymous 41e5daacdf Translated using Weblate (Polish)
Currently translated at 60.3% (762 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/pl/
2022-01-17 16:42:14 +01:00
Anonymous ecc3264ac1 Translated using Weblate (Occitan)
Currently translated at 72.2% (912 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/oc/
2022-01-17 16:42:14 +01:00
Anonymous d78fbcd670 Translated using Weblate (Dutch)
Currently translated at 56.6% (715 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-01-17 16:42:14 +01:00
Anonymous 6cf7512933 Translated using Weblate (Japanese)
Currently translated at 5.8% (74 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/ja/
2022-01-17 16:42:14 +01:00
Anonymous d400347a3e Translated using Weblate (Italian)
Currently translated at 73.0% (922 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/it/
2022-01-17 16:42:14 +01:00
Anonymous a1df30f4a7 Translated using Weblate (German)
Currently translated at 94.8% (1197 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2022-01-17 16:42:14 +01:00
Thomas Citharel e6b95a43d1 Merge branch 'tailwind2' into 'main'
Various admin improvements

Closes #973

See merge request framasoft/mobilizon!1152
2022-01-17 15:42:02 +00:00
Thomas Citharel 6e5061250c
Improve admin views (2)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 15:53:24 +01:00
Thomas Citharel ca6ef9b06b
Improve admin views
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:48 +01:00
Thomas Citharel d428d1ddf7
Add @tailwindcss/line-clamp
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:48 +01:00
Thomas Citharel 260fa83c3f
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:48 +01:00
Thomas Citharel 1daa8c5f5a
Add a breadcrumbs component
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:47 +01:00
Thomas Citharel 40758a83d5
Add .devcontainer files
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:47 +01:00
Thomas Citharel 6c8ecc6dbb
Add .tool-versions file for ASDF
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:47 +01:00
Thomas Citharel 411d7eca6c
Allow custom focus target for a11y
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:47 +01:00
Thomas Citharel 2ac3755120
Fix ical export for undefined datetimes
Closes #973

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:46 +01:00
Thomas Citharel 193fcde123
Allow to filter reports by domain
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:46 +01:00
Thomas Citharel 26b1ea401a
Fix various issues reported by Dializer
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:49:46 +01:00
Thomas Citharel 1319985047
Rename Mobilizon.Actors.is_following/2 to check_follow/2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:41:03 +01:00
Thomas Citharel bc6cec45fa
Improve logging in module and handle more Webfinger errors
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:41:03 +01:00
Thomas Citharel e717312de7
Introduce instances admin page
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:41:03 +01:00
Thomas Citharel 65249b60f2
Add TailwindCSS
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:41:03 +01:00
Thomas Citharel 7f665daaf3
Handle actor refreshment being impossible
If we can't refresh the actor, just return the stale actor

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-01-17 14:41:03 +01:00
Thomas Citharel 722bb67fb9
Revert "Translated using Weblate (French (France) (fr_FR))"
This reverts commit 2e6d80295b.
2022-01-17 13:12:28 +01:00
Thomas Citharel 8581ecc106
Merge branch 'weblate/mobilizon-weblate-mobilizon-frontend' 2022-01-17 13:12:11 +01:00
setop 2e6d80295b Translated using Weblate (French (France) (fr_FR))
Currently translated at 100.0% (1262 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/fr_FR/
2022-01-15 22:22:41 +01:00
Mark f41a27f331 Translated using Weblate (Dutch)
Currently translated at 18.9% (56 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/nl/
2022-01-15 22:22:41 +01:00
Mark d228805c6d Translated using Weblate (Dutch)
Currently translated at 56.6% (715 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-01-15 22:22:41 +01:00
Mark 397ce507d6 Translated using Weblate (Dutch)
Currently translated at 20.7% (262 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/nl/
2022-01-14 18:00:03 +01:00
Kristoffer Grundström 35e12cf056 Translated using Weblate (Swedish)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/sv/
2022-01-14 09:50:43 +01:00
Anders Trobäck 5db3123ef0 Translated using Weblate (Swedish)
Currently translated at 37.5% (474 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/sv/
2022-01-14 09:50:42 +01:00
Kristoffer Grundström ef9ebeb80c Translated using Weblate (Swedish)
Currently translated at 37.5% (474 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/sv/
2022-01-14 09:50:42 +01:00
Kristoffer Grundström 48dcbe6c3a Translated using Weblate (Swedish)
Currently translated at 47.3% (36 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/sv/
2022-01-13 10:06:26 +01:00
Kristoffer Grundström f051419c2f Translated using Weblate (Swedish)
Currently translated at 29.8% (377 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/sv/
2022-01-13 10:06:25 +01:00
Quentin PAGÈS eeb40b15b0 Translated using Weblate (Occitan)
Currently translated at 72.2% (912 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/oc/
2022-01-09 20:49:59 +01:00
Quentin PAGÈS c58b1f5219 Translated using Weblate (Occitan)
Currently translated at 72.1% (910 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/oc/
2022-01-08 23:42:12 +01:00
Quentin PAGÈS 968d2ce051 Translated using Weblate (Occitan)
Currently translated at 71.4% (902 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/oc/
2022-01-08 18:22:10 +01:00
Jiri Podhorecky b564817962 Translated using Weblate (Czech)
Currently translated at 100.0% (1262 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-30 00:58:01 +01:00
Thomas Citharel 5d75452c8e Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1150
2021-12-29 10:09:48 +00:00
Jiri Podhorecky 1e2273e4f0 Translated using Weblate (Czech)
Currently translated at 100.0% (1262 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-29 10:45:53 +01:00
Thomas Citharel e9ece4893b
Bump version to 2.0.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-22 14:34:41 +01:00
Thomas Citharel 4dd7f73456
Add CHANGELOG entry for 2.0.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-22 14:34:27 +01:00
Thomas Citharel 7d1e8cbfa2 Merge branch 'fix-instance-language' into 'main'
Update deps

Closes #976

See merge request framasoft/mobilizon!1149
2021-12-22 09:22:05 +00:00
Thomas Citharel e9601fac72
Remove gancio fixture picture as the server is down
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-22 09:51:14 +01:00
Thomas Citharel 15d186cc25
Fix admin editing instance language
Closes #976

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-21 19:47:54 +01:00
Thomas Citharel 19bf587dc9
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-21 19:47:38 +01:00
Thomas Citharel 943643c7f1
Restore langs.json
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-19 15:29:28 +01:00
Thomas Citharel e2bab6268c Translated using Weblate (French)
Currently translated at 100.0% (296 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/fr/
2021-12-17 22:15:29 +01:00
Weblate dee8c90bb3 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/
2021-12-17 10:43:37 +01:00
Thomas Citharel 9e2060c1bc Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1147
2021-12-17 09:43:25 +00:00
Weblate 23071f2cc5 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/
2021-12-17 10:08:23 +01:00
Thomas Citharel 4beab2b1fd Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1146
2021-12-17 09:08:09 +00:00
Weblate 72b4f8e869 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/
2021-12-17 09:22:11 +01:00
Thomas Citharel 2d69e85340 Merge branch 'update-upload-package-image' into 'main'
Update upload package image

See merge request framasoft/mobilizon!1145
2021-12-16 15:50:04 +00:00
Thomas Citharel 79901e85ee
Update upload package image
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-16 16:49:37 +01:00
Thomas Citharel 815eec071e Merge branch 'bugs' into 'main'
Various backend improvements

See merge request framasoft/mobilizon!1144
2021-12-15 14:26:44 +00:00
Thomas Citharel bd6f8206a7
Use Elixir 1.13 in Docker builds
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-15 14:55:47 +01:00
Thomas Citharel 79b58012cb
Refresh CI image
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-15 14:54:48 +01:00
Thomas Citharel ba097c736e
Improve handling of media file deletion
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-15 12:59:56 +01:00
Thomas Citharel c174e18b39
Improve compilation dependency in endpoint and context
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-15 12:59:56 +01:00
Thomas Citharel b484629010
Fix test to know whether we should perform unused accounts cleanup
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-15 12:59:55 +01:00
Thomas Citharel 3ad5f8977e
Simplify response for user not found
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-15 12:59:55 +01:00
Thomas Citharel dddcd4f2be Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1143
2021-12-14 13:00:26 +00:00
fr33domlover 462e76c93d Translated using Weblate (Hebrew)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/he/
2021-12-14 13:35:51 +01:00
Thomas Citharel 49b0a0778e Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1142
2021-12-14 08:37:27 +00:00
fr33domlover cd25002bdf Added translation using Weblate (Hebrew) 2021-12-14 09:13:40 +01:00
Berto Te 68bc0c44ce Translated using Weblate (Spanish)
Currently translated at 100.0% (1262 of 1262 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2021-12-14 09:05:59 +01:00
Thomas Citharel 308f3a6d60 Merge branch 'bugs' into 'main'
Various fixes

Closes #941, #969, #981, #966 et #965

See merge request framasoft/mobilizon!1141
2021-12-13 17:32:09 +00:00
Thomas Citharel 9e3b6ec419
Reduce package expiration to two days
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:59:54 +01:00
Thomas Citharel 44cd4129bb
Update translations
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:45:29 +01:00
Thomas Citharel 9e8e2a97d1
Fix group members pagination on admin group profile view
Closes #965

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:39:02 +01:00
Thomas Citharel a481413153
Handle groups/profiles/users not found in admin
Closes #966

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:33:38 +01:00
Thomas Citharel eb9b9d8f69
Fix first day of week not depending on locale
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:33:37 +01:00
Thomas Citharel 7771b27b55
Allow to filter user memberships and group memberships (contacts=) on
backend side

Closes #981 #969

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:33:36 +01:00
Thomas Citharel daca9d71e7
Upgrade deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 17:33:36 +01:00
Thomas Citharel 305f53cb03
Fix text overflow when a link is too long in event mobile view
Closes #941

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-12-13 10:43:32 +01:00
Thomas Citharel e624671da1 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1140
2021-12-10 12:23:54 +00:00
Jiri Podhorecky 8a36999121 Translated using Weblate (Czech)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/cs/
2021-12-10 02:26:28 +01:00
Jiri Podhorecky eb9268be49 Translated using Weblate (Czech)
Currently translated at 100.0% (204 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2021-12-10 02:26:28 +01:00
Jiri Podhorecky 2a2124a251 Translated using Weblate (Czech)
Currently translated at 100.0% (1255 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-10 02:26:28 +01:00
Jiri Podhorecky c9f0907d59 Translated using Weblate (Czech)
Currently translated at 97.6% (1226 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-10 01:26:10 +01:00
Jiri Podhorecky 9984daee1f Translated using Weblate (Czech)
Currently translated at 95.3% (1197 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-10 00:35:51 +01:00
Jiri Podhorecky 50176ba5c3 Translated using Weblate (Czech)
Currently translated at 95.2% (1195 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-10 00:02:37 +01:00
Jiri Podhorecky f27cf520d3 Translated using Weblate (Czech)
Currently translated at 93.7% (1176 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 23:38:57 +01:00
Jiri Podhorecky 3a35ce8668 Translated using Weblate (Czech)
Currently translated at 90.0% (1130 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 22:45:00 +01:00
Thomas Frenzel bfac39f954 Translated using Weblate (German)
Currently translated at 95.3% (1197 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-12-09 21:27:19 +01:00
Jiri Podhorecky f7e07e366f Translated using Weblate (Czech)
Currently translated at 87.4% (1097 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 21:27:18 +01:00
Jiri Podhorecky c1571e11e6 Translated using Weblate (Czech)
Currently translated at 100.0% (296 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-09 20:12:09 +01:00
Thomas Frenzel 1c619a309e Translated using Weblate (German)
Currently translated at 94.9% (1191 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-12-09 20:12:09 +01:00
Jiri Podhorecky 626974595b Translated using Weblate (Czech)
Currently translated at 84.3% (1058 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 20:12:08 +01:00
Jiri Podhorecky dae0bd54a0 Translated using Weblate (Czech)
Currently translated at 90.2% (267 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-09 19:44:10 +01:00
Thomas Frenzel e27390f289 Translated using Weblate (German)
Currently translated at 94.8% (1190 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-12-09 19:44:10 +01:00
Jiri Podhorecky 00ed9c2f3e Translated using Weblate (Czech)
Currently translated at 85.4% (253 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-09 19:17:43 +01:00
Jiri Podhorecky de7375a970 Translated using Weblate (Czech)
Currently translated at 85.1% (252 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-09 18:58:13 +01:00
Thomas Citharel d7bad319ab Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1139
2021-12-09 16:20:29 +00:00
Jiri Podhorecky 5398d61561 Translated using Weblate (Czech)
Currently translated at 83.5% (1048 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 16:58:16 +01:00
Jiri Podhorecky d315c75926 Translated using Weblate (Czech)
Currently translated at 80.4% (238 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-09 02:11:32 +01:00
Jiri Podhorecky fa0885b8dd Translated using Weblate (Czech)
Currently translated at 79.1% (993 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 02:11:31 +01:00
Jiri Podhorecky d8fdd3aaf9 Translated using Weblate (Czech)
Currently translated at 77.2% (969 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-09 00:45:22 +01:00
Jiri Podhorecky aeecc4b140 Translated using Weblate (Czech)
Currently translated at 53.3% (669 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-08 18:40:05 +01:00
Luka Filipović eb540dfaa3 Translated using Weblate (Croatian)
Currently translated at 75.6% (950 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-12-08 18:10:01 +01:00
Jiri Podhorecky 4fd1ebefa6 Translated using Weblate (Czech)
Currently translated at 52.9% (665 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-08 18:09:59 +01:00
Thomas Citharel 1d912568ac Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1138
2021-12-08 12:46:20 +00:00
Jiri Podhorecky 266055ff48 Translated using Weblate (Czech)
Currently translated at 26.6% (334 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-08 12:18:56 +01:00
Thomas Citharel d32cc1e0d9 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1137
2021-12-08 07:55:52 +00:00
Luka Filipović 2067422f3c Translated using Weblate (Croatian)
Currently translated at 71.7% (900 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-12-08 05:59:52 +01:00
Jiri Podhorecky 2abab8d25f Translated using Weblate (Czech)
Currently translated at 97.3% (74 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/cs/
2021-12-08 05:59:47 +01:00
Jiri Podhorecky b7d4885ce6 Translated using Weblate (Czech)
Currently translated at 97.0% (198 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2021-12-08 05:59:46 +01:00
Jiri Podhorecky e47c6da569 Translated using Weblate (Czech)
Currently translated at 66.5% (197 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-08 05:59:46 +01:00
Thomas Citharel 9c657ac571 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1136
2021-12-07 14:49:56 +00:00
Jiri Podhorecky f0fbf20f5b Translated using Weblate (Czech)
Currently translated at 19.7% (15 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/cs/
2021-12-07 15:27:11 +01:00
Marco Ciampa a41919774c Translated using Weblate (Esperanto)
Currently translated at 1.8% (23 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/eo/
2021-12-07 15:27:10 +01:00
Jiri Podhorecky 611750f44c Translated using Weblate (Czech)
Currently translated at 16.1% (33 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2021-12-07 15:27:10 +01:00
deadmorose 8c1c79ad6c Translated using Weblate (Russian)
Currently translated at 100.0% (296 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/ru/
2021-12-07 15:27:09 +01:00
Jiri Podhorecky 27edb05d5e Translated using Weblate (Czech)
Currently translated at 25.3% (75 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-07 15:27:09 +01:00
Thomas Frenzel 25bd0a1ad5 Translated using Weblate (German)
Currently translated at 94.4% (1185 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-12-07 15:27:09 +01:00
Thomas Citharel cfb2226e6c Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1135
2021-12-06 08:33:28 +00:00
Luka Filipović 331269778b Translated using Weblate (Croatian)
Currently translated at 61.8% (776 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-12-06 03:36:51 +01:00
Jiri Podhorecky a977d7f6d6 Translated using Weblate (Czech)
Currently translated at 10.5% (8 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/cs/
2021-12-05 05:32:01 +01:00
Jiri Podhorecky af6e71d8e6 Translated using Weblate (Czech)
Currently translated at 16.8% (50 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/cs/
2021-12-05 05:32:01 +01:00
Thomas Frenzel 2b0d5d0ef5 Translated using Weblate (German)
Currently translated at 93.7% (1176 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-12-05 05:20:18 +01:00
Jiri Podhorecky 422d380a6d Translated using Weblate (Czech)
Currently translated at 2.6% (2 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/cs/
2021-12-04 02:43:28 +01:00
Jiri Podhorecky a4ffddd30b Translated using Weblate (Czech)
Currently translated at 7.8% (16 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/cs/
2021-12-04 02:43:28 +01:00
Jiri Podhorecky 55f6a57c81 Translated using Weblate (Czech)
Currently translated at 24.3% (306 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-12-04 02:43:27 +01:00
Thomas Citharel 935a4bb34f Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1134
2021-12-03 08:30:43 +00:00
Luka Filipović d86830bb1c Translated using Weblate (Croatian)
Currently translated at 52.5% (659 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-12-03 02:07:22 +01:00
Thomas Citharel 821fd3cdf0 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1133
2021-12-01 17:36:45 +00:00
Luka Filipović 80e3e354d8 Translated using Weblate (Croatian)
Currently translated at 43.9% (552 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-12-01 17:58:47 +01:00
Quentin PAGÈS aed259e901 Translated using Weblate (Occitan)
Currently translated at 71.1% (893 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/oc/
2021-12-01 17:58:37 +01:00
Thorsten Panknin 5e97361045 Translated using Weblate (German)
Currently translated at 92.9% (1166 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-12-01 17:58:37 +01:00
Thomas Citharel 41e99aa82f Merge branch 'bugs' into 'main'
Fix position of tentative tag on EventCard

See merge request framasoft/mobilizon!1132
2021-11-30 11:14:47 +00:00
Thomas Citharel 67ee95f81e
Fix position of tentative tag on EventCard
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-30 11:30:38 +01:00
Thomas Citharel 52343ea5cf Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1131
2021-11-30 07:09:33 +00:00
Luka Filipović 798ee0b6c9 Translated using Weblate (Croatian)
Currently translated at 25.9% (326 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-11-30 05:39:20 +01:00
Mostafa Ahangarha 24ab288e45 Translated using Weblate (Persian)
Currently translated at 12.9% (162 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/fa/
2021-11-30 05:39:08 +01:00
Quentin PAGÈS 11c9831159 Translated using Weblate (Occitan)
Currently translated at 70.5% (885 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/oc/
2021-11-30 05:39:06 +01:00
Luca E e597c21aea Translated using Weblate (German)
Currently translated at 92.8% (1165 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-11-30 05:39:03 +01:00
Thorsten Panknin 6662ef35de Translated using Weblate (German)
Currently translated at 92.8% (1165 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-11-30 05:39:03 +01:00
Thomas Citharel 1e1a145847 Merge branch 'bugs' into 'main'
Various bugs

Closes #962, #964, #960 et #963

See merge request framasoft/mobilizon!1130
2021-11-29 10:34:46 +00:00
Thomas Citharel 4f0ba30076
Update CHANGELOG.md
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 11:07:44 +01:00
Thomas Citharel 822a5604e0
Fix docker build scheduled job
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 11:07:44 +01:00
Thomas Citharel 1bfff235f3
Don't sign fetches to instance actor when refreshing their keys
Closes #963

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 11:07:44 +01:00
Thomas Citharel 07d679c4ab
Fix reject of already following instances
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 10:39:22 +01:00
Thomas Citharel f437eb842c
Download tz_world data for Docker image directly
Closes #960

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 10:39:21 +01:00
Thomas Citharel 3fb0265d2d
Refresh loggeduser information before the final step of onboarding
Otherwise we endup in a loop

Closes #964

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 10:39:20 +01:00
Thomas Citharel 21325a014d
Handle tzinfo being absent
Closes #962

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-29 10:39:19 +01:00
Thomas Citharel 402e3d97ea Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1129
2021-11-29 08:29:34 +00:00
David Clubb 2a02ae0a03 Translated using Weblate (Welsh)
Currently translated at 16.3% (205 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cy/
2021-11-27 19:25:20 +01:00
Luka Filipović 99e4f612b2 Translated using Weblate (Croatian)
Currently translated at 2.0% (26 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hr/
2021-11-27 06:31:01 +01:00
Luka Filipović 861a7afc95 Translated using Weblate (Croatian)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/hr/
2021-11-27 06:30:59 +01:00
Thomas Citharel 79252c4a5d Merge branch '2.0.1' into 'main'
2.0.1

Closes #959

See merge request framasoft/mobilizon!1128
2021-11-26 14:15:25 +00:00
Thomas Citharel e1216befa9
Bump version to 2.0.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 14:47:58 +01:00
Thomas Citharel 77207342a2
Update CHANGELOG.md for 2.0.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 14:47:58 +01:00
Thomas Citharel 3da846cdf9
Always show the cancelled status of an event
Closes #959

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 14:47:10 +01:00
Thomas Citharel 51afec1856
Fix new credo warnings
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 14:47:10 +01:00
Thomas Citharel 52e624bb88
Update deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 12:52:44 +01:00
Thomas Citharel f39d760cef
Update list of languages
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 12:43:43 +01:00
Thomas Citharel 0beea8e6c6 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1126
2021-11-26 10:18:51 +00:00
David Clubb 1f58915eb6 Translated using Weblate (Welsh)
Currently translated at 11.1% (140 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cy/
2021-11-26 10:13:12 +01:00
Jiri Podhorecky 22724f2446 Translated using Weblate (Czech)
Currently translated at 16.3% (205 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/cs/
2021-11-26 10:13:12 +01:00
Luc Didry c9c1aa1452 Added translation using Weblate (Croatian) 2021-11-26 10:13:12 +01:00
Luc Didry a44bb963d2 Added translation using Weblate (Croatian) 2021-11-26 10:13:12 +01:00
Luc Didry dd925fd0f3 Added translation using Weblate (Croatian) 2021-11-26 10:13:12 +01:00
Luc Didry adc508e734 Added translation using Weblate (Croatian) 2021-11-26 10:13:12 +01:00
David Clubb 36ebb1b59d Added translation using Weblate (Welsh) 2021-11-26 10:13:12 +01:00
Thomas Citharel 50e9f463ed Merge branch 'bugs' into 'main'
Various bugs

Closes #956, #949, #954, #947 et #948

See merge request framasoft/mobilizon!1127
2021-11-26 09:12:57 +00:00
Thomas Citharel 566d84b957
Always focus the search field after results have been fetched
Close #948

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 09:45:55 +01:00
Thomas Citharel 22550a60e9
Put latest docker tag directly from CI
Also only do amd64 architecture for tags, not main

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 09:45:55 +01:00
Thomas Citharel 541d2f49c8
Add tzworld to the Docker image
Closes #947

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 09:45:55 +01:00
Thomas Citharel e81db2e643
Remove litepub context
Closes #954

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 09:45:54 +01:00
Thomas Citharel 3aa67dcc0b
Improve phrasing of UPGRADE.md for timezones location path
Closes #949

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 09:45:54 +01:00
Thomas Citharel 7b6ad312c0
Fix prettier config
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-26 09:45:54 +01:00
Thomas Citharel bfe833af7f
Remove cypress
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-25 16:46:21 +01:00
Thomas Citharel 477e8a5778
Upgrade deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-25 16:45:20 +01:00
Thomas Citharel be7905cebf
Update tiptap styles
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-25 16:32:10 +01:00
Thomas Citharel df364371a1
Replace @tiptap/starter-kit with indidual extensions
So that @tiptap/extension-code-block is removed

Closes #956

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-25 16:31:09 +01:00
Thomas Citharel 31d297172c Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1125
2021-11-25 07:17:52 +00:00
TA f5a777004c Translated using Weblate (Indonesian)
Currently translated at 57.3% (720 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/id/
2021-11-25 02:22:19 +01:00
Balázs Úr 6316fdb4a7 Translated using Weblate (Hungarian)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/hu/
2021-11-25 02:22:18 +01:00
GunChleoc 694e6dbe6b Translated using Weblate (Gaelic)
Currently translated at 99.8% (1253 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2021-11-25 02:22:18 +01:00
Balázs Úr 260bae4a93 Translated using Weblate (Hungarian)
Currently translated at 45.6% (135 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/hu/
2021-11-25 02:22:17 +01:00
Balázs Úr d748e246cd Translated using Weblate (Hungarian)
Currently translated at 100.0% (204 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/hu/
2021-11-25 02:22:17 +01:00
Balázs Úr 4bebc8a7a2 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1255 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/hu/
2021-11-25 02:22:17 +01:00
Thomas Citharel eacdcee812 Merge branch 'activity-no-actor' into 'main'
Raise exception when object contains no actor

See merge request framasoft/mobilizon!1124
2021-11-24 17:19:45 +00:00
Thomas Citharel 4a2fe900cd
Refactor and test Mobilizon.Federation.ActivityPub.Utils.get_actor/1
Raise exception when object contains no actor. Friendica seems to send an Update activity with no actor

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-24 17:31:47 +01:00
Thomas Citharel bebc112148 Merge branch 'participant-pagination' into 'main'
Fix event participants pagination

See merge request framasoft/mobilizon!1123
2021-11-24 15:43:02 +00:00
Thomas Citharel baa8582df7
Fix event participants pagination
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-24 16:05:52 +01:00
Thomas Citharel ef954569f4 Merge branch 'order-upcoming-my-group-events' into 'main'
Order my group upcoming events by begins_on

See merge request framasoft/mobilizon!1122
2021-11-24 08:59:47 +00:00
Thomas Citharel 9aaea50f59
Order my group upcoming events by begins_on
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-24 09:28:59 +01:00
Thomas Citharel 147ea64483
Fix event language not allowed to be null
If the event language wasn't previously defined, it's not "und"

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-23 09:36:19 +01:00
Thomas Citharel 2b399ac1df
Bump version to 2.0.0
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-23 09:19:18 +01:00
Thomas Citharel c89ce87541
Add CHANGELOG entry for 2.0.0
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-23 09:19:18 +01:00
Thomas Citharel 921f4b577d Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1121
2021-11-23 07:55:55 +00:00
Jiri Podhorecky b3353dd4dc Translated using Weblate (Czech)
Currently translated at 1.3% (1 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/cs/
2021-11-23 08:54:39 +01:00
lu pa d66787aa66 Translated using Weblate (Spanish)
Currently translated at 100.0% (1255 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2021-11-23 08:54:39 +01:00
Thomas Citharel 2d6fa93906 Merge branch 'bugs' into 'main'
Mobilizon 2.0.0-rc.3

Closes #936

See merge request framasoft/mobilizon!1120
2021-11-22 19:28:08 +00:00
Thomas Citharel 20eea58ac9
Bump version to 2.0.0-rc.3
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 20:01:41 +01:00
Thomas Citharel 0ec4218636
Update CHANGELOG.md for 2.0.0-rc.3
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 20:01:41 +01:00
Thomas Citharel d4dfba48d8
Fix error page when ends_on date is null
Closes #936

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 20:00:57 +01:00
Thomas Citharel a54b879c2d
Enable exports on Docker
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 19:38:53 +01:00
Thomas Citharel 233cf1026a
Improve the UPGRADE.md file
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 19:38:36 +01:00
Thomas Citharel 377b83e02d
Fix export being outputted in the wrong directory in release mode
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 18:43:59 +01:00
Thomas Citharel ed7e6e4d4b
Fix extra padding on event truncated title
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 18:31:13 +01:00
Thomas Citharel ab724b0893
Bump version to 2.0.0-rc.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 11:09:20 +01:00
Thomas Citharel 4f769926d7
Add CHANGELOG.md entry for 2.0.0-rc.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 11:08:52 +01:00
Thomas Citharel c6812dd672 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1119
2021-11-22 09:38:41 +00:00
Balázs Úr 0af36e19f8 Translated using Weblate (Hungarian)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/hu/
2021-11-22 10:37:36 +01:00
Balázs Úr 2dbc92b0cd Translated using Weblate (Hungarian)
Currently translated at 100.0% (204 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/hu/
2021-11-22 10:37:36 +01:00
Thomas Frenzel 82af0f10b0 Translated using Weblate (German)
Currently translated at 83.5% (1048 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/de/
2021-11-22 10:37:36 +01:00
Thomas Citharel f5a75c0af3 Merge branch 'bugs' into 'main'
Fix various issues in 2.0.0-rc.1

Closes #929, #930, #931 et #932

See merge request framasoft/mobilizon!1118
2021-11-22 09:37:20 +00:00
Thomas Citharel 506a6dd4c7
Avoid giving an error page if the apollo futureParticipations query is
undefined

Closes #932

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 10:08:12 +01:00
Thomas Citharel 83783ad34b
Remove type validation in AddressAutoComplete mixin
Because it can be null

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 10:04:12 +01:00
Thomas Citharel 49ad1637f9
Set initial values for some EventMetadata elements
Otherwise it fails backend validation

Closes #931

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 10:04:00 +01:00
Thomas Citharel 6167d8c416
Improve MyEvents page description text
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 09:40:34 +01:00
Thomas Citharel c4d9101302
Make second parameter to Mobilizon.FollowedGroupActivity.user_followed_group_events/4 default to nil
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 09:40:34 +01:00
Thomas Citharel 3fd79f89a8
Fix accessing user profile in admin section
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 09:40:33 +01:00
Thomas Citharel 1d1574b426
Increate number of close events and follow group events
Closes #930

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 09:40:22 +01:00
Thomas Citharel 83e8136b0e
Fix spacing in organizer picker
Closes #929

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-22 08:36:48 +01:00
Thomas Citharel 0307cbb201 Merge branch '2.0.0-rc.1' into 'main'
Release 2.0.0-rc.1

See merge request framasoft/mobilizon!1116
2021-11-21 11:48:24 +00:00
Thomas Citharel 785bc539d6
Release 2.0.0-rc.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-21 12:20:20 +01:00
Thomas Citharel 1ee0dd5ca8
Changelog for 2.0.0-rc.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-21 12:20:19 +01:00
Thomas Citharel e64f89142e Merge branch 'email-fixes' into 'main'
Emails small UI fixes

Closes #917

See merge request framasoft/mobilizon!1117
2021-11-21 10:50:55 +00:00
Thomas Citharel 0348826994
Emails small UI fixes
Closes #917

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-21 11:16:13 +01:00
Thomas Citharel 93acdeda20 Merge branch 'bugs' into 'main'
Orphan media fixes

See merge request framasoft/mobilizon!1115
2021-11-20 18:36:55 +00:00
Thomas Citharel 07a11d792c
Fix updating a group's avatar and banner picture
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-20 19:04:54 +01:00
Thomas Citharel e8da59f4a5
Cleanup clean_orphan_test.exs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-20 18:36:26 +01:00
Thomas Citharel 2154457be3
Take profile files into account when deleting orphan media
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-20 18:30:51 +01:00
Thomas Citharel 2b99b48258
Set database timeout to infinity when trying to detect orphan media
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-20 18:30:18 +01:00
Thomas Citharel 07d7f908c9 Merge branch 'bugs' into 'main'
Federation fixes

See merge request framasoft/mobilizon!1114
2021-11-20 17:22:29 +00:00
Thomas Citharel 08f35169d1
Fix sending group events to followers on Mastodon
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-19 19:25:49 +01:00
Thomas Citharel d7fd30f8e6
Federation fixes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-19 19:25:49 +01:00
Thomas Citharel fbf2d480a3 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1113
2021-11-19 09:48:17 +00:00
GunChleoc 2b99267f2d Translated using Weblate (Gaelic)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/gd/
2021-11-19 10:22:07 +01:00
Berto Te eaae72d678 Translated using Weblate (Spanish)
Currently translated at 100.0% (76 of 76 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/es/
2021-11-19 10:22:06 +01:00
GunChleoc 60484ef426 Translated using Weblate (Gaelic)
Currently translated at 99.8% (1253 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2021-11-19 10:22:06 +01:00
Berto Te 6f637afdbd Translated using Weblate (Spanish)
Currently translated at 100.0% (204 of 204 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/es/
2021-11-19 10:22:05 +01:00
Thomas Citharel 76cefca4d4
Forgot activity notification change
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-17 17:17:42 +01:00
Thomas Citharel ebcf2bc387
Merge remote-tracking branch 'weblate/main' 2021-11-17 17:13:42 +01:00
Berto Te 535feb29bf Translated using Weblate (Spanish)
Currently translated at 100.0% (296 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2021-11-17 16:53:56 +01:00
Berto Te 07a6f1c584 Translated using Weblate (Spanish)
Currently translated at 100.0% (1255 of 1255 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2021-11-17 16:53:56 +01:00
Thomas Citharel 14fe16dc06 Merge branch 'bugs' into 'main'
Fix some HTTP signatures issues

Closes #799

See merge request framasoft/mobilizon!1112
2021-11-17 15:53:42 +00:00
Thomas Citharel ba7f03610c
Add missing group name to activity notifications
Closes #799

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-17 16:25:21 +01:00
Thomas Citharel cc9c2c878c
Fix some HTTP signatures issues
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-17 16:01:39 +01:00
Thomas Citharel 5489c54f10 Merge branch 'bugs' into 'main'
Various bugs

Closes #803, #884 et #829

See merge request framasoft/mobilizon!1111
2021-11-16 16:13:16 +00:00
Thomas Citharel 0cae2bb84d
Fix return from EventDelayedNotificationWorker being nil
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 16:45:38 +01:00
Thomas Citharel d1f0a9224a
Cleanup some dead code
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 16:45:38 +01:00
Thomas Citharel 702c7fa6d4
Rename is_local to is_local?
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 16:45:38 +01:00
Thomas Citharel 5b85d96e06
Handle errors when fetching actor pictures
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 16:45:38 +01:00
Thomas Citharel f35db6540b
Various HTTP signature code improvements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 16:45:38 +01:00
Thomas Citharel 6f6d617eba
Fix actor AP representation of avatar
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 15:47:14 +01:00
Thomas Citharel 84bd1ccfad
Don't sign fetch when fetching actor for a given signature
Otherwise it's doing a loop

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 15:46:23 +01:00
Thomas Citharel 88067bd217
Expose and fetch event contacts
Close #829

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 15:45:05 +01:00
Thomas Citharel d7ef8f3280
Adding some debug logs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 15:43:53 +01:00
Thomas Citharel 446c5f00ab
Add "formerType" and "delete" attributes on Tombstones objects
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 11:56:15 +01:00
Thomas Citharel 2032586352
Show the warning about casing on the login screen as well
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 11:44:13 +01:00
Thomas Citharel 19794bde23
Mention following groups on the registration page
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 11:40:22 +01:00
Thomas Citharel d291a83cc9
Warn when registering with email containing uppercase characters
Closes #884 and #803

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-16 11:38:17 +01:00
Thomas Citharel be1664ec85
Improve sending pending participation notifications
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 16:59:40 +01:00
Thomas Citharel 200adf272c
Move release package at correct path for CI upload
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 13:37:00 +01:00
Thomas Citharel 85ceb1de47
Improve json-ld metadata on event live streams
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 12:11:29 +01:00
Thomas Citharel bcf17fe30b
Add "eventAttendanceMode" to JSON-ld schema.org event representation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 11:08:18 +01:00
Thomas Citharel fea97f3713
Fix creating an mz activity when updating an event with some subfields
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 11:03:06 +01:00
Thomas Citharel d31bdc99f8 Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1110
2021-11-15 08:27:33 +00:00
Berto Te 425d5f61fc Translated using Weblate (Spanish)
Currently translated at 100.0% (54 of 54 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/es/
2021-11-15 09:26:08 +01:00
Berto Te 060f644e09 Translated using Weblate (Spanish)
Currently translated at 100.0% (203 of 203 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/es/
2021-11-15 09:26:08 +01:00
Berto Te ba0af5d0af Translated using Weblate (Spanish)
Currently translated at 100.0% (296 of 296 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2021-11-15 09:26:08 +01:00
Berto Te 9c8b01c2a5 Translated using Weblate (Spanish)
Currently translated at 100.0% (1253 of 1253 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2021-11-15 09:26:08 +01:00
Thomas Citharel 94652bbf44
Version 2.0.0-beta.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 09:25:45 +01:00
Thomas Citharel 42d6b8a9ab
Upgrade deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 09:24:55 +01:00
Thomas Citharel 56bb28373b Merge branch 'bugs' into 'main'
Multiple bugs fixed

Closes #836, #843, #910, #890 et #894

See merge request framasoft/mobilizon!1109
2021-11-15 08:17:21 +00:00
Thomas Citharel e5e95b81b4
Update changelog for 2.0.0-beta.2
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 08:48:29 +01:00
Thomas Citharel b547f1f1ee
Handle Webfinger endpoint not returning 200
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 08:48:29 +01:00
Thomas Citharel 3f9e1c8e19
Remove exvcr dependency
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 08:48:28 +01:00
Thomas Citharel df2c184bc0
Refactor transmogrifier Delete to avoid spoofed Delete being accepted
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-15 08:48:28 +01:00
Thomas Citharel 2e869c1ade
Improve the UPGRADE.md file
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-14 16:28:28 +01:00
Thomas Citharel f3b97e44e5
Use different pagination for featured events and searched events
Closes #894

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-14 16:28:28 +01:00
Thomas Citharel 5fa9eb68b1
Fixed event metadata not saved on event creation
Closes #890

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-14 16:28:28 +01:00
Thomas Citharel 819f2af518
Fix duplicating group event not using the current actor as event
organizer

Closes #910

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-14 16:28:27 +01:00
Thomas Citharel 346cd6cfac
Fix some french translation bindings
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-14 16:28:27 +01:00
Thomas Citharel 55af776df9
Improve group refreshment and fixed date signature generation
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-14 16:28:27 +01:00
Thomas Citharel 6d599441a9
Allow group members to access group drafts
Closes #843

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 19:57:14 +01:00
Thomas Citharel 6a63ece91f
Fix updating group physical address
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 19:57:14 +01:00
Thomas Citharel 63e7807f0d
Fix group map display
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 19:57:13 +01:00
Thomas Citharel 0a37719029
Expose content language in HTML
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 19:57:13 +01:00
Thomas Citharel cf7744ab51
Add sanitize-html on front-end when pasting into a comment field
So that only allowed tags are inputted into a comment, when copying from
elsewhere

Closes #836

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 19:57:12 +01:00
Thomas Citharel 3d2fea6bb8 Merge branch 'bugs' into 'main'
Various bugs

Closes #873 et #862

See merge request framasoft/mobilizon!1108
2021-11-13 15:12:25 +00:00
Thomas Citharel 0e98010906
Update translations
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 14:38:59 +01:00
Thomas Citharel 3dc8663c3e
Improve report modal accessibility
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 14:38:59 +01:00
Thomas Citharel 4a8284fa6d
Improve comment tree
Closes #862

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 14:38:59 +01:00
Thomas Citharel b1a9c28a97
Add closeButtonAriaLabel to everymodal
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 12:33:14 +01:00
Thomas Citharel e6b186026d
Fix a couple of Apollo cache issues
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 11:47:56 +01:00
Thomas Citharel 18cd7c11f1
Fix error when determining audience for Discussion
Closes #873

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-13 11:46:25 +01:00
Thomas Citharel b4bfa0856f
Merge remote-tracking branch 'weblate/main' 2021-11-13 10:50:44 +01:00
Berto Te c284c78034 Translated using Weblate (Spanish)
Currently translated at 100.0% (200 of 200 strings)

Translation: Mobilizon/Backend errors
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend-errors/es/
2021-11-13 10:48:36 +01:00
Berto Te 08e782860d Translated using Weblate (Spanish)
Currently translated at 100.0% (287 of 287 strings)

Translation: Mobilizon/Backend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/backend/es/
2021-11-13 10:48:35 +01:00
Thomas Citharel fbb167983d Merge branch 'bugs' into 'main'
Allow group admins to moderate new members and other things

Closes #881 et #886

See merge request framasoft/mobilizon!1107
2021-11-12 16:47:01 +00:00
Thomas Citharel d653b038c5
Also send ARM links in releases
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-12 17:20:27 +01:00
Thomas Citharel bd2f5f8c1b
Update translations
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-12 17:17:06 +01:00
Thomas Citharel b940f3c49e
Set same version in docker-compose.test.yml
Closes #886

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-12 17:17:06 +01:00
Thomas Citharel f287b9126e
Improve the AP representation and move endpoints to property
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-12 17:17:05 +01:00
Thomas Citharel 6eba531c89
Allow group admins to moderate new members
Closes #881

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-12 17:17:05 +01:00
Thomas Citharel ae24fa17d5
Refactor Mobilizon.Service.Activity.Member
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-12 17:16:55 +01:00
Thomas Citharel e484728c3d Merge branch 'weblate-mobilizon-frontend' into 'main'
Translations update from Weblate

See merge request framasoft/mobilizon!1105
2021-11-11 16:26:10 +00:00
GunChleoc 38468e06d9 Translated using Weblate (Gaelic)
Currently translated at 100.0% (52 of 52 strings)

Translation: Mobilizon/Activity
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/activity/gd/
2021-11-11 17:22:06 +01:00
GunChleoc 34ba8bd298 Translated using Weblate (Gaelic)
Currently translated at 99.7% (1232 of 1235 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2021-11-11 17:22:06 +01:00
Berto Te 97bddd70ec Translated using Weblate (Spanish)
Currently translated at 100.0% (1235 of 1235 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2021-11-11 17:22:06 +01:00
GunChleoc c571d8336e Added translation using Weblate (Gaelic) 2021-11-11 17:22:06 +01:00
GunChleoc c68a7e8c0c Translated using Weblate (Gaelic)
Currently translated at 97.5% (1205 of 1235 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/gd/
2021-11-11 17:22:06 +01:00
Thomas Citharel 012dbe6419 Merge branch 'notify-followers' into 'main'
Send notification emails to followers and members when a group publishes a new event

See merge request framasoft/mobilizon!1106
2021-11-11 16:05:36 +00:00
Thomas Citharel 4a2805d43e
Extract translations
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-11 16:29:39 +01:00
Berto Te a04ffcd6ce
Translated using Weblate (Spanish)
Currently translated at 100.0% (1234 of 1234 strings)

Translation: Mobilizon/Frontend
Translate-URL: https://weblate.framasoft.org/projects/mobilizon/frontend/es/
2021-11-11 16:29:39 +01:00
Thomas Citharel 9583804890
Only show datetime tz toggle if offset is different
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-11 16:29:38 +01:00
Thomas Citharel 38a3ffc19f
Send event creation and event update notifications in a background task
The event update notification is made unique so that repeated changes
only trigger one notificate every 30 minutes

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-11 16:29:38 +01:00
Thomas Citharel 8250d34597
Debug log the output of an Create Event error
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:52 +01:00
Thomas Citharel c15123e5ea
Add tests for Gancio compatibility
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:51 +01:00
Thomas Citharel afff01d6d2
Set an event UUID if default is nil
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:51 +01:00
Thomas Citharel aaf9c2c931
Refactor fetching medias from event attachements
Use first attachement Document if none has the Banner name

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:51 +01:00
Thomas Citharel 6822cfabf1
Add a default name for media if none is specified in AP
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:51 +01:00
Thomas Citharel 41bddebda2
Add ru and ar to dev locales
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:50 +01:00
Thomas Citharel ccce64d6cb
Update arm/arm64 packages as well
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:50 +01:00
Thomas Citharel 89bbafb44c
Don't digest release files
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 20:44:50 +01:00
Thomas Citharel 5c7067b22b
Send notification emails to followers and members when a group publishes
a new event

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-10 16:36:32 +01:00
Thomas Citharel 800060a926 Merge branch 'bugs' into 'main'
Include organizer actor in icalendar export

Closes #907 et #913

See merge request framasoft/mobilizon!1104
2021-11-09 13:33:52 +00:00
Thomas Citharel cf69c8b375
Break line after notification settings in emails
Closes #913

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 12:59:53 +01:00
Thomas Citharel 2401abedb5
Include organizer actor in icalendar export
Closes #907

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 11:50:35 +01:00
Thomas Citharel 6d9fe639d6
Add option to yarn in CI to avoid network timeouts
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 10:39:04 +01:00
Thomas Citharel e4a64e8ad6
Rename changelog entry
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:50:29 +01:00
Thomas Citharel 16925ebf77 Merge branch '2.0-beta.1' into 'main'
2.0-beta.1

Closes #892

See merge request framasoft/mobilizon!1102
2021-11-09 08:46:42 +00:00
Thomas Citharel 0bc78ad26e
Mention the main branch name change in the changelog
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:17:38 +01:00
Thomas Citharel 184b1cbdd2
Bump version to 2.0.0-beta.1
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:33 +01:00
Thomas Citharel cd8a5552bb
Improve converting to username from non-latin characters
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:33 +01:00
Thomas Citharel a54607a57d
Upgrade deps
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:33 +01:00
Thomas Citharel 90665f0294
Fix some new eslint rules
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:33 +01:00
Thomas Citharel 6a03e49b63
Remove obsolete configuration
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:32 +01:00
Thomas Citharel 7e15b5fb7a
Set tzworld default dir in config
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:32 +01:00
Thomas Citharel 3961a2067b
Fix search exposing events to unlogged users
Closes #892

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:32 +01:00
Thomas Citharel 729a6a7113
Add custom task to update tz_world data
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:31 +01:00
Thomas Citharel 41eb62bc2b
Remove tzworld loading dynamically
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:31 +01:00
Thomas Citharel e7662d3c77
Add necessary dependencies for exports into Docker image
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:31 +01:00
Thomas Citharel ea276fbe73
Detect if Python3 is installed before launching PythonPort Genserver
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:31 +01:00
Thomas Citharel df21729ba0
Add UPGRADE.md and CHANGELOG.md instructions for 2.0
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:30 +01:00
Thomas Citharel 4fe5625597
Fix map height
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:15:30 +01:00
Thomas Citharel 73a7ef988f
Rename master branch to main
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2021-11-09 09:12:04 +01:00
675 changed files with 98586 additions and 39710 deletions

66
.devcontainer/Dockerfile Normal file
View file

@ -0,0 +1,66 @@
# Update the VARIANT arg in docker-compose.yml to pick an Elixir version: 1.9, 1.10, 1.10.4
ARG VARIANT="1.12.3"
FROM elixir:${VARIANT}
# This Dockerfile adds a non-root user with sudo access. Update the “remoteUser” property in
# devcontainer.json to use it. More info: https://aka.ms/vscode-remote/containers/non-root-user.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
# Options for common package install script
ARG INSTALL_ZSH="true"
ARG UPGRADE_PACKAGES="true"
ARG COMMON_SCRIPT_SOURCE="https://raw.githubusercontent.com/microsoft/vscode-dev-containers/v0.209.6/script-library/common-debian.sh"
ARG COMMON_SCRIPT_SHA="d35dd1711454156c9a59cc41ebe04fbff681ca0bd304f10fd5b13285d0de13b2"
# Optional Settings for Phoenix
ARG PHOENIX_VERSION="1.6.2"
# [Optional] Setup nodejs
ARG NODE_SCRIPT_SOURCE="https://raw.githubusercontent.com/microsoft/vscode-dev-containers/main/script-library/node-debian.sh"
ARG NODE_SCRIPT_SHA="dev-mode"
ARG NODE_VERSION="none"
ENV NVM_DIR=/usr/local/share/nvm
ENV NVM_SYMLINK_CURRENT=true
ENV PATH=${NVM_DIR}/current/bin:${PATH}
# [Optional, Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none"
# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies.
RUN apt-get update \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends curl ca-certificates 2>&1 \
&& curl -sSL ${COMMON_SCRIPT_SOURCE} -o /tmp/common-setup.sh \
&& ([ "${COMMON_SCRIPT_SHA}" = "dev-mode" ] || (echo "${COMMON_SCRIPT_SHA} */tmp/common-setup.sh" | sha256sum -c -)) \
&& /bin/bash /tmp/common-setup.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "${UPGRADE_PACKAGES}" \
#
# [Optional] Install Node.js for use with web applications
&& if [ "$NODE_VERSION" != "none" ]; then \
curl -sSL ${NODE_SCRIPT_SOURCE} -o /tmp/node-setup.sh \
&& ([ "${NODE_SCRIPT_SHA}" = "dev-mode" ] || (echo "${NODE_SCRIPT_SHA} */tmp/node-setup.sh" | sha256sum -c -)) \
&& /bin/bash /tmp/node-setup.sh "${NVM_DIR}" "${NODE_VERSION}" "${USERNAME}"; \
fi \
#
# Install dependencies
&& apt-get install -y build-essential \
#
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/* /tmp/common-setup.sh /tmp/node-setup.sh
RUN su ${USERNAME} -c "mix local.hex --force \
&& mix local.rebar --force \
&& mix archive.install --force hex phx_new ${PHOENIX_VERSION}"
RUN apt-get update \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends cmake webp bash libncurses6 git python3 inotify-tools \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
# [Optional] Uncomment this line to install additional package.
# RUN mix ...

View file

@ -0,0 +1,44 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.209.6/containers/elixir-phoenix-postgres
{
"name": "Elixir, Phoenix, Node.js & PostgresSQL (Community)",
"dockerComposeFile": "docker-compose.yml",
"service": "elixir",
"workspaceFolder": "/workspace",
// Set *default* container specific settings.json values on container create.
"settings": {
"sqltools.connections": [{
"name": "Container database",
"driver": "PostgreSQL",
"previewLimit": 50,
"server": "localhost",
"port": 5432,
"database": "postgres",
"username": "postgres",
"password": "postgres"
}]
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"jakebecker.elixir-ls",
"mtxr.sqltools",
"mtxr.sqltools-driver-pg"
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [4000, 4001, 5432],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "mix deps.get",
// "runArgs": ["--userns=keep-id", "--privileged"],
// "containerUser": "vscode",
// "containerEnv": {
// "HOME": "/home/vscode",
// },
// "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
}

View file

@ -0,0 +1,46 @@
version: "3.8"
services:
elixir:
build:
context: .
dockerfile: Dockerfile
args:
# Elixir Version: 1.9, 1.10, 1.10.4, ...
VARIANT: "1.13.1"
# Phoenix Version: 1.4.17, 1.5.4, ...
PHOENIX_VERSION: "1.6.6"
# Node Version: 10, 11, ...
NODE_VERSION: "16"
volumes:
- ..:/workspace:z
# Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function.
network_mode: service:db
# Overrides default command so things don't shut down after the process ends.
command: sleep infinity
environment:
MOBILIZON_INSTANCE_NAME: My Mobilizon Instance
MOBILIZON_INSTANCE_HOST: localhost
MOBILIZON_INSTANCE_HOST_PORT: 4000
MOBILIZON_INSTANCE_PORT: 4000
MOBILIZON_INSTANCE_EMAIL: noreply@mobilizon.me
MOBILIZON_INSTANCE_REGISTRATIONS_OPEN: "true"
MOBILIZON_DATABASE_PASSWORD: postgres
MOBILIZON_DATABASE_USERNAME: postgres
MOBILIZON_DATABASE_DBNAME: mobilizon
MOBILIZON_DATABASE_HOST: db
db:
image: postgis/postgis:latest
restart: unless-stopped
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: app
volumes:
postgres-data: null

View file

@ -19,7 +19,6 @@ MOBILIZON_REPLY_EMAIL=contact@mobilizon.lan
# Email settings
MOBILIZON_SMTP_SERVER=localhost
MOBILIZON_SMTP_PORT=25
MOBILIZON_SMTP_HOSTNAME=localhost
MOBILIZON_SMTP_USERNAME=noreply@mobilizon.lan
MOBILIZON_SMTP_PASSWORD=password
MOBILIZON_SMTP_SSL=false

View file

@ -1,3 +1,4 @@
[
inputs: ["{mix,.formatter}.exs", "{config,lib,test,priv}/**/*.{ex,exs}"]
plugins: [Phoenix.LiveView.HTMLFormatter],
inputs: ["{mix,.formatter}.exs", "{config,lib,test,priv}/**/*.{ex,exs,heex}"]
]

View file

@ -59,8 +59,11 @@ lint-elixir:
- mix deps.get
script:
- export EXITVALUE=0
- git fetch origin ${CI_DEFAULT_BRANCH}
- TARGET_SHA1=$(git show-ref -s ${CI_DEFAULT_BRANCH})
- echo "$TARGET_SHA1"
- mix format --check-formatted --dry-run || export EXITVALUE=1
- mix credo --strict -a || export EXITVALUE=1
- mix credo diff --from-git-merge-base $TARGET_SHA1 --strict -a || export EXITVALUE=1
- mix sobelow --config || export EXITVALUE=1
- exit $EXITVALUE
@ -107,7 +110,7 @@ deps:
exunit:
stage: test
services:
- name: postgis/postgis:13-3.1
- name: postgis/postgis:14-3.2
alias: postgres
variables:
MIX_ENV: test
@ -172,7 +175,7 @@ pages:
# #- yarn run --cwd "js" styleguide:build
# #- mv js/styleguide public/frontend
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_BRANCH == "main"'
artifacts:
expire_in: 1 hour
paths:
@ -180,7 +183,7 @@ pages:
.docker: &docker
stage: docker
image: docker:stable
image: docker:20.10.12
variables:
DOCKER_TLS_CERTDIR: "/certs"
DOCKER_HOST: tcp://docker:2376
@ -188,13 +191,13 @@ pages:
DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
DOCKER_DRIVER: overlay2
services:
- docker:stable-dind
- docker:20.10.12-dind
cache: {}
before_script:
# Install buildx
- wget https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
- wget https://github.com/docker/buildx/releases/download/v0.8.1/buildx-v0.8.1.linux-amd64
- mkdir -p ~/.docker/cli-plugins/
- mv buildx-v0.6.3.linux-amd64 ~/.docker/cli-plugins/docker-buildx
- mv buildx-v0.8.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
- chmod a+x ~/.docker/cli-plugins/docker-buildx
# Create env
- docker context create tls-environment
@ -205,25 +208,17 @@ pages:
# Login to DockerHub
- mkdir -p ~/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$CI_REGISTRY_AUTH\",\"email\":\"$CI_REGISTRY_EMAIL\"}}}" > ~/.docker/config.json
script:
- >
docker buildx build
--push
--platform linux/amd64,linux/arm64,linux/arm
-t $DOCKER_IMAGE_NAME
-f docker/production/Dockerfile .
tags:
- "privileged"
timeout: 3 hours
build-docker-master:
build-docker-main:
<<: *docker
rules:
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
when: never
- if: '$CI_PIPELINE_SOURCE == "schedule"'
variables:
DOCKER_IMAGE_NAME: framasoft/mobilizon:master
script:
- docker buildx build --push --platform linux/amd64 -t framasoft/mobilizon:main -f docker/production/Dockerfile .
build-docker-tag:
<<: *docker
@ -231,19 +226,31 @@ build-docker-tag:
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
when: never
- if: $CI_COMMIT_TAG
variables:
DOCKER_IMAGE_NAME: framasoft/mobilizon:$CI_COMMIT_TAG
timeout: 3 hours
script:
- >
docker buildx build
--push
--platform linux/amd64,linux/arm64,linux/arm
-t framasoft/mobilizon:$CI_COMMIT_TAG
-t framasoft/mobilizon:latest
-f docker/production/Dockerfile .
# Packaging app for amd64
package-app:
image: mobilizon/buildpack:1.13.4-erlang-24.3.3-debian-buster
stage: package
variables: &release-variables
MIX_ENV: "prod"
DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC
APP_ASSET: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${ARCH}.tar.gz"
script: &release-script
- mix local.hex --force
- mix local.rebar --force
- mix deps.get
- mix phx.digest
- mix deps.get --only-prod
- mix compile
- mix phx.digest.clean --all && \
- mix release --path release/mobilizon
- cd release/mobilizon && ln -s lib/mobilizon-*/priv priv && cd ../../
- du -sh release/
@ -253,7 +260,7 @@ package-app:
only:
- tags@framasoft/mobilizon
artifacts:
expire_in: 30 days
expire_in: 2 days
paths:
- ${APP_ASSET}
@ -271,7 +278,7 @@ package-app-dev:
# Packaging app for multi-arch
multi-arch-release:
stage: package
image: docker:stable
image: docker:20.10.12
variables:
DOCKER_TLS_CERTDIR: "/certs"
DOCKER_HOST: tcp://docker:2376
@ -279,14 +286,15 @@ multi-arch-release:
DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
DOCKER_DRIVER: overlay2
APP_ASSET: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${ARCH}.tar.gz"
OS: debian-buster
services:
- docker:stable-dind
- docker:20.10.12-dind
cache: {}
before_script:
# Install buildx
- wget https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
- wget https://github.com/docker/buildx/releases/download/v0.8.1/buildx-v0.8.1.linux-amd64
- mkdir -p ~/.docker/cli-plugins/
- mv buildx-v0.6.3.linux-amd64 ~/.docker/cli-plugins/docker-buildx
- mv buildx-v0.8.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
- chmod a+x ~/.docker/cli-plugins/docker-buildx
# Create env
- docker context create tls-environment
@ -298,12 +306,13 @@ multi-arch-release:
- docker buildx build --platform linux/${ARCH} --output type=local,dest=releases --build-arg APP_ASSET=${APP_ASSET} -f docker/multiarch/Dockerfile .
- ls -alh releases/mobilizon/
- du -sh releases/mobilizon/${APP_ASSET}
- mv releases/mobilizon/${APP_ASSET} .
tags:
- "privileged"
artifacts:
expire_in: 30 days
expire_in: 2 days
paths:
- releases/mobilizon/${APP_ASSET}
- ${APP_ASSET}
parallel:
matrix:
- ARCH: ["arm", "arm64"]
@ -312,26 +321,36 @@ multi-arch-release:
when: never
- if: '$CI_PIPELINE_SOURCE == "schedule"'
- if: $CI_COMMIT_TAG
timeout: 3h
# Release
release-upload:
stage: upload
image: framasoft/yakforms-assets-deploy:latest
image: framasoft/upload-packages:latest
variables:
APP_ASSET: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${ARCH}.tar.gz"
rules: *tag-rules
script:
- eval `ssh-agent -s`
- ssh-add <(echo "${DEPLOYEMENT_KEY}" | base64 --decode -i)
- echo "put -r mobilizon_*.tar.gz" | sftp -o "VerifyHostKeyDNS yes" ${DEPLOYEMENT_USER}@${DEPLOYEMENT_HOST}:public/
- echo "put -r ${APP_ASSET}" | sftp -o "VerifyHostKeyDNS yes" ${DEPLOYEMENT_USER}@${DEPLOYEMENT_HOST}:public/
artifacts:
expire_in: 1 day
when: on_success
paths:
- mobilizon_*.tar.gz
parallel:
matrix:
- ARCH: ["amd64", "arm", "arm64"]
release-create:
stage: deploy
image: registry.gitlab.com/gitlab-org/release-cli:latest
rules: *tag-rules
variables:
APP_ASSET_AMD64: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_amd64.tar.gz"
APP_ASSET_ARM: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_arm.tar.gz"
APP_ASSET_ARM64: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_arm64.tar.gz"
before_script:
- apk --no-cache add gawk sed grep
script: |
@ -341,4 +360,6 @@ release-create:
release-cli create --name "$CI_COMMIT_TAG" \
--description "$CHANGELOG" \
--tag-name "$CI_COMMIT_TAG" \
--assets-link "{\"name\":\"${APP_ASSET}\",\"url\":\"${ENDPOINT}/${APP_ASSET}\"}"
--assets-link "{\"name\":\"${APP_ASSET_AMD64}\",\"url\":\"${ENDPOINT}/${APP_ASSET_AMD64}\"}" \
--assets-link "{\"name\":\"${APP_ASSET_ARM}\",\"url\":\"${ENDPOINT}/${APP_ASSET_ARM}\"}" \
--assets-link "{\"name\":\"${APP_ASSET_ARM64}\",\"url\":\"${ENDPOINT}/${APP_ASSET_ARM64}\"}"

View file

@ -8,5 +8,5 @@
out: "",
threshold: "medium",
ignore: ["Config.HTTPS", "Config.CSP"],
ignore_files: ["config/dev.1.secret.exs", "config/dev.2.secret.exs", "config/dev.3.secret.exs", "config/dev.secret.exs", "config/e2e.secret.exs", "config/prod.secret.exs", "config/test.secret.exs", "config/runtime.1.secret.exs", "config/runtime.2.secret.exs", "config/runtime.3.secret.exs", "config/runtime.exs"]
ignore_files: ["config/runtime.exs"]
]

View file

@ -1,12 +1,16 @@
5048AE33D6269B15E21CF28C6F545AB6
752C0E897CA81ACD81F4BB215FA5F8E4
23412CF16549E4E88366DC9DECF39071
81C1F600C5809C7029EE32DE4818CD7D
02CE4963DFD1B0D6D5C567357CAFFE97
155A1FB53DE39EC8EFCFD7FB94EA823D
73B351E4CB3AF715AD450A085F5E6304
BBACD7F0BACD4A6D3010C26604671692
6D4D4A4821B93BCFAC9CDBB367B34C4B
5674F0D127852889ED0132DC2F442AAB
1600B7206E47F630D94AB54C360906F0
2262742E5C8944D5BF6698EC61F5DE50
25BEE162A99754480967216281E9EF33
2A6F71CD6F1246F0B152C2376E2E398A
30552A09D485A6AA73401C1D54F63C21
52900CE4EE3598F6F178A651FB256770
6151F44368FC19F2394274F513C29151
765526195D4C6D770EAF4DC944A8CBF4
B2FF1A12F13B873507C85091688C1D6D
B9AF8A342CD7FF39E10CC10A408C28E1
C042E87389F7BDCFF4E076E95731AE69
C42BFAEF7100F57BED75998B217C857A
D11958E86F1B6D37EF656B63405CA8A4
F16F054F2628609A726B9FF2F089D484

2
.tool-versions Normal file
View file

@ -0,0 +1,2 @@
elixir 1.13.4-otp-24
erlang 24.3.3

View file

@ -1,9 +1,686 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 2.1.0 - 2022-05-16
### Added
- Added an event category field. Administrators can extend the pre-configured list of categories through configuration.
- Added possibility for administrators to have analytics (Matomo, Plausible supported) and error handling (Sentry supported) on front-end.
- Redesigned federation admin section with dedicated instance pages
- Allow to filter moderation reports by domain
- Added a button to go to past events of a group if it has no upcoming events
- Add Überauth CAS Strategy
- Add a CLI command to delete actors
### Changed
- Changed mailer library from Bamboo to Swoosh, should fix emails being considered spam. **Some configuration changes are required, see [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md).**
- Expose some fields to ActivityStreams event representation: `isOnline`, `remainingAttendeeCapacity` and `participantCount`
- Expose a new field to ActivityStreams group representation: `memberCount`
- Improve group creation errors feedback
- Only display locality in event card
- Stale groups are now excluded from group search
- Event default visibility is now set according to group privacy setting
- Remove Koena Connect button
- Hide the whole metadata block if group has no description
- Increase task timeout in Refresher to 60 seconds
- Allow webfinger to be fetched over http (not https) in dev mode
- Improve reactions when approving/rejecting an instance follow
- Improve instance admin view for mobile
- Allow to reject instance following
- Allow instance to have non-standard ports
- Add pagination to the instances list
- Eventually fetch actors in mentions
- Improve IdentityPicker, JoinGroupWithAccount and ActorInline components
- Various group and posts improvements
- Update schema.graphql file
- Add "Accept-Language" header to sentry request metadata
- Hide address blocks when address has no real data
- Remove obsolete attribute `type="text/css"` from `<style>` tags
- Improve actor cards integration
- Use upstream dependencies for Ueberauth providers
- Include ongoing events in search
- Send push notification into own task
- Add appropriate timeouts for Repo.transactions
- Add a proper error message when adding an instance follow that doesn't respond
- Allow the instance to be followed from Mastodon (through relays)
- Remove unused fragment from FETCH_PERSON GraphQL query
### Fixed
- Fixed actor refreshment being impossible
- Fixed ical export for undefined datetimes
- Fixed parsing links with hashtag characters
- Fixed fetching link details from Twitter
- Fixed Thunderbird accessing ICS feed endpoint with special `Accept` HTTP header
- Make sure every ICS/Feed caches are emptied when modifying entities
- Fixed time issues with DST changes
- Fixed group preview card not truncating description
- Fixed redirection after login
- Fixed user admin section showing button to confirm user when the user is already confirmed
- Fixed creating event from group view not always setting the group as organizer
- Fixed invalid addresses blocking event metadata preview rendering
- Fixed group deletion with comments that caused foreign key issues
- Fixed incoming Accept activities from participations we don't already have
- Fixed resources that didn't have metadata size limits
- Properly fallback to UTC when sending notifications and the user doesn't have a timezone setting set
- Fix posts creation
- Fix rejecting instance follow
- Fix pagination of group events
- Add proper fallback for when a TZ isn't registered
- Hide side of report modal on low width screens
- Fix Telegram Logo being replaced with Mastodon logo in ShareGroupModal
- Change URL for Mastodon Share Manager
- Fix receiving Flag activities on federated events
- Fix activity notifications by preloading user.activity_settings
- Fix text overflow on group card description
- Exclude tags with more than 40 characters from being extracted
- Avoid duplicate tags with different casing
- Fix invalid HTML (`<div>` inside `<label>`)
- Fix latest group not refreshing in admin section
- Add missing "relay@" part of federated address to follow
- Fix Ueberauth use of CSRF with session
- Fix being an administrator when using 3rd-party auth provider
- Make sure activity recipient can't be nil
- Make sure users can't create profiles or groups with non-valid patterns
- Add description field to address representation
- Make sure prompt show the correct message and not just "Continue?" in mix mode
- Make sure activity notification recaps can't be sent multiple times
- Fix group notification of new event being sent multiple times
- Fix links to group page in group membership emails and participation
- Fix clicking on map crashing the app
### Translations
- Arabic
- Basque
- Belarusian
- Bengali
- Catalan
- Chinese (Traditional)
- Croatian
- Czech
- Danish
- Dutch
- Esperanto
- Finnish
- French
- Gaelic
- Galician
- German
- Hebrew
- Hungarian
- Indonesian
- Italian
- Japanese
- Kabyle
- Kannada
- Norwegian Nynorsk
- Occitan
- Persian
- Polish
- Portuguese
- Portuguese (Brazil)
- Russian
- Slovenian
- Spanish
- Swedish
- Welsh
## 2.1.0-rc.6 - 2022-05-11
Changes since rc.5:
- Allow the instance to be followed from Mastodon (through relays)
- Make sure activity recipient can't be nil
- Make sure users can't create profiles or groups with non-valid patterns
- Add description field to address representation
- Make sure prompt show the correct message and not just "Continue?" in mix mode
- Add a CLI command to delete actors
- Make sure activity notification recaps can't be sent multiple times
- Fix group notification of new event being sent multiple times
- Fix links to group page in group membership emails and participation
- Fix clicking on map crashing the app
- Remove unused fragment from FETCH_PERSON GraphQL query
## 2.1.0-rc.5 - 2022-05-06
Changes since rc.4:
- Add appropriate timeouts for Repo.transactions
- Remove OS-specific packages
- Remove refresh instance triggers
- Add a proper error message when adding an instance follow that doesn't respond
## 2.1.0-rc.4 - 2022-05-03
Changes since rc.3:
- Use upstream dependencies for Ueberauth providers
- Fix Ueberauth use of CSRF with session
- Fix being an administrator when using 3rd-party auth provider
- Include ongoing events in search
- Send push notification into own task
- Add Überauth CAS Strategy
## 2.1.0-rc.3 - 2022-04-24
Changes since rc.2:
- Fix activity notifications by preloading user.activity_settings
- Add "Accept-Language" header to sentry request metadata
- Hide address blocks when address has no real data
- Fix text overflow on group card description
- Exclude tags with more than 40 characters from being extracted
- Avoid duplicate tags with different casing
- Fix invalid HTML (<div> inside <label>)
- Remove attribute type="text/css" from <style> tags
- Improve actor cards integration
- Fix latest group not refreshing in admin section
- Add missing "relay@" part of federated address to follow
## 2.1.0-rc.2 - 2022-04-20
Changes since rc.1:
- Hide the whole metadata block if group has no description
- Increase task timeout in Refresher to 60 seconds
- Allow webfinger to be fetched over http (not https) in dev mode
- Fix rejecting instance follow
- Allow instance to have non-standard ports
- Improve reactions when approving/rejecting an instance follow
- Improve instance admin view for mobile
- Allow to reject instance following
- Fix pagination of group events
- Add pagination to the instances list
- Upgrade deps
- Eventually fetch actors in mentions
- Add proper fallback for when a TZ isn't registered
- Improve IdentityPicker
- Hide side of report modal on low width screens
- Improve JoinGroupWithAccount component
- Various group and posts improvements
- Fix Telegram Logo being replaced with Mastodon logo in ShareGroupModal
- Change URL to Mastodon Share Manager
- Improve ActorInline component
- Avoid assuming we're on Debian-based in release build
- Fix receiving Flag activities on federated events
- Update schema.graphql file
## 2.1.0-rc.1 - 2022-04-18
Changes since beta.3:
- Fix posts creation
- Fix some typespecs
- Remove Koena Connect button
- Update dependencies
## 2.1.0-beta.3 - 2022-04-09
Changes since beta.2:
- Add Fedora and Alpine builds
## 2.1.0-beta.2 - 2022-04-08
Changes since beta.1 :
- Build release packages for several distributions (Debian Bullseye, Debian Buster, Ubuntu Focal, Ubuntu Bionic) because of libc version changes
## 2.1.0-beta.1 - 2022-04-07
### Added
- Added an event category field. Administrators can extend the pre-configured list of categories through configuration.
- Added possibility for administrators to have analytics (Matomo, Plausible supported) and error handling (Sentry supported) on front-end.
- Redesigned federation admin section with dedicated instance pages
- Allow to filter moderation reports by domain
- Added a button to go to past events of a group if it has no upcoming events
### Changed
- Changed mailer library from Bamboo to Swoosh, should fix emails being considered spam. **Some configuration changes are required, see below.**
- Expose some fields to ActivityStreams event representation: `isOnline`, `remainingAttendeeCapacity` and `participantCount`
- Expose a new field to ActivityStreams group representation: `memberCount`
- Improve group creation errors feedback
- Only display locality in event card
- Stale groups are now excluded from group search
- Event default visibility is now set according to group privacy setting
### Fixed
- Fixed actor refreshment being impossible
- Fixed ical export for undefined datetimes
- Fixed parsing links with hashtag characters
- Fixed fetching link details from Twitter
- Fixed Thunderbird accessing ICS feed endpoint with special `Accept` HTTP header
- Make sure every ICS/Feed caches are emptied when modifying entities
- Fixed time issues with DST changes
- Fixed group preview card not truncating description
- Fixed redirection after login
- Fixed user admin section showing button to confirm user when the user is already confirmed
- Fixed creating event from group view not always setting the group as organizer
- Fixed invalid addresses blocking event metadata preview rendering
- Fixed group deletion with comments that caused foreign key issues
- Fixed incoming Accept activities from participations we don't already have
- Fixed resources that didn't have metadata size limits
- Properly fallback to UTC when sending notifications and the user doesn't have a timezone setting set
### Translations
- Arabic
- Basque
- Belarusian
- Bengali
- Catalan
- Chinese (Traditional)
- Croatian
- Czech
- Danish
- Dutch
- Esperanto
- Finnish
- French
- Gaelic
- Galician
- German
- Hebrew
- Hungarian
- Indonesian
- Italian
- Japanese
- Kabyle
- Kannada
- Norwegian Nynorsk
- Occitan
- Persian
- Polish
- Portuguese
- Portuguese (Brazil)
- Russian
- Slovenian
- Spanish
- Swedish
- Welsh
## 2.0.2 - 2021-12-22
### Changed
- Improved handling of media file deletion
- Releases and Docker image are now using Elixir 1.13
### Fixed
- Fixed position of tentative tag on event cards
- Fixed text overflow when a link is too long in event mobile view
- Fixed filtering user own memberships and group members in event organizer & contacts picker
- Fixed first day of week not depending on locale in the datetime picker
- Fixed the admin page when a group/profile/user was not found
- Fixed group members pagination on admin group profile view
- Fixed admin edition of the instance's language
### Translations
- Croatian
- Czech
- Esperanto
- German
- Hebrew
- Occitan
- Persian
- Russian
- Spanish
## 2.0.1 - 2021-11-26
### Changed
- Remove litepub context
### Fixed
- Make sure my group upcoming events are ordered by their start date
- Fix event participants pagination
- Always focus the search field after results have been fetched
- Don't sign fetches to instance actor when refreshing their keys
- Fix reject of already following instances
- Added missing timezone data to the Docker image
- Replace @tiptap/starter-kit with indidual extensions, removing unneeded extensions that caused issues on old Firefox versions
- Better handling of Friendica Update activities without actor information
- Always show pending/cancelled status on event cards
- Fixed nightly docker build
- Refresh loggeduser information before the final step of onboarding, avoiding loop when finishing onboarding
- Handle tz_world data being absent
### Translations
- Croatian (New !)
- Czech
- Gaelic
- Hungarian
- Indonesian
- Welsh (New !)
## 2.0.0 - 2021-11-23
Please read the [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md#upgrading-from-13-to-20) file as well.
### Added
- Added possibility to follow groups and be notified from new upcoming events
- Export list of participants to CSV, `PDF` and `ODS`
- Allow to set timezone for an event. The timezone is automatically defined from the address if one is defined. If the event timezone is different than the user's current one, a toggle is shown to switch between the two.
- Added initial support for Right To Left languages (such as arabic) and [BiDi](https://en.wikipedia.org/wiki/Bidirectional_text)
- Group followers and members get an notification email by default when a group publishes a new event (subject to activity notification settings)
- Group admins can now approve or deny new memberships
- Build releases in `arm` and `arm64` format in addition to `amd64`
- Build Docker images in `arm` and `arm64` format in addition to `amd64`
- Added possibility to indicate the event is fully online
- Added possibility to search only for online events
- Added possibility to search only in past events
- Detect event, comments and posts languages automatically. Allows setting language
- Allow to change an user's password through the users.modify mix task
- Add instance setting so that only the admin can create groups
- Add instance setting so that only groups can create events
- Added JSON-LD metadata about the event in emails
- Added a quick link to email notification settings at the bottom of emails
- Allow to access Mobilizon with a specific language directly by using `https://instance.tld/lang` where `lang` is a language supported by Mobilizon
- Added organizer actor name (profile or group) in the icalendar export
- Add initial support for federation with Gancio
### Changed
- Multiple UI improvements, including post, event and participation cards, discussions and emails. The « My Events » page was also redesigned to allow showing events from your groups.
- Various accessibility improvements
- Event update notification is send to participants ~30 minutes after the event update, so that successive edits are throttled.
- Event, post and comments titles and content now have expose their detected language in HTML, for improved screen reader experience
- Delete current actor ID as well from local storage when unlogging
- Show a default text for instance contact in default terms text when no instance contact is set
- Only show locatecontrol button in leaflet map when we can do geolocation
- Disable push column in notification settings when push is not available
- Show actual language instead of language code in Users admin view
- Empty old & new passwords fields when successful password change
- Don't link to the group page from admin when actor is suspended
- Warn participants when the event organizer is suspended (and therefore the event cancelled)
- Improve metadata on public page
- Make sure some event action pages (participate remotely or without an account) don't get indexed by search engines
- Only send `Tombstone` element in `Delete` activities, not the whole previous deleted element.
- Make sure `Delete` activity are send correctly to everyone
- Only add address and tags to event icalendar export if they exist
- `master` branch has been renamed to `main`
- Mention following groups on the registration page
- Add missing group name to activity notifications
- Warn while registering and logging when the email contains uppercase characters
- Improve json-ld metadata on event live streams
- Add "eventAttendanceMode" to JSON-ld schema.org event representation
- Improve sending pending participation notifications
- Add "formerType" and "delete" attributes on Tombstones ActivityPub objects representation
- Improve MyEvents page description text
### Removed
- Support for Elixir < 1.12 and OTP < 22
### Fixed
- Fix tags autocomplete
- Fix config onboarding after LDAP initial connexion
- Fix events pagination on tags page
- Fixed deduplicated files from orphan media being deleted as well
- Fix deleting own account
- Fix search returning user profiles instead of only groups
- Fix federating geo coordinates
- Fix an issue with group activity items when moving resources
- Fix an issue with Identity Picker
- Fix an issue with TagInput
- Fix an issue when leaving a group
- Fix admin settings edition
- Fix an issue when showing public page of suspended group
- Removed non existing page (`/about/mobilizon`) from sitemap
- Fix action logs containing group suspension events
- Fixed group physical address not exposed to ActivityPub
- Release front-end files are no longer in duplicate
- Only show datetime timezone toggle on event if the timezone offset is different from our own
- Fix error when determining audience for Discussion when deleting a comment
- Fix a couple of accessibility issues
- Limit to acceptable tags when pasting raw HTML into comment fields on front-end
- Fixed group map display
- Fixed updating group physical address
- Allow group members to access group drafts
- Improve group refreshment workflow
- Fixed date signature generation for federation
- Fixed an issue when duplicating a group event from another profile
- Fixed event metadata not saved on eventcreation
- Use a different pagination parameter for searched events and featured events on search page
- Fixed creating group activities when creating events with some fields
- Move release package at correct path for CI upload
- Fixed event contacts that were not exposed and fetched over federation
- Don't sign fetch when fetching actor for a given signature
- Some various HTTP signatures issues
- Fixed actor AP representation of avatar
- Handle errors when fetching actor pictures
- Fixed sending group events to followers on Mastodon
- Fixed actors avatars and banners being deleted if the same file was also an orphan media
- Fix spacing in organizer picker
- Increase number of close events and follow group events
- Fix accessing user profile in admin section
- Set initial values for some EventMetadata elements, fixing submitting them right away with no value
- Avoid giving an error page if the apollo futureParticipations query is undefined
- Fixed path to exports in production
- Fixed padding below truncated title of event cards
- Fixed exports that weren't enabled in Docker
- Fixed error page when event end date is null
- Fixed event language not being allowed to be null
### Security
- Fixed private messages sent as event replies from Mastodon that were shown publically as public comments. They are now discarded.
### Translations
- Czech
- Gaelic
- German
- Hungarian
- Indonesian
- Norwegian Nynorsk
- Occitan
- Persian
- Portuguese (Brazil)
- Russian
- Slovenian
- Spanish
## 2.0.0-rc.3 - 2021-11-22
This lists changes since 2.0.0-rc.3. Please read the [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md#upgrading-from-13-to-20) file as well.
### Fixed
- Fixed path to exports in production
- Fixed padding below truncated title of event cards
- Fixed exports that weren't enabled in Docker
- Fixed error page when event end date is null
## 2.0.0-rc.2 - 2021-11-22
This lists changes since 2.0.0-rc.1. Please read the [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md#upgrading-from-13-to-20) file as well.
### Changed
- Improve MyEvents page description text
### Fixed
- Fix spacing in organizer picker
- Increase number of close events and follow group events
- Fix accessing user profile in admin section
- Set initial values for some EventMetadata elements, fixing submitting them right away with no value
- Avoid giving an error page if the apollo futureParticipations query is undefined
### Translations
- German
- Hungarian
## 2.0.0-rc.1 - 2021-11-20
This lists changes since 2.0.0-beta.2. Please read the [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md#upgrading-from-13-to-20) file as well.
### Changed
- Mention following groups on the registration page
- Add missing group name to activity notifications
- Warn while registering and logging when the email contains uppercase characters
- Improve json-ld metadata on event live streams
- Add "eventAttendanceMode" to JSON-ld schema.org event representation
- Improve sending pending participation notifications
- Add "formerType" and "delete" attributes on Tombstones ActivityPub objects representation
### Fixed
- Fixed creating group activities when creating events with some fields
- Move release package at correct path for CI upload
- Fixed event contacts that were not exposed and fetched over federation
- Don't sign fetch when fetching actor for a given signature
- Some various HTTP signatures issues
- Fixed actor AP representation of avatar
- Handle errors when fetching actor pictures
- Fixed sending group events to followers on Mastodon
- Fixed actors avatars and banners being deleted if the same file was also an orphan media
### Translations
- Gaelic
- Spanish
## 2.0.0-beta.2 - 2021-11-15
This lists changes since 2.0.0-beta.1. Please read the [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md#upgrading-from-13-to-20) file as well.
### Added
- Group followers and members get an notification email by default when a group publishes a new event (subject to activity notification settings)
- Group admins can now approve or deny new memberships
- Added organizer actor name (profile or group) in the icalendar export
- Add initial support for federation with Gancio
### Changed
- Event update notification is send to participants ~30 minutes after the event update, so that successive edits are throttled.
- Event, post and comments titles and content now have expose their detected language in HTML, for improved screen reader experience
### Fixed
- Release front-end files are no longer in duplicate
- Only show datetime timezone toggle on event if the timezone offset is different from our own
- Fix error when determining audience for Discussion when deleting a comment
- Fix a couple of accessibility issues
- Limit to acceptable tags when pasting raw HTML into comment fields on front-end
- Fixed group map display
- Fixed updating group physical address
- Allow group members to access group drafts
- Improve group refreshment workflow
- Fixed date signature generation for federation
- Fixed an issue when duplicating a group event from another profile
- Fixed event metadata not saved on eventcreation
- Use a different pagination parameter for searched events and featured events on search page
### Translations
- Gaelic
- Spanish
## 2.0.0-beta.1 - 2021-11-09
Please read the [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md#upgrading-from-13-to-20) file as well.
### Added
- Added possibility to follow groups and be notified from new upcoming events
- Export list of participants to CSV, `PDF` and `ODS`
- Allow to set timezone for an event. The timezone is automatically defined from the address if one is defined. If the event timezone is different than the user's current one, a toggle is shown to switch between the two.
- Added initial support for Right To Left languages (such as arabic) and [BiDi](https://en.wikipedia.org/wiki/Bidirectional_text)
- Build releases in `arm` and `arm64` format in addition to `amd64`
- Build Docker images in `arm` and `arm64` format in addition to `amd64`
- Added possibility to indicate the event is fully online
- Added possibility to search only for online events
- Added possibility to search only in past events
- Detect event, comments and posts languages automatically. Allows setting language
- Allow to change an user's password through the users.modify mix task
- Add instance setting so that only the admin can create groups
- Add instance setting so that only groups can create events
- Added JSON-LD metadata about the event in emails
- Added a quick link to email notification settings at the bottom of emails
- Allow to access Mobilizon with a specific language directly by using `https://instance.tld/lang` where `lang` is a language supported by Mobilizon
### Changed
- Multiple UI improvements, including post, event and participation cards, discussions and emails. The « My Events » page was also redesigned to allow showing events from your groups.
- Various accessibility improvements
- Delete current actor ID as well from local storage when unlogging
- Show a default text for instance contact in default terms text when no instance contact is set
- Only show locatecontrol button in leaflet map when we can do geolocation
- Disable push column in notification settings when push is not available
- Show actual language instead of language code in Users admin view
- Empty old & new passwords fields when successful password change
- Don't link to the group page from admin when actor is suspended
- Warn participants when the event organizer is suspended (and therefore the event cancelled)
- Improve metadata on public page
- Make sure some event action pages (participate remotely or without an account) don't get indexed by search engines
- Only send `Tombstone` element in `Delete` activities, not the whole previous deleted element.
- Make sure `Delete` activity are send correctly to everyone
- Only add address and tags to event icalendar export if they exist
- `master` branch has been renamed to `main`
### Removed
- Support for Elixir < 1.12 and OTP < 22
### Fixed
- Fix tags autocomplete
- Fix config onboarding after LDAP initial connexion
- Fix events pagination on tags page
- Fixed deduplicated files from orphan media being deleted as well
- Fix deleting own account
- Fix search returning user profiles instead of only groups
- Fix federating geo coordinates
- Fix an issue with group activity items when moving resources
- Fix an issue with Identity Picker
- Fix an issue with TagInput
- Fix an issue when leaving a group
- Fix admin settings edition
- Fix an issue when showing public page of suspended group
- Removed non existing page (`/about/mobilizon`) from sitemap
- Fix action logs containing group suspension events
- Fixed group physical address not exposed to ActivityPub
### Security
- Fixed private messages sent as event replies from Mastodon that were shown publically as public comments. They are now discarded.
### Translations
- Czech
- Gaelic
- German
- Indonesian
- Norwegian Nynorsk
- Occitan
- Persian
- Portuguese (Brazil)
- Russian
- Slovenian
- Spanish
## 1.3.2 - 2021-08-23
### Fixed
@ -57,7 +734,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Fixed links contained in event & post description that didn't open in new tabs
- Add back missing RSS/ical links on public group pages
- Add back missing RSS/ical links on public group pages
- Fixed links to Framacolibri forum
- Fixed drafts and restricted visibility events & posts listed on group page
- Fixed notification page on Safari
@ -79,7 +756,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed token refreshment issues
- Fixed search from 404 page
### Translations
- Catalan
@ -105,9 +781,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed group discussions with deleted comments
## 1.2.2 - 2021-07-01
### Changed
- Improved UI for participations when message is too long
- Improved UI for participations when message is too long
### Fixed
@ -115,7 +792,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed crash when trying to notify activities not from groups
- Fixed imagemagick missing from Dockerfile
- Fixed push notifications for group, members & post activities
- Fixed ellipsis in DiscussionListView
- Fixed ellipsis in DiscussionListView
- Fixed submission button for posts not visible on mobile
- Fixed remote profile suspension
@ -131,6 +808,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed compatibility check in Notification section for service workers
## 1.2.0 - 2021-06-29
### Added
- **Notifications for various group and event activity, both by email and browser push notifications. Daily and weekly digests are also available.**
@ -145,7 +823,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Various improvements to mobile views**
- Make JWT access tokens short-lived
- Disabled Cldr warning that the `Cldr.Plug.AcceptLanguage` plug didn't many any known locale
- Replaced GraphiQL web interface with graphql-playground
- Replaced GraphiQL web interface with graphql-playground
### Removed
@ -305,7 +983,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Added an unique index on the addresses url
- Added org.opencontainers.image.source annotation to the Docker image
- Added org.opencontainers.image.source annotation to the Docker image
- Improved the moderation action logs interface
### Fixes
@ -426,7 +1104,7 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
- Fixed getting metadata from tweets when creating a resource
- Fixed bad handling of duplicate usernames
- Fixed handling of bad URIs to proxify
- Fixed creating discussion with title containing only spaces
- Fixed creating discussion with title containing only spaces
- Fixed registering new user account with same email as unconfirmed
- Fixed handling changing default actor unlogged
- Fixed handling getting organized events from an actor when not authorized
@ -498,6 +1176,7 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
- Hungarian
- Russian
- Spanish
## 1.1.0-rc.1 - 2021-03-29
### Added
@ -523,7 +1202,7 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
- Fixed getting metadata from tweets when creating a resource
- Fixed bad handling of duplicate usernames
- Fixed handling of bad URIs to proxify
- Fixed creating discussion with title containing only spaces
- Fixed creating discussion with title containing only spaces
- Fixed registering new user account with same email as unconfirmed
- Fixed handling changing default actor unlogged
- Fixed handling getting organized events from an actor when not authorized
@ -545,11 +1224,13 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
## 1.1.0-beta.6 - 2021-03-17
### Fixed
- Fixed a typo in range/radius showing the wrong radius for close events on homepage
## 1.1.0-beta.5 - 2021-03-17
### Fixed
- Fixed a typo in range/radius preventing close events from showing up
## 1.1.0-beta.4 - 2021-03-17
@ -563,15 +1244,18 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
## 1.1.0-beta.3 - 2021-03-16
### Fixed
- Handle ActivityPub Fetcher returning text that's not JSON
- Fix accessing a group profile when not a member
## 1.1.0-beta.2 - 2021-03-16
### Fixed
- Fixed geospatial configuration only being evaluated at compile-time, not at runtime
### Translations
- Slovenian
## 1.1.0-beta.1 - 2021-03-10
@ -713,23 +1397,23 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
### Special operations
* **Reattach media files to their entity.**
- **Reattach media files to their entity.**
When media files were uploaded and added in events and posts bodies, they were only attached to the profile that uploaded them, not to the event or post. This task attaches them back to their entity so that the command to clean orphan media files doesn't remove them.
* Source install
- Source install
`MIX_ENV=prod mix mobilizon.maintenance.fix_unattached_media_in_body`
* Docker
- Docker
`docker-compose exec mobilizon mobilizon_ctl maintenance.fix_unattached_media_in_body`
* **Refresh remote profiles to save avatars locally**
- **Refresh remote profiles to save avatars locally**
Profile avatars and banners were previously only proxified and cached. Now we save them locally. Refreshing all remote actors will save profile media locally instead.
* Source install
- Source install
`MIX_ENV=prod mix mobilizon.actors.refresh --all`
* Docker
- Docker
`docker-compose exec mobilizon mobilizon_ctl actors.refresh --all`
* **imagemagick and webp are now a required dependency** to build Mobilizon.
- **imagemagick and webp are now a required dependency** to build Mobilizon.
Optimized versions of Mobilizon's pictures are now produced during front-end build.
See [the documentation](https://docs.joinmobilizon.org/administration/dependencies/#misc) to make sure these dependencies are installed.
@ -772,7 +1456,7 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
- Fixed error message not showing up when you are already an anonymous participant for an event
- Fixed error message not showing up when you pick an username already in user for a new profile or a group
- Fixed translations not fallbacking properly to english when not found
-
-
### Security
@ -781,6 +1465,7 @@ This version introduces a new way to install and host Mobilizon : Elixir releas
### Translations
Updated translations:
- Catalan
- Dutch
- English
@ -953,20 +1638,21 @@ Updated translations:
### Special operations
* We added `application/ld+json` as acceptable MIME type for ActivityPub requests, so you'll need to recompile the `mime` library we use before recompiling Mobilizon:
```
MIX_ENV=prod mix deps.clean mime --build
```
- We added `application/ld+json` as acceptable MIME type for ActivityPub requests, so you'll need to recompile the `mime` library we use before recompiling Mobilizon:
* The [nginx configuration](https://framagit.org/framasoft/mobilizon/-/blob/master/support/nginx/mobilizon.conf) has been changed with improvements and support for custom error pages.
```
MIX_ENV=prod mix deps.clean mime --build
```
* The cmake dependency has been added (see [our documentation](https://docs.joinmobilizon.org/administration/dependencies/#basic-tools))
- The [nginx configuration](https://framagit.org/framasoft/mobilizon/-/blob/main/support/nginx/mobilizon.conf) has been changed with improvements and support for custom error pages.
- The cmake dependency has been added (see [our documentation](https://docs.joinmobilizon.org/administration/dependencies/#basic-tools))
### Added
- Possibility to login using LDAP
- Possibility to login using OAuth providers
- Enabled group features in production mode
- Enabled group features in production mode
- including posts (that can be public, unlisted, or restricted to your group members)
- resources (collections of links, with folders, accessible to your group members)
- discussions (group private and organized chats)
@ -990,20 +1676,22 @@ Updated translations:
### Security
- Fix group settings being accessible and editable by non-group-admins (thx @pigpig for reporting this responsibly)
- Fix events being editable by profiles without permissions (thx @pigpig for reporting this responsibly)
- Fix events being editable by profiles without permissions (thx @pigpig for reporting this responsibly)
## [1.0.0-beta.3] - 2020-06-24
### Special operations
Config has moved from `.env` files to a more traditional way to handle things in the Elixir world, with `.exs` files.
To migrate existing configuration, you can simply run `mix mobilizon.instance gen` and fill in the adequate values previously in `.env` files (you don't need to perform the operations to create the database).
A minimal file template [is available](https://framagit.org/framasoft/mobilizon/blob/master/priv/templates/config.template.eex) to check for missing configuration.
A minimal file template [is available](https://framagit.org/framasoft/mobilizon/blob/main/priv/templates/config.template.eex) to check for missing configuration.
Also make sure to remove the `EnvironmentFile=` line from the systemd service and set `Environment=MIX_ENV=prod` instead. See [the updated file](https://framagit.org/framasoft/mobilizon/blob/master/support/systemd/mobilizon.service).
Also make sure to remove the `EnvironmentFile=` line from the systemd service and set `Environment=MIX_ENV=prod` instead. See [the updated file](https://framagit.org/framasoft/mobilizon/blob/main/support/systemd/mobilizon.service).
### Added
- Possibility to participate to an event without an account (confirmation through email required)
- Possibility to participate to a remote event (being redirected by providing federated identity)
- Possibility to add a note as a participant when event participation is manually validated (required when participating without an account)
@ -1020,6 +1708,7 @@ Also make sure to remove the `EnvironmentFile=` line from the systemd service an
- Allow user to change language
### Changed
- Configuration handling (see above)
- Improved a bit color theme
- Signature validation also now checks if `Date` header has acceptable values
@ -1030,6 +1719,7 @@ Also make sure to remove the `EnvironmentFile=` line from the systemd service an
- Improved public event page
### Fixed
- Fixed URL search
- Fixed content accessed through URL search being public
- Fix event links in some emails
@ -1037,17 +1727,21 @@ Also make sure to remove the `EnvironmentFile=` line from the systemd service an
## [1.0.0-beta.2] - 2019-12-18
### Special operations
These two operations couldn't be handled during migrations.
They are optional, but you won't be able to search or get participant stats on existing events if they are not executed.
These commands will be removed in Mobilizon 1.0.0-beta.3.
In order to populate search index for existing events, you need to run the following command (with prod environment):
* `mix mobilizon.setup_search`
- `mix mobilizon.setup_search`
In order to move participant stats to the event table for existing events, you need to run the following command (with prod environment):
* `mix mobilizon.move_participant_stats`
- `mix mobilizon.move_participant_stats`
### Added
- Federation is active
- Added an interface for admins to view and manage instance followers and followings
- Ability to comment below events
@ -1072,6 +1766,7 @@ In order to move participant stats to the event table for existing events, you n
- Upgraded frontend and backend dependencies
### Changed
- Move participant stats to event table **(read special instructions above)**
- Limit length (20 characters) and number (10) of tags allowed
- Added some backend changes and validation for field length
@ -1085,6 +1780,7 @@ In order to move participant stats to the event table for existing events, you n
- Also consider the PeerTube `CommentsEnabled` property to know if you can reply to an event
### Fixed
- Fix event URL validation and check if hostname is correct before showing it
- Fix participations stats on the MyEvents page
- Fix event description lists margin
@ -1114,8 +1810,11 @@ In order to move participant stats to the event table for existing events, you n
- Fixed event HTML representation when `GET` request has no `Accept` header
### Security
- Sanitize event title to avoid XSS
## [1.0.0-beta.1] - 2019-10-15
### Added
- Initial release

View file

@ -21,7 +21,21 @@ test: stop
@bash docker/message.sh "Running tests"
docker-compose -f docker-compose.yml -f docker-compose.test.yml run api mix test $(only)
@bash docker/message.sh "Done running tests"
format:
format:
docker-compose run --rm api bash -c "mix format && mix credo --strict"
@bash docker/message.sh "Code is now ready to commit :)"
dev: dev-setup dev-start
dev-start: dev-stop
@bash docker/message.sh "Start development server"
docker-compose -f ./docker-compose.dev.yml up -d api
docker-compose -f ./docker-compose.dev.yml exec api bash -c 'yarn --cwd "js"; yarn --cwd "js" serve'
dev-setup: dev-stop
@bash docker/message.sh "Setup dependencies"
docker-compose -f ./docker-compose.dev.yml run --rm api bash -c 'mix deps.get; mix ecto.create; mix ecto.migrate'
dev-stop:
@bash docker/message.sh "Stopping Mobilizon"
docker-compose -f ./docker-compose.dev.yml down
@bash docker/message.sh "Mobilizon is stopped"
target: init

View file

@ -1,37 +1,182 @@
# Upgrading from 2.0 to 2.1
## Mailer library change
### Docker
The change is already applied. You may remove the `MOBILIZON_SMTP_HOSTNAME` environment key which is not used anymore.
### Release and source mode
In your configuration file under `config :mobilizon, Mobilizon.Web.Email.Mailer`,
- Change `Bamboo.SMTPAdapter` to `Swoosh.Adapters.SMTP`,
- rename the `server` key to `relay`
- remove the `hostname` key,
- the default value of the username and password fields is an empty string and no longer `nil`.
```diff
config :mobilizon, Mobilizon.Web.Email.Mailer,
- adapter: Bamboo.SMTPAdapter,
+ adapter: Swoosh.Adapters.SMTP,
- server: "localhost",
+ relay: "localhost",
- hostname: "localhost",
# usually 25, 465 or 587
port: 25,
- username: nil,
+ username: "",
- password: nil,
+ password: "",
# can be `:always` or `:never`
tls: :if_available,
allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"],
retries: 1,
# can be `true`
no_mx_lookups: false,
# can be `:always`. If your smtp relay requires authentication set it to `:always`.
auth: :if_available
```
# Upgrading from 1.3 to 2.0
Requirements dependencies depend on the way Mobilizon is installed.
## New Elixir version requirement
### Docker and Release install
You are already using latest Elixir version in the release tarball and Docker images.
### Source install
**Elixir 1.12 and Erlang OTP 22 are now required**. If your distribution or the repositories from Erlang Solutions don't provide these versions, you need to uninstall the current versions and install [Elixir](https://github.com/asdf-vm/asdf-elixir) through the [ASDF tool](https://asdf-vm.com/).
## Geographic timezone data
Mobilizon 2.0 uses data based on [timezone-boundary-builder](https://github.com/evansiroky/timezone-boundary-builder) (which is based itself on OpenStreetMap data) to determine the timezone of an event automatically, based on it's geocoordinates. However, this needs ~700Mio of disk, so we don't redistribute data directly, depending on the case. It's possible to skip this part, but users will need to manually pick the timezone for every event they created when it has a different timezone from their own.
### Docker install
The geographic timezone data is already bundled into the image, you have nothing to do.
### Release install
In order to keep the release tarballs light, the geographic timezone data is not bundled directly. You need to download the data :
- either raw from Github, but **requires an extra ~1Gio of memory** to process the data
```sh
sudo -u mobilizon mkdir /var/lib/mobilizon/timezones
sudo -u mobilizon ./bin/mobilizon_ctl tz_world.update
```
- either already processed from our own distribution server
```sh
sudo -u mobilizon mkdir /var/lib/mobilizon/timezones
sudo -u mobilizon curl -L 'https://packages.joinmobilizon.org/tz_world/timezones-geodata.dets' -o /var/lib/mobilizon/timezones/timezones-geodata.dets
```
In both cases, ~700Mio of disk will be used. You may use the following configuration to specify where the data is expected if you decide to change it from the default location (`/var/lib/mobilizon/timezones`) :
```elixir
config :tz_world, data_dir: "/some/place"
```
### Source install
You need to download the data :
- either raw from Github, but **requires an extra ~1Gio of memory** to process the data
```sh
sudo -u mobilizon mkdir /var/lib/mobilizon/timezones
sudo -u mobilizon mix mobilizon.tz_world.update
```
- either already processed from our own distribution server
```sh
sudo -u mobilizon mkdir /var/lib/mobilizon/timezones
sudo -u mobilizon curl -L 'https://packages.joinmobilizon.org/tz_world/timezones-geodata.dets' -o /var/lib/mobilizon/timezones/timezones-geodata.dets
```
In both cases, ~700Mio of disk will be used. You may use the following configuration to specify where the data is expected:
```elixir
config :tz_world, data_dir: "/some/place"
```
## Exports folder
Create the folder for default CSV export:
```sh
sudo -u mobilizon mkdir -p /var/lib/mobilizon/uploads/exports/csv
```
This path can be configured, see [the dedicated docs page about this](https://docs.joinmobilizon.org/administration/configure/exports/).
Files in this folder are temporary and are cleaned once an hour.
## New optional dependencies
These are optional, installing them will allow Mobilizon to export to PDF and ODS as well. Mobilizon 2.0 allows to export the participant list, but more is planned.
### Docker
Everything is included in our Docker image.
### Release and source install
New optional Python dependencies:
- `Python` >= 3.6
- `weasyprint` for PDF export (with [a few extra dependencies](https://doc.courtbouillon.org/weasyprint/stable/first_steps.html))
- `pyexcel-ods3` for ODS export (no extra dependencies)
Both can be installed through pip. You need to enable and configure exports for PDF and ODS in the configuration afterwards. Read [the dedicated docs page about this](https://docs.joinmobilizon.org/administration/configure/exports/).
# Upgrading from 1.0 to 1.1
The 1.1 version of Mobilizon brings Elixir releases support. An Elixir release is a self-contained directory that contains all of Mobilizon's code (front-end and backend), it's dependencies, as well as the Erlang Virtual Machine and runtime (only the parts you need). As long as the release has been assembled on the same OS and architecture, it can be deploy and run straight away. [Read more about releases](https://elixir-lang.org/getting-started/mix-otp/config-and-releases.html#releases).
## Comparison
Migrating to releases means:
* You only get a precompiled binary, so you avoid compilation times when updating
* No need to have Elixir/NodeJS installed on the system
* Code/data/config location is more common (/opt, /var/lib, /etc)
* More efficient, as only what you need from the Elixir/Erlang standard libraries is included and all of the code is directly preloaded
* You can't hardcode modifications in Mobilizon's code
- You only get a precompiled binary, so you avoid compilation times when updating
- No need to have Elixir/NodeJS installed on the system
- Code/data/config location is more common (/opt, /var/lib, /etc)
- More efficient, as only what you need from the Elixir/Erlang standard libraries is included and all of the code is directly preloaded
- You can't hardcode modifications in Mobilizon's code
Staying on source releases means:
* You need to recompile everything with each update
* Compiling frontend and backend has higher system requirements than just running Mobilizon
* You can change things in Mobilizon's code and recompile right away to test changes
- You need to recompile everything with each update
- Compiling frontend and backend has higher system requirements than just running Mobilizon
- You can change things in Mobilizon's code and recompile right away to test changes
## Releases
If you want to migrate to releases, [we provide a full guide](https://docs.joinmobilizon.org/administration/upgrading/source_to_release/). You may do this at any time.
## Source install
To stay on a source release, you just need to check the following things:
* Rename your configuration file `config/prod.secret.exs` to `config/runtime.exs`.
* If your config file includes `server: true` under `Mobilizon.Web.Endpoint`, remove it.
```diff
config :mobilizon, Mobilizon.Web.Endpoint,
- server: true,
```
* The uploads default directory is now `/var/lib/mobilizon/uploads`. To keep it in the previous `uploads/` directory, just add the following line to `config/runtime.exs`:
- Rename your configuration file `config/prod.secret.exs` to `config/runtime.exs`.
- If your config file includes `server: true` under `Mobilizon.Web.Endpoint`, remove it.
```diff
config :mobilizon, Mobilizon.Web.Endpoint,
- server: true,
```
- The uploads default directory is now `/var/lib/mobilizon/uploads`. To keep it in the previous `uploads/` directory, just add the following line to `config/runtime.exs`:
```elixir
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "uploads"
```
Or you may use any other directory where the `mobilizon` user has write permissions.
* The GeoIP database default directory is now `/var/lib/mobilizon/geo/GeoLite2-City.mmdb`. To keep it in the previous `priv/data/GeoLite2-City.mmdb` directory, just add the following line to `config/runtime.exs`:
- The GeoIP database default directory is now `/var/lib/mobilizon/geo/GeoLite2-City.mmdb`. To keep it in the previous `priv/data/GeoLite2-City.mmdb` directory, just add the following line to `config/runtime.exs`:
```elixir
config :geolix, databases: [
%{
@ -41,4 +186,4 @@ To stay on a source release, you just need to check the following things:
}
]
```
Or you may use any other directory where the `mobilizon` user has read permissions.
Or you may use any other directory where the `mobilizon` user has read permissions.

View file

@ -88,6 +88,10 @@ config :mobilizon, Mobilizon.Web.Upload,
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "/var/lib/mobilizon/uploads"
config :tz_world, data_dir: "/var/lib/mobilizon/timezones"
config :mobilizon, Timex.Gettext, default_locale: "en"
config :mobilizon, :media_proxy,
enabled: true,
proxy_opts: [
@ -102,13 +106,16 @@ config :mobilizon, :media_proxy,
]
config :mobilizon, Mobilizon.Web.Email.Mailer,
adapter: Bamboo.SMTPAdapter,
server: "localhost",
hostname: "localhost",
adapter: Swoosh.Adapters.SMTP,
relay: "localhost",
# usually 25, 465 or 587
port: 25,
username: nil,
password: nil,
username: "",
password: "",
# can be `:always` or `:never`
auth: :if_available,
# can be `true`
ssl: false,
# can be `:always` or `:never`
tls: :if_available,
allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"],
@ -181,7 +188,13 @@ config :phoenix, :filter_parameters, ["password", "token"]
config :absinthe, schema: Mobilizon.GraphQL.Schema
config :absinthe, Absinthe.Logger, filter_variables: ["token", "password", "secret"]
config :mobilizon, Mobilizon.Web.Gettext, one_module_per_locale: true
config :codepagex, :encodings, [
:ascii,
~r[iso8859]i,
:"VENDORS/MICSFT/WINDOWS/CP1252"
]
config :mobilizon, Mobilizon.Web.Gettext, split_module_by: [:locale, :domain]
config :ex_cldr,
default_locale: "en",
@ -194,14 +207,16 @@ config :mobilizon, :cldr,
locales: [
"fr",
"en",
"ru"
"ru",
"ar"
]
config :mobilizon, :activitypub,
# One day
actor_stale_period: 3_600 * 48,
actor_key_rotation_delay: 3_600 * 48,
sign_object_fetches: true
sign_object_fetches: true,
stale_actor_search_exclusion_after: 3_600 * 24 * 7
config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geospatial.Nominatim
@ -285,6 +300,7 @@ config :mobilizon, Oban,
crontab: [
{"@hourly", Mobilizon.Service.Workers.BuildSiteMap, queue: :background},
{"17 4 * * *", Mobilizon.Service.Workers.RefreshGroups, queue: :background},
{"36 * * * *", Mobilizon.Service.Workers.RefreshInstances, queue: :background},
{"@hourly", Mobilizon.Service.Workers.CleanOrphanMediaWorker, queue: :background},
{"@hourly", Mobilizon.Service.Workers.CleanUnconfirmedUsersWorker, queue: :background},
{"@hourly", Mobilizon.Service.Workers.ExportCleanerWorker, queue: :background},
@ -324,10 +340,13 @@ config :mobilizon, Mobilizon.Service.Notifier.Email, enabled: true
config :mobilizon, Mobilizon.Service.Notifier.Push, enabled: true
config :mobilizon, :exports,
path: "/var/lib/mobilizon/uploads/exports",
formats: [
Mobilizon.Service.Export.Participants.CSV
]
config :mobilizon, :analytics, providers: []
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{config_env()}.exs"

View file

@ -58,7 +58,7 @@ config :logger, :console, format: "[$level] $message\n", level: :debug
config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geospatial.Nominatim
config :mobilizon, Mobilizon.Web.Gettext, allowed_locales: ["fr", "en", "ar"]
config :mobilizon, Mobilizon.Web.Gettext, allowed_locales: ["fr", "en", "ru", "ar"]
# Set a higher stacktrace during development. Avoid configuring such
# in production as building large stacktraces may be expensive.
@ -67,7 +67,7 @@ config :phoenix, :stacktrace_depth, 20
# Initialize plugs at runtime for faster development compilation
config :phoenix, :plug_init_mode, :runtime
config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Bamboo.LocalAdapter
config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Swoosh.Adapters.Local
# Configure your database
config :mobilizon, Mobilizon.Storage.Repo,
@ -94,6 +94,10 @@ config :mobilizon, Mobilizon.Web.Auth.Guardian,
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "uploads"
config :mobilizon, :exports, path: "uploads/exports"
config :tz_world, data_dir: "_build/dev/lib/tz_world/priv"
config :mobilizon, :anonymous,
reports: [
allowed: true

View file

@ -33,9 +33,6 @@ config :mobilizon, :instance,
email_from: System.get_env("MOBILIZON_INSTANCE_EMAIL", "noreply@mobilizon.lan"),
email_reply_to: System.get_env("MOBILIZON_REPLY_EMAIL", "noreply@mobilizon.lan")
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local,
uploads: System.get_env("MOBILIZON_UPLOADS", "/app/uploads")
config :mobilizon, Mobilizon.Storage.Repo,
adapter: Ecto.Adapters.Postgres,
username: System.get_env("MOBILIZON_DATABASE_USERNAME", "username"),
@ -46,9 +43,8 @@ config :mobilizon, Mobilizon.Storage.Repo,
pool_size: 10
config :mobilizon, Mobilizon.Web.Email.Mailer,
adapter: Bamboo.SMTPAdapter,
server: System.get_env("MOBILIZON_SMTP_SERVER", "localhost"),
hostname: System.get_env("MOBILIZON_SMTP_HOSTNAME", "localhost"),
adapter: Swoosh.Adapters.SMTP,
relay: System.get_env("MOBILIZON_SMTP_SERVER", "localhost"),
port: System.get_env("MOBILIZON_SMTP_PORT", "25"),
username: System.get_env("MOBILIZON_SMTP_USERNAME", nil),
password: System.get_env("MOBILIZON_SMTP_PASSWORD", nil),
@ -68,4 +64,16 @@ config :geolix,
}
]
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "/var/lib/mobilizon/uploads"
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local,
uploads: System.get_env("MOBILIZON_UPLOADS", "/var/lib/mobilizon/uploads")
config :mobilizon, :exports,
path: System.get_env("MOBILIZON_UPLOADS_EXPORTS", "/var/lib/mobilizon/uploads/exports"),
formats: [
Mobilizon.Service.Export.Participants.CSV,
Mobilizon.Service.Export.Participants.PDF,
Mobilizon.Service.Export.Participants.ODS
]
config :tz_world,
data_dir: System.get_env("MOBILIZON_TIMEZONES_DIR", "/var/lib/mobilizon/timezones")

View file

@ -18,31 +18,27 @@ config :mobilizon, :cldr,
locales: [
"ar",
"be",
"bn",
"ca",
"cs",
"cy",
"de",
"en",
"es",
"fa",
"fi",
"fr",
"gd",
"gl",
"hu",
"id",
"it",
"ja",
"nl",
"nn",
"oc",
"pl",
"pt",
"ru",
"sv"
"sv",
"zh_Hant"
]
cond do
System.get_env("INSTANCE_CONFIG") &&
File.exists?("./config/#{System.get_env("INSTANCE_CONFIG")}") ->
import_config System.get_env("INSTANCE_CONFIG")
true ->
:ok
end

View file

@ -54,21 +54,28 @@ config :mobilizon, :ldap,
bind_uid: System.get_env("LDAP_BIND_UID"),
bind_password: System.get_env("LDAP_BIND_PASSWORD")
config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Bamboo.TestAdapter
config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Swoosh.Adapters.Test
config :mobilizon, Mobilizon.Web.Upload, filters: [], link_name: false
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "test/uploads"
config :exvcr,
vcr_cassette_library_dir: "test/fixtures/vcr_cassettes"
config :mobilizon, :exports, path: "test/uploads/exports"
config :tz_world, data_dir: "_build/test/lib/tz_world/priv"
config :tesla, Mobilizon.Service.HTTP.ActivityPub,
adapter: Mobilizon.Service.HTTP.ActivityPub.Mock
config :tesla, Mobilizon.Service.HTTP.WebfingerClient,
adapter: Mobilizon.Service.HTTP.WebfingerClient.Mock
config :tesla, Mobilizon.Service.HTTP.GeospatialClient,
adapter: Mobilizon.Service.HTTP.GeospatialClient.Mock
config :tesla, Mobilizon.Service.HTTP.HostMetaClient,
adapter: Mobilizon.Service.HTTP.HostMetaClient.Mock
config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geospatial.Mock
config :mobilizon, Oban, queues: false, plugins: false

41
docker-compose.dev.yml Normal file
View file

@ -0,0 +1,41 @@
version: "3.2"
services:
postgres:
container_name: mobilizon_db
restart: unless-stopped
image: postgis/postgis
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_PORT
volumes:
- pgdata:/var/lib/postgresql/data
api:
container_name: mobilizon_api
restart: unless-stopped
build: .
volumes:
- ".:/app"
ports:
- 4000:4000
depends_on:
- postgres
environment:
MIX_ENV: "dev"
DOCKER: "true"
MOBILIZON_INSTANCE_NAME: My Mobilizon Instance
MOBILIZON_INSTANCE_HOST: localhost
MOBILIZON_INSTANCE_HOST_PORT: 4000
MOBILIZON_INSTANCE_PORT: 4000
MOBILIZON_INSTANCE_EMAIL: noreply@mobilizon.me
MOBILIZON_INSTANCE_REGISTRATIONS_OPEN: "true"
MOBILIZON_DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
MOBILIZON_DATABASE_USERNAME: ${POSTGRES_USER}
MOBILIZON_DATABASE_DBNAME: ${POSTGRES_DB}
MOBILIZON_DATABASE_HOST: postgres
MOBILIZON_DATABASE_PORT: ${POSTGRES_PORT}
command: sh -c "mix phx.server"
volumes:
pgdata:
.:

View file

@ -1,4 +1,4 @@
version: '3'
version: "3.2"
services:
postgres:

View file

@ -7,11 +7,12 @@ COPY js .
ENV CYPRESS_INSTALL_BINARY 0
RUN yarn install \
# Network timeout because it's slow when cross-compiling
RUN yarn install --network-timeout 100000 \
&& yarn run build
# Then, build the application binary
FROM elixir:1.12-alpine AS builder
FROM elixir:1.13-alpine AS builder
RUN apk add --no-cache build-base git cmake
@ -29,7 +30,7 @@ COPY rel ./rel
COPY support ./support
COPY --from=assets ./priv/static ./priv/static
RUN mix phx.digest \
RUN mix phx.digest.clean --all \
&& mix release
# Finally setup the app
@ -48,9 +49,14 @@ LABEL org.opencontainers.image.title="mobilizon" \
org.opencontainers.image.revision=$VCS_REF \
org.opencontainers.image.created=$BUILD_DATE
RUN apk add --no-cache openssl ca-certificates ncurses-libs file postgresql-client libgcc libstdc++ imagemagick
RUN apk add --no-cache curl openssl ca-certificates ncurses-libs file postgresql-client libgcc libstdc++ imagemagick python3 py3-pip py3-pillow py3-cffi py3-brotli gcc g++ musl-dev python3-dev pango libxslt-dev ttf-cantarell
RUN pip install weasyprint pyexcel-ods3
RUN mkdir -p /app/uploads && chown nobody:nobody /app/uploads
RUN mkdir -p /var/lib/mobilizon/uploads && chown nobody:nobody /var/lib/mobilizon/uploads
RUN mkdir -p /var/lib/mobilizon/uploads/exports/{csv,pdf,ods} && chown -R nobody:nobody /var/lib/mobilizon/uploads/exports
RUN mkdir -p /var/lib/mobilizon/timezones
RUN curl -L 'https://packages.joinmobilizon.org/tz_world/timezones-geodata.dets' -o /var/lib/mobilizon/timezones/timezones-geodata.dets
RUN chown nobody:nobody /var/lib/mobilizon/timezones
RUN mkdir -p /etc/mobilizon && chown nobody:nobody /etc/mobilizon
USER nobody

View file

@ -1,15 +1,11 @@
FROM elixir:latest
LABEL maintainer="Thomas Citharel <tcit@tcit.fr>"
ENV REFRESHED_AT=2021-10-04
ENV REFRESHED_AT=2022-04-06
RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool python3-pip python3-setuptools
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash && apt-get install nodejs -yq
RUN npm install -g yarn wait-on
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN mix local.hex --force && mix local.rebar --force
# Weasyprint 53 requires pango >= 1.44.0, which is not available in Stretch.
# TODO: Remove the version requirement when elixir:latest is based on Bullseye
# https://github.com/erlang/docker-erlang-otp/issues/362
# https://github.com/Kozea/WeasyPrint/issues/1384
RUN pip3 install -Iv weasyprint==52 pyexcel_ods3
RUN pip3 install -Iv weasyprint pyexcel_ods3
RUN curl https://dbip.mirror.framasoft.org/files/dbip-city-lite-latest.mmdb --output GeoLite2-City.mmdb -s && mkdir -p /usr/share/GeoIP && mv GeoLite2-City.mmdb /usr/share/GeoIP/

View file

@ -9,8 +9,7 @@ module.exports = {
"plugin:vue/essential",
"eslint:recommended",
"@vue/typescript/recommended",
"@vue/prettier",
"@vue/prettier/@typescript-eslint",
"plugin:prettier/recommended",
],
plugins: ["prettier"],
@ -30,7 +29,6 @@ module.exports = {
},
],
"@typescript-eslint/no-explicit-any": "off",
"cypress/no-unnecessary-waiting": "off",
"vue/max-len": [
"off",
{

View file

@ -1 +1,6 @@
{}
{
"trailingComma": "es5",
"semi": true,
"singleQuote": false,
"bracketSpacing": true
}

View file

@ -1,6 +1,6 @@
{
"name": "mobilizon",
"version": "1.3.2",
"version": "2.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
@ -8,7 +8,7 @@
"test:unit": "LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 TZ=UTC vue-cli-service test:unit",
"test:e2e": "vue-cli-service test:e2e",
"lint": "vue-cli-service lint",
"build:assets": "vue-cli-service build",
"build:assets": "vue-cli-service build --report",
"build:pictures": "bash ./scripts/build/pictures.sh"
},
"dependencies": {
@ -16,47 +16,64 @@
"@absinthe/socket-apollo-link": "^0.2.1",
"@apollo/client": "^3.3.16",
"@mdi/font": "^6.1.95",
"@sentry/tracing": "^6.16.1",
"@sentry/vue": "^6.16.1",
"@tailwindcss/line-clamp": "^0.4.0",
"@tiptap/core": "^2.0.0-beta.41",
"@tiptap/extension-blockquote": "^2.0.0-beta.6",
"@tiptap/extension-blockquote": "^2.0.0-beta.25",
"@tiptap/extension-bold": "^2.0.0-beta.24",
"@tiptap/extension-bubble-menu": "^2.0.0-beta.9",
"@tiptap/extension-character-count": "^2.0.0-beta.5",
"@tiptap/extension-history": "^2.0.0-beta.5",
"@tiptap/extension-bullet-list": "^2.0.0-beta.23",
"@tiptap/extension-document": "^2.0.0-beta.15",
"@tiptap/extension-dropcursor": "^2.0.0-beta.25",
"@tiptap/extension-gapcursor": "^2.0.0-beta.33",
"@tiptap/extension-heading": "^2.0.0-beta.23",
"@tiptap/extension-history": "^2.0.0-beta.21",
"@tiptap/extension-image": "^2.0.0-beta.6",
"@tiptap/extension-italic": "^2.0.0-beta.24",
"@tiptap/extension-link": "^2.0.0-beta.8",
"@tiptap/extension-list-item": "^2.0.0-beta.6",
"@tiptap/extension-list-item": "^2.0.0-beta.19",
"@tiptap/extension-mention": "^2.0.0-beta.42",
"@tiptap/extension-ordered-list": "^2.0.0-beta.6",
"@tiptap/extension-ordered-list": "^2.0.0-beta.24",
"@tiptap/extension-paragraph": "^2.0.0-beta.22",
"@tiptap/extension-strike": "^2.0.0-beta.26",
"@tiptap/extension-text": "^2.0.0-beta.15",
"@tiptap/extension-underline": "^2.0.0-beta.7",
"@tiptap/starter-kit": "^2.0.0-beta.37",
"@tiptap/vue-2": "^2.0.0-beta.21",
"@vue-a11y/announcer": "^2.1.0",
"@vue-a11y/skip-to": "^2.1.2",
"@vue/apollo-option": "4.0.0-alpha.11",
"apollo-absinthe-upload-link": "^1.5.0",
"autoprefixer": "^10",
"blurhash": "^1.1.3",
"buefy": "^0.9.0",
"bulma-divider": "^0.2.0",
"core-js": "^3.6.4",
"date-fns": "^2.16.0",
"date-fns-tz": "^1.1.6",
"graphql": "^15.0.0",
"graphql": "^16.0.0",
"graphql-tag": "^2.10.3",
"intersection-observer": "^0.12.0",
"jwt-decode": "^3.1.2",
"leaflet": "^1.4.0",
"leaflet.locatecontrol": "^0.74.0",
"leaflet.locatecontrol": "^0.76.0",
"lodash": "^4.17.11",
"ngeohash": "^0.6.3",
"p-debounce": "^4.0.0",
"phoenix": "^1.6",
"postcss": "^8",
"register-service-worker": "^1.7.2",
"sanitize-html": "^2.5.3",
"tailwindcss": "^3",
"tippy.js": "^6.2.3",
"unfetch": "^4.2.0",
"v-tooltip": "^2.1.3",
"vue": "^2.6.11",
"vue-class-component": "^7.2.3",
"vue-i18n": "^8.14.0",
"vue-matomo": "^4.1.0",
"vue-meta": "^2.3.1",
"vue-plausible": "^1.3.1",
"vue-property-decorator": "^9.0.0",
"vue-router": "^3.1.6",
"vue-scrollto": "^2.17.1",
@ -64,9 +81,10 @@
"vuedraggable": "^2.24.3"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.1.0",
"@types/jest": "^27.0.2",
"@types/leaflet": "^1.5.2",
"@types/leaflet.locatecontrol": "^0.60.7",
"@types/leaflet.locatecontrol": "^0.74",
"@types/lodash": "^4.14.141",
"@types/ngeohash": "^0.6.2",
"@types/phoenix": "^1.5.2",
@ -74,37 +92,36 @@
"@types/prosemirror-model": "^1.7.2",
"@types/prosemirror-state": "^1.2.4",
"@types/prosemirror-view": "^1.11.4",
"@typescript-eslint/eslint-plugin": "^4.18.0",
"@typescript-eslint/parser": "^4.18.0",
"@vue/cli-plugin-babel": "~5.0.0-beta.7",
"@vue/cli-plugin-e2e-cypress": "~5.0.0-beta.7",
"@vue/cli-plugin-eslint": "~5.0.0-beta.7",
"@vue/cli-plugin-pwa": "~5.0.0-beta.7",
"@vue/cli-plugin-router": "~5.0.0-beta.7",
"@vue/cli-plugin-typescript": "~5.0.0-beta.7",
"@vue/cli-plugin-unit-jest": "~5.0.0-beta.7",
"@vue/cli-service": "~5.0.0-beta.7",
"@vue/eslint-config-prettier": "^6.0.0",
"@vue/eslint-config-typescript": "^7.0.0",
"@types/sanitize-html": "^2.5.0",
"@typescript-eslint/eslint-plugin": "^5.3.0",
"@typescript-eslint/parser": "^5.3.0",
"@vue/cli-plugin-babel": "~5.0.4",
"@vue/cli-plugin-eslint": "~5.0.4",
"@vue/cli-plugin-pwa": "~5.0.4",
"@vue/cli-plugin-router": "~5.0.4",
"@vue/cli-plugin-typescript": "~5.0.4",
"@vue/cli-plugin-unit-jest": "~5.0.4",
"@vue/cli-service": "~5.0.4",
"@vue/eslint-config-typescript": "^10.0.0",
"@vue/test-utils": "^1.1.0",
"@vue/vue2-jest": "^27.0.0-alpha.2",
"@vue/vue2-jest": "^27.0.0-alpha.3",
"@vue/vue3-jest": "^27.0.0-alpha.1",
"cypress": "^8.3.0",
"eslint": "^7.20.0",
"eslint-plugin-cypress": "^2.10.3",
"eslint": "^8.2.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^7.6.0",
"eslint-plugin-vue": "^8.0.3",
"flush-promises": "^1.0.2",
"jest": "^27.1.0",
"jest-junit": "^13.0.0",
"mock-apollo-client": "^1.1.0",
"prettier": "^2.2.1",
"prettier-eslint": "^13.0.0",
"prettier-eslint": "^14.0.0",
"sass": "^1.34.1",
"sass-loader": "^12.0.0",
"ts-jest": "27",
"typescript": "~4.4.3",
"typescript": "~4.5.5",
"vue-cli-plugin-tailwind": "~3.0.0",
"vue-i18n-extract": "^2.0.4",
"vue-template-compiler": "^2.6.11",
"webpack-cli": "^4.7.0"

6
js/postcss.config.js Normal file
View file

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

View file

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100%"
height="100%"
viewBox="0 0 96 105"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
class="svg-logo-solid"
id="svg32"
sodipodi:docname="owncast.svg"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"><metadata
id="metadata38"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs36" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1016"
id="namedview34"
showgrid="false"
inkscape:zoom="7.5619048"
inkscape:cx="48"
inkscape:cy="52.367758"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg32" />
<g
transform="matrix(1.04457,0,0,1.04457,-0.742448,-0.0626735)"
id="g30"
style="fill:#000000">
<g
id="g12"
style="fill:#000000">
<path
d="M91.5,75.35C92.533,72.55 92.583,70 91.65,67.7C90.783,65.567 89.117,63.767 86.65,62.3C84.35,60.967 81.567,60 78.3,59.4C75.333,58.867 72.1,58.633 68.6,58.7C65.233,58.8 61.967,59.167 58.8,59.8C55.767,60.433 53.1,61.233 50.8,62.2C48.533,63.167 46.767,64.217 45.5,65.35C44.233,66.55 43.567,67.783 43.5,69.05C43.4,70.55 44.167,72.167 45.8,73.9C47.3,75.5 49.4,77.067 52.1,78.6C54.8,80.133 57.783,81.45 61.05,82.55C64.55,83.717 68,84.467 71.4,84.8C73.6,85 75.65,85.033 77.55,84.9C79.617,84.7 81.533,84.267 83.3,83.6C85.2,82.867 86.817,81.85 88.15,80.55C89.65,79.117 90.767,77.383 91.5,75.35M70.6,67.5C71.733,68.1 72.567,68.833 73.1,69.7C73.633,70.667 73.75,71.767 73.45,73C73.217,73.867 72.833,74.617 72.3,75.25C71.8,75.817 71.133,76.267 70.3,76.6C69.6,76.9 68.75,77.117 67.75,77.25C66.783,77.35 65.817,77.367 64.85,77.3C63.15,77.2 61.283,76.867 59.25,76.3C57.483,75.767 55.783,75.1 54.15,74.3C52.65,73.567 51.417,72.8 50.45,72C49.517,71.167 49.067,70.433 49.1,69.8C49.167,69.267 49.55,68.75 50.25,68.25C50.95,67.783 51.917,67.367 53.15,67C54.383,66.6 55.75,66.3 57.25,66.1C58.95,65.9 60.567,65.8 62.1,65.8C63.8,65.833 65.333,65.967 66.7,66.2C68.167,66.5 69.467,66.933 70.6,67.5Z"
style="fill:#000000;fill-rule:nonzero"
id="path10" />
</g>
<g
id="g16"
style="fill:#000000">
<path
d="M66.6,15.05C66.467,11.45 65.567,8.45 63.9,6.05C62.133,3.417 59.533,1.617 56.1,0.65C55.333,0.417 54.517,0.25 53.65,0.15C52.883,0.05 52.1,0.033 51.3,0.1C50.567,0.1 49.833,0.183 49.1,0.35C48.467,0.483 47.767,0.7 47,1C44.533,1.967 42.3,3.667 40.3,6.1C38.433,8.3 36.833,11.033 35.5,14.3C34.333,17.067 33.4,20.1 32.7,23.4C32.033,26.5 31.583,29.65 31.35,32.85C31.15,35.75 31.133,38.533 31.3,41.2C31.5,43.833 31.867,46.217 32.4,48.35C33.467,52.717 35.1,55.4 37.3,56.4C37.5,56.5 37.7,56.583 37.9,56.65L39.2,56.85C39.367,56.85 39.617,56.833 39.95,56.8C41.35,56.667 42.933,56.083 44.7,55.05C46.4,54.017 48.183,52.6 50.05,50.8C52.05,48.867 53.983,46.617 55.85,44.05C57.817,41.383 59.567,38.567 61.1,35.6C62.9,32.1 64.283,28.667 65.25,25.3C66.25,21.6 66.7,18.183 66.6,15.05M47.55,23.15C47.883,23.217 48.167,23.3 48.4,23.4C51.1,24.333 52.483,26.483 52.55,29.85C52.583,32.617 51.733,35.8 50,39.4C48.567,42.4 46.85,45.033 44.85,47.3C42.983,49.433 41.417,50.567 40.15,50.7L39.9,50.75L39.45,50.7L39.2,50.6C38.267,50.167 37.617,48.75 37.25,46.35C36.883,43.917 36.9,41.133 37.3,38C37.733,34.5 38.55,31.433 39.75,28.8C41.183,25.667 42.95,23.817 45.05,23.25C45.417,23.15 45.683,23.1 45.85,23.1C46.117,23.067 46.383,23.05 46.65,23.05C46.917,23.05 47.217,23.083 47.55,23.15Z"
style="fill:#000000;fill-rule:nonzero"
id="path14" />
</g>
<g
id="g20"
style="fill:#000000">
<path
d="M2.7,33.6C2.3,34.133 1.967,34.717 1.7,35.35C1.4,36.117 1.183,36.9 1.05,37.7C0.35,40.967 0.733,44.133 2.2,47.2C3.4,49.733 5.333,52.117 8,54.35C10.367,56.317 13.033,57.917 16,59.15C19,60.383 21.617,60.95 23.85,60.85C24.283,60.85 24.75,60.8 25.25,60.7C25.75,60.6 26.167,60.467 26.5,60.3C26.833,60.133 27.15,59.917 27.45,59.65C27.75,59.383 27.983,59.083 28.15,58.75C28.95,57.217 28.733,54.85 27.5,51.65C26.233,48.55 24.317,45.367 21.75,42.1C19.083,38.7 16.3,36.017 13.4,34.05C10.267,31.95 7.617,31.167 5.45,31.7C4.917,31.833 4.417,32.067 3.95,32.4C3.483,32.7 3.067,33.1 2.7,33.6M10.1,43.55C10.267,43.25 10.433,43.017 10.6,42.85C10.767,42.683 10.967,42.533 11.2,42.4C11.467,42.3 11.7,42.233 11.9,42.2C12.967,42 14.317,42.467 15.95,43.6C17.417,44.567 18.883,45.933 20.35,47.7C21.683,49.3 22.75,50.867 23.55,52.4C24.317,53.967 24.55,55.067 24.25,55.7C24.183,55.833 24.1,55.933 24,56C23.9,56.133 23.783,56.217 23.65,56.25C23.583,56.317 23.45,56.367 23.25,56.4L22.7,56.5C21.633,56.567 20.25,56.267 18.55,55.6C16.883,54.933 15.317,54.05 13.85,52.95C12.283,51.783 11.117,50.517 10.35,49.15C9.483,47.583 9.283,46.017 9.75,44.45C9.85,44.117 9.967,43.817 10.1,43.55Z"
style="fill:#000000;fill-rule:nonzero"
id="path18" />
</g>
<g
id="g24"
style="fill:#000000">
<path
d="M34.95,74.2L34.75,74.2C33.717,74.167 32.767,74.517 31.9,75.25C31.1,75.95 30.417,76.95 29.85,78.25C29.35,79.417 29,80.733 28.8,82.2C28.6,83.667 28.567,85.15 28.7,86.65C28.967,89.817 29.9,92.5 31.5,94.7C33.367,97.233 35.967,98.9 39.3,99.7L39.4,99.7L39.7,99.8L39.85,99.8C43.483,100.5 45.917,99.817 47.15,97.75C47.717,96.783 48,95.55 48,94.05C47.967,92.617 47.7,91.05 47.2,89.35C46.7,87.617 46,85.883 45.1,84.15C44.2,82.383 43.183,80.783 42.05,79.35C40.85,77.85 39.65,76.65 38.45,75.75C37.183,74.817 36.017,74.3 34.95,74.2M33.55,80.4C34.083,78.933 34.767,78.233 35.6,78.3L35.65,78.3C36.483,78.4 37.467,79.267 38.6,80.9C39.733,82.533 40.583,84.25 41.15,86.05C41.783,88.017 41.917,89.583 41.55,90.75C41.117,91.983 40.05,92.483 38.35,92.25L38.3,92.25L38.25,92.2L38.1,92.2C36.433,91.867 35.15,91 34.25,89.6C33.483,88.333 33.05,86.8 32.95,85C32.85,83.233 33.05,81.7 33.55,80.4Z"
style="fill:#000000;fill-rule:nonzero"
id="path22" />
</g>
<g
id="g28"
style="fill:#000000">
<path
d="M22.7,69.65C22.4,69.417 22.033,69.217 21.6,69.05C21.167,68.883 20.717,68.767 20.25,68.7C19.817,68.6 19.35,68.533 18.85,68.5C17.417,68.467 16.017,68.683 14.65,69.15C13.317,69.583 12.233,70.233 11.4,71.1C10.567,72.033 10.167,73.067 10.2,74.2C10.233,75.433 10.817,76.767 11.95,78.2C12.25,78.567 12.617,78.967 13.05,79.4C13.383,79.733 13.767,80.033 14.2,80.3C14.533,80.5 14.9,80.683 15.3,80.85C15.767,81.017 16.133,81.1 16.4,81.1C17.6,81.267 18.767,81.017 19.9,80.35C21,79.717 21.95,78.817 22.75,77.65C23.583,76.45 24.1,75.217 24.3,73.95C24.5,72.55 24.25,71.4 23.55,70.5C23.283,70.167 23,69.883 22.7,69.65M21.7,71.7C22,72.1 22.067,72.633 21.9,73.3C21.767,73.933 21.467,74.583 21,75.25C20.533,75.883 20,76.383 19.4,76.75C18.767,77.15 18.15,77.317 17.55,77.25L17,77.15C16.8,77.083 16.617,76.983 16.45,76.85C16.317,76.783 16.133,76.65 15.9,76.45C15.767,76.317 15.6,76.133 15.4,75.9C14.8,75.133 14.567,74.433 14.7,73.8C14.767,73.233 15.117,72.733 15.75,72.3C16.317,71.9 17,71.6 17.8,71.4C18.6,71.2 19.367,71.117 20.1,71.15L20.65,71.2L21.1,71.3C21.233,71.367 21.35,71.433 21.45,71.5L21.7,71.7Z"
style="fill:#000000;fill-rule:nonzero"
id="path26" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.7 KiB

View file

@ -9,7 +9,7 @@
type="is-danger"
:title="$t('Warning').toLocaleUpperCase()"
closable
aria-close-label="Close"
:aria-close-label="$t('Close')"
>
<p>
{{ $t("This is a demonstration site to test Mobilizon.") }}
@ -203,6 +203,16 @@ export default class App extends Vue {
this.interval = undefined;
}
@Watch("config")
async initializeStatistics(config: IConfig) {
if (config) {
const { statistics } = (await import("./services/statistics")) as {
statistics: (config: IConfig, environment: Record<string, any>) => void;
};
statistics(config, { router: this.$router, version: config.version });
}
}
@Watch("$route", { immediate: true })
updateAnnouncement(route: Route): void {
const pageTitle = this.extractPageTitleFromRoute(route);
@ -216,8 +226,12 @@ export default class App extends Vue {
// Set the focus to the router view
// https://marcus.io/blog/accessible-routing-vuejs
setTimeout(() => {
const focusTarget = this.routerView?.$el as HTMLElement;
if (focusTarget) {
const focusTarget = (
this.routerView?.$refs?.componentFocusTarget !== undefined
? this.routerView?.$refs?.componentFocusTarget
: this.routerView?.$el
) as HTMLElement;
if (focusTarget && focusTarget instanceof Element) {
// Make focustarget programmatically focussable
focusTarget.setAttribute("tabindex", "-1");

View file

@ -70,6 +70,9 @@ export const typePolicies: TypePolicies = {
participantStats: { merge: replaceMergePolicy },
},
},
Instance: {
keyFields: ["domain"],
},
RootQueryType: {
fields: {
relayFollowers: paginatedLimitPagination<IFollower>(),

9
js/src/assets/logo.svg Normal file
View file

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60">
<path style="opacity:0;fill:#fea72b;fill-opacity:1;stroke:none;stroke-opacity:0" d="M-5.801-6.164h72.69v72.871h-72.69z" />
<g data-name="Calque 2">
<g data-name="header">
<path d="M26.58 27.06q0 8-4.26 12.3a12.21 12.21 0 0 1-9 3.42 12.21 12.21 0 0 1-9-3.42Q0 35.1 0 27.06q0-8.04 4.26-12.3a12.21 12.21 0 0 1 9-3.42 12.21 12.21 0 0 1 9 3.42q4.32 4.24 4.32 12.3zM13.29 17q-5.67 0-5.67 10.06t5.67 10.08q5.71 0 5.71-10.08T13.29 17z" style="fill:#3a384c;fill-opacity:1" transform="translate(14.627 5.256) scale(1.15671)" />
<path d="M9 6.78a7.37 7.37 0 0 1-.6-3 7.37 7.37 0 0 1 .6-3A8.09 8.09 0 0 1 12.83 0a7.05 7.05 0 0 1 3.69.84 7.37 7.37 0 0 1 .6 3 7.37 7.37 0 0 1-.6 3 7.46 7.46 0 0 1-3.87.84A6.49 6.49 0 0 1 9 6.78z" style="fill:#fff" transform="translate(14.627 5.256) scale(1.15671)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 920 B

View file

@ -0,0 +1,5 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View file

@ -7,10 +7,6 @@
@import "styles/vue-announcer.scss";
@import "styles/vue-skip-to.scss";
// a {
// color: $violet-2;
// }
a.out,
.content a,
.ProseMirror a {
@ -19,18 +15,10 @@ a.out,
text-decoration-thickness: 2px;
}
// input.input {
// border-color: $input-border-color !important;
// }
.section {
padding: 1rem 1% 4rem;
}
figure img.is-rounded {
border: 1px solid #cdcaea;
}
$color-black: #000;
.mention {

View file

@ -1,118 +0,0 @@
<template>
<b-autocomplete
:data="baseData"
:placeholder="$t('Actor')"
v-model="name"
field="preferredUsername"
:loading="$apollo.loading"
check-infinite-scroll
@typing="getAsyncData"
@select="handleSelect"
@infinite-scroll="getAsyncData"
>
<template #default="props">
<div class="media">
<div class="media-left">
<img
width="32"
:src="props.option.avatar.url"
v-if="props.option.avatar"
alt=""
/>
<b-icon v-else icon="account-circle" />
</div>
<div class="media-content">
<span v-if="props.option.name">
{{ props.option.name }}
<br />
<small>{{ `@${props.option.preferredUsername}` }}</small>
<small v-if="props.option.domain">{{
`@${props.option.domain}`
}}</small>
</span>
<span v-else>
{{ `@${props.option.preferredUsername}` }}
</span>
</div>
</div>
</template>
<template slot="footer">
<span class="has-text-grey" v-show="page > totalPages">
Thats it! No more movies found.
</span>
</template>
</b-autocomplete>
</template>
<script lang="ts">
import { Component, Model, Vue, Watch } from "vue-property-decorator";
import debounce from "lodash/debounce";
import { IPerson } from "@/types/actor";
import { SEARCH_PERSONS } from "@/graphql/search";
import { Paginate } from "@/types/paginate";
const SEARCH_PERSON_LIMIT = 10;
@Component
export default class ActorAutoComplete extends Vue {
@Model("change", { type: Object }) readonly defaultSelected!: IPerson | null;
baseData: IPerson[] = [];
selected: IPerson | null = this.defaultSelected;
name: string = this.defaultSelected
? this.defaultSelected.preferredUsername
: "";
page = 1;
totalPages = 1;
mounted(): void {
this.selected = this.defaultSelected;
}
data(): Record<string, unknown> {
return {
getAsyncData: debounce(this.doGetAsyncData, 500),
};
}
@Watch("defaultSelected")
updateDefaultSelected(defaultSelected: IPerson): void {
console.log("update defaultSelected", defaultSelected);
this.selected = defaultSelected;
this.name = defaultSelected.preferredUsername;
}
handleSelect(selected: IPerson): void {
this.selected = selected;
this.$emit("change", selected);
}
async doGetAsyncData(name: string): Promise<void> {
this.baseData = [];
if (this.name !== name) {
this.name = name;
this.page = 1;
}
if (!name.length) {
this.page = 1;
this.totalPages = 1;
return;
}
const {
data: { searchPersons },
} = await this.$apollo.query<{ searchPersons: Paginate<IPerson> }>({
query: SEARCH_PERSONS,
variables: {
searchText: this.name,
page: this.page,
limit: SEARCH_PERSON_LIMIT,
},
});
this.totalPages = Math.ceil(searchPersons.total / SEARCH_PERSON_LIMIT);
this.baseData.push(...searchPersons.elements);
}
}
</script>

View file

@ -1,31 +1,86 @@
<template>
<div class="media" style="align-items: top" dir="auto">
<div class="media-left">
<figure class="image is-32x32" v-if="actor.avatar">
<img class="is-rounded" :src="actor.avatar.url" alt="" />
<div
class="bg-white rounded-lg flex space-x-4 items-center"
:class="{ 'flex-col p-4 shadow-md sm:p-8 pb-10 w-80': !inline }"
>
<div>
<figure class="w-12 h-12" v-if="actor.avatar">
<img
class="rounded-lg"
:src="actor.avatar.url"
alt=""
width="48"
height="48"
/>
</figure>
<b-icon v-else size="is-medium" icon="account-circle" />
<b-icon
v-else
:size="inline ? 'is-medium' : 'is-large'"
icon="account-circle"
class="ltr:-mr-0.5 rtl:-ml-0.5"
/>
</div>
<div class="media-content">
<p>
{{ actor.name || `@${usernameWithDomain(actor)}` }}
</p>
<p class="has-text-grey-dark" v-if="actor.name">
<div :class="{ 'text-center': !inline }" class="overflow-hidden w-full">
<h5
class="text-xl font-medium violet-title tracking-tight text-gray-900 whitespace-pre-line line-clamp-2"
>
{{ displayName(actor) }}
</h5>
<p class="text-gray-500 truncate" v-if="actor.name">
<span dir="ltr">@{{ usernameWithDomain(actor) }}</span>
</p>
<div
v-if="full"
class="summary"
:class="{ limit: limit }"
class="only-first-child"
:class="{
'line-clamp-3': limit,
'line-clamp-10': !limit,
}"
v-html="actor.summary"
/>
</div>
</div>
<!-- <div
class="p-4 bg-white rounded-lg shadow-md sm:p-8 flex items-center space-x-4"
dir="auto"
>
<div class="flex-shrink-0">
<figure class="w-12 h-12" v-if="actor.avatar">
<img
class="rounded-lg"
:src="actor.avatar.url"
alt=""
width="48"
height="48"
/>
</figure>
<b-icon
v-else
size="is-large"
icon="account-circle"
class="ltr:-mr-0.5 rtl:-ml-0.5"
/>
</div>
<div class="flex-1 min-w-0">
<h5 class="text-xl font-medium violet-title tracking-tight text-gray-900">
{{ displayName(actor) }}
</h5>
<p class="text-gray-500 truncate" v-if="actor.name">
<span dir="ltr">@{{ usernameWithDomain(actor) }}</span>
</p>
<div
v-if="full"
class="line-clamp-3"
:class="{ limit: limit }"
v-html="actor.summary"
/>
</div>
</div> -->
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";
import { IActor, usernameWithDomain } from "../../types/actor";
import { displayName, IActor, usernameWithDomain } from "../../types/actor";
@Component
export default class ActorCard extends Vue {
@ -33,140 +88,19 @@ export default class ActorCard extends Vue {
@Prop({ required: false, type: Boolean, default: false }) full!: boolean;
@Prop({ required: false, type: Boolean, default: false }) inline!: boolean;
@Prop({ required: false, type: Boolean, default: false }) popover!: boolean;
@Prop({ required: false, type: Boolean, default: true }) limit!: boolean;
usernameWithDomain = usernameWithDomain;
displayName = displayName;
}
</script>
<style lang="scss" scoped>
.summary.limit {
max-width: 25rem;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}
</style>
<style lang="scss">
@use "@/styles/_mixins" as *;
.media {
.media-left {
margin-right: initial;
@include margin-right(1rem);
}
}
.tooltip {
display: block !important;
z-index: 10000;
.tooltip-inner {
background: black;
color: white;
border-radius: 16px;
padding: 5px 10px 4px;
}
.tooltip-arrow {
width: 0;
height: 0;
border-style: solid;
position: absolute;
margin: 5px;
border-color: black;
z-index: 1;
}
&[x-placement^="top"] {
margin-bottom: 5px;
.tooltip-arrow {
border-width: 5px 5px 0 5px;
border-left-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
bottom: -5px;
left: calc(50% - 5px);
margin-top: 0;
margin-bottom: 0;
}
}
&[x-placement^="bottom"] {
margin-top: 5px;
.tooltip-arrow {
border-width: 0 5px 5px 5px;
border-left-color: transparent !important;
border-right-color: transparent !important;
border-top-color: transparent !important;
top: -5px;
left: calc(50% - 5px);
margin-top: 0;
margin-bottom: 0;
}
}
&[x-placement^="right"] {
@include margin-left(5px);
.tooltip-arrow {
border-width: 5px 5px 5px 0;
border-left-color: transparent !important;
border-top-color: transparent !important;
border-bottom-color: transparent !important;
left: -5px;
top: calc(50% - 5px);
@include margin-left(0);
@include margin-right(0);
}
}
&[x-placement^="left"] {
@include margin-right(5px);
.tooltip-arrow {
border-width: 5px 0 5px 5px;
border-top-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
right: -5px;
top: calc(50% - 5px);
@include margin-left(0);
@include margin-right(0);
}
}
&.popover {
$color: #f9f9f9;
.popover-inner {
background: lighten($background-color, 65%);
color: black;
padding: 24px;
border-radius: 5px;
box-shadow: 0 5px 30px rgba(black, 0.1);
}
.popover-arrow {
border-color: $color;
}
}
&[aria-hidden="true"] {
visibility: hidden;
opacity: 0;
transition: opacity 0.15s, visibility 0.15s;
}
&[aria-hidden="false"] {
visibility: visible;
opacity: 1;
transition: opacity 0.15s;
}
<style scoped>
.only-first-child ::v-deep :not(:first-child) {
display: none;
}
</style>

View file

@ -1,28 +1,33 @@
<template>
<div class="actor-inline">
<div class="actor-avatar">
<figure class="image is-24x24" v-if="actor.avatar">
<div class="inline-flex items-start">
<div class="flex-none mr-2">
<figure class="image is-48x48" v-if="actor.avatar">
<img class="is-rounded" :src="actor.avatar.url" alt="" />
</figure>
<b-icon v-else size="is-medium" icon="account-circle" />
<b-icon v-else size="is-large" icon="account-circle" />
</div>
<div class="actor-name">
<p>
{{ actor.name || `@${usernameWithDomain(actor)}` }}
<div class="flex-auto">
<p class="text-base line-clamp-3 md:line-clamp-2 max-w-xl">
{{ displayName(actor) }}
</p>
<p class="text-sm text-gray-500 truncate">
@{{ usernameWithDomain(actor) }}
</p>
</div>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";
import { IActor, usernameWithDomain } from "../../types/actor";
import { displayName, IActor, usernameWithDomain } from "../../types/actor";
@Component
export default class ActorInline extends Vue {
@Prop({ required: true, type: Object }) actor!: IActor;
usernameWithDomain = usernameWithDomain;
displayName = displayName;
}
</script>
<style lang="scss" scoped>

View file

@ -6,7 +6,7 @@
:class="{ inline, clickable: actor && actor.type === ActorType.GROUP }"
>
<slot></slot>
<template slot="popover" class="popover">
<template slot="popover">
<actor-card :full="true" :actor="actor" :popover="true" />
</template>
</v-popover>

View file

@ -148,6 +148,11 @@ export default class GroupActivityItem extends mixins(ActivityMixin) {
case Openness.INVITE_ONLY:
details.push("The group can now only be joined with an invite.");
break;
case Openness.MODERATED:
details.push(
"The group can now be joined by anyone, but new members need to be approved by an administrator."
);
break;
case Openness.OPEN:
details.push("The group can now be joined by anyone.");
break;

View file

@ -9,13 +9,7 @@
:inline="true"
slot="member"
>
<b>
{{
$t("@{username}", {
username: usernameWithDomain(activity.object.actor),
})
}}</b
></popover-actor-card
<b> {{ displayName(activity.object.actor) }}</b></popover-actor-card
>
<b slot="member" v-else>{{
subjectParams.member_actor_federated_username
@ -25,13 +19,7 @@
:inline="true"
slot="profile"
>
<b>
{{
$t("@{username}", {
username: usernameWithDomain(activity.author),
})
}}</b
></popover-actor-card
<b> {{ displayName(activity.author) }}</b></popover-actor-card
></i18n
>
<small class="has-text-grey-dark activity-date">{{
@ -41,7 +29,7 @@
</div>
</template>
<script lang="ts">
import { usernameWithDomain } from "@/types/actor";
import { displayName } from "@/types/actor";
import { ActivityMemberSubject, MemberRole } from "@/types/enums";
import { Component } from "vue-property-decorator";
import RouteName from "../../router/name";
@ -62,7 +50,7 @@ export const MEMBER_ROLE_VALUE: Record<string, number> = {
},
})
export default class MemberActivityItem extends mixins(ActivityMixin) {
usernameWithDomain = usernameWithDomain;
displayName = displayName;
RouteName = RouteName;
ActivityMemberSubject = ActivityMemberSubject;
@ -83,6 +71,14 @@ export default class MemberActivityItem extends mixins(ActivityMixin) {
return "You added the member {member}.";
}
return "{profile} added the member {member}.";
case ActivityMemberSubject.MEMBER_APPROVED:
if (this.isAuthorCurrentActor) {
return "You approved {member}'s membership.";
}
if (this.isObjectMemberCurrentActor) {
return "Your membership was approved by {profile}.";
}
return "{profile} approved {member}'s membership.";
case ActivityMemberSubject.MEMBER_JOINED:
return "{member} joined the group.";
case ActivityMemberSubject.MEMBER_UPDATED:
@ -94,6 +90,12 @@ export default class MemberActivityItem extends mixins(ActivityMixin) {
}
return "{profile} updated the member {member}.";
case ActivityMemberSubject.MEMBER_REMOVED:
if (this.subjectParams.member_role === MemberRole.NOT_APPROVED) {
if (this.isAuthorCurrentActor) {
return "You rejected {member}'s membership request.";
}
return "{profile} rejected {member}'s membership request.";
}
if (this.isAuthorCurrentActor) {
return "You excluded member {member}.";
}

View file

@ -1,6 +1,6 @@
<template>
<div
class="ellipsis"
class="truncate"
:title="
isDescriptionDifferentFromLocality
? `${physicalAddress.description}, ${physicalAddress.locality}`
@ -8,8 +8,7 @@
"
>
<b-icon icon="map-marker" />
<span v-if="isDescriptionDifferentFromLocality">
{{ physicalAddress.description }},
<span v-if="physicalAddress.locality">
{{ physicalAddress.locality }}
</span>
<span v-else>
@ -35,11 +34,3 @@ export default class InlineAddress extends Vue {
}
}
</script>
<style lang="scss" scoped>
.ellipsis {
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
}
</style>

View file

@ -1,262 +0,0 @@
<template>
<div>
<b-table
v-show="relayFollowers.elements.length > 0"
:data="relayFollowers.elements"
:loading="$apollo.queries.relayFollowers.loading"
ref="table"
:checked-rows.sync="checkedRows"
detailed
:show-detail-icon="false"
paginated
backend-pagination
:current-page.sync="page"
:aria-next-label="$t('Next page')"
:aria-previous-label="$t('Previous page')"
:aria-page-label="$t('Page')"
:aria-current-label="$t('Current page')"
:total="relayFollowers.total"
:per-page="FOLLOWERS_PER_PAGE"
@page-change="onFollowersPageChange"
checkable
checkbox-position="left"
>
<b-table-column
field="actor.id"
label="ID"
width="40"
numeric
v-slot="props"
>{{ props.row.actor.id }}</b-table-column
>
<b-table-column
field="actor.type"
:label="$t('Type')"
width="80"
v-slot="props"
>
<b-icon icon="lan" v-if="RelayMixin.isInstance(props.row.actor)" />
<b-icon icon="account-circle" v-else />
</b-table-column>
<b-table-column
field="approved"
:label="$t('Status')"
width="100"
sortable
centered
v-slot="props"
>
<span
:class="`tag ${props.row.approved ? 'is-success' : 'is-danger'}`"
>{{ props.row.approved ? $t("Accepted") : $t("Pending") }}</span
>
</b-table-column>
<b-table-column field="actor.domain" :label="$t('Domain')" sortable>
<template v-slot:default="props">
<a
@click="toggle(props.row)"
v-if="RelayMixin.isInstance(props.row.actor)"
>{{ props.row.actor.domain }}</a
>
<a @click="toggle(props.row)" v-else>{{
`${props.row.actor.preferredUsername}@${props.row.actor.domain}`
}}</a>
</template>
</b-table-column>
<b-table-column
field="targetActor.updatedAt"
:label="$t('Date')"
sortable
v-slot="props"
>
<span
:title="$options.filters.formatDateTimeString(props.row.updatedAt)"
>{{
formatDistanceToNow(new Date(props.row.updatedAt), {
locale: $dateFnsLocale,
})
}}</span
></b-table-column
>
<template #detail="props">
<article>
<div class="content">
<strong>{{ props.row.actor.name }}</strong>
<small v-if="props.row.actor.preferredUsername !== 'relay'"
>@{{ props.row.actor.preferredUsername }}</small
>
<p v-html="props.row.actor.summary" />
</div>
</article>
</template>
<template slot="bottom-left" v-if="checkedRows.length > 0">
<div class="buttons">
<b-button
@click="acceptRelays"
type="is-success"
v-if="checkedRowsHaveAtLeastOneToApprove"
>
{{
$tc(
"No instance to approve|Approve instance|Approve {number} instances",
checkedRows.length,
{ number: checkedRows.length }
)
}}
</b-button>
<b-button @click="rejectRelays" type="is-danger">
{{
$tc(
"No instance to reject|Reject instance|Reject {number} instances",
checkedRows.length,
{ number: checkedRows.length }
)
}}
</b-button>
</div>
</template>
</b-table>
<b-message type="is-danger" v-if="relayFollowers.elements.length === 0">{{
$t("No instance follows your instance yet.")
}}</b-message>
</div>
</template>
<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import { SnackbarProgrammatic as Snackbar } from "buefy";
import { formatDistanceToNow } from "date-fns";
import {
ACCEPT_RELAY,
REJECT_RELAY,
RELAY_FOLLOWERS,
} from "../../graphql/admin";
import { IFollower } from "../../types/actor/follower.model";
import RelayMixin from "../../mixins/relay";
import RouteName from "@/router/name";
import { Paginate } from "@/types/paginate";
const FOLLOWERS_PER_PAGE = 10;
@Component({
apollo: {
relayFollowers: {
query: RELAY_FOLLOWERS,
variables() {
return {
page: this.page,
limit: FOLLOWERS_PER_PAGE,
};
},
},
},
metaInfo() {
return {
title: this.$t("Followers") as string,
titleTemplate: "%s | Mobilizon",
};
},
})
export default class Followers extends Mixins(RelayMixin) {
RelayMixin = RelayMixin;
formatDistanceToNow = formatDistanceToNow;
relayFollowers: Paginate<IFollower> = { elements: [], total: 0 };
checkedRows: IFollower[] = [];
FOLLOWERS_PER_PAGE = FOLLOWERS_PER_PAGE;
toggle(row: Record<string, unknown>): void {
this.table.toggleDetails(row);
}
get page(): number {
return parseInt((this.$route.query.page as string) || "1", 10);
}
set page(page: number) {
this.pushRouter(RouteName.RELAY_FOLLOWERS, {
page: page.toString(),
});
}
acceptRelays(): void {
this.checkedRows.forEach((row: IFollower) => {
this.acceptRelay(`${row.actor.preferredUsername}@${row.actor.domain}`);
});
}
rejectRelays(): void {
this.checkedRows.forEach((row: IFollower) => {
this.rejectRelay(`${row.actor.preferredUsername}@${row.actor.domain}`);
});
}
async acceptRelay(address: string): Promise<void> {
try {
await this.$apollo.mutate({
mutation: ACCEPT_RELAY,
variables: {
address,
},
});
await this.$apollo.queries.relayFollowers.refetch();
this.checkedRows = [];
} catch (e: any) {
if (e.message) {
Snackbar.open({
message: e.message,
type: "is-danger",
position: "is-bottom",
});
}
}
}
async rejectRelay(address: string): Promise<void> {
try {
await this.$apollo.mutate({
mutation: REJECT_RELAY,
variables: {
address,
},
});
await this.$apollo.queries.relayFollowers.refetch();
this.checkedRows = [];
} catch (e: any) {
if (e.message) {
Snackbar.open({
message: e.message,
type: "is-danger",
position: "is-bottom",
});
}
}
}
get checkedRowsHaveAtLeastOneToApprove(): boolean {
return this.checkedRows.some((checkedRow) => !checkedRow.approved);
}
async onFollowersPageChange(page: number): Promise<void> {
this.page = page;
try {
await this.$apollo.queries.relayFollowers.fetchMore({
variables: {
page: this.page,
limit: FOLLOWERS_PER_PAGE,
},
});
} catch (err: any) {
console.error(err);
}
}
}
</script>

View file

@ -1,311 +0,0 @@
<template>
<div>
<form @submit="followRelay">
<b-field
:label="$t('Add an instance')"
custom-class="add-relay"
horizontal
>
<b-field grouped expanded size="is-large">
<p class="control">
<b-input
v-model="newRelayAddress"
:placeholder="$t('Ex: mobilizon.fr')"
/>
</p>
<p class="control">
<b-button type="is-primary" native-type="submit">{{
$t("Add an instance")
}}</b-button>
</p>
</b-field>
</b-field>
</form>
<b-table
v-show="relayFollowings.elements.length > 0"
:data="relayFollowings.elements"
:loading="$apollo.queries.relayFollowings.loading"
ref="table"
:checked-rows.sync="checkedRows"
:is-row-checkable="(row) => row.id !== 3"
detailed
:show-detail-icon="false"
paginated
backend-pagination
:current-page.sync="page"
:aria-next-label="$t('Next page')"
:aria-previous-label="$t('Previous page')"
:aria-page-label="$t('Page')"
:aria-current-label="$t('Current page')"
:total="relayFollowings.total"
:per-page="FOLLOWINGS_PER_PAGE"
@page-change="onFollowingsPageChange"
checkable
checkbox-position="left"
>
<b-table-column
field="targetActor.id"
label="ID"
width="40"
numeric
v-slot="props"
>{{ props.row.targetActor.id }}</b-table-column
>
<b-table-column
field="targetActor.type"
:label="$t('Type')"
width="80"
v-slot="props"
>
<b-icon
icon="lan"
v-if="RelayMixin.isInstance(props.row.targetActor)"
/>
<b-icon icon="account-circle" v-else />
</b-table-column>
<b-table-column
field="approved"
:label="$t('Status')"
width="100"
sortable
centered
v-slot="props"
>
<span
:class="`tag ${props.row.approved ? 'is-success' : 'is-danger'}`"
>{{ props.row.approved ? $t("Accepted") : $t("Pending") }}</span
>
</b-table-column>
<b-table-column field="targetActor.domain" :label="$t('Domain')" sortable>
<template v-slot:default="props">
<a
@click="toggle(props.row)"
v-if="RelayMixin.isInstance(props.row.targetActor)"
>{{ props.row.targetActor.domain }}</a
>
<a @click="toggle(props.row)" v-else>{{
`${props.row.targetActor.preferredUsername}@${props.row.targetActor.domain}`
}}</a>
</template>
</b-table-column>
<b-table-column
field="targetActor.updatedAt"
:label="$t('Date')"
sortable
v-slot="props"
>
<span
:title="$options.filters.formatDateTimeString(props.row.updatedAt)"
>{{
formatDistanceToNow(new Date(props.row.updatedAt), {
locale: $dateFnsLocale,
})
}}</span
></b-table-column
>
<template #detail="props">
<article>
<div class="content">
<strong>{{ props.row.targetActor.name }}</strong>
<small v-if="props.row.actor.preferredUsername !== 'relay'"
>@{{ props.row.targetActor.preferredUsername }}</small
>
<p v-html="props.row.targetActor.summary" />
</div>
</article>
</template>
<template slot="bottom-left" v-if="checkedRows.length > 0">
<b-button @click="removeRelays" type="is-danger">
{{
$tc(
"No instance to remove|Remove instance|Remove {number} instances",
checkedRows.length,
{ number: checkedRows.length }
)
}}
</b-button>
</template>
</b-table>
<b-message type="is-danger" v-if="relayFollowings.total === 0">{{
$t("You don't follow any instances yet.")
}}</b-message>
</div>
</template>
<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import { SnackbarProgrammatic as Snackbar } from "buefy";
import { formatDistanceToNow } from "date-fns";
import { ADD_RELAY, REMOVE_RELAY } from "../../graphql/admin";
import { IFollower } from "../../types/actor/follower.model";
import RelayMixin from "../../mixins/relay";
import { RELAY_FOLLOWINGS } from "@/graphql/admin";
import { Paginate } from "@/types/paginate";
import RouteName from "@/router/name";
import { ApolloCache, FetchResult, Reference } from "@apollo/client/core";
import gql from "graphql-tag";
const FOLLOWINGS_PER_PAGE = 10;
@Component({
apollo: {
relayFollowings: {
query: RELAY_FOLLOWINGS,
variables() {
return {
page: this.page,
limit: FOLLOWINGS_PER_PAGE,
};
},
},
},
metaInfo() {
return {
title: this.$t("Followings") as string,
titleTemplate: "%s | Mobilizon",
};
},
})
export default class Followings extends Mixins(RelayMixin) {
newRelayAddress = "";
RelayMixin = RelayMixin;
formatDistanceToNow = formatDistanceToNow;
relayFollowings: Paginate<IFollower> = { elements: [], total: 0 };
FOLLOWINGS_PER_PAGE = FOLLOWINGS_PER_PAGE;
checkedRows: IFollower[] = [];
get page(): number {
return parseInt((this.$route.query.page as string) || "1", 10);
}
set page(page: number) {
this.pushRouter(RouteName.RELAY_FOLLOWINGS, {
page: page.toString(),
});
}
async onFollowingsPageChange(page: number): Promise<void> {
this.page = page;
try {
await this.$apollo.queries.relayFollowings.fetchMore({
variables: {
page: this.page,
limit: FOLLOWINGS_PER_PAGE,
},
});
} catch (err: any) {
console.error(err);
}
}
async followRelay(e: Event): Promise<void> {
e.preventDefault();
try {
await this.$apollo.mutate<{ relayFollowings: Paginate<IFollower> }>({
mutation: ADD_RELAY,
variables: {
address: this.newRelayAddress.trim(), // trim to fix copy and paste domain name spaces and tabs
},
update(
cache: ApolloCache<{ relayFollowings: Paginate<IFollower> }>,
{ data }: FetchResult
) {
cache.modify({
fields: {
relayFollowings(
existingFollowings = { elements: [], total: 0 },
{ readField }
) {
const newFollowingRef = cache.writeFragment({
id: `${data?.addRelay.__typename}:${data?.addRelay.id}`,
data: data?.addRelay,
fragment: gql`
fragment NewFollowing on Follower {
id
}
`,
});
if (
existingFollowings.elements.some(
(ref: Reference) =>
readField("id", ref) === data?.addRelay.id
)
) {
return existingFollowings;
}
return {
total: existingFollowings.total + 1,
elements: [newFollowingRef, ...existingFollowings.elements],
};
},
},
broadcast: false,
});
},
});
this.newRelayAddress = "";
} catch (err: any) {
if (err.message) {
Snackbar.open({
message: err.message,
type: "is-danger",
position: "is-bottom",
});
}
}
}
removeRelays(): void {
this.checkedRows.forEach((row: IFollower) => {
this.removeRelay(row);
});
}
async removeRelay(follower: IFollower): Promise<void> {
const address = `${follower.targetActor.preferredUsername}@${follower.targetActor.domain}`;
try {
await this.$apollo.mutate<{ removeRelay: IFollower }>({
mutation: REMOVE_RELAY,
variables: {
address,
},
update(cache: ApolloCache<{ removeRelay: IFollower }>) {
cache.modify({
fields: {
relayFollowings(existingFollowingRefs, { readField }) {
return {
total: existingFollowingRefs.total - 1,
elements: existingFollowingRefs.elements.filter(
(followingRef: Reference) =>
follower.id !== readField("id", followingRef)
),
};
},
},
});
},
});
await this.$apollo.queries.relayFollowings.refetch();
this.checkedRows = [];
} catch (e: any) {
if (e.message) {
Snackbar.open({
message: e.message,
type: "is-danger",
position: "is-bottom",
});
}
}
}
}
</script>

View file

@ -63,7 +63,12 @@
</button>
</span>
<br />
<div v-if="!comment.deletedAt" v-html="comment.text" dir="auto" />
<div
v-if="!comment.deletedAt"
v-html="comment.text"
dir="auto"
:lang="comment.language"
/>
<div v-else>{{ $t("[This comment has been deleted]") }}</div>
<div class="load-replies" v-if="comment.totalReplies">
<p v-if="!showReplies" @click="fetchReplies">
@ -299,6 +304,10 @@ export default class Comment extends Vue {
onConfirm: this.reportComment,
outsideDomain: this.comment.actor.domain,
},
// https://github.com/buefy/buefy/pull/3589
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
closeButtonAriaLabel: this.$t("Close"),
});
}

View file

@ -45,8 +45,8 @@
type="is-primary"
class="comment-button-submit"
icon-left="send"
:aria-label="$t('Post a comment')"
/>
>{{ $t("Send") }}</b-button
>
</div>
</article>
</form>
@ -63,7 +63,7 @@
<transition-group
key="list"
name="comment-list"
v-if="comments.length"
v-if="filteredOrderedComments.length"
class="comment-list"
tag="ul"
>
@ -77,9 +77,9 @@
@delete-comment="deleteComment"
/>
</transition-group>
<div v-else class="no-comments" key="no-comments">
<empty-content v-else icon="comment" key="no-comments" :inline="true">
<span>{{ $t("No comments yet") }}</span>
</div>
</empty-content>
</transition-group>
</div>
</template>
@ -99,6 +99,7 @@ import { CURRENT_ACTOR_CLIENT } from "../../graphql/actor";
import { IPerson } from "../../types/actor";
import { IEvent } from "../../types/event.model";
import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core";
import EmptyContent from "@/components/Utils/EmptyContent.vue";
@Component({
apollo: {
@ -119,6 +120,7 @@ import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core";
components: {
Comment,
IdentityPickerWrapper,
EmptyContent,
editor: () =>
import(/* webpackChunkName: "editor" */ "@/components/Editor.vue"),
},
@ -364,21 +366,34 @@ export default class CommentTree extends Vue {
<style lang="scss" scoped>
@use "@/styles/_mixins" as *;
@import "~bulma/sass/utilities/mixins.sass";
form.new-comment {
padding-bottom: 1rem;
.media-content {
display: flex;
align-items: center;
align-content: center;
.media {
flex-wrap: wrap;
justify-content: center;
.media-left {
@include mobile {
@include margin-right(0.5rem);
@include margin-left(0.5rem);
}
}
.field {
flex: 1;
@include padding-right(10px);
margin-bottom: 0;
.media-content {
display: flex;
align-items: center;
align-content: center;
width: min-content;
&.notify-participants {
margin-top: 0.5rem;
.field {
flex: 1;
@include padding-right(10px);
margin-bottom: 0;
&.notify-participants {
margin-top: 0.5rem;
}
}
}
}

View file

@ -145,8 +145,10 @@ export default class DiscussionComment extends Vue {
}
updateComment(): void {
this.comment.text = this.updatedComment;
this.$emit("update-comment", this.comment);
this.$emit("update-comment", {
...this.comment,
text: this.updatedComment,
});
this.toggleEditMode();
}
}

View file

@ -195,10 +195,18 @@
<script lang="ts">
import { Component, Prop, Vue, Watch } from "vue-property-decorator";
import { Editor, EditorContent, BubbleMenu } from "@tiptap/vue-2";
import StarterKit from "@tiptap/starter-kit";
import Blockquote from "@tiptap/extension-blockquote";
import BulletList from "@tiptap/extension-bullet-list";
import Heading from "@tiptap/extension-heading";
import Document from "@tiptap/extension-document";
import Paragraph from "@tiptap/extension-paragraph";
import Bold from "@tiptap/extension-bold";
import Italic from "@tiptap/extension-italic";
import Strike from "@tiptap/extension-strike";
import Text from "@tiptap/extension-text";
import Dropcursor from "@tiptap/extension-dropcursor";
import Gapcursor from "@tiptap/extension-gapcursor";
import History from "@tiptap/extension-history";
import { IActor, IPerson, usernameWithDomain } from "../types/actor";
import CustomImage from "./Editor/Image";
import { UPLOAD_MEDIA } from "../graphql/upload";
@ -210,8 +218,8 @@ import OrderedList from "@tiptap/extension-ordered-list";
import ListItem from "@tiptap/extension-list-item";
import Underline from "@tiptap/extension-underline";
import Link from "@tiptap/extension-link";
import CharacterCount from "@tiptap/extension-character-count";
import { AutoDir } from "./Editor/Autodir";
import sanitizeHtml from "sanitize-html";
@Component({
components: { EditorContent, BubbleMenu },
@ -265,9 +273,12 @@ export default class EditorComponent extends Vue {
"aria-label": this.ariaLabel,
role: "textbox",
},
transformPastedHTML: this.transformPastedHTML,
},
extensions: [
StarterKit,
Blockquote,
BulletList,
Heading,
Document,
Paragraph,
Text,
@ -277,12 +288,15 @@ export default class EditorComponent extends Vue {
CustomImage,
AutoDir,
Underline,
Bold,
Italic,
Strike,
Dropcursor,
Gapcursor,
History,
Link.configure({
HTMLAttributes: { target: "_blank", rel: "noopener noreferrer ugc" },
}),
CharacterCount.configure({
limit: this.maxSize,
}),
],
injectCSS: false,
content: this.value,
@ -292,6 +306,19 @@ export default class EditorComponent extends Vue {
});
}
transformPastedHTML(html: string): string {
// When using comment mode, limit to acceptable tags
if (this.isCommentMode) {
return sanitizeHtml(html, {
allowedTags: ["b", "i", "em", "strong", "a"],
allowedAttributes: {
a: ["href", "rel", "target"],
},
});
}
return html;
}
@Watch("value")
onValueChanged(val: string): void {
if (!this.editor) return;

View file

@ -7,6 +7,8 @@ import apolloProvider from "@/vue-apollo";
import { IPerson } from "@/types/actor";
import pDebounce from "p-debounce";
import { NormalizedCacheObject } from "@apollo/client/cache/inmemory/types";
import { MentionOptions } from "@tiptap/extension-mention";
import { Editor } from "@tiptap/core";
const client =
apolloProvider.defaultClient as ApolloClient<NormalizedCacheObject>;
@ -24,13 +26,21 @@ const fetchItems = async (query: string): Promise<IPerson[]> => {
const debouncedFetchItems = pDebounce(fetchItems, 200);
const mentionOptions: Partial<any> = {
const mentionOptions: MentionOptions = {
HTMLAttributes: {
class: "mention",
dir: "ltr",
},
renderLabel({ options, node }) {
return `${options.suggestion.char}${node.attrs.label ?? node.attrs.id}`;
},
suggestion: {
items: async (query: string): Promise<IPerson[]> => {
items: async ({
query,
}: {
query: string;
editor: Editor;
}): Promise<IPerson[]> => {
if (query === "") {
return [];
}
@ -70,8 +80,12 @@ const mentionOptions: Partial<any> = {
return component.ref?.onKeyDown(props);
},
onExit() {
popup[0].destroy();
component.destroy();
if (popup && popup[0]) {
popup[0].destroy();
}
if (component) {
component.destroy();
}
},
};
},

View file

@ -7,7 +7,7 @@
:key="index"
@click="selectItem(index)"
>
<actor-card :actor="item" />
<actor-inline :actor="item" />
</button>
</div>
</template>
@ -16,11 +16,11 @@
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
import { displayName, usernameWithDomain } from "@/types/actor/actor.model";
import { IPerson } from "@/types/actor";
import ActorCard from "../../components/Account/ActorCard.vue";
import ActorInline from "../../components/Account/ActorInline.vue";
@Component({
components: {
ActorCard,
ActorInline,
},
})
export default class MentionList extends Vue {

View file

@ -5,10 +5,14 @@
.ProseMirror {
position: relative;
}
.ProseMirror {
word-wrap: break-word;
white-space: pre-wrap;
white-space: break-spaces;
-webkit-font-variant-ligatures: none;
font-variant-ligatures: none;
font-feature-settings: "liga" 0; /* the above doesn't seem to work in Edge */
& [contenteditable="false"] {
white-space: normal;
@ -16,14 +20,22 @@
& [contenteditable="false"] [contenteditable="true"] {
white-space: pre-wrap;
}
pre {
& pre {
white-space: pre-wrap;
}
}
img.ProseMirror-separator {
display: inline !important;
border: none !important;
margin: 0 !important;
width: 1px !important;
height: 1px !important;
}
.ProseMirror-gapcursor {
display: none;
pointer-events: none;
position: absolute;
margin: 0;
&:after {
content: "";
@ -40,16 +52,17 @@
visibility: hidden;
}
}
.ProseMirror-hideselection * {
&::selection {
.ProseMirror-hideselection {
*::selection {
background: transparent;
}
&::-moz-selection {
*::-moz-selection {
background: transparent;
}
caret-color: transparent;
* {
caret-color: transparent;
}
}
.ProseMirror-focused .ProseMirror-gapcursor {
display: block;
}

View file

@ -48,13 +48,75 @@
$t("Mobilizon")
}}</a>
</i18n>
{{
$t(
"We improve this software thanks to your feedback. To let us know about this issue, two possibilities (both unfortunately require user account creation):"
)
}}
<span v-if="sentryEnabled && sentryReady">
{{
$t(
"We collect your feedback and the error information in order to improve this service."
)
}}</span
>
<span v-else>
{{
$t(
"We improve this software thanks to your feedback. To let us know about this issue, two possibilities (both unfortunately require user account creation):"
)
}}
</span>
</p>
<div class="content">
<form
v-if="sentryEnabled && sentryReady && !submittedFeedback"
@submit.prevent="sendErrorToSentry"
>
<b-field :label="$t('What happened?')" label-for="what-happened">
<b-input
v-model="feedback"
type="textarea"
id="what-happened"
:placeholder="$t(`I've clicked on X, then on Y`)"
/>
</b-field>
<b-button icon-left="send" native-type="submit" type="is-primary">{{
$t("Send feedback")
}}</b-button>
<p class="content">
{{
$t(
"Please add as many details as possible to help identify the problem."
)
}}
</p>
</form>
<b-message type="is-danger" v-else-if="feedbackError">
<p>
{{
$t(
"Sorry, we wen't able to save your feedback. Don't worry, we'll try to fix this issue anyway."
)
}}
</p>
<i18n path="You may now close this page or {return_to_the_homepage}.">
<template #return_to_the_homepage>
<router-link :to="{ name: RouteName.HOME }">{{
$t("return to the homepage")
}}</router-link>
</template>
</i18n>
</b-message>
<b-message type="is-success" v-else-if="submittedFeedback">
<p>{{ $t("Thanks a lot, your feedback was submitted!") }}</p>
<i18n path="You may now close this page or {return_to_the_homepage}.">
<template #return_to_the_homepage>
<router-link :to="{ name: RouteName.HOME }">{{
$t("return to the homepage")
}}</router-link>
</template>
</i18n>
</b-message>
<div
class="content"
v-if="!(sentryEnabled && sentryReady) || submittedFeedback"
>
<p v-if="submittedFeedback">{{ $t("You may also:") }}</p>
<ul>
<li>
<a
@ -65,7 +127,7 @@
</li>
<li>
<a
href="https://framagit.org/framasoft/mobilizon/-/issues/new?issuable_template=Bug"
href="https://framagit.org/framasoft/mobilizon/-/issues/"
target="_blank"
>{{
$t("Open an issue on our bug tracker (advanced users)")
@ -74,7 +136,7 @@
</li>
</ul>
</div>
<p class="content">
<p class="content" v-if="!sentryEnabled">
{{
$t(
"Please add as many details as possible to help identify the problem."
@ -89,14 +151,14 @@
<p>{{ $t("Error stacktrace") }}</p>
<pre>{{ error.stack }}</pre>
</details>
<p>
<p v-if="!sentryEnabled">
{{
$t(
"The technical details of the error can help developers solve the problem more easily. Please add them to your feedback."
)
}}
</p>
<div class="buttons">
<div class="buttons" v-if="!sentryEnabled">
<b-tooltip
:label="tooltipConfig.label"
:type="tooltipConfig.type"
@ -115,14 +177,20 @@
</div>
</template>
<script lang="ts">
import { CONTACT } from "@/graphql/config";
import { CONFIG } from "@/graphql/config";
import { checkProviderConfig, convertConfig } from "@/services/statistics";
import { IAnalyticsConfig, IConfig } from "@/types/config.model";
import { Component, Prop, Vue } from "vue-property-decorator";
import { LOGGED_USER } from "@/graphql/user";
import { IUser } from "@/types/current-user.model";
import { ISentryConfiguration } from "@/types/analytics/sentry.model";
import { submitFeedback } from "@/services/statistics/sentry";
import RouteName from "@/router/name";
@Component({
apollo: {
config: {
query: CONTACT,
},
config: CONFIG,
loggedUser: LOGGED_USER,
},
metaInfo() {
return {
@ -138,7 +206,17 @@ export default class ErrorComponent extends Vue {
copied: "success" | "error" | false = false;
config!: { contact: string | null; name: string };
config!: IConfig;
feedback = "";
submittedFeedback = false;
feedbackError = false;
loggedUser!: IUser;
RouteName = RouteName;
async copyErrorToClipboard(): Promise<void> {
try {
@ -193,6 +271,56 @@ export default class ErrorComponent extends Vue {
document.body.removeChild(textArea);
}
get sentryEnabled(): boolean {
return this.sentryProvider?.enabled === true;
}
get sentryProvider(): IAnalyticsConfig | undefined {
return this.config && checkProviderConfig(this.config, "sentry");
}
get sentryConfig(): ISentryConfiguration | undefined {
if (this.sentryProvider?.configuration) {
return convertConfig(
this.sentryProvider?.configuration
) as ISentryConfiguration;
}
return undefined;
}
get sentryReady() {
const eventId = window.sessionStorage.getItem("lastEventId");
const dsn = this.sentryConfig?.dsn;
const organization = this.sentryConfig?.organization;
const project = this.sentryConfig?.project;
const host = this.sentryConfig?.host;
return eventId && dsn && organization && project && host;
}
async sendErrorToSentry() {
try {
const eventId = window.sessionStorage.getItem("lastEventId");
const dsn = this.sentryConfig?.dsn;
const organization = this.sentryConfig?.organization;
const project = this.sentryConfig?.project;
const host = this.sentryConfig?.host;
const endpoint = `https://${host}/api/0/projects/${organization}/${project}/user-feedback/`;
if (eventId && dsn && this.sentryReady) {
await submitFeedback(endpoint, dsn, {
event_id: eventId,
name:
this.loggedUser?.defaultActor?.preferredUsername || "Unknown user",
email: this.loggedUser?.email || "unknown@email.org",
comments: this.feedback,
});
this.submittedFeedback = true;
}
} catch (error) {
console.error(error);
this.feedbackError = true;
}
}
}
</script>
<style lang="scss" scoped>

View file

@ -39,7 +39,12 @@
/>
</div>
<div class="media-content">
<h3 class="event-title" :title="event.title" dir="auto">
<h3
class="event-title"
:title="event.title"
dir="auto"
:lang="event.language"
>
{{ event.title }}
</h3>
<div class="content-end">
@ -62,7 +67,6 @@
<inline-address
dir="auto"
v-if="event.physicalAddress"
class="event-subtitle"
:physical-address="event.physicalAddress"
/>
<div
@ -183,16 +187,22 @@ a.card {
a {
text-decoration: none;
}
span.tag {
margin: 5px auto;
text-overflow: ellipsis;
overflow: hidden;
display: block;
font-size: 0.9em;
line-height: 1.75em;
span.tag {
margin: 5px auto;
text-overflow: ellipsis;
overflow: hidden;
display: block;
font-size: 0.9em;
line-height: 1.75em;
&:not(.is-info, .is-danger) {
background-color: #e6e4f4;
color: #3c376e;
color: $violet-3;
}
&.is-info {
color: $violet-3;
}
}
}
@ -243,10 +253,13 @@ a.card {
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
padding-bottom: 8px;
font-weight: bold;
}
.content-end {
padding-top: 8px;
}
.event-subtitle {
font-size: 0.85rem;
}

View file

@ -111,6 +111,7 @@
</p>
</template>
<script lang="ts">
import { getTimezoneOffset } from "date-fns-tz";
import { Component, Prop, Vue } from "vue-property-decorator";
@Component
@ -168,15 +169,20 @@ export default class EventFullDate extends Vue {
isSameDay(): boolean {
const sameDay =
new Date(this.beginsOn).toDateString() ===
new Date(this.endsOn).toDateString();
this.beginsOnDate.toDateString() === new Date(this.endsOn).toDateString();
return this.endsOn !== undefined && sameDay;
}
get beginsOnDate(): Date {
return new Date(this.beginsOn);
}
get differentFromUserTimezone(): boolean {
return (
!!this.timezone &&
!!this.userActualTimezone &&
getTimezoneOffset(this.timezone, this.beginsOnDate) !==
getTimezoneOffset(this.userActualTimezone, this.beginsOnDate) &&
this.timezone !== this.userActualTimezone
);
}

View file

@ -45,6 +45,7 @@ div.eventMetadataBlock {
.content-wrapper {
overflow: hidden;
width: 100%;
max-width: calc(100vw - 32px - 20px);
&.padding-left {
padding: 0 20px;

View file

@ -16,6 +16,7 @@
>
<b-autocomplete
expanded
:clear-on-select="true"
v-model="search"
ref="autocomplete"
:data="filteredDataArray"
@ -62,7 +63,11 @@
</b-button>
</p>
</b-field>
<b-modal has-modal-card v-model="showNewElementModal">
<b-modal
has-modal-card
v-model="showNewElementModal"
:close-button-aria-label="$t('Close')"
>
<div class="modal-card">
<header class="modal-card-head">
<button
@ -136,7 +141,10 @@ export default class EventMetadataList extends Vue {
}
set metadata(metadata: IEventMetadata[]) {
this.$emit("input", metadata);
this.$emit(
"input",
metadata.filter((elem) => elem)
);
}
localizedCategories: Record<EventMetadataCategories, string> = {

View file

@ -34,14 +34,9 @@
class="metadata-organized-by"
:title="$t('Organized by')"
>
<popover-actor-card
:actor="event.organizerActor"
v-if="!event.attributedTo"
>
<actor-card :actor="event.organizerActor" />
</popover-actor-card>
<router-link
v-if="event.attributedTo"
class="hover:underline"
:to="{
name: RouteName.GROUP,
params: {
@ -49,23 +44,21 @@
},
}"
>
<popover-actor-card
:actor="event.attributedTo"
<actor-card
v-if="
!event.attributedTo || !event.options.hideOrganizerWhenGroupEvent
"
>
<actor-card :actor="event.attributedTo" />
</popover-actor-card>
:actor="event.attributedTo"
:inline="true"
/>
</router-link>
<popover-actor-card
<actor-card v-else :actor="event.organizerActor" :inline="true" />
<actor-card
:inline="true"
:actor="contact"
v-for="contact in event.contacts"
:key="contact.id"
>
<actor-card :actor="contact" />
</popover-actor-card>
/>
</event-metadata-block>
<event-metadata-block
v-if="event.onlineAddress && urlToHostname(event.onlineAddress)"
@ -74,6 +67,7 @@
>
<a
target="_blank"
class="hover:underline"
rel="noopener noreferrer ugc"
:href="event.onlineAddress"
:title="

View file

@ -1,6 +1,6 @@
<template>
<router-link
class="event-minimalist-card-wrapper"
class="event-minimalist-card-wrapper bg-white rounded-lg shadow-md"
dir="auto"
:to="{ name: RouteName.EVENT, params: { uuid: event.uuid } }"
>
@ -17,7 +17,21 @@
</div>
</div>
<div class="title-info-wrapper has-text-grey-dark">
<h3 class="event-minimalist-title">
<h3 class="event-minimalist-title" :lang="event.language" dir="auto">
<b-tag
type="is-info"
class="mr-1"
v-if="event.status === EventStatus.TENTATIVE"
>
{{ $t("Tentative") }}
</b-tag>
<b-tag
type="is-danger"
class="mr-1"
v-if="event.status === EventStatus.CANCELLED"
>
{{ $t("Cancelled") }}
</b-tag>
<b-tag
class="mr-2"
type="is-warning"
@ -105,7 +119,7 @@
import { Component, Prop, Vue } from "vue-property-decorator";
import { IEvent, organizer, organizerDisplayName } from "@/types/event.model";
import DateCalendarIcon from "@/components/Event/DateCalendarIcon.vue";
import { ParticipantRole } from "@/types/enums";
import { EventStatus, ParticipantRole } from "@/types/enums";
import RouteName from "../../router/name";
import LazyImageWrapper from "@/components/Image/LazyImageWrapper.vue";
import InlineAddress from "@/components/Address/InlineAddress.vue";
@ -129,6 +143,8 @@ export default class EventMinimalistCard extends Vue {
organizerDisplayName = organizerDisplayName;
organizer = organizer;
EventStatus = EventStatus;
}
</script>
<style lang="scss" scoped>

View file

@ -45,13 +45,31 @@
</div>
<div class="list-card-content">
<div class="title-wrapper" dir="auto">
<b-tag
type="is-info"
class="mr-1 mb-1"
size="is-medium"
v-if="participation.event.status === EventStatus.TENTATIVE"
>
{{ $t("Tentative") }}
</b-tag>
<b-tag
type="is-danger"
class="mr-1 mb-1"
size="is-medium"
v-if="participation.event.status === EventStatus.CANCELLED"
>
{{ $t("Cancelled") }}
</b-tag>
<router-link
:to="{
name: RouteName.EVENT,
params: { uuid: participation.event.uuid },
}"
>
<h3 class="title">{{ participation.event.title }}</h3>
<h3 class="title" :lang="participation.event.language">
{{ participation.event.title }}
</h3>
</router-link>
</div>
<inline-address
@ -255,7 +273,7 @@ import { Component, Prop } from "vue-property-decorator";
import DateCalendarIcon from "@/components/Event/DateCalendarIcon.vue";
import { mixins } from "vue-class-component";
import { RawLocation, Route } from "vue-router";
import { EventVisibility, ParticipantRole } from "@/types/enums";
import { EventStatus, EventVisibility, ParticipantRole } from "@/types/enums";
import { IParticipant } from "../../types/participant.model";
import {
IEventCardOptions,
@ -324,6 +342,8 @@ export default class EventParticipationCard extends mixins(
RouteName = RouteName;
EventStatus = EventStatus;
get mergedOptions(): IEventCardOptions {
return { ...defaultOptions, ...this.options };
}

View file

@ -9,19 +9,19 @@
>
<template slot="label">
{{ actualLabel }}
<span
class="is-size-6 has-text-weight-normal"
v-if="gettingLocation"
>{{ $t("Getting location") }}</span
>
</template>
<p class="control" v-if="canShowLocateMeButton && !gettingLocation">
<b-button
v-if="canShowLocateMeButton && !gettingLocation"
size="is-small"
icon-right="map-marker"
@click="locateMe"
:title="$t('Use my location')"
/>
<span
class="is-size-6 has-text-weight-normal"
v-else-if="gettingLocation"
>{{ $t("Getting location") }}</span
>
</template>
</p>
<b-autocomplete
:data="addressData"
v-model="queryText"
@ -29,7 +29,7 @@
field="fullName"
:loading="isFetching"
@typing="fetchAsyncData"
icon="map-marker"
:icon="canShowLocateMeButton ? null : 'map-marker'"
expanded
@select="updateSelected"
v-bind="$attrs"
@ -71,7 +71,10 @@
:title="$t('Clear address field')"
/>
</b-field>
<div class="card" v-if="selected.originId || selected.url">
<div
class="card"
v-if="!hideSelected && (selected.originId || selected.url)"
>
<div class="card-content">
<address-info
:address="selected"
@ -119,6 +122,8 @@ export default class FullAddressAutoComplete extends Mixins(
@Prop({ required: false }) userTimezone!: string;
@Prop({ required: false, default: false, type: Boolean }) disabled!: boolean;
@Prop({ required: false, default: false, type: Boolean }) hideMap!: boolean;
@Prop({ required: false, default: false, type: Boolean })
hideSelected!: boolean;
addressModalActive = false;

View file

@ -5,33 +5,48 @@
:placeholder="$t('Filter by profile or group name')"
v-model="actorFilter"
/>
<b-radio-button
v-model="selectedActor"
:native-value="availableActor"
class="list-item"
v-for="availableActor in actualFilteredAvailableActors"
:key="availableActor.id"
<transition-group
tag="ul"
class="grid grid-cols-1 gap-y-3 m-5 max-w-md mx-auto"
enter-active-class="duration-300 ease-out"
enter-from-class="transform opacity-0"
enter-to-class="opacity-100"
leave-active-class="duration-200 ease-in"
leave-from-class="opacity-100"
leave-to-class="transform opacity-0"
>
<div class="media" dir="auto">
<figure class="image is-48x48" v-if="availableActor.avatar">
<img
class="media-left is-rounded"
:src="availableActor.avatar.url"
alt=""
/>
</figure>
<b-icon
class="media-left"
v-else
size="is-large"
icon="account-circle"
<li
class="relative focus-within:shadow-lg"
v-for="availableActor in actualFilteredAvailableActors"
:key="availableActor.id"
>
<input
class="sr-only peer"
type="radio"
:value="availableActor"
name="availableActors"
v-model="selectedActor"
:id="`availableActor-${availableActor.id}`"
/>
<div class="media-content">
<h3>{{ availableActor.name }}</h3>
<small>{{ `@${availableActor.preferredUsername}` }}</small>
</div>
</div>
</b-radio-button>
<label
class="flex flex-wrap p-3 bg-white border border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50 peer-checked:ring-primary peer-checked:ring-2 peer-checked:border-transparent"
:for="`availableActor-${availableActor.id}`"
>
<figure class="image is-48x48" v-if="availableActor.avatar">
<img
class="image is-rounded"
:src="availableActor.avatar.url"
alt=""
/>
</figure>
<b-icon v-else size="is-large" icon="account-circle" />
<div>
<h3>{{ availableActor.name }}</h3>
<small>{{ `@${availableActor.preferredUsername}` }}</small>
</div>
</label>
</li>
</transition-group>
</div>
</template>
<script lang="ts">
@ -51,6 +66,13 @@ import { MemberRole } from "@/types/enums";
groupMemberships: {
query: LOGGED_USER_MEMBERSHIPS,
update: (data) => data.loggedUser.memberships,
variables() {
return {
page: 1,
limit: 10,
membershipName: this.actorFilter,
};
},
},
identities: IDENTITIES,
currentActor: CURRENT_ACTOR_CLIENT,

View file

@ -1,5 +1,8 @@
<template>
<div class="organizer-picker" v-if="selectedActor">
<div
class="bg-white border border-gray-300 rounded-lg cursor-pointer"
v-if="selectedActor"
>
<!-- If we have a current actor (inline) -->
<div
v-if="inline && selectedActor.id"
@ -46,7 +49,11 @@
/>
<b-icon v-else size="is-large" icon="account-circle" />
</span>
<b-modal :active.sync="isComponentModalActive" has-modal-card>
<b-modal
:active.sync="isComponentModalActive"
has-modal-card
:close-button-aria-label="$t('Close')"
>
<div class="modal-card">
<header class="modal-card-head">
<p class="modal-card-title">{{ $t("Pick a profile or a group") }}</p>
@ -61,42 +68,61 @@
/>
</div>
<div class="column contact-picker">
<div v-if="isSelectedActorAGroup && actorMembers.length > 0">
<div v-if="isSelectedActorAGroup">
<p>{{ $t("Add a contact") }}</p>
<b-input
:placeholder="$t('Filter by name')"
v-model="contactFilter"
:value="contactFilter"
@input="debounceSetFilterByName"
dir="auto"
/>
<p
class="field"
v-for="actor in filteredActorMembers"
:key="actor.id"
>
<b-checkbox v-model="actualContacts" :native-value="actor.id">
<div class="media">
<div class="media-left">
<figure class="image is-48x48" v-if="actor.avatar">
<img
class="image is-rounded"
:src="actor.avatar.url"
:alt="actor.avatar.alt"
<div v-if="actorMembers.length > 0">
<p
class="field"
v-for="actor in filteredActorMembers"
:key="actor.id"
>
<b-checkbox
v-model="actualContacts"
:native-value="actor.id"
>
<div class="media">
<div class="media-left">
<figure class="image is-48x48" v-if="actor.avatar">
<img
class="image is-rounded"
:src="actor.avatar.url"
:alt="actor.avatar.alt"
/>
</figure>
<b-icon
v-else
size="is-large"
icon="account-circle"
/>
</figure>
<b-icon v-else size="is-large" icon="account-circle" />
</div>
<div class="media-content" v-if="actor.name">
<p class="is-4">{{ actor.name }}</p>
<p class="is-6 has-text-grey-dark">
</div>
<div class="media-content" v-if="actor.name">
<p class="is-4">{{ actor.name }}</p>
<p class="is-6 has-text-grey-dark">
{{ `@${usernameWithDomain(actor)}` }}
</p>
</div>
<div class="media-content" v-else>
{{ `@${usernameWithDomain(actor)}` }}
</p>
</div>
</div>
<div class="media-content" v-else>
{{ `@${usernameWithDomain(actor)}` }}
</div>
</div>
</b-checkbox>
</p>
</b-checkbox>
</p>
</div>
<div
v-else-if="
actorMembers.length === 0 && contactFilter.length > 0
"
>
<empty-content icon="account-multiple" :inline="true">
{{ $t("No group member found") }}
</empty-content>
</div>
</div>
<div v-else class="content has-text-grey-dark has-text-centered">
<p>{{ $t("Your profile will be shown as contact.") }}</p>
@ -118,14 +144,16 @@ import { Component, Prop, Vue, Watch } from "vue-property-decorator";
import { IMember } from "@/types/actor/member.model";
import { IActor, IGroup, IPerson, usernameWithDomain } from "../../types/actor";
import OrganizerPicker from "./OrganizerPicker.vue";
import EmptyContent from "../Utils/EmptyContent.vue";
import {
CURRENT_ACTOR_CLIENT,
IDENTITIES,
LOGGED_USER_MEMBERSHIPS,
PERSON_GROUP_MEMBERSHIPS,
} from "../../graphql/actor";
import { Paginate } from "../../types/paginate";
import { GROUP_MEMBERS } from "@/graphql/member";
import { ActorType, MemberRole } from "@/types/enums";
import debounce from "lodash/debounce";
const MEMBER_ROLES = [
MemberRole.CREATOR,
@ -135,16 +163,17 @@ const MEMBER_ROLES = [
];
@Component({
components: { OrganizerPicker },
components: { OrganizerPicker, EmptyContent },
apollo: {
members: {
query: GROUP_MEMBERS,
variables() {
return {
name: usernameWithDomain(this.selectedActor),
groupName: usernameWithDomain(this.selectedActor),
page: this.membersPage,
limit: 10,
roles: MEMBER_ROLES.join(","),
name: this.contactFilter,
};
},
update: (data) => data.group.members,
@ -155,13 +184,17 @@ const MEMBER_ROLES = [
},
},
currentActor: CURRENT_ACTOR_CLIENT,
userMemberships: {
query: LOGGED_USER_MEMBERSHIPS,
variables: {
page: 1,
limit: 100,
personMemberships: {
query: PERSON_GROUP_MEMBERSHIPS,
variables() {
return {
id: this.currentActor?.id,
page: 1,
limit: 10,
groupId: this.$route.query?.actorId,
};
},
update: (data) => data.loggedUser.memberships,
update: (data) => data.person.memberships,
},
identities: IDENTITIES,
},
@ -171,6 +204,9 @@ export default class OrganizerPickerWrapper extends Vue {
@Prop({ default: true, type: Boolean }) inline!: boolean;
@Prop({ type: Array, required: false, default: () => [] })
contacts!: IActor[];
currentActor!: IPerson;
identities!: IPerson[];
@ -181,13 +217,17 @@ export default class OrganizerPickerWrapper extends Vue {
usernameWithDomain = usernameWithDomain;
@Prop({ type: Array, required: false, default: () => [] })
contacts!: IActor[];
members: Paginate<IMember> = { elements: [], total: 0 };
membersPage = 1;
userMemberships: Paginate<IMember> = { elements: [], total: 0 };
personMemberships: Paginate<IMember> = { elements: [], total: 0 };
data(): Record<string, unknown> {
return {
debounceSetFilterByName: debounce(this.setContactFilter, 1000),
};
}
get actualContacts(): (string | undefined)[] {
return this.contacts.map(({ id }) => id);
@ -200,15 +240,17 @@ export default class OrganizerPickerWrapper extends Vue {
);
}
@Watch("userMemberships")
setContactFilter(contactFilter: string) {
this.contactFilter = contactFilter;
}
@Watch("personMemberships")
setInitialActor(): void {
if (this.$route.query?.actorId) {
const actorId = this.$route.query?.actorId as string;
const actor = this.userMemberships.elements.find(
({ parent: { id }, role }) =>
actorId === id && MEMBER_ROLES.includes(role)
)?.parent as IActor;
this.selectedActor = actor;
if (
this.personMemberships?.elements[0]?.parent?.id ===
this.$route.query?.actorId
) {
this.selectedActor = this.personMemberships?.elements[0]?.parent;
}
}
@ -250,7 +292,7 @@ export default class OrganizerPickerWrapper extends Vue {
actor.preferredUsername.toLowerCase(),
actor.name?.toLowerCase(),
actor.domain?.toLowerCase(),
].some((match) => match?.includes(this.contactFilter.toLowerCase()));
];
});
}

View file

@ -190,7 +190,7 @@ export default class ShareEventModal extends Vue {
}
get mastodonShareUrl(): string {
return `https://toot.karamoff.dev/?text=${encodeURIComponent(
return `https://toot.kytta.dev/?text=${encodeURIComponent(
this.basicTextToEncode
)}`;
}

View file

@ -21,7 +21,7 @@
maxlength="20"
maxtags="10"
:placeholder="$t('Eg: Stockholm, Dance, Chess…')"
@typing="getFilteredTags"
@typing="debouncedGetFilteredTags"
:id="id"
dir="auto"
>
@ -33,6 +33,7 @@ import { Component, Prop, Vue } from "vue-property-decorator";
import differenceBy from "lodash/differenceBy";
import { ITag } from "../../types/tag.model";
import { FILTER_TAGS } from "@/graphql/tags";
import debounce from "lodash/debounce";
@Component({
apollo: {
@ -63,6 +64,12 @@ export default class TagInput extends Vue {
return `tag-input-${TagInput.componentId}`;
}
data(): Record<string, unknown> {
return {
debouncedGetFilteredTags: debounce(this.getFilteredTags, 200),
};
}
async getFilteredTags(text: string): Promise<void> {
this.text = text;
await this.$apollo.queries.tags.refetch();

View file

@ -49,7 +49,7 @@
<a
rel="external"
hreflang="en"
href="https://framagit.org/framasoft/mobilizon/blob/master/LICENSE"
href="https://framagit.org/framasoft/mobilizon/blob/main/LICENSE"
>
{{ $t("License") }}
</a>

View file

@ -31,11 +31,11 @@
</span>
</div>
</div>
<div class="content mb-2" dir="auto" v-html="group.summary" />
<div class="card-custom-footer">
<div class="mb-2 line-clamp-3" dir="auto" v-html="group.summary" />
<div>
<inline-address
class="has-text-grey-dark"
v-if="group.physicalAddress"
v-if="group.physicalAddress && addressFullName(group.physicalAddress)"
:physicalAddress="group.physicalAddress"
/>
<p class="has-text-grey-dark">
@ -61,6 +61,7 @@ import { displayName, IGroup, usernameWithDomain } from "@/types/actor";
import LazyImageWrapper from "@/components/Image/LazyImageWrapper.vue";
import RouteName from "../../router/name";
import InlineAddress from "@/components/Address/InlineAddress.vue";
import { addressFullName } from "@/types/address.model";
@Component({
components: {
@ -76,6 +77,8 @@ export default class GroupCard extends Vue {
usernameWithDomain = usernameWithDomain;
displayName = displayName;
addressFullName = addressFullName;
}
</script>
<style lang="scss" scoped>

View file

@ -1,57 +1,65 @@
<template>
<div class="media">
<div class="media-content">
<div class="content">
<i18n
tag="p"
path="You have been invited by {invitedBy} to the following group:"
>
<b slot="invitedBy">{{ member.invitedBy.name }}</b>
</i18n>
</div>
<div class="media subfield">
<div class="media-left">
<figure class="image is-48x48" v-if="member.parent.avatar">
<img class="is-rounded" :src="member.parent.avatar.url" alt="" />
</figure>
<b-icon v-else size="is-large" icon="account-group" />
<div class="card">
<div class="card-content media">
<div class="media-content">
<div class="content">
<i18n
tag="p"
path="You have been invited by {invitedBy} to the following group:"
>
<b slot="invitedBy">{{ member.invitedBy.name }}</b>
</i18n>
</div>
<div class="media-content">
<div class="level">
<div class="level-left">
<div class="level-item">
<router-link
:to="{
name: RouteName.GROUP,
params: {
preferredUsername: usernameWithDomain(member.parent),
},
}"
>
<h3>{{ member.parent.name }}</h3>
<p class="is-6 has-text-grey">
<span v-if="member.parent.domain">
{{
`@${member.parent.preferredUsername}@${member.parent.domain}`
}}
</span>
<span v-else>{{
`@${member.parent.preferredUsername}`
}}</span>
</p>
</router-link>
<div class="media subfield">
<div class="media-left">
<figure class="image is-48x48" v-if="member.parent.avatar">
<img class="is-rounded" :src="member.parent.avatar.url" alt="" />
</figure>
<b-icon v-else size="is-large" icon="account-group" />
</div>
<div class="media-content">
<div class="level">
<div class="level-left">
<div class="level-item mr-3">
<router-link
:to="{
name: RouteName.GROUP,
params: {
preferredUsername: usernameWithDomain(member.parent),
},
}"
>
<h3 class="is-size-5">{{ member.parent.name }}</h3>
<p class="is-size-7 has-text-grey-dark">
<span v-if="member.parent.domain">
{{
`@${member.parent.preferredUsername}@${member.parent.domain}`
}}
</span>
<span v-else>{{
`@${member.parent.preferredUsername}`
}}</span>
</p>
</router-link>
</div>
</div>
</div>
<div class="level-right">
<div class="level-item">
<b-button type="is-success" @click="$emit('accept', member.id)">
{{ $t("Accept") }}
</b-button>
</div>
<div class="level-item">
<b-button type="is-danger" @click="$emit('reject', member.id)">
{{ $t("Decline") }}
</b-button>
<div class="level-right">
<div class="level-item">
<b-button
type="is-success"
@click="$emit('accept', member.id)"
>
{{ $t("Accept") }}
</b-button>
</div>
<div class="level-item">
<b-button
type="is-danger"
@click="$emit('reject', member.id)"
>
{{ $t("Decline") }}
</b-button>
</div>
</div>
</div>
</div>
@ -82,4 +90,7 @@ export default class InvitationCard extends Vue {
background: lighten($primary, 40%);
padding: 10px;
}
h3 {
color: $violet-3;
}
</style>

View file

@ -1,5 +1,5 @@
<template>
<section v-if="invitations && invitations.length > 0">
<section class="card my-3" v-if="invitations && invitations.length > 0">
<InvitationCard
v-for="member in invitations"
:key="member.id"
@ -13,8 +13,9 @@
import { ACCEPT_INVITATION, REJECT_INVITATION } from "@/graphql/member";
import { Component, Prop, Vue } from "vue-property-decorator";
import InvitationCard from "@/components/Group/InvitationCard.vue";
import { LOGGED_USER_MEMBERSHIPS } from "@/graphql/actor";
import { PERSON_STATUS_GROUP } from "@/graphql/actor";
import { IMember } from "@/types/actor/member.model";
import { IGroup, IPerson, usernameWithDomain } from "@/types/actor";
@Component({
components: {
@ -26,18 +27,25 @@ export default class Invitations extends Vue {
async acceptInvitation(id: string): Promise<void> {
try {
const { data } = await this.$apollo.mutate<{ acceptInvitation: IMember }>(
{
mutation: ACCEPT_INVITATION,
variables: {
id,
},
refetchQueries: [{ query: LOGGED_USER_MEMBERSHIPS }],
}
);
if (data) {
this.$emit("accept-invitation", data.acceptInvitation);
}
await this.$apollo.mutate<{ acceptInvitation: IMember }>({
mutation: ACCEPT_INVITATION,
variables: {
id,
},
refetchQueries({ data }) {
const profile = data?.acceptInvitation?.actor as IPerson;
const group = data?.acceptInvitation?.parent as IGroup;
if (profile && group) {
return [
{
query: PERSON_STATUS_GROUP,
variables: { id: profile.id, group: usernameWithDomain(group) },
},
];
}
return [];
},
});
} catch (error: any) {
console.error(error);
if (error.graphQLErrors && error.graphQLErrors.length > 0) {
@ -48,18 +56,25 @@ export default class Invitations extends Vue {
async rejectInvitation(id: string): Promise<void> {
try {
const { data } = await this.$apollo.mutate<{ rejectInvitation: IMember }>(
{
mutation: REJECT_INVITATION,
variables: {
id,
},
refetchQueries: [{ query: LOGGED_USER_MEMBERSHIPS }],
}
);
if (data) {
this.$emit("reject-invitation", data.rejectInvitation);
}
await this.$apollo.mutate<{ rejectInvitation: IMember }>({
mutation: REJECT_INVITATION,
variables: {
id,
},
refetchQueries({ data }) {
const profile = data?.rejectInvitation?.actor as IPerson;
const group = data?.rejectInvitation?.parent as IGroup;
if (profile && group) {
return [
{
query: PERSON_STATUS_GROUP,
variables: { id: profile.id, group: usernameWithDomain(group) },
},
];
}
return [];
},
});
} catch (error: any) {
console.error(error);
if (error.graphQLErrors && error.graphQLErrors.length > 0) {

View file

@ -10,7 +10,7 @@
import { Component, Prop, Vue } from "vue-property-decorator";
import RedirectWithAccount from "@/components/Utils/RedirectWithAccount.vue";
import { FETCH_GROUP } from "@/graphql/group";
import { IGroup } from "@/types/actor";
import { displayName, IGroup } from "@/types/actor";
@Component({
components: { RedirectWithAccount },
@ -52,7 +52,7 @@ export default class JoinGroupWithAccount extends Vue {
}
get groupTitle(): undefined | string {
return this.group?.name || this.group?.preferredUsername;
return this.group && displayName(this.group);
}
sentence = this.$t(

View file

@ -117,7 +117,7 @@ import { Component, Prop, Vue, Ref } from "vue-property-decorator";
import { GroupVisibility } from "@/types/enums";
import DiasporaLogo from "../Share/DiasporaLogo.vue";
import MastodonLogo from "../Share/MastodonLogo.vue";
import TelegramLogo from "../Share/MastodonLogo.vue";
import TelegramLogo from "../Share/TelegramLogo.vue";
import { displayName, IGroup } from "@/types/actor";
@Component({
@ -177,7 +177,7 @@ export default class ShareGroupModal extends Vue {
}
get mastodonShareUrl(): string {
return `https://toot.karamoff.dev/?text=${encodeURIComponent(
return `https://toot.kytta.dev/?text=${encodeURIComponent(
this.basicTextToEncode
)}`;
}

View file

@ -142,7 +142,9 @@ export default class Map extends Vue {
}
updateDraggableMarkerPosition(e: LatLng): void {
this.updateDraggableMarkerCallback(e, this.zoom);
if (this.updateDraggableMarkerCallback) {
this.updateDraggableMarkerCallback(e, this.zoom);
}
}
updateZoom(zoom: number): void {
@ -163,7 +165,7 @@ export default class Map extends Vue {
</script>
<style lang="scss" scoped>
div.map-container {
height: 80vh;
height: 100%;
width: 100%;
.leaflet-map {

View file

@ -28,7 +28,7 @@ export default class Vue2LeafletLocateControl extends Vue {
unknown
>;
@Prop({ type: Boolean, default: true }) visible = true;
@Prop({ type: Boolean, default: true }) visible!: boolean;
ready = false;

View file

@ -52,21 +52,6 @@
>{{ $t("Create") }}</b-button
>
</b-navbar-item>
<b-navbar-item
v-if="config && config.features.koenaConnect"
class="koena"
tag="a"
href="https://mediation.koena.net/framasoft/mobilizon/"
target="_blank"
rel="noopener external"
hreflang="fr"
>
<img
src="/img/koena-a11y.svg"
width="150"
alt="Contact accessibilité"
/>
</b-navbar-item>
</template>
<template slot="end">
<b-navbar-item tag="div">
@ -82,11 +67,7 @@
tag="span"
@keyup.enter="toggleMenu"
>
<template
slot="label"
v-if="currentActor"
class="navbar-dropdown-profile"
>
<template slot="label" v-if="currentActor">
<div class="identity-wrapper">
<div>
<figure class="image is-32x32" v-if="currentActor.avatar">
@ -276,6 +257,11 @@ export default class NavBar extends Vue {
// If we don't have any identities, the user has validated their account,
// is logging for the first time but didn't create an identity somehow
if (this.identities.length === 0) {
console.debug(
"We have no identities listed for current user",
this.identities
);
console.debug("Pushing route to REGISTER_PROFILE");
try {
await this.$router.push({
name: RouteName.REGISTER_PROFILE,
@ -380,15 +366,6 @@ nav {
background-color: inherit;
}
.koena {
padding-top: 0;
padding-bottom: 0;
& > img {
max-height: 4rem;
padding-top: 0.2rem;
}
}
.identity-wrapper {
display: flex;

View file

@ -65,6 +65,7 @@
<b-modal
:active.sync="isAnonymousParticipationModalOpen"
has-modal-card
:close-button-aria-label="$t('Close')"
ref="anonymous-participation-modal"
>
<div class="modal-card">

View file

@ -9,8 +9,10 @@
:rounded="true"
style="height: 120px"
/>
<div class="title-info-wrapper has-text-grey-dark">
<h3 class="post-minimalist-title">{{ post.title }}</h3>
<div class="title-info-wrapper has-text-grey-dark px-1">
<h3 class="post-minimalist-title" :lang="post.language">
{{ post.title }}
</h3>
<p class="post-publication-date">
<b-icon icon="clock" />
<span dir="auto" class="has-text-grey-dark" v-if="isBeforeLastWeek">{{

View file

@ -179,7 +179,7 @@ export default class SharePostModal extends Vue {
}
get mastodonShareUrl(): string {
return `https://toot.karamoff.dev/?text=${encodeURIComponent(
return `https://toot.kytta.dev/?text=${encodeURIComponent(
this.basicTextToEncode
)}`;
}

View file

@ -1,7 +1,7 @@
<template>
<div class="modal-card">
<header class="modal-card-head" v-if="title">
<p class="modal-card-title">{{ title }}</p>
<h2 class="modal-card-title">{{ title }}</h2>
</header>
<section
@ -9,7 +9,7 @@
:class="{ 'is-titleless': !title }"
>
<div class="media">
<div class="media-left">
<div class="media-left hidden md:block">
<b-icon icon="alert" type="is-warning" size="is-large" />
</div>
<div class="media-content">
@ -17,7 +17,7 @@
<article class="media">
<div class="media-left">
<figure class="image is-48x48" v-if="comment.actor.avatar">
<img :src="comment.actor.avatar.url" alt="Image" />
<img :src="comment.actor.avatar.url" alt="" />
</figure>
<b-icon
class="media-left"
@ -45,12 +45,16 @@
</p>
<div class="control">
<b-input
v-model="content"
type="textarea"
@keyup.enter="confirm"
:placeholder="$t('Additional comments')"
/>
<b-field
:label="$t('Additional comments')"
label-for="additonal-comments"
>
<b-input
v-model="content"
type="textarea"
id="additonal-comments"
/>
</b-field>
</div>
<div class="control" v-if="outsideDomain">
@ -73,7 +77,12 @@
<button class="button" ref="cancelButton" @click="close">
{{ translatedCancelText }}
</button>
<button class="button is-primary" ref="confirmButton" @click="confirm">
<button
class="button is-primary"
ref="confirmButton"
@click="confirm"
@keyup.enter="confirm"
>
{{ translatedConfirmText }}
</button>
</footer>

View file

@ -45,7 +45,7 @@
</a>
<resource-dropdown
class="actions"
v-if="!inline || !preview"
v-if="!inline && !preview"
@delete="$emit('delete', resource.id)"
@move="$emit('move', resource)"
@rename="$emit('rename', resource)"

View file

@ -1,7 +1,7 @@
<template>
<div v-if="resource">
<article class="panel is-primary">
<p class="panel-heading">
<p class="panel-heading truncate">
{{
$t('Move "{resourceName}"', { resourceName: initialResource.title })
}}
@ -28,7 +28,7 @@
</a>
<template v-if="resource.children">
<a
class="panel-block"
class="panel-block flex-wrap"
v-for="element in resource.children.elements"
:class="{
clickable:
@ -37,15 +37,17 @@
:key="element.id"
@click="goDown(element)"
>
<span class="panel-icon">
<b-icon
icon="folder"
size="is-small"
v-if="element.type === 'folder'"
/>
<b-icon icon="link" size="is-small" v-else />
</span>
{{ element.title }}
<p class="truncate">
<span class="panel-icon">
<b-icon
icon="folder"
size="is-small"
v-if="element.type === 'folder'"
/>
<b-icon icon="link" size="is-small" v-else />
</span>
<span>{{ element.title }}</span>
</p>
<span v-if="element.id === initialResource.id">
<em v-if="element.type === 'folder'"> {{ $t("(this folder)") }}</em>
<em v-else> {{ $t("(this link)") }}</em>
@ -89,7 +91,7 @@
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";
import { Component, Vue, Prop, Watch } from "vue-property-decorator";
import { GET_RESOURCE } from "../../graphql/resources";
import { IResource } from "../../types/resource";
@ -119,7 +121,7 @@ export default class ResourceSelector extends Vue {
@Prop({ required: true }) username!: string;
resource: IResource | undefined = this.initialResource.parent;
resource: IResource | undefined = undefined;
RESOURCES_PER_PAGE = 10;
@ -131,6 +133,20 @@ export default class ResourceSelector extends Vue {
}
}
data() {
return {
resource: this.initialResource?.parent,
};
}
@Watch("initialResource")
updateResourceFromProp() {
if (this.initialResource) {
this.resource = this.initialResource?.parent;
this.$apollo.queries.resource.refetch();
}
}
updateResource(): void {
this.$emit(
"update-resource",

View file

@ -1,18 +1,22 @@
<template>
<label for="navSearchField">
<span class="visually-hidden">{{ defaultPlaceHolder }}</span>
<b-field label-for="navSearchField" class="-mt-2">
<b-input
custom-class="searchField"
:placeholder="defaultPlaceHolder"
type="search"
id="navSearchField"
icon="magnify"
type="search"
icon-clickable
rounded
custom-class="searchField"
dir="auto"
:placeholder="defaultPlaceHolder"
v-model="search"
@keyup.native.enter="enter"
/>
</label>
>
</b-input>
<template #label>
<span class="sr-only">{{ defaultPlaceHolder }}</span>
</template>
</b-field>
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
@ -47,6 +51,7 @@ label span.visually-hidden {
input.searchField {
box-shadow: none;
border-color: #b5b5b5;
border-radius: 9999px !important;
&::placeholder {
color: gray;

View file

@ -78,7 +78,7 @@
/>
<SettingMenuItem
:title="$t('Federation')"
:to="{ name: RouteName.RELAYS }"
:to="{ name: RouteName.INSTANCES }"
/>
</SettingMenuSection>
</ul>

View file

@ -17,7 +17,8 @@ span.tag {
background: $purple-3;
color: $violet-2;
text-transform: uppercase;
&::before {
&:not(.category)::before {
content: "#";
}
}

View file

@ -7,29 +7,23 @@
<b-field :label="$t('Title')">
<b-input v-model="title" />
</b-field>
<b-field :label="$t('Assigned to')">
<actor-auto-complete v-model="assignedTo" />
</b-field>
<b-field :label="$t('Assigned to')"> </b-field>
<b-field :label="$t('Due on')">
<b-datepicker v-model="dueDate" />
<b-datepicker v-model="dueDate" :first-day-of-week="firstDayOfWeek" />
</b-field>
</div>
</div>
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import { Prop, Vue } from "vue-property-decorator";
import debounce from "lodash/debounce";
import { DebouncedFunc } from "lodash";
import { SnackbarProgrammatic as Snackbar } from "buefy";
import { ITodo } from "../../types/todos";
import RouteName from "../../router/name";
import { UPDATE_TODO } from "../../graphql/todos";
import ActorAutoComplete from "../Account/ActorAutoComplete.vue";
import { IPerson } from "../../types/actor";
@Component({
components: { ActorAutoComplete },
})
export default class Todo extends Vue {
@Prop({ required: true, type: Object }) todo!: ITodo;
@ -99,5 +93,9 @@ export default class Todo extends Vue {
});
}
}
get firstDayOfWeek(): number {
return this.$dateFnsLocale?.options?.weekStartsOn || 0;
}
}
</script>

View file

@ -0,0 +1,69 @@
<template>
<nav class="flex mb-3" :aria-label="$t('Breadcrumbs')">
<ol class="inline-flex items-center space-x-1 md:space-x-3 flex-wrap">
<li
class="inline-flex items-center"
v-for="(element, index) in links"
:key="index"
:aria-current="index > 0 ? 'page' : undefined"
>
<router-link
v-if="index === 0"
:to="element"
class="inline-flex items-center text-gray-800 hover:text-gray-900"
>
{{ element.text }}
</router-link>
<div class="flex items-center" v-else-if="index === links.length - 1">
<svg
class="w-6 h-6 text-gray-400 rtl:rotate-180"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"
></path>
</svg>
<span
class="ltr:ml-1 rtl:mr-1 font-medium text-gray-600 md:ltr:ml-2 md:rtl:mr-2"
>{{ element.text }}</span
>
</div>
<div class="flex items-center" v-else>
<svg
class="w-6 h-6 text-gray-400 rtl:rotate-180"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"
></path>
</svg>
<router-link
:to="element"
class="ltr:ml-1 rtl:mr-1 font-medium text-gray-800 hover:text-gray-900 md:ltr:ml-2 md:rtl:mr-2"
>{{ element.text }}</router-link
>
</div>
</li>
<slot></slot>
</ol>
</nav>
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import { Location } from "vue-router";
type LinkElement = Location & { text: string };
@Component
export default class Breadcrumbs extends Vue {
@Prop({ type: Array, required: true }) links!: LinkElement[];
}
</script>

View file

@ -1,11 +1,15 @@
<template>
<div class="empty-content" :class="{ inline }" role="note">
<div
class="empty-content"
:class="{ inline, 'text-center': center }"
role="note"
>
<b-icon :icon="icon" size="is-large" />
<h2 class="empty-content__title">
<!-- @slot Mandatory title -->
<slot />
</h2>
<p v-show="$slots.desc">
<p v-show="$slots.desc" :class="descriptionClasses">
<!-- @slot Optional description -->
<slot name="desc" />
</p>
@ -17,7 +21,10 @@ import { Component, Prop, Vue } from "vue-property-decorator";
@Component
export default class EmptyContent extends Vue {
@Prop({ type: String, required: true }) icon!: string;
@Prop({ type: String, required: false, default: "" })
descriptionClasses!: string;
@Prop({ type: Boolean, required: false, default: false }) inline!: boolean;
@Prop({ type: Boolean, required: false, default: false }) center!: boolean;
}
</script>

View file

@ -56,7 +56,7 @@ const SHORT_TIME_FORMAT_OPTIONS: DateTimeFormatOptions = {
function formatDateTimeString(
value: string,
timeZone: string | undefined = undefined,
timeZone: string | null | undefined = undefined,
showTime = true,
dateFormat = "long"
): string {
@ -68,7 +68,7 @@ function formatDateTimeString(
options = {
...options,
...(isLongFormat ? LONG_TIME_FORMAT_OPTIONS : SHORT_TIME_FORMAT_OPTIONS),
timeZone,
timeZone: timeZone || undefined,
};
}
const format = new Intl.DateTimeFormat(locale(), options);

View file

@ -34,15 +34,6 @@ export const FETCH_PERSON = gql`
feedTokens {
token
}
organizedEvents {
total
elements {
id
uuid
title
beginsOn
}
}
}
}
${ACTOR_FRAGMENT}
@ -84,6 +75,7 @@ export const GET_PERSON = gql`
uuid
title
beginsOn
status
}
}
participations(page: $participationPage, limit: $participationLimit) {
@ -95,6 +87,7 @@ export const GET_PERSON = gql`
uuid
title
beginsOn
status
}
}
}
@ -213,7 +206,11 @@ export const LOGGED_USER_DRAFTS = gql`
alt
}
beginsOn
status
visibility
attributedTo {
...ActorFragment
}
organizerActor {
...ActorFragment
}
@ -232,10 +229,14 @@ export const LOGGED_USER_DRAFTS = gql`
`;
export const LOGGED_USER_MEMBERSHIPS = gql`
query LoggedUserMemberships($page: Int, $limit: Int) {
query LoggedUserMemberships(
$membershipName: String
$page: Int
$limit: Int
) {
loggedUser {
id
memberships(page: $page, limit: $limit) {
memberships(name: $membershipName, page: $page, limit: $limit) {
total
elements {
id
@ -340,6 +341,30 @@ export const PERSON_STATUS_GROUP = gql`
${ACTOR_FRAGMENT}
`;
export const PERSON_GROUP_MEMBERSHIPS = gql`
query PersonGroupMemberships($id: ID!, $groupId: ID!) {
person(id: $id) {
id
memberships(groupId: $groupId) {
total
elements {
id
role
parent {
...ActorFragment
}
invitedBy {
...ActorFragment
}
insertedAt
updatedAt
}
}
}
}
${ACTOR_FRAGMENT}
`;
export const GROUP_MEMBERSHIP_SUBSCRIPTION_CHANGED = gql`
subscription GroupMembershipSubscriptionChanged(
$actorId: ID!

View file

@ -70,13 +70,66 @@ export const RELAY_FOLLOWINGS = gql`
${RELAY_FRAGMENT}
`;
export const ADD_RELAY = gql`
mutation addRelay($address: String!) {
addRelay(address: $address) {
...relayFragment
export const INSTANCE_FRAGMENT = gql`
fragment InstanceFragment on Instance {
domain
hasRelay
relayAddress
followerStatus
followedStatus
eventCount
personCount
groupCount
followersCount
followingsCount
reportsCount
mediaSize
}
`;
export const INSTANCE = gql`
query instance($domain: ID!) {
instance(domain: $domain) {
...InstanceFragment
}
}
${RELAY_FRAGMENT}
${INSTANCE_FRAGMENT}
`;
export const INSTANCES = gql`
query Instances(
$page: Int
$limit: Int
$orderBy: InstancesSortFields
$direction: String
$filterDomain: String
$filterFollowStatus: InstanceFilterFollowStatus
$filterSuspendStatus: InstanceFilterSuspendStatus
) {
instances(
page: $page
limit: $limit
orderBy: $orderBy
direction: $direction
filterDomain: $filterDomain
filterFollowStatus: $filterFollowStatus
filterSuspendStatus: $filterSuspendStatus
) {
total
elements {
...InstanceFragment
}
}
}
${INSTANCE_FRAGMENT}
`;
export const ADD_INSTANCE = gql`
mutation addInstance($domain: String!) {
addInstance(domain: $domain) {
...InstanceFragment
}
}
${INSTANCE_FRAGMENT}
`;
export const REMOVE_RELAY = gql`
@ -190,3 +243,26 @@ export const SAVE_ADMIN_SETTINGS = gql`
}
${ADMIN_SETTINGS_FRAGMENT}
`;
export const ADMIN_UPDATE_USER = gql`
mutation AdminUpdateUser(
$id: ID!
$email: String
$role: UserRole
$confirmed: Boolean
$notify: Boolean
) {
adminUpdateUser(
id: $id
email: $email
role: $role
confirmed: $confirmed
notify: $notify
) {
id
email
role
confirmedAt
}
}
`;

View file

@ -18,6 +18,7 @@ export const COMMENT_FIELDS_FRAGMENT = gql`
updatedAt
deletedAt
isAnnouncement
language
}
${ACTOR_FRAGMENT}
`;

View file

@ -11,6 +11,10 @@ export const CONFIG = gql`
demoMode
countryCode
languages
eventCategories {
id
label
}
anonymous {
participation {
allowed
@ -67,7 +71,6 @@ export const CONFIG = gql`
features {
groups
eventCreation
koenaConnect
}
restrictions {
onlyAdminCanCreateGroups
@ -92,6 +95,15 @@ export const CONFIG = gql`
enabled
publicKey
}
analytics {
id
enabled
configuration {
key
value
type
}
}
}
}
`;
@ -103,6 +115,10 @@ export const CONFIG_EDIT_EVENT = gql`
features {
groups
}
eventCategories {
id
label
}
anonymous {
participation {
allowed

View file

@ -22,6 +22,8 @@ const FULL_EVENT_FRAGMENT = gql`
visibility
joinOptions
draft
language
category
picture {
id
url
@ -60,6 +62,8 @@ const FULL_EVENT_FRAGMENT = gql`
uuid
title
beginsOn
status
language
picture {
id
url
@ -153,6 +157,7 @@ export const FETCH_EVENTS = gql`
status
visibility
insertedAt
language
picture {
id
url
@ -199,10 +204,11 @@ export const CREATE_EVENT = gql`
$picture: MediaInput
$onlineAddress: String
$phoneAddress: String
$category: String
$category: EventCategory
$physicalAddress: AddressInput
$options: EventOptionsInput
$contacts: [Contact]
$metadata: [EventMetadataInput]
) {
createEvent(
organizerActorId: $organizerActorId
@ -223,6 +229,7 @@ export const CREATE_EVENT = gql`
physicalAddress: $physicalAddress
options: $options
contacts: $contacts
metadata: $metadata
) {
...FullEvent
}
@ -247,11 +254,11 @@ export const EDIT_EVENT = gql`
$phoneAddress: String
$organizerActorId: ID
$attributedToId: ID
$category: String
$category: EventCategory
$physicalAddress: AddressInput
$options: EventOptionsInput
$contacts: [Contact]
$metadata: EventMetadataInput
$metadata: [EventMetadataInput]
) {
updateEvent(
eventId: $id
@ -433,6 +440,7 @@ export const FETCH_GROUP_EVENTS = gql`
uuid
title
beginsOn
status
draft
options {
...EventOptions

View file

@ -42,6 +42,7 @@ export const LIST_GROUPS = gql`
id
uuid
title
status
beginsOn
}
total
@ -104,7 +105,9 @@ export const GROUP_FIELDS_FRAGMENTS = gql`
uuid
title
beginsOn
status
draft
language
options {
maximumAttendeeCapacity
}
@ -223,6 +226,15 @@ export const FETCH_GROUP = gql`
${RESOURCE_METADATA_BASIC_FIELDS_FRAGMENT}
`;
export const FETCH_GROUP_BY_ID = gql`
query FetchGroupById($id: ID!) {
groupById(id: $name) {
...GroupFullFields
}
}
${GROUP_FIELDS_FRAGMENTS}
`;
export const GET_GROUP = gql`
query GetGroup(
$id: ID!

View file

@ -36,7 +36,9 @@ export const HOME_USER_QUERIES = gql`
alt
}
beginsOn
status
visibility
language
organizerActor {
...ActorFragment
}
@ -76,9 +78,11 @@ export const HOME_USER_QUERIES = gql`
uuid
title
beginsOn
status
picture {
url
}
language
attributedTo {
...ActorFragment
}
@ -125,10 +129,12 @@ export const CLOSE_CONTENT = gql`
title
uuid
beginsOn
status
picture {
id
url
}
language
tags {
...TagFragment
}

View file

@ -37,16 +37,23 @@ export const ACCEPT_INVITATION = gql`
export const REJECT_INVITATION = gql`
mutation RejectInvitation($id: ID!) {
rejectInvitation(id: $id) {
id
...MemberFragment
}
}
${MEMBER_FRAGMENT}
`;
export const GROUP_MEMBERS = gql`
query ($name: String!, $roles: String, $page: Int, $limit: Int) {
group(preferredUsername: $name) {
query (
$groupName: String!
$name: String
$roles: String
$page: Int
$limit: Int
) {
group(preferredUsername: $groupName) {
...ActorFragment
members(page: $page, limit: $limit, roles: $roles) {
members(name: $name, page: $page, limit: $limit, roles: $roles) {
elements {
id
role
@ -72,13 +79,22 @@ export const UPDATE_MEMBER = gql`
`;
export const REMOVE_MEMBER = gql`
mutation RemoveMember($groupId: ID!, $memberId: ID!) {
removeMember(groupId: $groupId, memberId: $memberId) {
mutation RemoveMember($memberId: ID!, $exclude: Boolean) {
removeMember(memberId: $memberId, exclude: $exclude) {
id
}
}
`;
export const APPROVE_MEMBER = gql`
mutation ApproveMember($memberId: ID!) {
approveMember(memberId: $memberId) {
...MemberFragment
}
}
${MEMBER_FRAGMENT}
`;
export const JOIN_GROUP = gql`
mutation JoinGroup($groupId: ID!) {
joinGroup(groupId: $groupId) {

View file

@ -32,6 +32,7 @@ export const LOGGED_USER_PARTICIPATIONS = gql`
alt
}
beginsOn
status
visibility
organizerActor {
...ActorFragment
@ -98,6 +99,7 @@ export const LOGGED_USER_UPCOMING_EVENTS = gql`
alt
}
beginsOn
status
visibility
organizerActor {
...ActorFragment
@ -144,6 +146,7 @@ export const LOGGED_USER_UPCOMING_EVENTS = gql`
uuid
title
beginsOn
status
picture {
url
}

View file

@ -21,6 +21,7 @@ export const POST_FRAGMENT = gql`
publishAt
draft
visibility
language
tags {
...TagFragment
}
@ -56,6 +57,7 @@ export const POST_BASIC_FIELDS = gql`
publishAt
draft
visibility
language
picture {
id
url
@ -96,7 +98,7 @@ export const FETCH_POST = gql`
export const CREATE_POST = gql`
mutation CreatePost(
$title: String!
$body: String
$body: String!
$attributedToId: ID!
$visibility: PostVisibility
$draft: Boolean

View file

@ -2,8 +2,13 @@ import gql from "graphql-tag";
import { ACTOR_FRAGMENT } from "./actor";
export const REPORTS = gql`
query Reports($status: ReportStatus, $page: Int, $limit: Int) {
reports(status: $status, page: $page, limit: $limit) {
query Reports(
$status: ReportStatus
$domain: String
$page: Int
$limit: Int
) {
reports(status: $status, domain: $domain, page: $page, limit: $limit) {
total
elements {
id

View file

@ -11,6 +11,7 @@ export const SEARCH_EVENTS_AND_GROUPS = gql`
$tags: String
$term: String
$type: EventType
$category: String
$beginsOn: DateTime
$endsOn: DateTime
$eventPage: Int
@ -23,6 +24,7 @@ export const SEARCH_EVENTS_AND_GROUPS = gql`
tags: $tags
term: $term
type: $type
category: $category
beginsOn: $beginsOn
endsOn: $endsOn
page: $eventPage
@ -38,6 +40,7 @@ export const SEARCH_EVENTS_AND_GROUPS = gql`
id
url
}
status
tags {
...TagFragment
}
@ -108,6 +111,7 @@ export const INTERACT = gql`
title
uuid
beginsOn
status
picture {
id
url

View file

@ -209,14 +209,30 @@ export const UPDATE_ACTIVITY_SETTING = gql`
`;
export const LIST_USERS = gql`
query ListUsers($email: String, $page: Int, $limit: Int) {
users(email: $email, page: $page, limit: $limit) {
query ListUsers(
$email: String
$currentSignInIp: String
$page: Int
$limit: Int
$sort: SortableUserField
$direction: SortDirection
) {
users(
email: $email
currentSignInIp: $currentSignInIp
page: $page
limit: $limit
sort: $sort
direction: $direction
) {
total
elements {
id
email
locale
confirmedAt
currentSignInIp
currentSignInAt
disabled
actors {
...ActorFragment

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more